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. For example, you can view accounts, add counterparties, make payments or currency exchanges without manual effort in the WebUI interfaces, which saves time, and reduces costs and errors.

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

You can also reference the API specification on Github.

Authentication

AccessToken

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

Before you start, ensure that you’ve got an access token in your Revolut Business Account. You need to get the authorization code first and exchange it for an access token. For more information, see Authentication and Authorization guide.

Security Scheme Type HTTP
HTTP Authorization Scheme bearer

Accounts

Retrieve all accounts

Get a list of all your accounts.

Authorizations:

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve an account

Get the information about a specific account by ID.

Authorizations:
path Parameters
accountId
required
string <uuid>

The ID of the account to retrieve.

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "string",
  • "balance": 0,
  • "currency": "string",
  • "state": "active",
  • "public": true,
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z"
}

Retrieve all account's bank details

Get all the bank details of a specific account.

Authorizations:
path Parameters
accountId
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.

Note: In the Sandbox environment, you cannot add "real" people and businesses as Revolut counterparties. Therefore, to help you simulate "Add Revolut 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 two-factor authentication in the Revolut Business User Interface 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:

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Retrieve a counterparty

Get the information about a specific counterparty by ID.

Authorizations:
path Parameters
counterpartyId
required
string <uuid>

The ID of the counterparty to retrieve.

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "string",
  • "phone": "string",
  • "profile_type": "personal",
  • "country": "string",
  • "state": "created",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "accounts": [
    ]
}

Delete a counterparty

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

Authorizations:
path Parameters
counterpartyId
required
string <uuid>

The ID of the counterparty to delete.

Responses

Response samples

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

Create a counterparty

Create a counterparty for an existing Revolut account or non-Revolut bank account.

A counterparty can be either a business or a personal counterparty, which you specify in profile_type. For more information, see Counterparties.

Authorizations:
Request Body schema: application/json

Counterparty to add

company_name
string

The name of the company counterparty. Use when individual_name isn’t specified.

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}$

IOS 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
{
  • "company_name": "string",
  • "profile_type": "personal",
  • "name": "string",
  • "individual_name": {
    },
  • "bank_country": "string",
  • "currency": "string",
  • "phone": "string",
  • "account_no": "string",
  • "iban": "string",
  • "sort_code": "string",
  • "routing_number": "string",
  • "bic": "string",
  • "clabe": "string",
  • "ifsc": "string",
  • "bsb_code": "string",
  • "address": {
    }
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "name": "string",
  • "phone": "string",
  • "profile_type": "personal",
  • "country": "string",
  • "state": "created",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "accounts": [
    ]
}

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:
Request Body schema: application/json

Create a transfer

request_id
required
string

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

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}$

IOS 4217 currency code in upper case.

reference
string

The reference for the funds transfer.

Responses

Request samples

Content type
application/json
{
  • "request_id": "string",
  • "source_account_id": "75fca71f-6b38-4768-804d-ffb93d0aa579",
  • "target_account_id": "328459d9-9745-4f8b-9c0b-b330ce904459",
  • "amount": 0,
  • "currency": "string",
  • "reference": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "state": "created",
  • "created_at": "2020-11-23T08:39:35.811005Z",
  • "completed_at": "2020-11-23T08:39:35.811005Z"
}

Payments

You can create an incoming or outgoing payment. A payment is represented as a transaction here. Then, you can retrieve one or all transactions, and cancel a transaction. A transaction is processed in two stages:

  1. A transaction is created,
  2. The transaction is processed in either of the following ways:
  • Credit/debit on both sides of the transaction made between Revolut accounts.
  • Posted to an external payment network, for example, Faster Payments, SEPA, SWIFT, etc.

Note:

  • If the payment is made to an external payment network, when the transaction is created, it has the the pending state. When it’s processed, it can have one of the following states:
    • completed
    • failed
    • reverted
    • declined
  • If the payment is made between Revolut accounts, the transaction is executed instantly, and skips the pending state.

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:
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" "card_chargeback" "card_credit" "exchange" "transfer" "loan" "fee" "refund" "topup" "topup_return" "tax" "tax_refund"

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/<id>

