Skip to main content

What Is a Remittance Payout

A remittance payout is a crypto-to-fiat payout made on behalf of a remittance user: someone sending money to a beneficiary in India, rather than a customer cashing out their own funds. The flow reuses the standard Payout building blocks (customer, bank account, quotation, status tracking) and adds two things: a PAN-only KYC for the beneficiary, and a remitter record that identifies the sending party.
The beneficiary of a remittance payout is a DollarPe Customer, but they skip the full document KYC flow. Instead, submit the customer’s tax number (PAN) once via Remittance Beneficiary KYC after creating the customer.

Integration at a Glance

  1. Create the beneficiary customer. Register the receiving party via /customer/create with alpha_3_country_code: "IND".
  2. Complete beneficiary KYC. Submit the customer’s PAN via /kyc/remittance-beneficiary-kyc.
  3. Add the bank account. Add the beneficiary’s bank account via /bank/create.
  4. Create the remitter. Register the sending party via /kyc/remitter/create.
  5. Create a quotation. Generate a quote via /remittance-payout/quotation, keyed off the amount the beneficiary should receive.
  6. Fund the payout. On the prefunding flow, check that your prefunded balance covers the quotation’s sending_amount via /payout/balance. On the non-prefunding flow, send the sending_amount in crypto to the wallet address from the quotation response and save the transaction hash.
  7. Initiate the remittance payout. Create the order via /remittance-payout/initiate, linking the quotation and remitter. Pass the transaction_hash only on the non-prefunding flow.
  8. Monitor transaction status. Track progress via webhooks or polling.

Funding Models

How you fund payouts changes what you do before and during initiation. On the prefunding flow (recommended), you top up a DollarPe wallet address with USDT or USDC in advance, and every payout debits that balance. You don’t transfer crypto per payout, and you don’t pass any funding reference when initiating. Before each payout, check the balance via /payout/balance. On the non-prefunding flow, you fund each payout individually: send the quotation’s sending_amount to the wallet address returned in the quotation response, then pass that transfer’s on-chain transaction_hash when initiating.
Prefunding removes the per-payout deposit step entirely: top up the balance once, then fire payouts against it. Contact your DollarPe account manager to set up a prefunding wallet address.

Visual Integration Flow

Step-by-Step Integration Guide

Step 1: Create the Beneficiary Customer

Register the receiving party as a DollarPe Customer. For remittance payouts to India, alpha_3_country_code must be IND.
Save the returned customer_id; every later step references it. You can retrieve the customer again via Fetch Customer or List Customers.

Step 2: Complete Remittance Beneficiary KYC

Submit the beneficiary’s tax number (PAN) once, after creating the customer. This PAN-only KYC replaces the full document KYC flow for remittance beneficiaries.
See the Remittance Beneficiary KYC reference for full field and error details.

Step 3: Add the Beneficiary’s Bank Account

Add the bank account the payout will land in. Save the returned bank_id for the quotation.
See the Add Bank Account reference for full field and error details.

Step 4: Create the Remitter

Register the sending party once, before requesting a remittance quotation. This call is idempotent: resubmitting the same id_type + id_number for your organization returns the existing remitter instead of creating a duplicate.
Key Fields:
  • id_type: one of PASSPORT, DRIVING_LICENCE, BENEFICIARY_ID, PAN_CARD, AADHAAR_CARD, AIRLINE_STAFF_CARD, BUSINESS_REGISTRATION_NO_BR, CENTRAL_BANK_LICENCE, ACRA
  • source_of_funds: fixed enum (salary, savings, gifts, business_income, and others)
  • id: pass this value as remitter_id in the quotation (Step 5) and payout (Step 7)
See the Create Remitter reference for full field and error details.

Step 5: Create a Remittance Quotation

You can check the live rate first via GET /payout/fetch-rate, though this is optional. A standard payout quotation is keyed on sending_amount, the crypto amount the customer sends. A remittance quotation is keyed on receiving_amount instead: the fiat amount the beneficiary should receive. It links the customer_id (Step 1), bank_id (Step 3), and remitter_id (Step 4):
The response’s sending_amount is the crypto amount needed to fund the payout; the next step depends on it. See the Remittance Quotation reference for full field and error details.

Step 6: Fund the Payout

What you do here depends on your funding model. Prefunding flow. Check that the prefunded wallet covers the quotation’s sending_amount before you initiate. The balance is returned per asset and cached briefly, so a top-up you just made can take a short while to show up.
If the available balance for the quotation’s asset is lower than sending_amount, top up the wallet before initiating; otherwise the payout will fail. See the Fetch Balance reference for full details. You don’t send any crypto per payout and won’t need a transaction hash in the next step. Non-prefunding flow. Send the quotation’s sending_amount in crypto to the wallet address returned in the quotation response. Save the on-chain transaction_hash of that transfer; you pass it when initiating the payout in the next step.

Step 7: Initiate the Remittance Payout

Include transaction_hash only on the non-prefunding flow: it is the hash of the crypto transfer you made in Step 6. On the prefunding flow, send no funding reference; the payout debits your prefunded USDT/USDC balance. client_reference_id is optional in both cases.
See the Create Remittance Payout reference for the full response shape and error codes.

Step 8: Monitor Transaction Status

Track the payout by polling GET /payout/{payout_id} (single order) or GET /payout/history (all orders), or subscribe to webhooks for status change notifications.

Getting Help

If you have questions about the remittance payout flow: