NAV Navbar

Introduction to the Open Banking API

More than 14,000,000 customers use Revolut to manage their personal or business finances. Each customer is different and Revolut is on a mission to become the financial super-app that meets their unique needs. This is where you come in.

Join the 1000+ developers who have already built applications using the Revolut APIs.

API For Who What can you do
Open Banking API Third Party Developers Create applications for the marketplace or integrate Revolut into your own app for Revolut customers.

You might be looking for the Business API or the Merchant API

Developers that can build with this API

PSDII regulated Third Party Providers

Third Party Providers (TPPs) are authorised online service providers that have been introduced as part of Open Banking. If you are engaged in the provision of the payment initiation or account information transaction in the European Union (EU) or the United Kingdom (UK), you will have to be regulated by financial regulatory bodies in the relevant jurisdictions. In order to get access to our Open Banking API you will need to use a valid eIDAS certificate or Open Banking (OB) certificate to register your application on production.

Revolut Partners

For businesses that are not regulated under PSDII and would like to get access to our APIs - you can reach out to see if you qualify for access to our endpoints.

Quickstart 🚀

The quickest way to get up and running with the Open Banking API.

Introduction

The goal of this quickstart is to get you to your first API request as soon as possible.

To begin using the API you’ll start by setting up a sandbox environment where you can execute the exact same functionality as in production. You can use this to test your integration before going live. To set up a sandbox environment, please head over to the developer portal and create your sandbox certificates.

Create account on developer portal

Working with the Sandbox environment

Generate RSA

openssl genrsa -out server.key 2048

Generate CSR

openssl req -sha256 -new -key server.key -out server.csr -outform der

For the sake of creating a sandbox account, you can create some dummy certificates on your local machine. First, you’ll need to generate an RSA using the openssl command.

Then, we can generate X.509 Certificate Signing Request (CSR) using the second command.

Now, take the CSR file you just created with the last command and upload it to the sandbox environment.

Upload Certificate Signing Request

Creating accounts for sandbox

We've made it super simple for you to create accounts in the sandbox environment to test with your API requests.

Each API reference describes the functionality the account type can provide. For example, the Create Domestic Scheduled Payment Consent endpoint describes how business accounts will see a different option in the consent flow because of their ability to have multiple accounts in the same currency.

Personal accounts

To create a personal account, you'll have to generate one in the developer portal under the sandbox section. Create personal sandbox account in Developer Portal

Business accounts

Creating a business account in the sandbox environment is as easy as clicking the button below and following the steps shown on the site.

Create business sandbox account

Registering an application

JWT Header

{
  "kid": "test-kid",
  "alg": "PS256"
}

JWT Payload

{
  "iss": "test-iss",
  "iat": 1591352490,
  "exp": 1591356090,
  "aud": "https://revolut.com",
  "scope": ["openid", "payments", "accounts", "fundsconfirmations"],
  "redirect_uris": ["http://url/one"],
  "token_endpoint_auth_method": "tls_client_auth",
  "application_type": "web",
  "id_token_signed_response_alg": "PS256",
  "request_object_signing_alg": "PS256",
  "tls_client_auth_dn": "test-dn",
  "software_statement": "ewogICJhbGciOiAibm9uZSIKfQ.ewogICJvcmdfaWQiOiAiNzc3NTgwMDAwMTAzVUF2QUFNIiwKICAib3JnX25hbWUiOiAiUmV2b2x1dCBUUFAiLAogICJzb2Z0d2FyZV9jbGllbnRfbmFtZSI6ICJSZXZvbHV0IFRQUCIsCiAgIm9yZ19qd2tzX2VuZHBvaW50IjogImh0dHA6Ly9vcGVuYmFua2luZy5vcmcudWsvZW5kcG9pbnQiLAogICJzb2Z0d2FyZV9yZWRpcmVjdF91cmlzIjogWwogICAgImh0dHA6Ly91cmwvb25lIgogIF0KfQ."
}

Register client

curl -X POST https://sandbox-oba.revolut.com/register
curl -X POST https://oba.revolut.com/register

Now that we have our sandbox developer account setup, we can create an application using Dynamic Client Registration (DCR). The process involves creating a JWT with all the details related to your application. On the right side there is an example of what your JWT Header and Payload should look like.

If you are unfamiliar with JWT's and how they work, this may look daunting to you – don’t worry we'll break down exactly how it works.

Open Id Configuration URLs

We use OpenID Connect so you'll have to make sure to include the openid scope in your JWT payload. For more information on our configuration, take a look at the respective OpenID configurations.

JWT Header

The header plays the role of defining what will be used to sign the JWT. The kid, or Key ID, is meant to give context of which key was used for you JSON Web Key (JWK).

The alg key in the header represents the algorithm used to sign the JWT. The only algorithm supported with the Open Banking API is PS256.

Once the header is created, it is then Base64Url encoded to create the first part of the JWT.

JWT Payload

The JWT Payload is a set of claims that define what you need. A lot of the claims are pre-defined or dependent on what your application requires. For a full list of claims you can take a look at the Dynamic Client Registration API reference.

certificates in DER format:

openssl x509 -in /path/to/your/cert.der -inform der -noout -subject -nameopt RFC2253

The main claim that you need to specificy based on the certificates is tls_client_auth_dn which is based on the QsealC signing cert you can find in the developer portal.

Once you have the signing cert, you can run the command on the right to generate the tls_client_auth_dn that will be used in the JWT payload.

Creating a valid JWT

Now that we have the JWT header and payload, we can start stitching them together to make the JWT signature.

The JWT signature is created by encrypting the Base64Url encoded JWT header and payload and concatenating with a (.) period.

Then, concatenating (using period '.' characters) base64url encoded header, payload and signature will get you the complete JWT.

To confirm that you in fact have a valid JWT, you can use this handy JWT tool by entering the JWT you just created and confirming the values match the JWT header and payload you created for the JWT. At the bottom right you should be able to add your key to verify the signature. If everything is correct, the debugger should tell you that the JWT is valid.

Authentication and Authorization

Authorize consent

https://sandbox-oba.revolut.com/ui/index.html
https://oba.revolut.com/ui/index.html

The last step before we make our first API request is getting consent from the user to use their account. We can use the redirect url on the right to direct them to that flow.

Get access token

curl -X POST https://sandbox-oba-auth.revolut.com/token
curl -X POST https://oba-auth.revolut.com/token

Once they give you access, you can request a token using the /token endpoint.

Create user consent

curl --location --request POST 'https://sandbox-oba.revolut.com/account-access-consents
' \
--header 'x-fapi-financial-id: <your-financial-id>' \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data-raw '{
    "Data": {
        "Permissions": [
            "ReadAccountsBasic"
        ],
        "ExpirationDateTime": "2020-12-02T00:00:00+00:00",
        "TransactionFromDateTime": "2020-09-03T00:00:00+00:00",
        "TransactionToDateTime": "2020-12-03T00:00:00+00:00"
    },
    "Risk": {}
}'
curl --location --request POST 'https://oba.revolut.com/account-access-consents
' \
--header 'x-fapi-financial-id: <your-financial-id>' \
--header 'Authorization: Bearer <your-token>' \
--header 'Content-Type: application/json' \
--data-raw '
  {
    "Data": {
        "Permissions": [
            "ReadAccountsBasic"
        ],
        "ExpirationDateTime": "2020-12-02T00:00:00+00:00",
        "TransactionFromDateTime": "2020-09-03T00:00:00+00:00",
        "TransactionToDateTime": "2020-12-03T00:00:00+00:00"
    },
    "Risk": {}
}'

Now that you have an authorization token from the last step, you can initiate a consent for the user to complete.

On successful completion of the consent flow, you'll receive a response that describes the consent ID, whether the consent was authorized by the user and the permissions granted -- among other details that are listed in the API reference.

Your first API request!

Get list of accounts

curl -X GET https://sandbox-oba.revolut.com/accounts
curl -X GET https://oba.revolut.com/accounts

Response

{
  "Data": {
    "Account": [
      {
        "AccountId": "A1086696-D134-472D-B83E-A3F4D201C058",
        "Currency": "GBP",
        "AccountType": "Personal",
        "AccountSubType": "CurrentAccount",
        "Nickname": "Bills",
        "Account": [
          {
            "SchemeName": "UK.OBIE.SortCodeAccountNumber",
            "Identification": "80200110203345",
            "Name": "Mr Kevin",
            "SecondaryIdentification": "00021"
          }
        ]
      }
    ]
  },
  "Links": {
    "Self": "https://oba.revolut.com/accounts/"
  },
  "Meta": {
    "TotalPages": 1
  }
}

Now that everything is in place, you'll be able to make requests to the API. To verify that everything is running properly, you can make a request to the accounts endpoint and see the accounts the user has access to.

Next steps

This quickstart is just the tip of the iceberg. There's much functionality you can unlock by exploring this documentation. We recommend you take some time to check out the various endpoints to see what's possible with the Open Banking API.

As we continue to grow our developer community and refine our developer experience, we encourage you to get involved.

Usage and limits

In order to ensure safe and fair resource sharing, we define the following usage limits:

Please make sure to stay under this limit. Should you estimate this limit to be a problem for your use case of our API, please reach out to us directly.

Glossary

For the complete list of Open Banking terms, we recommend viewing the official glossary.

Name Term Definition
TPP Third Party Provider Third Party Providers are organisations or natural persons that use APIs developed to Standards to access customer’s accounts, in order to provide account information services and/or to initiate payments. Third Party Providers are either/both Payment Initiation Service Providers (PISPs) and/or Account Information Service Providers (AISPs).
AISP Account Information Service Provider An Account Information Service provides account information services as an online service to provide consolidated information on one or more payment accounts held by a payment service user with one or more payment service provider(s).
ASPSP Account Servicing Payment Service Provider Account Servicing Payment Service Providers provide and maintain a payment account for a payer as defined by the PSRs and, in the context of the Open Banking Ecosystem are entities that publish Read/Write APIs to permit, with customer consent, payments initiated by third party providers and/or make their customers’ account transaction data available to third party providers via their API end points.

Identification and Authentication

Identification using your valid eIDAS certificate

For businesses that are a regulated third party provider (TPP) in one of the European Union (EU) member states, it is possible to use valid eIDAS QWAC certificates from any trusted QTSPs listed at https://webgate.ec.europa.eu/tl-browser/#/ to register your application/client. If you have any issues onboarding with eIDAS, please contact us and we will try to help.

