codai docs
Referință APIGateway

Planificator

Sarcini agent, comenzi terminal, webhook-uri și lanțuri programate, rulate pe oricare PC, telefon, ceas sau VM cloud al tău — cron sau cuvinte, aprobări, reîncercări, failover și stare live.

Planificatorul codai rulează sarcini după un orar pe toate dispozitivele tale. Cloud-ul deține fiecare programare și decide când e scadentă o rulare; gazdele tale (aplicația desktop, codaid pe servere și VM-uri, telefonul) preiau rulările, le execută și raportează rezultatul. O singură listă, un singur istoric și aceleași aprobări în hub, pe desktop, telefon și ceas.

Ce poate rula

  • agent — o sarcină agent codai (prompt, opțional skill, permissions read / edit / pr).
  • shell — o comandă terminal pe o gazdă (command, cwd, env_names, shell). Valorile secrete nu părăsesc gazda: programarea doar numește variabilele.
  • http — un webhook HTTPS (method, url, headers, body, expect_status).
  • chain — rulează alte programări în ordine (steps, stop_on_failure).
  • phone_action — notificare, pornește un agent, deschide o aplicație, comută Wi-Fi sau Nu deranja pe un telefon.

Când

trigger este o expresie cron cu fus orar (5 sau 6 câmpuri, semantica zilelor din vixie-cron), un at unic, un interval, un event de declanșator sau after altă programare (la succes, eșec sau mereu). POST /v1/schedules/preview transformă cuvinte în română sau engleză („în zilele lucrătoare la 9”, "every day at 3") în cron și întoarce următoarele cinci rulări plus un avertisment când o rulare cade într-o fereastră de schimbare a orei. Rulările ratate (gazdă adormită, întrerupere) urmează misfire: skip, once (implicit) sau all_within în misfire_window_min.

Unde

target alege o singură gazdă, orice gazdă cu toate etichetele tags, any gazdă online, cloud-ul codai sau un cloud_vm al unui proiect. O rulare cloud_vm (shell sau http) ajunge la daemonul unuia dintre mediile tale cloud codai din acel proiect; dacă niciunul nu e online, planificatorul pornește mediul oprit folosit cel mai recent (e nevoie de soldul pentru o oră în portofel), iar timeout-ul de inactivitate al mediului îl oprește din nou după rulare. failover listează seturi de etichete de încercat când ținta e offline. O gazdă preia o rulare cu un lease de 60 de secunde (POST /v1/scheduler/claim, FOR UPDATE SKIP LOCKED, deci două gazde nu iau niciodată aceeași rulare), îl menține cu heartbeat și raportează rezultatul. Un lease expirat devine o încercare nouă pe care o poate prelua altă gazdă. Cu native: true și o singură gazdă țintă, aplicația desktop oglindește programarea și în planificatorul sistemului de operare (Task Scheduler, launchd sau timere systemd), ca să ruleze chiar dacă codai nu e pornit.

Siguranță

  • Comenzile shell au nevoie de aprobarea gazdei. O programare shell păstrează sha256 al shell, cwd, command, nume variabile. Fiecare gazdă îți arată o dată comanda exactă și aprobă acel hash (POST /v1/schedules/{id}/approve-command); orice modificare schimbă hash-ul și șterge toate aprobările.
  • Aprobare pe rulare. policy.approval = always sau outside_hours (cu quiet_hours) pune rulările în awaiting_approval; primești o notificare pe fiecare dispozitiv, inclusiv pe ceas, și aprobi sau sari de pe oricare.
  • Limite. policy.max_runs_per_hour, bugete pe rulare și pe zi (micro-USD), overlap (skip, queue, kill), timeout_s și retries cu retry_backoff_s.
  • Alerte. Eșecurile (alert_on_fail) și rulările pe care nu le-a pornit nimeni în late_after_s trimit o notificare cu link direct către rulare.

