EU GPT logo
EU GPT

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_KEY zodat 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#