Integrations
What it takes to connect Revolut Business to your accounts package
The API is real, well documented and free once you are on the right plan. The work is in the setup and in what you do with the transactions afterwards.
By Oscar CobbeCurrent as at 8 minute read3 sources
The plan is the first gate, and it is a hard one
Revolut publishes a Business API that will list your accounts and return your transactions. It is properly documented, it is free to use, and it does not require a third-party aggregator sitting between you and your own money.
It is not on every plan. API access is included on Grow, Scale and Enterprise. It is not included on the Basic plan, which is the free one, and there is no add-on that changes that.
This matters more than it sounds. A business on Basic cannot be connected to anything through the Business API, by us or by anybody else, and no amount of engineering gets around it. If you are reading this because you want a bank feed, the first thing to check is which plan you are on. It takes ten seconds in the app and it decides whether the rest of this page applies to you at all.
Check this before anything else
Grow or above and the API is available to you today. Basic and it is not available at all, and the honest answer is to upgrade or to leave the bank feed alone until you have a reason to.
What the connection actually involves
Revolut does not issue an API key. The setup is a certificate exchange followed by an OAuth consent, and it is deliberately more work than pasting a token into a form.
You generate a key pair on your own machine and upload the public certificate in the Business app, under APIs, Business API. Revolut gives you back a Client ID. Your application then signs a client assertion JWT with the private key, you consent to the application inside the Revolut Business app, and you exchange the resulting authorisation code for an access token against the token endpoint.
Doing this requires specific permissions on your Revolut account: Manage Integrations and Manage API under API and Integrations, and View Business under Billing. If you are not the owner of the account, somebody who is will need to grant those before you start.
The private key never leaves the machine that generated it, and the certificate you upload is a public one. That is a better arrangement than most bank integrations offer, and it is the reason the credential can be genuinely read-only and genuinely yours: you can revoke the certificate from your own settings at any moment, and whoever built the integration cannot stop you.
- 1Generate a key pair and upload the public certificate in the Business app
- 2Take the Client ID that Revolut returns
- 3Sign a client assertion JWT with the private key
- 4Consent to the application inside Revolut Business
- 5Exchange the authorisation code for an access token
Three clocks, and only one of them catches people out
A Revolut Business integration runs on three separate expiries, and confusing them is where most of the trouble comes from.
The access token lasts forty minutes. The documentation returns expires_in as 2399 seconds and states the limit in words as well. Any process that holds a token for longer than that and assumes it still works will fail, and it will fail intermittently, which is worse.
The refresh token does not expire. Revolut's documentation says so explicitly. That is unusually generous and it removes the failure that ends most bank integrations, which is a credential quietly dying at three in the morning six weeks after anybody last thought about it.
The certificate is the one with a real deadline. The command in Revolut's own guide creates it with a validity of 1825 days, which is five years. That is long enough that whoever set it up will not be the person who has to renew it, which is exactly why it should be written down on the day it is created rather than discovered on the day it stops.
| What | How long | What happens when it ends |
|---|---|---|
| Access token | 40 minutes (expires_in 2399) | Refresh it. Routine, and every request path should expect it. |
| Refresh token | Does not expire | Nothing. This is the part that usually breaks and here it does not. |
| Certificate | 1825 days as generated in Revolut's guide | The connection stops. Renewing it is a repeat of the original setup. |
Write the certificate date down
Five years is long enough to forget, and the failure arrives as a feed that silently stopped rather than as an error anybody sees. The expiry belongs in whatever you use to remember statutory dates, not in somebody's head.
What a feed is worth once it runs
Reading transactions is the easy half. A list of transactions with no categories on it is a bank statement with extra steps, and plenty of integrations stop there and call it done.
The value is in what happens after the read. Transactions matched against the invoices they settle, so the money that actually landed sits beside the money that was billed. Categories that follow the chart of accounts your bookkeeper already uses, rather than a set the software invented, because a system that invents its own categories creates a reconciliation job instead of removing one. And receipts matched to the lines they belong to, so the shoebox at the end of the quarter is empty.
Done properly, the only lines a person ever looks at are the ones no rule could place. That list being short is the whole product.
One detail worth getting right: never use a float for money
This is the most common defect in software that handles bank data, and it is invisible until it is not.
Amounts should be held as integers in the smallest unit, so 18.34 euro is stored as 1834 cent, and converted to a decimal exactly once, at the point it is printed on a screen. The reason is that binary floating point cannot represent most decimal fractions: in JavaScript, 1.005 multiplied by 100 evaluates to 100.49999999999999, so the obvious way of converting a decimal amount to cents rounds it down and loses one.
One cent per transaction sounds like nothing. It is not nothing when the total is being reconciled against a bank statement that is correct to the cent, and it is the kind of error that surfaces months later as an unexplained difference nobody can find.
Other banks, and where we have got to
Nothing above is specific to Revolut except the front door. Any bank that exposes a business or open banking API can be connected, and the matching, the categorisation and the reconciliation behind it are the same work whichever bank it is. Revolut is the one written so far because a large share of small Irish businesses bank there.
To be straight about the state of it: the integration is written and the design is settled, and no client is running it yet. Revolut puts the API on Grow and above, and the businesses we work with today are on Basic, so there has been nothing to connect it to.
That means the first build is done at cost and to a date agreed in writing, and the first client is paying in patience rather than in money. Everything else we sell is live for somebody. This one is not, and saying so here is cheaper than saying it after somebody has signed.
If you are on Grow or above
You are the account this was written for, and we would rather build it properly for one business that will tell us when it is wrong than sell it to five who will not.
Sources
Free, and the answers stay in your browser
Check whether an integration needs an assessment
A bank feed moves personal data between systems. The free check says whether that needs a written assessment before it goes live, and usually it does not.
Run the free checkA bank feed, built once and kept working
If you are on a Revolut plan that carries the API, or on another bank that exposes one, tell us what your bookkeeper does by hand every month and we will price the version where they do not.
Talk to us about the bank feedWho wrote this
Oscar Cobbe · Founder, FourWinds Digital
Writes and maintains the legal explainers on this site, and does the compliance work behind them. Every date and article number here is checked against the instrument itself before it is published, and corrected in place when the law moves.
More about how we work →Read next
Automation
Automating something that touches personal data: what has to be written down
The build is the easy half. What decides whether it survives a complaint is the five things that should have been written down before it went live.
GDPR
Do you need a DPIA? Ireland has its own list, and it is specific
Most guidance answers this with European criteria. Ireland has a published list of its own, and it is the one that decides the question here.
GDPR
You have had a data breach. What the first 72 hours require
The 72 hours runs from when you became aware, not from when you finished investigating. That is the sentence most people get wrong on the day.
Written on 26 August 2026 and accurate as at that date. This is general information about how the rules work, not legal advice on your situation. We are not solicitors and we say so when you need one.