TokenAPIAPI ドキュメント
API リファレンス

2 行で接続: base URL と API キー。

TokenAPI は OpenAI Chat Completions・Responses 形式と Anthropic Messages 形式に対応しています。公式 SDK をそのまま使い、モデル一覧からモデル ID を選ぶだけです。

クイックスタート

Base URL

https://tokenapi.biz/v1

すべてのエンドポイント:

GET/v1/models

モデル一覧

公開モデル ID と機能、コンテキスト長、料金。

GET/v1/models/{id}

モデルの取得

単一のモデルオブジェクト。

POST/v1/chat/completions

Chat Completions

OpenAI Chat Completions 形式。ストリーミング・非ストリーミング対応。

POST/v1/responses

Responses

OpenAI Responses 形式(ステートレス)。ストリーミング・非ストリーミング対応。

POST/v1/messages

Messages

Anthropic Messages 形式。Anthropic SDK 向け。

curl
curl https://tokenapi.biz/v1/chat/completions \
  -H "Authorization: Bearer $TOKENAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "tokenapi-pro",
    "messages": [{ "role": "user", "content": "Hello!" }]
  }'
Node.js · openai
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://tokenapi.biz/v1",
  apiKey: process.env.TOKENAPI_KEY,
});

const res = await client.chat.completions.create({
  model: "tokenapi-pro",
  messages: [{ role: "user", content: "Hello!" }],
});
console.log(res.choices[0].message.content);
Python · openai
import os
from openai import OpenAI

client = OpenAI(base_url="https://tokenapi.biz/v1", api_key=os.environ["TOKENAPI_KEY"])

res = client.chat.completions.create(
    model="tokenapi-pro",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(res.choices[0].message.content)
認証

キーを Bearer トークンとして送信します。

Authorization: Bearer sk-tk-…

Anthropic 形式の x-api-key ヘッダーも利用できます。キーは sk-tk- で始まり、作成時に一度だけ表示され、キーごとに制限(1 分あたりのリクエスト数、利用上限額、利用可能モデル、有効期限)を設定できます。キーはサーバー側で保管し、ブラウザやモバイルアプリのコードに含めないでください。キーの取得は hello@tokenapi.biz までご連絡ください。

モデル

安定したモデル ID

GET /v1/models が返す id を model パラメータに指定します。モデル ID は安定したプロダクトです。品質と可用性を保つためにバックエンドをアップグレード・変更することがありますが、お客様側の変更は不要です。レスポンスには常に呼び出したモデル ID が返ります。

GET /v1/models
{
  "object": "list",
  "data": [
    {
      "id": "tokenapi-pro",
      "object": "model",
      "owned_by": "tokenapi",
      "display_name": "TokenAPI Pro",
      "capabilities": ["streaming", "tools", "json_output"],
      "context_length": 131072,
      "pricing": {
        "currency": "USD",
        "prompt": "0.0000015",
        "completion": "0.000006",
        "input_per_million": 1.5,
        "output_per_million": 6
      }
    }
  ]
}

pricing.prompt / pricing.completion は 1 トークンあたりの米ドル(文字列)、input_per_million / output_per_million は 100 万トークンあたりの米ドルです。

POST /v1/chat/completions

Chat Completions

リクエストとレスポンスは OpenAI 形式に準拠します:テキストと画像を含む messages、tools / tool_choice、response_format、temperature、top_p、stop、max_tokens または max_completion_tokens。各レスポンスには x-request-id ヘッダーが付くので、サポートへの問い合わせ時にお知らせください。

max_tokens を省略した場合は、モデルの最大出力長が適用されます。

ストリーミング

Server-Sent Events

stream: true を指定します。チャンクは data: 行で届き、data: [DONE] で終了します。stream_options.include_usage を指定すると、最後のチャンクでトークン使用量を受け取れます。

Node.js
const stream = await client.chat.completions.create({
  model: "tokenapi-pro",
  messages: [{ role: "user", content: "Write a haiku." }],
  stream: true,
  stream_options: { include_usage: true }, // final chunk carries usage
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
POST /v1/responses

Responses API

文字列または配列の input、instructions、関数ツール、text.format(JSON スキーマ)、および完全なストリーミングイベント列(response.output_text.delta、response.completed など)に対応しています。

Node.js
const res = await client.responses.create({
  model: "tokenapi-pro",
  instructions: "Answer in one sentence.",
  input: "What is a token?",
});
console.log(res.output_text);
POST /v1/messages

Anthropic Messages

Anthropic SDK で書かれたコード向けです。system、テキスト・画像ブロック、tool_use / tool_result を含む tools、ストリーミングイベントに対応します。エラーは Anthropic の形式で返ります。

Node.js · @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic({
  baseURL: "https://tokenapi.biz",   // SDK appends /v1/messages
  apiKey: process.env.TOKENAPI_KEY,
});

const msg = await anthropic.messages.create({
  model: "tokenapi-pro",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello!" }],
});
エラー

OpenAI 形式のエラーオブジェクト

例
{
  "error": {
    "message": "The model 'nope' does not exist or is disabled.",
    "type": "invalid_request_error",
    "code": "model_not_found",
    "param": null
  }
}
400invalid_request_error

JSON の形式不正、model / messages の欠落、または未対応のパラメータ。

401invalid_api_key

API キーが未指定、誤り、無効化済み、または期限切れです。

402insufficient_quota

残高がこのリクエストの最大コストに足りないか、キーの利用上限に達しました。チャージするか max_tokens を下げてください。

403model_not_allowed

このキーは他のモデルのみに制限されています。

404model_not_found

不明または無効なモデル ID です。GET /v1/models で有効な ID を確認してください。

429rate_limit_exceeded

キーごとの 1 分あたりリクエスト数の上限を超えました。Retry-After ヘッダーの時間後に再試行してください。

502upstream_unavailable

このモデルのすべてのバックエンドルートが失敗しました。安全に再試行できます。

上流の失敗は、エラーを返す前に別のルートで自動的に再試行されます。502 はすべてのルートが失敗したことを示し、課金は発生しません。

課金と制限

プリペイド・トークン課金・残高超過なし。

  • 料金はモデルごとに、入力・出力 100 万トークンあたりの米ドルで設定されています(モデル参照)。
  • リクエスト実行前に、最大コスト(プロンプト + max_tokens)を残高から確保します。残高が足りない場合は 402 を返し、上流には送信しません。
  • リクエスト完了後に実際のトークン数を請求し、残りの確保分は即時に返還します。
  • モデルが応答を始める前に失敗したリクエスト(4xx/5xx のエラーレスポンス)は課金されません。ストリームが途中でキャンセル・中断された場合は、生成済みのトークン分のみ課金されます。
  • レート制限は API キーごとの 1 分あたりリクエスト数です。超過すると Retry-After 付きで 429 を返します。
互換性について

未対応の機能

  • /v1/responses:previous_response_id(代わりに会話全体を送信してください)、web_search などの組み込みツール、file_id 入力。
  • /v1/messages:拡張思考 thinking と cache_control は無視されます。
  • Chat Completions の n > 1。
ご質問はこちら