Api.Airforce
API REFERENCE

チャットの完了

1 つの API から 100 以上のモデルにわたるチャット応答を生成します。 OpenAI Chat Completions、Anthropic Messages、Anthropic Responses とのドロップイン互換性があります。

認証

すべてのリクエストにはベアラー トークン (Airforce API キー) が必要です。人間性 x-api-key ヘッダーも受け入れられます /v1/messages SDKの互換性のために。

Authorization: Bearer sk-air-YOUR_API_KEY
# alt for /v1/messages:
x-api-key: sk-air-YOUR_API_KEY

POST /v1/chat/completions

OpenAI 互換のチャット補完。公式と連携してる openai SDKのオーバーライドによる base_url https://api.airforce/v1.

POSThttps://api.airforce/v1/chat/completions

リクエストボディ

ParameterTypeRequiredDescription
modelstringRequiredモデルID。 GET /v1/models を使用して、使用可能な ID を検出します。
messagesarrayRequired会話履歴。各エントリには { 役割: "システム" | があります。 "ユーザー" | 「アシスタント」 | 「ツール」、コンテンツ }。コンテンツは文字列またはコンテンツ ブロックの配列です (ビジョン、以下を参照)。
max_tokensintegerOptional生成するトークンの最大数。モデルの max_output_tokens に制限されます。
temperaturefloatOptionalサンプリング温度、0 ~ 2。低いほど決定的になります。デフォルトは上流のプロバイダーによって異なります。
top_pfloatOptional核サンプリング。温度または top_p の両方ではなく、どちらかを使用してください。
streambooleanOptionaltrue の場合、応答はサーバー送信イベントのストリームです。以下の「ストリーミング」を参照してください。
stream_optionsobjectOptional{ include_usage: ブール値 }。 include_usage が true の場合、最後の SSE チャンクには使用ブロックが含まれます。
stopstring | arrayOptional最大 4 つの停止シーケンス。生成されるとすぐに生成が停止します。
toolsarrayOptionalモデルが呼び出す可能性のある関数定義。以下の「ツール呼び出し」を参照してください。
tool_choicestring | objectOptional特定の呼び出しを強制するには、「auto」 (デフォルト)、「none」、または { type: "function", function: { name } } を使用します。
response_formatobjectOptional{ type: "json_object" } モデルが有効な JSON を出力するように強制します。対応していない機種の場合は無視されます。
reasoning_effortstringOptionalOpenAI o1/o3 スタイルの推論の深さ: 「低」 | 「中」 | "高い"。 「推論と思考」を参照してください。
thinkingstring | objectOptionalクロスプロバイダーの思考スイッチ。 「オン」 | 「オフ」 | "auto"、または Anthropic-shape { type: "enabled"、budget_tokens: N }。 「推論と思考」を参照してください。
thinking_budgetintegerOptionalモデルの推論トレースのトークン キャップ (プロバイダーが公開する場合)。
ignore_defaultsbooleanOptionalこのリクエストでは、ユーザーが保存したモデルごとのデフォルト パラメーター (ダッシュボードで構成) をスキップします。

基本的な例

curl https://api.airforce/v1/chat/completions \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.1-chat",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "What is the capital of France?"}
    ],
    "max_tokens": 200,
    "temperature": 0.7
  }'

応答形状

ParameterTypeRequiredDescription
idstringOptional安定した完了 ID、例: 「chatcmpl-abc123」。
objectstringOptional非ストリーミングの場合は「chat.completion」、ストリーミングの場合は「chat.completion.chunk」。
createdintegerOptionalUnix タイムスタンプ (秒)。
modelstringOptional要求されたモデル ID のエコー。
choicesarrayOptional補完候補の配列: [{ インデックス、メッセージ: { 役割、コンテンツ、ツール呼び出し? }、finish_reason }]。
choices[].finish_reasonstringOptional「停止」 | 「長さ」 | "ツールコール" | 「コンテンツフィルター」。
usageobjectOptional{ prompt_tokens, completion_tokens, total_tokens, completion_tokens_details?, prompt_tokens_details?, cache_creation_input_tokens?, cache_creation? }。completion_tokens_details.reasoning_tokensはモデルが推論トレースを生成した場合に設定されます。キャッシュフィールドはupstreamがプロンプトキャッシュ情報を返した場合に表示されます: prompt_tokens_details.cached_tokensはキャッシュ読み取り(OpenAI標準)、cache_creation_input_tokensは書き込みの合計、cache_creation.ephemeral_5m_input_tokens / ephemeral_1h_input_tokensはTTL別の内訳を表します。
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1710000000,
  "model": "gpt-5.1-chat",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "The capital of France is Paris."
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 20,
    "completion_tokens": 8,
    "total_tokens": 28
  }
}

