API リファレンス
Echo Token Station の接続先と認証、SDK とツールごとの接続先、使えるエンドポイント、形式の変換、ストリーミング、主なパラメータです。
Echo の API は、OpenAI 形式と Anthropic 形式に対応しています。このページでは、エンドポイント(機能ごとの呼び出し先 URL)、認証、ストリーミング、主なパラメータを説明します。リクエストとレスポンスの細かい仕様は、各社の API ドキュメントに従います。
接続先と認証
| 形式 | 接続先 URL(base URL) | キーを送るヘッダー |
|---|---|---|
| OpenAI 形式 | https://token.echohub.io/v1 | Authorization: Bearer キー |
| Anthropic 形式 | https://token.echohub.io | x-api-key: キー または Authorization: Bearer キー |
x-api-keyヘッダーは、Anthropic 形式のエンドポイント(/v1/messagesと、Anthropic 形式の一覧を返す/v1/models)で使えます。ほかのエンドポイントではAuthorizationヘッダーを使います- Anthropic 形式では、
anthropic-versionヘッダー(例:2023-06-01)も送ります。Anthropic の SDK は自動で送ります - 通信は HTTPS だけです
- 呼び出し先のパスに
/v1がないと、キーが正しくても HTTP 404(JSON ではなく、Web サイトの HTML ページ)になります。/v1が 2 回入ると HTTP 404(JSON のInvalid URL)になります
SDK とツールごとの接続先
SDK によって、接続先に /v1 まで含めるものと、SDK が /v1 を付けるものがあります。「確認」欄の「済み」は 2026-09-27 に Echo の検証環境で呼び出しを確認したもの、「未」は各ツールの公式ドキュメントに基づくものです。
| SDK・ツール | 設定する項目 | 値 | 確認 |
|---|---|---|---|
| OpenAI SDK(Python・Node.js) | base_url・baseURL | https://token.echohub.io/v1 | 済み |
| Anthropic SDK(Python・Node.js) | base_url・baseURL | https://token.echohub.io | 済み |
Vercel AI SDK @ai-sdk/openai-compatible | baseURL | https://token.echohub.io/v1。トークン数を受け取るには includeUsage: true も指定します | 済み |
Vercel AI SDK @ai-sdk/openai | baseURL | https://token.echohub.io/v1。既定は Responses API で、.chat() を使うと Chat Completions API になります | 済み |
Vercel AI SDK @ai-sdk/anthropic | baseURL | https://token.echohub.io/v1。Anthropic SDK と違い、/v1 まで含めます | 済み |
LangChain ChatOpenAI | base_url(TypeScript は configuration.baseURL) | https://token.echohub.io/v1 | 済み |
LangChain ChatAnthropic | base_url(TypeScript は clientOptions.baseURL) | https://token.echohub.io | 済み |
LlamaIndex OpenAILike | api_base | https://token.echohub.io/v1。is_chat_model=True と context_window も指定します | 済み |
LlamaIndex Anthropic | base_url | https://token.echohub.io。モデル名は LlamaIndex が知っている名前だけ使えます | 済み |
| Claude Code | 環境変数 ANTHROPIC_BASE_URL | https://token.echohub.io(Claude Code) | 済み |
| Codex CLI | config.toml の base_url | https://token.echohub.io/v1、wire_api = "responses"(Codex CLI) | 済み |
| Cursor・Cline・Dify・Continue・Roo Code・n8n | Base URL などの接続先の項目 | https://token.echohub.io/v1 | 未 |
エンドポイント一覧
| メソッドとパス | 形式 | できること | 提供するモデル |
|---|---|---|---|
POST /v1/chat/completions | OpenAI | 会話の続きを生成する(Chat Completions API) | モデル一覧 |
POST /v1/responses | OpenAI | 応答を生成する(Responses API) | モデル一覧 |
POST /v1/messages | Anthropic | 会話の続きを生成する(Messages API) | モデル一覧 |
GET /v1/models | OpenAI・Anthropic | キーで使えるモデルの一覧を返す | — |
POST /v1/embeddings | OpenAI | 文章を数値の並び(埋め込み)に変換する | モデル一覧 |
POST /v1/completions | OpenAI | 文章の続きを生成する(旧形式の Completions API) | モデル一覧 |
POST /v1/images/generations | OpenAI | 画像を生成する | モデル一覧 |
POST /v1/audio/speech | OpenAI | 文章を音声にする | モデル一覧 |
POST /v1/moderations | OpenAI | 文章が利用方針に反していないかを判定する | モデル一覧 |
POST /v1/videos | OpenAI | 動画の生成を申し込む | 動画生成 |
GET /v1/videos/{タスクの ID} | OpenAI | 動画の生成の進み具合を返す | — |
GET /v1/videos/{タスクの ID}/content | OpenAI | 完成した動画のファイルを返す | — |
使えないもの
| 機能 | 状態 |
|---|---|
トークン数の計算(POST /v1/messages/count_tokens) | 対応していません。HTTP 404 を返します |
ファイル(/v1/files)、Batch API(/v1/batches)、ファインチューニング | 対応していません。POST /v1/batches は HTTP 404、GET /v1/files は HTTP 400 を返します |
画像のバリエーション(POST /v1/images/variations) | 対応していません |
Gemini 形式(/v1beta/models/...) | 対応していません。HTTP 401 を返します |
残高の取得(/v1/dashboard/billing/...) | 対応していません。HTTP 404 を返します。残高はコンソールで確認します |
1 つのモデルの情報(GET /v1/models/{モデル ID}) | 正しい結果を返さないことがあります。提供中のモデルでも、HTTP 200 で does not exist というエラー本文を返す場合があります。モデルの確認には GET /v1/models を使ってください |
動作を確認していないもの
| 機能 | 状態 |
|---|---|
POST /v1/responses/compact | 経由先の API にそのまま渡します。応答は確認していません |
音声の文字起こし(POST /v1/audio/transcriptions) | 確認していません |
リアルタイム API(/v1/realtime) | 確認していません |
モデル ID
リクエストの model に、呼び出すモデルの ID を入れます。Echo のモデル ID は、提供元の API で使われている名前と同じ書き方です(例:deepseek-flash、claude-sonnet-5)。正式な ID はモデル一覧の各モデルのページに載せます。
キーで使えるモデルの ID は、GET /v1/models でも取得できます。x-api-key と anthropic-version の両方のヘッダーを付けると Anthropic 形式、それ以外は OpenAI 形式の一覧を返します。
curl "https://token.echohub.io/v1/models" \
-H "Authorization: Bearer $ECHO_API_KEY"形式とモデルの組み合わせ
モデルの提供元と違う形式でも呼び出せます。この場合、Echo のサーバーがリクエストとレスポンスの形式を変換します。変換すると、一部のパラメータが効かなくなったり、応答の項目が各社の仕様と異なったりします。提供元と同じ形式で呼び出すことをおすすめします。
| モデル | おすすめの形式 |
|---|---|
| Claude(Anthropic) | Anthropic 形式(/v1/messages) |
| OpenAI | OpenAI 形式(/v1/chat/completions または /v1/responses) |
| それ以外 | OpenAI 形式(/v1/chat/completions) |
変換したときに変わること(2026-09-27 に Echo の検証環境で確認):
| 組み合わせ | 変わること |
|---|---|
Claude のモデルを /v1/chat/completions で呼ぶ | response_format(構造化出力)は効きません。reasoning_effort は Claude の思考(thinking)の設定に置き換えます。max_tokens を指定しないと 8,192 になります。入力トークン数は、キャッシュ分を含めた OpenAI の数え方で返します |
Claude・Gemini のモデルを /v1/responses で呼ぶ | 呼び出せますが、応答の項目が OpenAI の仕様と一部異なります |
OpenAI・Gemini のモデルを /v1/messages で呼ぶ | 文章、ツール呼び出し、ストリーミングは使えます。応答の項目が Anthropic の仕様と一部異なります |
| どの組み合わせでも | 応答の usage に、各社の仕様にない項目が入ることがあります。これらの項目は使わないでください |
Cline、Cursor、Dify のように OpenAI 形式だけを使うツールで Claude のモデルを呼ぶ場合も、この変換が入ります。
Anthropic 形式を curl で呼び出す
curl "https://token.echohub.io/v1/messages" \
-H "x-api-key: $ECHO_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "日本の首都はどこですか?"}]
}'Responses API で呼び出す
import os
from openai import OpenAI
client = OpenAI(
base_url="https://token.echohub.io/v1",
api_key=os.environ["ECHO_API_KEY"],
)
response = client.responses.create(
model="gpt-6-sol",
input="日本の首都はどこですか?",
)
print(response.output_text)ストリーミング
ストリーミングは、モデルが回答を作りながら少しずつ受け取る方法です。リクエストに "stream": true を付けると、SSE(サーバーから届くデータを 1 件ずつ受け取る仕組み)で返します。Echo は、経由先の API から届いたデータを、ためずに順に転送します。
| 形式 | 届き方 |
|---|---|
| OpenAI 形式(Chat Completions) | data: {...} の行が続き、最後に data: [DONE] が届きます。stream_options の include_usage を true にすると、[DONE] の前にトークン数が届きます |
| OpenAI 形式(Responses API) | response.created、response.output_text.delta、response.completed などのイベントが届きます |
| Anthropic 形式 | message_start、content_block_start、content_block_delta、content_block_stop、message_delta、message_stop の順に届きます。途中に ping が入ることがあります。トークン数は message_delta に入ります |
回答の途中で経由先の API がエラーを返したり、接続が切れたりしたときの届き方と確かめ方は、エラーと対処の「ストリーミングの途中で止まったとき」にあります。
curl -N "https://token.echohub.io/v1/chat/completions" \
-H "Authorization: Bearer $ECHO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-flash",
"stream": true,
"stream_options": {"include_usage": true},
"messages": [{"role": "user", "content": "自己紹介を 3 文でしてください。"}]
}'import os
from openai import OpenAI
client = OpenAI(
base_url="https://token.echohub.io/v1",
api_key=os.environ["ECHO_API_KEY"],
)
stream = client.chat.completions.create(
model="deepseek-flash",
messages=[{"role": "user", "content": "自己紹介を 3 文でしてください。"}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://token.echohub.io/v1",
apiKey: process.env.ECHO_API_KEY,
});
const stream = await client.chat.completions.create({
model: "deepseek-flash",
messages: [{ role: "user", content: "自己紹介を 3 文でしてください。" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}import os
import anthropic
client = anthropic.Anthropic(
base_url="https://token.echohub.io",
api_key=os.environ["ECHO_API_KEY"],
)
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "自己紹介を 3 文でしてください。"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
baseURL: "https://token.echohub.io",
apiKey: process.env.ECHO_API_KEY,
});
const stream = client.messages.stream({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "自己紹介を 3 文でしてください。" }],
});
stream.on("text", (text) => {
process.stdout.write(text);
});
await stream.finalMessage();主なパラメータ
使えるパラメータと値の範囲は、モデルによって違います。各社のドキュメントに従います。
Chat Completions(POST /v1/chat/completions)
| パラメータ | 必須 | 説明 |
|---|---|---|
model | 必須 | モデル ID |
messages | 必須 | 会話の履歴。role(system・user・assistant など)と content の組 |
stream | true でストリーミング | |
stream_options | {"include_usage": true} でストリーミングの最後にトークン数を受け取る | |
max_completion_tokens | 出力するトークン数の上限。古い max_tokens は OpenAI では非推奨 | |
temperature、top_p | 出力のばらつき | |
stop | 出力を止める文字列 | |
tools、tool_choice | ツール呼び出し(モデルが外部の関数を呼ぶ機能)の定義と選び方 | |
response_format | JSON など出力の形式。Claude のモデルでは効きません(上の「形式とモデルの組み合わせ」) | |
reasoning_effort | 推論(回答前に考える処理)の深さ。対応モデルのみ |
Messages(POST /v1/messages)
| パラメータ | 必須 | 説明 |
|---|---|---|
model | 必須 | モデル ID |
messages | 必須 | 会話の履歴。role(user・assistant)と content の組 |
max_tokens | 必須 | 出力するトークン数の上限 |
system | システムプロンプト(モデルへの前提の指示) | |
stream | true でストリーミング | |
temperature、top_p、top_k | 出力のばらつき。Anthropic のドキュメントでは、新しいモデルでの temperature と top_k は非推奨 | |
stop_sequences | 出力を止める文字列 | |
tools、tool_choice | ツール呼び出しの定義と選び方 | |
thinking | 拡張思考(回答前に考える処理)の設定。対応モデルのみ | |
metadata | 利用者を区別する ID など、リクエストに付ける情報。Echo は値を変えずに経由先に渡します |
inference_geo、service_tier、speed の 3 つは、Echo が取り除いてから経由先に渡します。処理する地域は、モデルごとに決まっています(データの取り扱い)。
Responses(POST /v1/responses)
| パラメータ | 必須 | 説明 |
|---|---|---|
model | 必須 | モデル ID |
input | 入力。文字列、または会話の配列 | |
instructions | システムへの指示 | |
stream | true でストリーミング | |
max_output_tokens | 出力するトークン数の上限 | |
tools、tool_choice | ツール呼び出しの定義と選び方 | |
reasoning | 推論の設定。対応モデルのみ | |
store | 経由先の API に応答を保存させるかどうか。Echo は値を変えずに渡します。OpenAI の API では、指定しないと true(保存する)になります | |
previous_response_id | 前の応答の続きとして扱う(Echo 経由での動作は未確認) |
埋め込み
curl "https://token.echohub.io/v1/embeddings" \
-H "Authorization: Bearer $ECHO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "[埋め込みモデルの ID]", "input": "東京は日本の首都です。"}'埋め込みに使えるモデルはモデル一覧で確認できます。数値の配列と base64 の両方の形式で受け取れます。
残高と利用状況、上限
- 残高と利用状況は、コンソールで確認します(API キーと利用状況)。API で残高を取得する方法は、今はありません
- キーごとの利用上限、レート制限、リクエストの大きさの上限は上限とレート制限にあります