codai docs
Proiecte și medii

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ăspunde 403.
  • Erorile folosesc anvelopa gateway-ului { "error": { "message", "type", "code" } }; erorile de validare sunt 400 bad_request.
  • Fiecare modificare adaugă un rând în environment_events.

Endpoint-uri

MetodăCaleRol minimObservaț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}vizibilProiectul + toate mediile lui
PATCH/v1/projects/{id}proprietar de proiect / admin de organizațieSlug-ul nu se poate schimba
DELETE/v1/projects/{id}proprietar de proiect / admin de organizație409 project_has_environments până când toate sunt distruse
GET/v1/environments—?project_id=, ?for_user_id=me
POST/v1/environmentsproiect vizibilFurnizorii administrați sunt activați per cont (403)
GET/v1/environments/{id}viewerMediu + rol + izolare + membri + porturi + ultimele 20 de evenimente
PATCH/v1/environments/{id}maintainername, idle_timeout_minutes
POST/v1/environments/{id}/start · stop · archivemaintainer409 invalid_transition
POST/v1/environments/{id}/destroyowner
POST/v1/environments/{id}/enroll-tokenmaintainerDoar BYO (409 not_byo)
POST/v1/environments/enrolltokenApelat de codaid, fără cheie API
GET/v1/environments/{id}/membersviewer
POST/v1/environments/{id}/membersmaintainerowner cere owner
PUT/v1/environments/{id}/members/me/ssh-keydeveloperPropria ta cheie
POST/v1/environments/{id}/members/me/ssh-certdeveloper{ public_key } → certificat de utilizator OpenSSH valabil 12 ore pentru utilizatorul tău Linux (certificate, principal, valid_before, host); 503 ssh_ca_unconfigured fără CA
GET/v1/environments/{id}/ssh-caviewer{ public_keys } ale autorității SSH în care au încredere mașinile virtuale; 404 când nu e configurată nicio CA
PATCH · DELETE/v1/environments/{id}/members/{userId}maintainerCa să pleci singur nu ai nevoie de rol
GET/v1/environments/{id}/portsviewerPorturi publicate
PUT · DELETE/v1/environments/{id}/ports/{port}developerpublic cere maintainer
GET/v1/environments/{id}/secretsdeveloperDoar nume
PUT · DELETE/v1/environments/{id}/secrets/{name}maintainerNume în stil ENV_STYLE
GET/v1/environments/{id}/tasksviewerUltimele 50 de sarcini ale agentului
POST/v1/environments/{id}/tasksdeveloper202; mediul trebuie să fie running (409 environment_not_running)
GET/v1/environments/{id}/tasks/{taskId}viewer
POST/v1/environments/{id}/execdeveloperO operație pe relay, blocantă; 409 environment_offline, 504 host_timeout
GET/v1/environments/{id}/filesdeveloper?path= (implicit spațiul tău de lucru)
GET · PUT/v1/environments/{id}/files/{path}developerText UTF-8; citire ≤ 512 KB, scriere ≤ 2 MB (413)
POST/v1/environments/{id}/jobsdeveloperJob în fundal, întoarce imediat job_id
GET/v1/environments/{id}/jobs/{jobId}developerStare + output (?since=, ?tail=)

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âmpTipObservații
project_iduuidObligatoriu.
providerbyo · openstack · hetznerObligatoriu. local este rezervat.
nameșir ≤ 120Obligatoriu, 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).
sizesmall · medium · largeDoar administrate; implicit small.
regionșirDoar administrate; implicit eu-east-1 (OpenStack) sau nbg1 (Hetzner).
idle_timeout_minutes5–1440Implicit 30.
budget_micro_eurîntreg ≥ 0 sau nullDoar 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": "ana@example.com", "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 }.

Certificate SSH de scurtă durată

În loc de o cheie permanentă în authorized_keys, ceri CA-ului SSH al mediului un certificat valabil 12 ore. CA-ul semnează chei publice ssh-ed25519 și ecdsa-sha2-nistp256 — acestea din urmă sunt cheile produse de Secure Enclave pe iPhone, neexportabile, așa că aplicația codai pentru iOS nu ține niciodată o cheie privată care poate fi copiată. Alte tipuri de chei (RSA, alte curbe) primesc 400.

curl https://ai.codai.ro/v1/environments/$ENV_ID/members/me/ssh-cert \
  -H "Authorization: Bearer $CODAI_API_KEY" -H "Content-Type: application/json" \
  -d '{ "public_key": "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAI… ana@iphone" }'