推論と思考

拡張推論をサポートするモデルは、通常の出力とともに思考トレースを公開します。 Airforce は、3 つの異なるアップストリーム規則を、どこでも機能する 1 つの標準パラメータのセットに正規化します。

チェック supports_reasoning: true のモデルで GET /v1/models どの ID がこれらのパラメータを受け入れるかを確認します。

推論サポート付きモデル

· live

正規パラメータ

ParameterTypeRequiredDescription
reasoning_effortstringOptional「低い」 | 「中」 | "高い"。 OpenAI o1/o3、GPT-5 推論モデル、およびそれらにマッピングされるルーター。
thinkingstring | objectOptional「オン」 | 「オフ」 |素早い切り替えの場合は「auto」、Anthropic ネイティブのシェイプの場合は { type: "enabled", Budget_tokens: N } です。クロード拡張思考、ジェミニ思考、DeepSeek 推論に対応します。
thinking_budgetintegerOptional可視出力を出力する前にモデルが推論に費やすことができる最大トークン。 Budget_token をミラーリングします。

推論の取り組み (OpenAI スタイル)

curl https://api.airforce/v1/chat/completions \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "o3-mini",
    "messages": [{"role": "user", "content": "Prove the Pythagorean theorem."}],
    "reasoning_effort": "high"
  }'

拡張的思考 (人間的スタイル)

curl https://api.airforce/v1/chat/completions \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4.6",
    "messages": [{"role": "user", "content": "Plan a 7-day Italy trip."}],
    "thinking": {"type": "enabled", "budget_tokens": 4000}
  }'

推理痕跡そのものは、 choices[0].message.reasoning_content (OpenAI 形状) または thinking のブロック content (人型の形状)。推論トークンは、次のように請求および報告されます。 usage.completion_tokens_details.reasoning_tokens.


ビジョン&画像入力

搭載モデル supports_vision: true コンテンツ ブロックとして埋め込まれた画像を受け入れます。パブリック URL または Base64 データ URL のいずれかが機能します。サイズ制限は上流モデルによって異なります。

ビジョンサポート付きモデル

· live
curl https://api.airforce/v1/chat/completions \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.1-chat",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "text", "text": "What is in this image?"},
        {"type": "image_url", "image_url": {"url": "https://example.com/cat.jpg"}}
      ]
    }]
  }'

ツール呼び出し

搭載モデル supports_tools: true 定義した関数を呼び出すことができます。モデルは次を返します。 tool_calls 配列;呼び出しを実行し、結果を tool メッセージ。

ツール呼び出しサポート付きモデル

· live

リクエスト

curl https://api.airforce/v1/chat/completions \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.1-chat",
    "messages": [{"role": "user", "content": "What is the weather in Paris?"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get current weather for a location",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {"type": "string", "description": "City name"}
          },
          "required": ["location"]
        }
      }
    }],
    "tool_choice": "auto"
  }'

ツール呼び出しによる応答

{
  "id": "chatcmpl-abc123",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": null,
      "tool_calls": [{
        "id": "call_1",
        "type": "function",
        "function": {
          "name": "get_weather",
          "arguments": "{\"location\":\"Paris\"}"
        }
      }]
    },
    "finish_reason": "tool_calls"
  }]
}

ツールの結果によるフォローアップ

{
  "model": "gpt-5.1-chat",
  "messages": [
    {"role": "user", "content": "What is the weather in Paris?"},
    {
      "role": "assistant",
      "content": null,
      "tool_calls": [{
        "id": "call_1",
        "type": "function",
        "function": {"name": "get_weather", "arguments": "{\"location\":\"Paris\"}"}
      }]
    },
    {"role": "tool", "tool_call_id": "call_1", "content": "{\"temp_c\": 14, \"sky\": \"cloudy\"}"}
  ]
}

ストリーミング

セット stream: true 部分的な完了をサーバー送信イベントとして受信します。各イベントは、非ストリーミング応答と同じ形式を持つ 1 つの JSON チャンクです。 message に置き換えられます delta. ストリームは次で終了します data: [DONE].

curl https://api.airforce/v1/chat/completions \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.1-chat",
    "messages": [{"role": "user", "content": "Write a haiku about Berlin."}],
    "stream": true,
    "stream_options": {"include_usage": true}
  }'

ワイヤー形式

data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1710000000,"model":"gpt-5.1-chat","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}

data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1710000000,"model":"gpt-5.1-chat","choices":[{"index":0,"delta":{"content":"Cold "},"finish_reason":null}]}

data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1710000000,"model":"gpt-5.1-chat","choices":[{"index":0,"delta":{"content":"stone "},"finish_reason":null}]}


