Skip to content

Status codes

Status Meaning Where
200 OK The request succeeded and the body is the object or list Every GET, PATCH, POST .../publish, POST .../refresh, PUT /webhook, and POST /workspaces when the external_id already existed
201 Created A new object was created; the body is the object POST /workspaces (new), /keys, /connect-links, /media, /posts, /conversations/:id/messages, /private-reply, /embed-sessions
204 No Content Done, empty body Every DELETE
302 Found Redirect to Meta’s consent screen GET /connect/:token/meta/start, used by the hosted connect page only
400 Bad Request validation_error or unsupported Any endpoint with a body or query
401 Unauthorized unauthorized Any endpoint
403 Forbidden forbidden Any endpoint
404 Not Found not_found Any endpoint with an id in the path
409 Conflict conflict or account_disconnected Posts, conversations, webhook
429 Too Many Requests rate_limited, with Retry-After Any endpoint
502 Bad Gateway network_error, with Meta’s error in details Anything that calls Meta synchronously: publish with wait, replies, stats, refresh, media by URL

The error codes are described in Errors.

Your webhook endpoint:

You return MissLess does
Any 2xx Marks the delivery successful. Nothing else is read from the response
Anything else, a timeout, or a connection error Schedules a retry on the retry schedule
3xx Not followed. Counts as a failure; point url at the final address

Return 200 with an empty body as soon as the signature verifies and the event is stored. Do the work afterwards.

POST /v1/posts?wait=true and POST /v1/posts/:id/publish?wait=true can take up to 25 seconds before answering. Set your client timeout above that, 30 seconds is a good default, or drop wait and rely on webhooks. A 201 or 200 with status: "publishing" after the wait is a normal answer, not a timeout.