PHPackages                             pulli/timmehosting-soap-client - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. pulli/timmehosting-soap-client

ActiveLibrary[API Development](/categories/api)

pulli/timmehosting-soap-client
==============================

ISPConfig SOAP Remote API SDK for TimmeHosting (and any ISPConfig-managed panel)

v1.2.0(3w ago)01.3k↓79.9%[1 PRs](https://github.com/the-pulli/timmehosting-soap-client/pulls)MITPHPPHP ^8.4CI passing

Since Jun 4Pushed 3w agoCompare

[ Source](https://github.com/the-pulli/timmehosting-soap-client)[ Packagist](https://packagist.org/packages/pulli/timmehosting-soap-client)[ Docs](https://github.com/the-pulli/timmehosting-soap-client)[ GitHub Sponsors](https://github.com/pulli)[ RSS](/packages/pulli-timmehosting-soap-client/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (3)Dependencies (4)Versions (5)Used By (0)

ISPConfig SOAP Remote API SDK
=============================

[](#ispconfig-soap-remote-api-sdk)

[![Latest Version on Packagist](https://camo.githubusercontent.com/ba19316976b8b26e20970a75605b60474cee3c86f3b0addbc406d7ba6b824565/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f70756c6c692f74696d6d65686f7374696e672d736f61702d636c69656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/pulli/timmehosting-soap-client)[![Tests](https://github.com/the-pulli/timmehosting-soap-client/actions/workflows/run-tests.yml/badge.svg)](https://github.com/the-pulli/timmehosting-soap-client/actions/workflows/run-tests.yml)

Thin, typed PHP SDK for the ISPConfig Remote API (SOAP). Covers every endpoint [Timme Hosting documents](https://timmehosting.de/ispconfig-api-schnittstelle-zur-automatisierung)— 236 SOAP functions across 14 resource groups — with a generic escape hatch for anything beyond.

- One SOAP session per `Client`, login lazily on first call, logout on destruct — no session juggling in user code
- Functions grouped by resource: `$client->sites`, `$client->dns`, `$client->mail`, `$client->php`, `$client->cron`, `$client->server`, …
- Backed enums for ISPConfig's magic-string fields (`y`/`n`, `active`/ `inactive`, cron type, DNS record type, backup actions)
- Generic `$client->call('soap_function_name', …)` for anything not yet wrapped — session id is injected automatically
- TLS verification on by default; flip per-instance for self-signed panels
- `\SoapClient` is injectable for tests — see `tests/ClientTest.php`
- Reference snapshot of every Timme example script archived in [`reference/timme-ispconfig-api/`](reference/timme-ispconfig-api/) so the canonical parameter shapes survive even if Timme reorganises

Installation
------------

[](#installation)

```
composer require pulli/timmehosting-soap-client
```

Requires PHP 8.4+ and `ext-soap`.

Usage
-----

[](#usage)

The examples below are a quick tour — for a detailed walkthrough of **every typed function** grouped by resource (with quirks, defaults, and enum usage for each), see **[USAGE.md](USAGE.md)**.

```
use Pulli\TimmeSoapClient\Client;
use Pulli\TimmeSoapClient\Enums\{
    Toggle, Status, CronType, DnsRecordType, CrudOp, BackupAction,
};

// Construct explicitly:
$client = new Client(
    panel:     'sXXqXX',          // panel subdomain: sXXqXX.meinserver.io
    apiUser:   'pulli_server',    // ISPConfig System → Remote Users
    apiKey:    $remoteUserSecret,
    verifyTls: true,
);

// Or from env vars (TIMME_SOAP_PANEL, TIMME_SOAP_USER, TIMME_SOAP_KEY,
// optional TIMME_SOAP_VERIFY_TLS=0):
$client = Client::fromEnv();

// PHP / FPM
$client->php->restart(serverId: 1, serverPhpId: 11);
$client->php->versions(serverId: 1);

// Sites — vhosts
$site = $client->sites->findByDomain('example.com');
$client->sites->setWebFolder($clientId, $domainId, 'myapp/current/public');
$client->sites->setNginxDirectives($clientId, $domainId, $directives);
$client->sites->setStatus($domainId, Status::Inactive);
$client->sites->recreateVhost($domainId);

// Sites — backups
$backups = $client->sites->backupList($domainId);
$url     = $client->sites->backupDownloadLink($backups[0]['backup_id']);
$client->sites->instantBackup(serverId: 1, domainId: $domainId);

// Clients
$client->clients->findByUsername('pulli_main');
$gid = $client->clients->groupId($clientId);
$client->clients->changePassword($clientId, $newSecret);

// Cron — type-safe enums
$client->cron->add(
    clientId: 2,
    domainId: 5,
    command:  '/opt/php-8.5/bin/php /var/www/.../artisan schedule:run',
    type:     CronType::Full,     // Url | Full | Chrooted
    active:   Toggle::Yes,
);

// Supervisor (jobs must be created in the panel first; this restarts them)
$client->supervisor->restart($jobId);

// DNS — common record types typed; long-tail via record(type, op, …)
$client->dns->addA($clientId, [...]);
$client->dns->record(DnsRecordType::Srv, CrudOp::Add, $clientId, [...]);
$client->dns->setZoneStatus($zoneId, Status::Active);

// Mail
$client->mail->addDomain($clientId, [...]);
$client->mail->setDomainStatus($domainId, Status::Active);
$client->mail->addUserFilter($clientId, [...]);
$client->mail->userBackupDownloadLink($backupId);

// Anything not yet wrapped — session id is injected automatically:
$client->call('sites_web_aliasdomain_add', $clientId, $params);
```

### Known ISPConfig quirks worth knowing

[](#known-ispconfig-quirks-worth-knowing)

- DB names are auto-prefixed with `c` by ISPConfig — pass the suffix you want and read the returned record to learn the final full name.
- `sites_redis_add` has the unusual signature `($session, $params)` — no `$client_id` argument. The SDK's `$client->sites->addRedis($params)`honours this.
- `fastcgi_php_version` is a four-token colon-joined string: `:::`.
- `client_update` can only be called by a reseller API user, not a plain Remote User.
- `sites_supervisor_add` is **not** exposed via the Remote API — supervisor jobs must be created in the panel UI; the SDK restarts existing ones.
- `server_f2b_blacklist`/`_whitelist` only expose `add`, `delete`, and `_get_all` — no single-record `get` and no `update`.

Backed enums for the ISPConfig magic-string fields
--------------------------------------------------

[](#backed-enums-for-the-ispconfig-magic-string-fields)

Two flavours — see [USAGE.md → Enums](USAGE.md#enums) for the full table.

**Method-argument enums** (`Pulli\TimmeSoapClient\Enums\*`) — passed directly to wrapper methods:

EnumValuesUsed by`Toggle``Yes='y'`, `No='n'` (+ `fromBool()`)Cron `active``Status``Active='active'`, `Inactive='inactive'` (+ `fromBool()`)`*_set_status``CronType``Url`, `Full`, `Chrooted`Cron `type``DnsRecordType``A`, `Aaaa`, `Alias`, `Cname`, `Hinfo`, `Mx`, `Ns`, `Ptr`, `Rp`, `Soa`, `Srv`, `Txt`, `Ds`, `Dnskey`, `Caa`, `Tlsa`, `Sshfp``Dns::record(...)``CrudOp``Get`, `Add`, `Update`, `Delete``Dns::record(...)``BackupAction``BackupDownload`, `BackupDownloadLink`, `BackupRestore``Sites::backup()`, `Mail::userBackup()`**Param-value enums** (`Pulli\TimmeSoapClient\Enums\Params\*`) — pass via `->value` when building `$params` arrays:

EnumISPConfig fieldValues`IpType``server_ip.ip_type``IPv4`, `IPv6``VhostType``web_domain.type``Vhost`, `Alias`, `Subdomain`, `VhostAlias`, `VhostSubdomain``WebSubdomain``web_domain.subdomain``None`, `Www`, `Wildcard` (`*`)`PhpHandler``web_domain.php``Disabled` (`no`), `FastCgi`, `PhpFpm`, `Mod``DatabaseType``sites_database.type``Mysql`, `Postgresql``ChrootMode``shell_user.chroot``None` (`no`), `Jailkit`, `SshChroot``DnsZoneType``dns_zone.type``Master`, `Slave` (uppercase!)`SslAction``web_domain.ssl_action``Create`, `Save`, `Delete` (`del`)Resource coverage
-----------------

[](#resource-coverage)

See [CHANGELOG.md](CHANGELOG.md) for the per-resource endpoint list. Every SOAP function on has a typed accessor.

Testing
-------

[](#testing)

```
composer test
```

The pre-commit hook (`.githooks/pre-commit`, auto-activated by `composer install`) runs Pint + Pest before every commit.

License
-------

[](#license)

MIT — see [LICENSE.md](LICENSE.md).

###  Health Score

47

—

FairBetter than 93% of packages

Maintenance95

Actively maintained with recent releases

Popularity21

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~13 days

Total

3

Last Release

24d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c14e16040b5b84e5c91af8c7a39480567d951bfc27673f97d9c75480dbe20b5e?d=identicon)[pulli](/maintainers/pulli)

---

Top Contributors

[![the-pulli](https://avatars.githubusercontent.com/u/112799107?v=4)](https://github.com/the-pulli "the-pulli (7 commits)")

---

Tags

sdksoappulliISPConfigtimmehostingtimmehosting-soap-client

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/pulli-timmehosting-soap-client/health.svg)

```
[![Health](https://phpackages.com/badges/pulli-timmehosting-soap-client/health.svg)](https://phpackages.com/packages/pulli-timmehosting-soap-client)
```

###  Alternatives

[appwilio/cdek-sdk

CDEK API SDK (cdek.ru)

406.5k](/packages/appwilio-cdek-sdk)[mocking-magician/coinbase-pro-sdk

Library for coinbase pro API calls

223.2k](/packages/mocking-magician-coinbase-pro-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
