GoGoDuk

Errors

The error response shape and the codes you might see.

Every error returns the same JSON shape:

{
  "error": "human readable message",
  "code": "SNAKE_CASE_CODE",
  "request_id": "8f0e1c54-...",
  "retry_after": 27
}

retry_after is only present on rate-limit errors and is always in seconds. request_id matches the X-Request-ID response header — include it in any support ticket.

Codes

HTTPCodeMeaning
400BAD_REQUESTMissing or malformed query parameter.
401MISSING_API_KEYThe X-API-Key header is absent.
401INVALID_API_KEYThe key isn't recognized.
401REVOKED_API_KEYThe key was revoked from the dashboard.
401EXPIRED_API_KEYThe key passed its expires_at.
401UNAUTHORIZEDInternal endpoint, wrong shared secret.
404NOT_FOUNDPath doesn't match any route.
429RATE_LIMIT_MINUTEPer-minute quota exhausted.
429RATE_LIMIT_DAYDaily quota exhausted.
429RATE_LIMIT_IPIP-rate-limited (demo endpoints only).
500INTERNAL_ERRORUnexpected server error. Retry with backoff.
  • 401 INVALID_API_KEY / REVOKED_API_KEY — surface to the user, don't retry.
  • 429 RATE_LIMIT_* — wait retry_after seconds, then retry.
  • 5xx — exponential backoff up to 3 attempts.

On this page