> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dollarpe.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Remittance

> Send money home: the RDA flow for India, or a standard payout for every other market.

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.

| Destination | Flow | What it adds |
| - | - | - |
| India | [Remittance payout API](#india-remittance-payouts-rda), settled through a Rupee Drawing Arrangement (RDA) | The compliant route for inbound remittances to India. Zapyd records the remitter as the sender, and the beneficiary needs only a light KYC |
| Any other payout market | [Standard payout](#remittance-to-other-countries) to a beneficiary onboarded with payout-only onboarding | Nothing extra. You mark the transfer as a remittance with `transfer_purpose` and `is_self_transfer` |

Both flows support the [prefunded model](/guides/payments/prefunded-payouts) (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

| Object | Who it is | Created with |
| - | - | - |
| Customer | The beneficiary in India | `POST /customer/create`, then `POST /kyc/remittance-beneficiary-kyc` |
| Bank account | The beneficiary's Indian account (account number and IFSC) | `POST /bank/create` |
| Remitter | The sender, living outside India | `POST /kyc/remitter/create` |

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

### 1. Create the beneficiary

```json POST /cms/api/v1/customer/create theme={null}
{
  "client_reference_id": "beneficiary-001",
  "full_name": "Ravi Kumar",
  "phone": "9911002211",
  "alpha_3_country_code": "IND"
}
```

Then run beneficiary KYC once. It replaces full document KYC. `tax_number` (the PAN) is optional.

```json POST /cms/api/v1/kyc/remittance-beneficiary-kyc theme={null}
{
  "customer_id": "638d9a52-9427-460e-99ba-948d46ce349c",
  "tax_number": "HCDPS3890E"
}
```

### 2. Add the beneficiary's bank account

Remittance needs an account number and IFSC. A UPI account fails with `payment_method_not_supported`.

```json POST /cms/api/v1/bank/create theme={null}
{
  "customer_id": "638d9a52-9427-460e-99ba-948d46ce349c",
  "bank_account_type": "ACCOUNT_DETAILS",
  "identifiers": { "account_number": "7627389201", "ifsc": "SBIN0001829" }
}
```

### 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.

<CodeGroup>
  ```json Request theme={null}
  {
    "client_reference_id": "remitter-001",
    "first_name": "Siva",
    "last_name": "Raj",
    "dob": "1990-01-15",
    "nationality": "IND",
    "residence_country": "ARE",
    "city": "Dubai",
    "address_line": "Building 4, Al Barsha 1",
    "phone": "+971501234567",
    "source_of_funds": "salary",
    "id_type": "PASSPORT",
    "id_number": "P1234567"
  }
  ```

  ```json Response theme={null}
  {
    "status": true,
    "message": "Remitter created",
    "data": {
      "id": "e14fa86f-2a5e-437a-a031-949c68ade933",
      "full_name": "Siva Raj",
      "residence_country": "ARE",
      "document_type": "PASSPORT",
      "status": "VERIFIED"
    }
  }
  ```
</CodeGroup>

| Field | Rule |
| - | - |
| `dob` | `YYYY-MM-DD`, in the past |
| `residence_country` | Alpha-3, and not `IND`. The remitter must live outside India |
| `phone` | E.164 with `+` |
| `first_name`, `last_name` | Letters, spaces, `'` and `-` |
| `id_type` | `PASSPORT` or `DRIVING_LICENCE`. Other accepted values are stored as a generic government ID |
| `id_number` | 6 to 20 characters: letters, digits and `-` |
| `source_of_funds` | `salary`, `savings`, `gifts`, `gift_from_family_and_friends`, `business_income`, `investment_proceeds`, `funds_from_dividend_payouts`, `pension_retirement`, `inheritance`, `sale_of_assets_real_estate`, `loan_from_bank`, `final_settlement`, `funds_from_schemes_and_raffles`, `gambling_proceeds` or `other_sources` |

Save `id` as `remitter_id`. It isn't a customer ID, so customer endpoints reject it. List remitters with [`GET /kyc/remitter/list`](/api-reference-exchange/endpoint/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`](/api-reference-exchange/endpoint/remittance-payout/quotation):

```json theme={null}
{
  "customer_id": "638d9a52-9427-460e-99ba-948d46ce349c",
  "bank_id": "cab47575-bbcb-4294-81a3-30774104f3b6",
  "remitter_id": "e14fa86f-2a5e-437a-a031-949c68ade933",
  "asset": "USDT",
  "fiat": "INR",
  "network": "tron",
  "payment_method": "IMPS",
  "receiving_amount": "5100",
  "is_self_transfer": false,
  "risk_parameters": {}
}
```

* `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

<Tabs>
  <Tab title="Prefunded">
    Check that [`GET /pos/api/v1/payout/balance`](/api-reference-exchange/endpoint/remittance-payout/balance) covers `sending_amount`, then initiate without a hash:

    ```json POST /pos/api/v1/remittance-payout/initiate theme={null}
    {
      "quotation_id": "59bf60c3-e9af-40a7-9d5c-2a1aa191e769",
      "customer_id": "638d9a52-9427-460e-99ba-948d46ce349c",
      "remitter_id": "e14fa86f-2a5e-437a-a031-949c68ade933",
      "client_reference_id": "remit-001"
    }
    ```
  </Tab>

  <Tab title="Per order">
    Send `sending_amount` to the quotation's `wallet_address`, then initiate with the hash:

    ```json POST /pos/api/v1/remittance-payout/initiate theme={null}
    {
      "quotation_id": "59bf60c3-e9af-40a7-9d5c-2a1aa191e769",
      "customer_id": "638d9a52-9427-460e-99ba-948d46ce349c",
      "remitter_id": "e14fa86f-2a5e-437a-a031-949c68ade933",
      "client_reference_id": "remit-001",
      "transaction_hash": "0x9b7bb827c2e5e3c1a0f2d3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4"
    }
    ```
  </Tab>
</Tabs>

### 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](/guides/payments/payouts#6-track-the-result).

* 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}`](/api-reference-exchange/endpoint/payout/order/\{payout_id}) or [`GET /payout/history`](/api-reference-exchange/endpoint/payout/order/history).

## Remittance to other countries

Outside India, a remittance is a standard payout. Onboard the beneficiary with [payout-only onboarding](/guides/customers/payout-only-onboarding), then run the [payout flow](/guides/payments/payouts), or the [prefunded flow](/guides/payments/prefunded-payouts).

<Steps>
  <Step title="Onboard the beneficiary">
    Create the customer with [`POST /customer/payout/create`](/api-reference-exchange/endpoint/customer/payout-create) and their country's `alpha_3_country_code`. Then call [`POST /kyc/payout/add-kyc-data`](/api-reference-exchange/endpoint/kyc/payout-add-kyc-data) and [`POST /kyc/payout/add-sender-kyc-data`](/api-reference-exchange/endpoint/kyc/payout-add-sender-kyc-data) with the address fields and identifiers that country needs.
  </Step>

  <Step title="Add the bank account as a remittance">
    Call [`POST /bank/payout/create`](/api-reference-exchange/endpoint/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:

    ```json theme={null}
    {
      "customer_id": "84737c7d-7b62-4204-80d6-80f6ecb3ceb4",
      "bank_account_type": "PESONET",
      "identifiers": {
        "account_holder_name": "Maria Santos",
        "bank_name": "BDO Unibank",
        "account_number": "001234567890"
      },
      "transfer_purpose": "FAMILY_MAINTENANCE",
      "is_self_transfer": false
    }
    ```

    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`.
  </Step>

  <Step title="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](/guides/payments/payouts#6-track-the-result).
  </Step>
</Steps>

<Note>
  Each country has its own methods and required fields. See the [country table](/guides/customers/payout-only-onboarding) before you build the onboarding screens.
</Note>
