Create a settlement request
Authorizations
Headers
Optional Stripe-style idempotency key. Same key + body within 24h replays the cached response. Same key + different body returns 400 idempotency_mismatch. Concurrent same-key requests return 409 idempotency_conflict. Scope is per API key.
Body
The type of settlement request
STABLECOIN_TO_STABLECOIN, FIAT_TO_STABLECOIN, STABLECOIN_TO_FIAT, FIAT_TO_FIAT "FIAT_TO_STABLECOIN"
Regulatory categorisation of the payment. Not visible to the recipient. The full enum mirrors the upstream regulatory taxonomy and is intentionally broad — most fintech integrations only need a small subset. Common values for fintech use cases: REMITTANCES (cross-border consumer transfers), PAYMENT_FOR_GOODS_AND_SERVICES (merchant payments), EMPLOYEE_SALARIES_OR_WAGES (payroll)Use OTHER only as a last resort — pick the closest specific value where possible.
CAPITAL_CONTRIBUTIONS, CHARITABLE_CONTRIBUTIONS, CONSULTING_FEES, CORPORATE_TAX_PAYMENTS, DOWN_PAYMENTS_FOR_REAL_ESTATE, EDUCATION_FEES, EMPLOYEE_SALARIES_OR_WAGES, EXPENSES_REIMBURSEMENT, GIFTS, GOVERNMENT_GRANTS, INCOME_TAX_PAYMENTS, INHERITANCE_PAYMENTS, INSURANCE_CLAIM_PAYOUTS, INSURANCE_PREMIUM_PAYMENTS, INVESTMENTS, LOAN_ADVANCES, MORTGAGE_PAYMENTS, OTHER, PAYMENT_FOR_GOODS_AND_SERVICES, PERSONAL_TRANSFERS, REAL_ESTATE_PURCHASES, REMITTANCES, RENT, REPAYMENT_OF_LOANS, ROYALTIES, TRUST_FUND_DISTRIBUTIONS, UTILITY_BILLS, WELFARE_OR_BENEFITS, WINNINGS_AND_PRIZES "REMITTANCES"
The destination where the settlement funds will be sent. The required fields depend on the bank-identifier shape Walapay needs for the destination currency (the tabs below):
- Crypto —
wallet_address. - US bank (ABA) — USD via
ACH/RTP/DOMESTIC_WIRE:bank_name,account_number,routing_number,account_type. - IBAN — EUR & GBP via
LOCAL:iban(+ optionalbic, andsort_codefor GBP). - CLABE — MXN via
LOCAL:clabe. - Account + bank code — NGN via
LOCAL:account_number,bank_code.
- Crypto
- US bank (ABA)
- IBAN (EUR/GBP + EU/ME locals)
- CLABE (Mexico)
- Account + bank code (Nigeria)
- Local account (LATAM)
- Specialized (IFSC / BSB / CNAPS / branch)
The amount to be settled. Required for STABLECOIN_TO_STABLECOIN and FIAT_TO_STABLECOIN. For STABLECOIN_TO_FIAT, set the amount on destination.amount instead — the source crypto amount is computed based on the result from quote endpoint.
x >= 0.0199
The source of funds. Required for STABLECOIN_TO_FIAT (crypto rail + wallet address) and FIAT_TO_STABLECOIN (fiat rail + country code). Discriminated by rail: crypto rails use wallet_address; fiat rails use country_code (ISO 3166-1 alpha-2).
- Crypto
- Fiat
An identifier of your choice for this settlement (e.g. your internal order id). Echoed back on every read and webhook. Filterable via GET /v0/settlement-requests?external_id=....
255"order_abc123"
Free-form key/value pairs for correlating this settlement with your own systems. Up to 50 keys. Keys may be up to 40 characters; values up to 500 characters. All values must be strings. Echoed back on every read and webhook; not filterable.
{
"restaurant_id": "rest_42",
"source": "web"
}Override the expected reconciliation time (ISO 8601). The default is T+3 for all rails. Supply this field if you know your processor's value.
Must be in the future and at most 30 days out from creation. If omitted, the default is applied at FUNDS_SENT transition time.
"2026-05-04T17:00:00Z"
Response
Settlement request created with status OPEN
The unique identifier of the settlement request
"d4e5f6a7-b8c9-4d0e-a1f2-3b4c5d6e7f8a"
The type of settlement request
STABLECOIN_TO_STABLECOIN, FIAT_TO_STABLECOIN, STABLECOIN_TO_FIAT, FIAT_TO_FIAT "FIAT_TO_STABLECOIN"
Reason for the payment; internal for the sender
CAPITAL_CONTRIBUTIONS, CHARITABLE_CONTRIBUTIONS, CONSULTING_FEES, CORPORATE_TAX_PAYMENTS, DOWN_PAYMENTS_FOR_REAL_ESTATE, EDUCATION_FEES, EMPLOYEE_SALARIES_OR_WAGES, EXPENSES_REIMBURSEMENT, GIFTS, GOVERNMENT_GRANTS, INCOME_TAX_PAYMENTS, INHERITANCE_PAYMENTS, INSURANCE_CLAIM_PAYOUTS, INSURANCE_PREMIUM_PAYMENTS, INVESTMENTS, LOAN_ADVANCES, MORTGAGE_PAYMENTS, OTHER, PAYMENT_FOR_GOODS_AND_SERVICES, PERSONAL_TRANSFERS, REAL_ESTATE_PURCHASES, REMITTANCES, RENT, REPAYMENT_OF_LOANS, ROYALTIES, TRUST_FUND_DISTRIBUTIONS, UTILITY_BILLS, WELFARE_OR_BENEFITS, WINNINGS_AND_PRIZES "REMITTANCES"
The current lifecycle status of the settlement request
REQUEST_STARTED, REQUEST_EXPIRED, REQUEST_CANCELED, REQUEST_COMPLETED, REQUEST_REFUNDED, FUNDS_SENT, FUNDS_RECEIVING_LATE, SETTLEMENT_SENT, SETTLEMENT_COMPLETED, PAYIN_CANCELED, PAYIN_UNDER_REVIEW, PAYIN_FAILED, PAYIN_AMOUNT_MISMATCH, PAYOUT_CANCELED, PAYOUT_UNDER_REVIEW, PAYOUT_FAILED "REQUEST_STARTED"
The amount of the settlement request
"99.00"
The destination details for the settlement
Instructions describing the inbound payment
The timestamp when the settlement request was created
"2026-01-20T15:17:12.805Z"
The timestamp of the most recent update
"2026-01-20T15:20:00.000Z"
An identifier you supplied for this settlement (e.g. your internal order id). Filterable via GET /v0/settlement-requests?external_id=....
"order_abc123"
Free-form key/value pairs you supplied for correlation. Up to 50 string keys (≤40 chars) with string values (≤500 chars). Echoed on every read and webhook; not filterable.
{
"restaurant_id": "rest_42",
"source": "web"
}Deprecated — removal: 2026-05-25. Use external_id. Same value, kept for compatibility until the removal date.
"your_trx_123"
The source details (for off-ramp)
The outbound payment from the pre-funded wallet to the destination
The inbound payment received from an external source
The timestamp when processing began
"2026-01-20T15:20:00.000Z"
The timestamp when completed
"2026-01-20T15:25:00.000Z"
The timestamp when funds are expected to reconcile
"2026-01-23T15:20:00.000Z"
Structured failure code for programmatic handling
AMOUNT_MISMATCH_UNDERPAYMENT, AMOUNT_MISMATCH_OVERPAYMENT "AMOUNT_MISMATCH_UNDERPAYMENT"
Human-readable failure reason
"Amount mismatch: expected 100.00, received 90.00"