Skip to main content

Quotes — Reference

Auth: X-API-Key.

Flow B (canonical — TEST + LIVE)

POST /v1/transactions/quote

curl -X POST "$BASE_URL/v1/transactions/quote" \
-H "X-API-Key: $THIQWAVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"corridor_id": "AE-IN",
"source_asset": "AED",
"source_amount_minor": "150000",
"destination_asset": "INR",
"destination_kind": "BANK",
"participant_id": "'"$PARTICIPANT_ID"'"
}'
FieldTypeRequiredNotes
corridor_idstringyesmax 64
source_assetstringyesasset code, max 16
source_amount_minorstringyesinteger minor units
destination_assetstringyesasset code, max 16
destination_kindenumyesWALLET | BANK | STABLECOIN
participant_iduuidnosending participant

Response 201 returns the quote with id, status: CREATED, expires_at. Errors: 400 VAL_0001.

POST /v1/transactions/quote/:id/accept

curl -X POST "$BASE_URL/v1/transactions/quote/$QUOTE_ID/accept" \
-H "X-API-Key: $THIQWAVE_API_KEY"

Errors: 400 QTE_0001 (expired), 409 QTE_0002 (already accepted), 404.

Flow A (sandbox-only — LIVE disabled)

LIVE keys reject Flow A

ADR-001 D-004. LIVE keys calling GET /v1/quotes or POST /v1/quotes/:id/accept receive 403. Use Flow B for production.

GET /v1/quotes — create (GET with body)

curl -G "$BASE_URL/v1/quotes" \
-H "X-API-Key: $THIQWAVE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from_counterparty_id": "'"$PARTICIPANT_ID"'",
"to": { "type": "WALLET", "currency": "USDT", "address": "0x4444…4444" },
"source_amount": "10000.00",
"source_currency": "AED"
}'

(Flow A uses decimal display strings source_amount/source_currency — distinct from Flow B's source_amount_minor. TEST only.)

POST /v1/quotes/:id/accept — accept (TEST only)

Errors: 403 with LIVE key, 409 QTE_0002, 400 QTE_0001.