/v1 surface is an OpenAI-compatible JSON envelope:
message— human-readable; user-facing messages are written in Korean. Don’t parse it — branch oncode.type— the error family (invalid_request_error,rate_limit_error,quota_exceeded,access_denied,overloaded_error,server_error,service_unavailable).code— the stable machine-readable identifier. Branch on this.resets_at— extra field onsession_exhausted,weekly_exhausted, andabuse_cooldown(ISO 8601).
Upstream failures use HTTP 500, never 502, and
ModelOverloadedError
uses the non-standard 529 — make sure your client treats 529 as
retryable.Codes by status
400 — fix the request
401 / 403 — fix the key or account
See Authentication for the full table (invalid_api_key, account_unlinked,
legacy_account_upgrade_required, guest_expired, email_required,
geo_restricted).
429 — back off
5xx / 529 — not your fault
Streaming errors
If a stream fails after the first bytes were sent, the connection ends without a JSON envelope (the HTTP status was already 200). Treat an unexpected stream end withoutdata: [DONE] as a failed request. Errors
detected before streaming starts are returned as normal JSON envelopes.
Correlation IDs
Two response headers identify a request, on success and failure alike:x-sq1-request-id— correlation ID, present on every response. Quote this when reporting a problem.x-request-id— the completed request’s log ID (chat/embeddings only).