invoice.payment_reversed
A previously confirmed payment was reversed (e.g. chain reorg).
A previously accepted payment was reversed by the chain. The accepted amount is reduced and the invoice status is recalculated.
Money and processing#
reversed_amount is the gross payment reversal in reversed_currency and reversed_network. amount_paid is the remaining cumulative accepted gross. Fee corrections mean the gross reversal is not necessarily the net balance adjustment to apply in your own ledger.
GET the invoice and reconcile balances. A previously paid invoice can move to another status. If an order was already fulfilled, handle the reversal as a separate business exception. Do not interpret the optional inherited acceptance fields as another payment credit; the reversal producer does not populate gross/fee/net.
Schema version 1#
Fields are taken from the public OpenAPI contract. Required nullable fields must be present and may contain null.
-
id· string · RequiredStable event UUID for merchant-side idempotency. · Format: uuid
-
event_seq· integer · RequiredGlobal event sequence. Gaps are possible; it does not establish delivery or processing order. · Format: int64
-
type· "invoice.payment_reversed" · Required—
-
schema_version· 1 · Required—
-
environment· "live" | "test" · Required—
-
merchant_id· string · RequiredFormat: uuid
-
subject_type· "invoice" · Required—
-
subject_id· string · RequiredFormat: uuid
-
occurred_at· string · RequiredCanonical business occurrence timestamp. · Format: date-time
-
data· object · RequiredAmounts except reversed_amount are denominated in the invoice's currency and network; reversed_amount uses reversed_currency and reversed_network. For a recovered payment in another asset, gross_amount, fee_total and net_amount are frozen invoice-equivalent values, not an exchange or a balance credit in that asset. Read the invoice payments and their settlement for actual payment and credited amounts. · Unknown properties are rejected
-
data.invoice_id· string · RequiredFormat: uuid
-
data.external_id· string | null · Required—
-
data.currency· string · Required—
-
data.network· string · Required—
-
data.environment· "live" | "test" · Required—
-
data.amount_requested· string · RequiredFormat: decimal · Pattern: ^\d+(.\d+)?$
-
data.amount_paid· string · RequiredFormat: decimal · Pattern: ^\d+(.\d+)?$
-
data.status· "pending" | "confirming" | "paid" | "overpaid" | "underpaid" | "expired" | "invalid" | "rejected" · Required—
-
data.paid_at· string · OptionalFormat: date-time
-
data.gross_amount· string · OptionalFormat: decimal · Pattern: ^\d+(.\d+)?$
-
data.fee_total· string · OptionalCharges withheld from this payment, expressed in invoice units — service fee, payer-priced conversion spread and recovery fee. Platform-paid service fees are excluded. gross_amount − fee_total = net_amount. · Format: decimal · Pattern: ^\d+(.\d+)?$
-
data.net_amount· string · OptionalFormat: decimal · Pattern: ^\d+(.\d+)?$
-
data.reversed_amount· string · RequiredFormat: decimal · Pattern: ^\d+(.\d+)?$
-
data.reversed_currency· string · Required—
-
data.reversed_network· string · Required—
Example — version 1#
{
"id": "00000000-0000-0000-0000-000000000001",
"event_seq": 184203,
"type": "invoice.payment_reversed",
"schema_version": 1,
"environment": "live",
"merchant_id": "00000000-0000-0000-0000-000000000002",
"subject_type": "invoice",
"subject_id": "00000000-0000-0000-0000-000000000003",
"occurred_at": "2026-09-14T10:00:00Z",
"data": {
"invoice_id": "00000000-0000-0000-0000-000000000003",
"external_id": null,
"currency": "USDC",
"network": "ethereum",
"environment": "live",
"amount_requested": "25.00",
"amount_paid": "15.00",
"status": "confirming",
"reversed_amount": "10.00",
"reversed_currency": "USDC",
"reversed_network": "ethereum"
}
}See delivery and envelope, signature verification, and business processes.