payment_link.cancelled
Sent when a payment link is cancelled, via POST /v1/payment-links/{id}/cancel
— see Payment Links for how cancellation
works.
Headers
Section titled “Headers”| Header | Description |
|---|---|
X-Baiyar-Signature |
t=<unix timestamp>,v1=<hex HMAC-SHA256> — see Verifying Webhook Signatures |
Content-Type |
application/json |
Payload
Section titled “Payload”{ "id": "evt_hK83mBwXn5UyQ2TdRV46", "type": "payment_link.cancelled", "created_at": "2026-09-02T10:00:00Z", "data": { "id": "pl_test_8Kx3mQ9dPz2Nc7RwAB12", "project_id": "project_IChAi2NR4vzKN3SgEYPI", "merchant_name": "Zara Store", "reference": "001/P/IX/26", "title": "Invoice August", "description": "", "amount": 125000, "currency": "IDR", "fee_bearer": "merchant", "fee_previews": [ { "payment_method": { "type": "qris" }, "fee_amount": 875, "customer_amount": 125000, "merchant_net": 124125 } ], "allowed_payment_methods": [{ "type": "qris" }], "usage_type": "single_use", "customer_fields": { "name": false, "email": false, "phone": false, "address": false }, "status": "cancelled", "created_at": "2026-09-02T08:00:00Z" }}Same data shape as payment_link.created, with
status: "cancelled". There’s no separate cancelled_at field — the
envelope’s own top-level created_at is when the cancellation happened.
Testing
Section titled “Testing”There’s no sandbox simulator for this event — trigger it by actually
cancelling a sandbox payment link (POST /v1/payment-links/{id}/cancel,
or from the dashboard) and watching your endpoint receive the delivery
within a few seconds.
Next steps
Section titled “Next steps”payment_link.created — the other payment link event.