codai docs
Referință APIGateway

Cont

Cardul contului tău, consimțămintele, chitanțele de cost, feedback-ul pe ture și catalogul de modele on-device.

GET /v1/receipt e endpoint-ul de cost: trimiți session_id pentru o conversație sau since pentru o fereastră și citești cost_micro_usd — micro-USD, niciodată convertiți. Consimțământul pentru antrenare e opt-in (training_opt_out are implicit true). Context de prețuri: limite & prețuri.

Agenții citesc același card de cont prin unealta account_get a serverului MCP (doar citire; referința la cheie, tokenurile și id-urile de facturare sunt eliminate). profile_get întoarce doar partea de profil (nume, username, consimțăminte, numele de recomandare), profile_update setează username-ul (consimțămintele, renunțarea la antrenare și codurile de recomandare rămân în aplicații), iar feedback_submit notează una dintre turele tale, ca POST /v1/feedback.

GET
/v1/account

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

Vederea contului.

application/json
  1. response

Cardul de cont complet returnat de GET /v1/account.

wallet*|null
promo*|null
referral*|null
user_id*string
Formatuuid
email*string
Formatemail
training_opt_out*boolean

Flag-ul GDPR de antrenare. true înseamnă NU ai consimțit (valoarea implicită).

consents*array<>
user*
key*
plan*
usage*
referral_redeem_until*|

Până când mai poți folosi un referral_code (7 zile de la înregistrare); null odată închis.

