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

# Send Money

> Send cross-border payments via local bank transfer, SPEI, SEPA, ACH, and more

Send payments follow a structured flow: discover the payment method for the destination country, collect recipient bank details, lock an exchange rate quote, then execute the transfer.

<Accordion title="Type Definitions">
  ```typescript theme={null}
  interface PayoutMethod {
    id: number;
    method_name: string;
    country: string;
    currency: string;
    base_currency: string;
  }

  interface BeneficiaryPaymentMethod {
    id: string;
    beneficiary_id: string;
    payment_method_id: number;
    account_details: Record<string, string>;
    created_at: string;
  }

  interface SendMoneyQuote {
    quote_id: string;       // valid for 5 minutes
    from_currency: string;
    to_currency: string;
    rate: string;
    amount: string;
    payout_data: {
      total_transaction_fee_in_from_currency: string;
      customer_sent_amount: string;
      customer_receive_amount: string;
      customer_total_amount_due: string;
    };
  }
  ```
</Accordion>

***

## Step 1: Get Supported Payout Countries

Retrieve the full list of countries where Yativo supports outbound payments:

```
GET /payment-methods/payout/countries
```

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET 'https://api.yativo.com/api/v1/payment-methods/payout/countries' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "status": "success",
    "data": [
      { "country": "Chile", "iso3": "CHL" },
      { "country": "Mexico", "iso3": "MEX" },
      { "country": "Brazil", "iso3": "BRA" },
      { "country": "Peru", "iso3": "PER" },
      { "country": "Colombia", "iso3": "COL" },
      { "country": "Argentina", "iso3": "ARG" }
    ]
  }
  ```
</ResponseExample>

***

## Step 2: Get Payout Methods for Destination

Retrieve available payment rails for the destination country. Use the ISO 3166-1 alpha-3 country code:

```
GET /payment-methods/payout?country={iso3}
```

<ParamField query="country" type="string" required>
  Destination country ISO 3166-1 alpha-3 code (e.g. `CHL`, `MEX`, `BRA`).
</ParamField>

<RequestExample>
  ```bash Chile theme={null}
  curl -X GET 'https://api.yativo.com/api/v1/payment-methods/payout?country=CHL' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
  ```

  ```bash Mexico theme={null}
  curl -X GET 'https://api.yativo.com/api/v1/payment-methods/payout?country=MEX' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
  ```

  ```bash Brazil theme={null}
  curl -X GET 'https://api.yativo.com/api/v1/payment-methods/payout?country=BRA' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
  ```
</RequestExample>

<ResponseExample>
  ```json Success (Chile) theme={null}
  {
    "status": "success",
    "data": [
      {
        "id": 21,
        "method_name": "Bank Transfer",
        "country": "CHL",
        "currency": "CLP",
        "base_currency": "CLP"
      }
    ]
  }
  ```
</ResponseExample>

Note the `id` — this is your `payment_method_id` for subsequent steps.

***

## Step 3: Get Required Form Fields

Each payment method requires different recipient details (CLABE, account number, routing number, etc.). Retrieve the exact fields needed:

```
GET /beneficiary/form/show/{payment_method_id}
```

<ParamField path="payment_method_id" type="number" required>
  The payment method ID from Step 2.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET 'https://api.yativo.com/api/v1/beneficiary/form/show/21' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
  ```
</RequestExample>

***

## Step 4: Create a Beneficiary

Create a beneficiary record for the recipient. The `beneficiary_id` returned here is used to attach bank details in Step 5.

```
POST /beneficiaries
```

<ParamField body="name" type="string" required>
  Recipient's full name (individual) or legal business name.
</ParamField>

<ParamField body="email" type="string" required>
  Recipient's email address.
</ParamField>

<ParamField body="country" type="string" required>
  ISO 3166-1 alpha-3 country code (e.g. `CHL`, `MEX`, `BRA`).
</ParamField>

