Chat API
Använd Rivya Chat API för icke-streamande eller SSE-turns, API-skapade sessioner, file_id-bildbilagor och tokenbaserad creditavräkning.
Senast granskad 2026/05/11
Använd POST /api/v1/chat/completions för ett komplett icke-streamande chattsvar, eller POST /api/v1/chat/completions/stream för Server-Sent Events.
Chat API är sessionsbaserat. Utelämna session_id för att starta en ny API-chattsession. Skicka med ett returnerat session_id för att fortsätta samma API-skapade session.
Aktuell omfattning
Chat API v1 stöder:
- icke-streamande assistentsvar
- SSE-streaming med
text/event-stream - API-skapade chattsessioner
- reservation av kontocredits och slutlig tokenbaserad avräkning
- valfri webbsökning, reasoning effort och thought mode när den valda modellen stöder det
- bildbilagor via Files API-värden för
file_id
Chat API v1 stöder inte:
- rå
messages-historik som användaren skickar in - fortsättning av Studio-exklusiva chattsessioner
- godtyckliga externa bilage-URL:er
- Chat webhook events
Nödvändiga scopes
Använd en API-nyckel med:
chat:create
chat:readNya nycklar som skapas i Settings innehåller båda scopes som standard. Äldre nycklar kan behöva skapas om innan Chat API anropas.
Skapa en chat completion
curl https://rivya.ai/api/v1/chat/completions \
-H "Authorization: Bearer rvya_sk_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: chat-turn-001" \
-d '{
"model": "gpt-5-2-chat",
"message": "Write a concise launch plan for a new product image campaign",
"client_request_id": "chat-001"
}'Svar:
{
"id": "chatcmpl_...",
"object": "chat.completion",
"session_id": "session_id",
"model": "gpt-5-2-chat",
"created_at": "2026-05-11T00:00:00.000Z",
"message": {
"id": "assistant_message_id",
"role": "assistant",
"content": "..."
},
"usage": {
"input_tokens": 1200,
"output_tokens": 320,
"total_tokens": 1520
},
"credits": {
"reserved": 3,
"final": 2
}
}Streama en chat completion
Använd POST /api/v1/chat/completions/stream när din server vill ta emot assistant-deltan medan de kommer:
curl -N https://rivya.ai/api/v1/chat/completions/stream \
-H "Authorization: Bearer rvya_sk_..." \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-H "Idempotency-Key: chat-stream-001" \
-d '{
"model": "gpt-5-2-chat",
"message": "Write a concise launch plan for a new product image campaign",
"client_request_id": "chat-stream-001"
}'Streamande svar använder Content-Type: text/event-stream; charset=utf-8.
Händelser:
| Event | Betydelse |
|---|---|
session.created | API-nyckel, modell, session, bilagor, rate limit och creditreservation har kontrollerats. |
message.delta | Ett visningsdelta för assistentmeddelandet. Det är ännu inte ett committat meddelande. |
message.completed | Assistentmeddelandet har committats till den API-skapade sessionen. |
usage.completed | Tokenanvändning och slutliga credits har avräknats. |
heartbeat | Keepalive-händelse under längre pauser. |
error | Offentligt API-felkuvert för ett fel efter att streaming har startat. |
done | Streamen slutfördes utan fel. |
Exempelstream:
event: session.created
data: {"request_id":"req_...","session_id":"session_id","model":"gpt-5-2-chat"}
event: message.delta
data: {"request_id":"req_...","session_id":"session_id","delta":"Draft ","index":0}
event: message.completed
data: {"request_id":"req_...","session_id":"session_id","message":{"id":"assistant_message_id","role":"assistant","content":"Draft ...","created_at":"2026-05-11T00:00:00.000Z"}}
event: usage.completed
data: {"request_id":"req_...","session_id":"session_id","usage":{"input_tokens":1200,"output_tokens":320,"total_tokens":1520},"credits":{"reserved":3,"final":2}}
event: done
data: {"request_id":"req_...","ok":true}Om ett fel inträffar efter den första SSE-händelsen skickar streamen event: error och stängs sedan:
event: error
data: {"error":{"code":"internal_error","message":"The request could not be completed.","requestId":"req_..."}}Om klienten kopplar från innan slutförande stoppar Rivya den pågående genereringsstreamen när det är möjligt. Partiella deltan sparas inte som ett slutligt assistentmeddelande. Om servern redan har committat message.completed kan slutresultatet läsas senare med GET /api/v1/chat/sessions/{sessionId}.
Fortsätt en session
Använd det returnerade session_id:
curl https://rivya.ai/api/v1/chat/completions \
-H "Authorization: Bearer rvya_sk_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: chat-turn-002" \
-d '{
"model": "gpt-5-2-chat",
"session_id": "session_id",
"message": "Now turn that into a 5-step execution checklist."
}'Sessionen måste tillhöra samma Rivya-konto och ha skapats av Public API. Studio-exklusiva chattsessioner returneras inte och fortsätts inte av Chat API.
Bildbilagor
Chatbilagor använder Files API-poster, inte externa URL:er.
- Ladda upp en bild med
POST /api/v1/files. - Använd det returnerade
idsomattachments[].file_id.
{
"model": "gpt-5-2-chat",
"message": "Review this product photo and suggest a cleaner editorial direction.",
"attachments": [
{
"file_id": "file_..."
}
]
}Filen måste tillhöra samma konto, ha kind: "image" och vara tillgänglig. Modeller som inte stöder bildbilagor returnerar chat_attachment_not_supported.
Valfria kontroller
{
"model": "gpt-5-2-chat",
"message": "Compare three launch options.",
"enable_web_search": false,
"reasoning_effort": "default",
"thought_mode": "default"
}Kontrollstöd varierar per modell. Läs /api/v1/models och kontrollera chat_capabilities innan du visar kontroller i ditt UI.
Lista sessioner
Använd GET /api/v1/chat/sessions med en nyckel som innehåller chat:read.
curl https://rivya.ai/api/v1/chat/sessions \
-H "Authorization: Bearer rvya_sk_..."Detta returnerar endast API-skapade sessioner:
{
"object": "list",
"data": [
{
"id": "session_id",
"object": "chat.session",
"model": "gpt-5-2-chat",
"tool_slug": null,
"title": "Write a concise launch plan...",
"controls": {
"enable_web_search": false,
"reasoning_effort": null,
"thought_mode": null
},
"created_at": "2026-05-11T00:00:00.000Z",
"updated_at": "2026-05-11T00:00:00.000Z",
"last_message_at": "2026-05-11T00:00:00.000Z"
}
]
}Hämta en session
Använd GET /api/v1/chat/sessions/{sessionId} för att läsa en API-skapad session och dess committade meddelanden.
curl https://rivya.ai/api/v1/chat/sessions/session_id \
-H "Authorization: Bearer rvya_sk_..."Svaret innehåller committade användar- och assistentmeddelanden. Det exponerar inte interna leverantörs-fält.
Idempotens
Använd Idempotency-Key för varje produktionsanrop till POST /api/v1/chat/completions och POST /api/v1/chat/completions/stream.
Om ett nytt försök använder samma nyckel och samma body kan Rivya returnera det sparade svaret utan att skapa ett nytt meddelande eller konsumera credits igen. Om samma nyckel återanvänds med annan indata returnerar API:et idempotency_conflict.
Vid streaming-retries spelar Rivya inte upp historiska tokendeltan. En slutförd replay returnerar en minimal SSE-sekvens med session.created, message.completed, usage.completed och done.
Vanliga fel
| Code | Betydelse |
|---|---|
chat_model_not_supported | Den valda modellen är inte tillgänglig för Chat API. |
chat_session_conflict | Sessionen kan inte användas för den här begäran. |
chat_attachment_not_supported | Bilagan saknas, ägs inte av kontot, är inte en bild eller stöds inte av modellen. |
insufficient_credits | Kontot har inte tillräckligt med credits för turnen. |
idempotency_conflict | Idempotensnyckeln återanvändes med annan indata. |