Applications¶
Source: src/Resource/V2/ApplicationsResource.php
Every method takes an optional ?string $organisationId. When null, the
SDK scopes the call to /self (your own resources); otherwise it scopes to
/organisations/{ownerId}.
Access¶
CRUD¶
| Method | HTTP | Path |
|---|---|---|
list(?string $organisationId = null): list<Application> |
GET | /v2/.../applications |
get(string $applicationId, ?string $organisationId = null): Application |
GET | /v2/.../applications/{id} |
create(array $data, ?string $organisationId = null): Application |
POST | /v2/.../applications |
update(string $applicationId, array $data, ?string $organisationId = null): Application |
PUT | /v2/.../applications/{id} |
delete(string $applicationId, ?string $organisationId = null): void |
DELETE | /v2/.../applications/{id} |
create() and update() take an array<string, mixed> payload. Minimal
create shape (from the source's docblock):
$client->applications->create([
'name' => 'my-app',
'deploy' => 'git', // or 'ftp', 'docker'
'instanceType' => 'node',
'instanceVariant' => '20',
'zone' => 'par',
'minInstances' => 1,
'maxInstances' => 1,
'minFlavor' => 'nano',
'maxFlavor' => 'nano',
]);
Use the Flavor and
DeployType enums to avoid magic
strings:
use CleverCloud\Sdk\Model\Enum\Flavor;
use CleverCloud\Sdk\Model\Enum\DeployType;
$client->applications->create([
'name' => 'my-app',
'deploy' => DeployType::Git->value,
'minFlavor' => Flavor::Nano->value,
// ...
]);
Lifecycle¶
public function restart(string $applicationId, ?string $organisationId = null, bool $withoutCache = false): void
public function deploy(string $applicationId, ?string $commit = null, ?string $organisationId = null): void
public function stop(string $applicationId, ?string $organisationId = null): void
| Method | HTTP | Path | Notes |
|---|---|---|---|
restart() |
POST | /v2/.../applications/{id}/instances |
?useCache=no when $withoutCache = true |
deploy() |
POST | /v2/.../applications/{id}/instances |
?commit={sha} when $commit is set |
stop() |
DELETE | /v2/.../applications/{id}/instances |
Both restart() and deploy() send an empty JSON body ({}) with
Content-Type: application/json — Clever Cloud's API requires a media
type even when there's no payload.
Git branch¶
public function setBranch(string $applicationId, string $branch, ?string $organisationId = null): void
public function branches(string $applicationId, ?string $organisationId = null): list<string>
| Method | HTTP | Path |
|---|---|---|
setBranch() |
PUT | /v2/.../applications/{id}/branch (body: {"branch": "..."}) |
branches() |
GET | /v2/.../applications/{id}/branches (response: list of strings) |
branches() returns an empty list for non-git deploy targets, or apps that
haven't been pushed yet.
Running instances¶
public function instances(string $applicationId, ?string $organisationId = null): list<array<string, mixed>>
GET /v2/.../applications/{id}/instances — raw payload, not yet mapped to
a DTO. Each entry contains id, state, flavor, commit, zone, etc.
Dependencies¶
Linked applications whose exposed env gets merged into this app.
public function dependencies(string $applicationId, ?string $organisationId = null): list<array<string, mixed>>
public function addDependency(string $applicationId, string $dependencyAppId, ?string $organisationId = null): void
public function removeDependency(string $applicationId, string $dependencyAppId, ?string $organisationId = null): void
| Method | HTTP | Path |
|---|---|---|
dependencies() |
GET | /v2/.../applications/{id}/dependencies |
addDependency() |
PUT | /v2/.../applications/{id}/dependencies/{dependencyId} |
removeDependency() |
DELETE | /v2/.../applications/{id}/dependencies/{dependencyId} |
Tags¶
public function tags(string $applicationId, ?string $organisationId = null): list<string>
public function addTag(string $applicationId, string $tag, ?string $organisationId = null): void
public function removeTag(string $applicationId, string $tag, ?string $organisationId = null): void
| Method | HTTP | Path |
|---|---|---|
tags() |
GET | /v2/.../applications/{id}/tags |
addTag() |
PUT | /v2/.../applications/{id}/tags/{tag} |
removeTag() |
DELETE | /v2/.../applications/{id}/tags/{tag} |
Exposed environment¶
Env vars exposed to apps that declare this one as a dependency.
public function exposedEnv(string $applicationId, ?string $organisationId = null): array<string, string>
public function setExposedEnv(string $applicationId, array $variables, ?string $organisationId = null): void
| Method | HTTP | Path |
|---|---|---|
exposedEnv() |
GET | /v2/.../applications/{id}/exposed_env (returns name => value map) |
setExposedEnv() |
PUT | /v2/.../applications/{id}/exposed_env (body: {"NAME": "value", ...}, {} for an empty map) |
Both directions use the API's name => value object as is.
Linked add-ons¶
public function addons(string $applicationId, ?string $organisationId = null): list<array<string, mixed>>
public function linkAddon(string $applicationId, string $addonId, ?string $organisationId = null): void
public function unlinkAddon(string $applicationId, string $addonId, ?string $organisationId = null): void
| Method | HTTP | Path |
|---|---|---|
addons() |
GET | /v2/.../applications/{id}/addons |
linkAddon() |
POST | /v2/.../applications/{id}/addons (body: the add-on id as a JSON string, "addon_...", sent as JSON (the spec declares text/plain; clever-tools sends application/json)) |
unlinkAddon() |
DELETE | /v2/.../applications/{id}/addons/{addonId} |
Build flavor¶
public function setBuildFlavor(string $applicationId, ?string $flavorName, ?string $organisationId = null): void
PUT /v2/.../applications/{id}/buildflavor, body {"flavorName": "M"}.
Pass null to clear it.
Dependents and aggregated environment¶
public function dependents(string $applicationId, ?string $organisationId = null): list<Application>
public function dependenciesEnv(string $applicationId, ?string $organisationId = null): list<array<string, mixed>>
public function addonsEnv(string $applicationId, ?string $organisationId = null): list<array<string, mixed>>
| Method | HTTP | Path | Returns |
|---|---|---|---|
dependents() |
GET | /v2/.../applications/{id}/dependents |
Applications that depend on this one |
dependenciesEnv() |
GET | /v2/.../applications/{id}/dependencies/env |
Raw [{app_id, app_name, env: [{name, value}]}] |
addonsEnv() |
GET | /v2/.../applications/{id}/addons/env |
Raw [{addon_id, addon_name, provider_id, env: [{name, value}]}] |
Replacing all tags (organisations only)¶
public function replaceTags(string $applicationId, array $tags, string $organisationId): list<string>
PUT /v2/organisations/{ownerId}/applications/{id}/tags, body
["tag", "key:value"], returns the resulting tags. The API only documents
this route for organisations, so $organisationId is required.
Application DTO¶
Source: src/Model/Application.php.
public string $id;
public string $name;
public ?string $description;
public ?string $zone;
public ?string $branch;
public ?string $ownerId;
public ?string $state; // see ApplicationState enum
public ?string $commitId;
public ?string $webhookUrl;
public ?bool $archived;
public ?bool $favourite;
public ?bool $homogeneous;
public ?bool $cancelOnPush;
public ?bool $separateBuild;
public ?bool $stickySessions;
public ?int $creationDate; // ms since epoch
public ?int $lastDeploy; // id of the latest deployment (`Deployment::$id`)
public array $vhosts; // list<Vhost>
public array $instance; // raw array — instance/scaling config
public array $deployment; // raw array — deployment config
public array $buildFlavor; // raw array — build flavor info
$state matches one of the ApplicationState enum cases. Use
ApplicationState::tryFrom($app->state) to parse safely and
isStable() / isTransient() to drive UI logic.