---
api: 'Business API'
---

# Exchange money

Exchange money using one of these methods: 

- **Sell currency**: You know the amount of currency to sell. 
  For example, you want to exchange 135.5 USD to some EUR. 

  Specify the amount in the `from` object.
- **Buy currency**: You know the amount of currency to buy. 
  For example, you want to exchange some USD to 200 EUR. 

  Specify the amount in the `to` object.

:::note
You must specify the `amount` field only once, either in the `from` object or in the `to` object.
:::

You can check the [currencies supported in Production](https://help.revolut.com/business/help/receiving-payments/currency-exchanges/which-currencies-can-i-exchange-and-keep-in-my-account/) in the Revolut Help Centre.
Some of these currencies might not be available in Sandbox.

For more information, see the guides: [Exchange money](/docs/guides/manage-accounts/exchange-money).

## Endpoint

POST `/exchange`

## Request body

Specify the exchange information

### Attributes

- `from` (object)
    The details of the currency to exchange from.
  - `from.account_id` (string)
      The ID of the account to sell currency from.
  - `from.currency` (string)
      [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code in upper case.
  - `from.amount` (number, optional)
      The amount of currency.
      Specify **only** if you want to sell currency.
- `to` (object)
    The details of the currency to exchange to.
  - `to.account_id` (string)
      The ID of the account to receive exchanged currency into.
  - `to.currency` (string)
      [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code in upper case.
  - `to.amount` (number, optional)
      The amount of currency.
      Specify **only** if you want to buy currency.
- `reference` (string, optional)
    The reference for the exchange transaction, provided by you.
    It helps you to identify the transaction if you want to look it up later.
- `request_id` (string)
    The ID of the request, provided by you.
    It helps you identify the transaction in your system.
    
    :::warning
    To ensure that an exchange transaction is not processed multiple times if there are network or system errors,
    the same `request_id` should be used for requests related to the same transaction.
    :::
- `exchange_reason_code` (string, optional)
    The reason code for the exchange.
    Depending on the country and the amount of funds to be exchanged, you might be required to provide an exchange reason. 
    You can check available reason codes with the [`GET /exchange-reasons` operation](/docs/api/business#get-exchange-reasons).
    
    If an exchange reason is not required, this field is ignored.

## Returns

### 200

Exchange operation details

#### Response attributes

- `id` (string, optional)
    The ID of the created transaction.
- `type` (string, optional)
    The type of the transaction. For money exchange, it is `exchange`.
- `reason_code` (string, optional)
    The reason why the transaction was failed or declined.
    
    Present only when the `state` parameter of the transaction is `declined` or `failed`.
- `created_at` (string, optional)
    The date and time the transaction was created in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
- `completed_at` (string, optional)
    The date and time the transaction was completed in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
- `state` (enum, optional)
    Indicates the transaction state. Possible values:
      - `created`: The transaction has been created and is either processed asynchronously or scheduled for a later time.
      - `pending`: The transaction is pending until it's being processed. If the transfer is made between Revolut accounts, this state is skipped and the transaction is executed instantly.
      - `completed`: The transaction was successful.
      - `declined`: The transaction was unsuccessful. This can happen for a variety of reasons, for example, insufficient account balance, wrong receiver information, etc.
      - `failed`: The transaction was unsuccessful. This can happen for a variety of reasons, for example, invalid API calls, blocked payments, etc.
      - `reverted`: The transaction was reverted. This can happen for a variety of reasons, for example, the receiver being inaccessible.
    Possible enum values:

    - `created`
    - `pending`
    - `completed`
    - `declined`
    - `failed`
    - `reverted`

## Error responses

| HTTP status code | Description |
| --- | --- |
| 400 | Bad request  For example, the exchange reason is required. |
