Skip to main content

Business API (1.0)

As a Revolut Business customer, you can use the Business API to automate your own business processes. Save time, reduce your costs, and avoid errors by using the Business API.

You can view accounts, manage counterparties, make payments or currency exchanges without manual effort in the Web UI.

To get started using the Business API, check the user guide.

You can test the Business API in Postman:

View in Postman

Authentication

AccessToken

Each Business API request must contain an authorization header in the following format to make a call: Bearer <yourAccessToken>.

The access token will be obtained the first time you set up your application and has an expiration of 40 minutes. During setup, a refresh_token will also be obtained which allows to obtain a new access_token.

Access tokens can be issued with three security scopes and require a JWT (JSON Web Token) signature to be obtained:

  • READ: Permissions for GET operations.
  • WRITE: Permissions to update counterparties, webhooks, and issue payment drafts.
  • PAY: Permissions to initiate or cancel transactions and currency exchanges.

In order to configure your JWT, and obtain the refresh and first access tokens, complete the following steps:

  1. Sign up for Revolut Business account
  2. Prepare your Sandbox environment
  3. Make your first API request
Security Scheme Type: HTTP
HTTP Authorization Scheme: bearer

Accounts

Retrieve all accounts

Get a list of all your accounts.

Authorizations:
AccessToken

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Retrieve an account

Get the information about a specific account by ID.

Authorizations:
AccessToken
path Parameters
account_id
required
string <uuid>

The ID of the account to retrieve.

Responses

Response samples

Content type
application/json
{
  • "id": "b7ec67d3-5af1-42c8-bece-3d28nlmo894d",
  • "name": "International account",
  • "balance": 3171.89,
  • "currency": "GBP",
  • "state": "active",
  • "public": false,
  • "created_at": "2022-08-05T14:29:22.215785Z",
  • "updated_at": "2022-08-05T14:29:22.215785Z"
}

Retrieve all account's bank details

Get all the bank details of a specific account.

Authorizations:
AccessToken
path Parameters
account_id
required
string <uuid>

The ID of the account to retrieve all bank details.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Counterparties

To make a fund transfer or payment, add the counterparty that you intend to transact with. You can then retrieve one or all counterparties, or delete a counterparty.

Request and response examples can vary based on the account provider's location and type of the counterparty. For more information, see: Tutorials: 1. Create a counterparty.

Note: In the Sandbox environment, you cannot add "real" people and businesses as Revolut counterparties. Therefore, to help you simulate Create a counterparty requests, we have created some test accounts:

  • Personal counterparty (use the mobile field): +4412345678900, +4412345678901, +4412345678902, ... , +4412345678909

If you are on a freelancer account, to be compliant with PSD2 Strong Customer Authentication regulations, you must manually approve the counterparty with 2-factor authentication (2FA) on the Revolut Business Portal before you can make a payment. This can ensure maximum security in case of access token leakages and other fraudulent activities.

Retrieve all counterparties

Get a list of all your counterparties.

Authorizations:
AccessToken

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Retrieve a counterparty

Get the information about a specific counterparty by ID.

Authorizations:
AccessToken
path Parameters
counterparty_id
required
string <uuid>

The ID of the counterparty to retrieve.

Responses

Response samples

Content type
application/json
Example
{
  • "id": "8e0e9886-0af1-4b0c-acf4-111180d2892b",
  • "name": "John Smith",
  • "phone": "+4412345678900",
  • "profile_type": "personal",
  • "country": "GB",
  • "state": "created",
  • "created_at": "2022-09-14T14:41:39.312017Z",
  • "updated_at": "2022-09-14T14:41:39.312017Z"
}

Delete a counterparty

Deletes a counterparty with the given ID. When a counterparty is deleted, you cannot make any payments to the counterparty.

Authorizations:
AccessToken
path Parameters
counterparty_id
required
string <uuid>

The ID of the counterparty to delete.

Responses

Response samples

Content type
application/json
{ }

Create a counterparty

Create a counterparty for an existing Revolut account or non-Revolut bank account. For more information, see: Tutorials: 1. Create a counterparty

A counterparty can be either a business or a personal counterparty, which you specify with profile_type.

Authorizations:
AccessToken
Request Body schema: application/json

Counterparty to add

company_name
string

The name of the company counterparty. Use when individual_name or name isn't specified and profile_type is business.

profile_type
string (ProfileType)
Enum: "personal" "business"

The type of the Revolut profile. Use when adding an existing Revolut user using a phone number.

