Api.Airforce
API REFERENCE

Chat-voltooiingen

Genereer chatreacties voor meer dan 100 modellen vanuit één API. Drop-in compatibel met OpenAI Chat-voltooiingen, antropische berichten en antropische reacties.

Authenticatie

Voor elk verzoek is een Bearer-token nodig (uw Airforce API-sleutel). Het antropische x-api-key header wordt ook geaccepteerd op /v1/messages voor SDK-compatibiliteit.

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

POST /v1/chat/completions

OpenAI-compatibele chatvoltooiingen. Werkt samen met de ambtenaar openai SDK door te overschrijven base_url naar https://api.airforce/v1.

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

Lichaam aanvragen

ParameterTypeRequiredDescription
modelstringRequiredModel-ID. Gebruik GET /v1/models om beschikbare ID's te ontdekken.
messagesarrayRequiredGespreksgeschiedenis. Elk item heeft { rol: "systeem" | "gebruiker" | "assistent" | "gereedschap", inhoud }. Inhoud is een string of een array van inhoudsblokken (visie, zie hieronder).
max_tokensintegerOptionalMaximaal aantal tokens dat moet worden gegenereerd. Gemaximeerd op de max_output_tokens van het model.
temperaturefloatOptionalBemonsteringstemperatuur, 0–2. Lager is deterministischer. De standaardinstelling is afhankelijk van de upstreamprovider.
top_pfloatOptionalKernbemonstering. Gebruik temperatuur of top_p, niet beide.
streambooleanOptionalWanneer dit waar is, is het antwoord een stroom van door de server verzonden gebeurtenissen. Zie "Streamen" hieronder.
stream_optionsobjectOptional{ include_usage: boolean }. Wanneer include_usage waar is, draagt ​​het laatste SSE-deel het gebruiksblok.
stopstring | arrayOptionalMaximaal 4 stopsequenties. De generatie stopt zodra er één is geproduceerd.
toolsarrayOptionalFunctiedefinities die het model kan aanroepen. Zie "Gereedschapsoproep" hieronder.
tool_choicestring | objectOptional"auto" (standaard), "none", of { type: "function", function: { name } } om een ​​specifieke oproep te forceren.
response_formatobjectOptional{ type: "json_object" } dwingt het model om geldige JSON uit te zenden. Genegeerd voor modellen die dit niet ondersteunen.
reasoning_effortstringOptionalOpenAI o1/o3-stijl redeneerdiepte: "laag" | "gemiddeld" | "hoog". Zie "Redeneren en denken".
thinkingstring | objectOptionalCross-provider denken switch. "aan" | "uit" | "auto", of antropische vorm {type: "enabled", budget_tokens: N }. Zie "Redeneren en denken".
thinking_budgetintegerOptionalTokenlimiet voor de redeneringstracering van het model (wanneer de provider er een openbaart).
ignore_defaultsbooleanOptionalSla de opgeslagen standaardparameters per model van de gebruiker (geconfigureerd in het dashboard) voor dit verzoek over.

Eenvoudig voorbeeld

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
  }'

Reactie vorm

ParameterTypeRequiredDescription
idstringOptionalStabiele voltooiings-ID, b.v. "chatcmpl-abc123".
objectstringOptional"chat.completion" voor niet-gestreamd, "chat.completion.chunk" voor gestreamd.
createdintegerOptionalUnix-tijdstempel (seconden).
modelstringOptionalEcho van de gevraagde model-ID.
choicesarrayOptionalReeks voltooiingskandidaten: [{ index, bericht: { rol, inhoud, tool_calls? }, finish_reason }].
choices[].finish_reasonstringOptional"stoppen" | "lengte" | "tool_calls" | "inhoud_filter".
usageobjectOptional{ prompt_tokens, completion_tokens, total_tokens, completion_tokens_details?, prompt_tokens_details?, cache_creation_input_tokens?, cache_creation? }. completion_tokens_details.reasoning_tokens wordt ingesteld wanneer het model een reasoning-spoor produceerde. Cache-velden verschijnen wanneer de upstream prompt-caching info teruggaf: prompt_tokens_details.cached_tokens rapporteert cache-reads (OpenAI-standaard), cache_creation_input_tokens aggregeert writes, en cache_creation.ephemeral_5m_input_tokens / ephemeral_1h_input_tokens geven de TTL-splitsing.
{
  "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
  }
}

Redeneren & denken

Modellen die uitgebreid redeneren ondersteunen, leggen een denkspoor bloot naast de reguliere output. Airforce normaliseert drie verschillende upstream-conventies in één reeks canonieke parameters die overal werken.

