Paddle Billing · event: transaction.completed ·
content type: application/json
This is a representative sample — fake IDs, real structure. To see a payload with your data, point the provider at a capture URL (button below).
One click creates a free capture bin with this exact payload already in it — pretty-printed, headers inspectable, replayable to your own endpoint:
Then paste the bin's URL into Paddle Billing's webhook settings to capture a real delivery. No signup.
content-type: application/json paddle-signature: ts=1787973164;h1=cacb2aedaa06e75ff0056081eebf4bcf6c63b1a8ca7b6e926da6df4c9c9ae3c5
{
"event_id": "evt_01hv8x2k9qf3n7d5m1c8b4z6tr",
"event_type": "transaction.completed",
"occurred_at": "2026-08-29T03:12:44.123456Z",
"notification_id": "ntf_01hv8x2kbtqj5w9e2r7y4a8s6d",
"data": {
"id": "txn_01hv8x2j6mn4p8q2w5e9r3t7yk",
"status": "completed",
"customer_id": "ctm_01hstwtq7c2zwjqx4b5k8d9f3g",
"address_id": "add_01hstwv5e8n2m6p4q7r9s1t3u5",
"business_id": null,
"currency_code": "USD",
"origin": "web",
"subscription_id": "sub_01hv8wz3k5j7l9n1b3v5c7x9z2",
"invoice_id": "inv_01hv8x2jd4f6h8k1m3p5r7t9w2",
"invoice_number": "3305-10013",
"collection_mode": "automatic",
"billed_at": "2026-08-29T03:12:42.87Z",
"items": [
{
"price": {
"id": "pri_01hsy3c0p1r5t9w2y4a6s8d0f3",
"product_id": "pro_01hsy3bqx7z9b2d4f6h8j0k1m3",
"description": "Pro plan (monthly)",
"unit_price": {
"amount": "1900",
"currency_code": "USD"
}
},
"quantity": 1,
"proration": null
}
],
"details": {
"totals": {
"subtotal": "1900",
"discount": "0",
"tax": "158",
"total": "2058",
"credit": "0",
"balance": "0",
"grand_total": "2058",
"currency_code": "USD"
}
},
"payments": [
{
"payment_method_id": "paymtd_01hv8x1z2c4e6g8i0k2m4o6q8s",
"amount": "2058",
"status": "captured",
"captured_at": "2026-08-29T03:12:42.87Z",
"method_details": {
"type": "card",
"card": {
"type": "visa",
"last4": "4242",
"expiry_month": 12,
"expiry_year": 2028
}
}
}
],
"created_at": "2026-08-29T03:12:40.44Z",
"updated_at": "2026-08-29T03:12:44.01Z"
}
}
Paddle-Signature header, and the secret
pdl_ntfset_01hv8xample5ecretkeyf0rd0cs_hookden into the
signature debugger to see the scheme work
(hex HMAC-SHA256 over ts:rawBody, key used as-is)."total": "2058" means $20.58. Parsing them as floats or dollars is the
classic billing bug.event_id (live accounts: up to 60 retries
over ~3 days on any non-2xx or >5s response), so dedupe on it. See
Paddle signature verification —
the 5 causes.occurred_at has microsecond precision while the data
timestamps vary in precision — don't parse with a fixed-format date parser.Reproduce this delivery against any endpoint (your handler, a bin, staging):
$ curl -X POST https://your-endpoint.example/hook \
-H 'content-type: application/json' \
-H 'paddle-signature: ts=1787973164;h1=cacb2aedaa06e75ff0056081eebf4bcf6c63b1a8ca7b6e926da6df4c9c9ae3c5' \
-d '{
"event_id": "evt_01hv8x2k9qf3n7d5m1c8b4z6tr",
"event_type": "transaction.completed",
"occurred_at": "2026-08-29T03:12:44.123456Z",
"notification_id": "ntf_01hv8x2kbtqj5w9e2r7y4a8s6d",
"data": {
"id": "txn_01hv8x2j6mn4p8q2w5e9r3t7yk",
"status": "completed",
"customer_id": "ctm_01hstwtq7c2zwjqx4b5k8d9f3g",
"address_id": "add_01hstwv5e8n2m6p4q7r9s1t3u5",
"business_id": null,
"currency_code": "USD",
"origin": "web",
"subscription_id": "sub_01hv8wz3k5j7l9n1b3v5c7x9z2",
"invoice_id": "inv_01hv8x2jd4f6h8k1m3p5r7t9w2",
"invoice_number": "3305-10013",
"collection_mode": "automatic",
"billed_at": "2026-08-29T03:12:42.87Z",
"items": [
{
"price": {
"id": "pri_01hsy3c0p1r5t9w2y4a6s8d0f3",
"product_id": "pro_01hsy3bqx7z9b2d4f6h8j0k1m3",
"description": "Pro plan (monthly)",
"unit_price": {
"amount": "1900",
"currency_code": "USD"
}
},
"quantity": 1,
"proration": null
}
],
"details": {
"totals": {
"subtotal": "1900",
"discount": "0",
"tax": "158",
"total": "2058",
"credit": "0",
"balance": "0",
"grand_total": "2058",
"currency_code": "USD"
}
},
"payments": [
{
"payment_method_id": "paymtd_01hv8x1z2c4e6g8i0k2m4o6q8s",
"amount": "2058",
"status": "captured",
"captured_at": "2026-08-29T03:12:42.87Z",
"method_details": {
"type": "card",
"card": {
"type": "visa",
"last4": "4242",
"expiry_month": 12,
"expiry_year": 2028
}
}
}
],
"created_at": "2026-08-29T03:12:40.44Z",
"updated_at": "2026-08-29T03:12:44.01Z"
}
}'
← All payload examples · Related guide · Signature debugger · Docs