name
string

The name of the counterparty that you create for an existing Revolut user using a phone number. Provide the value only when you specify personal for profile_type.

object (IndividualName)

The name of the individual counterparty. Use when company_name isn't specified.

bank_country
string (BankCountryCode) ^[A-Z]{2,3}$

The country of the bank in 2-letter ISO code.

currency
string (Currency) ^[A-Z]{3}$

ISO 4217 currency code in upper case.

phone
string

The phone number of the counterparty in E.164 format. Provide the value only when you specify personal for profile_type.

account_no
string

The bank account number of the counterparty.

iban
string

The IBAN number of the counterparty's account. This field is displayed for IBAN countries.

sort_code
string

The sort code of the counterparty's account. This field is required for GBP accounts.

routing_number
string

The routing number of the counterparty's account. This field is required for USD accounts.

bic
string

The BIC number of the counterparty's account. This field is required for SWIFT and SEPA.

clabe
string

The CLABE number of the counterparty's account. This field is required for SWIFT MX.

ifsc
string

The IFSC number of the counterparty's account. This field is required for INR accounts.

bsb_code
string

The BSB number of the counterparty's account. This field is required for AUD accounts.

object (BeneficiaryAddress)

The address of the counterparty.

Responses

Request samples

Content type
application/json
Example
{
  • "profile_type": "personal",
  • "name": "John Smith",
  • "phone": "+4412345678900"
}

Response samples

Content type
application/json
Example
{
  • "id": "8e0e9886-0af1-4b0c-acf4-111180d2892b",
  • "name": "John Smith",
  • "phone": "+4412345678900",
  • "profile_type": "personal",
  • "country": "GB",
  • "state": "created",
  • "created_at": "2022-09-14T14:41:39.312017Z",
  • "updated_at": "2022-09-14T14:41:39.312017Z"
}

Transfers

You can move funds in the same currency between accounts of the business.

Create a transfer

Process the funds transfer between accounts of the business in the same currency.

The resulting transaction has the transfer type.

Authorizations:
AccessToken
Request Body schema: application/json

Create a transfer

request_id
required
string <= 40 characters

Provide the unique ID, which is used to handle duplicate transfer requests in case of a lost connection or client error.

source_account_id
required
string <uuid>

The ID of the source account that you transfer the funds from.

target_account_id
required
string <uuid>

The ID of the target account that you transfer the funds to.

amount
required
number <double>

The amount of the funds to be transferred.

currency
required
string (Currency) ^[A-Z]{3}$

ISO 4217 currency code in upper case.

reference
string

The reference for the funds transfer.

Responses

Request samples

Content type
application/json
{
  • "request_id": "129999",
  • "source_account_id": "2e6de1bf-97ad-478d-aad1-9d7a3cdf1234",
  • "target_account_id": "ae2e1241-81dd-498d-868e-075484785678",
  • "amount": 10,
  • "currency": "GBP",
  • "reference": "John's transfer"
}

Response samples

Content type
application/json
{
  • "id": "630f95f7-a3f9-abf2-b4e4-3f65281234dc",
  • "state": "completed",
  • "created_at": "2020-11-23T08:39:35.811005Z",
  • "completed_at": "2020-11-23T08:39:35.811005Z"
}

Payments

An incoming or outgoing payment is represented as a transaction. For more information about processing transactions, and payments, see: Tutorials: 2. Create a payment.

Retrieve all transactions

Retrieve the historical transactions based on the provided query criteria.

The API returns a maximum of 1,000 transactions per request.

To be compliant with PSD2 SCA regulations, we only allow access to the last 90 days' transactions. However, you can access older transactions within the first 5 minutes of an account access token being authorized. This means that within the first 5 minutes of a Revolut user authenticating your request, you can request data older than 90 days. After the 5 minute mark, the access to the transaction data is automatically restricted only to the last 90 days.

Authorizations:
AccessToken
query Parameters
from
string

The date and time you retrieve the historical transactions from.

to
string

The date and time you retrieve the historical transactions to. The default value is now.

counterparty
string <uuid>

The ID of the counterparty.

account
string <uuid>

The ID of the account

count
integer

The number of the historical transactions to retrieve. The maximum number is 1,000. The default number is 100.

type
string (TransactionType)
Enum: "atm" "card_payment" "card_refund" … 11 more

The type of the historical transactions to retrieve.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve a transaction

