Simplifyd CloudSimplifyd Cloud

Projects and environments

Discover and manage projects and environments through the HTTP API.

BASE = https://api.cloud.simplifyd.com/v1/workspaces/{workspace}/projects

Use the resource's slug in each path. A project token can read its own workspace, project and environments. An environment-scoped token limits environment discovery to its assigned environment. For routes that require a session, send the signed-in session JWT as a bearer token.

Set BASE to the URL above with your workspace slug. Set PROJECT and ENV to the IDs returned by the corresponding list or create calls. The examples read credentials from SIMPLIFYD_API_TOKEN or SIMPLIFYD_SESSION_TOKEN.

Method and pathRequest and responseAccess
GET {BASE}200 OK with an array of projectsSession or project token
GET {BASE}/{project}200 OK with the projectSession or project token
POST {BASE}Send {"name":"My app"}. Returns 201 Created with the project and the first environment's ID in active_env.Session
PUT {BASE}/{project}Send {"name":"New name"}. Returns 200 OK with {"success":true}.Session
DELETE {BASE}/{project}Deletes the project and all its services. Returns 200 OK with {"success":true}.Workspace owner session
GET {BASE}/{project}/envs200 OK with an array of environmentsSession or project token
GET {BASE}/{project}/envs/{env}200 OK with the environmentSession or project token
POST {BASE}/{project}/envsSend {"name":"staging"}. Returns 201 Created with success and active_env.Session or token scoped to the whole project
PUT {BASE}/{project}/envs/{env}Send {"name":"preproduction"}. Returns 200 OK with {"success":true}.Session or project token
DELETE {BASE}/{project}/envs/{env}Deletes the environment and all its services. Returns 200 OK with {"success":true}.Workspace owner session

When creating an environment, you can include cluster with a region slug or short code. Omit it to use the default region. The region is fixed after creation. Deleting a project's last environment returns 409 Conflict.


List projects

GET {BASE}

A project token sees its scoped project. A signed-in member can list projects in the workspace.

curl --fail-with-body "$BASE" \
  -H "Authorization: Bearer $SIMPLIFYD_API_TOKEN"
const response = await fetch(`${BASE}`, {
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_API_TOKEN}`,
  },
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

200 OK.

[
  {
    "workspace": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e12",
    "name": "My app",
    "slug": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e13",
    "network_slug": "x4r9pk2",
    "envs": [
      {
        "name": "dev",
        "slug": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e14",
        "network_slug": "m3rq7"
      }
    ]
  }
]

Read a project

GET {BASE}/{project}

Use the project slug to read its configuration and environments.

curl --fail-with-body "$BASE/$PROJECT" \
  -H "Authorization: Bearer $SIMPLIFYD_API_TOKEN"
const response = await fetch(`${BASE}/${PROJECT}`, {
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_API_TOKEN}`,
  },
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

200 OK.

{
  "workspace": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e12",
  "name": "My app",
  "slug": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e13",
  "network_slug": "x4r9pk2",
  "envs": [
    {
      "name": "dev",
      "slug": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e14",
      "network_slug": "m3rq7"
    }
  ]
}

Create a project

POST {BASE}
Content-Type: application/json

Creates a project and its first environment. Use the session JWT for this request.

Body

FieldDescription
nameRequired display name.
curl --fail-with-body -X POST "$BASE" \
  -H "Authorization: Bearer $SIMPLIFYD_SESSION_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"name": "My app"}'
const response = await fetch(`${BASE}`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_SESSION_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"name": "My app"}),
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

201 Created.

{
  "workspace": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e12",
  "name": "My app",
  "slug": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e13",
  "network_slug": "x4r9pk2",
  "envs": [
    {
      "slug": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e14",
      "name": "dev"
    }
  ],
  "success": true,
  "active_project": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e13",
  "active_env": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e14",
  "created_at": "2026-01-15T12:00:00Z"
}

Use slug as the project ID and active_env as the first environment ID.


Rename a project

