Skip to main content

Settlement Flow

This page describes how money moves end-to-end through Thiqwave. It maps the conceptual stages to the API calls and the events you will receive. No real funds move on TEST.

The canonical flow​

You (partner) Thiqwave Your payer / payee
───────────── ───────── ──────────────────

1. POST /v1/customers ──▶ Create + KYB the sender
2. POST /v1/beneficiaries ──▶ Attach a payout destination
3. POST /v1/transactions/quote ──▶ Lock corridor + FX rate + fees (TTL ~2 min)
4. POST .../quote/:id/accept ──▶ Accept the quote (rate locked)
5. POST /v1/transactions ──▶ Start settlement
│
▼
┌────────────────────────────────────┐
│ Collection ← payer funds the pay-in ◀── payer (IBAN / instant rail)
│ Compliance ← KYB / sanctions / wallet screen
│ FX + Bridge ← convert via the corridor
│ Payout ← deliver to beneficiary ──▶ payee (bank account / wallet)
└────────────────────────────────────┘
│
▼ (events delivered to your webhook)
settlement.created → on_ramp.completed
→ off_ramp.completed → settlement.completed

Stage-by-stage​

#StageWhat happensAPI / Event
1Create customerThe sender is created and run through KYB.POST /v1/customers
2Create beneficiaryA payout destination (bank/wallet) is attached to the customer.POST /v1/beneficiaries
3Request quoteThiqwave returns a locked corridor + FX rate + fee breakdown with an expires_at.POST /v1/transactions/quote
4Accept quoteYou accept within the TTL. The rate and fee config are pinned to the transaction.POST /v1/transactions/quote/:id/accept
5Create transactionThe money movement begins. Idempotency-Key required.POST /v1/transactions → settlement.created
6CollectionThe pay-in is collected (virtual IBAN or instant rail depending on collection_method).on_ramp.completed
7ComplianceKYB, sanctions/PEP, and (for stablecoin legs) wallet screening run. Failures route to REQUIRES_MANUAL_REVIEW or FAILED.(state transitions)
8FX + bridgeThe collected amount is converted across the corridor and bridged to the destination rail.(state transitions)
9PayoutFunds are delivered to the beneficiary's bank account or wallet.off_ramp.completed
10SettledThe transaction reaches the single final state.settlement.completed

The four flow types​

The same lifecycle supports four source/destination combinations:

FlowSourceDestinationExample
Fiat → FiatFiat (AED, …)Fiat (supported corridors)Classic cross-border remittance
Fiat → StablecoinFiat (AED)Stablecoin (USDT/USDC)Treasury into a wallet
Stablecoin → FiatStablecoin (USDC)Fiat (supported corridors)Off-ramp to a bank account
Stablecoin → StablecoinStablecoin (USDT)Stablecoin (USDC)Wallet-to-wallet settlement

Two things to internalise​

  • Quote → Transaction is the only canonical path for production. A quote pins the corridor, FX rate, fee config, and payout route at acceptance time. There is no mid-transaction switching; failures route to FAILED or REQUIRES_MANUAL_REVIEW.
  • Provider status is not settlement status. A raw provider "success" or a chain transaction hash does not mean the payment is final. Only SETTLEMENT_COMPLETED (delivered as settlement.completed) is the final signal. See Transaction lifecycle.

Idempotency and retries​

Money-moving calls (POST /v1/transactions, POST /v1/payments) require an Idempotency-Key. Store the key before the first attempt; on a timeout or network error, retry the exact same call with the same key. See Idempotency & Rate Limits.

Next​