Formatdate-time
features*
billing_url*"https://codai.ro/api/mobile/billing"
Formaturi
Valoare din"https://codai.ro/api/mobile/billing"
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/account'
Exemplu de răspuns
{  "wallet": {    "balance_eur": 12.5,    "next_expiry_at": "2019-08-24T14:15:22Z",    "promo_granted_eur": 0,    "promo_cap_eur": 0,    "history": [      {        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",        "delta_eur": 10,        "source": "welcome_grant",        "expires_at": "2019-08-24T14:15:22Z",        "promo": "string",        "multiplier": 0,        "list_eur": 0,        "note": "string",        "created_at": "2019-08-24T14:15:22Z"      }    ]  },  "promo": {    "slug": "launch-50",    "title": "string",    "banner_en": "string",    "banner_ro": "string",    "multiplier": 0.5,    "ends_at": "2019-08-24T14:15:22Z"  },  "referral": {    "username": "string",    "consented": true,    "share_url": "https://codai.ro/r/dragos_v",    "invited": 0,    "rewarded": 0,    "pending": 0,    "flagged": 0,    "earned_eur": 0,    "month_remaining": 0,    "lifetime_remaining": 0,    "reward_eur": 0,    "referee_reward_eur": 0,    "qualify_spend_eur": 0  },  "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",  "email": "user@example.com",  "training_opt_out": true,  "consents": [    {      "surface": "desktop",      "terms_version": "1.1",      "privacy_version": "training-consent-v2-2026-09",      "accepted_at": "2026-09-20T09:15:00.000Z"    }  ],  "user": {    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",    "email": "user@example.com",    "name": "string",    "username": "string",    "suggested_username": "string"  },  "key": {    "id": "string",    "app_id": "affd1d10-9538-4fc8-9e0b-4594a28c1335"  },  "plan": {    "tier": "pro",    "status": "active",    "current_period_end": "2019-08-24T14:15:22Z",    "cancel_at_period_end": true,    "has_billing_account": true,    "max_routing_tier": "small"  },  "usage": {    "tasks_today": 0,    "tasks_per_day": 0,    "tasks_month": 0,    "tasks_per_month": 0,    "budget_eur_per_day": 0,    "budget_eur_per_month": 0,    "credits": 0  },  "referral_redeem_until": "2019-08-24T14:15:22Z",  "features": {    "byok": true,    "subagents": true,    "persistent_memory": true,    "limits_exempt": true  },  "billing_url": "https://codai.ro/api/mobile/billing"}
PATCH
/v1/account

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
x-codai-device*string

UUID stabil al dispozitivului. Înregistrează dispozitivul la prima folosire (nume/platformă din x-codai-device-name / x-codai-device-platform) și selectează protocolul de sesiuni partajate.

Formatuuid

Corpul cererii

Cel puțin un câmp este obligatoriu; cheile necunoscute sunt respinse.

application/json
  1. body

Obiect strict — cheile necunoscute sunt respinse și cel puțin un câmp trebuie să fie prezent.

Proprietăți1 <= properties
training_opt_out?boolean

true = NU folosi datele mele pentru antrenare; false doar printr-o acțiune explicită de consimțământ.

consents?

Versiunile de termeni/confidențialitate acceptate pentru o suprafață client.

username?string

Normalizat la [a-z0-9_]; se poate schimba o singură dată. Rezultatul în username_error.

Lungime3 <= length <= 20
referral_consent?boolean

Optezi pentru sau ieși din programul de referral.

referral_code?string

Username-ul celui care te-a invitat. Se poate folosi în primele 7 zile de la înregistrare; acordă recompensa celui invitat.

Lungime3 <= length <= 20

Corpul răspunsului

Contul actualizat (un subset al vederii GET plus câmpurile de rezultat).

application/json
  1. response

Returnat de PATCH /v1/account.

wallet*|null
promo*|null
referral*|null
user_id*string
Formatuuid
email*string
Formatemail
training_opt_out*boolean
consents*array<>
username_error*|

De ce username nu a fost aplicat; null când nu l-ai trimis sau a fost aplicat.

Valoare din"invalid""taken""change_limit"null
referral_result*|

Rezultatul pentru referral_code; null când nu l-ai trimis.

Valoare din"window_closed""none""invalid_code""self""already_referred""flagged""pending_payment""granted""cap_reached"null
Exemplu de cerere
curl -X PATCH 'https://ai.codai.ro/v1/account' \  -H 'x-codai-device: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{  "wallet": {    "balance_eur": 12.5,    "next_expiry_at": "2019-08-24T14:15:22Z",    "promo_granted_eur": 0,    "promo_cap_eur": 0,    "history": [      {        "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",        "delta_eur": 10,        "source": "welcome_grant",        "expires_at": "2019-08-24T14:15:22Z",        "promo": "string",        "multiplier": 0,        "list_eur": 0,        "note": "string",        "created_at": "2019-08-24T14:15:22Z"      }    ]  },  "promo": {    "slug": "launch-50",    "title": "string",    "banner_en": "string",    "banner_ro": "string",    "multiplier": 0.5,    "ends_at": "2019-08-24T14:15:22Z"  },  "referral": {    "username": "string",    "consented": true,    "share_url": "https://codai.ro/r/dragos_v",    "invited": 0,    "rewarded": 0,    "pending": 0,    "flagged": 0,    "earned_eur": 0,    "month_remaining": 0,    "lifetime_remaining": 0,    "reward_eur": 0,    "referee_reward_eur": 0,    "qualify_spend_eur": 0  },  "user_id": "a169451c-8525-4352-b8ca-070dd449a1a5",  "email": "user@example.com",  "training_opt_out": true,  "consents": [    {      "surface": "desktop",      "terms_version": "1.1",      "privacy_version": "training-consent-v2-2026-09",      "accepted_at": "2026-09-20T09:15:00.000Z"    }  ],  "username_error": "invalid",  "referral_result": "window_closed"}
GET
/v1/receipt

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

session_id?string

Sesiunea la care limitezi (se potrivește pe session_id sau pe cheia de sesiune derivată). Are prioritate față de since.

since?string

Limita inferioară ISO 8601 pe started_at. Ignorată când dai session_id. Implicit acum 24h. Neparsabil → 400.

Formatdate-time

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

Chitanța agregată.

application/json
  1. response

Consumul agregat al apelantului. Câmpurile micro-USD sunt întregi; doar cost_usd este convertit.

events*integer

Numărul de usage events din scope.

tasks*integer

SUMA marcajelor de început de task (un contor, nu rânduri).

cost_micro_usd_total*integer

Costul total în micro-USD.

cost_usd*number

cost_micro_usd_total / 1_000_000.

prompt_tokens*integer
completion_tokens*integer
cached_read_tokens*integer
cache_write_tokens*integer
by_upstream*array<>

Per model upstream, ordonat descrescător după cost.

window*
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/receipt'
Exemplu de răspuns
{  "events": 0,  "tasks": 0,  "cost_micro_usd_total": 1834210,  "cost_usd": 1.83421,  "prompt_tokens": 0,  "completion_tokens": 0,  "cached_read_tokens": 0,  "cache_write_tokens": 0,  "by_upstream": [    {      "upstream_model": "claude-sonnet-4-5",      "events": 0,      "cost_micro_usd": 0    }  ],  "window": {    "from": "2019-08-24T14:15:22Z",    "to": "2019-08-24T14:15:22Z",    "session_id": "string"  }}
POST
/v1/feedback

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

Rating plus exact unul dintre event_id, session_id, client_request_id.

application/json
  1. body

Un rating plus o țintă. Zod respinge body-ul când niciuna dintre cele trei ținte nu e prezentă.

event_id*string

Id-ul exact al usage event-ului din header-ul de răspuns x-codai-event-id.

Formatuuid
session_id?string

Evaluează cea mai recentă tură de adâncime 0 a apelantului din această sesiune.

Lungime1 <= length <= 256
client_request_id?string

Evaluează cea mai recentă tură de adâncime 0 a apelantului trimisă cu acest x-request-id.

Lungime1 <= length <= 256
rating?integer
Valoare din1-1
comment?string
Lungimelength <= 500

Corpul răspunsului

Rating salvat (sau actualizat).

application/json
  1. response
ok*true
Valoare dintrue
event_id*string

Usage event-ul evaluat (id-ul rezolvat când ai folosit un alias).

Formatuuid
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/feedback' \  -H 'Content-Type: application/json' \  -d '{  "rating": 1}'
Exemplu de răspuns
{  "ok": true,  "event_id": "3f0b2c9e-1d4a-4b8c-9e7f-2a6d5c4b3a10"}
GET
/v1/phone/models

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

Catalogul semnat.

application/json
  1. response
models*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/phone/models'
Exemplu de răspuns
{  "models": [    {      "id": "codai-nano-1b-q8",      "name": "string",      "file": "codai-nano-1b-q8.litertlm",      "sizeBytes": 3700000000,      "sha256": "string",      "backends": [        "cpu",        "gpu"      ],      "base": "string",      "notes": "string",      "url": "http://example.com",      "expiresAt": "2019-08-24T14:15:22Z"    }  ]}

Ultima actualizare: