Skip to main content
CoinVoyage emits a webhook event at each stage of the PayOrder lifecycle. For every event you subscribe to, CoinVoyage delivers a POST request to your endpoint containing a JSON payload that describes what changed. This page covers every event type, the payload structures you can expect, and a full example for each.
There is a naming difference between the identifiers you use when subscribing to events and the type field in the delivered payload. Subscription identifiers use uppercase ORDER_* format. The type field in the JSON payload uses lowercase payorder_* format. For example, subscribing to ORDER_COMPLETED results in payloads where "type": "payorder_completed".

Event types

Base event payload structure

Every webhook delivery shares a common base structure. Additional top-level fields are present depending on the specific event type.

PaymentData structure

The payment_data object is included in payorder_started, payorder_confirming, payorder_executing, and payorder_completed events. It contains source and destination amounts, addresses, transaction hashes, and execution details.

Payload examples

Triggered when a new PayOrder is created. The payment_data field is not yet available at this stage.
Triggered when the PayOrder is ready and waiting for the user to send payment. The payment_data field is now populated, including the deposit_address and expires_at.
Triggered when payment has been detected on-chain and is awaiting the required number of confirmations.
Triggered when CoinVoyage starts executing the destination transfer or contract call after the source payment is confirmed.
Triggered when the PayOrder has completed successfully and settlement has been delivered to the receiving address.
Triggered when an error occurs during PayOrder processing. The message field contains a description of the error. payment_data is not included.
Triggered when funds have been refunded to the user. The refund_tx_hash and refund_address fields identify the refund transaction and destination.
Triggered when the PayOrder expires before payment was received. No metadata or payment_data is included in the minimal expiry payload.