Sign inGet Started

List WhatsApp conversation events

GET
/v1/whatsapp/conversations/{conversation_id}/events
const events = await bird.whatsapp.conversations.listEvents("wacv_01krdgeqcxet5s7t44vh8rt9mg");
for (const event of events.data ?? []) {
  console.log(event.created_at, event.type, event.summary);
}
Response200
{
  "data": [
    {
      "id": "wace_01krdgeqcxet5s7t44vh8rt9mg",
      "type": "whatsapp_conversation.control_changed",
      "summary": "Handed to your application by the agent.",
      "metadata": {
        "from": "meta_business_agent",
        "to": "bird",
        "initiator": "meta_business_agent",
        "reason": "Customer asked for a person"
      }
    }
  ],
  "next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
  "prev_cursor": null,
  "refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}

Returns the conversation's activity history, newest first:

  • A move of control between the Meta Business Agent and your application.
  • An assignment, reassignment or unassignment.
  • A notification sent to the agent about this contact.

Messages are listed separately, by listing the conversation's messages. Pass type to keep only events of one type.

Events are retained for 30 days from when they were recorded, so a long-running conversation lists only its recent history. When the conversation's last message passes its own 30-day retention, the conversation is deleted with its remaining events, and this returns 404.

Parameters

conversation_idstring

Conversation identifier. Starts with wacv_.

Query Parameters

typestring

Keep only events of this exact type (for example whatsapp_conversation.control_changed). Omit for every type.

Possible values (may grow over time): whatsapp_conversation.control_changed, whatsapp_conversation.assigned, whatsapp_conversation.agent_notified

limitinteger

Maximum number of items to return per page.

starting_afterstring

Cursor from the next_cursor field of a previous list response. Returns items immediately after the cursor position in the current sort order.

ending_beforestring

Cursor from the prev_cursor or refresh_cursor field of a previous list response. Returns items immediately before the cursor position in the current sort order. prev_cursor returns the preceding page. refresh_cursor anchors at the first row of that response, which on a newest-first sort is how to fetch the items that have appeared since.

Response Payload

data
array of object
required

Page of conversation events, newest first.

Show child attributes
data.id
string
required

Event ID.

data.type
string
required

Type of conversation event. whatsapp_conversation.control_changed records the conversation moving between the Meta Business Agent and your application, whatsapp_conversation.assigned records it being assigned, reassigned or unassigned, and whatsapp_conversation.agent_notified records a notification sent to the agent about this contact. Open enum: new event types may be added over time, so treat any unrecognized value as a future event rather than an error. The values below are the types known at this version.

Possible values (may grow over time): whatsapp_conversation.control_changed, whatsapp_conversation.assigned, whatsapp_conversation.agent_notified

data.summary
string
required

Human-readable summary of what happened.

data.metadata
object
required

Structured details for the event. from and to carry the values that changed: the holder (meta_business_agent or bird) for a control change, the assigned user ID for an assignment, null for no assignee. A control change also carries the initiator and, when one was left, the reason. An assignment carries assigned_by, the actor who made it. An agent notification carries the agent_notification_id and its name.

data.created_at
string
required

When the event happened.

next_cursor
nullable string
required

Cursor for the next page. Pass back as starting_after to advance forward. null when no next page exists.

prev_cursor
nullable string
required

Cursor for the previous page. Pass back as ending_before to step backward. null when no previous page exists.

refresh_cursor
nullable string
required

Refresh anchor, the first row of this response. Pass back as ending_before to fetch what precedes it in the current sort order. On a newest-first sort those are the items that have appeared since; on any other sort they are the items that sort earlier, so refreshing such a list means re-fetching it instead. Non-null whenever data is non-empty; null only on an empty page. Distinct from prev_cursor.

Continue with the documentation, guides and examples for this topic.