Embeddings și audio
Embeddings vectoriale, speech-to-text, text-to-speech și tokenurile efemere cerute de WebSocket-ul realtime.
Embeddings și audio urmează formele OpenAI. POST /v1/tokens emite tokenul de scurtă durată pe care un browser trebuie să-l trimită ca ?key= când deschide wss://ai.codai.ro/v1/realtime — o cheie codai_ brută în query string e refuzată (cod de închidere 4401). Vezi ghidul embeddings & audio pentru exemple complete.
bearerAuthAutorizareBearer <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).
x-request-id?stringId de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128x-codai-session-id?stringGrupează cererile unei conversații pentru chitanțe, stickiness și prompt caching.
length <= 128application/json- body
Body de embeddings compatibil OpenAI. Câmpurile necunoscute sunt acceptate și ignorate.
model?stringAlias sau id concret de model de embedding. Implicit codai-embed (modelul implicit al platformei voyage-code-3).
"codai-embed"input*|array<string>Un string sau un array nevid de string-uri. Array-urile de id-uri de tokeni nu sunt suportate.
dimensions?integerLimită opțională a dimensionalității de ieșire. Respectată de upstream-urile OpenAI-style, ignorată de celelalte.
1 <= valueuser?stringCâmp de tracking OpenAI; logat, niciodată trimis upstream.
encoding_format?"float"Doar float e suportat; base64 e respins cu 400.
"float"[key: string]?anyVectorii de embedding în forma de listă OpenAI.
application/json- response
object*"list""list"data*array<>model*stringModelul upstream care a produs vectorii (coincide cu x-codai-routed-to).
usage*curl -X POST 'https://ai.codai.ro/v1/embeddings' \ -H 'Content-Type: application/json' \ -d '{ "input": "function add(a, b) { return a + b }"}'{ "object": "list", "data": [ { "object": "embedding", "index": 0, "embedding": [ 0 ] } ], "model": "voyage-code-3", "usage": { "prompt_tokens": 0, "total_tokens": 0 }}bearerAuthAutorizareBearer <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).
x-request-id?stringId de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128x-codai-session-id?stringGrupează cererile unei conversații pentru chitanțe, stickiness și prompt caching.
length <= 128multipart/form-data- body
Câmpuri de formular multipart. Doar câmpurile listate sunt trimise mai departe; orice altceva e ignorat.
file*fileFișier audio, max 25 MB. Numele original al fișierului e trimis mai departe (audio.webm când lipsește).
binarymodel?stringcodai-transcribe, whisper-1 și whisper merg la deployment-ul Whisper; gpt-4o-mini-transcribe la al lui propriu.
"codai-transcribe""codai-transcribe""whisper-1""whisper""gpt-4o-mini-transcribe"language?stringIndiciu de limbă ISO-639-1, trimis mai departe neschimbat.
prompt?stringText opțional care ghidează stilul sau ortografia, trimis mai departe neschimbat.
response_format?stringTrimis mai departe neschimbat. Folosește un format JSON (json, verbose_json); text/srt/vtt stric parsarea JSON a gateway-ului.
"json"temperature?stringTemperatura de eșantionare ca câmp de formular string (0–1), trimisă mai departe neschimbată.
Transcrierea, așa cum a returnat-o deployment-ul upstream.
application/json- response
JSON-ul upstream e returnat neschimbat. Cu verbose_json apar câmpuri suplimentare (language, duration, segments, …) lângă text.
text?stringTranscrierea.
[key: string]?anycurl -X POST 'https://ai.codai.ro/v1/audio/transcriptions' \ -F 'file=string'{ "text": "Bună, vreau să programez o întâlnire mâine la zece."}bearerAuthAutorizareBearer <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).
x-request-id?stringId de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128x-codai-session-id?stringGrupează cererile unei conversații pentru chitanțe, stickiness și prompt caching.
length <= 128application/json- body
model?stringcodai-tts/tts-1/tts = voce neutră; codai-tts-expressive/gpt-4o-mini-tts = familia expresivă care respectă instructions; codai-speech = Chirp 3 HD (română nativă, rapid); codai-speech-expressive = Gemini 2.5 Flash TTS (română nativă, respectă instructions).
"codai-tts""codai-tts""tts-1""tts""codai-tts-expressive""gpt-4o-mini-tts""codai-speech""codai-speech-expressive"input*stringTextul de sintetizat. Peste 4096 de caractere e respins cu 400.
1 <= length <= 4096voice?stringNumele vocii, nevalidat. Implicit alloy (neutră), marin (expresivă), Aoede (codai-speech) sau Kore (codai-speech-expressive). Familia expresivă acceptă și ash, ballad, coral, echo, fable, onyx, nova, sage, shimmer, verse, cedar. Modelele codai-speech acceptă cele 30 de nume scurte Chirp 3 HD (Achernar … Zubenelgenubi) sau un nume complet de voce Google.
response_format?stringContainerul audio, trimis mai departe fără validare.
"mp3"speed?numberMultiplicator de viteză de redare, trimis mai departe când e truthy (deci 0 e ignorat).
instructions?stringIndiciu de stil de rostire (ex. „calm, cald, rar”). Respectat doar de codai-tts-expressive/gpt-4o-mini-tts și codai-speech-expressive; trunchiat la 1000 de caractere.
length <= 1000language?stringLimba BCP-47 a textului. Alege localizarea vocii pentru modelele codai-speech și ghidează transcrierea pentru marcajele de timp.
"ro-RO"timestamps?booleanÎntoarce marcaje de timp per cuvânt în words. Comută răspunsul pe SpeechJson.
falsestore?booleanStochează audio-ul ca asset studio (tip speech, cu words în metadate când e setat timestamps) și îl întoarce ca asset în loc de b64_json. Comută răspunsul pe SpeechJson.
falseAudio binar în formatul cerut (media type-ul e cel returnat de upstream, audio/mpeg când nu a trimis niciunul) sau SpeechJson când timestamps ori store e true.
- response
Întors de POST /v1/audio/speech când timestamps sau store e true.
object*"audio.speech""audio.speech"model*stringId-ul public al modelului care a servit cererea.
voice*stringlanguage*stringmime_type*stringduration_seconds*numberDurata audio-ului, în secunde.
b64_json?stringAudio în base64. Prezent când store nu e true.
asset?Un asset codai Studio. Îl întorc /v1/assets și, cu response_format: "url", câmpul data al endpoint-urilor de imagine, muzică și video.
words?array<>|Marcaje de timp per cuvânt; prezente doar când timestamps a fost true, null când transcrierea a eșuat.
cost_micro_usd*stringCostul upstream al cererii, în micro-USD, ca șir zecimal.
curl -X POST 'https://ai.codai.ro/v1/audio/speech' \ -H 'Content-Type: application/json' \ -d '{ "input": "Bună ziua! Cu ce te pot ajuta astăzi?"}'{ "object": "audio.speech", "model": "codai-speech", "voice": "Aoede", "language": "ro-RO", "mime_type": "audio/mpeg", "duration_seconds": 0, "b64_json": "string", "asset": { "asset_id": "b4695157-0d1d-4da0-8f9e-5c53149389e4", "kind": "music", "status": "pending", "model": "lyria-002", "url": "http://example.com", "mime_type": "audio/wav", "bytes": 0, "duration_seconds": 0, "width": 0, "height": 0, "created_at": "2019-08-24T14:15:22Z", "expires_at": "2019-08-24T14:15:22Z" }, "words": [ { "word": "Bună", "start": 0, "end": 0 } ], "cost_micro_usd": "480"}bearerAuthAutorizareBearer <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).
x-request-id?stringId de corelare ales de client; e returnat ca x-codai-trace-id și persistat pe rândul de usage.
length <= 128application/json- body
scope*stringSuprafața la care poate ajunge tokenul. Doar realtime, audio, embeddings și live (realtime + audio) sunt acceptate; orice altceva e 400.
1 <= length <= 32ttl_seconds?integerDurata de viață în secunde. Valorile din afara 60–3600 pică validarea.
60 <= value <= 3600600Tokenul emis, expirarea lui și scope-ul de care a fost legat.
application/json- response
token*stringCredențial bearer de forma codai_eph_v1.<payload>.<signature>. Îl trimiți ca Authorization: Bearer sau ca ?key= pe /v1/realtime.
expires_at*stringExpirarea ca timestamp ISO-8601.
date-timescope*string"realtime""audio""embeddings""live"curl -X POST 'https://ai.codai.ro/v1/tokens' \ -H 'Content-Type: application/json' \ -d '{ "scope": "realtime"}'{ "token": "codai_eph_v1.eyJraWQiOiIuLi4ifQ.c2lnbmF0dXJl", "expires_at": "2026-09-23T10:15:00.000Z", "scope": "realtime"}Ultima actualizare: