Receiving WhatsApp stickers
A sticker a contact taps from their tray arrives as an inbound message carrying sticker: a WebP file reference, plus an animated flag.
What an inbound sticker carries
Esempio di codice
{
"id": "wam_01kye7t1rgyw9u5l8p2zaf7sid",
"direction": "inbound",
"from": { "phone_number": "+14155550100" },
"to": { "phone_number": "+13124495569" },
"status": "received",
"sticker": {
"id": "waf_01kye6r7as0zkv3g1q6suy9whc",
"url": "https://platform.bird.com/v1/whatsapp/messages/wam_01kye7t1rgyw9u5l8p2zaf7sid/media/waf_01kye6r7as0zkv3g1q6suy9whc",
"mime_type": "image/webp",
"animated": false
},
"created_at": "2026-08-25T09:19:37Z"
}| Field | What it carries |
|---|---|
| id | The stored file, to pass as media_id when fetching the bytes |
| url | A Bird URL, fetched with your API key |
| mime_type | The media type WhatsApp reported, image/webp for a sticker |
| animated | Whether the sticker animates; present only on an inbound sticker |
The arm carries no caption in either direction, and no name for the sticker or the pack it came from. A sticker is the whole message.
animated distinguishes an animated WebP from a static one, which matters when you render the file yourself: an animated sticker is a multi-frame WebP that a still-image renderer flattens to its first frame.
Fetching the bytes
Pass the message ID and the media id to the channel's media method. The hub's fetching inbound media carries that call in every language, along with the redirect and header rules it follows, and owns the retention window the file lives in.
Most integrations never fetch a sticker. It usually carries sentiment rather than information, so an agent inbox can show a placeholder and an automated flow can treat the message as a window-resetting acknowledgement without downloading anything.
The webhook payload
whatsapp.received carries the sticker arm on the event envelope:
Esempio di codice
{
"type": "whatsapp.received",
"timestamp": "2026-08-25T09:19:37.882Z",
"data": {
"whatsapp_id": "wam_01kye7t1rgyw9u5l8p2zaf7sid",
"workspace_id": "ws_01ky7m235keycbnwyajabe1a6b",
"direction": "inbound",
"from": { "phone_number": "+14155550100" },
"to": { "phone_number": "+13124495569" },
"sticker": {
"id": "waf_01kye6r7as0zkv3g1q6suy9whc",
"url": "https://platform.bird.com/v1/whatsapp/messages/wam_01kye7t1rgyw9u5l8p2zaf7sid/media/waf_01kye6r7as0zkv3g1q6suy9whc",
"mime_type": "image/webp",
"animated": false
},
"tags": null,
"metadata": null
}
}Things to watch
- A sticker still resets the service window. It is an inbound message like any other, so it buys another 24 hours of free-form replies even though it carries no text to act on.
- A sticker is not a reaction. An emoji reaction a contact adds to one of your messages is not modelled as content and arrives as an unsupported type with type: "reaction".
Next steps
- How receiving works: the inbound envelope, media fetching, and the whatsapp.received webhook
- WhatsApp sticker messages: the send side of the same arm
- Unsupported message types: reactions, orders, and the rest of what arrives unmodelled
- WhatsApp events: the full event list, over the API or webhooks