Skip to main content
Cobo Payments notifies your system through webhook events. This page lists every event Cobo Payments provides, grouped by payment business. Click an event name to see its trigger conditions, fields, and samples.

All events

Events come in two kinds:
  • Standard events report the outcome of each payment business. Subscribe to the ones for the businesses you use.
  • Advanced events provide detail about the underlying on-chain transactions, such as confirmations, on-chain transaction fees, and block information. The business outcome is already reported by a standard event, so you do not need to subscribe to these unless you need that detail.
BusinessEventTypeWhat it notifies you of
Top-uppayment.topup.updatedStandardA top-up’s status changed: detected, in compliance screening, action required, completed, or failed.
payment.address.updatedStandardA payer’s deposit address was replaced. Cobo also replaces addresses on its own.
payment.transaction.createdAdvancedA top-up address received a new deposit, with on-chain transaction detail.
payment.transaction.completedAdvancedA top-up deposit cleared compliance screening, with on-chain transaction detail.
payment.transaction.failedAdvancedA top-up deposit failed or was rejected (for example, did not clear compliance screening), with on-chain transaction detail.
Orderspayment.order.updatedStandardA pay-in order’s status changed: pending, processing, paid in full, underpaid, or expired. Also sent when a deposit needs your action, fails, or arrives after the order ended.
payment.order.status.updatedAdvancedA pay-in order’s status changed, with on-chain transaction detail.
payment.transaction.lateAdvancedA screened deposit arrived after the order reached a final state.
payment.transaction.completedAdvancedA deposit to the order cleared compliance screening, with on-chain transaction detail.
payment.transaction.failedAdvancedA deposit to the order failed or was rejected (for example, did not clear compliance screening), with on-chain transaction detail.
Unexpected depositspayment.transaction.external.createdStandardAn unexpected deposit is detected (transactions not within current orders/deposit plans, or deposits in unsupported tokens).
payment.transaction.external.completedStandardThe unexpected deposit cleared compliance screening.
Refundspayment.refund.updatedStandardA refund order’s status changed: pending, completed, or failed.
payment.refund.status.updatedAdvancedA refund order’s status changed, with on-chain transaction detail.
Payoutspayment.payout.updatedStandardA payout’s status changed: accepted, preparing funds, transferring, completed, partially completed, failed, or returned by the receiving bank.
payment.payout.status.updatedAdvancedA payout’s status changed, with on-chain transaction detail.
Fiat withdrawalspayment.bank_withdrawal.status.updatedStandardA fiat withdrawal from one of your virtual accounts to a bank account changed status.
Bulk sendpayment.bulk_send.updatedStandardA bulk send batch’s status changed: created, validating, transferring, completed, partially completed, or failed, with amount and item-count summaries.
payment.bulk_send.item.updatedStandardA bulk send item’s status changed: pending, processing, completed, failed, or not executed.
payment.bulk_send.status.updatedAdvancedA bulk send batch’s status changed.
payment.bulk_send.item.status.updatedAdvancedA bulk send item reached a final status: Completed, Failed, or NotExecuted.
Balancespayment.account.balance.updatedStandardOne account’s available balance moved for one token, with the balance before and after and what caused it.

Event structure

Every webhook message shares the same envelope. event_id uniquely identifies an event and stays the same when the event is redelivered, so use it to deduplicate. The envelope’s created_timestamp is when this event was created, in milliseconds; it does not change on retries and cannot be used to order events (see Event ordering). The created_timestamp and updated_timestamp inside data are the object’s own creation and last-update times, in seconds. The envelope’s status (Success, Retrying, Failed) and the next_retry_timestamp and retries_left fields that appear during retries describe delivery of this message, not your business, and can be ignored when processing.

Rules that apply to every event

Event ordering

Cobo does not guarantee that events are delivered in the order they occur. For example, a payout moves through Pending, Preparing, Transferring, and Completed, but if one of those events fails to deliver and is retried, you may receive Completed before Transferring. Make sure your handling does not depend on the order in which events arrive. To confirm an object’s latest state, call the matching query endpoint, such as Get pay-in order information, Get refund order information, Get payout information, or Get bulk send information.

Empty values

Every field in the field tables is always present in the payload: null when it does not apply, [] for an empty array. Fields marked Optional or “Present only when…” are the exception.

Failure reasons

Events that can report a failure carry a failed_reason object.
code is a controlled enumeration. Use it to decide how to handle the failure. message is written for human operators and its wording can change, so you can display it, but do not match on it. Each business page lists the codes that can appear on that object, grouped by the response they need: Top-up, Order, Refund, Payouts and withdrawals, Bulk send.

Amounts

Unless stated otherwise, amounts carry at most two decimal places (extra digits truncated, not rounded), with trailing zeros stripped (100.00 is sent as 100). A field whose name is plural, such as requested_amounts, is an array and can span several tokens. A singular field is a single object covering one asset. Never add amounts across assets. Arrays group by token_id, so the same token symbol on two chains is two entries.

Set up your endpoint

To set up a webhook endpoint and subscribe to events, see Handle webhook events.