Rivya AI ドキュメント

Chat API ガイド

Rivya Chat API を使い、非ストリーミングまたは SSE のターン、API 作成セッション、file_id 画像添付、token ベースのクレジット精算を扱います。

2026/05/11 最終レビュー

完全な非ストリーミングのチャット応答を 1 回取得するには POST /api/v1/chat/completions を使い、Server-Sent Events には POST /api/v1/chat/completions/stream を使います。

Chat API はセッションベースです。新しい API チャットセッションを開始するには session_id を省略します。返された session_id を渡すと、同じ API 作成セッションを続行できます。

現在の範囲

Chat API v1 は次に対応しています。

  • 非ストリーミングの assistant 応答
  • text/event-stream を使う SSE ストリーミング
  • API 作成のチャットセッション
  • アカウントクレジットの予約と、最終的な token ベースの精算
  • 選択したモデルが対応している場合の web search、reasoning effort、thought mode
  • Files API の file_id 値を使う画像添付

Chat API v1 は次に対応していません。

  • ユーザー指定の生の messages 履歴
  • Studio 専用チャットセッションの続行
  • 任意の外部添付 URL
  • Chat webhook events

必要なスコープ

次のスコープを含む API キーを使います。

chat:create
chat:read

Settings で新しく作成したキーには、デフォルトで両方のスコープが含まれます。古いキーは、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
  }
}

Chat Completion をストリーミングする

サーバー側で assistant の delta を到着順に受け取りたい場合は、POST /api/v1/chat/completions/stream を使います。

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

ストリーミング応答は Content-Type: text/event-stream; charset=utf-8 を使います。

イベント:

イベント意味
session.createdAPI キー、モデル、セッション、添付、rate limit、クレジット予約のチェックに通過しました。
message.deltaassistant メッセージの表示用 delta です。まだ確定済みメッセージではありません。
message.completedassistant メッセージが API 作成セッションへ確定されました。
usage.completedtoken 使用量と最終クレジットが精算されました。
heartbeat長い待機中の keepalive イベントです。
errorストリーミング開始後に失敗した場合の Public API エラーエンベロープです。
doneストリームが正常に完了しました。

ストリーム例:

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: error を送信してから閉じます。

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

完了前にクライアントが切断した場合、Rivya は可能な限り進行中の生成ストリームを停止します。部分的な delta は最終 assistant メッセージとして保存されません。サーバーがすでに message.completed を確定している場合、最終結果は後から GET /api/v1/chat/sessions/{sessionId} で読み取れます。

セッションを続行する

返された 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."
  }'

そのセッションは同じ Rivya アカウントに属し、Public API によって作成されている必要があります。Studio 専用のチャットセッションは、Chat API では返されず、続行もされません。

画像添付

Chat の添付は外部 URL ではなく、Files API レコードを使います。

  1. POST /api/v1/files で画像をアップロードします。
  2. 返された idattachments[].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 を返します。

オプション制御

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

制御項目の対応状況はモデルによって異なります。UI に制御を公開する前に、/api/v1/models を読み取り、chat_capabilities を確認してください。

セッション一覧

chat:read を含むキーで GET /api/v1/chat/sessions を使います。

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

これは 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"
    }
  ]
}

セッションを取得する

API 作成セッション 1 件と、その確定済みメッセージを読み取るには GET /api/v1/chat/sessions/{sessionId} を使います。

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

応答には、確定済みの user と assistant のメッセージが含まれます。内部 provider フィールドは公開されません。

冪等性

本番環境のすべての POST /api/v1/chat/completionsPOST /api/v1/chat/completions/stream リクエストには、Idempotency-Key を使ってください。

同じキーと同じ body でリトライした場合、Rivya は別のメッセージを作成したり再度クレジットを消費したりせず、保存済みの応答を返せます。同じキーを異なる入力で再利用した場合、API は idempotency_conflict を返します。

ストリーミングのリトライでは、Rivya は過去の token delta を再生しません。完了済みのリプレイは、session.createdmessage.completedusage.completeddone を含む最小の SSE シーケンスを返します。

よくあるエラー

コード意味
chat_model_not_supported選択したモデルは Chat API で利用できません。
chat_session_conflictこのリクエストではそのセッションを使用できません。
chat_attachment_not_supported添付が見つからない、アカウント所有ではない、画像ではない、またはモデルが対応していません。
insufficient_creditsこのターンに必要なクレジットがアカウントにありません。
idempotency_conflict冪等性キーが異なる入力で再利用されました。

関連ページ

目次