Transaction States

Every state an FX trade and a payment can reach, what moves them, and which webhook event announces each one.

Verto reports progress through a state field on the resource and through webhook events. This page is the canonical list for both. Where a guide shows its own state table, that table is a subset of what is here.

Three naming conventions are in use, and they refer to the same lifecycles:

SurfaceConventionExample
FX trade statecamelCaseinwardSettlementDone
Payment stateSCREAMING_SNAKECOMPLETED
Webhook statelowercasecompleted

Compare them case-insensitively rather than by exact string.


FX trade lifecycle

Returned as state on Create FX trade and Get FX trade details.

stateDiagram-v2
    [*] --> initiated
    initiated --> confirmed: rate booked
    confirmed --> inwardSettlementDone: funds received, FX leg settled
    inwardSettlementDone --> outwardSettlementDone: funds delivered
    confirmed --> archived: rate window expired unfunded
    outwardSettlementDone --> [*]
    archived --> [*]
stateMeaning
initiatedTrade created, not yet booked against a rate.
confirmedTrade booked. For Fund Later and Held Rate, Verto is awaiting your funds.
inwardSettlementDoneFunds received and the FX leg has settled.
outwardSettlementDoneConverted funds delivered to the target wallet or beneficiary. Terminal.
archivedTrade cancelled, or the rate window expired before funding. Terminal.
⚠️

Two mismatches between the guides and the Exchange specification are unresolved, and are with the API team:

  • refunded appears in the state table on the Instant Settlement, Held Rate and Firm Order guides, but is not a member of the EOrderState enum.
  • initiated is in the enum but appears on none of those guides.

The legacy transactionState field

Older responses also carry transactionState, in snake_case. It is coarser than state:

transactionStateClosest state
inward_remittance_pendingconfirmed
inward_remittance_confirmedinwardSettlementDone
outward_remittance_completeoutwardSettlementDone

Prefer state for new integrations.


Payment lifecycle

Returned as state on Create a payment request and Get payment by ID.

stateMeaning
REQUESTEDPayment accepted and queued for processing.
SCHEDULEDPayment accepted for a future date, via scheduledDate.
COMPLETEDFunds delivered to the destination. Terminal.
REFUNDEDPayment returned and funds credited back. Terminal.
CANCELLEDPayment stopped before execution. Terminal.
ARCHIVEDPayment closed without completing. Terminal.
DISPUTEDPayment is under dispute or investigation.
📘

The permitted transitions between these states are not yet published — only the states themselves are defined in the Payment specification. Drive your integration off webhook events and a follow-up read rather than assuming an order.


Webhook events

EventeventTypeAnnounces
IBAN to walletiban_to_walletrequested, completed, disputed, archived
Wallet to accountwallet_to_accountrequested, completed, refunded, archived
Wallet to walletwallet_to_walletcompleted
Wallet creditwallet.credit.successFunds credited to a wallet
Statement readystatement.readyA requested wallet statement is available
Refund completedrefund.completedA refund has settled

Two envelope shapes are in circulation — iban_to_wallet events are flat with createdDate, while wallet.credit.success is nested with createdAt and an event object. Verify against the event you are handling. Which shape is canonical is with the API team.


Related


Did this page help you?