POST, verifies the signature, and replies 200.POST with a JSON body:{
"event": "shipment.created",
"timestamp": "2026-10-20T09:14:22.431Z",
"payload": {
"id": "a3f1c9d4-7b2e-4c88-91a5-6e0d4f3b8c27",
"...": "event-specific fields"
}
}| Header | Meaning |
|---|---|
X-Webhook-Event | The event name, matching event in the body |
X-Webhook-Id | Unique id for this delivery. Stable across retries — use it for idempotency |
X-Webhook-Signature | HMAC-SHA256 of the request body, hex encoded. See Verifying signatures |
X-Webhook-Timestamp | When the event occurred, ISO 8601 |
X-Webhook-Attempt | Delivery attempt number, starting at 1 |
User-Agent | Always ByeLabel-Webhook/1.0 |
| Field | Type | Notes |
|---|---|---|
event | string | The event name |
timestamp | string | ISO 8601, UTC |
payload | object | null | The event data. null for events that carry no body |
HMAC-SHA256 over the raw request body, keyed with your signingUse the raw body bytes, not a re-serialized object. If you parse the JSON and
stringify it again, key order and whitespace may differ and the signature will not
match. Most frameworks need to be configured to keep the raw body.
timingSafeEqual, hash_equals,compare_digest — rather than ==.| Pattern | Matches |
|---|---|
order.created | that event only |
order.* | order.created, order.updated, order.deleted |
* | every event, including ones added in future |
| Event | Sent when |
|---|---|
order.created | An order is created manually or imported from a marketplace |
order.updated | Any field on an order changes, including status and address corrections |
order.deleted | An order is removed |
| Event | Sent when |
|---|---|
shipment.created | A label is purchased and a shipment is created |
shipment.updated | A shipment changes — tracking updates, status transitions |
shipment.deleted | A shipment is voided or removed |
| Event | Sent when |
|---|---|
customer.created | A new recipient record is created |
customer.updated | A recipient record changes |
customer.deleted | A recipient record is removed |
| Event | Sent when |
|---|---|
product.created | A product is added to the catalogue |
product.updated | A product changes |
product.deleted | A product is removed |
| Event | Sent when |
|---|---|
batch.created | A batch is opened |
batch.updated | Orders are added to or removed from a batch, or it is closed |
batch.deleted | A batch is removed |
| Event | Sent when |
|---|---|
store.synced | A marketplace store finishes a sync |
store.deactivated | A store connection is deactivated, usually because credentials stopped working |
| Event | Sent when |
|---|---|
workspace.updated | Workspace settings change |
workspace.deleted | The workspace is closed |
user.created | A user is added |
user.updated | A user's details or permissions change |
user.deleted | A user is removed |
| Event | Sent when |
|---|---|
ticket.created | A support ticket is opened |
ticket.updated | A ticket changes |
ticket.replied | A reply is added |
ticket.closed | A ticket is closed |
| Event | Sent when |
|---|---|
balance | Your account balance changes |
| Response | Result |
|---|---|
2xx | Delivery recorded as successful |
| Anything else | Delivery recorded as failed and retried |
| No response within 10 seconds | Treated as failed and retried |
200 as soon as you have| Attempt | Sent |
|---|---|
| 1 | immediately |
| 2 | +5 seconds |
| 3 | +15 seconds |
| 4 | +35 seconds |
| 5 | +75 seconds |
| 6 | +155 seconds |
X-Webhook-Id as the deduplication key. It stays the same across all attempts oforder.updated can land after a latertimestamp against what you hold rather| Setting | Notes |
|---|---|
| Name | 1–150 characters. For your own reference |
| Target URL | http or https, up to 500 characters. Use HTTPS in production |
| Events | At least one. Specific names or wildcards |
| Enabled | Disable to stop deliveries without deleting the webhook or losing its secret |
| Max retries | 0–20, default 5 |
| Custom headers | Up to 20. Header name up to 100 characters, value up to 2000 |
X-Webhook-Id.401 on a signature mismatch rather than 200, so the failure is visible in