Identification using your Open Banking certificates

If you have enrolled as a third party provider (TPP) on the UK open banking directory using your eIDAS certificate, you can then access our API using the following OB certificates: OBWAC (Open Banking QWAC-like certificates), OBSEAL (Open Banking QSEAL-like certificates) and OB non-eIDAS like certificates for transport and signing. OB certificates can be used to connect to customers of Revolut Ltd (UK).

In order to delete an Application you may use the DELETE registration endpoint. The DELETE endpoint is implemented as it is described in the official documentation.

Dynamic Client Registration

Register client

curl -X POST https://sandbox-oba.revolut.com/register
curl -X POST https://oba.revolut.com/register

In order to create an Application you will need to use Dynamic Registration.

The register endpoint is implemented as it is described in the official documentation.

Registration request

Registration request should satisfy the following format:

Example JWT header

{
  "kid": "test-kid",
  "alg": "PS256"
}
JWT Header Format Description Required
kid String key ID of a public key from JWKS file Yes
alg String signing algorithm, currently only PS256 is supported Yes

Example JWT payload

{
  "iss": "test-iss",
  "iat": 1591352490,
  "exp": 1591356090,
  "aud": "https://revolut.com",
  "scope": ["openid", "payments", "accounts", "fundsconfirmations"],
  "redirect_uris": ["http://url/one"],
  "token_endpoint_auth_method": "tls_client_auth",
  "application_type": "web",
  "id_token_signed_response_alg": "PS256",
  "request_object_signing_alg": "PS256",
  "tls_client_auth_dn": "test-dn",
  "software_statement": "ewogICJhbGciOiAibm9uZSIKfQ.ewogICJvcmdfaWQiOiAiNzc3NTgwMDAwMTAzVUF2QUFNIiwKICAib3JnX25hbWUiOiAiUmV2b2x1dCBUUFAiLAogICJzb2Z0d2FyZV9jbGllbnRfbmFtZSI6ICJSZXZvbHV0IFRQUCIsCiAgIm9yZ19qd2tzX2VuZHBvaW50IjogImh0dHA6Ly9vcGVuYmFua2luZy5vcmcudWsvZW5kcG9pbnQiLAogICJzb2Z0d2FyZV9yZWRpcmVjdF91cmlzIjogWwogICAgImh0dHA6Ly91cmwvb25lIgogIF0KfQ."
}

NOTE: You will need a valid JWT signature to register your client. You can debug your JWS header and payload using the official debug tool.

JWT payload Format Description REQUIRED
iss String identifies the principal that issued the JWT Yes
iat Numeric identifies the time at which the JWT was issued Yes
exp Numeric JWT expiration time Yes
aud String identifies the recipients that the JWT is intended for Yes
scope String[] list of scopes, supported scopes are openid (required), accounts, payments, fundsconfirmations Yes
redirect_uris String[] list of allowed redirect URLs Yes
token_endpoint_auth_method String currently only tls_client_auth is supported Yes
application_type String application type Yes
id_token_signed_response_alg String signing algorithm, currently only PS256 is supported Yes
request_object_signing_alg String signing algorithm, currently only PS256 is supported Yes
tls_client_auth_dn String claim MUST contain the DN of the certificate that the TPP will use, how to obtain the DN of your certificate is described in next paragraph Yes
software_statement String software statement assertion issued by the issuer in JWT format Yes
Open Banking software statement

If you are registering with Open Banking certificate, you should use the software statement signed by Open Banking which you can obtain from Directory

Self-signed software statement

In order to directly register with eIDAS certificate, it’s possible to use a self-signed software statement. In such case software statement should satisfy the following format:

Example self-signed software statement header

{
  "alg": "none"
}
SSA header claim Description Required Schema
alg none value has to be used to indicate self-signed software statement Yes String

Example self-signed software statement payload

{
  "org_name": "Revolut TPP",
  "software_client_name": "Revolut TPP",
  "org_jwks_endpoint": "http://openbanking.org.uk/endpoint",
  "software_redirect_uris": ["http://url/one"]
}
SSA payload claim Description Required Schema
org_jwks_endpoint a JWKS endpoint, this endpoint has to contain a signing key (QSealC) matching with a kid provided in JWT header of the registration request Yes URL
org_name a name of a software (shown in the UI), alternatively software_client_name can be used Yes String
software_client_name a name of a software (shown in the UI) Yes String
software_redirect_uris a list of allowed redirect URLs, has to contain all redirect URLs from JWT redirect_uris claim Yes URL[]

Signature of self-signed software statement should be an empty string.

JWKS file format

JWKS (JWK Set) is a JSON data structure that represents a set of JWKs. A JSON Web Key (JWK) is a (JSON) data structure that represents a cryptographic key. Mandatory JWK parameters are described below.

JWK mandatory fields Description
kid (key ID) is used to match a specific key
kty identifies the cryptographic algorithm family used with the key
e contains the exponent value for the RSA public key, represented as a Base64urlUInt-encoded value
n contains the modulus value for the RSA public key, represented as a Base64urlUInt-encoded value
use identifies the intended use of the public key (should always be set to sig)

Certificate DN for using in registration request

certificates in DER format:

openssl x509 -in /path/to/your/cert.der -inform der -noout -subject -nameopt RFC2253

Certificates in PEM format:

openssl x509 -in /path/to/your/cert.pem -inform pem -noout -subject -nameopt RFC2253

Use the commands to the right to obtain the DN from your certificates in either DER or PEM formats.

Updating a client

Update a Client

curl -X PUT https://sandbox-oba.revolut.com/register/17b2738f-26b1-46f9-a979-debbf1f39365
curl -X PUT https://oba.revolut.com/register/17b2738f-26b1-46f9-a979-debbf1f39365

Making a PUT request to the register endpoint allows you to update certain info for an existing client. You'll need to provide the Client ID as a parameter to repersent which client you want to update along with the access token in the request header. In the body you can pass the updated JWT for the specified client. For simplicity, you can use the same JWT you created for the registration request but with the updated fields as any additional fields will be ignored.

Fields for updating client
Client Property Corresponding JWT field
Application name org_name or software_client_name in respect to which field is present in the SSA
Redirect URIs redirect_uris field in the SSA
JWKS URL org_jwks_endpoint field in the SSA
Distinguished name tls_client_auth_dn field in the JWT payload

Deleting a client

Delete a Client

curl -X DELETE https://sandbox-oba.revolut.com/register/17b2738f-26b1-46f9-a979-debbf1f39365
curl -X DELETE https://oba.revolut.com/register/17b2738f-26b1-46f9-a979-debbf1f39365

Making a DELETE request to the register endpoint allows you to request deletion of an existing client. You need to provide the Client ID and access token to make a succesful request. On a successful request, you'll recieve a JSON payload that matched the Client ID of the client that client-credentials grant access token was issued. In the case that the Client Id is unknown, you will recieve a JSON payload with an Unauthorized status code.

In the case that you're having issues deleting a client, don't hesitate to reach out to support.

Open Banking Security Profile

We use OpenID Connect (OIDC) as a way to verify a client's identity. For OIDC, the open banking security profile must exist where you as the TPP is certified so we can correctly identify each participant. Only after you have certification can you use these endpoints -- unless explicitly stated. If you're interested in learning more about the Open Banking security profile, you can see the implementers draft on the official documentation.

Authorization Endpoint

Authorize consent

https://sandbox-oba.revolut.com/ui/index.html
https://oba.revolut.com/ui/index.html

The authorization flow redirects the user to the revolut login screen, where they can securely enter their credentials. As you continue to explore the API, you will also see how users are redirected to give consent for their accounts in a similar fashion.

Token Endpoint

As with the any typical OAuth 2.0 flow, there is the need to have an access token which you will need to supplement with each request. Open Banking specification for more information about the semantics of this API.

Get access token

curl -X POST https://sandbox-oba-auth.revolut.com/token
curl -X POST https://oba-auth.revolut.com/token

/token endpoint served via Revolut authorization server. This endpoint requires client certificate authentication for MATLS.

API References

Account and Transactions

Open Banking Account and Transaction API is implemented as specified in the official documentation

The Interfaces already implemented are below. We continue implementing other endpoints (mandatory endpoints first). We will be updating this documentation as we progress.

Reject or revoke Consent

curl -X DELETE https://sandbox-oba.revolut.com/account-access-consents/{consent-id}
curl -X DELETE https://oba.revolut.com/account-access-consents/{consent-id}

This endpoint:

Get consent details

curl -X GET https://sandbox-oba.revolut.com/account-access-consents/{consent-id}
curl -X GET https://oba.revolut.com/account-access-consents/{consent-id}

This endpoint returns consent details as it is described in the official documentation.

Create consent

curl -X POST https://sandbox-oba.revolut.com/account-access-consents
curl -X POST https://oba.revolut.com/account-access-consents

Request:

{
  "Data": {
    "Permissions": [
      "ReadAccountsBasic",
      "ReadAccountsDetail",
      "ReadBalances",
      "ReadBeneficiariesBasic",
      "ReadBeneficiariesDetail",
      "ReadDirectDebits",
      "ReadScheduledPaymentsBasic",
      "ReadScheduledPaymentsDetail",
      "ReadStandingOrdersBasic",
      "ReadStandingOrdersDetail",
      "ReadTransactionsBasic",
      "ReadTransactionsCredits",
      "ReadTransactionsDebits",
      "ReadTransactionsDetail"
    ],
    "ExpirationDateTime": "2017-05-02T00:00:00+00:00",
    "TransactionFromDateTime": "2017-05-03T00:00:00+00:00",
    "TransactionToDateTime": "2017-12-03T00:00:00+00:00"
  },
  "Risk": {}
}

Response:

{
  "Data": {
    "ConsentId": "string",
    "CreationDateTime": "2019-08-24T14:15:22Z",
    "Status": "Authorised",
    "StatusUpdateDateTime": "2019-08-24T14:15:22Z",
    "Permissions": [
      "ReadAccountsBasic"
    ],
    "ExpirationDateTime": "2019-08-24T14:15:22Z",
    "TransactionFromDateTime": "2019-08-24T14:15:22Z",
    "TransactionToDateTime": "2019-08-24T14:15:22Z"
  },
  "Risk": {},
  "Links": {
    "Self": "http://example.com",
    "First": "http://example.com",
    "Prev": "http://example.com",
    "Next": "http://example.com",
    "Last": "http://example.com"
  },
  "Meta": {
    "TotalPages": 0,
    "FirstAvailableDateTime": "2019-08-24T14:15:22Z",
    "LastAvailableDateTime": "2019-08-24T14:15:22Z"
  }
}

