Skip to content

payment.paid_after_expiry

Same shape as payment.completed. The rate lock had already expired when the funds arrived, so the settled fiatValue reflects the rate at quote time, not the (possibly different) rate at arrival — decide in your own integration whether a late payment still fulfils the order.

{
"livemode": false,
"paymentId": "pay_test_00000000",
"paymentRequestId": "req_test_00000000",
"origin": { "type": "link", "id": "lnk_test_00000000", "title": "Sample link" },
"supporter": { "id": "sup_test_00000000", "handle": "sample_supporter", "message": "Test payment" },
"asset": "USDC",
"chain": "base",
"onchainAmount": "15000000",
"feeAmount": "75000",
"decimals": 6,
"fiatValue": { "minor": 1500, "currency": "USD" },
"rateBasis": "Locked",
"txRef": "0xtesttx",
"confirmations": 12,
"completedAt": "2026-09-13T00:00:00Z"
}

See Webhooks overview for the envelope, headers, and signature verification shared by every event type.