Skip to main content

Transfer Between Your Own Accounts

What this page solves​

Moving funds from one of your accounts to another of your own accounts with destination_type: own_account.

When to use it​

Use it when both accounts belong to you, for example to move funds from a wallet to a trading account, or between two trading accounts on the Exness platform.

Before you start​

  • API key

    With the Internal transfers scope. See Payments scopes.

  • Request signing

    Working request signing. See Request signing.

  • Account numbers

    The source and destination account numbers. Your wallets are listed in your Personal Area under Payments & wallet, and your trading accounts under Trading → Accounts. Only accounts on the Exness platform are supported, not MT4 or MT5.

  • Enough balance

    Enough balance on the source account. See Read an account balance.

  1. 1
    Check the balance of the source account.
  2. 2
    Generate a new idempotency key — a random UUID — and store it together with the request before sending.
  3. 3
    Send POST /v1/transfers.
  4. 4
    On 201, track the transfer with GET /v1/transfers/{transfer_id} until it is done or rejected.
  5. 5
    After a timeout, no response, a non-API response (an HTML page, or a JSON body from a proxy or load balancer), TRANSFER_OUTCOME_UNKNOWN, SYSTEM_INTERNAL_ERROR, or SYSTEM_TEMPORARY_UNAVAILABLE, resend the exact same request with the same idempotency key.

Main endpoints​

OperationPurpose
POST /v1/transfersCreate the transfer
GET /v1/transfers/{transfer_id}Read the transfer status
GET /v1/accounts/{account_id}/balanceRead the balance available for transfers

Example request​

The example is structural: replace the placeholders in angle brackets with your values. For a runnable implementation, see Code Examples.

POST /v1/transfers HTTP/1.1
EXN-API-KEY: <your API key>
EXN-IDEMPOTENCY-KEY: 0f8fad5b-d9cb-469f-a165-70867728950e
EXN-TIMESTAMP: <current Unix time in milliseconds>
EXN-SIGN-VERSION: 1
EXN-DATA: <base64url-encoded signed payload>
EXN-SIGN: <base64url-encoded signature>
Content-Type: application/json

{"destination_type":"own_account","source_account":"8066808","destination_account":"9484938209348","amount":"100.00"}

Provide only the accounts and the amount, in the currency of the source account. The currency, payment method, and conversion are determined from the accounts.

What to expect in return​

HTTP 201:

{
"transfer_id": "2000000074",
"source": { "amount": "100.00", "currency": "USD" },
"destination": { "amount": "91.80", "currency": "EUR" }
}
  • source — the amount of the transfer in the source account currency.
  • destination — the amount of the transfer in the destination account currency. When the currencies differ, the amount is converted at execution.
  • 201 means the transfer is created, not that the money has been transferred. The transfer can still be processing. Check its final status with Check a transfer status.

Common errors​

HTTPcodeerror_messageWhat to do
4031002AUTH_PERMISSION_DENIEDYour key does not have the Internal transfers scope, or your source IP is not allowed for the key.
4042000ACCOUNT_NOT_FOUNDAn account does not exist, is not available to your key, or the destination is not your own account. Check the account numbers.
4097004TRANSFER_INSUFFICIENT_FUNDSNot enough funds on the source account. Fund the account or reduce the amount.
4223001REQUEST_INVALID_PARAMETERSA parameter did not pass validation: the source and destination are the same account, the idempotency key is missing or not a UUID, a required field is missing, or a field has a wrong type or format. Fix the request.
4093016REQUEST_IDEMPOTENCY_KEY_REUSEDThe key was already used with a different request. On a retry, you changed the request: resend the original request unchanged with the same key. For a new transfer, generate a new key.
4227000TRANSFER_NOT_SUPPORTEDThis account combination is not supported. Choose different accounts.
4227001TRANSFER_DESTINATION_NOT_SUPPORTEDTransfers to this destination account are not supported. Choose another destination.
4227009TRANSFER_MT_ACCOUNT_NOT_SUPPORTEDMT4 and MT5 accounts are not supported. Choose an account on the Exness platform.
4227005, 7006TRANSFER_AMOUNT_TOO_SMALL, TRANSFER_AMOUNT_TOO_LARGEIncrease or reduce the amount.
4227007TRANSFER_LIMIT_REACHEDTry again later. Changing the amount does not help.
4227003OPERATION_NOT_ALLOWEDThe operation is not allowed for your account. Check account eligibility or contact support.
5007008TRANSFER_OUTCOME_UNKNOWNResend the exact same request with the same idempotency key. See Recovery and idempotency.

These actions apply while no request sent with the idempotency key has had an unknown outcome:

  • Auth and rate-limit errors

    After AUTH_INVALID_API_KEY, AUTH_INVALID_SIGNATURE, AUTH_PERMISSION_DENIED, or REQUEST_RATE_LIMIT: fix the cause and resend with the same key.

  • Any other error

    Send the fixed request as a new transfer with a new idempotency key, and never send the old key again.

After an unknown outcome

After an unknown outcome — a timeout, no response, a non-API response, TRANSFER_OUTCOME_UNKNOWN, SYSTEM_INTERNAL_ERROR, SYSTEM_TEMPORARY_UNAVAILABLE, or a stop of your system while a request was in flight — an error on a retry leaves the outcome unknown: do not change the request or the key to get past it, and follow Recovery and Idempotency.

All codes are listed in Troubleshooting Your API Requests.

Recovery and reconciliation​

Never use a new key while the outcome is unknown

After a timeout, no response, a non-API response, TRANSFER_OUTCOME_UNKNOWN, SYSTEM_INTERNAL_ERROR, or SYSTEM_TEMPORARY_UNAVAILABLE, resend the exact same request with the same idempotency key. A transfer that already exists is never executed again. See Recovery and Idempotency.

Transfers cannot be reversed

A created transfer cannot be cancelled or reversed through the API. If a transfer was sent to a wrong account, contact Customer Support.

  • If a retry returns an error, the outcome is still unknown. Do not change the request or the key; handle the error as listed in What to expect in return — retry, fix the cause, or check Transaction History.
  • You can review your transfers in Transaction History in the Payments & wallet section of your Personal Area.

Check a transfer status · Recovery and idempotency · Transfer to another client