Webhook payload JSON example
Last updated 2026-05-20
Example JSON
A canonical webhook envelope, similar to what Stripe and GitHub use.
{
"id": "evt_2N0a8c4Q8XzCQ9Wb1aB2c3D4",
"type": "order.created",
"apiVersion": "2026-05-01",
"created": 1737984130,
"livemode": false,
"data": {
"object": {
"id": "order_01HQ9YV1XBC8WJ5KZ7TFX1H2BR",
"status": "created",
"total": 4499,
"currency": "usd",
"customer": {
"id": 1,
"email": "[email protected]"
},
"items": [
{
"productId": 1,
"quantity": 1,
"price": 4499
}
]
}
},
"request": {
"idempotencyKey": "0a23b1cd-e5f6-4a7b-9c8d-2e1f3a4b5c6d"
}
}Request examples
app.post('/webhooks/jsonexamples', express.json(), (req, res) => {
const evt = req.body;
if (evt.type === 'order.created') {
saveOrder(evt.data.object);
}
res.status(204).end();
});Common variations
order.refunded event
{
"id": "evt_2N0a8c4Q8YyDR0Yc2bC3d4E5",
"type": "order.refunded",
"created": 1737984530,
"data": {
"object": {
"id": "order_01HQ9YV1XBC8WJ5KZ7TFX1H2BR",
"status": "refunded",
"refundedAmount": 4499
}
}
}Batch (multiple events in one delivery)
{
"events": [
{
"id": "evt_1",
"type": "order.created"
},
{
"id": "evt_2",
"type": "order.paid"
}
],
"deliveryId": "wh_del_01HQ9ZAJW3Y8KD2X5RTFV2H3CS"
}Convert this JSON
Generated starting points for TypeScript, JSON Schema, and Zod. Refine before shipping to production.
export interface WebhookPayload {
"id": string;
"type": string;
"apiVersion": string;
"created": number;
"livemode": boolean;
"data": {
"object": {
"id": string;
"status": string;
"total": number;
"currency": string;
"customer": {
"id": number;
"email": string;
};
"items": {
"productId": number;
"quantity": number;
"price": number;
}[];
};
};
"request": {
"idempotencyKey": string;
};
}Note. Webhook receivers should also verify the X-Signature header. JsonExamples does not send live webhooks; this page is a copy/download reference shape only.