<ParamField body="type" type="string" required>
  `"individual"` or `"business"`.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST 'https://api.yativo.com/api/v1/beneficiaries' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
    -H 'Content-Type: application/json' \
    -H 'Idempotency-Key: create-beneficiary-001' \
    -d '{
      "name": "Carlos Mendez",
      "email": "carlos@example.com",
      "country": "CHL",
      "type": "individual"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "status": "success",
    "status_code": 201,
    "message": "Beneficiary created successfully",
    "data": {
      "beneficiary_id": "ben-7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d",
      "name": "Carlos Mendez",
      "email": "carlos@example.com",
      "type": "individual",
      "country": "CHL",
      "created_at": "2026-04-02T10:00:00.000000Z"
    }
  }
  ```
</ResponseExample>

***

## Step 5: Save Recipient Bank Details

Submit the recipient's bank account details using the fields returned in Step 3:

```
POST /beneficiaries/payment-methods
```

<ParamField body="beneficiary_id" type="string" required>
  The beneficiary ID from Step 4.
</ParamField>

<ParamField body="payment_method_id" type="number" required>
  Payment method ID from Step 2.
</ParamField>

<ParamField body="account_details" type="object" required>
  Key-value pairs of the required fields (e.g. `account_number`, `bank_code`, `clabe`, `pix_key`).
</ParamField>

<RequestExample>
  ```bash Chile (CLP bank transfer) theme={null}
  curl -X POST 'https://api.yativo.com/api/v1/beneficiaries/payment-methods' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
    -H 'Content-Type: application/json' \
    -H 'Idempotency-Key: unique-key-here' \
    -d '{
      "beneficiary_id": "benef_01HX9KZMB3F7VNQP8R2WDGT4E5",
      "payment_method_id": 21,
      "account_details": {
        "account_number": "12345678",
        "bank_code": "001",
        "account_type": "checking"
      }
    }'
  ```

  ```bash Mexico (SPEI CLABE) theme={null}
  curl -X POST 'https://api.yativo.com/api/v1/beneficiaries/payment-methods' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
    -H 'Content-Type: application/json' \
    -H 'Idempotency-Key: unique-key-here' \
    -d '{
      "beneficiary_id": "benef_01HX9KZMB3F7VNQP8R2WDGT4E5",
      "payment_method_id": 30,
      "account_details": {
        "clabe": "012345678901234567"
      }
    }'
  ```

  ```bash Brazil (PIX) theme={null}
  curl -X POST 'https://api.yativo.com/api/v1/beneficiaries/payment-methods' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
    -H 'Content-Type: application/json' \
    -H 'Idempotency-Key: unique-key-here' \
    -d '{
      "beneficiary_id": "benef_01HX9KZMB3F7VNQP8R2WDGT4E5",
      "payment_method_id": 40,
      "account_details": {
        "pix_key": "carlos@example.com",
        "pix_key_type": "email"
      }
    }'
  ```
</RequestExample>

The response includes a saved payment method `id` for use in Step 7.

***

## Step 6: Get an Exchange Rate Quote (Recommended)

Lock in a rate before executing the payment. Quotes are valid for **5 minutes**:

```
POST /sendmoney/quote
```

<ParamField body="from_currency" type="string" required>
  Source currency code (e.g. `USD`, `EUR`).
</ParamField>

<ParamField body="to_currency" type="string" required>
  Destination currency code (e.g. `CLP`, `MXN`, `BRL`).
</ParamField>

<ParamField body="amount" type="number" required>
  Amount in the source currency.
</ParamField>

<ParamField body="beneficiary_payment_method_id" type="string" required>
  The payment method ID saved in Step 5. This links the quote to the destination account so that executing `POST /sendmoney` knows where to deliver funds.
</ParamField>

<RequestExample>
  ```bash USD → CLP theme={null}
  curl -X POST 'https://api.yativo.com/api/v1/sendmoney/quote' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
    -H 'Content-Type: application/json' \
    -H 'Idempotency-Key: quote-001' \
    -d '{
      "from_currency": "USD",
      "to_currency": "CLP",
      "amount": 500,
      "beneficiary_payment_method_id": "pm-3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "status": "success",
    "data": {
      "quote_id": "4a72ecf8-6c8a-4e38-9971-8aabe9f785ed",
      "from_currency": "USD",
      "to_currency": "CLP",
      "rate": "950.00",
      "amount": "500.00",
      "payout_data": {
        "total_transaction_fee_in_from_currency": "11.15",
        "customer_sent_amount": "500.00",
        "customer_receive_amount": "462925.00",
        "customer_total_amount_due": "511.15"
      }
    }
  }
  ```
</ResponseExample>

<Warning>
  Quotes are valid for **5 minutes**. Execute the send money request within this window using the `quote_id`.
</Warning>

***

## Step 7: Send Money

Execute the payment using the quote ID:

```
POST /sendmoney
```

<ParamField body="quote_id" type="string" required>
  The quote ID from Step 6. Guarantees the locked rate.
</ParamField>

<RequestExample>
  ```bash cURL (with quote) theme={null}
  curl -X POST 'https://api.yativo.com/api/v1/sendmoney' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
    -H 'Content-Type: application/json' \
    -H 'Idempotency-Key: unique-payout-key' \
    -d '{
      "quote_id": "4a72ecf8-6c8a-4e38-9971-8aabe9f785ed"
    }'
  ```
</RequestExample>

Alternatively, initiate a quick payout directly from your wallet without a quote:

```
POST /wallet/payout
```

```bash cURL (wallet payout) theme={null}
curl -X POST 'https://api.yativo.com/api/v1/wallet/payout' \
  -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: unique-payout-key' \
  -d '{
    "debit_wallet": "USD",
    "payment_method_id": 21,
    "amount": 500
  }'
