All docs
API reference

Errors

Status codes, error message codes, and how to recover from each.

1 min readLast updated Edit this page

All errors share the same JSON envelope. The HTTP status indicates the class of error; the message field is a stable, uppercase code you can switch on.

Generic error shapejson
{
  "success": false,
  "message": "QUOTA_EXCEEDED",
  "feature": "slideshows_per_month"  // optional, depends on code
}

Status codes

StatusMeaning
400Bad request — validation failed or required field missing.
401No or invalid credentials — Authorization header missing or token rejected.
402Payment / quota error — you've exhausted a plan-bound resource.
403Forbidden — plan doesn't unlock this feature or resource is in another org.
404Resource not found in your organization.
409Conflict — e.g. a slug already exists.
422Semantically invalid — request shape is right but values aren't acceptable.
429Rate-limited — slow down, see Retry-After.
500Internal error — safe to retry with exponential backoff.
503Dependency unavailable — typically Stripe or storage. Retry later.

Error codes you'll see

CodeStatusDescription
VALIDATION_ERROR400One or more body/query parameters failed validation.
MISSING_AUTH401No Authorization header was sent.
INVALID_TOKEN401Token expired, malformed, or revoked.
PLAN_LACKS_API403Free or Starter plan tried to use API auth — upgrade to Pro+.
PLAN_UPGRADE_REQUIRED403Feature is gated to a higher plan (e.g. manual hook refresh).
ORG_NOT_FOUND403Token is valid but no active organization is attached.
QUOTA_EXCEEDED402Plan-bound resource is exhausted (apps, slideshows/month, etc.). Body includes feature.
APP_NOT_FOUND404App id is not in your organization.
HOOK_NOT_FOUND404Hook id is not in your organization.
SLIDESHOW_NOT_FOUND404Slideshow id is not in your organization.
NO_ACTIVE_APPS404Tried to refresh hooks with no ACTIVE apps in the org.
SLUG_EXISTS409Auto-generated slug collides — pass a unique slug explicitly.
RATE_LIMITED429Per-endpoint rate limit hit. See Retry-After header.
RATE_LIMIT_EXCEEDED429Per-org per-minute rate limit hit. See Retry-After header.
GENERATION_FAILED500Upstream model error during slideshow generation. Retry safe.
ZIP_GENERATION_FAILED500Internal error packing the export ZIP. Retry safe.
ZIP_UPLOAD_FAILED500Storage upload failed. Retry safe.
INTERNAL_ERROR500Unhandled server error. Retry safe; if persistent, contact support.

Recovery patterns

  • 401 — re-authenticate (issue a new token / check the API key is still active).
  • 402 QUOTA_EXCEEDED — wait for next billing cycle or upgrade plan; check /billing for usage.
  • 403 PLAN_LACKS_API — upgrade to Pro to unlock API auth.
  • 429 — back off using the Retry-After header (seconds).
  • 5xx — exponential backoff with jitter; max ~5 retries before surfacing the error.