API-ul pentru medii
Endpoint-urile /v1/projects și /v1/environments de pe ai.codai.ro, cu exemple de cereri și răspunsuri.
URL de bază https://ai.codai.ro, Authorization: Bearer codai_…, JSON la intrare și la ieșire. Starea live a daemonului (online, porturi care ascultă, stare git, lock-uri, clienți atașați) este servită de relay la https://relay.codai.ro/v1/environments/{id}/status, cu aceeași cheie.
Convenții, toate preluate din gateway:
- Rândurile de proiect și de mediu sunt returnate în camelCase, așa cum sunt stocate; corpurile cererilor și listele de membri/secrete sunt în snake_case.
- Un proiect sau un mediu pe care nu îl poți vedea răspunde
404(niciodată403), ca id-urile să nu poată fi enumerate. O încălcare de rol pe ceva ce poți vedea răspunde403. - Erorile folosesc anvelopa gateway-ului
{ "error": { "message", "type", "code" } }; erorile de validare sunt400 bad_request. - Fiecare modificare adaugă un rând în
environment_events.
Endpoint-uri
| Metodă | Cale | Rol minim | Observații |
|---|---|---|---|
GET | /v1/projects | — | Ale tale plus ale organizațiilor tale, cele mai noi primele |
POST | /v1/projects | — | org_id cere owner/admin de organizație |
GET | /v1/projects/{id} | vizibil | Proiectul + toate mediile lui |
PATCH | /v1/projects/{id} | proprietar de proiect / admin de organizație | Slug-ul nu se poate schimba |
DELETE | /v1/projects/{id} | proprietar de proiect / admin de organizație | 409 project_has_environments până când toate sunt distruse |
GET | /v1/environments | — | ?project_id=, ?for_user_id=me |
POST | /v1/environments | proiect vizibil | Furnizorii administrați sunt activați per cont (403) |
GET | /v1/environments/{id} | viewer | Mediu + rol + izolare + membri + porturi + ultimele 20 de evenimente |
PATCH | /v1/environments/{id} | maintainer | name, idle_timeout_minutes |
POST | /v1/environments/{id}/start · stop · archive | maintainer | 409 invalid_transition |
POST | /v1/environments/{id}/destroy | owner | |
POST | /v1/environments/{id}/enroll-token | maintainer | Doar BYO (409 not_byo) |
POST | /v1/environments/enroll | token | Apelat de codaid, fără cheie API |
GET | /v1/environments/{id}/members | viewer | |
POST | /v1/environments/{id}/members | maintainer | owner cere owner |
PUT | /v1/environments/{id}/members/me/ssh-key | developer | Propria ta cheie |
PATCH · DELETE | /v1/environments/{id}/members/{userId} | maintainer | Ca să pleci singur nu ai nevoie de rol |
GET | /v1/environments/{id}/ports | viewer | Porturi publicate |
PUT · DELETE | /v1/environments/{id}/ports/{port} | developer | public cere maintainer |
GET | /v1/environments/{id}/secrets | developer | Doar nume |
PUT · DELETE | /v1/environments/{id}/secrets/{name} | maintainer | Nume în stil ENV_STYLE |
Creează un proiect
curl https://ai.codai.ro/v1/projects \
-H "Authorization: Bearer $CODAI_API_KEY" -H "Content-Type: application/json" \
-d '{ "name": "brivio", "repo_url": "https://github.com/acme/brivio", "isolation": "shared_vm" }'201:
{
"project": {
"id": "2b6d1c0e-4f3a-4b9c-8d7e-1a2b3c4d5e6f",
"ownerUserId": "5f0c…", "orgId": null,
"name": "brivio", "slug": "brivio",
"repoUrl": "https://github.com/acme/brivio", "defaultBranch": "main", "devcontainerPath": null,
"isolation": "shared_vm", "settings": {},
"createdAt": "2026-09-25T09:00:00.000Z", "updatedAt": "2026-09-25T09:00:00.000Z"
}
}slug are implicit valoarea numelui transformat în slug și trebuie să fie unic între proiectele tale (409 slug_taken). isolation este shared_vm (implicit), container sau vm_per_dev.
Creează un mediu
| Câmp | Tip | Observații |
|---|---|---|
project_id | uuid | Obligatoriu. |
provider | byo · openstack · hetzner | Obligatoriu. local este rezervat. |
name | șir ≤ 120 | Obligatoriu, cu excepția proiectelor vm_per_dev (implicit <proiect> — <tu>). |
slug | ^[a-z0-9][a-z0-9-]{1,38}[a-z0-9]$ | Implicit <slug-proiect>-<4 caractere aleatorii>; unic la nivel global (409 slug_taken). |
size | small · medium · large | Doar administrate; implicit small. |
region | șir | Doar administrate; implicit eu-east-1 (OpenStack) sau nbg1 (Hetzner). |
idle_timeout_minutes | 5–1440 | Implicit 30. |
budget_micro_eur | întreg ≥ 0 sau null | Doar administrate; plafon lunar de calcul. |
curl https://ai.codai.ro/v1/environments \
-H "Authorization: Bearer $CODAI_API_KEY" -H "Content-Type: application/json" \
-d '{ "project_id": "2b6d1c0e-4f3a-4b9c-8d7e-1a2b3c4d5e6f", "name": "dev-box", "provider": "byo" }'201:
{
"environment": {
"id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c",
"projectId": "2b6d1c0e-4f3a-4b9c-8d7e-1a2b3c4d5e6f",
"ownerUserId": "5f0c…", "orgId": null, "forUserId": null, "for_user_id": null,
"isolation": "shared_vm",
"name": "dev-box", "slug": "brivio-k3xq",
"provider": "byo", "region": null, "size": null,
"state": "pending", "stateReason": null,
"deviceId": null, "providerRef": null, "publicIp": null,
"idleTimeoutMinutes": 30, "lastActivityAt": null, "startedAt": null, "stoppedAt": null,
"hourlyRateMicroEur": null, "includedHoursUsedSeconds": 0,
"metadata": {},
"createdAt": "2026-09-25T09:01:00.000Z", "updatedAt": "2026-09-25T09:01:00.000Z"
}
}Un furnizor administrat pornește în creating, cu size, region, hourlyRateMicroEur (de ex. 30000 pentru small) și metadata.budget_micro_eur completate. Într-un proiect vm_per_dev, un al doilea mediu activ primește răspunsul:
{
"error": { "message": "You already have an environment in this vm_per_dev project.", "type": "invalid_request_error", "code": "already_has_env" },
"environment_id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c"
}Înrolează o mașină BYO
curl -X POST https://ai.codai.ro/v1/environments/$ENV_ID/enroll-token -H "Authorization: Bearer $CODAI_API_KEY"{ "token": "codai_env_4Qm9…32 chars", "expires_at": "2026-09-25T09:31:00.000Z", "environment_id": "9c1e5a7b-…" }Tokenul este returnat o singură dată, se stochează doar ca hash SHA-256, e valabil 30 de minute, iar o nouă generare îl înlocuiește. codaid îl prezintă la POST /v1/environments/enroll:
{ "token": "codai_env_…", "device_id": "1c2f…-uuid", "daemon_version": "0.3.3", "os": "linux", "arch": "x86_64" }→ { "environment_id": "9c1e…", "relay_url": "wss://relay.codai.ro" } (mașinile administrate primesc în plus un api_key afișat o singură dată). Un token necunoscut, folosit sau expirat înseamnă 401 invalid_api_key; o stare care nu permite înrolarea înseamnă 409 not_enrollable.
Acțiuni de ciclu de viață
curl -X POST https://ai.codai.ro/v1/environments/$ENV_ID/stop -H "Authorization: Bearer $CODAI_API_KEY"{ "environment": { "id": "9c1e…", "state": "stopping", "stateReason": "user_request", "…": "…" }, "from": "running", "to": "stopping" }Tranzițiile permise sunt pe pagina mediilor administrate; mediile BYO acceptă doar archive și destroy.
Membri
curl https://ai.codai.ro/v1/environments/$ENV_ID/members \
-H "Authorization: Bearer $CODAI_API_KEY" -H "Content-Type: application/json" \
-d '{ "email": "[email protected]", "role": "developer" }'201 → { "member": { "user_id": "7a1c09e4-…", "role": "developer", "linux_username": "u-7a1c09e4", "port_range_start": 30100 } }. GET …/members întoarce { "members": [{ "user_id", "role", "email", "name", "linux_username", "port_range_start", "ssh_public_key": true, "provisioned_at", "created_at" }] } — ssh_public_key este doar un indicator. Erori: 404 (niciun cont cu acel e-mail), 409 already_member, 409 vm_per_dev_single_member, 409 last_owner.
Înregistrează-ți propria cheie:
curl -X PUT https://ai.codai.ro/v1/environments/$ENV_ID/members/me/ssh-key \
-H "Authorization: Bearer $CODAI_API_KEY" -H "Content-Type: application/json" \
-d '{ "public_key": "ssh-ed25519 AAAAC3Nza… ana@laptop" }'→ { "user_id": "…", "ssh_public_key": true }.
Porturi
PUT /v1/environments/{id}/ports/{port} cu { "visibility": "owner" | "org" | "authenticated" | "public", "label"?: șir ≤ 64, "protocol"?: "http" } întoarce { "port": { "id", "environmentId", "port", "protocol", "label", "visibility", "openedByUserId", "createdAt", "updatedAt" } }. Vezi porturi și preview-uri.
Secrete
curl -X PUT https://ai.codai.ro/v1/environments/$ENV_ID/secrets/DATABASE_URL \
-H "Authorization: Bearer $CODAI_API_KEY" -H "Content-Type: application/json" \
-d '{ "value": "postgres://…" }'201 → { "name": "DATABASE_URL", "updated": false } (200 și true la înlocuire). Valorile sunt sigilate prin criptare de tip envelope (≤ 64 KB) și nu sunt returnate niciodată; GET …/secrets listează { "name", "created_by_user_id", "created_at", "updated_at" }. Injectarea secretelor în shell-urile din mediu vine în curând; azi se folosește doar CODAI_GIT_TOKEN, pentru clonare (vezi echipa).
Starea din relay
curl https://relay.codai.ro/v1/environments/$ENV_ID/status -H "Authorization: Bearer $CODAI_API_KEY"{
"environment_id": "9c1e…", "online": true, "instance": "relay-7f3a", "last_heartbeat": 1790326860000,
"activity": "agent",
"ports": [{ "port": 3000, "pid": 4121, "process": "node" }],
"git_state": { "branch": "main", "dirty": true, "ahead": 1, "behind": 0, "worktrees": ["/home/u-7a1c09e4/work/brivio"] },
"daemon": { "daemon_version": "0.3.3", "os": "linux", "arch": "x86_64", "capabilities": ["shell", "pty", "tcp", "http", "lock:build", "identity:per-user"] },
"streams": 2,
"attached": [{ "client_id": "…", "user_id": "…", "role": "owner", "kind": "agent", "device_id": "…", "name": "Laptop de lucru", "platform": "desktop", "attached_at": "2026-09-25T09:20:00.000Z" }],
"locks": [{ "name": "build-0123456789ab", "holder": "u-7a1c09e4 · pnpm build", "since": "2026-09-25T09:20:30Z" }],
"clients": 1
}Referință
Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
curl -X GET "https://example.com/v1/projects"{ "projects": [ { "id": "2b6d1c0e-4f3a-4b9c-8d7e-1a2b3c4d5e6f", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "name": "brivio", "slug": "brivio", "repoUrl": "https://github.com/acme/brivio", "defaultBranch": "main", "devcontainerPath": ".devcontainer/devcontainer.json", "isolation": "shared_vm", "settings": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ]}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/projects" \ -H "Content-Type: application/json" \ -d '{ "name": "brivio" }'{ "project": { "id": "2b6d1c0e-4f3a-4b9c-8d7e-1a2b3c4d5e6f", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "name": "brivio", "slug": "brivio", "repoUrl": "https://github.com/acme/brivio", "defaultBranch": "main", "devcontainerPath": ".devcontainer/devcontainer.json", "isolation": "shared_vm", "settings": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul proiectului. O valoare malformată dă 400; un proiect necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "project": { "id": "2b6d1c0e-4f3a-4b9c-8d7e-1a2b3c4d5e6f", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "name": "brivio", "slug": "brivio", "repoUrl": "https://github.com/acme/brivio", "defaultBranch": "main", "devcontainerPath": ".devcontainer/devcontainer.json", "isolation": "shared_vm", "settings": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "environments": [ { "id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "forUserId": "e7ebe9fe-55a5-420c-a31b-7f6410828de5", "for_user_id": "5c382187-9b39-4b04-b883-3a2ecc9f4e6e", "isolation": "shared_vm", "name": "brivio — Ana", "slug": "brivio-k3xq", "provider": "byo", "region": "nbg1", "size": "small", "state": "pending", "stateReason": "string", "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a", "providerRef": "string", "publicIp": "string", "idleTimeoutMinutes": 30, "lastActivityAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "stoppedAt": "2019-08-24T14:15:22Z", "hourlyRateMicroEur": 0, "includedHoursUsedSeconds": 0, "metadata": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ]}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul proiectului. O valoare malformată dă 400; un proiect necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Este necesar cel puțin un câmp.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{ "project": { "id": "2b6d1c0e-4f3a-4b9c-8d7e-1a2b3c4d5e6f", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "name": "brivio", "slug": "brivio", "repoUrl": "https://github.com/acme/brivio", "defaultBranch": "main", "devcontainerPath": ".devcontainer/devcontainer.json", "isolation": "shared_vm", "settings": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul proiectului. O valoare malformată dă 400; un proiect necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "deleted": true, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri query
Restrânge la un singur proiect.
uuidEste acceptat doar me — propriile tale medii per dezvoltator.
Valoare în
- "me"
Parametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/environments"{ "environments": [ { "id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "forUserId": "e7ebe9fe-55a5-420c-a31b-7f6410828de5", "for_user_id": "5c382187-9b39-4b04-b883-3a2ecc9f4e6e", "isolation": "shared_vm", "name": "brivio — Ana", "slug": "brivio-k3xq", "provider": "byo", "region": "nbg1", "size": "small", "state": "pending", "stateReason": "string", "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a", "providerRef": "string", "publicIp": "string", "idleTimeoutMinutes": 30, "lastActivityAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "stoppedAt": "2019-08-24T14:15:22Z", "hourlyRateMicroEur": 0, "includedHoursUsedSeconds": 0, "metadata": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ]}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/environments" \ -H "Content-Type: application/json" \ -d '{ "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9", "provider": "byo" }'{ "environment": { "id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "forUserId": "e7ebe9fe-55a5-420c-a31b-7f6410828de5", "for_user_id": "5c382187-9b39-4b04-b883-3a2ecc9f4e6e", "isolation": "shared_vm", "name": "brivio — Ana", "slug": "brivio-k3xq", "provider": "byo", "region": "nbg1", "size": "small", "state": "pending", "stateReason": "string", "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a", "providerRef": "string", "publicIp": "string", "idleTimeoutMinutes": 30, "lastActivityAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "stoppedAt": "2019-08-24T14:15:22Z", "hourlyRateMicroEur": 0, "includedHoursUsedSeconds": 0, "metadata": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }}Parametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/environments/enroll" \ -H "Content-Type: application/json" \ -d '{ "token": "string", "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940", "daemon_version": "string", "os": "linux", "arch": "x64" }'{ "environment_id": "40ef0e48-a11f-4963-a229-e396c9f7e7c4", "relay_url": "wss://relay.codai.ro", "api_key": "string"}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "environment": { "id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "forUserId": "e7ebe9fe-55a5-420c-a31b-7f6410828de5", "for_user_id": "5c382187-9b39-4b04-b883-3a2ecc9f4e6e", "isolation": "shared_vm", "name": "brivio — Ana", "slug": "brivio-k3xq", "provider": "byo", "region": "nbg1", "size": "small", "state": "pending", "stateReason": "string", "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a", "providerRef": "string", "publicIp": "string", "idleTimeoutMinutes": 30, "lastActivityAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "stoppedAt": "2019-08-24T14:15:22Z", "hourlyRateMicroEur": 0, "includedHoursUsedSeconds": 0, "metadata": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "isolation": "shared_vm", "role": "owner", "members": [ { "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5", "role": "owner", "email": "[email protected]", "name": "string", "linux_username": "string", "port_range_start": 0, "ssh_public_key": true, "provisioned_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ], "ports": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "environmentId": "19f5cc2e-7657-437a-9268-83cd3d563563", "port": 3000, "protocol": "http", "label": "web", "visibility": "owner", "openedByUserId": "c717c8e6-87b5-4b69-9353-93a60c6b5d41", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ], "events": [ { "id": 0, "environmentId": "19f5cc2e-7657-437a-9268-83cd3d563563", "actorUserId": "94141e08-adc7-44ce-bed3-45f031b9f36f", "actorKind": "user", "kind": "state:pending->enrolling", "payload": {}, "createdAt": "2019-08-24T14:15:22Z" } ]}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Trimite name și/sau idle_timeout_minutes.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{ "environment": { "id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "forUserId": "e7ebe9fe-55a5-420c-a31b-7f6410828de5", "for_user_id": "5c382187-9b39-4b04-b883-3a2ecc9f4e6e", "isolation": "shared_vm", "name": "brivio — Ana", "slug": "brivio-k3xq", "provider": "byo", "region": "nbg1", "size": "small", "state": "pending", "stateReason": "string", "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a", "providerRef": "string", "publicIp": "string", "idleTimeoutMinutes": 30, "lastActivityAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "stoppedAt": "2019-08-24T14:15:22Z", "hourlyRateMicroEur": 0, "includedHoursUsedSeconds": 0, "metadata": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/start"{ "environment": { "id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "forUserId": "e7ebe9fe-55a5-420c-a31b-7f6410828de5", "for_user_id": "5c382187-9b39-4b04-b883-3a2ecc9f4e6e", "isolation": "shared_vm", "name": "brivio — Ana", "slug": "brivio-k3xq", "provider": "byo", "region": "nbg1", "size": "small", "state": "pending", "stateReason": "string", "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a", "providerRef": "string", "publicIp": "string", "idleTimeoutMinutes": 30, "lastActivityAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "stoppedAt": "2019-08-24T14:15:22Z", "hourlyRateMicroEur": 0, "includedHoursUsedSeconds": 0, "metadata": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "from": "pending", "to": "pending"}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/stop"{ "environment": { "id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "forUserId": "e7ebe9fe-55a5-420c-a31b-7f6410828de5", "for_user_id": "5c382187-9b39-4b04-b883-3a2ecc9f4e6e", "isolation": "shared_vm", "name": "brivio — Ana", "slug": "brivio-k3xq", "provider": "byo", "region": "nbg1", "size": "small", "state": "pending", "stateReason": "string", "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a", "providerRef": "string", "publicIp": "string", "idleTimeoutMinutes": 30, "lastActivityAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "stoppedAt": "2019-08-24T14:15:22Z", "hourlyRateMicroEur": 0, "includedHoursUsedSeconds": 0, "metadata": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "from": "pending", "to": "pending"}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/archive"{ "environment": { "id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "forUserId": "e7ebe9fe-55a5-420c-a31b-7f6410828de5", "for_user_id": "5c382187-9b39-4b04-b883-3a2ecc9f4e6e", "isolation": "shared_vm", "name": "brivio — Ana", "slug": "brivio-k3xq", "provider": "byo", "region": "nbg1", "size": "small", "state": "pending", "stateReason": "string", "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a", "providerRef": "string", "publicIp": "string", "idleTimeoutMinutes": 30, "lastActivityAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "stoppedAt": "2019-08-24T14:15:22Z", "hourlyRateMicroEur": 0, "includedHoursUsedSeconds": 0, "metadata": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "from": "pending", "to": "pending"}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/destroy"{ "environment": { "id": "9c1e5a7b-2d4f-4e6a-8b0c-3d5e7f9a1b2c", "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "ownerUserId": "283eeac5-beea-465a-80a5-763009480d0f", "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa", "forUserId": "e7ebe9fe-55a5-420c-a31b-7f6410828de5", "for_user_id": "5c382187-9b39-4b04-b883-3a2ecc9f4e6e", "isolation": "shared_vm", "name": "brivio — Ana", "slug": "brivio-k3xq", "provider": "byo", "region": "nbg1", "size": "small", "state": "pending", "stateReason": "string", "deviceId": "4de4adb9-21ee-47e3-aeb4-8cf8ed6c109a", "providerRef": "string", "publicIp": "string", "idleTimeoutMinutes": 30, "lastActivityAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "stoppedAt": "2019-08-24T14:15:22Z", "hourlyRateMicroEur": 0, "includedHoursUsedSeconds": 0, "metadata": {}, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }, "from": "pending", "to": "pending"}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/enroll-token"{ "token": "string", "expires_at": "2019-08-24T14:15:22Z", "environment_id": "40ef0e48-a11f-4963-a229-e396c9f7e7c4"}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members"{ "members": [ { "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5", "role": "owner", "email": "[email protected]", "name": "string", "linux_username": "string", "port_range_start": 0, "ssh_public_key": true, "provisioned_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" } ]}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Este necesar exact unul dintre user_id sau email.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members" \ -H "Content-Type: application/json" \ -d '{}'{ "member": { "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5", "role": "owner", "linux_username": "string", "port_range_start": 0 }}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members/me/ssh-key" \ -H "Content-Type: application/json" \ -d '{ "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGx7v0o6Q3m1q0Y4bJw2m9V7a2X5b1x6ZJ3o8Kk1QzAB ana@laptop" }'{ "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5", "ssh_public_key": true}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidUUID-ul membrului.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{ "role": "owner" }'{ "member": { "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5", "role": "owner" }}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidUUID-ul membrului de eliminat (propriul tău id pentru a pleca).
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "deleted": true, "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5"}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/ports"{ "ports": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "environmentId": "19f5cc2e-7657-437a-9268-83cd3d563563", "port": 3000, "protocol": "http", "label": "web", "visibility": "owner", "openedByUserId": "c717c8e6-87b5-4b69-9353-93a60c6b5d41", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ]}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidPortul TCP din interiorul mediului (1..65535).
1 <= value <= 65535Parametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/ports/1" \ -H "Content-Type: application/json" \ -d '{ "visibility": "owner" }'{ "port": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "environmentId": "19f5cc2e-7657-437a-9268-83cd3d563563", "port": 3000, "protocol": "http", "label": "web", "visibility": "owner", "openedByUserId": "c717c8e6-87b5-4b69-9353-93a60c6b5d41", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidPortul TCP din interiorul mediului (1..65535).
1 <= value <= 65535Parametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/ports/1"{ "deleted": true, "port": 0}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidParametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/secrets"{ "secrets": [ { "name": "DATABASE_URL", "created_by_user_id": "209f54c4-4c33-43bc-9c6a-ef4c65ad7473", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" } ]}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidNumele secretului, ENV_STYLE.
^[A-Z_][A-Z0-9_]{0,127}$Parametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul cererii
application/json
Definiții TypeScript
Folosește tipul request body în TypeScript.
Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/secrets/string" \ -H "Content-Type: application/json" \ -d '{ "value": "string" }'{ "name": "string", "updated": true}Autorizare
bearerAuth O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de /v1/realtime.
În: header
Parametri de cale
UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.
uuidNumele secretului, ENV_STYLE.
^[A-Z_][A-Z0-9_]{0,127}$Parametri header
Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128Corpul răspunsului
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/secrets/string"{ "deleted": true, "name": "string"}Facturare
Mediile administrate se taxează pe secundă de rulare din portofel, în regim fail-closed; propriile servere sunt gratuite.
Autentificare cu codai
auth.codai.ro este un provider OpenID Connect standard. Îl folosești când aplicația ta trebuie să acționeze în numele unui utilizator codai; folosești o cheie API simplă când nu trebuie.