Rapiwa API
Guide
Sessions
Messages
Groups
Webhooks
Pricing
  • Website
  • Dashboard
  • Support
Guide
Sessions
Messages
Groups
Webhooks
Pricing
  • Website
  • Dashboard
  • Support
  • Getting Started

    • Getting Started
    • Authentication
    • Credits & Pricing
    • Rate Limits
    • Errors
  • Sessions & Devices

    • Link a Device (QR)
    • Get Session Info
    • Validate a Device Key
    • Log Out
    • List All Devices
  • Messages

    • Send a Message
    • Send Bulk Messages
    • Delete a Message
    • Check a Number on WhatsApp
  • Groups

    • Create a Group
    • List Groups
    • Get Group Metadata
    • Get Invite Link
    • Add Members
    • Join a Group
    • Leave a Group
    • Delete a Group
    • Send to a Group
  • Webhooks & Integrations

    • Inbound Messages Webhook
    • Delivery Status Webhook
    • n8n & Integrations
  • Reference

    • Pricing Catalog

Delivery Status Webhook

Track what happens to messages you send. Rapiwa POSTs a delivery receipt to your device's Webhook URL as each message progresses.

  • Direction: Rapiwa → your server
  • Method: POST with a JSON body

Payload — message-status

{
  "session_id": "1024",
  "message_id": "3EB0A1B2C3…",
  "status": "delivered"
}
FieldDescription
session_idThe device that sent the message
message_idThe message these receipts refer to (matches the message_id from your send)
statussent · delivered · read

Status lifecycle

sent ──▶ delivered ──▶ read
StatusMeaning
sentAccepted by WhatsApp's servers (one tick)
deliveredDelivered to the recipient's device (two ticks)
readRecipient opened the chat (blue ticks)

More than the legacy API

The legacy API only forwarded read. Rapiwa forwards sent and delivered too, so you get the full lifecycle. If you only care about read receipts, filter for status === "read".

Correlating with bulk sends

Bulk sends return only a queued acknowledgement — the real message_id for each recipient arrives here, on the status webhook, as each queued send completes. Persist message_id → recipient as receipts arrive to build per-recipient delivery reporting.

Example handler

app.post('/rapiwa/webhook', (req, res) => {
  const { message_id, status } = req.body
  if (status) {
    updateMessageStatus(message_id, status) // your DB
  }
  res.sendStatus(200)
})

Both inbound messages and status receipts arrive at the same Webhook URL — branch on the payload shape: a status field means it's a delivery receipt; a from field means it's an inbound message.

Last Updated: 7/7/26, 8:31 AM
Prev
Inbound Messages Webhook
Next
n8n & Integrations