Rekening supports_reasoning: true op een model in GET /v1/models om te weten welke ID's deze parameters accepteren.

Modellen met redeneerondersteuning

· live

Canonieke parameters

ParameterTypeRequiredDescription
reasoning_effortstringOptional"laag" | "gemiddeld" | "hoog". OpenAI o1/o3, GPT-5 redeneermodellen en elke router die daarop in kaart brengt.
thinkingstring | objectOptional"aan" | "uit" | "auto" voor een snelle schakelaar, of { type: "enabled", budget_tokens: N } voor de antropisch-native vorm. Kaarten voor uitgebreid denken van Claude, Gemini-denken en DeepSeek-redeneren.
thinking_budgetintegerOptionalHet maximale aantal tokens dat het model mag besteden aan redeneren voordat zichtbare uitvoer wordt uitgezonden. Spiegelt budget_tokens.

Redeneringsinspanning (OpenAI-stijl)

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"
  }'

Uitgebreid denken (antropische stijl)

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}
  }'

Het redeneringsspoor zelf verschijnt in choices[0].message.reasoning_content (OpenAI-vorm) of zoals thinking blokkeert binnen content (Antropische vorm). Redeneringstokens worden gefactureerd en gerapporteerd usage.completion_tokens_details.reasoning_tokens.


Visie & beeldinvoer

Modellen met supports_vision: true accepteer afbeeldingen die zijn ingesloten als inhoudsblokken. Een openbare URL of een base64-gegevens-URL werkt; groottelimieten zijn afhankelijk van het stroomopwaartse model.

Modellen met zichtondersteuning

· 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"}}
      ]
    }]
  }'

Gereedschap bellen

Modellen met supports_tools: true kan functies aanroepen die u definieert. Het model retourneert a tool_calls reeks; u voert de oproep uit en stuurt het resultaat vervolgens terug in a tool bericht.

Modellen met ondersteuning voor het oproepen van gereedschap

· live

Verzoek

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"
  }'

Reactie met gereedschapsoproep

{
  "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"
  }]
}

Opvolging met gereedschapsresultaat

{
  "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\"}"}
  ]
}

Streamen

Set stream: true om gedeeltelijke voltooiingen te ontvangen als door de server verzonden gebeurtenissen. Elke gebeurtenis is één JSON-stuk met dezelfde vorm als het niet-gestreamde antwoord, behalve message wordt vervangen door delta. De stroom eindigt met 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}
  }'

Draad formaat

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

Antropisch-compatibele berichten-API. Werkt samen met de ambtenaar @anthropic-ai/sdk door in te stellen baseURL naar https://api.airforce. Doorsturen naar OpenAI/Google/etc. transparant voor niet-Claude-modellen.

POSThttps://api.airforce/v1/messages

Lichaam aanvragen

ParameterTypeRequiredDescription
modelstringRequiredModel-ID (antropisch formaat of gerouteerde alias).
messagesarrayRequiredElk item: { rol: "gebruiker" | "assistent", inhoud: string | matrix }.
max_tokensintegerRequiredVereist door Anthropic. Tokenlimiet voor het antwoord.
systemstring | arrayOptionalSysteemprompt. Geef een array door van { type: "text", text, cache_control? } blokken om in de cache opgeslagen prefixsegmenten te markeren. Zie "Promptcaching".
temperaturefloatOptional0–1.
top_pfloatOptionalKernbemonstering.
top_kintegerOptionalBeperk de bemonsteringspool tot top-K-tokens.
stop_sequencesarrayOptionalMaximaal 4 stopsequenties.
streambooleanOptionalIndien waar, wordt er een SSE-gebeurtenisstroom in antropische stijl uitgezonden (zie "Streaming").
toolsarrayOptionalAntropische gereedschapsdefinities: { naam, beschrijving, input_schema }. Het antwoord kan tool_use-inhoudsblokken bevatten.
tool_choiceobjectOptional{type: "automatisch" | "elke" | "gereedschap", naam? }.
thinkingobjectOptionalAntropisch uitgebreid denken: { type: "enabled", budget_tokens: N }.

Voorbeeld

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!"}
    ]
  }'

Reactie vorm

ParameterTypeRequiredDescription
idstringOptionalBericht-ID, b.v. "msg_01ABCxyz".
typestringOptionalAltijd "bericht".
rolestringOptionalAltijd "assistent".
contentarrayOptionalReeks inhoudsblokken: { type: "text" | "tool_use" | "denken", … }.
modelstringOptionalEcho van het gevraagde model.
stop_reasonstringOptional"eind_bocht" | "max_tokens" | "stop_reeks" | "tool_gebruik".
usageobjectOptional{ input_tokens, output_tokens, cache_read_input_tokens?, cache_creation_input_tokens?, cache_creation? }. Cache-velden verschijnen wanneer prompt caching is gebruikt. cache_creation.ephemeral_5m_input_tokens en ephemeral_1h_input_tokens geven de write-splitsing per TTL.

