Skip to main content

Transfer to Another Client

What this page solves​

Sending funds from your Partner Reward Wallet to an account of another Exness client with destination_type: another_client.

When to use it​

Use it when you are an authorized partner and pay out funds to your clients or to other Exness clients. Transfers to another client are always sent from your Reward Wallet; any other source account is rejected with TRANSFER_SOURCE_NOT_ALLOWED.

Before you start​

  • API key

    With the Partner transfers scope. See Payments scopes.

  • Request signing

    Working request signing. See Request signing.

  • Reward Wallet number

    You find it in the Partner Personal Area under Wallet accounts.

  • Recipient account number

    A trading account on the Exness platform or a wallet. Trading account numbers of your direct clients are listed in the Partner Personal Area under Reports → Client accounts, and are available through the Exness Partnership API: GET /v1/partnership/reports/clients/accounts, field client_account. Account numbers of second-level clients are masked. For any other Exness client, the recipient provides the account number.

  • Supported accounts

    MT4 and MT5 accounts are not supported. Client account lists can include them; check the account before sending.

  • Enough balance

    Enough balance on your Reward Wallet. See Read an account balance.

  1. 1
    Confirm the recipient's account number with the recipient or from your client list. The API has no operation to look up or confirm the recipient before the transfer. A created transfer cannot be cancelled or reversed through the API.
  2. 2
    Check the balance of your Reward Wallet.
  3. 3
    Generate a new idempotency key — a random UUID — for each payout and store it together with the request before sending.
  4. 4
    Send POST /v1/transfers.
  5. 5
    On 201, track the transfer with GET /v1/transfers/{transfer_id} until it is done or rejected.
  6. 6
    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 of your Reward Wallet

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: 7c9e6679-7425-40de-944b-e07fc1f90ae7
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":"another_client","source_account":"7055707","destination_account":"9484938201111","amount":"100.00"}

The amount is in the currency of your Reward Wallet.

What to expect in return​

HTTP 201 with the transfer_id and the amount of the transfer in the currency of your Reward Wallet (source) and in the currency of the recipient account (destination):

{
"transfer_id": "2000000074",
"source": { "amount": "100.00", "currency": "USD" },
"destination": { "amount": "91.80", "currency": "EUR" }
}
201 does not mean the money has moved

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 Partner transfers scope, or your source IP is not allowed for the key.
4037002TRANSFER_SOURCE_NOT_ALLOWEDThe source account is not your Reward Wallet. Use your Reward Wallet as the source account.
4042000ACCOUNT_NOT_FOUNDThe recipient account does not exist, is not available, or is your own account. Check the account number.
4097004TRANSFER_INSUFFICIENT_FUNDSNot enough funds on your Reward Wallet. Fund it or reduce the amount.
4227005, 7006TRANSFER_AMOUNT_TOO_SMALL, TRANSFER_AMOUNT_TOO_LARGEIncrease or reduce the amount.
4223001REQUEST_INVALID_PARAMETERSA parameter did not pass validation: 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 payout, generate a new key.
4227000, 7001TRANSFER_NOT_SUPPORTED, TRANSFER_DESTINATION_NOT_SUPPORTEDThis destination or account combination is not supported. Choose another destination account.
4227009TRANSFER_MT_ACCOUNT_NOT_SUPPORTEDThe recipient account is an MT4 or MT5 account. Ask the recipient for an account on the Exness platform or a wallet.
4227003OPERATION_NOT_ALLOWEDThe transfer was declined by eligibility checks. Check account eligibility or contact support.
4227007TRANSFER_LIMIT_REACHEDTry again later. Changing the amount does not help.
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 new key can send the money twice. 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.
  • When you send many payouts, keep one idempotency key per payout, so each payout can be retried independently.
  • 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 between your own accounts