→ { "certificate": "ecdsa-sha2-nistp256-cert-v01@openssh.com AAAA… user:<uuid>/env:<id>", "principal": "u-7a1c09e4", "valid_before": "…", "host": "203.0.113.7" }. Salvează certificate lângă cheie ca <cheie>-cert.pub (codaid env ssh face asta pentru tine). Certificatul e valabil de acum 5 minute până peste 12 ore, doar pentru utilizatorul tău Linux.

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).

Sarcini pentru agent

„Trimite și uită”: pui un prompt în coadă, închizi laptopul și primești o notificare când munca e în commit.

curl https://ai.codai.ro/v1/environments/$ENV_ID/tasks \
  -H "Authorization: Bearer $CODAI_API_KEY" -H "Content-Type: application/json" \
  -d '{ "prompt": "Adaugă o rută /health cu un test", "branch": "feat/health" }'

202 → { "task_id": "…", "session_id": "…", "status": "queued" }. Relay-ul predă sarcina daemonului la următorul heartbeat; agentul rulează fără interfață ca utilizatorul tău Linux, în worktree-ul tău, pe branch (implicit codai/task-<primele 8 caractere din id>), cu permisiuni autopilot și o limită de 2 ore. La final, modificările necomise intră într-un commit codai task <id8> cu identitatea ta git. Primești apoi o notificare în inbox (GET /v1/notifications) și un push pe telefon: env.task.done cu statisticile diff, SHA-ul scurt și un URL de preview dacă un server de dezvoltare ascultă în intervalul tău de porturi, sau env.task.failed cu motivul (no_agent_runtime când mașina nu are sidecar-ul agentului instalat).

session_id este o sesiune partajată obișnuită: deschide-o în aplicația desktop sau pe telefon ca să urmărești rularea live, s-o ghidezi sau s-o anulezi. GET …/tasks/{taskId} întoarce status (queued → running → done | failed) și result (diff_stat, commit_sha, branch, preview_url, error).

Exec prin REST

Rulează comenzi și lucrează cu fișiere într-un mediu pornit prin HTTPS simplu, fără client WebSocket. Gateway-ul deschide o conexiune scurtă la relay în numele tău (cu propria ta cheie API, deci se aplică aceleași verificări de rol), trimite o operație și întoarce răspunsul. Viewerii primesc 403; comanda rulează ca utilizatorul tău Linux, în spațiul tău de lucru.

curl https://ai.codai.ro/v1/environments/$ENV_ID/exec \
  -H "Authorization: Bearer $CODAI_API_KEY" -H "Content-Type: application/json" \
  -d '{ "command": "pnpm test", "timeout_ms": 120000 }'

200 → { "ok": true, "exit_code": 0, "stdout": "…", "stderr": "", "timed_out": false, "truncated": false, "duration_ms": 8123 }. timeout_ms este implicit 60 000 (maxim 600 000). Celelalte operații ale relay-ului trec prin același endpoint cu op + args ({ "op": "fs_roots" }, { "op": "job_kill", "args": { "id": 3 } }) și întorc { ok, result }; un refuz pe mașină (cale în afara rădăcinilor tale, job necunoscut) este 200 { "ok": false, "error": "…" }. Erori: 409 environment_offline (daemonul nu e conectat), 504 host_timeout, 502 relay_unavailable.

  • Fișiere: GET …/files?path=/home/u-…/work listează un director; GET …/files/home/u-…/work/README.md întoarce { path, content, size, truncated } (64 KB implicit, ?max_bytes= până la 512 KB); PUT …/files/<cale> cu un corp text brut (≤ 2 MB, altfel 413) îl scrie și creează directoarele părinte.
  • Lucru lung: POST …/jobs { "command": "pnpm build", "expected_s": 300 } → 201 { "job_id": 4 }; interoghează GET …/jobs/4?since=<next_offset> pentru { job, output } în loc să ții un exec deschis.

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ță

GET
/v1/projects

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Proiectele tale.

application/json
  1. response
