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

# Transfer money between your accounts

> Learn the call sequence for moving funds between your own eToro accounts: check what is allowed, execute the transfer, and track it.

An internal transfer moves funds between accounts that belong to the same customer, for example from a trading account to a cash account. This guide shows the order in which to call the Money API. For the full request and response fields of each endpoint, see the API reference.

* **Account types:** `trading`, `options` and `cash`
* **Headers:** every call requires a unique `x-request-id` header.
* **Customer context:** the customer is derived from your credentials. You never send a `gcid`.

## The Flow

```mermaid theme={null}
sequenceDiagram
    participant App
    participant API as Money API

    App->>API: 1. GET /transfer-eligibility
    API-->>App: allowed source → destination pairs
    App->>API: 2. GET /transferable-balance
    API-->>App: maximum amount for the chosen pair
    App->>API: 3. GET /transfer-limits and /transfer-fee-configurations (optional)
    API-->>App: min / max and fee per route
    App->>API: 4. POST /transfers
    API-->>App: transferId
    App->>API: 5. GET /transfers/{transferId}
    API-->>App: status
```

All paths are relative to `https://public-api.etoro.com/api/v1/money`.

## Step 1: Find the Allowed Transfers

Call `GET /transfer-eligibility`. It returns, for each of the customer's source accounts, the destination accounts it can transfer to. Let the user pick from this list, and use the `accountType` and `accountId` values exactly as returned in the next steps.

A source with no `destinationAccounts` cannot transfer anywhere.

## Step 2: Get the Maximum Amount

Once the user has chosen a source and a destination, call `GET /transferable-balance` with both accounts. It returns the most the customer can move right now, so you do not need to combine balances and limits yourself. A `404` means the pair is not available.

## Step 3: Show Limits and Fees (Optional)

To show the user the policy bounds and the cost before they confirm, call:

* `GET /transfer-limits` for the minimum and maximum amount per route
* `GET /transfer-fee-configurations` for the fee per route

Both return one row per route, so pick the row that matches the chosen account types.

## Step 4: Execute the Transfer

Call `POST /transfers` with the source account, destination account, `amount`, `currency` (the source account currency), and a `requestReferenceId` of your own.

```json theme={null}
{
  "requestReferenceId": "client-ref-8f3a-001",
  "sourceAccount": { "accountType": "trading", "accountId": "1001" },
  "destinationAccount": { "accountType": "cash", "accountId": "x-5501" },
  "amount": 250.0,
  "currency": "USD"
}
```

The response contains `transferId` and `requestReferenceId`. A successful response means the transfer was **accepted**, not that it has completed, so continue to Step 5.

`requestReferenceId` is also your idempotency key. If a request times out, retry with the **same** value. Never reuse it for a different transfer.

## Step 5: Track the Transfer

Read the outcome with one of:

* `GET /transfers/{transferId}` when you hold the `transferId`
* `GET /transfers:lookup?requestReferenceId=...` when you only hold your own reference

Poll until `status` is final.

| `status` | Meaning | Final |
| - | - | - |
| `InProcess` | Still being processed. Poll again. | No |
| `Success` | The transfer completed. | Yes |
| `Decline` | The transfer was declined. | Yes |
| `Technical` | The transfer failed with a technical error. | Yes |
| `Canceled` | The transfer was canceled. | Yes |

If you receive a value you don't recognise, treat it as not final and poll again.

## Good to Know

* **No demo environment:** the transfer endpoints have no demo variants, so test with small real amounts on your own accounts.
* **Trading sub-accounts:** this transfer flow is not for trading sub-accounts.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.