Skip to content

invoice.canceled

The merchant canceled the invoice.

cTpeWay sends this event as an HTTP POST to every webhook endpoint subscribed to it. Verify the signature before you trust the body: see Webhooks.

Field Type Description
id string Unique event id, evt_…. Use it to deduplicate deliveries.
type string Always invoice.canceled.
api_version string Always v1.
created integer Unix time in seconds.
livemode boolean false for events from the test environment.
data object
data.object object
data.object.id string
data.object.number integer
data.object.status string One of open, pending, underpaid, paid, expired, canceled, refunded.
data.object.outcome_flags array of strings Values: overpaid, late, underpaid_accepted, partially_refunded.
data.object.kind string One of fiat, crypto.
data.object.price optional object
data.object.price.currency string
data.object.price.amount string A decimal number written as a string, with up to 8 decimal places.
data.object.options array of objects
data.object.options[].id string
data.object.options[].network string
data.object.options[].asset string
data.object.options[].asset_id string
data.object.options[].contract optional string
data.object.options[].decimals integer
data.object.options[].amount_due optional string Set once the option is selected (fiat invoices). A quoted amount is rounded up to display_decimals, so the amount shown to the payer is exactly the amount that pays the invoice. A whole number written as a string of digits.
data.object.options[].display_decimals optional integer Present with amount_due: the decimals it is stated with. amount_due is a whole number of 10^(decimals − display_decimals) base units; equal to decimals when the amount is exact to the base unit (crypto invoices).
data.object.options[].rate optional string Price of one unit of the asset in the invoice currency at lock time. A decimal number written as a string, with up to 8 decimal places.
data.object.options[].quote_expires_at optional string (date-time) Until when amount_due holds. Afterwards the payer takes a new quote; the invoice lives on.
data.object.options[].address optional string
data.object.options[].token_account optional string Solana tokens: the address’s associated token account, where the token is held.
data.object.options[].selected_at optional string (date-time)
data.object.options[].amount_paid string Sum of confirmed payments to this option. A whole number written as a string of digits.
data.object.options[].amount_detected string Sum of detected, unconfirmed payments to this option. A whole number written as a string of digits.
data.object.selected_option_id optional string
data.object.paid_option_id optional string
data.object.tolerance_bps integer
data.object.order_id optional string
data.object.customer_email optional string The customer the merchant named when creating the invoice.
data.object.description optional string
data.object.metadata optional map of string to string
data.object.expires_at string (date-time)
data.object.pre_selection_expires_at string (date-time)
data.object.created_at string (date-time)
data.object.paid_at optional string (date-time)
data.object.expired_at optional string (date-time)
data.object.canceled_at optional string (date-time)
data.object.refunded_at optional string (date-time) When the invoice became refunded.

A field marked optional can be missing from a payload.

{
"id": "string",
"type": "invoice.canceled",
"api_version": "v1",
"created": 0,
"livemode": true,
"data": {
"object": {
"id": "string",
"number": 0,
"status": "canceled",
"outcome_flags": [
"overpaid"
],
"kind": "fiat",
"price": {
"currency": "string",
"amount": "10.00"
},
"options": [
{
"id": "string",
"network": "string",
"asset": "string",
"asset_id": "string",
"contract": "string",
"decimals": 0,
"amount_due": "1000000",
"display_decimals": 0,
"rate": "10.00",
"quote_expires_at": "2026-01-01T00:00:00.000Z",
"address": "string",
"token_account": "string",
"selected_at": "2026-01-01T00:00:00.000Z",
"amount_paid": "1000000",
"amount_detected": "1000000"
}
],
"selected_option_id": "string",
"paid_option_id": "string",
"tolerance_bps": 0,
"order_id": "string",
"customer_email": "string",
"description": "string",
"metadata": {},
"expires_at": "2026-01-01T00:00:00.000Z",
"pre_selection_expires_at": "2026-01-01T00:00:00.000Z",
"created_at": "2026-01-01T00:00:00.000Z",
"paid_at": "2026-01-01T00:00:00.000Z",
"expired_at": "2026-01-01T00:00:00.000Z",
"canceled_at": "2026-01-01T00:00:00.000Z",
"refunded_at": "2026-01-01T00:00:00.000Z"
}
}
}

The values are placeholders generated from the schema. They show the shape, not real data.