projects*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/projects'
Exemplu de răspuns
{  "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": {},      "prebuildPoolSize": 0,      "prebuildProvider": "openstack",      "prebuildSize": "small",      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z"    }  ]}
POST
/v1/projects

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body
name*string
Lungime1 <= length <= 120
slug?string

Implicit, name transformat în slug.

Potrivire^[a-z0-9][a-z0-9-]{1,38}[a-z0-9]$
repo_url?|
Formaturi
Lungimelength <= 2048
default_branch?string
Lungime1 <= length <= 255
Implicit"main"
devcontainer_path?|
Lungime1 <= length <= 512
isolation?string

Cum sunt partajate mediile unui proiect. shared_vm (implicit) — o mașină, mai mulți membri; container — câte un container per membru; vm_per_dev — câte o mașină per dezvoltator, alocată prin for_user_id.

Implicit"shared_vm"
Valoare din"shared_vm""container""vm_per_dev"
org_id?|

Atașează la o organizație pe care o deții sau o administrezi.

Formatuuid

Corpul răspunsului

Proiectul nou.

application/json
  1. response
project*

Rândul de proiect stocat (camelCase, așa cum este persistat).

Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/projects' \  -H 'Content-Type: application/json' \  -d '{  "name": "brivio"}'
Exemplu de răspuns
{  "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": {},    "prebuildPoolSize": 0,    "prebuildProvider": "openstack",    "prebuildSize": "small",    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  }}
GET
/v1/projects/{id}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul proiectului. O valoare malformată dă 400; un proiect necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Proiectul și mediile lui.

application/json
  1. response
project*

Rândul de proiect stocat (camelCase, așa cum este persistat).

