Paddle transaction.completed webhook payload example

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).

See it live, not frozen

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.

Headers

content-type: application/json
paddle-signature: ts=1787973164;h1=cacb2aedaa06e75ff0056081eebf4bcf6c63b1a8ca7b6e926da6df4c9c9ae3c5

Body

{
  "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"
  }
}

Things that bite people

Send it yourself

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