Retrieve the details of a specific transaction by transaction ID or by request ID, which can include, for example, cardholder details for card payments.

Request

To retrieve a transaction by ID:

GET https://b2b.revolut.com/api/1.0/transaction/{transaction_id}

To retrieve a transaction by request ID:

GET https://b2b.revolut.com/api/1.0/transaction/{request_id}?id_type=request_id

Authorizations:
AccessToken
path Parameters
transaction_id
required
string

The ID of the transaction or request if id_type = request_id.

query Parameters
id_type
string
Value: "request_id"

The type of the transaction ID.

Responses

Response samples

Content type
application/json
Example
{
  • "id": "640dc0b7-1234-aaaa-1234-92ac4de1dacd",
  • "type": "exchange",
  • "state": "completed",
  • "request_id": "d8f041ab-1234-aaaa-1234-78b6a0b2801f",
  • "created_at": "2023-03-12T12:08:07.833414Z",
  • "updated_at": "2023-03-12T12:08:07.833414Z",
  • "completed_at": "2023-03-12T12:08:07.833705Z",
  • "legs": [
    ]
}

Cancel a transaction

Cancel a scheduled transaction that you initiated via the Business API.

Authorizations:
AccessToken
path Parameters
transaction_id
required
string <uuid>

The ID of the transaction to cancel.

Responses

Response samples

Content type
application/json
{ }

Create a payment

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

Notes: When you make the payment to a business counterparty, you must specify the account_id under receiver.

To avoid submitting duplicate payments because of an error in your code, ensure that request_id is unique for each payment and has persisted on your side previously.

Caution: Due to PSD2 Strong Customer Authentication regulations, from the 1st April 2021, the Payments (/pay) endpoint is only available for customers on Revolut Business Company plans. We suggest that Freelancers wishing to use the Payments (/pay) endpoint, instead leverage our Payment Drafts (/payment-drafts) endpoint to minimise disruption.

Schedule Payment

Currently, it is no longer possible to schedule an internal payment. Please reach out to us at api-requests@revolut.com if you want to get access to this functionality.

You can schedule payments between Revolut accounts for up to 30 days ahead. Scheduling payments to an external payment network is not supported at the moment.

Scheduled payments must be in the currency of the account that you pay from. To schedule a future payment, as opposed to immediate execution, add the schedule_for field in the POST /pay request.

Note: Payments scheduled for the same time might not be executed all at the same time. As the scheduled processor runs every several hours, the payments are processed in batches; if you schedule too many payments, more time is required to process all the payments.

Authorizations:
AccessToken
Request Body schema: application/json

Create a payment

request_id
required
string <= 40 characters

The ID of the transaction that you provide.

account_id
required
string <uuid>

The ID of the account that you pay from.

required
object (PaymentReceiver)

The details of the payment receiver.

amount
required
number <double>

The amount of the transaction.

currency
string (Currency) ^[A-Z]{3}$

ISO 4217 currency code in upper case.

reference
string

The reference for the transaction.

schedule_for
string <date>

The future date and time that you schedule the payment.

charge_bearer
string
Enum: "shared" "debtor"

The party to which any transaction fees will be charged if the resulting transaction route has associated fees. Leave empty for route default. Some transactions with fees might not be possible with the specified option, in which case error 3287 will be returned.

transfer_reason_code
string

The reason code for the transaction. Transactions to certain countries and currencies might require to provide a transfer reason. You can check available reason codes with the getTransferReasons operation.

This field will be ignored if it is not required for the given currency and country.

Responses

Request samples

Content type
application/json
Example
{
  • "request_id": "A1pH4num3ric",
  • "account_id": "af98333c-ea53-482b-93c2-1fa5e4eae671",
  • "receiver": {
    },
  • "amount": 10,
  • "charge_bearer": "shared",
  • "currency": "EUR",
  • "reference": "To John Doe"
}

Response samples

Content type
application/json
Example
{
  • "id": "630f9a62-e488-a9ce-a2d3-a30kkkke03f0",
  • "state": "pending",
  • "created_at": "2022-08-31T17:29:06.625613Z"
}

Get transfer reasons

In order to initiate a transfer in certain currencies and countries, you must provide a transfer reason. With this endpoint you can retrieve all transfer reasons available to your business account per country and currency.

Authorizations:
AccessToken

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    },
  • {
    }
]

Payment Drafts

To request an approval for a payment from a business owner or admin before the payment is executed, create a payment draft. The business owner or admin must manually approve it in the Revolut Business User Interface.