environments*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Exemplu de răspuns
{  "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": {},    "prebuildPoolSize": 0,    "prebuildProvider": "openstack",    "prebuildSize": "small",    "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": {},      "prebuild": false,      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z"    }  ]}
PATCH
/v1/projects/{id}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul proiectului. O valoare malformată dă 400; un proiect necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body

Este necesar cel puțin un câmp.

name?string
Lungime1 <= length <= 120
repo_url?|
Formaturi
Lungimelength <= 2048
default_branch?string
Lungime1 <= length <= 255
devcontainer_path?|
Lungime1 <= length <= 512
isolation?ProjectIsolation

Cum sunt partajate mediile unui proiect. shared_vm (implicit) — o mașină, mai mulți membri; container — câte un container per membru; vm_per_dev — câte o mașină per dezvoltator, alocată prin for_user_id.

Valoare din"shared_vm""container""vm_per_dev"
prebuild_pool_size?integer

Dimensiunea pool-ului de prebuild; owner-ul proiectului plătește compute-ul și stocarea pool-ului.

Interval0 <= value <= 5
prebuild_provider?string
Valoare din"openstack""hetzner"
prebuild_size?string
Valoare din"small""medium""large"

Corpul răspunsului

Proiectul actualizat.

application/json
  1. response
project*

Rândul de proiect stocat (camelCase, așa cum este persistat).

Exemplu de cerere
curl -X PATCH 'https://ai.codai.ro/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{  "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": {},    "prebuildPoolSize": 0,    "prebuildProvider": "openstack",    "prebuildSize": "small",    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  }}
DELETE
/v1/projects/{id}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul proiectului. O valoare malformată dă 400; un proiect necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Șters.

application/json
  1. response
deleted*true
Valoare dintrue
id*string
Formatuuid
Exemplu de cerere
curl -X DELETE 'https://ai.codai.ro/v1/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Exemplu de răspuns
{  "deleted": true,  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"}
GET
/v1/environments

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri query

project_id?string

Restrânge la un singur proiect.

Formatuuid
for_user_id?"me"

Este acceptat doar me — propriile tale medii per dezvoltator.

Valoare din"me"

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Mediile pe care le poți vedea.

application/json
  1. response
environments*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments'
Exemplu de răspuns
{  "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": {},      "prebuild": false,      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z"    }  ]}
POST
/v1/environments

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body
project_id*string
Formatuuid
name?string

Obligatoriu, cu excepția proiectelor vm_per_dev (unde implicit este <project> — <you>).

Lungime1 <= length <= 120
slug?string

Implicit <project-slug>-<4 caractere aleatorii>.

Potrivire^[a-z0-9][a-z0-9-]{1,38}[a-z0-9]$
provider*EnvironmentProvider

byo (îți aduci propria mașină; daemonul se înrolează cu un token) este deschis oricărei chei. openstack / hetzner sunt administrați de worker și facturați la oră; gce (Google Cloud) oferă mărimile CPU la cerere small/medium/large (e2-standard-2/4/8) și mărimea GPU gpu-l4 (Spot, limită de 30 de minute); este disponibil doar unde implementarea îl activează ȘI pentru conturile super_admin (403 pentru toate celelalte); local este o comoditate pentru dezvoltatori. Furnizorii administrați răspund cu 403 până când sunt activați pentru cheia ta.

Valoare din"byo""openstack""hetzner""local""gce"
region?string

Furnizori administrați; valoare implicită per furnizor (hetzner → nbg1, openstack → eu-east-1).

Lungime1 <= length <= 64
size?string

Furnizori administrați; una dintre dimensiunile din catalog, implicit small.

Lungime1 <= length <= 64
idle_timeout_minutes?integer
Interval5 <= value <= 1440
Implicit30
budget_micro_eur?|

Plafon de cheltuieli per mediu, în micro-EUR, aplicat de worker; null = fără plafon.

Interval0 <= value

Corpul răspunsului

Mediul nou (sau prebuild-ul revendicat).

application/json
  1. response
environment*

Rândul de mediu stocat (camelCase, așa cum este persistat) plus for_user_id în snake_case și, când este cunoscut, isolation al proiectului. metadata nu conține niciodată hash-ul tokenului de înrolare.

prebuild_claimed?boolean

Prezent și true când a fost revendicată și pornită o mașină din pool-ul de prebuild în loc să fie provizionată una nouă.

Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments' \  -H 'Content-Type: application/json' \  -d '{  "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",  "provider": "byo"}'
Exemplu de răspuns
{  "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": {},    "prebuild": false,    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  },  "prebuild_claimed": true}
POST
/v1/environments/enroll

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body
token*string
Potrivire^codai_env_[0-9A-Za-z]{32}$
device_id*string

UUID-ul dispozitivului daemonului (ales de client; înregistrat sub owner când nu este cunoscut).

Formatuuid
daemon_version*string
Lungime1 <= length <= 64
os*string
Lungime1 <= length <= 32
arch*string
Lungime1 <= length <= 32

Corpul răspunsului

Înrolat.

application/json
  1. response
environment_id*string
Formatuuid
relay_url*string

URL-ul WebSocket la care trebuie să se conecteze daemonul.

Formaturi
api_key?string

Doar furnizori administrați — o cheie API de owner pentru daemon, returnată o singură dată.

Exemplu de cerere
curl -X POST 'https://ai.codai.ro/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"}'
Exemplu de răspuns
{  "environment_id": "40ef0e48-a11f-4963-a229-e396c9f7e7c4",  "relay_url": "wss://relay.codai.ro",  "api_key": "string"}
GET
/v1/environments/{id}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Detaliile mediului.

application/json
  1. response
environment*

Rândul de mediu stocat (camelCase, așa cum este persistat) plus for_user_id în snake_case și, când este cunoscut, isolation al proiectului. metadata nu conține niciodată hash-ul tokenului de înrolare.

isolation*ProjectIsolation

Cum sunt partajate mediile unui proiect. shared_vm (implicit) — o mașină, mai mulți membri; container — câte un container per membru; vm_per_dev — câte o mașină per dezvoltator, alocată prin for_user_id.

Valoare din"shared_vm""container""vm_per_dev"
role*string

Rolul tău efectiv (owner / admin de organizație → owner; membru simplu al organizației → viewer).

Valoare din"owner""maintainer""developer""viewer"
members*array<>
ports*array<>
events*array<>

Cele mai recente 20 de evenimente, cele mai noi primele.

Elementeitems <= 20
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Exemplu de răspuns
{  "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": {},    "prebuild": false,    "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": "user@example.com",      "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"    }  ]}
PATCH
/v1/environments/{id}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body

Trimite name și/sau idle_timeout_minutes.

name?string
Lungime1 <= length <= 120
idle_timeout_minutes?integer
Interval5 <= value <= 1440

Corpul răspunsului

Mediul actualizat.

application/json
  1. response
environment*

Rândul de mediu stocat (camelCase, așa cum este persistat) plus for_user_id în snake_case și, când este cunoscut, isolation al proiectului. metadata nu conține niciodată hash-ul tokenului de înrolare.

Exemplu de cerere
curl -X PATCH 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{  "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": {},    "prebuild": false,    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  }}
POST
/v1/environments/{id}/start

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Tranziția care a fost aplicată.

application/json
  1. response
environment*

