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

# Create a transfer to another account or card

Make a payment to a counterparty. You can choose either a bank transfer or a card transfer. The resulting transaction has the type `transfer`.

If you make the payment to another Revolut account, either business or personal, the transaction is executed instantly.

If the counterparty has multiple payment methods available, for example, 2 accounts, or 1 account and 1 card, you **must specify the account or card** to which you want to transfer the money (`receiver.account_id` or `receiver.card_id` respectively) .

For more details, see the guides: [Send money via bank transfer](/docs/guides/manage-accounts/transfers/bank-transfers) and [Card transfers](/docs/guides/manage-accounts/transfers/card-transfers).

## Endpoint

POST `/pay`

## Request body

Create a transfer

### Attributes

- `request_id` (string)
    A unique identifier for the transaction, provided by you.  
    This is used for idempotency to prevent duplicate payments. 
    There are no strict format requirements, but we recommend using UUID v4 values.
    
    :::tip[Retrying requests safely with idempotency]
    If you do not receive a response (for example, due to a network error or timeout), you can safely retry the request using the same `request_id`. 
    
    If a transaction with the same `request_id` was already created, the API will not create a duplicate transaction.
    
    :::warning[Idempotency expiry]
    Idempotency checks apply only to transactions created **within the last 2 weeks**. 
    Reusing a `request_id` **after this period** may result in a **new transaction being created**.
    :::
- `account_id` (string)
    The ID of the account that you send the funds from.
- `receiver` (object)
    The details of the transfer recipient.
    
    If the counterparty has multiple payment methods available (e.g. 2 accounts, or 1 account and 1 card), you must specify the account (`account_id`) or card (`card_id`) to which you want to transfer the money.
  - `receiver.counterparty_id` (string)
      The ID of the receiving counterparty.
  - `receiver.account_id` (string, optional)
      The ID of the receiving counterparty's account. Used for bank transfers.
      
      If the counterparty has multiple payment methods available, use it to specify the account to which you want to send the money.
  - `receiver.card_id` (string, optional)
      The ID of the receiving counterparty's card.
      Used for card transfers.
      
      If the counterparty has multiple payment methods available, use it to specify the card to which you want to send the money.
- `amount` (number)
    The amount to transfer.
- `currency` (string, optional)
    [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code in upper case.
- `reference` (string, optional)
    The reference for the payment.
    A piece of text or number you provide to help identify what the payment relates to.
    It can be used, for example, for reconciliation or tracking purposes.
    
    You might include an invoice number, account or transaction ID, or any other reference meaningful to you.
    
    If the provided reference is longer than 140 characters, it will be truncated.
    Note that some recipient banks might truncate the reference even further.
- `charge_bearer` (enum, optional)
    The party to which any transaction fees are charged if the resulting transaction route has associated fees. 
    Some transactions with fees might not be possible with the specified option, in which case error `3287` is returned.
    Possible enum values:

    - `shared`
    - `debtor`
- `transfer_reason_code` (string, optional)
    The reason code for the transaction. Transactions to certain countries and currencies might require you to provide a transfer reason. 
    You can check available reason codes with the [`GET /transfer-reasons` operation](/docs/api/business#get-transfer-reasons).
    
    If a transfer reason is not required for the given currency and country, this field is ignored.
- `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

The information about the created transfer

#### Response attributes

- `id` (string)
    The ID of the transaction created.
- `state` (enum)
    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`
- `created_at` (string)
    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.

## Error responses

| HTTP status code | Description |
| --- | --- |
| 400 | Bad request  For example: - the specified `charge_bearer` is not supported - the transfer reason is required and `transfer_reason_code` is missing - the exchange reason is required and `exchange_reason_code` is missing - a duplicate `request_id` is being used |