Then, you can also retrieve one or all payment drafts, and delete a payment draft.

Retrieve all payment drafts

Get a list of all the payment drafts that aren't processed.

Authorizations:
AccessToken

Responses

Response samples

Content type
application/json
{
  • "payment_orders": [
    ]
}

Create a payment draft

Create a payment draft.

Authorizations:
AccessToken
Request Body schema: application/json

The payment draft information.

required
Array of objects (PaymentRequest)

The details of the payment.

title
string

The title of the payment draft.

schedule_for
string <date>

The future date that you schedule the payment draft.

Responses

Request samples

Content type
application/json
{
  • "title": "Payment Draft Title",
  • "schedule_for": "2022-09-24",
  • "payments": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "e7e54cb2-861a-aaaa-80e9-3e6600f3db10"
}

Retrieve a payment draft

Get the information about a specific payment draft by ID.

Authorizations:
AccessToken
path Parameters
payment_draft_id
required
string <uuid>

The ID of the payment draft to retrieve.

Responses

Response samples

Content type
application/json
{
  • "title": "Draft Payment through API",
  • "payments": [
    ]
}

Delete a payment draft

Delete a payment draft with the given ID. You can delete a payment draft only if it isn't processed.

Authorizations:
AccessToken
path Parameters
payment_draft_id
required
string <uuid>

The ID of the payment draft to delete.

Responses

Response samples

Content type
application/json
{ }

Exchanges

Retrieve information on exchange rates between currencies, buy and sell currencies.

Get exchange rate

Get the exchange rate between two currencies.

Authorizations:
AccessToken
query Parameters
from
required
string (Currency) ^[A-Z]{3}$

The currency that you exchange from.

to
required
string (Currency) ^[A-Z]{3}$

The currency that you exchange to.

amount
number <double>

The amount of the currency. The default value is 1.00.

Responses

Response samples

Content type
application/json
{
  • "from": {
    },
  • "to": {
    },
  • "rate": 1.0044090351,
  • "fee": {
    },
  • "rate_date": "2022-08-31T17:30:34Z"
}

Exchange money

Exchange the money in either of the following cases:

  • You know the amount of currency to sell, for example, exchange 135.5 USD to some EUR. Then, specify the amount in the from object.
  • You know the amount of currency to buy, for example, exchange some USD to 200 EUR. Then, specify the amount in the to object.

Note: You can specify the amount field only once either in the from object or in the to object.

Authorizations:
AccessToken
Request Body schema: application/json

Specify the exchange information

required
object (ExchangePart)
required
object (ExchangePart)
request_id
required
string <= 40 characters

Provide the unique ID, which is used to handle duplicate exchange requests in case of a lost connection or client error.

reference
string

Provide the exchange reference.

Responses

Request samples

Content type
application/json
Example
{
  • "from": {
    },
  • "to": {
    },
  • "reference": "exchange",
  • "request_id": "A1pH4num3ric2"
}

Response samples

Content type
application/json
{
  • "id": "630f9c2e-2e74-a06d-ab61-deb7ggkkd6cb",
  • "state": "completed",
  • "created_at": "2022-08-31T17:36:46.656876Z",
  • "completed_at": "2022-08-31T17:36:46.657239Z"
}

Webhooks

A webhook (also called a web callback) allows your system to receive updates about your account to an HTTPS endpoint that you provide. When a supported event occurs, a notification is posted, via HTTP POST method, to the specified endpoint.

If the receiver returns an HTTP error response, there are two more consequent attempts for delivery.

Currently, the following events are supported:

  • Transaction Creation (TransactionCreated)
  • Transaction State Change (TransactionStateChanged)

For more information, see: Tutorials: Work with webhooks.

Retrieve a webhook

Get your webhook URL.

Authorizations:
AccessToken

Responses

Response samples

Content type
application/json

Set a webhook

Set up a webhook URL so that event notifications are pushed to the specified URL. Only HTTPS URLs are supported.

Authorizations:
AccessToken
Request Body schema: application/json

URL to set up as a webhook

url
required
string <uri>

The valid webhook URL that event notifications are sent to. The supported protocol is https.

Responses

Request samples

Content type
application/json

Response samples

Content type
application/json
{
  • "code": 0,
  • "message": "string"
}

Delete a webhook

Delete a webhook so that events are not sent to the specified URL any more.

Authorizations:
AccessToken

Responses

Response samples

Content type
application/json
{ }