PUT {BASE}/{project}
Content-Type: application/json

Updates the display name. The project slug stays the same.

curl --fail-with-body -X PUT "$BASE/$PROJECT" \
  -H "Authorization: Bearer $SIMPLIFYD_SESSION_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"name": "New name"}'
const response = await fetch(`${BASE}/${PROJECT}`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_SESSION_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"name": "New name"}),
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

200 OK.

{
  "success": true
}

Delete a project

DELETE {BASE}/{project}

Permanently deletes the project and its services. Use a workspace owner session.

curl --fail-with-body -X DELETE "$BASE/$PROJECT" \
  -H "Authorization: Bearer $SIMPLIFYD_SESSION_TOKEN"
const response = await fetch(`${BASE}/${PROJECT}`, {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_SESSION_TOKEN}`,
  },
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

200 OK.

{
  "success": true
}

List environments

GET {BASE}/{project}/envs

An environment-scoped token returns only its own environment.

curl --fail-with-body "$BASE/$PROJECT/envs" \
  -H "Authorization: Bearer $SIMPLIFYD_API_TOKEN"
const response = await fetch(`${BASE}/${PROJECT}/envs`, {
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_API_TOKEN}`,
  },
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

200 OK.

[
  {
    "name": "dev",
    "slug": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e14",
    "network_slug": "m3rq7"
  }
]

Read an environment

GET {BASE}/{project}/envs/{env}

Returns the environment and its services when present.

curl --fail-with-body "$BASE/$PROJECT/envs/$ENV" \
  -H "Authorization: Bearer $SIMPLIFYD_API_TOKEN"
const response = await fetch(`${BASE}/${PROJECT}/envs/${ENV}`, {
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_API_TOKEN}`,
  },
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

200 OK.

{
  "name": "dev",
  "slug": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e14",
  "network_slug": "m3rq7"
}

Create an environment

POST {BASE}/{project}/envs
Content-Type: application/json

Use a token scoped to the whole project or a session JWT.

Body

FieldDescription
nameRequired display name.
clusterOptional region slug or short code. The region is fixed after creation.
curl --fail-with-body -X POST "$BASE/$PROJECT/envs" \
  -H "Authorization: Bearer $SIMPLIFYD_API_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"name": "staging"}'
const response = await fetch(`${BASE}/${PROJECT}/envs`, {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_API_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"name": "staging"}),
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

201 Created.

{
  "success": true,
  "active_env": "0192e7a0-55c1-7b3e-8f2d-4a1b6c9d0e14"
}

Use active_env as the environment ID in subsequent calls.


Rename an environment

PUT {BASE}/{project}/envs/{env}
Content-Type: application/json

Updates the environment display name.

curl --fail-with-body -X PUT "$BASE/$PROJECT/envs/$ENV" \
  -H "Authorization: Bearer $SIMPLIFYD_API_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"name": "preproduction"}'
const response = await fetch(`${BASE}/${PROJECT}/envs/${ENV}`, {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_API_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"name": "preproduction"}),
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

200 OK.

{
  "success": true
}

Delete an environment

DELETE {BASE}/{project}/envs/{env}

Permanently deletes the environment and its services. Use a workspace owner session.

curl --fail-with-body -X DELETE "$BASE/$PROJECT/envs/$ENV" \
  -H "Authorization: Bearer $SIMPLIFYD_SESSION_TOKEN"
const response = await fetch(`${BASE}/${PROJECT}/envs/${ENV}`, {
  method: 'DELETE',
  headers: {
    Authorization: `Bearer ${process.env.SIMPLIFYD_SESSION_TOKEN}`,
  },
});
const result = await response.json();
if (!response.ok) throw new Error(result.message ?? response.statusText);

Response

200 OK.

{
  "success": true
}

Errors

StatusWhen
400A required name is missing or the selected region cannot be used.
401The credential is missing or invalid.
403The credential is outside its scope or the caller lacks the required workspace role.
409The environment is the last one in its project.