Buddy

Know the moment a message is read, answered or opted out.

Polling for status is slow and wasteful. Buddy webhooks tell your app the instant a message is delivered, read or replied to, or someone opts out, signed so you know it's really us.

POST https://yourapp.com/hooks/buddy
Buddy-Signature: t=1728112927,v1=5f2c…
 
{ "id": "evt_example", "version": "1",
"type": "message.replied",
"at": "2026-10-05T16:42:07Z",
"livemode": true,
"data": {
"message_id": "msg_example",
"subscriber": null,
"text": "Yes, hold one for me" } }
Signature verified · 200 OK
message.delivered
16:40:03
message.read
16:42:07
subscriber.opted_out
Replied STOP
Technology fromMeta
Built on the official WhatsApp Business Platform
Inside Webhooks
Message eventsSubscriber eventsSignaturesRetriesEvent filtersDelivery logReplaysTest events

Your app shouldn't have to ask what happened.

Without webhooks you poll, guess and miss things: a reply that needed an answer, an opt-out your system didn't hear about. Webhooks push every change to you as it happens.

Today

Polling, guessing, missing.

  • Cron jobs asking for status every few minutes.
  • Replies discovered hours later.
  • Opt-outs your CRM never hears about.
  • No way to tell if a callback is genuine.
  • Lost events when your server was down.
With Webhooks

Every change, pushed the moment it happens.

  • Delivered, read and replied, in real time.
  • Replies routed to your support tool instantly.
  • Opt-outs synced so every system respects them.
  • Every request signed and verifiable.
  • Automatic retries if your endpoint is down.

Add an endpoint. Verify. React.

Three steps to a live feed of everything happening with your WhatsApp messages and subscribers.

1

Add an endpoint

Give Buddy your HTTPS URL and pick the events you want. Buddy shows you the signing secret.

Endpoint
https://yourapp.com/hooks/buddy
message.readmessage.repliedsubscriber.opted_out
2

Verify the signature

Each request carries a signature made with your secret. Check it in a few lines before you trust the payload.

const ok = buddy.webhooks.verify(
rawBody,
req.headers["buddy-signature"],
process.env.BUDDY_WEBHOOK_SECRET)
3

React

Update your records, open a support ticket for a reply, or stop your own emails when someone opts out.

message.replied
Create ticket in your help desk
Respond 200 within 10 seconds

Everything inside Webhooks.

The events, guarantees and tools that make webhooks you can rely on in production.

Every message and subscriber change, as it happens.

Sent, delivered, read, failed and replied for messages. Created, tagged, opted in and opted out for subscribers. Subscribe to the ones you need.

"

If your server is down, Buddy retries with backoff, so a deploy never costs you an event.

Signed requests

Every request is signed with your secret and timestamped, so you can reject fakes and replays.

Automatic retries

Failed deliveries are retried with increasing gaps until your endpoint answers.

Choose your events

Subscribe each endpoint to just the event types it needs.

Delivery log

See every webhook sent, its response code and timing, from your Buddy settings.

Replays

Resend any event from the log after you fix a bug in your handler.

Test events

Fire a sample event at your endpoint to check your handler before going live.

Failure reasons

message.failed includes a plain-English reason, like a number that isn't on WhatsApp.

Multiple endpoints

Send different events to different systems: replies to support, opt-outs to your CRM.

Timestamps

Every payload has a timestamp so you can apply changes in the right order.

What webhooks make possible.

Replies reach a person while it still matters.

Send message.replied to your help desk or CRM and the right person sees it in seconds, not at the next sync.

message.repliedHelp deskReal time
Help desk · new ticket
Grace K. via WhatsApp
"Can I change my delivery to Saturday?"
Created 2 seconds after reply
Two people holding hands in a moment of care
{ "type": "subscriber.opted_out",
"subscriber": "sub_41d0",
"reason": "replied_stop" }
CRM updated · marketing emails paused

Opt-outs respected everywhere, not just in Buddy.

Forward subscriber.opted_out to your CRM and email tool, so someone who said STOP on WhatsApp is respected across your whole stack.

Never lose an event to a bad deploy.

If your endpoint fails, Buddy retries with backoff and keeps a log, so you can replay anything you missed once you've fixed it.

Delivery log
message.read500try 1
message.read500try 2
message.read200try 3

What teams wire webhooks into.

Help desk

Replies become tickets the moment they arrive.

Support

CRM

Reads, replies and opt-outs on every contact record.

Sales

Data warehouse

Every message event for your own reporting.

Analytics

Email tool

Opt-outs pause marketing emails too.

Marketing

Your product

Show users their message status inside your app.

Platforms

Three things people ask about Webhooks.

How do I know a webhook really came from Buddy?

Each request is signed with your endpoint's secret and timestamped. Verify the signature and reject anything that doesn't match or is too old.

What if my server is down?

Buddy retries failed deliveries with increasing gaps, and logs every attempt so you can replay events later.

Can I get events for one workspace only?

Webhooks belong to a workspace, so each one only receives events for its own messages and subscribers.

Questions about Webhooks.

Anything else, ask Sarah.She reads every message and writes back herself.
Ask a question
Which events can I subscribe to?

Message events (sent, delivered, read, replied, failed) and subscriber events (created, tagged, opted in, opted out). Choose them per endpoint.

How should my endpoint respond?

Return a 2xx status within a few seconds. Do heavy work after responding, so slow processing doesn't trigger retries.

Are read events always sent?

WhatsApp only reports a read when the recipient has read receipts on, so some delivered messages never get a read event.

Can I replay old events?

Yes. Pick any event in the delivery log and send it again.

How do I get access?

Join the waitlist and tell us what you're building. We'll set up your workspace with test and live keys and help with your first integration.

Hear about every message the moment it matters.

Join the waitlist and connect your first endpoint the day you get keys.

A product team working around a table with laptops
Delivered
Webhook sent
Read
16:42
Replied
Ticket created
Verified
200 OK