Skip to main content

Response format

All errors return JSON with an error field:
{ "error": "Not found" }
Some errors include additional fields:
{
  "error": "Upgrade required",
  "upgrade": true,
  "plan_required": "agency"
}

Status codes

CodeMeaning
200OK
201Created
400Bad request — missing or invalid fields
401Unauthenticated — missing or invalid API key/session
403Forbidden — valid auth, insufficient permissions or plan
404Not found
409Conflict — duplicate resource
422Unprocessable — validation failed
429Rate limited
500Server error

Common errors

400 — Validation failed

{ "error": "title is required" }

401 — No session

{ "error": "Unauthorized" }

403 — Plan limit

{
  "error": "Free plan allows up to 3 event types",
  "upgrade": true
}

404 — Resource not found

{ "error": "Not found" }

409 — Slot taken

{ "error": "Time slot unavailable" }

Rate limiting

Limits are per API key per minute. If you hit a 429, back off and retry. Headers are not currently exposed but will be added in a future release.