# WhatsApp berichtstatusgebeurtenissen

Bird registreert **events** voor inkomende en uitgaande WhatsApp-berichten. Een uitgaande tijdlijn toont wat er gebeurde nadat een verzending `202` retourneerde: acceptatie, overdracht aan WhatsApp, bezorging, lezing of fout. Een inkomende tijdlijn registreert wanneer Bird het bericht ontving.

Deze pagina behandelt het uitlezen van die tijdlijn via de API. Wil je dat Bird elke gebeurtenis naar je endpoint pusht zodra die plaatsvindt, zie dan [berichtstatus-webhooks](/docs/guides/whatsapp/webhooks/message-status). Reacties hebben een eigen historie, beschreven in [Reactiegebeurtenissen](/docs/guides/whatsapp/events/reactions).

## Lifecycle-events

Events verschijnen in chronologische volgorde. Een uitgaand bericht kan stoppen bij [`whatsapp.failed` of `whatsapp.rejected`](#fout-events), en het `whatsapp.read`-event verschijnt alleen als de ontvanger het bericht opent. Een inkomende tijdlijn begint met `whatsapp.received` en kan `whatsapp.read` registreren nadat je werkruimte het bericht als gelezen markeert.

| Event                | Betekenis                                                                                   |
| -------------------- | ------------------------------------------------------------------------------------------- |
| `whatsapp.accepted`  | Bird heeft het verzendverzoek geaccepteerd. Dit is wat de `202` rapporteerde.               |
| `whatsapp.sent`      | Bird heeft het bericht overgedragen aan het WhatsApp-netwerk.                               |
| `whatsapp.delivered` | WhatsApp heeft bezorging op het apparaat van de ontvanger bevestigd.                        |
| `whatsapp.read`      | De ontvanger heeft het bericht geopend.                                                     |
| `whatsapp.failed`    | Het bericht is niet bezorgd. `error.code` geeft aan wat het tegenhield.                     |
| `whatsapp.rejected`  | Bird heeft het bericht geweigerd vóór verzending. Er zijn geen kosten in rekening gebracht. |
| `whatsapp.received`  | Bird heeft een inkomend bericht van een contact ontvangen.                                  |

Toepasselijke `delivered`- of `read`-callbacks kunnen het Meta-aandeel van de prijs activeren. WhatsApp-event-payloads bevatten geen kosten. Lees het bericht terug met [`GET /v1/whatsapp/messages/{message_id}`](/docs/api/reference/get-whatsapp-message) om te zien wat het kostte. Zie [Kosten en facturering](/docs/guides/whatsapp/sending-whatsapp#cost-and-billing).

[Een inkomend bericht als gelezen markeren](/docs/guides/whatsapp/mark-message-as-read) registreert `whatsapp.read` in de tijdlijn, maar verstuurt geen read-acknowledgement-webhook. Het inkomende bericht behoudt zijn `received`-status en registreert `read_at` nadat WhatsApp de bevestiging accepteert.

`whatsapp.read` verandert de bericht-`status` **niet**. Een bezorgd bericht blijft `delivered`; het bericht registreert de lezing ook in `read_at`.

**`whatsapp.delivered` kan volledig worden overgeslagen.** Wanneer de ontvanger de chat al open heeft op het apparaat, rapporteert Meta de lezing zonder ooit een bezorging te rapporteren, zodat de tijdlijn `whatsapp.accepted` → `whatsapp.sent` → `whatsapp.read` toont zonder `whatsapp.delivered` ertussen. Behandel `read` als bewijs van bezorging: een consumer die wacht op `delivered` voordat hij het bericht als aangekomen beschouwt, blijft hangen bij precies de ontvangers die het het snelst zagen, en een consumer die een bezorgpercentage berekent op basis van alleen `delivered` rapporteert te laag. De bericht-`status` blijft in dit geval `sent`, omdat alleen een bezorgbevestiging deze doorschuift.

Een read-only callback kan alsnog de toepasselijke Meta-kosten activeren. Bird gebruikt één kostenidentiteit voor zowel het bezorgd- als het gelezen-pad; het ontbrekende bezorgevent impliceert geen gratis Meta-component. Zie [Kosten en facturering](/docs/guides/whatsapp/sending-whatsapp#cost-and-billing).

De lijst met eventtypen is open: nieuwe typen kunnen in de loop van de tijd worden toegevoegd, dus behandel een niet-herkende waarde als een toekomstig event in plaats van een fout.

## Fout-events

`whatsapp.failed` en `whatsapp.rejected` zijn terminaal. Een **rejection** betekent dat Bird het bericht stopte vóór verzending naar WhatsApp, dus er zijn geen kosten in rekening gebracht. Oorzaken zijn onder meer een [onderdrukte of uitgeschreven ontvanger](/docs/guides/whatsapp/opt-outs), onvoldoende walletsaldo of een bestemming zonder geconfigureerde prijs. Een **failure** betekent dat het bericht niet is bezorgd, en `error.code` geeft aan wie dat besliste. De meeste codes bevatten het oordeel van WhatsApp, afgeleid van de gerapporteerde code. `internal_error` is de uitzondering: het registreert een ontbrekende bruikbare afzendercredential of uitgeputte verwerkingspogingen. Een onzekere transportpoging bewijst niet dat Meta het verzoek nooit heeft ontvangen. `meta_error_code` bevat de code van WhatsApp indien beschikbaar, en een `internal_error`-failure heeft er per definitie geen.

Beide events bevatten een `error`-object met een stabiele Bird `code`, een leesbare `description`, een optionele `meta_error_code` en `occurred_at`. Het object verschijnt in API-records en webhook-payloads alleen voor deze eventtypen.

## Events uitlezen uit de API

`GET /v1/whatsapp/messages/{message_id}/events` retourneert de tijdlijn in chronologische volgorde. De begrensde lijst is niet gepagineerd. Events uitlezen vereist een API-sleutel met `whatsapp:read`:

**TypeScript**

```typescript
const { data } = await bird.whatsapp.listEvents("wa_abc123");
for (const event of data) console.log(event.type, event.occurred_at);
```

Examples: [TypeScript](/nl-nl/documentatie/guides/whatsapp/events/message-status.ts.md) · [Python](/nl-nl/documentatie/guides/whatsapp/events/message-status.py.md) · [Go](/nl-nl/documentatie/guides/whatsapp/events/message-status.go.md) · [PHP](/nl-nl/documentatie/guides/whatsapp/events/message-status.php.md) · [CLI](/nl-nl/documentatie/guides/whatsapp/events/message-status.cli.md) · [MCP](/nl-nl/documentatie/guides/whatsapp/events/message-status.mcp.md) · [cURL](/nl-nl/documentatie/guides/whatsapp/events/message-status.curl.md)

Een bericht dat geaccepteerd, verzonden, bezorgd en gelezen is, retourneert vier events:

```json
{
  "data": [
    {
      "id": "ev_01ky7q6a1fejfbvs0myn41hj41",
      "occurred_at": "2026-07-23T14:48:34.71Z",
      "type": "whatsapp.accepted"
    },
    {
      "id": "ev_01ky7q6a2denvtd6jg1vqwmg13",
      "occurred_at": "2026-07-23T14:48:35.671Z",
      "type": "whatsapp.sent"
    },
    {
      "id": "ev_01ky7q6a2zff9r2qm74mmg1g6z",
      "occurred_at": "2026-07-23T14:48:36.642Z",
      "type": "whatsapp.delivered"
    },
    {
      "id": "ev_01ky7q6c21frssf0vj8h50qysw",
      "occurred_at": "2026-07-23T14:48:38.65Z",
      "type": "whatsapp.read"
    }
  ]
}
```

Geef `type` mee om één exact publiek eventtype te retourneren, zoals `?type=whatsapp.failed` of `?type=whatsapp.read`. Laat het weg voor de volledige tijdlijn.

Dezelfde tijdlijn is wat de [WhatsApp-log](/docs/guides/whatsapp/message-log)-pagina toont wanneer je een bericht opent.

![Het WhatsApp-berichtdetailvenster in het Bird-dashboard, geopend voor een bezorgd bird_delivery_update-bericht: het tabblad Events met de lifecycle-tijdlijn per bericht van Accepted, Sent, Delivered en Read, elk met verstreken tijd en tijdstempel, over de gedimde berichtenlijst](/images/docs/dashboard-whatsapp-detail.png)

## Volgende stappen

- [Berichtstatus-webhooks](/docs/guides/whatsapp/webhooks/message-status): ontvang elke gebeurtenis zodra die plaatsvindt
- [Reactie-events](/docs/guides/whatsapp/events/reactions): lees de huidige reacties en het reactielog
- [Bericht als gelezen markeren](/docs/guides/whatsapp/mark-message-as-read): bevestig een inkomend bericht en toon typindicatie
- [WhatsApp-log](/docs/guides/whatsapp/message-log): de weergave per bericht die deze tijdlijn toont
- [WhatsApp-berichten verzenden](/docs/guides/whatsapp/sending-whatsapp): waar de lifecycle van een bericht begint

## Related resources

- [Connecting WhatsApp to Bird: from buying a number to a live channel](/learn/whatsapp/connecting-whatsapp-to-bird) (video)
- [What is the 24-hour customer service window on WhatsApp?](/explained/whatsapp/what-is-the-24-hour-customer-service-window) (answer)
- [WhatsApp message builder](/tools/whatsapp-message-builder) (tool)
- [WhatsApp](/whatsapp-api) (product)

[Get an implementation brief](/learn/workspace?topic=whatsapp)