Pauză, zile sărite și control al zgomotului

  • Mod vacanță. POST /v1/schedules/pause (opțional until) oprește crearea rulărilor pentru toate programările; POST /v1/schedules/resume o încheie, iar backfill: true dă fiecărei programări care a ratat sloturi exact o rulare de recuperare.
  • Zile sărite. policy.skip_days sare peste sărbătorile legale din România (holidays: 'RO', inclusiv Paștele și Rusaliile ortodoxe), zile ale săptămânii alese sau date exacte, în fusul orar al declanșatorului. Sloturile sărite nu se creează deloc.
  • Bugete și pauză automată. Când rulările de azi ating policy.budget_micro_usd_per_day, rulările noi se sar, cu o singură alertă pe zi. După policy.pause_after_failures eșecuri consecutive (implicit 3) programarea se dezactivează singură și te anunță.
  • Notificări. notify = on_failure (implicit), on_change (doar când ieșirea normalizată diferă de ultimul succes: orele și id-urile sunt ignorate), always sau never.
  • Șabloane. GET /v1/schedules/templates listează programări gata făcute, de exemplu rezumatul săptămânal al transcrierilor (sumar, decizii, acțiuni, trimis pe email în fiecare vineri la 17:00).

Monitoare heartbeat

Pentru joburi pe care codai nu le rulează (un crontab pe un VM, un job CI, un job Cloud Scheduler), creează un monitor cu POST /v1/heartbeats { name, period_s, grace_s }. Răspunsul conține ping_url o singură dată. Jobul îl apelează:

  • GET|POST /ping/<token> la succes, /ping/<token>/start la pornire, /ping/<token>/fail la eșec sau /ping/<token>/<cod de ieșire>.

Lipsa unui succes în period_s + grace_s (sau o pornire fără succes în toleranță) marchează monitorul down și alertează o dată toate dispozitivele; următorul succes îl marchează up și îți spune că și-a revenit.

# crontab: backup, apoi raportează codul de ieșire
0 3 * * * /srv/backup.sh; curl -fsS -m 10 https://ai.codai.ro/ping/<token>/$?
POST
/v1/schedules/pause

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
until?string
Formatdate-time
resume_policy?string
Valoare din"skip""backfill"

Corpul răspunsului

OK.

application/json
  1. response
[key: string]?any
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedules/pause' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{}
POST
/v1/schedules/resume

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
backfill?boolean

Corpul răspunsului

OK.

application/json
  1. response
[key: string]?any
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedules/resume' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{}
GET
/v1/schedules/templates

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

OK.

application/json
  1. response
[key: string]?any
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/schedules/templates'
Exemplu de răspuns
{}
POST
/v1/schedules/templates

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
template*string
params?

Corpul răspunsului

OK.

application/json
  1. response
[key: string]?any
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedules/templates' \  -H 'Content-Type: application/json' \  -d '{  "template": "string"}'
Exemplu de răspuns
{}
GET
/v1/heartbeats

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

OK.

application/json
  1. response
heartbeats*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/heartbeats'
Exemplu de răspuns
{  "heartbeats": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "name": "string",      "period_s": 0,      "grace_s": 0,      "tz": "string",      "status": "new",      "last_ping_at": "2019-08-24T14:15:22Z",      "last_start_at": "2019-08-24T14:15:22Z",      "last_exit_code": 0,      "ping_url": "string",      "created_at": "2019-08-24T14:15:22Z",      "updated_at": "2019-08-24T14:15:22Z"    }  ]}
POST
/v1/heartbeats

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
Lungimelength <= 120
period_s*integer
Interval60 <= value <= 2592000
grace_s?integer
Interval60 <= value <= 604800
tz?string

Corpul răspunsului

Creat.

application/json
  1. response

Un monitor heartbeat.

id*string
Formatuuid
name*string
period_s*integer
grace_s*integer
tz?string
status*string
Valoare din"new""up""late""down""paused"
last_ping_at?string
Formatdate-time
last_start_at?string
Formatdate-time
last_exit_code?integer
ping_url?string

Only in the create response.

