Skip to main content
Before you can send money, you need an active corridor for your target currency. A corridor is a persistent configuration object that ties your organization to a destination currency and its KYC verification. Once the corridor is active, you can request a live quote and submit a payout against it as many times as you need.
1

Create a corridor

Send a 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.
A successful request returns 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.
Save the id from this response—you will use it in every subsequent call for this currency.
2

Get a quote

Request a live FX quote by calling GET /corridors/:id/quote with the amount of USDC you want to send. The amount query parameter is denominated in USDC.
The response contains everything you need to confirm the payout:
The dashboard quote UI shows a full all-in fee breakdown—platform fee plus Circle CPN rail fees—before you commit to a payout. Check it when you want a transparent view of costs without writing code.
3

Initiate the payout

Submit the payout by calling 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.
A successful request returns 202 Accepted:
The payment starts as 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.
The Idempotency-Key header is required. Omitting it returns a 400 MISSING_IDEMPOTENCY_KEY error immediately. Use a unique, stable key per logical payout—such as your internal order ID—so retries are safe.

Beneficiary validation rules

The beneficiary 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.
Digits are extracted from the 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