```

***

## Step 8: Track the Payment

Monitor the payment status in real-time:

```
GET /transaction/tracking/{transactionId}
```

<RequestExample>
  ```bash cURL theme={null}
  curl -X GET 'https://api.yativo.com/api/v1/transaction/tracking/a0e9e50e-81be-4bd0-9941-0151e68b9e97' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
  ```
</RequestExample>

<ResponseExample>
  ```json Success theme={null}
  {
    "status": "success",
    "data": [
      { "tracking_status": "Payment credited to beneficiary", "created_at": "2026-04-01T10:03:22Z" },
      { "tracking_status": "With Beneficiary's Bank/Rail", "created_at": "2026-04-01T10:02:54Z" },
      { "tracking_status": "Processed by Yativo", "created_at": "2026-04-01T10:01:45Z" },
      { "tracking_status": "Send money initiated", "created_at": "2026-04-01T10:00:00Z" }
    ]
  }
  ```
</ResponseExample>

***

## Manage Saved Payment Methods

### List All Saved Methods

```
GET /beneficiaries/payment-methods/all
```

### Update a Saved Method

```
PUT /beneficiaries/payment-methods/update/{id}
```

### Delete a Saved Method

```
DELETE /beneficiaries/payment-methods/delete/{id}
```

***

## Transaction Purpose

For compliance, submit the purpose of a transaction after initiating it:

```
POST /sendmoney/purpose
```

<ParamField body="transaction_id" type="string" required>
  The transaction ID returned from `POST /sendmoney`.
</ParamField>

<ParamField body="purpose" type="string" required>
  A short description of the payment purpose, e.g. `"family_support"`, `"business_payment"`, `"invoice"`.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST 'https://api.yativo.com/api/v1/sendmoney/purpose' \
    -H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
    -H 'Content-Type: application/json' \
    -H 'Idempotency-Key: purpose-001' \
    -d '{
      "transaction_id": "a0e9e50e-81be-4bd0-9941-0151e68b9e97",
      "purpose": "family_support"
    }'
  ```
</RequestExample>

<Note>
  Yativo supports payouts to LATAM (CHL, MEX, BRA, PER, COL, ARG), USA, and Europe. Contact your integration team for additional corridors.
</Note>
