Skip to main content

Invoice Payment Widget webhooks

Overview​

Invoice Payment Widget creates invoices. Payment status changes for these invoices are delivered through Invoice webhook events.

Use webhooks as the main way to update order status in the merchant system. If you need to verify the current invoice state, use [POST] invoice.

Event types​

Event typeDeliveryWhen it is sent
INVOICE_CREATE_INVOICERequired for invoice creation from widgetAn invoice was created from a SINGLE_FIAT widget.
INVOICE_MEM_POOL_FOUNDOptionalA transaction was detected in the blockchain mempool. This event is not guaranteed.
INVOICE_PENDING_COMPLIANCEOptionalA detected transaction is under compliance review. This event may be skipped if the transaction automatically passes compliance.
INVOICE_COMPLIANCE_DECLINEDRequired for negative compliance resultA transaction was declined by compliance.
INVOICE_FUNDS_RECEIVED_FOR_INVOICERequired for received invoice fundsFunds were received on the invoice address. This confirms the deposit, but it may be followed by an intervention or final payment event.
INVOICE_PENDING_INTERVENTIONOptional, conditionalThe invoice requires merchant intervention, usually because of underpay or overpay. This event is sent only when intervention is required.
INVOICE_PAIDRequired for successful invoice paymentThe invoice reached the successful customer-facing payment result.
INVOICE_TRANSLATION_TO_ACCOUNT_COMPLETEDRequired when funds are creditedFunds were transferred from the invoice address to the merchant account balance.
INVOICE_EXPIREDRequired when invoice expires before successful paymentThe invoice expiration date passed before successful payment.
INVOICE_FAILEDRequired when invoice processing failsInvoice processing failed.

Widget, invoice, and webhook identifiers​

IdentifierWhere it appearsHow to use it
Widget idempotencyKeyPayment Widget API response and widgetKey URL parameter.Opens the widget page.
invoiceIdempotencyKeyinvoices array in Payment Widget API response.Checks the created invoice through Invoice API.
Webhook data.idempotencyKeyInvoice webhook payload.Identifies the invoice related to the webhook event.
externalIdPayment widget and invoice objects, if provided during creation.Maps Calypso objects to merchant-side orders or customers.

Invoice state and webhook event names​

The invoice state field and webhook eventType are related, but they are not identical.

Invoice stateRelated webhook event
PENDING_PAYMENTInvoice creation event
MEM_POOL_FOUNDINVOICE_MEM_POOL_FOUND
PENDING_COMPLIANCE_CHECKINVOICE_PENDING_COMPLIANCE, optional intermediate event
DECLINEDINVOICE_COMPLIANCE_DECLINED, terminal negative compliance result
PENDING_INTERVENTIONINVOICE_PENDING_INTERVENTION
PAIDINVOICE_PAID
COMPLETEDINVOICE_TRANSLATION_TO_ACCOUNT_COMPLETED
ARCHIVEDINVOICE_EXPIRED or archive-related processing
CANCELCancellation-related processing
REVERSEDReversal-related processing

Webhook event types use the INVOICE_ prefix. Invoice states returned in state do not use this prefix.

Webhook payload structure​

Each webhook request contains a common envelope and an event-specific data object.

FieldTypeDescription
requestIdstringWebhook request ID.
idnumberCalypso webhook event ID.
createdDatestringEvent creation date and time.
levelstringEvent level, for example SUCCESS.
servicestringService that produced the event. For invoice events, the value is INVOICE.
eventTypestringInvoice webhook event type.
dataobjectEvent-specific invoice data.

Common data fields​

FieldTypeDescription
typestringEvent type. Usually matches eventType.
parentExternalIdstring or numberCalypso invoice ID.
idempotencyKeystringInvoice idempotencyKey.
externalIdstringMerchant-side ID, if provided during widget creation.
messagestringInvoice text or description.
descriptionstringInvoice description, if included in the event.
createdDatestringInvoice creation date and time, if included in the event.
FieldTypeDescription
amountnumberExpected invoice amount or received amount, depending on event type.
realAmountnumberActual amount paid by the customer.
currencystringInvoice cryptocurrency.
fiatAmountnumber or objectFiat invoice amount, if applicable.
fiatCurrencystringFiat currency, if applicable.
transactionIdarrayCalypso deposit IDs related to the event.
transactionIdsarrayCalypso deposit IDs related to the event.
transactionHashstringBlockchain transaction hash.
senderAddressstringAddress that sent funds to the invoice.
invoiceAddressstringInvoice address that received funds.
paymentDatestringDeposit transaction creation date and time.
serviceFeenumberService fee for the invoice deposit.
expirationDatestringInvoice expiration date and time.

Webhook example​

{
"requestId": "bf9348b7-2c14-46d7-868c-b597852da319",
"id": 3,
"createdDate": "2026-06-29T12:13:05.909616",
"level": "SUCCESS",
"service": "INVOICE",
"eventType": "INVOICE_PAID",
"data": {
"type": "INVOICE_PAID",
"parentExternalId": "d9732536-acdd-41bd-87c3-ec40aeeb6a37",
"idempotencyKey": "5b0ca8da-6af4-4a1c-9efd-5cbfc19ace09",
"externalId": "order-1001",
"amount": 100,
"realAmount": 100,
"currency": "USDT_TRX",
"description": "Order #1001"
}
}
EventRecommended merchant action
Invoice creation eventSave the invoice ID and invoice idempotencyKey.
INVOICE_MEM_POOL_FOUNDShow that payment was detected but is not confirmed yet.
INVOICE_PENDING_COMPLIANCEKeep the order in pending status if this optional webhook is received. It may be skipped when compliance passes automatically.
INVOICE_COMPLIANCE_DECLINEDMark the payment as declined and follow internal support or refund procedures. This is the terminal webhook for a negative compliance result.
INVOICE_FUNDS_RECEIVED_FOR_INVOICERecord the received deposit and wait for the next invoice status event. Do not treat this event alone as the final successful payment result.
INVOICE_PENDING_INTERVENTIONStart the intervention flow and check invoice details. This is a conditional branch after funds are received, not a mandatory event for every widget invoice.
INVOICE_PAIDMark the invoice payment as successful from the customer payment perspective.
INVOICE_TRANSLATION_TO_ACCOUNT_COMPLETEDMark funds as credited to the merchant account balance.
INVOICE_EXPIREDStop accepting payment for this invoice and create a new widget if payment is still required.
INVOICE_FAILEDMark the invoice as failed and verify the current state through [POST] invoice.
DocumentLink
Create Invoice Payment Widget via APIHow to create an Invoice Payment Widget via API
Manage invoice interventionsHow to manage interventions via API
Webhook API referenceWebhook API