created_at?string
Formatdate-time
updated_at?string
Formatdate-time
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/heartbeats' \  -H 'Content-Type: application/json' \  -d '{  "name": "string",  "period_s": 60}'
Exemplu de răspuns
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "name": "string",  "period_s": 0,  "grace_s": 0,  "tz": "string",  "status": "new",  "last_ping_at": "2019-08-24T14:15:22Z",  "last_start_at": "2019-08-24T14:15:22Z",  "last_exit_code": 0,  "ping_url": "string",  "created_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z"}
PATCH
/v1/heartbeats/{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

Id-ul monitorului.

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
name?string
Lungimelength <= 120
period_s?integer
Interval60 <= value <= 2592000
grace_s?integer
Interval60 <= value <= 604800
paused?boolean

Corpul răspunsului

OK.

application/json
  1. response

Un monitor heartbeat.

id*string
Formatuuid
name*string
period_s*integer
grace_s*integer
tz?string
status*string
Valoare din"new""up""late""down""paused"
last_ping_at?string
Formatdate-time
last_start_at?string
Formatdate-time
last_exit_code?integer
ping_url?string

Only in the create response.

created_at?string
Formatdate-time
updated_at?string
Formatdate-time
Exemplu de cerere
curl -X PATCH 'https://ai.codai.ro/v1/heartbeats/497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "name": "string",  "period_s": 0,  "grace_s": 0,  "tz": "string",  "status": "new",  "last_ping_at": "2019-08-24T14:15:22Z",  "last_start_at": "2019-08-24T14:15:22Z",  "last_exit_code": 0,  "ping_url": "string",  "created_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z"}
DELETE
/v1/heartbeats/{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

Id-ul monitorului.

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.

Exemplu de cerere
curl -X DELETE 'https://ai.codai.ro/v1/heartbeats/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Exemplu de răspuns
Gol

Stare live

GET /v1/schedules/stream trimite un eveniment schedule când se schimbă o programare sau o rulare își schimbă starea pe orice dispozitiv, așa că fiecare ecran se actualizează într-o secundă.

import { Codai } from 'codai-sdk';

const codai = new Codai({ apiKey: process.env.CODAI_API_KEY! });
const preview = await codai.schedules.preview({ text: 'every weekday at 9', tz: 'Europe/Bucharest' });
const backup = await codai.schedules.create({
  name: 'Nightly backup',
  kind: 'shell',
  spec: { command: 'restic backup ~/work' },
  trigger: { type: 'cron', expr: '0 3 * * *', tz: 'Europe/Bucharest' },
  target: { type: 'tags', tags: ['pc'] },
  retries: 2,
});
for await (const e of codai.schedules.stream()) console.log(e.op, e.state);
from codai import Codai

codai = Codai(api_key="codai_...", device="7f0e3c1a-...")
job = codai.schedules.executor.claim()  # host side; None when there is nothing to run
if job:
    codai.schedules.executor.result(job["run"]["id"], {"attempt": job["run"]["attempt"], "ok": True, "exit_code": 0})
GET
/v1/schedules

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

OK.

application/json
  1. response
schedules*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/schedules'
Exemplu de răspuns
{  "schedules": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "name": "string",      "description": "string",      "enabled": true,      "kind": "agent",      "spec": {},      "trigger": {},      "target": {},      "failover": [        [          "string"        ]      ],      "native": true,      "policy": {},      "misfire": "skip",      "misfire_window_min": 0,      "overlap": "skip",      "timeout_s": 0,      "retries": 0,      "retry_backoff_s": 0,      "late_after_s": 0,      "alert_on_fail": true,      "template": "string",      "command_hash": "string",      "next_run_at": "2019-08-24T14:15:22Z",      "last_run_at": "2019-08-24T14:15:22Z",      "upcoming": [        "2019-08-24T14:15:22Z"      ],      "approvals": [        {          "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",          "command_hash": "string",          "approved_at": "2019-08-24T14:15:22Z"        }      ],      "created_at": "2019-08-24T14:15:22Z",      "updated_at": "2019-08-24T14:15:22Z"    }  ]}
POST
/v1/schedules

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

Câmpurile programării. kind alege forma lui spec: agent {prompt, skill?, permissions?}, shell {command, cwd?, env_names?, shell?}, http {method?, url, headers?, body?, expect_status?}, chain {steps, stop_on_failure?}, phone_action {action, params?}.

name*string
Lungimelength <= 120
description?string
enabled?boolean
kind*string
Valoare din"agent""shell""http""chain""phone_action"
spec*
trigger*

cron {type, expr, tz}, at {type, at}, interval {type, every_s}, event {type, trigger_id} sau after {type, schedule_id, on}.

target?

host {type, device_id}, tags {type, tags}, any, cloud sau cloud_vm {type, project_id}.

failover?array<array<string>>
native?boolean
policy?

Aprobare (niciodată, mereu, în afara orelor de liniște), ore de liniște, bugete pe rulare și pe zi (micro-USD) și limita de rulări pe oră.

misfire?string
Valoare din"skip""once""all_within"
misfire_window_min?integer
overlap?string
Valoare din"skip""queue""kill"
timeout_s?integer
retries?integer
retry_backoff_s?integer
late_after_s?integer
alert_on_fail?boolean
template?string

Corpul răspunsului

Creat.

application/json
  1. response

O sarcină programată.

id*string
Formatuuid
name*string
Lungimelength <= 120
description?string
enabled*boolean
kind*string
Valoare din"agent""shell""http""chain""phone_action"
spec?
trigger*

cron {type, expr, tz}, at {type, at}, interval {type, every_s}, event {type, trigger_id} sau after {type, schedule_id, on}.

target*

host {type, device_id}, tags {type, tags}, any, cloud sau cloud_vm {type, project_id}.

failover?array<array<string>>
native?boolean
policy?

Aprobare (niciodată, mereu, în afara orelor de liniște), ore de liniște, bugete pe rulare și pe zi (micro-USD) și limita de rulări pe oră.

misfire?string
Valoare din"skip""once""all_within"
misfire_window_min?integer
overlap?string
Valoare din"skip""queue""kill"
timeout_s?integer
retries?integer
retry_backoff_s?integer
late_after_s?integer
alert_on_fail?boolean
template?string
command_hash?string
next_run_at?string
Formatdate-time
last_run_at?string
Formatdate-time
upcoming*array<>
approvals?array<>
created_at?string
Formatdate-time
updated_at?string
Formatdate-time
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedules' \  -H 'Content-Type: application/json' \  -d '{  "name": "string",  "kind": "agent",  "spec": {},  "trigger": {}}'
Exemplu de răspuns
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "name": "string",  "description": "string",  "enabled": true,  "kind": "agent",  "spec": {},  "trigger": {},  "target": {},  "failover": [    [      "string"    ]  ],  "native": true,  "policy": {},  "misfire": "skip",  "misfire_window_min": 0,  "overlap": "skip",  "timeout_s": 0,  "retries": 0,  "retry_backoff_s": 0,  "late_after_s": 0,  "alert_on_fail": true,  "template": "string",  "command_hash": "string",  "next_run_at": "2019-08-24T14:15:22Z",  "last_run_at": "2019-08-24T14:15:22Z",  "upcoming": [    "2019-08-24T14:15:22Z"  ],  "approvals": [    {      "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",      "command_hash": "string",      "approved_at": "2019-08-24T14:15:22Z"    }  ],  "created_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z"}
POST
/v1/schedules/preview

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
text?string
Lungimelength <= 200
trigger?
tz?string
Implicit"Europe/Bucharest"

Corpul răspunsului

OK.

application/json
  1. response
ok*boolean
reason?string
Valoare din"not_understood""invalid"
trigger?
next_runs?array<>
dst_warning?boolean
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedules/preview' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{  "ok": true,  "reason": "not_understood",  "trigger": {},  "next_runs": [    "2019-08-24T14:15:22Z"  ],  "dst_warning": true}
GET
/v1/schedules/stream

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

OK.

