Responses API
POST https://api.uberllm.dev/v1/responses biedt OpenAI's Responses API aan voor elk chatmodel in de catalogus. Gebruik het via de OpenAI SDK (client.responses.create), Codex CLI, of elke app met een "Responses"-modus. Verzoeken doorlopen dezelfde routing, retries, key limits en billing als /v1/chat/completions, en elke aanroep wordt vermeld in Dashboard → Activiteit met de bijbehorende kosten.
curl https://api.uberllm.dev/v1/responses \
-H "Authorization: Bearer $UBERLLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4.1-flash",
"instructions": "Answer in one short sentence.",
"input": "What is the capital of France?"
}'
from openai import OpenAI
client = OpenAI(base_url="https://api.uberllm.dev/v1", api_key="ull_...")
r = client.responses.create(model="deepseek/deepseek-v4.1-flash", input="Say hi")
print(r.output_text)
Geen opgeslagen status
UberLLM bewaart geen antwoorden zodat u later verder kunt gaan. Elk antwoord heeft
"store": false, en u stuurt de hele conversatie in input bij elke aanroep: eerdere gebruikersberichten, de
uitvoeritems van het model en uw toolresultaten. Codex CLI werkt al op deze manier.
Deze worden geweigerd met een 400 (code: unsupported_parameter) die het veld benoemt:
previous_response_idenconversationbackground: true- input items van type
item_reference - opgeslagen prompt templates (
prompt)
GET /v1/responses/{id} en de andere routes voor opgeslagen antwoorden bestaan niet.
Verzoek
| Veld | Wat er gebeurt |
|---|---|
model |
Elke chatmodel-ID, alias of :floor / :nitro achtervoegsel, zoals bij chat completions. |
input |
Een string, of een lijst met items (zie hieronder). |
instructions |
Verzonden naar het model als de system message. |
stream |
true voor server-sent events. |
max_output_tokens |
De output cap. |
temperature, top_p, seed, stop |
Doorgegeven aan het model. |
tools, tool_choice, parallel_tool_calls |
Zie Tools hieronder. |
reasoning.effort |
Doorgegeven als de redeneerinspanning van het model (modellen die nadenken). |
text.format |
text, json_object, of json_schema (structured output). |
metadata |
Je eigen tags, getoond op de Activity-rij, zoals bij chat completions. |
provider, models |
UberLLM routing options, zoals bij chat completions (Modellen & routing). |
store, include, prompt_cache_key, service_tier, truncation |
Geaccepteerd en niet gebruikt. Versleutelde redenering wordt altijd geretourneerd. |
Input-items
| Item | Wordt |
|---|---|
message met rol user, assistant, system of developer |
Een chatbericht. developer wordt verzonden als system. Content parts input_text, output_text, input_image (image_url: een https of data: URL) en input_file (file_data of file_url). |
function_call |
De tool call van de assistent, op volgorde gehouden. |
function_call_output |
Het resultaat van de tool. Afbeeldingen in een output worden in de volgende gebruikersbeurt verzonden. |
custom_tool_call, custom_tool_call_output |
Een aanroep naar een aangepaste (freeform) tool, en het resultaat ervan. |
reasoning |
De eerdere redenering van het model, teruggegeven aan het model in de volgende beurt. |
web_search_call en andere hosted-tool records |
Overgeslagen. |
Item ids worden geaccepteerd en genegeerd. file_id (geüploade bestanden) wordt niet ondersteund in
input_image / input_file: stuur het bestand inline of via URL.
Tools
function:{"type": "function", "name", "description", "parameters", "strict"}. De aanroep van het model komt terug als eenfunction_callitem metcall_id,nameenarguments(een JSON string). Antwoord met eenfunction_call_outputitem dat dezelfdecall_idbevat.custom(vrije-vorm invoer, zoals Codex'sapply_patch): het model krijgt de tool met één string invoer, en de grammatica informat.definitionals beschrijving. De aanroep komt terug als eencustom_tool_callitem met de ruweinput.namespace(Codex's MCP tools): elke tool hierin wordt aan het model aangeboden onder de samengevoegde namespace en naam (mcp__github__get_issue); de aanroep komt terug metnameennamespaceweer gesplitst.- Gehoste tools (
web_search,file_search,code_interpreter,image_generation,computer_use,mcp) draaien op de eigen servers van OpenAI. Ze worden weggelaten uit de aanvraag en het model antwoordt zonder deze.
tool_choice accepteert "auto", "none", "required", of
{"type": "function", "name": "…"}.
Antwoord
{
"id": "resp_…",
"object": "response",
"created_at": 1793333237,
"status": "completed",
"model": "deepseek/deepseek-v4.1-flash",
"output": [
{"type": "reasoning", "id": "rs_…", "summary": [],
"content": [{"type": "reasoning_text", "text": "…"}], "encrypted_content": "ull1:…"},
{"type": "message", "id": "msg_…", "status": "completed", "role": "assistant",
"content": [{"type": "output_text", "text": "Paris.", "annotations": []}]},
{"type": "function_call", "id": "fc_…", "status": "completed",
"call_id": "call_…", "name": "get_weather", "arguments": "{\"city\":\"Paris\"}"}
],
"usage": {
"input_tokens": 43, "input_tokens_details": {"cached_tokens": 0},
"output_tokens": 23, "output_tokens_details": {"reasoning_tokens": 0},
"total_tokens": 66, "cost_usd": 0.0000184
},
"store": false
}
- Een
reasoningitem verschijnt wanneer het model zijn redenering teruggeeft. Stuur het terug in de volgendeinputzoals het is:encrypted_contentbevat de redenering zodat modellen die het in de volgende beurt nodig hebben, het krijgen. statusisincompletewanneer het antwoordmax_output_tokens(incomplete_details.reason: "max_output_tokens") raakte of een contentfilter ("content_filter").usage.cost_usdis wat de oproep in rekening werd gebracht. Niet-streaming antwoorden bevatten het ook in deX-UberLLM-Cost-USDheader, en elk antwoord heeftX-Request-Id, de id van de Activity-rij.- De instellingen die je stuurde (
instructions,tools,temperature,max_output_tokens…) worden teruggegeven zoals OpenAI dat doet.
Streaming
Met "stream": true is het antwoord server-sent events, elk met type en een
sequence_number beginnend bij 0:
response.created,response.in_progress- Voor elk uitvoeritem:
response.output_item.added, dan de deltas ervan, danresponse.output_item.donemet het voltooide item:- tekst:
response.content_part.added,response.output_text.delta…,response.output_text.done,response.content_part.done - redenering:
response.reasoning_text.delta…,response.reasoning_text.done - function call:
response.function_call_arguments.delta…,response.function_call_arguments.done - custom tool call:
response.custom_tool_call_input.done
- tekst:
response.completed(ofresponse.incomplete) met de hele respons en deusageervan, inclusiefcost_usd.
Terwijl een langzaam model opstart, houden : ping commentaarregels de verbinding open.
Elke SSE client slaat deze over.
Fouten
Een verzoek dat geweigerd wordt voordat de stream begint, krijgt een HTTP-status en de error envelope van OpenAI, hetzelfde als bij chat completions (401, 402 geen tegoed, 404 onbekend model, 429; zie Fouten). Als er iets misgaat nadat de stream is gestart, eindigt het met response.failed, waarvan de response.error code en message heeft. Een stream die stopt voordat het model klaar is, eindigt ook met response.failed, nooit met response.completed, zodat clients het opnieuw proberen in plaats van een half antwoord te bewaren.