Before access any data you will need to create an access consent to read data from the users profile.

To ensure that you don't recieve a 400 error make sure you do not send an empty array or an array that doesn't follow the rules of the permissions table below:

Permissions Dependencies
ReadAccountsBasic None
ReadAccountsDetail None
ReadBalances None
ReadBeneficiariesBasic None
ReadBeneficiariesDetail None
ReadDirectDebits None
ReadScheduledPaymentsBasic None
ReadScheduledPaymentsDetail None
ReadStandingOrdersBasic None
ReadStandingOrdersDetail None
ReadTransactionsBasic None
ReadTransactionsCredits ReadTransactionsBasic OR ReadTransactionsDetail
ReadTransactionsDebits ReadTransactionsBasic OR ReadTransactionsDetail
ReadTransactionsDetail None
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Revoke Consent

curl -X DELETE https://sandbox-oba.revolut.com/account-access-consents/{consent-id}
curl -X DELETE https://oba.revolut.com/account-access-consents/{consent-id}

This endpoint:

Name Located In Description Required Schema
ConsentId Path The consent ID you received after creating the consent. Yes String
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Get consent details

curl -X GET https://sandbox-oba.revolut.com/account-access-consents/{consent-id}
curl -X GET https://oba.revolut.com/account-access-consents/{consent-id}

This endpoint returns consent details as it is described in the official documentation.

Name Located In Description Required Schema
ConsentId Path The consent ID you received after creating the consent. Yes String
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Get Accounts

Get list of accounts

curl -X GET https://sandbox-oba.revolut.com/accounts
curl -X GET https://oba.revolut.com/accounts

Response

{
  "Data": {
    "Account": [
      {
        "AccountId": "A1086696-D134-472D-B83E-A3F4D201C058",
        "Currency": "GBP",
        "AccountType": "Personal",
        "AccountSubType": "CurrentAccount",
        "Nickname": "Bills",
        "Account": [
          {
            "SchemeName": "UK.OBIE.SortCodeAccountNumber",
            "Identification": "80200110203345",
            "Name": "Mr Kevin",
            "SecondaryIdentification": "00021"
          }
        ]
      }
    ]
  },
  "Links": {
    "Self": "https://oba.revolut.com/accounts/"
  },
  "Meta": {
    "TotalPages": 1
  }
}

This endpoint returns a list of the user accounts.

Request Header Parameters
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Get Account Details

Get account details

curl -X GET https://sandbox-oba.revolut.com/accounts/{account-id}
curl -X GET https://oba.revolut.com/accounts/{account-id}

Response

{
  "Data": {
    "Account": [
      {
        "AccountId": "A1086696-D134-472D-B83E-A3F4D201C058",
        "Currency": "GBP",
        "AccountType": "Personal",
        "AccountSubType": "CurrentAccount",
        "Nickname": "Bills",
        "Account": [
          {
            "SchemeName": "UK.OBIE.SortCodeAccountNumber",
            "Identification": "80200110203345",
            "Name": "Mr Kevin",
            "SecondaryIdentification": "00021"
          }
        ]
      }
    ]
  },
  "Links": {
    "Self": "https://oba.revolut.com/accounts/"
  },
  "Meta": {
    "TotalPages": 1
  }
}

This endpoint retrieves individual account details.

Request Parameters
Name Located In Description Required Schema
AccountId Path The Account ID of the user. Yes String
Request Header Parameters
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Get Account Balances

Get account balances

curl -X GET https://sandbox-oba.revolut.com/accounts/{account-id}/balances
curl -X GET https://oba.revolut.com/accounts/{account-id}/balances

Response

{
  "Data": {
    "Balance": [
      {
        "AccountId": "A1086696-D134-472D-B83E-A3F4D201C058",
        "Amount": {
          "Amount": "11.00",
          "Currency": "GBP"
        },
        "CreditLine": {
          "Included": false,
          "Type": "Available",
          "Amount": {
            "Amount": "150.23",
            "Currency": "GBP"
          }
        },
        "CreditDebitIndicator": "Debit",
        "Type": "InterimAvailable",
        "DateTime": "2017-05-02T00:00:00+00:00"
      }
    ]
  },
  "Links": {
    "Self": "https://oba.revolut.com/accounts/A1086696-D134-472D-B83E-A3F4D201C058/balances"
  },
  "Meta": {
    "TotalPages": 1
  }
}

This endpoint retrieves balances for an account.

Request Parameters
Name Located In Description Required Schema
AccountId Path The Account ID of the user. Yes String
Request Header Parameters
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Get Account Transactions

Get account transactions

curl -X GET https://sandbox-oba.revolut.com/accounts/{account-id}/transactions
curl -X GET https://oba.revolut.com/accounts/{account-id}/transactions

Response

{
  "Data": {
    "Transaction": [
      {
        "AccountId": "A1086696-D134-472D-B83E-A3F4D201C058",
        "Amount": {
          "Amount": "25.00",
          "Currency": "GBP"
        },
        "Balance": {
          "Amount": {
            "Amount": "11.00",
            "Currency": "GBP"
          },
          "CreditDebitIndicator": "Debit",
          "Type": "InterimBooked"
        },
        "BookingDateTime": "2017-05-02T00:00:00+00:00",
        "ChargeAmount": {
          "Amount": "1.00",
          "Currency": "GBP"
        },
        "CreditDebitIndicator": "Debit",
        "ProprietaryBankTransactionCode": {
          "Code": "ATM",
          "Issuer": "Revolut"
        },
        "Status": "Booked",
        "TransactionId": "acd157de-f877-44f1-9190-58051bec3815",
        "TransactionInformation": "description",
        "SupplementaryData": {
          "UserComments": "Transaction"
        }
      }
    ]
  }
}

This endpoint retrieves the recent transactions for an account.

Request Header Parameters
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String
Additional response fields
Field Description Format
SupplementaryData.UserComments a user provided payment comments Text

Get Account Beneficiaries

Get a list of account beneficiaries

curl -X GET https://sandbox-oba.revolut.com/accounts/{account-id}/beneficiaries
curl -X GET https://oba.revolut.com/accounts/{account-id}/beneficiaries

Response

{
  "Data": {
    "Beneficiary": [
      {
        "AccountId": "c68a6bb5-a63c-47cd-86c8-16a0a6890f09",
        "BeneficiaryId": "beb87058-2ded-4593-b7b6-f816c8539ee5",
        "CreditorAccount": {
          "SchemeName": "UK.OBIE.IBAN",
          "Identification": "GB60LTZD85909994434483",
          "Name": "testFirstName testLastName"
        }
      },
      {
        "AccountId": "c68a6bb5-a63c-47cd-86c8-16a0a6890f09",
        "BeneficiaryId": "c1eb6796-cf38-41d6-ba75-8bdbaf9ccbe7",
        "CreditorAccount": {
          "SchemeName": "UK.OBIE.SortCodeAccountNumber",
          "Identification": "55887712345678",
          "Name": "testFirstName testLastName"
        }
      }
    ]
  },
  "Links": {
    "Self": "https://oba.revolut.com/accounts/c68a6bb5-a63c-47cd-86c8-16a0a6890f09/beneficiaries"
  },
  "Meta": {
    "TotalPages": 1
  }
}

This endpoint returns the list of beneficiaries for a specific user account.

Request Parameters
Name Located In Description Required Schema
AccountId Path The Account ID of the user. Yes String
Request Header Parameters
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Get Account Direct Debits

Get a list of account direct debits

curl -X GET https://sandbox-oba.revolut.com/accounts/{account-id}/direct-debits
curl -X GET https://oba.revolut.com/accounts/{account-id}/direct-debits

Response

{
  "Data": {
    "DirectDebit": [
      {
        "AccountId": "5b81470d-a24b-491c-b6f8-ae4f27cb0447",
        "DirectDebitId": "f36e19d2-e870-438b-b4f5-32ac9a05d375",
        "MandateIdentification": "testIdentification",
        "DirectDebitStatusCode": "Active",
        "Name": "testName",
        "PreviousPaymentAmount": {
          "Amount": "12.00",
          "Currency": "GBP"
        }
      },
      {
        "AccountId": "5b81470d-a24b-491c-b6f8-ae4f27cb0447",
        "DirectDebitId": "ffaa70b6-d94c-479e-b5c4-b570036280ba",
        "MandateIdentification": "someOtherIdentification",
        "DirectDebitStatusCode": "Inactive",
        "Name": "someOtherName",
        "PreviousPaymentAmount": {
          "Amount": "0.43",
          "Currency": "GBP"
        }
      }
    ]
  },
  "Links": {
    "Self": "https://oba.revolut.com/accounts/5b81470d-a24b-491c-b6f8-ae4f27cb0447/direct-debits"
  },
  "Meta": {
    "TotalPages": 1
  }
}

This endpoint returns the list of direct debits for a specific user account.

Request Parameters
Name Located In Description Required Schema
AccountId Path The Account ID of the user. Yes String
Request Header Parameters
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Get Account Standing Orders

Get a list of account standing orders

curl -X GET https://sandbox-oba.revolut.com/accounts/{account-id}/standing-orders
curl -X GET https://oba.revolut.com/accounts/{account-id}/standing-orders

Response

{
  "Data": {
    "StandingOrder": [
      {
        "AccountId": "5148bfeb-8d52-4fe3-bf3c-a56897160040",
        "StandingOrderId": "00ef453c-8ca8-44d7-917a-15b54b24b8e2",
        "Frequency": "IntrvlWkDay:01:05",
        "Reference": "Pocket money for Damien",
        "FirstPaymentDateTime": "2020-04-10T00:00",
        "StandingOrderStatusCode": "Inactive"
      },
      {
        "AccountId": "5148bfeb-8d52-4fe3-bf3c-a56897160040",
        "StandingOrderId": "7dd9ee20-8e5d-41cb-b785-ef1b8ab5d6bb",
        "Frequency": "EvryDay",
        "Reference": "Pocket money for Damien",
        "FirstPaymentDateTime": "2020-04-10T00:00",
        "StandingOrderStatusCode": "Active"
      }
    ]
  },
  "Links": {
    "Self": "https://oba.revolut.com/accounts/5148bfeb-8d52-4fe3-bf3c-a56897160040/standing-orders"
  },
  "Meta": {
    "TotalPages": 1
  }
}

