Public preview — Deze API is in public preview. Endpoints, schemas en limieten kunnen wijzigen vóór general availability.
API
Je eerste request
Stap-voor-stap walkthroughs in curl, JavaScript en Python — en hoe je elke response leest.
Deze gids loopt één complete request end-to-end door, in drie talen. Je zet de omgeving op, stuurt de request en parseert de response.
Setup#
Je hebt nodig:
- Een EU GPT API-key (zie Authenticatie).
- De key geëxporteerd als
EUGPT_API_KEYzodat de snippets hieronder hem oppakken zonder hem inline te zetten.
export EUGPT_API_KEY="eugpt_..."
Non-streaming: stel één vraag, krijg één antwoord#
De eenvoudigste mogelijke request. stream: false retourneert één JSON-document; geen SSE-parsing nodig.
curl https://chat.eugpt.ai/v1/responses \
-H "Authorization: Bearer $EUGPT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "auto",
"input": "Explain the EU AI Act in three short bullets.",
"stream": false
}'import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.EUGPT_API_KEY,
baseURL: "https://chat.eugpt.ai/v1",
});
const response = await client.responses.create({
model: "auto",
input: "Explain the EU AI Act in three short bullets.",
stream: false,
});
console.log(response.output_text);import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["EUGPT_API_KEY"],
base_url="https://chat.eugpt.ai/v1",
)
response = client.responses.create(
model="auto",
input="Explain the EU AI Act in three short bullets.",
stream=False,
)
print(response.output_text) De shape van de JSON-body staat in Een response aanmaken.
Streaming: render output terwijl het binnenkomt#
Voor alles user-facing: stream. De eerste text-chunks arriveren binnen een paar honderd milliseconden, zelfs als de volledige response een paar seconden duurt.
curl -N https://chat.eugpt.ai/v1/responses \
-H "Authorization: Bearer $EUGPT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "auto",
"input": "Write a long-form explanation of data sovereignty."
}'const stream = await client.responses.create({
model: "auto",
input: "Write a long-form explanation of data sovereignty.",
stream: true,
});
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
} else if (event.type === "response.completed") {
process.stdout.write("\n");
}
}stream = client.responses.create(
model="auto",
input="Write a long-form explanation of data sovereignty.",
stream=True,
)
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
elif event.type == "response.completed":
print() Een system prompt toevoegen#
instructions stuurt toon, format en persona voor deze response.
const response = await client.responses.create({
model: "auto",
input: "Summarise the GDPR.",
instructions: "Respond in Dutch. Use exactly five bullet points.",
stream: false,
});
Als je daarnaast een gloednieuwe conversation_id doorgeeft, worden de instructions opgeslagen als de system message van het gesprek en gelden voor elke volgende beurt.
Het gesprek voortzetten#
Vang de conversation-ID op en geef hem door bij de volgende call. (Het conversation-ID wordt op elke response geretourneerd — voor stateless requests identificeert het het ephemeral, verborgen gesprek dat werd aangemaakt.)
const first = await client.responses.create({
model: "auto",
input: "Plan a sprint to migrate from Chat Completions.",
});
const conversationId = first.conversation_id;
const followUp = await client.responses.create({
model: "auto",
conversation_id: conversationId,
input: "Now expand step 3 into substeps.",
});
Foutafhandeling#
Check altijd op de error-envelope. Statuscodes waar je op moet anticiperen: 400, 401, 403, 429, 5xx. Zie Fouten voor retry-richtlijnen.
try {
const response = await client.responses.create({ /* … */ });
return response.output_text;
} catch (err) {
if (err.status === 429) {
// Quota geraakt. Back off, upgrade plan, of zet in een wachtrij.
} else if (err.status >= 500) {
// Tijdelijk. Retry met exponential backoff.
} else {
// Iets wat de gebruiker deed. Surface naar caller.
throw err;
}
}
Volgende stappen#
- Streams afhandelen — parsen zonder SDK, custom event handling.
- Tools gebruiken — wat te doen als het model
web_searchaanroept.