Skip to main content
The no-tickets API returns one of a small set of error envelopes on failure. The CLI surfaces these directly. Use the table below to map a status code to its meaning, then jump to the section for the recovery steps.

401 Unauthorized

The push token in the Authorization header is missing, revoked, or wasn’t registered locally. Check first:
The tokens block should list the project you’re publishing to. If it doesn’t, register the token:
If the token is registered but the call still returns 401, the dashboard side may have revoked it. Mint a new token from the project settings and re-register.

403 EntitlementExceeded

You’ve hit a hard limit on your plan. The response body names the breached limit:
Possible values: projects, events, pushers. See Pricing for the per-plan limits and Concepts → Entitlements for how they’re enforced. To unblock:
  • events — wait for the monthly window to reset, or upgrade the plan. On Pro you can also pay for overage at $0.005 per event.
  • pushers — remove an inactive pusher from the project, or upgrade to a plan with more pusher slots.
  • projects — delete an unused project, or upgrade.

403 (no entitlement field)

The token is valid but isn’t scoped to the project you’re trying to publish to. Tokens are project-scoped at issue time. Mint a new token from the right project’s settings.

404 NotFound

The project doesn’t exist or your token doesn’t have visibility into it. Confirm the --project value matches the project name in the dashboard exactly (case-sensitive).

422 ValidationError

The --data payload doesn’t match the event type’s JSON Schema. The response body lists the offending fields:
PATCH validation errors have no details array — only {"error": "ValidationError"}. The asymmetry is intentional; sparse PATCH requests don’t always produce meaningful per-field errors. Check the payload locally before sending:
validate runs the same JSON Schema check with no network call, so iterating is fast.

429 RateLimited

The token has exceeded its per-minute write quota (60 req/min by default). Limits apply to the token, not the endpoint. Recovery:
  • Back off and retry. Most clients should use exponential backoff starting at 1s.
  • For high-volume publish workloads, switch to batch mode: no-tickets publish --file events.jsonl sends a JSONL batch in one request instead of one HTTP call per event.

5xx server errors

Transient. The CLI does not auto-retry; wire retries into your calling code or CI step. Check the Status page for any ongoing incident before opening a bug.

CLI failure modes (no HTTP call made)

Some errors happen before the request leaves your machine:

See also