Public preview — This API is in public preview. Endpoints, schemas, and limits may change before general availability.
API
Errors
HTTP status codes, error payload shape, and which errors are worth retrying.
EU GPT returns conventional HTTP status codes and a small JSON envelope. This page lists the codes, the payload shape, and which failures are worth retrying.
Payload shape#
All non-2xx responses return JSON:
{
"detail": "Human-readable detail string or object",
"error": {
"type": "string",
"code": "string",
"message": "string"
}
}
A few 5xx paths bypass the envelope and return a plain text body. Treat the envelope as best-effort: always check the HTTP status, then look for detail or error if present.
Status codes#
400 Bad Request#
The request is structurally invalid. The most common causes:
inputis missing or empty.modelreferences an unknown id (when not usingauto).- A UUID field is malformed.
{ "detail": "input is required" }
Do not retry without changes — fix the request first.
401 Unauthorized#
Missing, malformed, or revoked API key. Check:
- The
Authorizationheader is present and starts withBearer. - The key is prefixed
eugpt_. - The key has not been revoked in the web UI.
- You are calling the same environment that issued the key (production keys do not work against staging).
Do not retry until you have fixed credentials.
403 Forbidden#
The key is valid but the operation is not permitted. The common cases:
conversation_idrefers to a conversation owned by a different user → returns404(we deliberately hide existence).project_idrefers to a project the user is not a member of.- The license plan disallows the operation (e.g. trial expired, organisation policy disabled API access).
{
"detail": "Project membership required",
"error": "project_forbidden"
}
Retry only after fixing membership or upgrading the plan.
404 Not Found#
The referenced resource does not exist for this user. Both “really gone” and “not yours” return 404, to avoid leaking the existence of other users’ data.
Do not retry — the resource is not coming back.
429 Too Many Requests#
A usage limit was exceeded for the caller. Retry with exponential backoff and a cap; if the response keeps returning 429, slow down and try again later. Contact us if you consistently hit limits during normal operation.
500 Internal Server Error#
An unexpected failure in EU GPT. May be transient.
{ "detail": "Internal error during response generation" }
Retry once or twice with exponential backoff. If it persists, the issue is on our side — check the status page (when available) and reach out.
502 / 503 / 504#
Returned by the load balancer when the backend is overloaded or restarting. Treat them as transient — retry with exponential backoff.
Errors in the stream#
If the failure happens after the response has started streaming, the HTTP status will still be 200 but the stream will terminate with an error event instead of response.completed:
event: message
data: {"type":"error","code":"upstream_timeout","message":"Model timed out"}
Always check the last event of the stream — do not assume success just because the stream opened. Common in-stream error codes:
upstream_timeout— the model took too long. Retry.upstream_error— the model returned an internal error. Retry.internal_error— generic platform failure. Retry once.cancelled— the request was cancelled (e.g. the upstream conversation was deleted mid-flight).
Idempotency#
The endpoint does not yet honour Idempotency-Key. A retried request generates a fresh response. For interactive use this is rarely a problem; for batch jobs, dedupe on your side using a job identifier and only retry on documented retriable codes.