Skip to main content
A remittance pays a beneficiary on behalf of a remitter: someone abroad sending money home. You fund it in USDT or USDC, and Zapyd delivers local currency to the beneficiary’s bank account. Which API you use depends on the destination country. Both flows support the prefunded model (top up once, each payout debits the balance) and the per-order model (send each quotation’s sending_amount to its wallet_address, then initiate with the transaction_hash).

India: remittance payouts (RDA)

What you create

You create the remitter and the beneficiary once, then reuse them for every transfer between them.

1. Create the beneficiary

POST /cms/api/v1/customer/create
Then run beneficiary KYC once. It replaces full document KYC. tax_number (the PAN) is optional.
POST /cms/api/v1/kyc/remittance-beneficiary-kyc

2. Add the beneficiary’s bank account

Remittance needs an account number and IFSC. A UPI account fails with payment_method_not_supported.
POST /cms/api/v1/bank/create

3. Create the remitter

Zapyd registers the remitter with the payout partner as the sender, so it needs full identity. The call is idempotent: sending the same id_type and id_number again returns the stored remitter.
Save id as remitter_id. It isn’t a customer ID, so customer endpoints reject it. List remitters with GET /kyc/remitter/list.

4. Get a quotation

Send exactly one amount: receiving_amount to fix the fiat the beneficiary receives (shown below), or sending_amount to fix the crypto you send. Call POST /pos/api/v1/remittance-payout/quotation:
  • is_self_transfer is true when the remitter is paying their own account.
  • network is required. On the prefunded model, it must match your prefunded wallet’s network, otherwise the call fails with Network does not match the prefunded wallet network.
  • With receiving_amount, the response’s sending_amount is the crypto needed. The response also has the wallet_address to fund on the per-order model.

5. Fund and initiate

Check that GET /pos/api/v1/payout/balance covers sending_amount, then initiate without a hash:
POST /pos/api/v1/remittance-payout/initiate

6. Track

The payout stays PROCESSING while Zapyd registers the beneficiary, the remitter and the bank account with the payout partner. It then moves to SUCCESS, FAILED, REFUNDED or IN_REVIEW, like any payout.
  • If the partner rejects the beneficiary’s KYC or bank account, the payout fails with Payout failed.
  • IN_REVIEW with an rfi_link means the customer must answer a request for information.
  • Poll with GET /payout/{payout_id} or GET /payout/history.

Remittance to other countries

Outside India, a remittance is a standard payout. Onboard the beneficiary with payout-only onboarding, then run the payout flow, or the prefunded flow.
1

Onboard the beneficiary

Create the customer with POST /customer/payout/create and their country’s alpha_3_country_code. Then call POST /kyc/payout/add-kyc-data and POST /kyc/payout/add-sender-kyc-data with the address fields and identifiers that country needs.
2

Add the bank account as a remittance

Call POST /bank/payout/create. Set transfer_purpose to the reason for the transfer, and is_self_transfer to false because the sender and the beneficiary are different people. This example is a beneficiary in the Philippines:
Common purposes for remittances are FAMILY_MAINTENANCE, EDUCATION and MEDICAL_TREATMENT. Without these fields, the account defaults to TRANSFER_TO_OWN_ACCOUNT and is_self_transfer: true.
3

Quote and pay out

Create a payout quotation with customer_id and bank_id, fund it, and initiate. Tracking and webhooks are the same as any payout.
Each country has its own methods and required fields. See the country table before you build the onboarding screens.