response?stringtext/event-stream
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/schedules/stream'
Exemplu de răspuns
"string"
GET
/v1/schedules/{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

Id-ul programării.

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

OK.

application/json
  1. response

O sarcină programată.

id*string
Formatuuid
name*string
Lungimelength <= 120
description?string
enabled*boolean
kind*string
Valoare din"agent""shell""http""chain""phone_action"
spec?
trigger*

cron {type, expr, tz}, at {type, at}, interval {type, every_s}, event {type, trigger_id} sau after {type, schedule_id, on}.

target*

host {type, device_id}, tags {type, tags}, any, cloud sau cloud_vm {type, project_id}.

failover?array<array<string>>
native?boolean
policy?

Aprobare (niciodată, mereu, în afara orelor de liniște), ore de liniște, bugete pe rulare și pe zi (micro-USD) și limita de rulări pe oră.

misfire?string
Valoare din"skip""once""all_within"
misfire_window_min?integer
overlap?string
Valoare din"skip""queue""kill"
timeout_s?integer
retries?integer
retry_backoff_s?integer
late_after_s?integer
alert_on_fail?boolean
template?string
command_hash?string
next_run_at?string
Formatdate-time
last_run_at?string
Formatdate-time
upcoming*array<>
approvals?array<>
created_at?string
Formatdate-time
updated_at?string
Formatdate-time
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/schedules/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Exemplu de răspuns
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "name": "string",  "description": "string",  "enabled": true,  "kind": "agent",  "spec": {},  "trigger": {},  "target": {},  "failover": [    [      "string"    ]  ],  "native": true,  "policy": {},  "misfire": "skip",  "misfire_window_min": 0,  "overlap": "skip",  "timeout_s": 0,  "retries": 0,  "retry_backoff_s": 0,  "late_after_s": 0,  "alert_on_fail": true,  "template": "string",  "command_hash": "string",  "next_run_at": "2019-08-24T14:15:22Z",  "last_run_at": "2019-08-24T14:15:22Z",  "upcoming": [    "2019-08-24T14:15:22Z"  ],  "approvals": [    {      "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",      "command_hash": "string",      "approved_at": "2019-08-24T14:15:22Z"    }  ],  "created_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z"}
PATCH
/v1/schedules/{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

Id-ul programării.

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
[key: string]?any

Corpul răspunsului

OK.

application/json
  1. response

O sarcină programată.

id*string
Formatuuid
name*string
Lungimelength <= 120
description?string
enabled*boolean
kind*string
Valoare din"agent""shell""http""chain""phone_action"
spec?
trigger*

cron {type, expr, tz}, at {type, at}, interval {type, every_s}, event {type, trigger_id} sau after {type, schedule_id, on}.

target*

host {type, device_id}, tags {type, tags}, any, cloud sau cloud_vm {type, project_id}.

failover?array<array<string>>
native?boolean
policy?

Aprobare (niciodată, mereu, în afara orelor de liniște), ore de liniște, bugete pe rulare și pe zi (micro-USD) și limita de rulări pe oră.

misfire?string
Valoare din"skip""once""all_within"
misfire_window_min?integer
overlap?string
Valoare din"skip""queue""kill"
timeout_s?integer
retries?integer
retry_backoff_s?integer
late_after_s?integer
alert_on_fail?boolean
template?string
command_hash?string
next_run_at?string
Formatdate-time
last_run_at?string
Formatdate-time
upcoming*array<>
approvals?array<>
created_at?string
Formatdate-time
updated_at?string
Formatdate-time
Exemplu de cerere
curl -X PATCH 'https://ai.codai.ro/v1/schedules/497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "name": "string",  "description": "string",  "enabled": true,  "kind": "agent",  "spec": {},  "trigger": {},  "target": {},  "failover": [    [      "string"    ]  ],  "native": true,  "policy": {},  "misfire": "skip",  "misfire_window_min": 0,  "overlap": "skip",  "timeout_s": 0,  "retries": 0,  "retry_backoff_s": 0,  "late_after_s": 0,  "alert_on_fail": true,  "template": "string",  "command_hash": "string",  "next_run_at": "2019-08-24T14:15:22Z",  "last_run_at": "2019-08-24T14:15:22Z",  "upcoming": [    "2019-08-24T14:15:22Z"  ],  "approvals": [    {      "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",      "command_hash": "string",      "approved_at": "2019-08-24T14:15:22Z"    }  ],  "created_at": "2019-08-24T14:15:22Z",  "updated_at": "2019-08-24T14:15:22Z"}
DELETE
/v1/schedules/{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

Id-ul programării.

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

Gata, fără conținut.

Exemplu de cerere
curl -X DELETE 'https://ai.codai.ro/v1/schedules/497f6eca-6276-4993-bfeb-53cbbbba6f08'
Exemplu de răspuns
Gol
POST
/v1/schedules/{id}/run

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

Id-ul programării.

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

Acceptat.

application/json
  1. response
queued*boolean
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedules/497f6eca-6276-4993-bfeb-53cbbbba6f08/run'
Exemplu de răspuns
{  "queued": true}
GET
/v1/schedules/{id}/runs

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

Id-ul programării.

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

OK.

application/json
  1. response
runs*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/schedules/497f6eca-6276-4993-bfeb-53cbbbba6f08/runs'
Exemplu de răspuns
{  "runs": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "schedule_id": "8929bb67-0da1-406c-99d2-5447376a4f58",      "scheduled_for": "2019-08-24T14:15:22Z",      "state": "pending",      "attempt": 0,      "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",      "started_at": "2019-08-24T14:15:22Z",      "finished_at": "2019-08-24T14:15:22Z",      "exit_code": 0,      "cost_micro_usd": 0,      "log_tail": "string",      "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",      "error": "string",      "created_at": "2019-08-24T14:15:22Z"    }  ]}
POST
/v1/schedules/{id}/approve-command

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