Rândul de mediu stocat (camelCase, așa cum este persistat) plus for_user_id în snake_case și, când este cunoscut, isolation al proiectului. metadata nu conține niciodată hash-ul tokenului de înrolare.

from*EnvironmentState

Starea din ciclul de viață. byo pornește în pending și ajunge în enrolling când daemonul se înrolează; furnizorii administrați pornesc în creating și ajung în running după înrolare. destroyed este finală.

Valoare din"pending""creating""enrolling""starting""running""stopping""stopped""archiving""archived""destroying""destroyed""error"
to*EnvironmentState

Starea din ciclul de viață. byo pornește în pending și ajunge în enrolling când daemonul se înrolează; furnizorii administrați pornesc în creating și ajung în running după înrolare. destroyed este finală.

Valoare din"pending""creating""enrolling""starting""running""stopping""stopped""archiving""archived""destroying""destroyed""error"
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/start'
Exemplu de răspuns
{  "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": {},    "prebuild": false,    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  },  "from": "pending",  "to": "pending"}
POST
/v1/environments/{id}/stop

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Tranziția care a fost aplicată.

application/json
  1. response
environment*

Rândul de mediu stocat (camelCase, așa cum este persistat) plus for_user_id în snake_case și, când este cunoscut, isolation al proiectului. metadata nu conține niciodată hash-ul tokenului de înrolare.

from*EnvironmentState

Starea din ciclul de viață. byo pornește în pending și ajunge în enrolling când daemonul se înrolează; furnizorii administrați pornesc în creating și ajung în running după înrolare. destroyed este finală.

Valoare din"pending""creating""enrolling""starting""running""stopping""stopped""archiving""archived""destroying""destroyed""error"
to*EnvironmentState

Starea din ciclul de viață. byo pornește în pending și ajunge în enrolling când daemonul se înrolează; furnizorii administrați pornesc în creating și ajung în running după înrolare. destroyed este finală.

Valoare din"pending""creating""enrolling""starting""running""stopping""stopped""archiving""archived""destroying""destroyed""error"
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/stop'
Exemplu de răspuns
{  "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": {},    "prebuild": false,    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  },  "from": "pending",  "to": "pending"}
POST
/v1/environments/{id}/archive

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Tranziția care a fost aplicată.

application/json
  1. response
environment*

Rândul de mediu stocat (camelCase, așa cum este persistat) plus for_user_id în snake_case și, când este cunoscut, isolation al proiectului. metadata nu conține niciodată hash-ul tokenului de înrolare.

from*EnvironmentState

Starea din ciclul de viață. byo pornește în pending și ajunge în enrolling când daemonul se înrolează; furnizorii administrați pornesc în creating și ajung în running după înrolare. destroyed este finală.

Valoare din"pending""creating""enrolling""starting""running""stopping""stopped""archiving""archived""destroying""destroyed""error"
to*EnvironmentState

Starea din ciclul de viață. byo pornește în pending și ajunge în enrolling când daemonul se înrolează; furnizorii administrați pornesc în creating și ajung în running după înrolare. destroyed este finală.

Valoare din"pending""creating""enrolling""starting""running""stopping""stopped""archiving""archived""destroying""destroyed""error"
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/archive'
Exemplu de răspuns
{  "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": {},    "prebuild": false,    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  },  "from": "pending",  "to": "pending"}
POST
/v1/environments/{id}/destroy

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Tranziția care a fost aplicată.

application/json
  1. response
environment*

Rândul de mediu stocat (camelCase, așa cum este persistat) plus for_user_id în snake_case și, când este cunoscut, isolation al proiectului. metadata nu conține niciodată hash-ul tokenului de înrolare.

from*EnvironmentState

Starea din ciclul de viață. byo pornește în pending și ajunge în enrolling când daemonul se înrolează; furnizorii administrați pornesc în creating și ajung în running după înrolare. destroyed este finală.

Valoare din"pending""creating""enrolling""starting""running""stopping""stopped""archiving""archived""destroying""destroyed""error"
to*EnvironmentState

Starea din ciclul de viață. byo pornește în pending și ajunge în enrolling când daemonul se înrolează; furnizorii administrați pornesc în creating și ajung în running după înrolare. destroyed este finală.

Valoare din"pending""creating""enrolling""starting""running""stopping""stopped""archiving""archived""destroying""destroyed""error"
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/destroy'
Exemplu de răspuns
{  "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": {},    "prebuild": false,    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  },  "from": "pending",  "to": "pending"}
POST
/v1/environments/{id}/enroll-token

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Tokenul (în clar, returnat o singură dată).

application/json
  1. response
token*string

Tokenul codai_env_… în clar, returnat o singură dată; se stochează doar hash-ul lui.

expires_at*string

La 30 de minute după emitere.

Formatdate-time
environment_id*string
Formatuuid
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/enroll-token'
Exemplu de răspuns
{  "token": "string",  "expires_at": "2019-08-24T14:15:22Z",  "environment_id": "40ef0e48-a11f-4963-a229-e396c9f7e7c4"}
GET
/v1/environments/{id}/members

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Membrii mediului.

application/json
  1. response
members*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members'
Exemplu de răspuns
{  "members": [    {      "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",      "role": "owner",      "email": "user@example.com",      "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"    }  ]}
POST
/v1/environments/{id}/members

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body

Este necesar exact unul dintre user_id sau email.

user_id?string
Formatuuid
email?string
Formatemail
role?string

Implicit developer. owner poate fi acordat doar de un owner.

Implicit"developer"
Valoare din"owner""maintainer""developer""viewer"

Corpul răspunsului

Apartenența, așa cum a fost stocată.

application/json
  1. response
member*
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{  "member": {    "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",    "role": "owner",    "linux_username": "string",    "port_range_start": 0  }}
PUT
/v1/environments/{id}/members/me/ssh-key

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body
public_key*string

O linie authorized_keys (ssh-ed25519, ssh-rsa sau ecdsa-*).

Lungime1 <= length <= 1000

Corpul răspunsului

Stocată.

application/json
  1. response
user_id*string
Formatuuid
ssh_public_key*true
Valoare dintrue
Exemplu de cerere
curl -X PUT 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members/me/ssh-key' \  -H 'Content-Type: application/json' \  -d '{  "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGx7v0o6Q3m1q0Y4bJw2m9V7a2X5b1x6ZJ3o8Kk1QzAB ana@laptop"}'
Exemplu de răspuns
{  "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",  "ssh_public_key": true}
PATCH
/v1/environments/{id}/members/{userId}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
userId*string

UUID-ul membrului.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body
role*EnvironmentRole

Rolul unui membru într-un mediu; owner ≥ maintainer ≥ developer ≥ viewer.

Valoare din"owner""maintainer""developer""viewer"

Corpul răspunsului

Apartenența actualizată.

application/json
  1. response
member*
Exemplu de cerere
curl -X PATCH 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members/497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{  "role": "owner"}'
Exemplu de răspuns
{  "member": {    "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",    "role": "owner"  }}
DELETE
/v1/environments/{id}/members/{userId}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
userId*string

UUID-ul membrului de eliminat (propriul tău id pentru a pleca).

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Eliminat.

application/json
  1. response
deleted*true
Valoare dintrue
user_id*string
Formatuuid
Exemplu de cerere
curl -X DELETE 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/members/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Exemplu de răspuns
{  "deleted": true,  "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5"}
GET
/v1/environments/{id}/ports

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Porturile publicate.

application/json
  1. response
ports*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/ports'
Exemplu de răspuns
{  "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"    }  ]}
PUT
/v1/environments/{id}/ports/{port}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
port*integer

Portul TCP din interiorul mediului (1..65535).

Interval1 <= value <= 65535

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body
visibility*PortVisibility

Cine poate accesa un port publicat prin routerul de preview. Setarea public necesită maintainer.

Valoare din"owner""org""authenticated""public"
label?|
Lungime1 <= length <= 64
protocol?string
Implicit"http"
Valoare din"http""https""tcp"

Corpul răspunsului

Portul era deja publicat și a fost actualizat.

application/json
  1. response
port*
Exemplu de cerere
curl -X PUT 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/ports/1' \  -H 'Content-Type: application/json' \  -d '{  "visibility": "owner"}'
Exemplu de răspuns
{  "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"  }}
DELETE
/v1/environments/{id}/ports/{port}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
port*integer

Portul TCP din interiorul mediului (1..65535).

Interval1 <= value <= 65535

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Publicare retrasă.

application/json
  1. response
deleted*true
Valoare dintrue
port*integer
Exemplu de cerere
curl -X DELETE 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/ports/1'
Exemplu de răspuns
{  "deleted": true,  "port": 0}
GET
/v1/environments/{id}/secrets

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Numele secretelor.

application/json
  1. response
secrets*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/secrets'
Exemplu de răspuns
{  "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"    }  ]}
PUT
/v1/environments/{id}/secrets/{name}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
name*string

Numele secretului, ENV_STYLE.

Potrivire^[A-Z_][A-Z0-9_]{0,127}$

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body
value*string

Sigilat înainte de stocare; nu este returnat niciodată.

Lungime1 <= length <= 65536

Corpul răspunsului

Înlocuit.

application/json
  1. response
name*string
updated*boolean

true când a fost înlocuită o valoare existentă.

Exemplu de cerere
curl -X PUT 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/secrets/string' \  -H 'Content-Type: application/json' \  -d '{  "value": "string"}'
Exemplu de răspuns
{  "name": "string",  "updated": true}
DELETE
/v1/environments/{id}/secrets/{name}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
name*string

Numele secretului, ENV_STYLE.

Potrivire^[A-Z_][A-Z0-9_]{0,127}$

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Șters.

application/json
  1. response
deleted*true
Valoare dintrue
name*string
Exemplu de cerere
curl -X DELETE 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/secrets/string'
Exemplu de răspuns
{  "deleted": true,  "name": "string"}
GET
/v1/environments/{id}/tasks

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Sarcinile mediului.

application/json
  1. response
data*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/tasks'
Exemplu de răspuns
{  "data": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "environment_id": "40ef0e48-a11f-4963-a229-e396c9f7e7c4",      "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",      "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",      "prompt": "string",      "branch": "string",      "status": "queued",      "result": {        "diff_stat": "string",        "commit_sha": "string",        "branch": "string",        "preview_url": "string",        "error": "string"      },      "created_at": "2019-08-24T14:15:22Z",      "started_at": "2019-08-24T14:15:22Z",      "finished_at": "2019-08-24T14:15:22Z",      "output_signature": {        "alg": "hide-hybrid-ed25519-mldsa65",        "context": "codai.agent-output.v1",        "key_id": "string",        "sig": "string",        "signed_at": "2019-08-24T14:15:22Z"      }    }  ]}
POST
/v1/environments/{id}/tasks

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

Promptul și, opțional, o ramură.

application/json
  1. body
prompt*string

Ce trebuie să facă agentul (1..20000 de caractere).

Lungime1 <= length <= 20000
branch?string

Ramura git creată pentru lucru; implicit codai/task-<primele 8 caractere din id>.

Lungimelength <= 200

Corpul răspunsului

Pusă în coadă.

application/json
  1. response
task_id*string
Formatuuid
session_id*string

Sesiunea de conversație în care rulează agentul (urmărește-o cu API-ul de sesiuni).

Formatuuid
status*"queued"
Valoare din"queued"
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/tasks' \  -H 'Content-Type: application/json' \  -d '{  "prompt": "string"}'
Exemplu de răspuns
{  "task_id": "736fde4d-9029-4915-8189-01353d6982cb",  "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",  "status": "queued"}
GET
/v1/environments/{id}/tasks/{taskId}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
taskId*string

Id-ul sarcinii agentului.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Sarcina.

application/json
  1. response
