Responses
OpenAI's Responses API. Continue a conversation with previous_response_id. Set stream: true for Responses stream events.
curl -X POST https://api.llm.buzz/api/v1/responses \
-H "Authorization: Bearer $LLM_BUZZ_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4.1-flash",
"input": "Say hello in one word."
}'import os
from openai import OpenAI
client = OpenAI(base_url="https://api.llm.buzz/api/v1", api_key=os.environ["LLM_BUZZ_KEY"])
response = client.responses.create(model="deepseek/deepseek-v4.1-flash", input="Say hello in one word.")
print(response.output_text){
"id": "resp_...",
"object": "response",
"model": "deepseek/deepseek-v4.1-flash",
"status": "completed",
"output": [
{
"type": "message",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "Hello!"
}
]
}
],
"usage": {
"input_tokens": 12,
"output_tokens": 3,
"total_tokens": 15,
"input_tokens_details": {
"cached_tokens": 0,
"cache_write_tokens": 0
},
"cost": 0.0000072
}
}{
"error": {
"code": 400,
"message": "...",
"metadata": {
"error_type": "invalid_request",
"gateway_code": "invalid_request",
"param": "messages"
}
}
}{
"error": {
"code": 401,
"message": "A valid gateway Bearer key is required. Send the virtual key as 'Authorization: Bearer <key>'.",
"metadata": {
"error_type": "authentication",
"gateway_code": "invalid_key"
}
}
}{
"error": {
"code": 402,
"message": "...",
"metadata": {
"error_type": "payment_required",
"gateway_code": "insufficient_credits"
}
}
}{
"error": {
"code": 404,
"message": "The requested model does not exist or is not granted to this key. GET /api/v1/models lists the model aliases available to this key.",
"metadata": {
"error_type": "not_found",
"gateway_code": "model_not_found",
"param": "model"
}
}
}{
"error": {
"code": 409,
"message": "...",
"metadata": {
"error_type": "invalid_request",
"gateway_code": "idempotency_replay_unavailable",
"param": "Idempotency-Key"
}
}
}{
"error": {
"code": 429,
"message": "...",
"metadata": {
"error_type": "rate_limit_exceeded",
"gateway_code": "unavailable_route"
}
}
}Authorization
An inference key, as Authorization: Bearer KEY.
Parameters
Idempotency-KeystringheaderA retry with the same key and the same body never runs the request twice: it returns the first answer, or 409
idempotency_replay_unavailablewhen that answer is not stored where the retry arrived. Send the same key again only when the first call got no answer, or after an answer carryingx-gateway-admission-refused: true; after any other error answer send a new key. A retry without the key, or with a new one, runs and bills the request again. Reusing a key with a different body answers 409idempotency_conflict.x-session-idstringheaderNames the conversation, as
session_iddoes, so its turns stay on the provider that holds its cache.
Body application/json
modelstringrequiredA model's name from
GET /api/v1/models, such asdeepseek/deepseek-v4.1-flash. A suffix changes one request::floortries the cheapest provider first and:nitrothe fastest. On Chat Completions and Responses:onlineasks for a web search, which llm.buzz does not run today: the request is served without one andx-sgr-ignored-parametersnamesweb_search->dropped(search_unavailable), or for an organization whose requests llm.buzz keeps in the EU it answers 400web_search_unavailable_in_region. On Messages:onlinedoes nothing and is named asmodel:online.inputstring or object[]requiredA string, or a list of input items in OpenAI's shape. An
input_textpart may carryprompt_cache_breakpoint, OpenAI's explicit cache mark.instructionsstringA system message for this turn.
previous_response_idstringContinue from an earlier response.
streambooleandefault falseStream Responses events.
reasoningobjecteffort, translated for each provider.toolsobject[]Function tools in the Responses shape;
{"type": "tool_search"}declares a tool search over tools markeddefer_loading: true.providerobjectSteers one request across the model's providers. With the OpenAI SDK, send it in
extra_body. Every field acceptsnull. A name matches a provider's display name, its tag or the tag's first part, ignoring case:llm.buzzorllm-buzznames llm.buzz's own provider, andllm-buzz/euonly its capacity in the EU.Show 7 child fields
orderstring[]Try these providers first, in this order, then the others. At most 64 names.
onlystring[]Use only these providers.
ignorestring[]Never use these providers.
allow_fallbacksbooleanfalsestops moving to other providers.sortstringThe order to try providers in. Ignored when
orderis set.pricethroughputlatencysmartzdrbooleantruekeeps the request on providers that declare 0 days of retention.data_collectionstringdenykeeps the request on providers that declare no training and 0 days of retention.allowdeny
session_idstringA name for the conversation, 1 to 256 characters, so its turns stay on the provider that holds its cache.
cache_controlobjectAnthropic's prompt-cache marker,
{"type": "ephemeral"}with an optionalttlof"5m"or"1h". llm.buzz passes it on and never adds one. Claude models cache only where a request marks it.prompt_cache_optionsobjectOpenAI's explicit caching, for GPT-5.6 and later models:
modeimplicit(OpenAI's default) orexplicit(OpenAI writes the cache only at aprompt_cache_breakpoint), andttl30m.prompt_cache_retentionstringOpenAI's cache retention.
24hwithprovider.zdr,provider.data_collection: "deny"or your organization's no-retention policy is a 400invalid_request.in_memory24h
Response 200
A response object. Cache reads show in usage.input_tokens_details.cached_tokens and writes in its cache_write_tokens; readable reasoning arrives as a reasoning item's summary_text.
Errors
400A field is missing or malformed (
invalid_request, withmetadata.param), or the model cannot do what the request asks (unsupported_capability).401No key, or the key is unknown, expired, revoked or disabled.
402Your balance is spent and the model is not free, or the request could cost more than your balance.
404No model has this name, or your key may not call it.
409The
Idempotency-Keywas used before.idempotency_replay_unavailable: the first request was accepted, and its answer is not stored where this retry arrived, so it was not run again; retry with the same key after a short backoff first, when the first call got no answer, and send a new key to run the request again (it is billed again) or after an error answer.idempotency_conflict: the key came with a different body; use a new key for each distinct request. Neither runs the request again.429Providers are throttling, or the model is at capacity (
unavailable_route): retry afterRetry-Afterseconds. Or a free offer's allowance is used (free_allowance_exceeded): your organization's tokens, or your key's requests per minute. Choose a paid model, or for the per-minute limit retry afterRetry-Afterseconds.