/conversation/*) takes it in the
request body under the conversation object.
Identifying a conversation
Theconversation object accepts one of four identifiers. The resolver
evaluates them in this order: uuid → whatsapp_user_id → username →
phone: whatsapp_user_id looks up by exact match and username by a
case-insensitive match (case is ignored); phone is normalized to digits.
When the contact has a BSUID, phone and
whatsapp_user_id identify different values (see Note).
The UUID from a
GET /conversations. The most direct and stable path (it can
become stale if two conversations of the same contact are merged — see the merge
note below).The contact’s BSUID (Meta’s opaque identity). Resolves by exact match against
the stored BSUID; if it does not resolve, the endpoint returns
404 without
falling back to phone. Recommended identifier going forward.The contact’s public WhatsApp username, with or without a leading
@ and
case-insensitive. Best-effort resolution against the last username observed by
the platform (users can change their handle); if several contacts share it,
the endpoint returns 409 (USERNAME_AMBIGUOUS).Number in E.164 format (
+5215512345678). Normalized to digits before the
lookup. Useful when all you have is the phone.phone and whatsapp_user_id are different identifiers: phone is the
phone number (wa_id without +) and whatsapp_user_id is the contact’s BSUID.
They coincide only while the contact has no BSUID. In responses,
whatsapp_user_id returns the real BSUID when present, with a fallback to the
phone so there is always a resolvable value. Watch the round-trip: if the contact
has no BSUID yet, this field carries the phone; re-send it as phone then, not as
whatsapp_user_id — the resolver matches whatsapp_user_id by exact match and
would return 404.When the same contact ended up recorded twice by identity (for example, first only
with their phone and later with their BSUID), the two conversations are
merged automatically into one: the full history moves to the survivor. The
absorbed conversation’s
uuid stops resolving and returns 404; the phone and the
BSUID migrate to the survivor. If a uuid you stored starts returning 404,
re-resolve the conversation by phone or whatsapp_user_id.The 24h window
This is WhatsApp’s core concept and it decides what you can send.1
The contact messages you
WhatsApp opens a 24-hour window. Each new message from the contact
resets the timer.
2
Window open
You can send free-form messages: text, media, and quick replies.
3
24h pass with no reply
The window closes. The only allowed message is a template approved by
Meta.
4
Sending a template reopens the window
You can send free-form messages again.
Checking the window status
Before sending a free-form message, you can verify whether the window is open withPOST /conversation/status:
window.status (open or closed) and
window.hours_remaining, plus the assignment, mailbox, tags, and
inbox_status of the conversation. Use it to decide between a free-form
message and a template.
Next steps
Send messages
Text, media, quick replies, and templates.
Templates
How to send templates when the 24h window is closed.