Skip to main content

The error envelope

Errors return an appropriate HTTP status and this JSON body:
code is stable and machine-readable; branch on it, not on message (messages may be reworded). Rate-limit errors add a retry_after field inside the envelope.

Legacy exception: subscription errors

One middleware predates the v1 envelope and is shared with the SuperX app, so two subscription-related responses use a plain string error field instead of the object envelope:
  • 403 when the subscription has lapsed (string starts with subscription_required:)
  • 500 if subscription verification itself fails (string starts with internal_error:)
To handle every case, check whether error is a string or an object. All other errors, including every other 403, use the object envelope.

Error codes

Retired code: media_not_supported (posts were text-only before 2026-07-09). Posts now take images via POST /v1/media plus parts[].media; a top-level media field on the create or update body returns 400 invalid_parameter with a message pointing at parts[].media.

Fail-closed behavior

When the API cannot verify something, it refuses rather than guesses: unverifiable linked or shared accounts return 503 accounts_unavailable (never stale data), and an unreachable scheduling service returns 503 upstream_unavailable (never a silent success).