Public preview — Deze API is in public preview. Endpoints, schemas en limieten kunnen wijzigen vóór general availability.
API
De Responses API
Waarom EU GPT de OpenAI Responses-shape gebruikt en hoe deze verschilt van Chat Completions.
EU GPT biedt één conversationele endpoint: POST /v1/responses. Hij implementeert de OpenAI Responses API — de opvolger van Chat Completions — met dezelfde request-shape, dezelfde event-namen en dezelfde SDK-ergonomie.
Als je ooit openai.chat.completions.create hebt aangeroepen, herken je hier alles. Als je openai.responses.create hebt gebruikt, kun je overstappen door de base URL en de API-key te wijzigen.
Hoe het verschilt van Chat Completions#
De Responses API is een superset van Chat Completions. De shape-wijzigingen zijn bewust en klein.
| Aspect | Chat Completions | Responses |
|---|---|---|
| Veld voor de prompt | messages: [{ role, content }] | input: string of structured ContentItem[] |
| Output | choices[0].message.content | output_text (string) en output: ContentItem[] (structured) |
| State | Stateless — caller stuurt elke beurt de volledige historie | Optionele conversation_id — server bewaart de thread |
| Tools | tools[] in de request, model retourneert tool_calls | Tools zijn server-side, zichtbaar via streaming events |
| Streaming events | Alleen delta.content-chunks | Getypeerde events: text deltas, tool calls, content parts, completion |
In de praktijk betekent dit:
- Voor een one-shot-antwoord geef je een string. De response is een string. Zelfde shape als Chat Completions.
- Voor een multi-turn-gesprek geef je een
conversation_id. De server handelt history af.
De request-shape#
{
"model": "auto",
"input": "What is data sovereignty?",
"stream": true,
"instructions": "Be concise. Cite sources when you use the web search tool.",
"conversation_id": "8f14e45f-ceea-467a-a4ed-a9e9a5cb16ee",
"project_id": null
}
model— geaccepteerd voor OpenAI-SDK-compatibiliteit maar genegeerd. De router kiest altijd het model; elk concreet ID dat je meestuurt heeft geen effect. Geef"auto"mee. De response rapporteert het daadwerkelijk gebruikte model. Zie Modellen.input— een string voor plain text, of een lijstContentItems voor structured input.stream—true(default) retourneert SSE;falseretourneert één JSON-document.instructions— system prompt voor deze response. Als het gesprek nieuw is, wordt het ook opgeslagen als de system message van het gesprek.conversation_id— toevoegen aan een bestaande thread. Weglaten voor stateless.project_id— bind de response aan de RAG-corpus van een project. Caller moet member zijn.
De response-shape (non-streaming)#
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"object": "response",
"created_at": 1716387200000,
"status": "completed",
"model": "gpt-oss-120b",
"output": [
{ "type": "message", "role": "assistant", "content": [/* text parts */] }
],
"output_text": "Data sovereignty is …"
}
Voor de meeste applicaties is output_text voldoende — dit is een platte concatenatie van elke text-chunk die het model uitstootte. Gebruik output als je de structured items nodig hebt (bv. om tool calls apart te renderen of om content-part-grenzen te bewaren).
Wat hetzelfde blijft als bij OpenAI#
- De
Authorization: Bearer …-header. - Het base-path-layout:
/v1/responses. - De SDK-call-shape:
client.responses.create(...). - De streaming-event-taxonomie (
response.output_text.delta,response.completed, etc.). - De error-envelope-structuur (een JSON-body met
detailenerror).
Wat verschilt van OpenAI#
- Geen interactieve tool approval gate. Tools zijn auto-approved voor API-callers (
web_search,web_fetch,calculator,current_datetime). De web-UI gate’t ze; de API draait ze. - Geen
previous_response_id. Stateful gesprekken gebruikenconversation_id, geen response-chains. - Stateless requests zijn standaard verborgen. Een request zonder
conversation_idmaakt een ephemeral gesprek dat niet in de history van de gebruiker verschijnt. organizationis impliciet. Je API-key draagt de organisatie-context; je geeft het niet door in de body.