Έγγραφα Rivya AI

Chat API

Χρησιμοποιήστε το Rivya Chat API για non-streaming ή SSE turns, sessions που δημιουργούνται από API, συνημμένα εικόνας file_id και token-based διακανονισμό credits.

Τελευταίος έλεγχος στις 2026/05/11

Χρησιμοποιήστε POST /api/v1/chat/completions για μία πλήρη non-streaming απάντηση chat ή POST /api/v1/chat/completions/stream για Server-Sent Events.

Το Chat API βασίζεται σε session. Παραλείψτε το session_id για να ξεκινήσετε νέο API chat session. Περάστε ένα επιστρεφόμενο session_id για να συνεχίσετε το ίδιο session που δημιουργήθηκε από API.

Τρέχον εύρος

Το Chat API v1 υποστηρίζει:

  • non-streaming απαντήσεις assistant
  • SSE streaming με text/event-stream
  • chat sessions που δημιουργούνται από API
  • κράτηση credits λογαριασμού και τελικό token-based settlement
  • προαιρετική web search, reasoning effort και thought mode όταν υποστηρίζονται από το επιλεγμένο μοντέλο
  • συνημμένα εικόνας μέσω τιμών file_id από το Files API

Το Chat API v1 δεν υποστηρίζει:

  • raw ιστορικό messages που παρέχει ο χρήστης
  • συνέχιση Studio-only chat sessions
  • αυθαίρετα εξωτερικά URL συνημμένων
  • γεγονότα chat webhook

Απαιτούμενα scopes

Χρησιμοποιήστε κλειδί API με:

chat:create
chat:read

Τα νέα κλειδιά που δημιουργούνται στις ρυθμίσεις περιλαμβάνουν και τα δύο scopes από προεπιλογή. Παλαιότερα κλειδιά μπορεί να χρειάζεται να δημιουργηθούν ξανά πριν καλέσετε το Chat API.

Δημιουργία 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"
  }'

Απάντηση:

{
  "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
  }
}

Streaming Chat Completion

Χρησιμοποιήστε POST /api/v1/chat/completions/stream όταν ο διακομιστής σας θέλει assistant deltas καθώς φτάνουν:

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"
  }'

Οι streaming απαντήσεις χρησιμοποιούν Content-Type: text/event-stream; charset=utf-8.

Events:

EventΣημασία
session.createdΤο κλειδί API, το μοντέλο, το session, τα συνημμένα, το rate limit και οι έλεγχοι κράτησης credits πέρασαν.
message.deltaΕμφανιζόμενο delta για το μήνυμα assistant. Δεν είναι ακόμη δεσμευμένο μήνυμα.
message.completedΤο μήνυμα assistant δεσμεύτηκε στο session που δημιουργήθηκε από API.
usage.completedΗ χρήση tokens και τα τελικά credits διακανονίστηκαν.
heartbeatKeepalive event κατά τη διάρκεια μεγάλων παύσεων.
errorΔημόσιος φάκελος σφάλματος API για αποτυχία αφού ξεκίνησε το streaming.
doneΤο stream ολοκληρώθηκε επιτυχώς.

Παράδειγμα stream:

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}

Αν συμβεί σφάλμα μετά το πρώτο SSE event, το stream στέλνει event: error και μετά κλείνει:

event: error
data: {"error":{"code":"internal_error","message":"The request could not be completed.","requestId":"req_..."}}

Αν ο client αποσυνδεθεί πριν την ολοκλήρωση, το Rivya σταματά το in-flight generation stream όταν είναι δυνατό. Τα partial deltas δεν αποθηκεύονται ως τελικό μήνυμα assistant. Αν ο διακομιστής έχει ήδη δεσμεύσει message.completed, το τελικό αποτέλεσμα μπορεί να διαβαστεί αργότερα με GET /api/v1/chat/sessions/{sessionId}.

Συνέχιση session

Χρησιμοποιήστε το επιστρεφόμενο 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."
  }'

