UnifiWallet Payments

Event types

Everything we will tell you about, and the two that should reach a person rather than a log.

Subscribe to what you need rather than everything — an endpoint that receives events it ignores is an endpoint whose failures you stop noticing. The live list is at GET /v1/capabilities.

{
  "id": "evt_9f3aKd2mQx7b",
  "type": "payment.completed",
  "created": "2026-09-04T10:14:22Z",
  "api_version": "2026-08-28",
  "data": { "id": "pay_3nQ8xK2mLp4R", "status": "completed", "...": "..." }
}

Payments

The ones most integrations act on.

EventSent when
payment.createdA payment exists and is waiting for the buyer.
payment.settlingThe buyer submitted a transaction. Not confirmed.
payment.settledSeen on chain, not yet at the required depth.
payment.completedConfirmed. This is the one to ship on.
payment.underpaidLess arrived than required.
payment.overpaidMore arrived at a deposit address than was required. It was forwarded to you in full; the excess is yours to return. (A wallet payment cannot overpay: the router returns the excess in the same transaction.)
payment.expiredNobody paid in time.
payment.cancelledCancelled before payment.
payment.submission_failedThe transaction the buyer reported reverted, or was not a payment. The checkout is open again for them to retry.
payment.failedThe payment failed and will not complete.
payment.settlement_failedSettlement could not be completed.
payment.voidedAn authorization was released without capture.
payment.reorgedA confirmed settlement was undone by a chain reorganisation.
payment.authorizedThe buyer's funds are held in escrow. Nothing has reached you yet.
payment.authorization_expiringA hold is about to expire. Capture it or it goes back.
payment.authorization_expiredA hold expired and the buyer has their money back. Nothing was charged.
payment.escrow_operation_failedA capture or void was submitted and did not land. Nothing moved; try again.
payment.capturedAn escrow authorization was captured in full.
payment.partially_capturedPart of an escrow authorization was captured.

Money that arrives when it was not expected

Expiring or cancelling a payment does not reach into the buyer's wallet. An order they signed before the deadline can still be mined, and a transfer to a deposit address can still land. We never pretend it did not happen.

EventWhat to do
payment.late_settledThe funds reached your address after the payment expired or was cancelled. The payment is now settled. Fulfil the order, or refund the buyer. (A transaction mined before the deadline but noticed after it is an ordinary payment.settled, not this.)
payment.late_depositFunds arrived at the deposit address of a payment that had already closed. Unless already forwarded to you, they go back to the buyer when the address expires.
payment.unsupported_asset_receivedA deposit address received a token the payment did not ask for. Sent once; the token is returned to the buyer after expiry.
payment.return_failedA deposit could not be returned to the buyer after several attempts — a frozen address, a chain that stayed down. They are still owed it, and it is the one case that needs a decision from you. See Returns in the panel.
payment.deposit_returnedWhatever was left at an expired deposit address was sent back to the buyer's refund address. Carries the transaction hash — useful when they ask.

The two worth waking someone for

Everything above is bookkeeping. These two mean something happened that a person should look at.

EventWhy
payment.settlement_rejectedA transaction carried one of your payment ids but disagreed with that payment's terms — a different address, a different token, or too little. Nothing was credited. It means somebody tried.
payment.duplicate_settlementMoney arrived for a payment that had already settled. It is yours to return, and nobody will chase you for it.

Refunds

EventSent when
refund.requestedA refund was requested and is owed.
refund.fulfilment_pendingYou submitted a transaction; we are verifying it.
refund.fulfilment_failedThat transaction reverted, was not a matching transfer, predates the payment, or never mined. The refund is still owed.
refund.completedVerified on chain. The buyer has their money.
refund.sla_breachedA refund passed its deadline. Repeated daily until it is sent.

Subscriptions

EventSent when
subscription.createdCreated. Nothing is billable yet.
subscription.activatedThe buyer signed, or paid the first cycle by link. It is now billing.
subscription.cycle_dueA cycle is due on a link-collected subscription.
subscription.cycle_chargedA cycle was charged against the buyer's permission.
subscription.cycle_paidThe buyer paid a link-collected cycle.
subscription.past_dueA charge failed and is retried at 12h, 24h, 72h and 168h — or a link cycle went unpaid; three in a row cancel it.
subscription.cancel_scheduledThe buyer cancelled from their manage link. It will not renew — keep serving them until current_period_end.
subscription.canceledStopped now — by you, by the buyer from their manage link, by us after retries, or by the buyer revoking on chain. canceled_by says which.
subscription.endedReached its end date.

Account

EventSent when
account.network_fees_owedNetwork fees we paid for your cancellations, expired holds and returns passed the point where they are worth settling. They come off a future settlement.
destination.addedA settlement destination was added. Every owner is emailed.
destination.verifiedA destination proved ownership.
compliance.payment_refusedA payment was refused on screening.
webhook.testA test event you asked for.

Ordering and delivery

At-least-once, and not guaranteed in order. A retried payment.settling can arrive after the payment.completed that followed it. Deduplicate on id, treat each event as a statement about an object rather than a step in a sequence, and re-read the object if the order matters.