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 (Flow B)

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

1. POST /v1/participants ──▶ 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 (Open Banking / 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 participantThe sender is created and run through KYB.POST /v1/participants
2Create beneficiaryA payout destination (bank/wallet) is attached to the participant.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/transactionssettlement.created
6CollectionThe pay-in is collected (Open Banking link, 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, SAR, …)Fiat (INR, PKR, …)Classic cross-border remittance
Fiat → StablecoinFiat (AED)Stablecoin (USDT/USDC)Treasury into a wallet
Stablecoin → FiatStablecoin (USDC)Fiat (INR)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