This endpoint returns the list of standing orders for a specific user account.

Request Parameters
Name Located In Description Required Schema
AccountId Path The Account ID of the user. Yes String
Request Header Parameters
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Expenses

Get Expenses

Get a list of all expenses

curl -X GET https://sandbox-oba.revolut.com/expenses
curl -X GET https://oba.revolut.com/expenses

List all expenses related to the account with the option to specify a beginning and ending date using a dateTime format

Parameters
Name Located in Description Required Schema
from query All expenses created after this point in time will be returned (by default creation date of first expense) No dateTime
to query All expenses created up untill this point in time will be returned (default is now) No dateTime
Request Header Parameters
Name Description Required Schema
x-fapi-financial-id The unique id of the ASPSP to which the request is issued. The unique id will be issued by OB. Yes String
x-fapi-customer-last-logged-time The time when the PSU last logged in with the TPP. All dates in the HTTP headers are represented as RFC 7231 Full Dates. An example is below: Sun, 10 Sep 2017 19:43:31 UTC No String
x-fapi-customer-ip-address The PSU's IP address if the PSU is currently logged in with the TPP. No String
x-fapi-interaction-id An RFC4122 UID used as a correlation id. No String
Authorization An Authorisation Token as per https://tools.ietf.org/html/rfc6750 Yes String
x-customer-user-agent Indicates the user-agent that the PSU is using. No String

Response

{
  "Data": {
    "Expenses": [
      {
        "ExpenseId": "69606e15-cd93-4bd1-a7aa-c22fc5bb421e",
        "TransactionId": "453b244b-adba-4716-8a9f-09d8189b7724",
        "Amount": "20.00",
        "Currency": "GBP",
        "CreationDateTime": "2020-08-14T13:16:15.425157Z",
        "Description": "Payment description",
        "Receipts": [
          {
            "Id": "address453b244b-adba-4716-8a9f-09d8189b7724",
            "ContentType": "png"
          },
          {
            "Id": "2address453b244b-adba-4716-8a9f-09d8189b7724",
            "ContentType": "jpeg"
          }
        ],
        "Category": {
          "Id": "cada8c04-1ff6-47b2-b67b-593ee9d8bb2a",
          "Name": "categoryName"
        },
        "TaxRate": {
          "Name": "taxRateName",
          "Type": "taxRateType",
          "Percentage": "10"
        }
      },
      {
        "ExpenseId": "38ed34ed-af82-48b7-9622-beab1d49b266",
        "TransactionId": "6d74b119-6d56-4fb7-a844-3d1a10742ed0",
        "Amount": "50.00",
        "Currency": "GBP",
        "CreationDateTime": "2020-08-14T13:16:15.34771Z",
        "Description": "Txn description",
        "Merchant": "Merchant",
        "Receipts": [
          {
            "Id": "address6d74b119-6d56-4fb7-a844-3d1a10742ed0",
            "ContentType": "png"
          },
          {
            "Id": "2address6d74b119-6d56-4fb7-a844-3d1a10742ed0",
            "ContentType": "jpeg"
          }
        ],
        "Category": {
          "Id": "c112db3f-ddfd-451c-875b-5e06b78b55bf",
          "Name": "categoryName"
        },
        "TaxRate": {
          "Name": "taxRateName",
          "Type": "taxRateType",
          "Percentage": "10"
        }
      }
    ]
  },
  "Links": { "Self": "https://oba.revolut.com/expenses" },
  "Meta": { "TotalPages": 1 }
}
Responses
Code Description
200 List of business expenses
default Unexpected error

Get Receipt Information

Get a list of all expenses

curl -X GET https://sandbox-oba.revolut.com/transactions/{ TransactionId}/receipt/{ ReceiptId }
curl -X GET https://oba.revolut.com/transactions/{ TransactionId}/receipt/{ ReceiptId }

The transactions endpoint allows you to fetch the actual reciept tied to a transaction and receipt ID

Parameters
Name Located in Description Required Schema
TransactionId path The id of the transaction for which {ReceiptId} should be retrieved Yes string (UUID)
ReceiptId path Id of a receipt Yes string

Response

This response is a stream of bytes.
Responses
Code Description
200 Receipt
default Unexpected error
Security
Security Schema Scopes
AccessToken read

Payment Initiation

Create Domestic Payment Consent

curl -X POST https://sandbox-oba.revolut.com/domestic-payment-consents
curl -X POST https://oba.revolut.com/domestic-payment-consents

Request:

