Skip to main content

Error format

Errors nest a consistent envelope under detail, with a machine-readable error code and a human-readable message:
Two cases shape detail differently:
  • 422 validation errors: detail is a list of issues, each naming the offending field in loc with a msg and a type.
  • 502 and 503 from search: detail is a plain string.

Status codes

Polling and 409 NOT_READY

409 NOT_READY is expected, not a failure: it means no checkpoint has landed yet for a running job. Retry GET /design/submissions/{id}/result (or GET /judge/brand-adherence/{job_id}/result for adherence jobs) shortly. Once a checkpoint lands you’ll get a 200 (possibly with a partial body) and you keep polling until status is completed or failed. The adherence result endpoint adds one terminal case: a job whose status is failed returns 424 BRAND_ADHERENCE_FAILED. Unlike 409, that state never resolves, so stop polling and read the job’s error for the reason.

Authentication errors

  • A request your key is not allowed to make returns 403 FORBIDDEN.
  • An expired or invalid key returns 401 UNAUTHORIZED.
See Authentication for how expiration works.

Insufficient credits

When credit metering is enabled for your account, credit-metered endpoints return 402 INSUFFICIENT_CREDITS if your balance is too low to cover the request. Creating a submission (POST /design/submissions) and running a search both cost credits; the charge is refunded automatically if the request fails. The response includes your current balance and the required amount: