invoice.payment_reverted
A payment to the invoice was orphaned or dropped; the invoice was re-evaluated without it.
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.
Payload
Section titled “Payload”| Field | Type | Description |
|---|---|---|
id |
string | Unique event id, evt_…. Use it to deduplicate deliveries. |
type |
string | Always invoice.payment_reverted. |
api_version |
string | Always v1. |
created |
integer | Unix time in seconds. |
livemode |
boolean | false for events from the test environment. |
data |
object | |
data. |
object | |
data. |
string | |
data. |
integer | |
data. |
string | One of open, pending, underpaid, paid, expired, canceled, refunded. |
data. |
array of strings | Values: overpaid, late, underpaid_accepted, partially_refunded. |
data. |
string | One of fiat, crypto. |
data. optional |
object | |
data. |
string | |
data. |
string | A decimal number written as a string, with up to 8 decimal places. |
data. |
array of objects | |
data. |
string | |
data. |
string | |
data. |
string | |
data. |
string | |
data. optional |
string | |
data. |
integer | |
data. 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. 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. 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. optional |
string (date-time) | Until when amount_due holds. Afterwards the payer takes a new quote; the invoice lives on. |
data. optional |
string | |
data. optional |
string | Solana tokens: the address’s associated token account, where the token is held. |
data. optional |
string (date-time) | |
data. |
string | Sum of confirmed payments to this option. A whole number written as a string of digits. |
data. |
string | Sum of detected, unconfirmed payments to this option. A whole number written as a string of digits. |
data. optional |
string | |
data. optional |
string | |
data. |
integer | |
data. optional |
string | |
data. optional |
string | The customer the merchant named when creating the invoice. |
data. optional |
string | |
data. optional |
map of string to string | |
data. |
string (date-time) | |
data. |
string (date-time) | |
data. |
string (date-time) | |
data. optional |
string (date-time) | |
data. optional |
string (date-time) | |
data. optional |
string (date-time) | |
data. optional |
string (date-time) | When the invoice became refunded. |
data. |
object | |
data. |
string | |
data. |
string | One of detected, confirmed, orphaned, dropped. |
data. optional |
string | |
data. optional |
string | |
data. optional |
string | |
data. |
string | |
data. |
string | |
data. |
string | |
data. optional |
string | |
data. |
integer | |
data. |
string | |
data. optional |
string | |
data. optional |
string | The transaction that paid. Absent while the payment is known only from a balance change (detected_by: balance) and its transaction has not been identified; payment.transaction_attached announces it. A simulated payment (test mode, simulated: true) carries its sim_… id here. |
data. optional |
integer | Position of the transfer inside the transaction. Present exactly when tx_hash is. |
data. |
string | A whole number written as a string of digits. |
data. |
integer | |
data. optional |
integer | |
data. optional |
string | |
data. optional |
string | Value at the price snapshot taken at confirmation. A decimal number written as a string, with up to 8 decimal places. |
data. |
boolean | Confirmed after the invoice had expired or been canceled. |
data. |
boolean | |
data. |
string | How the payment was found, fixed when it is first seen: poll (its transaction was seen while watching the address), hint (its transaction was reported through the checkout and found on the network), balance (the address’s balance rose; the transaction is identified later, and tx_hash is absent until then), simulated (test mode). One of poll, hint, balance, simulated. |
data. |
string (date-time) | |
data. optional |
string (date-time) | |
data. optional |
object | |
data. |
string | |
data. |
string | One of pending, held, releasing, released, failed, reverted. |
data. |
string | One of detected, confirmed, orphaned, dropped. |
A field marked optional can be missing from a payload.
Example
Section titled “Example”{ "id": "string", "type": "invoice.payment_reverted", "api_version": "v1", "created": 0, "livemode": true, "data": { "object": { "id": "string", "number": 0, "status": "open", "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", "payment": { "id": "string", "status": "detected", "invoice_id": "string", "option_id": "string", "deposit_address_id": "string", "network": "string", "asset": "string", "asset_id": "string", "contract": "string", "decimals": 0, "address": "string", "from_address": "string", "tx_hash": "string", "tx_index": 0, "amount": "1000000", "confirmations": 0, "block_height": 0, "block_hash": "string", "usd_value": "10.00", "late": true, "simulated": true, "detected_by": "poll", "detected_at": "2026-01-01T00:00:00.000Z", "confirmed_at": "2026-01-01T00:00:00.000Z", "settlement": { "id": "string", "status": "pending" } }, "previous_payment_status": "detected" } }}The values are placeholders generated from the schema. They show the shape, not real data.