To retrieve a transaction by request ID:

GET https://b2b.revolut.com/api/1.0/transaction/<request_id>?id_type=request_id

Authorizations:
path Parameters
transactionId
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
{
  • "id": "string",
  • "type": "atm",
  • "request_id": "string",
  • "state": "created",
  • "reason_code": "string",
  • "created_at": "2019-08-24T14:15:22Z",
  • "updated_at": "2019-08-24T14:15:22Z",
  • "completed_at": "2019-08-24T14:15:22Z",
  • "scheduled_for": "2019-08-24",
  • "related_transaction_id": "77cf4c8f-163c-4c22-acc4-3cade5f744f0",
  • "merchant": {
    },
  • "reference": "string",
  • "legs": [
    ],
  • "card": {
    }
}

Cancel a transaction

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

Authorizations:
path Parameters
transactionId
required
string <uuid>

The ID of the transaction to cancel.

Responses

Response samples

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

Create a payment

Note: Due to PSD2 Strong Customer Authentication regulations, from 1st April 2021, the payments endpoint is only available for customers on Revolut Business Company plans. We suggest that Freelancers wishing to use the Business API leverage our Payment Drafts endpoint to minimise disruption.

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.

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:
Request Body schema: application/json

Create a payment

request_id
required
string

The ID of the transaction that you provide. Maximum length: 40 characters.

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 (minor currency unit).

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

IOS 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.

Responses

Request samples

Content type
application/json
{
  • "request_id": "string",
  • "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65",
  • "receiver": {
    },
  • "amount": 0,
  • "currency": "string",
  • "reference": "string",
  • "schedule_for": "2019-08-24"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "state": "created",
  • "created_at": "2019-08-24T14:15:22Z",
  • "completed_at": "2019-08-24T14:15:22Z"
}

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.

Create a payment draft

Create a payment draft.

Authorizations:
AccessToken (
  • write
)
Request Body schema: application/json

The payment draft information.

required
Array of objects (PaymentRequest) [ items ]

The details of the payment.

title
string

The title of the payment draft.

schedule_for
string <date-time>

The future date and time that you schedule the payment draft.

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "schedule_for": "2019-08-24T14:15:22Z",
  • "payments": [
    ]
}

Response samples

Content type
application/json
{
  • "id": "string"
}

Retrieve all payment drafts

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

Authorizations:
AccessToken (
  • read
)

Responses

Response samples

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

Retrieve a payment draft

Get the information about a specific payment draft by ID.

Authorizations:
AccessToken (
  • read
)
path Parameters
paymentDraftId
required
string <uuid>

The ID of the payment draft to retrieve.

Responses

Response samples

Content type
application/json
{
  • "scheduled_for": "2019-08-24T14:15:22Z",
  • "title": "string",
  • "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 (
  • write
)
path Parameters
paymentDraftId
required
string <uuid>

The ID of the payment draft to delete.

Responses

Response samples

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

Exchanges

Get exchange rate

Get the exchange rate between two currencies.

Authorizations:
AccessToken (
  • read
)
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": 0,
  • "fee": {
    },
  • "rate_date": "2019-08-24T14:15:22Z"
}

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:
Request Body schema: application/json

Specify the exchange information

required
object (ExchangePart)
required
object (ExchangePart)
request_id
required
string

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

reference
string

Provide the exchange reference.

Responses

Request samples

Content type
application/json
{
  • "from": {
    },
  • "to": {
    },
  • "reference": "string",
  • "request_id": "string"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "type": "string",
  • "reason_code": "string",
  • "created_at": "2019-08-24T14:15:22Z",
  • "completed_at": "2019-08-24T14:15:22Z",
  • "state": "created"
}

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)

Retrieve a webhook

Get your webhook URL.

Authorizations:
AccessToken (
  • read
)

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 (
  • write
)
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 (
  • write
)

Responses

Response samples

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