{
  "Data": {
    "Initiation": {
      "InstructionIdentification": "ID412",
      "EndToEndIdentification": "E2E123",
      "InstructedAmount": {
        "Amount": "55.00",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11223321325698",
        "Name": "Receiver Co."
      },
      "RemittanceInformation": {
        "Reference": "ReceiverRef",
        "Unstructured": "Shipment fee"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "EcommerceGoods",
    "MerchantCategoryCode": "5967",
    "MerchantCustomerIdentification": "1238808123123",
    "DeliveryAddress": {
      "AddressLine": ["7"],
      "StreetName": "Apple Street",
      "BuildingNumber": "1",
      "PostCode": "E2 7AA",
      "TownName": "London",
      "Country": "UK"
    }
  }
}

This endpoint is for creating payment consent as described in Open Banking API documentation. Domestic payments are used for local payments in the local currency of the user. Revolut supports only GBP as local in the UK and EUR in Single Euro Payments Area (SEPA) countries.

Since Revolut Business users can have multiple accounts in the same currency, we allow them to choose which account they want to be charged in the consent authorization UI.

As part of the API requirement you must pass x-jws-signature header in your request. The signature must be generated from the request body with the TPP signing key that is specified in the JWS header. As specified in the documentation, you must only pass head and signature in <jws_head>..<jws_signature> format.

Get Domestic Payment Consent details

curl -X GET https://sandbox-oba.revolut.com/domestic-payment-consents/{consent_id}
curl -X GET https://oba.revolut.com/domestic-payment-consents/{consent_id}

Response

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Status": "AwaitingAuthorisation",
    "CreationDateTime": "2018-05-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2018-05-05T15:15:13+00:00",
    "Initiation": {
      "InstructionIdentification": "ID412",
      "EndToEndIdentification": "E2E123",
      "InstructedAmount": {
        "Amount": "55.00",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11223321325698",
        "Name": "Receiver Co."
      },
      "RemittanceInformation": {
        "Reference": "ReceiverRef",
        "Unstructured": "Shipment fee"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "EcommerceGoods",
    "MerchantCategoryCode": "5967",
    "MerchantCustomerIdentification": "1238808123123",
    "DeliveryAddress": {
      "AddressLine": ["7"],
      "StreetName": "Apple Street",
      "BuildingNumber": "1",
      "PostCode": "E2 7AA",
      "TownName": "London",
      "Country": "UK"
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/domestic-payment-consents/14083aa6-3f22-495d-a9e7-75abd118d8e9"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns consent details as it is described in the official documentation.

Get Domestic Payment Funds Confirmation

Get Funds Confirmation

curl -X GET https://sandbox-oba.revolut.com/domestic-payment-consents/{consent_id}/funds-confirmation
curl -X GET https://oba.revolut.com/domestic-payment-consents/{consent_id}/funds-confirmation

This endpoint allows for the checking of funds with the given consent. This endpoint returns successful only if the user has authorized the related consent.

Response

{
  "Data": {
    "FundsAvailableResult": {
      "FundsAvailableDateTime": "2017-06-05T15:15:23+00:00",
      "FundsAvailable": true
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/domestic-payment-consents/14083aa6-3f22-495d-a9e7-75abd118d8e9/funds-confirmation"
  },
  "Meta": {}
}

Create Domestic Payment

Create Domestic Payment

curl -X POST https://sandbox-oba.revolut.com/domestic-payments
curl -X POST https://oba.revolut.com/domestic-payments

Request:

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Initiation": {
      "InstructionIdentification": "ID412",
      "EndToEndIdentification": "E2E123",
      "InstructedAmount": {
        "Amount": "55.00",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11223321325698",
        "Name": "Receiver Co."
      },
      "RemittanceInformation": {
        "Reference": "ReceiverRef",
        "Unstructured": "Shipment fee"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "EcommerceGoods",
    "MerchantCategoryCode": "5967",
    "MerchantCustomerIdentification": "1238808123123",
    "DeliveryAddress": {
      "AddressLine": ["7"],
      "StreetName": "Apple Street",
      "BuildingNumber": "1",
      "PostCode": "E2 7AA",
      "TownName": "London",
      "Country": "UK"
    }
  }
}

As it is defined in the Open Banking Specifications, /Data/Initiation and /Data/Risk sections of the request must be an exact match for the related consent passed in ConsentId.

Get Domestic Payment

Get Domestic Payment details

curl -X GET https://sandbox-oba.revolut.com/domestic-payments/{payment_id}
curl -X GET https://oba.revolut.com/domestic-payments/{payment_id}

Response

{
  "Data": {
    "DomesticPaymentId": "a51bafa2-1b9f-466e-ae30-168672f0661c",
    "Status": "AcceptedSettlementInProcess",
    "CreationDateTime": "2017-06-05T15:15:22+00:00",
    "StatusUpdateDateTime": "2017-06-05T15:15:13+00:00",
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Initiation": {
      "InstructionIdentification": "ID412",
      "EndToEndIdentification": "E2E123",
      "InstructedAmount": {
        "Amount": "55.00",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11223321325698",
        "Name": "Receiver Co."
      },
      "RemittanceInformation": {
        "Reference": "ReceiverRef",
        "Unstructured": "Shipment fee"
      }
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/domestic-payments/a51bafa2-1b9f-466e-ae30-168672f0661c"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns state of a payment.

Create Domestic Standing Order Consent

curl -X POST https://sandbox-oba.revolut.com/domestic-satnding-order-consents
curl -X POST https://oba.revolut.com/domestic-standing-order-consents

Request:

{
  "Data": {
    "Permission": "Create",
    "Initiation": {
      "Frequency": "EvryDay",
      "Reference": "Pocket money for Damien",
      "FirstPaymentDateTime": "1976-06-06T06:06:06+00:00",
      "FirstPaymentAmount": {
        "Amount": "6.66",
        "Currency": "GBP"
      },
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11280001234567",
        "Name": "Andrea Smith"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "08080021325698",
        "Name": "Bob Clements"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  }
}

This endpoint is for creating standing order consent as described in Open Banking API documentation. Domestic Standing Orders are used for local recurring payments in the local currency of the user. Revolut supports only GBP as local in the UK and EUR in SEPA countries.

Since Revolut Business users can have multiple accounts in the same currency, we allow them to choose which account they want to be charged in the consent authorization UI.

As part of the API requirement you must pass the x-jws-signature header in your request. The signature must be generated from request body with the TPP signing key that is specified in the JWS header. As specified in the documentation, you must only pass head and signature in <jws_head>..<jws_signature> format.

We support only the following types of standing orders frequency:

Frequency Example Details
EvryDay EvryDay daily, supported only for personal accounts
IntrvlWkDay IntrvlWkDay:01:03 weekly on a specified week day, only 1 week intervals are supported
IntrvlWkDay IntrvlMnthDay:01:03 monthly on a specified day of month, only 1 month intervals are supported

Get Domestic Standing Order Consent details

curl -X GET https://sandbox-oba.revolut.com/domestic-standing-order-consents/{consent_id}
curl -X GET https://oba.revolut.com/domestic-standing-order-consents/{consent_id}

Response

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Permission": "Create",
    "Status": "AwaitingAuthorisation",
    "CreationDateTime": "2018-05-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2018-05-05T15:15:13+00:00",
    "Initiation": {
      "Frequency": "EvryDay",
      "Reference": "Pocket money for Damien",
      "FirstPaymentDateTime": "1976-06-06T06:06:06+00:00",
      "FirstPaymentAmount": {
        "Amount": "6.66",
        "Currency": "GBP"
      },
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11280001234567",
        "Name": "Andrea Smith"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "08080021325698",
        "Name": "Bob Clements"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  },
  "Links": {
    "Self": "https://oba.revolut.com/domestic-standing-order-consents/14083aa6-3f22-495d-a9e7-75abd118d8e9"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns consent details as it is described in the official documentation.

Create Domestic Standing Order

Create Domestic Standing Order

curl -X POST https://sandbox-oba.revolut.com/domestic-standing-orders
curl -X POST https://oba.revolut.com/domestic-standing-orders

Request:

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Permission": "Create",
    "Initiation": {
      "Frequency": "EvryDay",
      "Reference": "Pocket money for Damien",
      "FirstPaymentDateTime": "1976-06-06T06:06:06+00:00",
      "FirstPaymentAmount": {
        "Amount": "6.66",
        "Currency": "GBP"
      },
      "RecurringPaymentAmount": {
        "Amount": "6.66",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "08080021325698",
        "Name": "Bob Clements"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  }
}

As it is defined in the Open Banking Specifications, /Data/Initiation and /Data/Risk sections of the request must be an exact match for the related consent passed in ConsentId.

Get Domestic Standing Order

Get Domestic Standing Order

curl -X GET https://sandbox-oba.revolut.com/domestic-standing-orders/{standing_order_id}
curl -X GET https://oba.revolut.com/domestic-standing-orders/{standing_order_id}

Response

{
  "Data": {
    "DomesticStandingOrderId": "537e2fb4-7eb7-44fe-83fd-2152e360c5b3",
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Status": "InitiationCompleted",
    "CreationDateTime": "2017-06-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2017-06-05T15:15:13+00:00",
    "Permission": "Create",
    "Initiation": {
      "Frequency": "EvryDay",
      "Reference": "Pocket money for Damien",
      "FirstPaymentDateTime": "1976-06-06T06:06:06+00:00",
      "FirstPaymentAmount": {
        "Amount": "6.66",
        "Currency": "GBP"
      },
      "RecurringPaymentAmount": {
        "Amount": "6.66",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "08080021325698",
        "Name": "Bob Clements"
      }
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/domestic-standing-orders/537e2fb4-7eb7-44fe-83fd-2152e360c5b3"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns state of a standing order.

Create Domestic Scheduled Payment Consent

curl -X POST https://sandbox-oba.revolut.com/domestic-scheduled-payment-consents
curl -X POST https://oba.revolut.com/domestic-scheduled-payment-consents

Request:

{
  "Data": {
    "Permission": "Create",
    "Initiation": {
      "InstructionIdentification": "89f0a53a91ee47f6a383536f851d6b5a",
      "RequestedExecutionDateTime": "2018-08-06T00:00:00+00:00",
      "InstructedAmount": {
        "Amount": "200.00",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "08080021325698",
        "Name": "Bob Clements"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  }
}

This endpoint is for creating scheduled payment consent as described in Open Banking API documentation. Domestic Scheduled Payments are used for local scheduled payments in the local currency of the user. Revolut supports only GBP as local in the UK and EUR in SEPA countries.

Since Revolut Business users can have multiple accounts in the same currency, we allow them to choose which account they want to be charged in the consent authorization UI.

As part of the API requirement, you must pass the x-jws-signature header in your request. The signature must be generated from a request body with the TPP signing key that is specified in the JWS header. As specified in the documentation, you must only pass head and signature in <jws_head>..<jws_signature> format.

Get Domestic Scheduled Payment Consent details

curl -X GET https://sandbox-oba.revolut.com/domestic-scheduled-payment-consents/{consent_id}
curl -X GET https://oba.revolut.com/domestic-scheduled-payment-consents/{consent_id}

Response

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Permission": "Create",
    "Status": "AwaitingAuthorisation",
    "CreationDateTime": "2018-05-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2018-05-05T15:15:13+00:00",
    "Initiation": {
      "InstructionIdentification": "89f0a53a91ee47f6a383536f851d6b5a",
      "RequestedExecutionDateTime": "2018-08-06T00:00:00+00:00",
      "InstructedAmount": {
        "Amount": "200.00",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "08080021325698",
        "Name": "Bob Clements"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  },
  "Links": {
    "Self": "https://oba.revolut.com/domestic-scheduled-payment-consents/14083aa6-3f22-495d-a9e7-75abd118d8e9"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns consent details as it is described in the official documentation.

Create Domestic Scheduled Payment

Create Domestic Scheduled Payment

curl -X POST https://sandbox-oba.revolut.com/domestic-scheduled-payments
curl -X POST https://oba.revolut.com/domestic-scheduled-payments

Request:

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Initiation": {
      "InstructionIdentification": "89f0a53a91ee47f6a383536f851d6b5a",
      "RequestedExecutionDateTime": "2018-08-06T00:00:00+00:00",
      "InstructedAmount": {
        "Amount": "200.00",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "08080021325698",
        "Name": "Bob Clements"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  }
}

As it is defined in the Open Banking Specifications, /Data/Initiation and /Data/Risk sections of the request must be an exact match for the related consent passed in ConsentId.

Get Domestic Scheduled Payment

Get Domestic Scheduled Payment

curl -X GET https://sandbox-oba.revolut.com/domestic-scheduled-payments/{domestic_scheduled_payment_id}
curl -X GET https://oba.revolut.com/domestic-scheduled-payments/{domestic_scheduled_payment_id}

Response

{
  "Data": {
    "DomesticScheduledPaymentId": "537e2fb4-7eb7-44fe-83fd-2152e360c5b3",
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Status": "InitiationCompleted",
    "CreationDateTime": "2017-06-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2017-06-05T15:15:13+00:00",
    "Initiation": {
      "InstructionIdentification": "89f0a53a91ee47f6a383536f851d6b5a",
      "RequestedExecutionDateTime": "2018-08-06T00:00:00+00:00",
      "InstructedAmount": {
        "Amount": "200.00",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "08080021325698",
        "Name": "Bob Clements"
      }
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/domestic-scheduled-payments/537e2fb4-7eb7-44fe-83fd-2152e360c5b3"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns state of a domestic scheduled payment.

Create International Payment Consent

curl -X POST https://sandbox-oba.revolut.com/international-payment-consents
curl -X POST https://oba.revolut.com/international-payment-consents

Request:

{
  "Data": {
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "EndToEndIdentification": "FRESCO.21302.GFX.20",
      "InstructionPriority": "Normal",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "DE89370400440532013000",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB38REVO00996907112483",
        "Name": "Revolut LTD",
        "SecondaryIdentification": "0002"
      },
      "RemittanceInformation": {
        "Reference": "FRESCO-101",
        "Unstructured": "Internal ops code 5120101"
      },
      "ExchangeRateInformation": {
        "UnitCurrency": "GBP",
        "RateType": "Indicative"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "EcommerceGoods",
    "MerchantCategoryCode": "5967",
    "MerchantCustomerIdentification": "053598653254",
    "DeliveryAddress": {
      "AddressLine": ["Flat 7", "Acacia Lodge"],
      "StreetName": "Acacia Avenue",
      "BuildingNumber": "27",
      "PostCode": "GU31 2ZZ",
      "TownName": "Sparsholt",
      "Country": "UK"
    }
  }
}

This endpoint is for creating payment consent as described in Open Banking API documentation. International Payments are used for international SWIFT payments in all currencies supported by Revolut.

Only payments with InstructedAmount in the same currency as CurrencyOfTransfer are supported. However, we allow users to change which account they want to be charged in consent authorization UI. Even if it is in a different currency. In such a case, the response field ExchangeRateInformation will contain information about the fx rate between source account currency and CurrencyOfTransfer. In case the user doesn't have enough funds on the selected account, the consent authorisation will be rejected.

As part of the API requirement, you must pass the x-jws-signature header in your request. The signature must be generated from a request body with the TPP signing key that is specified in the JWS header. As specified in the documentation, you must only pass head and signature in <jws_head>..<jws_signature> format.

Get International Payment Consent details

curl -X GET https://sandbox-oba.revolut.com/international-payment-consents/{consent_id}
curl -X GET https://oba.revolut.com/international-payment-consents/{consent_id}

Response

{
  "Data": {
    "ConsentId": "b4206fed-5265-48ce-91af-cb7182018991",
    "Status": "AwaitingAuthorisation",
    "CreationDateTime": "2019-07-06T16:17:22+00:00",
    "StatusUpdateDateTime": "2019-07-07T13:25:22+00:00",
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "EndToEndIdentification": "FRESCO.21302.GFX.20",
      "InstructionPriority": "Normal",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "DE89370400440532013000",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB38REVO00996907112483",
        "Name": "Revolut LTD",
        "SecondaryIdentification": "0002"
      },
      "RemittanceInformation": {
        "Reference": "FRESCO-101",
        "Unstructured": "Internal ops code 5120101"
      },
      "ExchangeRateInformation": {
        "UnitCurrency": "GBP",
        "RateType": "Indicative"
      }
    },
    "ExchangeRateInformation": {
      "UnitCurrency": "GBP",
      "ExchangeRate": "1.6050",
      "RateType": "Indicative"
    }
  },
  "Risk": {
    "PaymentContextCode": "EcommerceGoods",
    "MerchantCategoryCode": "5967",
    "MerchantCustomerIdentification": "053598653254",
    "DeliveryAddress": {
      "AddressLine": ["Flat 7", "Acacia Lodge"],
      "StreetName": "Acacia Avenue",
      "BuildingNumber": "27",
      "PostCode": "GU31 2ZZ",
      "TownName": "Sparsholt",
      "Country": "UK"
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/international-payment-consents/b4206fed-5265-48ce-91af-cb7182018991"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns consent details as it is described in the official documentation.

Get Funds Confirmation

curl -X GET https://sandbox-oba.revolut.com/international-payment-consents/{consent_id}/funds-confirmation
curl -X GET https://oba.revolut.com/international-payment-consents/{consent_id}/funds-confirmation

Response

{
  "Data": {
    "FundsAvailableResult": {
      "FundsAvailableDateTime": "2019-07-06T16:16:22+00:00",
      "FundsAvailable": true
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/international-payment-consents/a0f338f1-1827-49a3-82f7-eaa3783cadb6/funds-confirmation"
  },
  "Meta": {}
}

This endpoint allows checking funds for the given consent. This endpoint returns successfully only if the user has authorized the related consent.

Create International Payment

Create International Payment

curl -X POST https://sandbox-oba.revolut.com/international-payments
curl -X POST https://oba.revolut.com/international-payments

Request:

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "EndToEndIdentification": "FRESCO.21302.GFX.20",
      "InstructionPriority": "Normal",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "DE89370400440532013000",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB38REVO00996907112483",
        "Name": "Revolut LTD",
        "SecondaryIdentification": "0002"
      },
      "RemittanceInformation": {
        "Reference": "FRESCO-101",
        "Unstructured": "Internal ops code 5120101"
      },
      "ExchangeRateInformation": {
        "UnitCurrency": "GBP",
        "RateType": "Indicative"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "EcommerceGoods",
    "MerchantCategoryCode": "5967",
    "MerchantCustomerIdentification": "1238808123123",
    "DeliveryAddress": {
      "AddressLine": ["7"],
      "StreetName": "Apple Street",
      "BuildingNumber": "1",
      "PostCode": "E2 7AA",
      "TownName": "London",
      "Country": "UK"
    }
  }
}

As it is defined in the Open Banking Specifications, /Data/Initiation and /Data/Risk sections of the request must be an exact match for the related consent passed in ConsentId.

Get International Payment

Get International Payment details

curl -X GET https://sandbox-oba.revolut.com/international-payments/{payment_id}
curl -X GET https://oba.revolut.com/international-payments/{payment_id}

Response

{
  "Data": {
    "InternationalPaymentId": "a51bafa2-1b9f-466e-ae30-168672f0661c",
    "Status": "AcceptedSettlementInProcess",
    "CreationDateTime": "2017-06-05T15:15:22+00:00",
    "StatusUpdateDateTime": "2017-06-05T15:15:13+00:00",
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "EndToEndIdentification": "FRESCO.21302.GFX.20",
      "InstructionPriority": "Normal",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "GBP"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "DE89370400440532013000",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB38REVO00996907112483",
        "Name": "Revolut LTD",
        "SecondaryIdentification": "0002"
      },
      "RemittanceInformation": {
        "Reference": "FRESCO-101",
        "Unstructured": "Internal ops code 5120101"
      },
      "ExchangeRateInformation": {
        "UnitCurrency": "GBP",
        "RateType": "Indicative"
      }
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/international-payments/a51bafa2-1b9f-466e-ae30-168672f0661c"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns a state of a payment.

Create International Standing Order Consent

curl -X POST https://sandbox-oba.revolut.com/international-satnding-order-consents
curl -X POST https://oba.revolut.com/international-standing-order-consents

Request:

{
  "Data": {
    "Permission": "Create",
    "Initiation": {
      "Frequency": "EvryDay",
      "Reference": "Pocket money for Damien",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "6.66",
        "Currency": "USD"
      },
      "FirstPaymentDateTime": "1976-06-06T06:06:06+00:00",
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB76LOYD30949301273801",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "Creditor": {
        "Name": "Bob Clements",
        "PostalAddress": {
          "AddressType": "Correspondence",
          "StreetName": "Liberty",
          "BuildingNumber": "1",
          "PostCode": "AB1 2CD",
          "TownName": "London",
          "AddressLine": ["one", "two"],
          "Country": "UK"
        }
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  }
}

This endpoint is for creating standing order consent as described in Open Banking API documentation. International Standing Orders are used for international SWIFT payments in all currencies supported by Revolut.

Only payments with InstructedAmount in the same currency as CurrencyOfTransfer are supported. However, we allow users to change which account they want to be charged in consent authorization UI. Even if it is in a different currency. In case the user doesn't have enough funds on the selected account, the consent authorisation will be rejected.

As part of the API requirement, you must pass the x-jws-signature header in your request. The signature must be generated from a request body with the TPP signing key that is specified in the JWS header. As specified in the documentation, you must only pass head and signature in <jws_head>..<jws_signature> format.

We support only the following types of standing orders frequency:

Frequency Example Details
EvryDay EvryDay daily, supported only for personal accounts
IntrvlWkDay IntrvlWkDay:01:03 weekly on a specified week day, only 1 week intervals are supported
IntrvlWkDay IntrvlMnthDay:01:03 monthly on a specified day of month, only 1 month intervals are supported

Get International Standing Order Consent details

curl -X GET https://sandbox-oba.revolut.com/international-standing-order-consents/{consent_id}
curl -X GET https://oba.revolut.com/international-standing-order-consents/{consent_id}

Response

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Permission": "Create",
    "Status": "AwaitingAuthorisation",
    "CreationDateTime": "2017-06-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2017-06-05T15:15:13+00:00",
    "Initiation": {
      "Frequency": "EvryDay",
      "Reference": "Pocket money for Damien",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "USD"
      },
      "FirstPaymentDateTime": "$startDate",
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB76LOYD30949301273801",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "Creditor": {
        "Name": "Bob Clements",
        "PostalAddress": {
          "AddressType": "Correspondence",
          "StreetName": "Liberty",
          "BuildingNumber": "1",
          "PostCode": "AB1 2CD",
          "TownName": "London",
          "AddressLine": ["one", "two"],
          "Country": "UK"
        }
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  },
  "Links": {
    "Self": "https://oba.revolut.com/international-standing-order-consents/14083aa6-3f22-495d-a9e7-75abd118d8e9"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns consent details as it is described in the official documentation.

Create International Standing Order

Create International Standing Order

curl -X POST https://sandbox-oba.revolut.com/international-standing-orders
curl -X POST https://oba.revolut.com/international-standing-orders

Request:

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "EndToEndIdentification": "FRESCO.21302.GFX.20",
      "InstructionPriority": "Normal",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "USD"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB76LOYD30949301273801",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "Creditor": {
        "PostalAddress": {
          "AddressType": "Correspondence",
          "StreetName": "Liberty",
          "BuildingNumber": "1",
          "PostCode": "AB1 2CD",
          "TownName": "London",
          "AddressLine": ["one", "two"],
          "Country": "UK"
        }
      },
      "RemittanceInformation": {
        "Reference": "FRESCO-101",
        "Unstructured": "Internal ops code 5120101"
      },
      "ExchangeRateInformation": {
        "UnitCurrency": "USD",
        "RateType": "Indicative"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  }
}

As it is defined in the Open Banking Specifications, /Data/Initiation and /Data/Risk sections of the request must be an exact match for the related consent passed in ConsentId.

Get International Standing Order

Get International Standing Order

curl -X GET https://sandbox-oba.revolut.com/international-standing-orders/{standing_order_id}
curl -X GET https://oba.revolut.com/international-standing-orders/{standing_order_id}

Response

{
  "Data": {
    "InternationalStandingOrderId": "a0f338f1-1827-49a3-82f7-eaa3783cadb6",
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "CreationDateTime": "2018-01-01T06:06:36+00:00",
    "Status": "InitiationCompleted",
    "StatusUpdateDateTime": "2018-01-01T06:36:06+00:00",
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "EndToEndIdentification": "FRESCO.21302.GFX.20",
      "InstructionPriority": "Normal",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "USD"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB76LOYD30949301273801",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "Creditor": {
        "PostalAddress": {
          "AddressType": "Correspondence",
          "StreetName": "Liberty",
          "BuildingNumber": "1",
          "PostCode": "AB1 2CD",
          "TownName": "London",
          "AddressLine": ["one", "two"],
          "Country": "UK"
        }
      },
      "RemittanceInformation": {
        "Reference": "FRESCO-101",
        "Unstructured": "Internal ops code 5120101"
      },
      "ExchangeRateInformation": {
        "UnitCurrency": "USD",
        "RateType": "Indicative"
      }
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/international-standing-orders/a0f338f1-1827-49a3-82f7-eaa3783cadb6"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns state of a standing order.

Create International Scheduled Payment Consent

curl -X POST https://sandbox-oba.revolut.com/international-scheduled-payment-consents
curl -X POST https://oba.revolut.com/international-scheduled-payment-consents

Request:

{
  "Data": {
    "Permission": "Create",
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "RequestedExecutionDateTime": "2021-08-06T00:00:00+00:00",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "6.66",
        "Currency": "USD"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB76LOYD30949301273801",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "Creditor": {
        "Name": "Bob Clements",
        "PostalAddress": {
          "AddressType": "Correspondence",
          "StreetName": "Liberty",
          "BuildingNumber": "1",
          "PostCode": "AB1 2CD",
          "TownName": "London",
          "AddressLine": ["one", "two"],
          "Country": "UK"
        }
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  }
}

This endpoint is for creating scheduled payment consent as described in Open Banking API documentation. International Scheduled Payments are used for international SWIFT payments in all currencies supported by Revolut.

Only payments with InstructedAmount in the same currency as CurrencyOfTransfer are supported. However, we allow users to change which account they want to be charged in consent authorization UI. Even if it is in a different currency. In case the user doesn't have enough funds on the selected account, the consent authorisation will be rejected.

As part of the API requirement, you must pass the x-jws-signature header in your request. The signature must be generated from a request body with the TPP signing key that is specified in the JWS header. As specified in the documentation, you must only pass head and signature in <jws_head>..<jws_signature> format.

Get International Scheduled Payment Consent details

curl -X GET https://sandbox-oba.revolut.com/international-scheduled-payment-consents/{consent_id}
curl -X GET https://oba.revolut.com/international-scheduled-payment-consents/{consent_id}

Response

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Permission": "Create",
    "Status": "AwaitingAuthorisation",
    "CreationDateTime": "2017-06-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2017-06-05T15:15:13+00:00",
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "RequestedExecutionDateTime": "2021-08-06T00:00:00+00:00",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "USD"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB76LOYD30949301273801",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "Creditor": {
        "Name": "Bob Clements",
        "PostalAddress": {
          "AddressType": "Correspondence",
          "StreetName": "Liberty",
          "BuildingNumber": "1",
          "PostCode": "AB1 2CD",
          "TownName": "London",
          "AddressLine": ["one", "two"],
          "Country": "UK"
        }
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  },
  "Links": {
    "Self": "https://oba.revolut.com/international-scheduled-payment-consents/14083aa6-3f22-495d-a9e7-75abd118d8e9"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns consent details as it is described in the official documentation.

Get Funds Confirmation

curl -X GET https://sandbox-oba.revolut.com/international-scheduled-payment-consents/{consent_id}/funds-confirmation
curl -X GET https://oba.revolut.com/international-scheduled-payment-consents/{consent_id}/funds-confirmation

Response

{
  "Data": {
    "FundsAvailableResult": {
      "FundsAvailableDateTime": "2019-07-06T16:16:22+00:00",
      "FundsAvailable": true
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/international-scheduled-payment-consents/a0f338f1-1827-49a3-82f7-eaa3783cadb6/funds-confirmation"
  },
  "Meta": {}
}

This endpoint allows checking funds for the given consent. This endpoint returns successfully only if user has authorized the related consent.

Create International Scheduled Payment

Create International Scheduled Payment

curl -X POST https://sandbox-oba.revolut.com/international-scheduled-payments
curl -X POST https://oba.revolut.com/international-scheduled-payments

Request:

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "RequestedExecutionDateTime": "2021-08-06T00:00:00+00:00",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "USD"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB76LOYD30949301273801",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "Creditor": {
        "PostalAddress": {
          "AddressType": "Correspondence",
          "StreetName": "Liberty",
          "BuildingNumber": "1",
          "PostCode": "AB1 2CD",
          "TownName": "London",
          "AddressLine": ["one", "two"],
          "Country": "UK"
        }
      },
      "RemittanceInformation": {
        "Reference": "FRESCO-101",
        "Unstructured": "Internal ops code 5120101"
      },
      "ExchangeRateInformation": {
        "UnitCurrency": "USD",
        "RateType": "Indicative"
      }
    }
  },
  "Risk": {
    "PaymentContextCode": "PartyToParty"
  }
}

As it is defined in the Open Banking Specifications, /Data/Initiation and /Data/Risk sections of the request must be an exact match for the related consent passed in ConsentId.

Get International Scheduled Payment

Get International Scheduled Payment

curl -X GET https://sandbox-oba.revolut.com/international-scheduled-payments/{scheduled_payment_id}
curl -X GET https://oba.revolut.com/international-scheduled-payments/{scheduled_payment_id}

Response

{
  "Data": {
    "InternationalScheduledPaymentId": "a0f338f1-1827-49a3-82f7-eaa3783cadb6",
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Status": "InitiationCompleted",
    "CreationDateTime": "2018-05-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2018-05-05T15:15:13+00:00",
    "Initiation": {
      "InstructionIdentification": "ACME412",
      "RequestedExecutionDateTime": "2021-08-06T00:00:00+00:00",
      "CurrencyOfTransfer": "USD",
      "InstructedAmount": {
        "Amount": "165.88",
        "Currency": "USD"
      },
      "CreditorAccount": {
        "SchemeName": "UK.OBIE.IBAN",
        "Identification": "GB76LOYD30949301273801",
        "Name": "ACME Inc",
        "SecondaryIdentification": "0002"
      },
      "Creditor": {
        "PostalAddress": {
          "AddressType": "Correspondence",
          "StreetName": "Liberty",
          "BuildingNumber": "1",
          "PostCode": "AB1 2CD",
          "TownName": "London",
          "AddressLine": ["one", "two"],
          "Country": "UK"
        }
      },
      "RemittanceInformation": {
        "Reference": "FRESCO-101",
        "Unstructured": "Internal ops code 5120101"
      },
      "ExchangeRateInformation": {
        "UnitCurrency": "USD",
        "RateType": "Indicative"
      }
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/international-scheduled-payments/a0f338f1-1827-49a3-82f7-eaa3783cadb6"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns state of a scheduled payment.

Create File Payment Consent

curl -X POST https://sandbox-oba.revolut.com/file-payment-consents
curl -X POST https://oba.revolut.com/file-payment-consents

Request:

{
  "Data": {
    "Initiation": {
      "FileType": "text/csv",
      "FileHash": "05IAiRfAhurUnWtxvqJffXo00LnkZQpfrHVLNn8m7f4=",
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11280001234567",
        "Name": "Andrea Frost"
      }
    }
  }
}

This endpoint is for creating file payment consent as described in Open Banking API documentation.

File Payments is available only for Revolut Business users.

Currently only text/csv file type is supported for File Payments.

As part of the API requirement, you must pass the x-jws-signature header in your request. The signature must be generated from a request body with the TPP signing key that is specified in the JWS header. As specified in the documentation, you must only pass head and signature in <jws_head>..<jws_signature> format.

Get File Payment Consent details

curl -X GET https://sandbox-oba.revolut.com/file-payment-consents/{consent_id}
curl -X GET https://oba.revolut.com/file-payment-consents/{consent_id}

Response

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Status": "AwaitingUpload",
    "CreationDateTime": "2018-06-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2018-06-05T15:15:13+00:00",
    "Initiation": {
      "FileType": "text/csv",
      "FileHash": "05IAiRfAhurUnWtxvqJffXo00LnkZQpfrHVLNn8m7f4=",
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11280001234567",
        "Name": "Andrea Frost"
      }
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/file-payment-consents/14083aa6-3f22-495d-a9e7-75abd118d8e9"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns consent details as it is described in the official documentation.

Upload File for File Payment Consent

curl -X POST https://sandbox-oba.revolut.com/file-payment-consents/{consent_id}/file
curl -X POST https://oba.revolut.com/file-payment-consents/{consent_id}/file

Request:

Name        ,Recipient type,Account number ,Sort code or Routing number,IBAN,BIC,Recipient bank country,Currency,Amount,Payment reference,Recipient country,State or province,Address line 1            ,Address line 2     ,City  ,Postal code
Andrea Frost,INDIVIDUAL    ,40513598       ,207409                     ,    ,   ,GB                    ,GBP     ,10    ,User comment     ,GB               ,                 ,"Revolutest LTD, Level 39",Somewhere in London,London,E14 5AB

This endpoint allows to upload a file for given file payment consent as described in Open Banking API documentation.

Only CSV files with structure as in the example are supported (whitespaces are only for display purposes).

Field Required Description
Name Yes Can contain up to 80 characters. If INDIVIDUAL recipient type is provided this field must contain first and last name separated by white space
Recipient type Yes Can be either INDIVIDUAL or COMPANY
Account number For UK transfers Must contain valid account number if provided
Sort code or Routing number For UK transfers Must contain valid sort code or routing number if provided
IBAN For SEPA transfers Must contain valid IBAN if provided
BIC For SEPA transfers Must contain valid BIC if provided
Recipient bank country Yes Must contain valid ISO 3166-1 country code
Currency Yes Must contain valid ISO 4217 currency code
Amount Yes Must match following pattern [0-9]*(\\.[0-9]*)?
Payment reference Yes Can contain up to 100 characters
Recipient country No Must contain valid ISO 3166-1 country code if provided
State or province No Can contain up to 50 characters
Address line 1 No Can contain up to 50 characters
Address line 2 No Can contain up to 50 characters
City No Can contain up to 50 characters
Postal code No Can contain up to 50 characters

Columns with optional values can be omitted in the uploaded file.

Maximum accepted file size is 10 MB.

Example UK transfer (whitespaces are only for display purposes)

Name        ,Recipient type,Account number,Sort code,Recipient bank country,Currency,Amount,Payment reference
Andrea Frost,INDIVIDUAL    ,40513598      ,207409   ,GB                    ,GBP     ,10    ,User comment

Get File for File Payment Consent

curl -X GET https://sandbox-oba.revolut.com/file-payment-consents/{consent_id}/file
curl -X GET https://oba.revolut.com/file-payment-consents/{consent_id}/file

Response

 Name,Recipient type,Account number,Sort code,Recipient bank country,Currency,Amount,Payment reference
 Andrea Frost,INDIVIDUAL,40513598,207409,GB,GBP,10,User comment

This endpoint returns file uploaded for given consent as it is described in the official documentation.

Create File Payment

Create File Payment

curl -X POST https://sandbox-oba.revolut.com/file-payments
curl -X POST https://oba.revolut.com/file-payments

Request:

{
  "Data": {
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Initiation": {
      "FileType": "text/csv",
      "FileHash": "05IAiRfAhurUnWtxvqJffXo00LnkZQpfrHVLNn8m7f4=",
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11280001234567",
        "Name": "Andrea Frost"
      }
    }
  }
}

As it is defined in the Open Banking Specifications, /Data/Initiation section of the request must be an exact match for the related consent passed in ConsentId.

Get File Payment

Get File Payment

curl -X GET https://sandbox-oba.revolut.com/file-payments/{file_payment_id}
curl -X GET https://oba.revolut.com/file-payments/{file_payment_id}

Response

{
  "Data": {
    "FilePaymentId": "a0f338f1-1827-49a3-82f7-eaa3783cadb6",
    "ConsentId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "Status": "InitiationCompleted",
    "CreationDateTime": "2018-05-05T15:15:13+00:00",
    "StatusUpdateDateTime": "2018-05-05T15:15:13+00:00",
    "Initiation": {
      "FileType": "text/csv",
      "FileHash": "05IAiRfAhurUnWtxvqJffXo00LnkZQpfrHVLNn8m7f4=",
      "DebtorAccount": {
        "SchemeName": "UK.OBIE.SortCodeAccountNumber",
        "Identification": "11280001234567",
        "Name": "Andrea Frost"
      }
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/file-payments/a0f338f1-1827-49a3-82f7-eaa3783cadb6"
  },
  "Meta": { "TotalPages": 1 }
}

This endpoint returns state of a file payment.

Get File Payment Report File

Get File Payment Report File

curl -X GET https://sandbox-oba.revolut.com/file-payments/{file_payment_id}/report-file
curl -X GET https://oba.revolut.com/file-payments/{file_payment_id}/report-file

Response

{
  "Payments": [
    {
      "Amount": {
        "Amount": "20.10",
        "Currency": "GBP"
      },
      "Reference": "Ref 1",
      "Status": "Created"
    },
    {
      "Amount": {
        "Amount": "250.00",
        "Currency": "EUR"
      },
      "Reference": "Ref 2",
      "Status": "Completed"
    },
    {
      "Amount": {
        "Amount": "1.10",
        "Currency": "GBP"
      },
      "Reference": "Ref 3",
      "Status": "Failed"
    }
  ]
}

This endpoint returns state of all payments for given file payment. Currently only JSON format is supported.

Confirmation of funds

The Open Banking Funds Confirmation API is implemented as specified in the official documentation.

Create Funds Confirmation Consent

curl -X POST https://sandbox-oba.revolut.com/funds-confirmation-consents
curl -X POST https://oba.revolut.com/funds-confirmation-consents

Request:

{
  "Data": {
    "DebtorAccount": {
      "SchemeName": "UK.OBIE.SortCodeAccountNumber",
      "Identification": "00000069994595"
    }
  }
}

This API allows the CBPII to create a new funds-confirmation-consent resource, implemented as described in the Open Banking API documentation.

Get Funds Confirmation Consent

curl -X GET https://sandbox-oba.revolut.com/funds-confirmation-consents/{consent_id}
curl -X GET https://oba.revolut.com/funds-confirmation-consents/{consent_id}

This endpoint returns consent details as it is described in the official documentation.

Delete Funds Confirmation Consent

curl -X DELETE https://sandbox-oba.revolut.com/funds-confirmation-consents/{consent_id}
curl -X DELETE https://oba.revolut.com/funds-confirmation-consents/{consent_id}

This endpoint:

Create Funds Confirmations

Create Funds Confirmation

curl -X POST https://sandbox-oba.revolut.com/funds-confirmations
curl -X POST https://oba.revolut.com/funds-confirmations

Request:

{
  "Data": {
    "ConsentId": "123456789",
    "Reference": "Purchase",
    "InstructedAmount": {
      "Amount": "20.00",
      "Currency": "GBP"
    }
  }
}

This API allows the CBPII to create a new funds-confirmation resource, and check the funds available flag in the response.

Get Funds Confirmation

Get Funds Confirmation details

curl -X GET https://sandbox-oba.revolut.com/funds-confirmations/{funds-confirmation-id}
curl -X GET https://oba.revolut.com/funds-confirmations/{funds-confirmation-id}

Response

{
  "Data": {
    "FundsConfirmationId": "14083aa6-3f22-495d-a9e7-75abd118d8e9",
    "ConsentId": "123456789",
    "CreationDateTime": "2017-06-05T15:15:22+00:00",
    "FundsAvailable": true,
    "Reference": "Purchase01",
    "InstructedAmount": {
      "Amount": "20.00",
      "Currency": "GBP"
    }
  },
  "Links": {
    "Self": "https://oba.revolut.com/funds-confirmations/14083aa6-3f22-495d-a9e7-75abd118d8e9"
  },
  "Meta": {}
}

This API fetches the already created funds confirmation resource which indicates the availability of the funds

Draft Payments

Get authorization for draft payments endpoint

Draft payments authorization URL

https://sandbox-business.revolut.com/partner-confirm?response_type=code&state=state&scope=draft_payments&client_id=your_client_id&redirect_uri=your_redirect_uri
https://business.revolut.com/partner-confirm?response_type=code&state=state&scope=draft_payments&client_id=your_client_id&redirect_uri=your_redirect_uri

Before you can start creating draft payments, you'll need to get authorisation from the user to make draft payments on their behalf. By redirecting the user to the authorisation URL,you will get authorisation in the form of an authorisation code.

Authorization URL Parameters
Paramater Description Required
scope Scope for authorization that's required from the user yes
client_id client_id for your application yes
redirect_uri One of the redirect URI's you defined during client creation yes
state A generated string to verify the response is initiated by the same user yes

Exchanging authorization code for access token

Token request via MATLS

curl -vvv --insecure --key your_private.key --cert your_transport.pem https://sandbox-mtls-auth.revolut.com/token -d "grant_type=authorization_code&code={code_from_authorization}&redirect_uri=https://your_redirect.com/revolut_redirect"
curl -vvv --key your_private.key --cert your_transport.pem https://mtls-auth.revolut.com/token -d "grant_type=authorization_code&code={code_from_authorization}&redirect_uri=https://your_redirect.com/revolut_redirect"

MATLS response

{"access_token":"oa_sand_tG6kRPb2LAYJZx1c3w1NZ7ntuscssWqsC6WkaW9jbER-E","token_type":"Bearer","expires_in":7775999}

The last step before you can create a draft payment is getting an access token. An access token can be obtained from https://mtls-auth.revolut.com/token by making a request with your private key, transport certificate and the authorisation code from the last section.

Create draft payment

Create Draft Payment

curl --location --request POST 'https://sandbox-apis.revolut.com/draft-payments' --header 'Authorization: Bearer oa_sand_tG6kRPb2LAYJZx1c3w1NZ7ntuscWqsC6WkaW9jbER-E' --header 'Content-Type: text/csv' --data @draft_payments.csv
curl --location --request POST 'https://apis.revolut.com/draft-payments' --header 'Authorization: Bearer oa_sand_tG6kRPb2LAYJZx1c3w1NZ7ntuscWqsC6WkaW9jbER-E' --header 'Content-Type: text/csv' --data @draft_payments.csv

Response

{"DraftPaymentId":"4bc0a477-2c81-4f49-bf5b-c6705bb7a6d9"}

Once you've got your access token, you can use the /draft_payments endpoint to create a draft payment on behalf of the customer. A draft payment will appear on their account, where they can approve or reject the draft payment.

You can use the same /draft_payments endpoint to make multiple draft payments by using new rows for new draft payments. For every draft payment request you make, you will have to make sure that they are using the same currency. On a successful request with multiple draft payments, you will recieve one DraftPaymentID that will represent all the draft payments associated with your request.

Parameters
Name Located in Description Required Schema
scheduledDate query All transfers in csv will be created as a scheduled payment with this date as the execution date No date in "YYYY-MM-DD" format
CSV Format
Field Required Description
Name Yes Can contain up to 80 characters. If INDIVIDUAL recipient type is provided this field must contain first and last name separated by white space
Recipient type Yes Can be either INDIVIDUAL or COMPANY
Account number For UK transfers Must contain valid account number if provided
Sort code or Routing number For UK transfers Must contain valid sort code or routing number if provided
IBAN For SEPA transfers Must contain valid IBAN if provided
BIC For SEPA transfers Must contain valid BIC if provided
Recipient bank country Yes Must contain valid ISO 3166-1 country code
Currency Yes Must contain valid ISO 4217 currency code
Amount Yes Must match following pattern [0-9]*(\\.[0-9]*)?
Payment reference Yes Can contain up to 100 characters
Recipient country No Must contain valid ISO 3166-1 country code if provided
State or province No Can contain up to 50 characters
Address line 1 No Can contain up to 50 characters
Address line 2 No Can contain up to 50 characters
City No Can contain up to 50 characters
Postal code No Can contain up to 50 characters

Columns with optional values can be omitted in the uploaded file.

Maximum accepted file size is 10 MB.

Get Draft Payment

Get Draft Payment Details

curl -X GET https://sandbox-apis.revolut.com/draft-payments/{DraftPaymentId}
curl -X GET https://apis.revolut.com/draft-payments/{DraftPaymentId}

Response

{
    "Status": "Draft",
    "Transfers": [
        {
            "InstructedAmount": {
                "Amount": "10.00",
                "Currency": "GBP"
            },
            "Reference": "User comment",
            "Status": "Created"
        }
    ]
}

By supplying a DraftPaymentID, you can request details related to a specific draft payment that has been created.

Parameters
Name Located in Description Required Schema
DraftPaymentId path The id of the draft payment Yes string

Delete an existing Draft Payment

Delete Draft Payment

curl -X DELETE https://sandbox-apis.revolut.com/draft-payments/{DraftPaymentId}
curl -X DELETE https://apis.revolut.com/draft-payments/{DraftPaymentId}

A DELETE request for a specific DraftPaymentId can be used to delete that draft payment. A draft payment can only be deleted if the user hasn't committed any actions with it (approved, executed, etc.).

Parameters
Name Located in Description Required Schema
DraftPaymentId path The id of the draft payment Yes string

API Metrics

You can view the latest API metrics for Mobile, Business and Open Banking APIs here. You can also review detailed Open Banking metrics here.

We update these reports daily and keep them for the last 90 days.





Errors

The API uses the following error codes:

CODE MEANING
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your access token is wrong.
403 Forbidden -- Access to the requested resource or action is forbidden.
404 Not Found -- The requested resource could not be found.
405 Method Not Allowed -- You tried to access an endpoint with an invalid method.
406 Not Acceptable -- You requested a format that isn't JSON.
429 Too Many Requests -- You're sending too many requests.
500 Internal Server Error -- We had a problem with our server. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.