CanalAPI
Getting started

はじめに

CanalAPIは600以上のLLM・画像・音声モデルを統合したゲートウェイです。OpenAI互換クライアントを使い、base_urlをhttps://api.canalapi.com/v1に向けてキーを渡すだけで利用できます。

60秒で始められます
コンソールでキーを取得し、以下のスニペットを実行するだけで完了です。
APIキーを取得
→ チャット補完
OpenAI / Claude / Gemini など — 統一フォーマット
→ エンドポイント一覧
Chat / Embeddings / Images / Audio / Moderations を完全サポート
→ 認証
Bearer Token と x-api-key の両ヘッダーに対応
→ ストリーミング
SSEでトークン単位、OpenAI互換

クイックスタート

必要なものは2つだけ:APIキー(コンソールから取得)とモデルスラッグです。最もシンプルなリクエスト例:

cURL
# Any OpenAI-compatible client works — just swap the base URL
curl https://api.canalapi.com/v1/chat/completions \
  -H "Authorization: Bearer $CANAL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-4-sonnet",
    "messages": [{"role":"user","content":"Hello"}]
  }'

レスポンス

application/json
{
  "id": "chatcmpl_8K2m3",
  "object": "chat.completion",
  "created": 1745078400,
  "model": "claude-4-sonnet",
  "choices": [{
    "index": 0,
    "message": { "role": "assistant", "content": "Hi there!" },
    "finish_reason": "stop"
  }],
  "usage": { "prompt_tokens": 8, "completion_tokens": 3, "total_tokens": 11 }
}

認証

認証が必要なエンドポイントでは Authorization: Bearer <key>(OpenAI / 汎用スタイル)と x-api-key: <key>(Anthropic SDKスタイル)の両方を受け付けます。両方が指定された場合はAuthorizationが優先されます。キーはca_sk_live_プレフィックスで始まり、コンソールから環境ごと(開発 / ステージング / 本番)に独立して作成できます。

i
ヒント: キーを環境変数(例:CANAL_KEY)に保存します。OpenAI互換SDKはbase URLをhttps://api.canalapi.com/v1に向けるだけで利用可能 — 他のコード変更は不要です。

チャット補完POST/v1/chat/completions

チャット補完を作成します。OpenAIのchat/completionsと完全互換 — 同じパラメータ、同じレスポンス形式で、上流チャネルを自動選択します。

リクエストボディ

フィールド説明
model必須stringモデルスラッグ。/v1/modelsを呼ぶか料金ページで最新の利用可能モデルを確認できます。
messages必須array{ role, content }オブジェクトの配列。ロールはsystem、user、assistantをサポート。
stream任意booleantrueの場合、SSEでトークンをストリーム返却。デフォルト:false。
temperature任意number0〜2。高いほど多様な出力。デフォルト値はモデル依存。
max_tokens任意integer補完トークン数の上限。デフォルト値はモデル依存。
tools任意arrayFunction Calling用のツール定義。リクエストスキーマはOpenAI / Anthropic純正と同形式。

ストリーミング例

Python · SSE
stream = client.chat.completions.create(
  model="claude-4-sonnet",
  messages=[{"role": "user", "content": "Write a haiku."}],
  stream=True,
)
for chunk in stream:
  print(chunk.choices[0].delta.content or "", end="")

エンドポイント一覧

すべてのエンドポイントは同じキーと認証方式を共有します。現在ライブのOpenAI互換 / ベンダーネイティブのエンドポイントは以下のとおりです:

メソッドパス用途
POST/v1/embeddingsテキスト埋め込み(OpenAI Embeddings互換)
POST/v1/images/generations画像生成(DALL·E互換。/editsと/variationsも対応)
POST/v1/audio/transcriptions音声テキスト変換(Whisper互換。/audio/translationsも対応)
POST/v1/audio/speechテキスト読み上げ(TTS)
POST/v1/moderationsコンテンツモデレーション(通常無料)
POST/v1/responsesOpenAI Responses API互換エンドポイント
POST/v1/messagesAnthropic Messages APIのネイティブエンドポイント(Claude SDK直接対応。count_tokensは無料)
GET/v1/models利用可能なモデル一覧の取得(公開・認証不要)
GET/v1/dashboard/billing/credit_grantsOpenAI互換のアカウント残高サマリー

リクエストパラメータとベンダー固有フィールドは上流APIの仕様に準拠します。CanalAPIは標準フィールドをすべて転送します。

エラーとリトライ

CanalAPIは標準HTTPステータスコードを使用し、エラー応答はOpenAI形式 { error: { message, type, code } } に従います。上流5xxエラー時には正常なチャネルへ自動リトライ — ルーティングプールが枯渇した場合のみエラーが返されます。

コード意味対処法
400bad_requestリクエストボディを確認 — 無効なmodelまたは不正なmessages形式の可能性があります。
401unauthenticatedキーが欠落、無効、または失効しています。コンソールで新しいキーを作成してください。
402insufficient_balance残高不足です。チャージしてから再試行してください。
429rate_limitedレート制限を超過しました。Retry-AfterとX-RateLimit-*ヘッダーに従ってバックオフしてください。
502/503upstream_errorすべての上流が利用不可で、すでに自動リトライ済みです。継続する場合はサポートへご連絡ください。
自動リトライ: 上流5xxエラーは、CanalAPIがルーティングプール内の正常なチャネル間で自動的にリトライします。クライアント側は429 / 502 / 503に対する標準的な指数バックオフを実装するだけで十分です。

SDK連携

CanalAPIは独自のSDKを提供せず、主要ベンダー公式SDKと完全互換です — base URLとキーをCanalAPIに切り替えるだけで、既存コードはそのまま動作します。

OpenAI公式SDK
/v1/chat/completions、/v1/embeddings、/v1/images/*、/v1/audio/*、/v1/moderations、/v1/responses で利用可能。base_urlをhttps://api.canalapi.com/v1に変更するだけです。
pip install openai • npm i openai
Anthropic公式SDK
ネイティブの /v1/messages エンドポイントで利用可能。base_urlをhttps://api.canalapi.comに向け、x-api-keyヘッダーにCanalAPIのキーを渡してください。
pip install anthropic • npm i @anthropic-ai/sdk
構築を始める準備はできましたか?
最初のAPIキーを取得して、2分以内にリクエストを送りましょう。
APIキーを取得
はじめにチャット補完