Το session πρέπει να ανήκει στον ίδιο λογαριασμό Rivya και να έχει δημιουργηθεί από Public API. Το Chat API δεν επιστρέφει ούτε συνεχίζει Studio-only chat sessions.

Συνημμένα εικόνας

Τα συνημμένα Chat χρησιμοποιούν εγγραφές Files API, όχι εξωτερικά URL.

  1. Ανεβάστε εικόνα με POST /api/v1/files.
  2. Χρησιμοποιήστε το επιστρεφόμενο id ως attachments[].file_id.
{
  "model": "gpt-5-2-chat",
  "message": "Review this product photo and suggest a cleaner editorial direction.",
  "attachments": [
    {
      "file_id": "file_..."
    }
  ]
}

Το αρχείο πρέπει να ανήκει στον ίδιο λογαριασμό, να έχει kind: "image" και να είναι διαθέσιμο. Τα μοντέλα που δεν υποστηρίζουν συνημμένα εικόνας επιστρέφουν chat_attachment_not_supported.

Προαιρετικά controls

{
  "model": "gpt-5-2-chat",
  "message": "Compare three launch options.",
  "enable_web_search": false,
  "reasoning_effort": "default",
  "thought_mode": "default"
}

Η υποστήριξη controls διαφέρει ανά μοντέλο. Διαβάστε /api/v1/models και ελέγξτε το chat_capabilities πριν εκθέσετε controls στο UI σας.

Λίστα sessions

Χρησιμοποιήστε GET /api/v1/chat/sessions με κλειδί που περιλαμβάνει chat:read.

curl https://rivya.ai/api/v1/chat/sessions \
  -H "Authorization: Bearer rvya_sk_..."

Αυτό επιστρέφει μόνο sessions που δημιουργήθηκαν από API:

{
  "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"
    }
  ]
}

Λήψη session

Χρησιμοποιήστε GET /api/v1/chat/sessions/{sessionId} για να διαβάσετε ένα session που δημιουργήθηκε από API και τα δεσμευμένα μηνύματά του.

curl https://rivya.ai/api/v1/chat/sessions/session_id \
  -H "Authorization: Bearer rvya_sk_..."

Η απάντηση περιλαμβάνει δεσμευμένα μηνύματα χρήστη και assistant. Δεν εκθέτει εσωτερικά πεδία provider.

Idempotency

Χρησιμοποιήστε Idempotency-Key για κάθε production αίτημα POST /api/v1/chat/completions και POST /api/v1/chat/completions/stream.

Αν μια επανάληψη χρησιμοποιεί το ίδιο κλειδί και το ίδιο σώμα, το Rivya μπορεί να επιστρέψει την αποθηκευμένη απάντηση χωρίς να δημιουργήσει άλλο μήνυμα ή να καταναλώσει ξανά credits. Αν το ίδιο κλειδί επαναχρησιμοποιηθεί με διαφορετικό input, το API επιστρέφει idempotency_conflict.

Για streaming επαναλήψεις, το Rivya δεν αναπαράγει ιστορικά token deltas. Μια ολοκληρωμένη αναπαραγωγή επιστρέφει ελάχιστη SSE ακολουθία με session.created, message.completed, usage.completed και done.

Συνηθισμένα σφάλματα

CodeΣημασία
chat_model_not_supportedΤο επιλεγμένο μοντέλο δεν είναι διαθέσιμο για Chat API.
chat_session_conflictΤο session δεν μπορεί να χρησιμοποιηθεί για αυτό το αίτημα.
chat_attachment_not_supportedΤο συνημμένο λείπει, δεν ανήκει στον λογαριασμό, δεν είναι εικόνα ή δεν υποστηρίζεται από το μοντέλο.
insufficient_creditsΟ λογαριασμός δεν έχει αρκετά credits για το turn.
idempotency_conflictΤο idempotency key επαναχρησιμοποιήθηκε με διαφορετικό input.

Σχετικές σελίδες

Πίνακας περιεχομένων