# Webhook setup

> Configure BroadNet to POST delivery receipts (DLR) and inbound messages (MO) to your HTTPS URL, so you track each message's final status without polling. Acknowledge with HTTP 200 quickly and process asynchronously.

- Canonical URL: https://www.broadnet.me/developers/webhooks
- Language: en
- Last updated: 2026-10-21
- Publisher: BroadNet (https://www.broadnet.me)

BroadNet pushes delivery status to the webhook URL configured on your account as each message moves through its lifecycle. You can also poll: GET /whatsapp/message/bulk-insights returns the status of each WhatsApp recipient in a batch, and GET /sms/list returns processed and pending counts for SMS bulk jobs.

> **Answer fast, work later** Reply to each webhook POST with a 2xx as soon as you have stored it, then process it asynchronously. Make your handler safe to run twice for the same update.

## Examples

### message statuses

```text
SUBMITTED   accepted by BroadNet, queued for the network
SENT        handed to the operator or channel
DELIVERED   confirmed on the handset
READ        opened by the recipient (channels that report reads, e.g. WhatsApp)
FAILED      not delivered
REJECTED    refused by the operator or channel
```

### webhook.ts

```typescript
import express from "express";

const app = express();

app.post("/webhooks/broadnet", express.json(), async (req, res) => {
  // Store the raw status update first, then acknowledge.
  // Field names per channel are in the OpenAPI spec.
  await db.statusUpdates.insert({ receivedAt: new Date(), body: req.body });
  res.sendStatus(200);
});
```

Illustrative handler. Payload fields vary by channel; see the OpenAPI spec.

## Related

- [Webhook delivery & reliability standard](https://www.broadnet.me/reference/webhook-delivery-and-reliability)
