RevolutPHP
PHP API Client and bindings for the Revolut Business API., (*1)
, (*2)
Using this PHP API Client you can interact with your:
- ๐ฐ Accounts
- ๐ข Counterparties
- ๐ธ Payments
- ๐ฐ๏ธ Payment Drafts
- ๐ Transfers
- ๐ Transactions
- ๐น Rates
- ๐ฑ Exchanges
- ๐ Webhooks, (*3)
Revolut Business API does not support - ๐งพ Invoices, (*4)
Installation
Requires PHP 7.0 or higher, (*5)
The recommended way to install revolut-php is through Composer:, (*6)
First, install Composer:, (*7)
$ curl -sS https://getcomposer.org/installer | php
Next, install the latest revolut-php:, (*8)
$ php composer.phar require sverraest/revolut-php
Finally, you need to require the library in your PHP application:, (*9)
require "vendor/autoload.php";
Development
- Run
composer test
and composer phpcs
before creating a PR to detect any obvious issues.
- Please create issues for this specific API Binding under the issues section.
-
Contact Revolut directly for official Revolut For Business API support.
Quick Start
RevolutPHP\Auth\Provider
Start by following the authentication instructions in the Revolut API docs:, (*10)
openssl genrsa -out privatecert.pem 2048
openssl req -new -x509 -key privatecert.pem -out publiccert.cer -days 1825
Paste the generated public key on the Revolut for Business API settings page, and use the private key to instantiate a new RevolutPHP\Auth\Provider
:, (*11)
$authProvider = new \RevolutPHP\Auth\Provider([
'clientId' => '{clientId}', // As shown when uploading your key
'privateKey' => 'file://{privateKeyPath}',
'redirectUri' => 'https://example.com', // The URL to redirect the user to after the authorisation step
'isSandbox' => true
]);
You can now redirect the user to the authorisation flow in the Revolut for Business app:, (*12)
$url = $authProvider->getAuthorizationUrl();
Once the user has confirmed authorisation, the user will be redirected back to the redirectUri with an authorisation code attached. You can exchange this authorisation code for an access token:, (*13)
$accessToken = $authProvider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
You can save this $accessToken
somewhere safe and pass it directly to the RevolutPHP\Client. The token is valid for 40 minutes. To request a new token after expiration, you can use the refresh token to get a new access token:, (*14)
if( $accessToken->hasExpired() ) {
$newAccessToken = $authProvider->getAccessToken('refresh_token', [
'refresh_token' => $accessToken->getRefreshToken()
]);
}
RevolutPHP\Client
If you want to get a production
client:, (*15)
use RevolutPHP\Client;
$client = new Client($accessToken);
If you want to get a sandbox
client:, (*16)
use RevolutPHP\Client;
$client = new Client($accessToken, 'sandbox');
If you want to pass additional GuzzleHTTP options:, (*17)
use RevolutPHP\Client;
$options = ['headers' => ['foo' => 'bar']];
$client = new Client($accessToken, 'sandbox', $options);
Available API Operations
The following exposed API operations from the Revolut For Business API are available using the API Client., (*18)
See below for more details about each resource., (*19)
๐ฐ Accounts, (*20)
Get all accounts, Get a specific account and get details for a specific account., (*21)
๐ข Counterparties, (*22)
Get all counterparties, get a specific counterparty, create a new counterparty and delete a counterparty., (*23)
๐ธ Payments, (*24)
Create and schedule new payments., (*25)
๐ฐ๏ธ Payment Drafts, (*26)
Create, get and delete payment drafts for approval by a business owner/admin., (*27)
๐ Transfers, (*28)
Create a transfer between your accounts., (*29)
๐ Transactions, (*30)
Get all transactions or a subset (with queryFilters), cancel a scheduled transaction, get a specific transaction and get a transaction by the unique specified requestId., (*31)
A Transaction is either created as a Payment or a Transfer., (*32)
๐น Rates, (*33)
Get exchange rates., (*34)
๐ฑ Exchanges, (*35)
There are two ways of using this endpoint:, (*36)
If you know the amount of currency you want to sell (e.g: I want to exchange 135.5 USD to EUR), then you should specify the amount in the "from" object., (*37)
If, on the other hand, you want to specify the amount of currency you want to buy (e.g: I want to exchange USD to receive 200 EUR), then you should specify the amount in the "to" object., (*38)
โ Please note that the "amount" field can be specified only once, either in the "from" object or in the "to" object., (*39)
๐ Webhooks, (*40)
Create new webhooks., (*41)
Usage details
๐ฐ Accounts
Get all accounts
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Accounts, (*42)
use RevolutPHP\Client;
$client = new Client($accessToken);
$accounts = $client->accounts->all();
Get one account
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Accounts/operation/getAccount, (*43)
use RevolutPHP\Client;
$client = new Client($accessToken);
$account = $client->accounts->get('foo');
Get account details
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Accounts/operation/getAccountDetails, (*44)
use RevolutPHP\Client;
$client = new Client($accessToken);
$account = $client->accounts->getDetails('foo');
๐ข Counterparties
Add a Counterparty
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Counterparties/operation/addCounterparty, (*45)
use RevolutPHP\Client;
$client = new Client($accessToken);
$counterparty = $client->counterparties->create(['profile_type' => 'business', 'name' => 'TestCorp' , 'email' => 'test@sandboxcorp.com']);
Delete a Counterparty
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Counterparties/operation/deleteCounterparty, (*46)
use RevolutPHP\Client;
$client = new Client($accessToken);
$client->counterparties->delete('foo');
Get all Counterparties
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Counterparties/operation/getCounterparties, (*47)
use RevolutPHP\Client;
$client = new Client($accessToken);
$counterparties = $client->counterparties->all();
Get a specific Counterparty
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Counterparties/operation/getCounterparty, (*48)
use RevolutPHP\Client;
$client = new Client($accessToken);
$counterparty = $client->counterparties->get('bar');
๐ธ Payments
Create a payment
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/createPayment, (*49)
use RevolutPHP\Client;
$client = new Client($accessToken);
$payment = [
'request_id' => 'e0cbf84637264ee082a848b',
'account_id' => 'bdab1c20-8d8c-430d-b967-87ac01af060c',
'receiver' => [
'counterparty_id': '5138z40d1-05bb-49c0-b130-75e8cf2f7693',
'account_id': 'db7c73d3-b0df-4e0e-8a9a-f42aa99f52ab'
],
'amount' => 123.11,
'currency' => 'EUR',
'reference' => 'Invoice payment #123'
];
$payment = $client->payments->create($payment);
Schedule a payment (for up to 30 days in the future)
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/createPayment, (*50)
use RevolutPHP\Client;
$client = new Client($accessToken);
$payment = [
'request_id' => 'e0cbf84637264ee082a848b',
'account_id' => 'bdab1c20-8d8c-430d-b967-87ac01af060c',
'receiver' => [
'counterparty_id': '5138z40d1-05bb-49c0-b130-75e8cf2f7693',
'account_id': 'db7c73d3-b0df-4e0e-8a9a-f42aa99f52ab'
],
'amount' => 123.11,
'currency' => 'EUR',
'reference' => 'Invoice payment #123',
'schedule_for' => '2018-04-20',
];
$payment = $client->payments->create($payment);
๐ฐ๏ธ Payment Drafts
Get all Payment Drafts
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payment-Drafts/operation/getPaymentDrafts, (*51)
use RevolutPHP\Client;
$client = new Client($accessToken);
$paymentDrafts = $client->paymentDrafts->all();
Get a specific Payment Draft
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payment-Drafts/operation/getPaymentDraft, (*52)
use RevolutPHP\Client;
$client = new Client($accessToken);
$counterparty = $client->paymentDrafts->get('bar');
Create a Payment Draft
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payment-Drafts/operation/createPaymentDraft, (*53)
use RevolutPHP\Client;
$client = new Client($accessToken);
$draft = [
'title' => 'Title of payment',
'schedule_for' => '2017-10-10',
'payments' => [[
'currency' => 'EUR',
'amount' => 123,
'account_id' => 'db7c73d3-b0df-4e0e-8a9a-f42aa99f52ab',
'receiver' => [
'counterparty_id' => '5138z40d1-05bb-49c0-b130-75e8cf2f7693',
'account_id' => 'bdab1c20-8d8c-430d-b967-87ac01af060c'
],
'reference' => 'External transfer'
]]
];
$draft = $client->paymentDrafts->create($draft);
Delete a payment draft
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payment-Drafts/operation/deletePaymentDraft, (*54)
use RevolutPHP\Client;
$client = new Client($accessToken);
$client->paymentDrafts->delete('bar');
๐ Transfers
Transfer money between your accounts
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Transfers/operation/createTransfer, (*55)
use RevolutPHP\Client;
$client = new Client($accessToken);
$transfer = [
'request_id' => 'e0cbf84637264ee082a848b',
'source_account_id' => 'bdab1c20-8d8c-430d-b967-87ac01af060c',
'target_account_id' => '5138z40d1-05bb-49c0-b130-75e8cf2f7693',
'amount' => 123.11,
'currency' => 'EUR',
'description' => 'Expenses funding'
];
$transfer = $client->transfers->create($transfer);
๐ Transactions
Get a specific transaction (Transfer, Payment)
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/getTransaction, (*56)
use RevolutPHP\Client;
$client = new Client($accessToken);
$transaction = $client->transactions->get('foo');
Get a specific transaction by requestId (Transfer, Payment)
You can fetch a transaction by the requestId that you specified on creation.
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/getTransaction, (*57)
use RevolutPHP\Client;
$client = new Client($accessToken);
$transaction = $client->transactions->getByRequestId('inv-123456789');
Cancel a scheduled transaction
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/cancelTransaction, (*58)
use RevolutPHP\Client;
$client = new Client($accessToken);
$client->transactions->cancel('foo');
Get all transactions
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/getTransactions, (*59)
use RevolutPHP\Client;
$client = new Client($accessToken);
$transactions = $client->transactions->all();
Get all transactions with filters applied
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/getTransactions, (*60)
Default 'count' is 100 if you want to retreive more transactions even with dates selected you should specify bigger 'count'. Highiest value of 'count' is 1000., (*61)
use RevolutPHP\Client;
$client = new Client($accessToken);
$searchFilters = [
'from' => '2018-01-01',
'to' => '2018-04-01',
'count' => 50,
'counterparty' => 'foo',
'type' => 'transfer'
];
$transactions = $client->transactions->all($searchFilters);
๐น Rates
Get exchange rates
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Exchanges, (*62)
use RevolutPHP\Client;
$client = new Client($accessToken);
$rates = $client->rates->get('USD', 'EUR', 100);
๐ฑ Exchanges
Exchange currency
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Exchanges/operation/exchangeMoney, (*63)
use RevolutPHP\Client;
$client = new Client($accessToken);
$exchange = [
'from' => [
'account_id' => '7998c061-115a-4779-b7c5-7175c6502ea0',
'currency' => 'USD',
'amount' => 135.5
],
'to' => [
'account_id' => '35ba695a-9153-4f68-ac16-b32f228265c9',
'currency' => 'EUR'
],
'reference' => 'Time to sell',
'request_id' => 'e0cbf84637264ee082a848b'
];
$response = $client->exchanges->exchange($exchange);
๐ Webhooks
Create a webhook
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Webhooks/operation/setupWebhook, (*64)
use RevolutPHP\Client;
$client = new Client($accessToken);
$webhook = [
'url' => 'https://foo.bar',
];
$webhook = $client->webhooks->create($webhook);
Frameworks
If you're looking to use this PHP API Client in a specific PHP framework you currently have the following options:, (*65)
Framework |
Package |
Symfony |
https://github.com/sverraest/revolut-php-bundle |
Laravel |
https://github.com/vdbelt/laravel-revolut |
Errors
Currently the following errors are defined in the Revolut Business API., (*66)
Error |
Description |
400 Bad request |
Your request is invalid. |
401 Unauthorized |
Your API key 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. |
About
You can follow me on ๐ฆ Twitter or โ๏ธ email me at simon[-at-]appfleet.uk., (*67)
www.appfleet.uk, (*68)
, (*69)