Id-ul programării.

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

application/json
  1. body
command_hash*string
Potrivire^[0-9a-f]{64}$

Corpul răspunsului

OK.

application/json
  1. response
approved*boolean
device_id*string
Formatuuid
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedules/497f6eca-6276-4993-bfeb-53cbbbba6f08/approve-command' \  -H 'x-codai-device: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{  "command_hash": "string"}'
Exemplu de răspuns
{  "approved": true,  "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940"}
GET
/v1/schedule-runs

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

limit?integer
Interval1 <= value <= 200
Implicit50

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

OK.

application/json
  1. response
runs*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/schedule-runs'
Exemplu de răspuns
{  "runs": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "schedule_id": "8929bb67-0da1-406c-99d2-5447376a4f58",      "scheduled_for": "2019-08-24T14:15:22Z",      "state": "pending",      "attempt": 0,      "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",      "started_at": "2019-08-24T14:15:22Z",      "finished_at": "2019-08-24T14:15:22Z",      "exit_code": 0,      "cost_micro_usd": 0,      "log_tail": "string",      "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",      "error": "string",      "created_at": "2019-08-24T14:15:22Z"    }  ]}
POST
/v1/schedule-runs/{id}/decision

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

Id-ul rulării.

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
approve*boolean

Corpul răspunsului

OK.

application/json
  1. response

O execuție a unei programări.

id*string
Formatuuid
schedule_id*string
Formatuuid
scheduled_for*string
Formatdate-time
state*string
Valoare din"pending""awaiting_approval""claimed""running""succeeded""failed""timed_out""skipped""cancelled"
attempt*integer
device_id?string
Formatuuid
started_at?string
Formatdate-time
finished_at?string
Formatdate-time
exit_code?integer
cost_micro_usd?integer
log_tail?string
session_id?string
Formatuuid
error?string
created_at?string
Formatdate-time
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedule-runs/497f6eca-6276-4993-bfeb-53cbbbba6f08/decision' \  -H 'Content-Type: application/json' \  -d '{  "approve": true}'
Exemplu de răspuns
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "schedule_id": "8929bb67-0da1-406c-99d2-5447376a4f58",  "scheduled_for": "2019-08-24T14:15:22Z",  "state": "pending",  "attempt": 0,  "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",  "started_at": "2019-08-24T14:15:22Z",  "finished_at": "2019-08-24T14:15:22Z",  "exit_code": 0,  "cost_micro_usd": 0,  "log_tail": "string",  "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",  "error": "string",  "created_at": "2019-08-24T14:15:22Z"}
POST
/v1/schedule-runs/{id}/heartbeat

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

Id-ul rulării.

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

application/json
  1. body
attempt*integer
Interval1 <= value
log?string
Lungimelength <= 16384

Corpul răspunsului

Gata, fără conținut.

Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedule-runs/497f6eca-6276-4993-bfeb-53cbbbba6f08/heartbeat' \  -H 'x-codai-device: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{  "attempt": 1}'
Exemplu de răspuns
Gol
POST
/v1/schedule-runs/{id}/result

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

Id-ul rulării.

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

application/json
  1. body
attempt*integer
Interval1 <= value
ok*boolean
exit_code?integer
error?string
Lungimelength <= 4000
log_tail?string
Lungimelength <= 65536
cost_micro_usd?integer
Interval0 <= value
session_id?string
Formatuuid
timed_out?boolean

Corpul răspunsului

OK.

application/json
  1. response

O execuție a unei programări.