Streaming-evenementen

Anthropic SSE gebruikt benoemde gebeurtenissen in plaats van eenmalige JSON-brokken. Elk evenement heeft zowel een event: naam en een data: JSON-payload.

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"}

Snel cachen

Op /v1/messages bij Claude-modellen markeert u een voorvoegsel als in de cache opgeslagen door het door te geven system als een reeks blokken waar het in de cache opgeslagen segment zich in bevindt cache_control: { type: "ephemeral" }. Bij daaropvolgende verzoeken die met hetzelfde voorvoegsel beginnen, wordt het goedkopere cache-leestarief in rekening gebracht. Modellen met supports_caching: true in /v1/models ondersteunen dit.

Modellen met snelle caching

· 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?"}
  ]
}

Hoe cache-tellingen worden gerapporteerd in de respons

Cache-tokentellingen worden doorgegeven in de native vorm van elk formaat, zodat SDK's (openai, @anthropic-ai/sdk, @google/genai) ze zonder aangepaste code lezen. Velden worden weggelaten wanneer de waarde nul is, waardoor niet-gecachte respons compact blijft.

/v1/chat/completions (OpenAI-vorm)

"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-vorm)

"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-vorm)

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

Waar caching geldt

Expliciete cache_control-markers worden gehonoreerd op /v1/messages en /v1/chat/completions voor Claude-modellen — zet ze op system- of message-contentblokken. Veel andere providers (OpenAI-familie, DeepSeek, Gemini) cachen automatisch: je stuurt geen markers en ziet gewoon cached_tokens in het antwoord zodra een lang genoeg prefix wordt hergebruikt.

Cacheduur: 5 minuten of 1 uur

Een gecachet prefix leeft standaard 5 minuten en de timer vernieuwt bij elke hit. Voeg voor een langer levend prefix ttl: "1h" toe aan de marker. Het antwoord rapporteert elke TTL apart onder cache_creation.

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

Voorbeeld: eerst write, dan read

Stuur exact hetzelfde verzoek twee keer (het cachingvoorbeeld hierboven). De eerste call die het prefix ziet betaalt een eenmalige cache-write; identieke calls binnen de TTL betalen de veel goedkopere cache-read.

Eerste call — cache-write (usage-fragment):

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

Tweede identieke call binnen de TTL — cache-read:

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

Limieten & kosten

  • Claude vereist een minimaal cachebaar prefix (ongeveer 1024 tokens; meer voor sommige modellen). Kortere prefixen worden simpelweg niet gecachet.
  • Tot 4 cache-breakpoints per verzoek, en het gecachete prefix moet byte-identiek zijn tussen calls — zelfs een wijziging van één teken mist de cache.
  • Cache-writes kosten meer dan normale input (5m ≈ 1,25×, 1h ≈ 2×); reads kosten veel minder (≈ 0,1×). Zie de cacheprijzen per model op de prijspagina.

POST /v1/responses

OpenAI Responses-API oppervlak voor stateful conversaties. Dezelfde Bearer/x-api-key auth. Cache-tellingen verschijnen als input_tokens_details.cached_tokens (read) plus de platte cache_creation_input_tokens + cache_creation.ephemeral_* (writes) voor pariteit met /v1/chat/completions.

POSThttps://api.airforce/v1/responses

Fouten

Airforce retourneert standaard HTTP-statuscodes en een uniforme foutenvelop voor beide eindpunten.

ParameterTypeRequiredDescription
400invalid_requestOptionalVerkeerd opgemaakte JSON, ontbrekend verplicht veld, onbekend model.
401authentication_errorOptionalOntbrekende of ongeldige API-sleutel.
403permission_errorOptionalPlan- of per-sleutelmachtigingen weigeren dit verzoek.
429rate_limitOptionalVerzoektarief of dagelijkse tokenlimiet overschreden.
503upstream_errorOptionalAlle upstream-sleutels voor de aangevraagde provider zijn mislukt.
{
  "error": {
    "message": "Model 'gpt-99' not found.",
    "type": "invalid_request",
    "param": "model",
    "code": "model_not_found"
  }
}

Ontdek modellen

Bekijk de volledige lijst met model-ID's en hun capaciteitsvlaggen (visie, tools, redenering, caching, contextlengte, ...) op /docs/api/models.

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