Sign inGet Started

Get a notification sent to an agent

GET
/v1/whatsapp/numbers/{number_id}/agent/notifications/{notification_id}
// A notification still on its way to WhatsApp is not readable yet, so a read
// straight after create can throw a not-found error.
const notification = await bird.whatsapp.agents.notifications.get(
  "wan_01krdgeqcxet5s7t44vh8rt9mg",
  "waan_01krdgeqcxet5s7t44vh8rt9m7",
);
console.log(notification.status, notification.skipped_reason ?? notification.error?.description);
Response200
{
  "id": "waan_01krdgeqcxet5s7t44vh8rt9m7",
  "to": {
    "phone_number": "+14155551234"
  },
  "name": "order_shipped",
  "description": "Order 88213 left the warehouse and arrives on Thursday.",
  "payload": "{\"order_id\":\"88213\",\"carrier\":\"ACME Courier\",\"eta\":\"2026-10-02\"}",
  "status": "skipped",
  "skipped_reason": "The contact's conversation is currently held by the business.",
  "created_at": "2026-10-01T08:00:00Z"
}

Returns one notification you sent the agent, with what came of it: accepted while WhatsApp is still working on it, then success, skipped with WhatsApp's reason, or failed with what went wrong. A notification still in flight to WhatsApp is not readable yet. A number without an agent, and an id the agent does not hold, both return 404.

Parameters

number_idstring

ID of the WhatsApp number (wan_ prefix), as returned by the number list.

notification_idstring

ID of the notification (waan_ prefix), as returned when it was sent.

Response Payload

id
string
required

Unique identifier for the notification.

to
object
required

The contact the notification was about: the phone number or business-scoped user ID you addressed it to, in the same shape a message's to uses.

Show child attributes
to.phone_number
string

Phone number in E.164 format, when known.

to.bsuid
string

Business-scoped user ID, Meta's identifier for the WhatsApp user. Present only on the WhatsApp-user side of the message.

to.group_id
string

The group this address was addressed as, or reached through. It appears on a message's to and nowhere else: never on from, and never on an event's recipient. Outbound, it stands in for the recipient, because a group send names no single phone number. Inbound, it qualifies one: to carries the business phone_number that received the message and the group it arrived through, while from stays the participant who wrote it. Its presence on to is what tells a group message from a one-to-one one, in either direction.

to.username
string

Present only on a message received from a WhatsApp user, on from; never on an outbound send's to, where the profile is not known. Absent when the contact has not adopted one, and on a message received before this workspace started recording them. Same form as a number's own username (WhatsAppNumberProfile.username), without a leading @; a message cannot be addressed by it.

to.display_name
string

Present only on a message received from a WhatsApp user, on from; never on an outbound send's to, where the profile is not known. Absent when the message carries no profile, and on a message received before this workspace started recording them.

name
string
required

Your own name for what happened, as you sent it.

description
string
required

What happened, as you sent it.

payload
string
required

The data you attached, as you sent it.

status
string
required

Where the notification stands. accepted from the moment Bird takes it, then one of the three final states once WhatsApp has answered.

skipped_reason
string

WhatsApp's own account of why the agent chose to say nothing, passed through. Present only when status is skipped. Show it to the person who sent the notification; never match on its text.

error
object

Why the notification failed. Present only when status is failed.

Show child attributes
error.description
string
required

WhatsApp's own explanation, passed through: what it said when it refused the notification, or its failure summary once it had worked on it. Show it to the person who sent the notification; never match on its text. Carries Bird's own words instead when the failure was Bird's verdict, such as no outcome arriving within a day.

error.meta_error_code
nullable string
required

WhatsApp's most specific code when it refused the notification outright: its error subcode where it sent one, otherwise its top-level code. Treat it as an opaque string. Null when WhatsApp took the notification and reported the failure later, which carries no code, and when the failure was Bird's own verdict.

created_at
string
required

When Bird accepted the notification.

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