id*string
Formatuuid
schedule_id*string
Formatuuid
scheduled_for*string
Formatdate-time
state*string
Valoare din"pending""awaiting_approval""claimed""running""succeeded""failed""timed_out""skipped""cancelled"
attempt*integer
device_id?string
Formatuuid
started_at?string
Formatdate-time
finished_at?string
Formatdate-time
exit_code?integer
cost_micro_usd?integer
log_tail?string
session_id?string
Formatuuid
error?string
created_at?string
Formatdate-time
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/schedule-runs/497f6eca-6276-4993-bfeb-53cbbbba6f08/result' \  -H 'x-codai-device: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{  "attempt": 1,  "ok": true}'
Exemplu de răspuns
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "schedule_id": "8929bb67-0da1-406c-99d2-5447376a4f58",  "scheduled_for": "2019-08-24T14:15:22Z",  "state": "pending",  "attempt": 0,  "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",  "started_at": "2019-08-24T14:15:22Z",  "finished_at": "2019-08-24T14:15:22Z",  "exit_code": 0,  "cost_micro_usd": 0,  "log_tail": "string",  "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",  "error": "string",  "created_at": "2019-08-24T14:15:22Z"}
GET
/v1/scheduler/hosts

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

OK.

application/json
  1. response
hosts*array<>
Exemplu de cerere
curl -X GET 'https://ai.codai.ro/v1/scheduler/hosts'
Exemplu de răspuns
{  "hosts": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "name": "string",      "platform": "string",      "os": "string",      "arch": "string",      "host_kind": "string",      "tags": [        "string"      ],      "capabilities": [        "string"      ],      "online": true,      "last_seen_at": "2019-08-24T14:15:22Z",      "app_version": "string"    }  ]}
PATCH
/v1/scheduler/hosts/{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

Id-ul dispozitivului gazdă.

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
name?string
Lungimelength <= 120
tags?array<>
Elementeitems <= 16
host_kind?string
Valoare din"pc""phone""watch""vm""cloud"
os?string
Valoare din"windows""macos""linux""android""wearos""ios"
arch?string
Lungimelength <= 20

Corpul răspunsului

OK.

application/json
  1. response
[key: string]?any
Exemplu de cerere
curl -X PATCH 'https://ai.codai.ro/v1/scheduler/hosts/497f6eca-6276-4993-bfeb-53cbbbba6f08' \  -H 'Content-Type: application/json' \  -d '{}'
Exemplu de răspuns
{}
POST
/v1/scheduler/claim

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 răspunsului

OK.

application/json
  1. response
run*

O execuție a unei programări.

schedule*

O sarcină programată.

host_approved*boolean
Exemplu de cerere
curl -X POST 'https://ai.codai.ro/v1/scheduler/claim' \  -H 'x-codai-device: 497f6eca-6276-4993-bfeb-53cbbbba6f08'
Exemplu de răspuns
{  "run": {    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",    "schedule_id": "8929bb67-0da1-406c-99d2-5447376a4f58",    "scheduled_for": "2019-08-24T14:15:22Z",    "state": "pending",    "attempt": 0,    "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",    "started_at": "2019-08-24T14:15:22Z",    "finished_at": "2019-08-24T14:15:22Z",    "exit_code": 0,    "cost_micro_usd": 0,    "log_tail": "string",    "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82",    "error": "string",    "created_at": "2019-08-24T14:15:22Z"  },  "schedule": {    "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",    "name": "string",    "description": "string",    "enabled": true,    "kind": "agent",    "spec": {},    "trigger": {},    "target": {},    "failover": [      [        "string"      ]    ],    "native": true,    "policy": {},    "misfire": "skip",    "misfire_window_min": 0,    "overlap": "skip",    "timeout_s": 0,    "retries": 0,    "retry_backoff_s": 0,    "late_after_s": 0,    "alert_on_fail": true,    "template": "string",    "command_hash": "string",    "next_run_at": "2019-08-24T14:15:22Z",    "last_run_at": "2019-08-24T14:15:22Z",    "upcoming": [      "2019-08-24T14:15:22Z"    ],    "approvals": [      {        "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",        "command_hash": "string",        "approved_at": "2019-08-24T14:15:22Z"      }    ],    "created_at": "2019-08-24T14:15:22Z",    "updated_at": "2019-08-24T14:15:22Z"  },  "host_approved": true}

Pe această pagină