data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1710000000,"model":"gpt-5.1-chat","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":12,"completion_tokens":17,"total_tokens":29}}

data: [DONE]

POST /v1/messages

Anthropic 互換のメッセージ API。公式と連携してる @anthropic-ai/sdk 設定により baseURL https://api.airforce. OpenAI/Googleなどに転送します。非クロードモデルに対しては透過的に。

POSThttps://api.airforce/v1/messages

リクエストボディ

ParameterTypeRequiredDescription
modelstringRequiredモデル ID (Anthropic 形式またはルーティングされたエイリアス)。
messagesarrayRequired各エントリ: { 役割: "ユーザー" | "アシスタント"、内容: 文字列 |配列 }。
max_tokensintegerRequiredAnthropic によって必要とされます。応答のトークンの上限。
systemstring | arrayOptionalシステムプロンプト。 { type: "text", text,cache_control? の配列を渡します。 } ブロックは、キャッシュされたプレフィックス セグメントをマークします。 「プロンプトキャッシュ」を参照してください。
temperaturefloatOptional0–1。
top_pfloatOptional核サンプリング。
top_kintegerOptionalサンプリング プールを上位 K 個のトークンに制限します。
stop_sequencesarrayOptional最大 4 つの停止シーケンス。
streambooleanOptionaltrue の場合、Anthropic スタイルの SSE イベント ストリームを出力します (「ストリーミング」を参照)。
toolsarrayOptional人間的ツール定義: { 名前、説明、input_schema }。応答には、tool_use コンテンツ ブロックが含まれる場合があります。
tool_choiceobjectOptional{ タイプ: "自動" | "任意" | 「道具」、名前は? }。
thinkingobjectOptional人間的な拡張思考: { type: "enabled"、budget_tokens: N }。

curl https://api.airforce/v1/messages \
  -H "x-api-key: sk-air-YOUR_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4.6",
    "max_tokens": 256,
    "system": "You are a helpful assistant.",
    "messages": [
      {"role": "user", "content": "Hello, Claude!"}
    ]
  }'

応答形状

ParameterTypeRequiredDescription
idstringOptionalメッセージ ID。例: 「msg_01ABCxyz」。
typestringOptionalいつも「メッセージ」。
rolestringOptional常に「アシスタント」。
contentarrayOptionalコンテンツ ブロックの配列: { type: "text" | "ツールの使用" | 「考える」、… }。
modelstringOptionalリクエストされたモデルのエコー。
stop_reasonstringOptional"エンドターン" | "最大トークン" | "ストップシーケンス" | 「ツール_使用」。
usageobjectOptional{ input_tokens, output_tokens, cache_read_input_tokens?, cache_creation_input_tokens?, cache_creation? }。キャッシュフィールドはプロンプトキャッシュが使用された場合に表示されます。cache_creation.ephemeral_5m_input_tokensとephemeral_1h_input_tokensはTTL別の書き込み内訳を表します。

ストリーミングイベント

Anthropic SSE は、1 回限りの JSON チャンクの代わりに名前付きイベントを使用します。各イベントには両方の機能があります event: 名前と data: JSON ペイロード。

event: message_start
data: {"type":"message_start","message":{"id":"msg_01","role":"assistant","content":[],"model":"claude-sonnet-4.6","stop_reason":null,"usage":{"input_tokens":12,"output_tokens":1}}}

event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}

event: content_block_stop
data: {"type":"content_block_stop","index":0}

event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":17}}

event: message_stop
data: {"type":"message_stop"}

即時キャッシュ

の上 /v1/messages クロード モデルの場合、渡すことでプレフィックスをキャッシュ済みとしてマークします。 system キャッシュされたセグメントが保持するブロックの配列として cache_control: { type: "ephemeral" }. 同じプレフィックスで始まる後続のリクエストでは、より安価なキャッシュ読み取りレートが課金されます。搭載モデル supports_caching: true /v1/models これを支持します。

プロンプトキャッシュを備えたモデル

· live
{
  "model": "claude-sonnet-4.6",
  "max_tokens": 1024,
  "system": [
    {"type": "text", "text": "You are a senior staff engineer at Airforce."},
    {
      "type": "text",
      "text": "<repository-snapshot>...</repository-snapshot>",
      "cache_control": {"type": "ephemeral"}
    }
  ],
  "messages": [
    {"role": "user", "content": "Where is rate limiting enforced?"}
  ]
}

キャッシュカウントがレスポンスでどう報告されるか

キャッシュトークンカウントは各フォーマットのネイティブ形状で渡されるため、SDK(openai、@anthropic-ai/sdk、@google/genai)はカスタムコードなしで読み取れます。値がゼロの場合フィールドは省略され、キャッシュなしのレスポンスを軽量に保ちます。

