Queued messages
202 always means queued
Successful POST /v1/messages/template and POST /v1/messages/session return HTTP 202 with "status": "queued". They never return 200 “already delivered.”
Poll GET /v1/messages/{messageId} (or list) for sent, delivered, read, failed, or cancelled.
Test vs live
- Test keys accept into the public API pipeline and may simulate delivery without live Graph.
- Live keys need live-send enabled and a connected channel; status advances as Meta accepts and webhooks arrive.
Session window
Free-form session sends require an open 24-hour customer care window. Outside the window you get outside_24h_window — no Message row is created.
Broadcasts
POST /v1/broadcasts also returns 202 with "status": "queued" and a bc_… id. Poll the broadcast and recipients endpoints for partial failure; use retry-failed for Graph retries (those are new sends — see Delivery semantics).