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.
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 |
Response samples
- 200
- default
[- {
- "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 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
- 200
- default
{- "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
- 200
- default
[- {
- "iban": "string",
- "bic": "string",
- "account_no": "string",
- "sort_code": "string",
- "routing_number": "string",
- "beneficiary": "string",
- "beneficiary_address": {
- "street_line1": "string",
- "street_line2": "string",
- "region": "string",
- "city": "string",
- "country": "string",
- "postcode": "string"
}, - "bank_country": "string",
- "pooled": true,
- "unique_reference": "string",
- "schemes": [
- "chaps"
], - "estimated_time": {
- "unit": "days",
- "min": 0,
- "max": 0
}
}
]
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.
Response samples
- 200
- default
[- {
- "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": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "bank_country": "string",
- "currency": "string",
- "type": "revolut",
- "account_no": "string",
- "iban": "string",
- "sort_code": "string",
- "routing_number": "string",
- "bic": "string",
- "clabe": "string",
- "ifsc": "string",
- "bsb_code": "string",
- "recipient_charges": "no"
}
]
}
]
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
- 200
- default
{- "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": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "bank_country": "string",
- "currency": "string",
- "type": "revolut",
- "account_no": "string",
- "iban": "string",
- "sort_code": "string",
- "routing_number": "string",
- "bic": "string",
- "clabe": "string",
- "ifsc": "string",
- "bsb_code": "string",
- "recipient_charges": "no"
}
]
}
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
- default
{- "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 |
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 |
object (IndividualName) The name of the individual counterparty. Use when | |
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 |
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
- Payload
{- "company_name": "string",
- "profile_type": "personal",
- "name": "string",
- "individual_name": {
- "first_name": "string",
- "last_name": "string"
}, - "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": {
- "street_line1": "string",
- "street_line2": "string",
- "region": "string",
- "city": "string",
- "country": "string",
- "postcode": "string"
}
}
Response samples
- 200
- default
{- "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": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "bank_country": "string",
- "currency": "string",
- "type": "revolut",
- "account_no": "string",
- "iban": "string",
- "sort_code": "string",
- "routing_number": "string",
- "bic": "string",
- "clabe": "string",
- "ifsc": "string",
- "bsb_code": "string",
- "recipient_charges": "no"
}
]
}
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
- Payload
{- "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
- 200
- default
{- "id": "string",
- "state": "created",
- "created_at": "2020-11-23T08:39:35.811005Z",
- "completed_at": "2020-11-23T08:39:35.811005Z"
}
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:
- A transaction is created,
- 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
- 200
- default
[- {
- "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": {
- "name": "string",
- "city": "string",
- "category_code": "string",
- "country": "string"
}, - "reference": "string",
- "legs": [
- {
- "leg_id": "b1c630e1-a27d-4ede-94f0-ee42391a3c4e",
- "amount": 0,
- "fee": 0,
- "currency": "string",
- "bill_amount": 0,
- "bill_currency": "string",
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65",
- "counterparty": {
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65",
- "account_type": "self",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "description": "string",
- "balance": 0
}
], - "card": {
- "card_number": "string",
- "first_name": "string",
- "last_name": "string",
- "phone": "string"
}
}
]
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 |
query Parameters
id_type | string Value: "request_id" The type of the transaction ID. |
Responses
Response samples
- 200
- default
{- "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": {
- "name": "string",
- "city": "string",
- "category_code": "string",
- "country": "string"
}, - "reference": "string",
- "legs": [
- {
- "leg_id": "b1c630e1-a27d-4ede-94f0-ee42391a3c4e",
- "amount": 0,
- "fee": 0,
- "currency": "string",
- "bill_amount": 0,
- "bill_currency": "string",
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65",
- "counterparty": {
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65",
- "account_type": "self",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "description": "string",
- "balance": 0
}
], - "card": {
- "card_number": "string",
- "first_name": "string",
- "last_name": "string",
- "phone": "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
- Payload
{- "request_id": "string",
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65",
- "receiver": {
- "counterparty_id": "fd38dae9-b300-4017-a630-101c4279eafd",
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65"
}, - "amount": 0,
- "currency": "string",
- "reference": "string",
- "schedule_for": "2019-08-24"
}
Response samples
- 200
- default
{- "id": "string",
- "state": "created",
- "created_at": "2019-08-24T14:15:22Z",
- "completed_at": "2019-08-24T14:15:22Z"
}
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:
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
- Payload
{- "title": "string",
- "schedule_for": "2019-08-24T14:15:22Z",
- "payments": [
- {
- "account_id": "string",
- "receiver": {
- "counterparty_id": "fd38dae9-b300-4017-a630-101c4279eafd",
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65"
}, - "amount": 0,
- "currency": "string",
- "reference": "string"
}
]
}
Response samples
- 201
- default
{- "id": "string"
}
Retrieve all payment drafts
Get a list of all the payment drafts that aren't processed.
Authorizations:
read
Responses
Response samples
- 200
- default
{- "payment_orders": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "scheduled_for": "2019-08-24",
- "title": "string",
- "payments_count": 0
}
]
}
Retrieve a payment draft
Get the information about a specific payment draft by ID.
Authorizations:
read
path Parameters
paymentDraftId required | string <uuid> The ID of the payment draft to retrieve. |
Responses
Response samples
- 200
- default
{- "scheduled_for": "2019-08-24T14:15:22Z",
- "title": "string",
- "payments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "amount": {
- "amount": 0,
- "currency": "string"
}, - "currency": "string",
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65",
- "receiver": {
- "counterparty_id": "fd38dae9-b300-4017-a630-101c4279eafd",
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65"
}, - "state": "CREATED",
- "reason": "string",
- "error_message": "string",
- "current_charge_options": {
- "from": {
- "amount": 0,
- "currency": "string"
}, - "to": {
- "amount": 0,
- "currency": "string"
}, - "rate": "string",
- "fee": {
- "amount": 0,
- "currency": "string"
}
}, - "reference": "string"
}
]
}
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:
write
path Parameters
paymentDraftId required | string <uuid> The ID of the payment draft to delete. |
Responses
Response samples
- default
{- "code": 0,
- "message": "string"
}
Get exchange rate
Get the exchange rate between two currencies.
Authorizations:
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 |
Responses
Response samples
- 200
- default
{- "from": {
- "amount": 0,
- "currency": "string"
}, - "to": {
- "amount": 0,
- "currency": "string"
}, - "rate": 0,
- "fee": {
- "amount": 0,
- "currency": "string"
}, - "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:
pay
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
- Payload
{- "from": {
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65",
- "currency": "string",
- "amount": 0
}, - "to": {
- "account_id": "449e7a5c-69d3-4b8a-aaaf-5c9b713ebc65",
- "currency": "string",
- "amount": 0
}, - "reference": "string",
- "request_id": "string"
}
Response samples
- 200
- default
{- "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"
}
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
)
Response samples
- 200
- default
{
}
Set a webhook
Set up a webhook URL so that event notifications are pushed to the specified URL. Only HTTPS URLs are supported.
Authorizations:
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 |
Responses
Request samples
- Payload
{
}
Response samples
- default
{- "code": 0,
- "message": "string"
}
Delete a webhook
Delete a webhook so that events are not sent to the specified URL any more.
Authorizations:
write
Responses
Response samples
- default
{- "code": 0,
- "message": "string"
}