Developer guide
API を呼び出す
API 互換パスとストリーミング・音声のルール
このページでは、認証後に実際に呼び出すパスについて説明します。
OpenAI 互換パスと Anthropic 互換パスの一覧、リクエスト本文で stream を有効にした場合のレスポンスの返り方、
音声・ボイスパスにのみ適用されるルールの順に説明します。
モデル ID とモデルごとに許可されている呼び出しはモデルページに、認証ヘッダーと base URL は API キーで認証するページに記載されています。
進行パス
2 つの互換規格では同じ API キーを使用し、対話型推論モデルはどちらの規格からでも呼び出せます。目的と使用している SDK に応じてパスを選択します。
| 目的 | 規格 | パス |
|---|---|---|
| 対話型推論、OpenAI SDK を使用 | OpenAI 互換 | POST /chat/completions または POST /responses |
| 対話型推論、Anthropic SDK を使用 | Anthropic 互換 | POST /v1/messages |
| 埋め込みの生成 | OpenAI 互換 | POST /embeddings |
| 音声合成・文字起こし、ボイス管理 | OpenAI 互換 | /audio および /voices 配下のパス |
| 呼び出し可能なモデルの確認 | 両方 | GET /models |
OpenAI 互換パス
base URL は https://platform.clevi.net/api/v2/aiservice/openai/v1 で、リクエストとレスポンスの本文は OpenAI 規格に準拠します。下表は推論とモデルのパスです。音声・ボイスパスは後のセクションに別途まとめています。
| メソッド | パス | 説明 |
|---|---|---|
| POST | /api/v2/aiservice/openai/v1/chat/completions | チャット形式の推論。stream を有効にすると SSE で応答します。 |
| POST | /api/v2/aiservice/openai/v1/responses | Responses 仕様による呼び出し。stream をサポートします。 |
| GET | /api/v2/aiservice/openai/v1/responses/{responseId} | 保存された応答を1件取得します。 |
| GET | /api/v2/aiservice/openai/v1/responses/{responseId}/input_items | 保存された応答の入力項目一覧です。 |
| POST | /api/v2/aiservice/openai/v1/responses/{responseId}/cancel | バックグラウンドで進行中の応答をキャンセルします。 |
| DELETE | /api/v2/aiservice/openai/v1/responses/{responseId} | 保存された応答を削除します。 |
| POST | /api/v2/aiservice/openai/v1/completions | レガシーテキスト補完。stream をサポートします。 |
| POST | /api/v2/aiservice/openai/v1/embeddings | 埋め込みを生成します。ストリーミングはサポートしていません。 |
| GET | /api/v2/aiservice/openai/v1/models | このキーで呼び出せるモデル一覧です。 |
| GET | /api/v2/aiservice/openai/v1/models/{modelId} | モデルを1件取得します。アクセスできない場合は404です。 |
curl https://platform.clevi.net/api/v2/aiservice/openai/v1/chat/completions \
-H "X-API-Key: sk-..." \
-H "Content-Type: application/json" \
-d '{
"model": "cip-5.5-im",
"messages": [{"role": "user", "content": "안녕하세요"}]
}'sk-... にはAPIキー画面で発行したキーを、model にはモデルページのIDを入力します。
その他のパス
| パス | 説明 |
|---|---|
| GET /api/v2/aiservice/openai/v1/healthz | 音声 provider の状態を確認します。 |
| /api/v2/aiservice/openai/v1/api/status · /api/options · /api/generate · /outputs/{filename} | レガシー Cosa の状態・オプション照会、生成呼び出し(multipart)、成果物のダウンロードです。 |
| /api/v2/aiservice/openai/v1/{routeKey} (GET · POST · PUT · PATCH · DELETE) | 上記にない provider パスをルールに従って中継します。POST 中継で chat/completions、completions、embeddings、responses を呼び出すと 404 となり、これら4つは専用パスで処理されます。 |
Anthropic 互換パス
base URL は https://platform.clevi.net/api/v2/aiservice/anthropic で、Anthropic SDK がパスに /v1 を自動的に付加します。リクエストとレスポンスの本文は Anthropic Messages 仕様に準拠します。
| メソッド | パス | 説明 |
|---|---|---|
| POST | /api/v2/aiservice/anthropic/v1/messages | Messages 仕様に準拠した呼び出しです。model・messages・max_tokens が必要で、stream をサポートします。 |
| POST | /api/v2/aiservice/anthropic/v1/messages/count_tokens | 課金なしで入力トークン数のみを推定します。max_tokens は不要です。 |
| GET | /api/v2/aiservice/anthropic/v1/models | カーソルページネーションによるモデル一覧です。limit は 1~1000 で、範囲外の場合は 400 です。 |
| GET | /api/v2/aiservice/anthropic/v1/models/{modelId} | モデルを1件取得します。アクセスできない場合は 404 です。 |
curl https://platform.clevi.net/api/v2/aiservice/anthropic/v1/messages \
-H "X-API-Key: sk-..." \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "cip-5.5-im",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "안녕하세요"}]
}'ストリーミング (SSE)
リクエスト本文に "stream": true を含めると、サーバーは Server-Sent Events で応答します。パスとモデルによって以下のように異なります。
| 対象 | 動作 |
|---|---|
| OpenAI 互換 POST /chat/completions · POST /completions · POST /responses | stream をサポートします。 |
| Anthropic 互換 POST /v1/messages | stream をサポートします。 |
| POST /embeddings | ストリーミングをサポートしていません。 |
| Ivy 検索系モデル(ivy-4-mm-search など) | stream を有効にしても、サーバーが無効にして一括で応答します。 |
| GET /responses/{responseId}?stream=true | 400 で拒否されます。バックグラウンド応答の使用量を正確に一度だけ計測できるまで閉じておくパスです。 |
最初のチャンクとともに、以下の3つのヘッダーが返されます。その後はチャンクごとに event: 行(アップストリームがイベント名を指定した場合のみ)と data: 行を送信し、直ちに flush します。
- Content-Type: text/event-stream
- Cache-Control: no-cache
- X-Accel-Buffering: no
Anthropic 互換パスのチャンクは、event 行と data 行が対になります。
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"안"}}chat/completions のチャンクは data 行で送られ、最後に data: [DONE] がそのまま転送されます。
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[...]}
data: [DONE]音声とボイスのパス
TTS・STT と Cosa ボイス管理パスは OpenAI 互換仕様に対応しており、通常の推論とは異なるルールがいくつかあります。どのモデルがどのパスを許可するかは、モデルページの Cosa 表に記載されています。
| メソッド | パス | 説明 |
|---|---|---|
| POST | /api/v2/aiservice/openai/v1/audio/speech | テキストを音声に合成し、音声ファイルをそのままダウンロードします。 |
| POST | /api/v2/aiservice/openai/v1/audio/transcriptions | 音声をテキストに文字起こしします(multipart)。 |
| POST | /api/v2/aiservice/openai/v1/audio/speech/clone | クローンボイスで音声を合成します(multipart)。 |
| GET | /api/v2/aiservice/openai/v1/voices | 利用可能なボイスの一覧です。 |
| POST | /api/v2/aiservice/openai/v1/voices | 音声サンプルからボイスを登録します(multipart)。 |
| POST | /api/v2/aiservice/openai/v1/voices/design | 説明文から合成ボイスを作成します。 |
| DELETE | /api/v2/aiservice/openai/v1/voices/{voiceId} | ボイスを削除します。所有者のみ実行できます。 |
| ルール | 内容 |
|---|---|
| バイナリ転送 | audio/speech、audio/speech/clone、outputs/{filename} の成功レスポンスは、オーディオをそのままストリーミングしながら、同時に CleviDrive に保存します。 |
| 領収書ヘッダー | X-Clevi-Drive-File-Id、X-Clevi-Drive-File-Version-Id、X-Clevi-Drive-Download-Url、X-Clevi-Drive-Expires-At、X-Clevi-Drive-Retention-Days: 3 が返されます。保持期間は3日間で、その後は404になります。 |
| Product の選択 | audio/speech と audio/transcriptions は、本文の model で Product を選択します。音声・診断パスには X-Product-Sku ヘッダーまたは product_sku クエリが必要です。 |
| 音声の所有権 | 複製・登録した音声は、作成した主体に帰属します。第三者の音声で合成または削除を行おうとすると403になり、GET /voices の一覧にも本人が所有するものだけが残ります。 |
| サイズと時間 | リクエスト上限は28 MiB、アップストリーム呼び出しの制限時間は5分です。 |
| provider の混雑 | アップストリームが混雑している場合は409がそのまま転送され、Retry-After が提供されていれば、その値も併せて転送されます。ゲートウェイが再試行したり、キューに入れたりすることはありません。 |
