Skip to main content
A flow reports progress through signed webhooks that fire at every lifecycle transition. Polling works too, but webhooks are the path that scales: a flow can sit in settlement for a while, and polling it is wasted work. Every payload is HMAC-signed, so your backend can verify an event came from Dynamic before acting on it.

Three axes, three event types

A flow does not have one status. It has three, and they move independently. That is the single most useful thing to understand about the event model, because a flow can be finished on one axis and still in progress on another. Each event carries both the previous and the new state, so your backend can react to a specific transition rather than re-deriving what changed.
Execution reaching source_confirmed does not mean the money has landed. Settlement can still be routing. Treat settlement as the axis that tells you a payment is done.

Reconciling a completed payment

When settlement reaches completed, the event carries the on-chain transaction hash that delivered the funds to your destination. Paired with the flow’s memo, that is everything needed to match a payment against an internal order or treasury record. The same payload carries the destination chain name and ID, plus block explorer URLs, so you can link a customer straight to their transaction without assembling explorer URLs yourself.

Choosing webhooks or polling

Polling is simpler to stand up and fine for a prototype or a low-volume flow. Webhooks are the right default in production: they remove the latency of a poll interval, they cost nothing while a flow is idle, and they deliver the settlement transaction hash without an extra read. Nothing stops you doing both. A webhook-driven backend that also reconciles by polling on a schedule is a reasonable belt-and-braces posture for payments.

Flow event payloads

Flow events send a state-transition payload, not the full flow object. Use the flowId with getFlow to fetch the full flow state. See the Flow API guide for details on each state.
object
Occurs whenever a flow’s execution state changes. The payload includes previousState and newState: for example initiatedsource_attached, signingbroadcasted, or broadcastedfailed. Possible execution states: initiated, source_attached, quoted, signing, broadcasted, source_confirmed, cancelled, expired, failed.
object
Occurs whenever a flow’s settlement state changes. Settlement tracks the post-broadcast movement of funds. data.additionalData identifies the destination chain the settlement lands on with chainName (for example SOL or EVM) and chainId (a string, for example "101"). When the new state is completed, it also includes settlementTxHash (the on-chain transaction hash that delivered the settled funds) and blockExplorerUrls (explorer links for that transaction). Possible settlement states: none, routing, bridging, swapping, settling, completed, failed.
object
Occurs whenever a flow’s risk assessment state changes. Fired when risk screening transitions, for example unknownpendingcleared. Possible risk states: unknown, pending, cleared, blocked, review.

Example Flow Event Payload

Example Flow Settlement Completed Payload

Use settlementTxHash with chainName and chainId to reconcile the completed flow against the destination-chain transaction, and blockExplorerUrls to link your users straight to it. Pair the hash with the flow memo to match the settlement to an internal order or invoice.
Fields with nothing to report are omitted rather than sent as null. chainName and chainId are absent until the flow has a destination chain, and blockExplorerUrls is absent when the settlement has no transaction hash yet or the destination network has no configured explorer.

Exchange transfer events

object
Occurs whenever an exchange transfer is successfully initiated. Is an ExchangeTransferResponse.
object
Occurs whenever an exchange transfer fails for any reason. Contains error details about the failure.

Legacy checkout events

Checkout transaction events apply to the legacy checkout system. For new integrations, use Fireblocks Flow and subscribe to flow.* events instead.
Checkout transaction events send a state-transition payload, not the full transaction. Use the transactionId with getFlow to fetch the full flow state.
object
Occurs whenever a checkout transaction’s execution state changes. The execution state tracks how the transaction is moving through the payment lifecycle: for example initiated, source_attached, quoted, signing, broadcasted, failed, cancelled, or expired.
object
Occurs whenever a checkout transaction’s settlement state changes. The settlement state tracks the post-broadcast flow of funds: for example none, routing, bridging, swapping, settling, completed, or failed.
object
Occurs whenever a checkout transaction’s risk assessment state changes. Fired when risk screening transitions between states such as unknown, cleared, or blocked.

Example Checkout Event Payload

Next

Webhook setup

Configuring endpoints and verifying signatures.

Delivery best practices

Retries, idempotency, and signature verification.
Last modified on September 21, 2026