Skip to main content
Every error carries a requestId. Include it when you contact support.

Authentication

Check the header is exactly Authorization: Bearer <token>, with no quotes or trailing newline. A deleted token fails the same way: create a new one in Settings → API.
The team’s billing is paused or past due, or its trial ended. Reads and writes both fail until it is resolved in Inboxapp.

Sending

A profile target reached someone who isn’t one of your contacts, which needs the Advanced API add-on. Sending to a thread or contact target doesn’t.
The account isn’t active. details.status is offline when it must be reconnected in Inboxapp, or paused for the reasons in the account link’s pauseReasons.
The platform won’t let this account message that person: they may not accept messages from accounts they don’t follow, or the account no longer exists. details.reason says which. Retrying won’t help.
Inboxapp couldn’t confirm the platform accepted the message. It may have been delivered. Don’t resend it. Read details.messageId later to see how it settled.
Send an Idempotency-Key header and reuse the same key on every retry of the same message. See Send safely.

Reading

platform is required, with platformId or username. Pass username without its @. An empty list means your team has no record of that person yet, not that they don’t exist on the platform.
The default folder is inbox, which leaves out archived threads and requests. Pass folder=all.
Filters don’t take bracket notation. Repeat the key instead: tag=a&tag=b. See Query parameters.
A cursor only works with the filters it was issued for. Restart from the first page after changing a filter.
Media URLs expire at expiresAt. Get a fresh one from GET /messages/ {messageId}/attachments/{index}.

Capabilities

The account link can’t do this. Check its capabilities before calling, and Platforms and capabilities for what the platform allows.
The platform only allows edits for a time after sending. The window is in GET /platforms, under mutationWindows.
The thread or contact is on a platform that isn’t enabled for your team. GET /platforms lists the ones that are.

Webhooks

Each event is delivered once, with no retries. Read what you missed from GET /events?afterSeq=…. See Replay missed events.
v2 events are thin: they name the object and carry only what changed. Read object.url for the current state.
Verify against the raw request body, before any JSON parsing. See Verifying webhook signatures.

Still stuck

Email support@inboxapp.com with the requestId, the endpoint and the time of the request.