Create a corridor
Send a A successful request returns Save the
POST /corridors request with the destination currency you want to pay out in. You only need to do this once per currency—reuse the same corridor ID for every subsequent quote and pay.201 Created with the new corridor object:The corridor starts in
PENDING_KYC status. It transitions to ACTIVE only after your organization completes KYC verification in the Meterlane dashboard under Settings → Corridors. You cannot request quotes or initiate payouts until the corridor is ACTIVE.id from this response—you will use it in every subsequent call for this currency.Get a quote
Request a live FX quote by calling The response contains everything you need to confirm the payout:
GET /corridors/:id/quote with the amount of USDC you want to send. The amount query parameter is denominated in USDC.| Field | Description |
|---|---|
quoteId | Opaque ID that locks the quoted rate. Pass this to /pay. |
fxRate | Units of destination currency per 1 USDC at the time of the quote. |
destAmount | Amount the beneficiary will receive in destCurrency, after all fees. |
expiresAt | ISO 8601 timestamp. The quote expires at this time—request a new one if you miss the window. |
Initiate the payout
Submit the payout by calling A successful request returns The payment starts as
POST /corridors/:id/pay. You must include an Idempotency-Key header on every pay request. If you retry a failed network call using the same key, the API returns the original cached response instead of creating a duplicate payment.202 Accepted:PENDING. Circle processes the fiat leg asynchronously. When Circle confirms or fails the transfer, it posts a webhook event to Meterlane, which updates the payment status to SETTLED, FAILED, or COMPLIANCE_HOLD. See Webhooks for how to receive those updates.Beneficiary validation rules
Thebeneficiary object is validated on every pay request. Fields that are always required: name, bankName, accountNumber, country, and currency. Three countries have additional account-number format rules enforced at the API level.
Country-specific account number rules
Country-specific account number rules
| Country | ISO-2 code | Rule | Format |
|---|---|---|---|
| Nigeria | NG | NUBAN format | Exactly 10 digits |
| Kenya | KE | — | 8–14 digits |
| South Africa | ZA | — | 7–11 digits |
| Brazil | BR | — | No extra constraint |
| Mexico | MX | — | No extra constraint |
accountNumber string before length validation, so hyphens and spaces in the input do not cause false failures. However, it is good practice to send a clean numeric string.Error reference
| Code | HTTP status | Cause |
|---|---|---|
CORRIDOR_NOT_ACTIVE | 409 | The corridor exists but its status is not ACTIVE. Complete KYC in the dashboard first. |
INVALID_CURRENCY | 400 | The destCurrency value is not one of the supported currencies (BRL, MXN, NGN, KES, ZAR). |
INVALID_AMOUNT | 400 | amountUSDC (pay) or amount (quote) is zero, negative, or not a valid number. |
INVALID_BENEFICIARY | 400 | A required beneficiary field is missing or the account number does not meet country-specific length rules. |
MISSING_IDEMPOTENCY_KEY | 400 | The Idempotency-Key header was not included on POST /corridors/:id/pay. |
DUPLICATE_REQUEST | 409 | A pay request with this Idempotency-Key was already processed. The response contains the original result. |