task*
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/tasks/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Exemplu de răspuns
{  "task": {    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",    "environment_id": "40ef0e48-a11f-4963-a229-e396c9f7e7c4",    "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",    "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",    "prompt": "string",    "branch": "string",    "status": "queued",    "result": {      "diff_stat": "string",      "commit_sha": "string",      "branch": "string",      "preview_url": "string",      "error": "string"    },    "created_at": "2019-08-24T14:15:22Z",    "started_at": "2019-08-24T14:15:22Z",    "finished_at": "2019-08-24T14:15:22Z",    "output_signature": {      "alg": "hide-hybrid-ed25519-mldsa65",      "context": "codai.agent-output.v1",      "key_id": "string",      "sig": "string",      "signed_at": "2019-08-24T14:15:22Z"    }  }}
POST
/v1/environments/{id}/exec

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body
op?string

Operația relay-ului; shell cere command (sau args.cmd).

Implicit"shell"
Valoare din"shell""fs_read""fs_write""fs_list""fs_roots""info""job_start""job_status""job_output""job_send""job_wait""job_kill""job_list"
command?string

Linia de shell pentru op: shell.

Lungimelength <= 100000
args?

Argumentele operației (ex. { path } pentru fs_read, { id } pentru job_kill, cwd pentru shell).

timeout_ms?integer

Bugetul cererii, implicit 60000 (maxim 10 minute).

Interval1000 <= value <= 600000

Corpul răspunsului

Rezultatul operației.

application/json
  1. response
ok*boolean
exit_code?|

Codul de ieșire al shell-ului; -1 când a fost oprit forțat.

stdout?string
stderr?string
timed_out?boolean
truncated?boolean
duration_ms?integer|null
result?unknown

Rezultatul brut al unei operații care nu este shell.

error?string|null
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/exec' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{  "ok": true,  "exit_code": 0,  "stdout": "string",  "stderr": "string",  "timed_out": true,  "truncated": true,  "duration_ms": 0,  "result": null,  "error": "string"}
GET
/v1/environments/{id}/files

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri query

path?string

Calea absolută a directorului; implicit spațiul tău de lucru.

Lungimelength <= 4096

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Intrările directorului.

application/json
  1. response
path*string
entries*array<>
truncated*boolean
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/files'
Exemplu de răspuns
{  "path": "string",  "entries": [    {      "name": "string",      "kind": "string",      "size": 0    }  ],  "truncated": true}
GET
/v1/environments/{id}/files/{path}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
path*string

Calea absolută a fișierului în mediu (slash-uri permise, fiecare segment codat URL); trebuie să fie sub rădăcinile pe care daemonul ți le servește.

Lungimelength <= 4096

Parametri query

max_bytes?integer

Citește cel mult atâția octeți (1..524288).

Interval1 <= value <= 524288

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Conținutul fișierului.

application/json
  1. response
path*string
content*string
size*integer
truncated*boolean
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/files/string'
Exemplu de răspuns
{  "path": "string",  "content": "string",  "size": 0,  "truncated": true}
PUT
/v1/environments/{id}/files/{path}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
path*string

Calea absolută a fișierului în mediu (slash-uri permise, fiecare segment codat URL); trebuie să fie sub rădăcinile pe care daemonul ți le servește.

Lungimelength <= 4096

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

body*stringtext/plain

Corpul răspunsului

Scris.

application/json
  1. response
path*string
bytes*integer
created*boolean
Exemplu de cerere
curl -X PUT 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/files/string' \  -H 'Content-Type: text/plain' \  -d 'string'
Exemplu de răspuns
{  "path": "string",  "bytes": 0,  "created": true}
POST
/v1/environments/{id}/jobs

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul cererii

application/json
  1. body
command*string
Lungimelength <= 100000
cwd?string
Lungimelength <= 4096
expected_s?integer

Durata estimată în secunde (afișată în starea jobului).

Interval1 <= value
session?string
Lungimelength <= 120

Corpul răspunsului

Jobul a pornit.

application/json
  1. response
job_id*integer
label?string
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/jobs' \  -H 'Content-Type: application/json' \  -d '{  "command": "string"}'
Exemplu de răspuns
{  "job_id": 0,  "label": "string"}
GET
/v1/environments/{id}/jobs/{jobId}

Autorizare

bearerAuth
headerAutorizareBearer <codai_…>

O cheie API codai (prefix codai_). Tokenurile efemere de la POST /v1/tokens sunt acceptate doar de suprafețele media potrivite scope-ului lor (/v1/realtime, /v1/audio/*, /v1/embeddings).

Parametri de cale

id*string

UUID-ul mediului. O valoare malformată dă 400; un mediu necunoscut sau străin dă 404.

Formatuuid
jobId*string

Id-ul jobului din startEnvironmentJob.

Potrivire^(job)?[0-9]{1,18}$

Parametri query

since?integer

Offsetul în octeți de la care continuă output-ul (next_offset din apelul anterior).

Interval0 <= value
tail?integer

Întoarce doar ultimii N octeți de output.

Interval0 <= value
session?string

Sesiunea în care a fost pornit jobul (implicit default).

Lungimelength <= 120

Parametri header

x-request-id?string

Id de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.

Lungimelength <= 128

Corpul răspunsului

Stare și output.

application/json
  1. response
job*|

Intrarea job_status: id, label, state, exit_code, runtime_s…

output*

Fragmentul job_output: text, from, next_offset, state…

Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/environments/497f6eca-6276-4993-bfeb-53cbbbba6f08/jobs/string'
Exemplu de răspuns
{  "job": {},  "output": {}}

Ultima actualizare:

Pe această pagină