/v1/chat/completions (OpenAI形式)

"usage": {
  "prompt_tokens": 2104,
  "completion_tokens": 147,
  "total_tokens": 2251,
  "prompt_tokens_details": { "cached_tokens": 1980 },
  "cache_creation_input_tokens": 124,
  "cache_creation": {
    "ephemeral_5m_input_tokens": 124,
    "ephemeral_1h_input_tokens": 0
  }
}

/v1/messages (Anthropic形式)

"usage": {
  "input_tokens": 2104,
  "output_tokens": 147,
  "cache_read_input_tokens": 1980,
  "cache_creation_input_tokens": 124,
  "cache_creation": {
    "ephemeral_5m_input_tokens": 124,
    "ephemeral_1h_input_tokens": 0
  }
}

/v1beta/.../generateContent (Gemini形式)

"usageMetadata": {
  "promptTokenCount": 2104,
  "candidatesTokenCount": 147,
  "totalTokenCount": 2251,
  "cachedContentTokenCount": 1980
}

キャッシュが適用される場所

明示的な cache_control マーカーは、Claude モデルでは /v1/messages と /v1/chat/completions で有効です。system または message のコンテンツブロックに付けてください。他の多くのプロバイダー(OpenAI 系、DeepSeek、Gemini)は自動でキャッシュします。マーカーを送らなくても、十分長いプレフィックスが再利用されると応答に cached_tokens が現れます。

キャッシュ期間:5 分または 1 時間

キャッシュされたプレフィックスは既定で 5 分間有効で、ヒットのたびにタイマーが更新されます。より長く保持するには、マーカーに ttl: "1h" を追加します。応答は各 TTL を cache_creation 配下で個別に報告します。

"cache_control": { "type": "ephemeral", "ttl": "1h" }

実例:まず書き込み、次に読み取り

同じリクエストを 2 回送信します(上のキャッシュ例)。プレフィックスを最初に見た呼び出しは一度きりのキャッシュ書き込みを支払い、TTL 内の同一呼び出しははるかに安いキャッシュ読み取りを支払います。

1 回目の呼び出し — キャッシュ書き込み(usage 抜粋):

"usage": {
  "input_tokens": 2104,
  "output_tokens": 12,
  "cache_creation_input_tokens": 1980,
  "cache_read_input_tokens": 0
}

TTL 内の 2 回目の同一呼び出し — キャッシュ読み取り:

"usage": {
  "input_tokens": 2104,
  "output_tokens": 12,
  "cache_creation_input_tokens": 0,
  "cache_read_input_tokens": 1980
}

制限とコスト

  • Claude は最小のキャッシュ可能プレフィックス(約 1024 トークン。モデルによってはそれ以上)を必要とします。短いプレフィックスは単にキャッシュされません。
  • 1 リクエストあたり最大 4 つのキャッシュ・ブレークポイント。キャッシュされるプレフィックスは呼び出し間でバイト単位まで同一でなければならず、1 文字でも変わるとキャッシュを外します。
  • キャッシュ書き込みは通常の入力より高く(5m ≈ 1.25×、1h ≈ 2×)、読み取りははるかに安価です(≈ 0.1×)。各モデルのキャッシュ価格は料金ページを参照してください。

POST /v1/responses

ステートフルな会話のためのOpenAI Responses-APIサーフェス。同じBearer/x-api-key認証。キャッシュカウントはinput_tokens_details.cached_tokens(読み取り)とフラットなcache_creation_input_tokens + cache_creation.ephemeral_*(書き込み)として表示され、/v1/chat/completionsと同等です。

POSThttps://api.airforce/v1/responses

エラー

Airforce は、両方のエンドポイントに対して標準の HTTP ステータス コードと均一のエラー エンベロープを返します。

ParameterTypeRequiredDescription
400invalid_requestOptional不正な形式の JSON、必須フィールドが欠落している、不明なモデル。
401authentication_errorOptionalAPI キーが欠落しているか無効です。
403permission_errorOptionalプランまたはキーごとのアクセス許可は、このリクエストを拒否します。
429rate_limitOptionalリクエストレートまたは毎日のトークンの上限を超えました。
503upstream_errorOptional要求されたプロバイダーのすべてのアップストリーム キーが失敗しました。
{
  "error": {
    "message": "Model 'gpt-99' not found.",
    "type": "invalid_request",
    "param": "model",
    "code": "model_not_found"
  }
}

モデルを発見する

モデル ID とその機能フラグ (ビジョン、ツール、推論、キャッシュ、コンテキストの長さなど) の完全なリストについては、次の URL を参照してください。 /docs/api/models.

curl https://api.airforce/v1/models \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY"