(Unofficial) PHP API Client and bindings for the Revolut Business API.
Using this PHP API Client you can interact with your:
Revolut Business API does not support - π§Ύ Invoices
Requires PHP 7.0 or higher
The recommended way to install revolut-php is through Composer:
First, install Composer:
$ curl -sS https://getcomposer.org/installer | php
Next, install the latest revolut-php:
$ php composer.phar require sverraest/revolut-php
Finally, you need to require the library in your PHP application:
require "vendor/autoload.php";
composer test
and composer phpcs
before creating a PR to detect any obvious issues.Start by following the authentication instructions in the Revolut API docs:
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
:
$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:
$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:
$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:
if( $accessToken->hasExpired() ) {
$newAccessToken = $authProvider->getAccessToken('refresh_token', [
'refresh_token' => $accessToken->getRefreshToken()
]);
}
If you want to get a production
client:
use RevolutPHP\Client;
$client = new Client($accessToken);
If you want to get a sandbox
client:
use RevolutPHP\Client;
$client = new Client($accessToken, 'sandbox');
If you want to pass additional GuzzleHTTP options:
use RevolutPHP\Client;
$options = ['headers' => ['foo' => 'bar']];
$client = new Client($accessToken, 'sandbox', $options);
The following exposed API operations from the Revolut For Business API are available using the API Client.
See below for more details about each resource.
π° Accounts
Get all accounts, Get a specific account and get details for a specific account.
π’ Counterparties
Get all counterparties, get a specific counterparty, create a new counterparty and delete a counterparty.
πΈ Payments
Create and schedule new payments.
π°οΈ Payment Drafts
Create, get and delete payment drafts for approval by a business owner/admin.
π Transfers
Create a transfer between your accounts.
π Transactions
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.
A Transaction is either created as a Payment or a Transfer.
πΉ Rates
Get exchange rates.
π± Exchanges
There are two ways of using this endpoint:
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.
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.
β Please note that the "amount" field can be specified only once, either in the "from" object or in the "to" object.
π Webhooks
Create new webhooks.
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Accounts
use RevolutPHP\Client;
$client = new Client($accessToken);
$accounts = $client->accounts->all();
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Accounts/operation/getAccount
use RevolutPHP\Client;
$client = new Client($accessToken);
$account = $client->accounts->get('foo');
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Accounts/operation/getAccountDetails
use RevolutPHP\Client;
$client = new Client($accessToken);
$account = $client->accounts->getDetails('foo');
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Counterparties/operation/addCounterparty
use RevolutPHP\Client;
$client = new Client($accessToken);
$counterparty = $client->counterparties->create(['profile_type' => 'business', 'name' => 'TestCorp' , 'email' => 'test@sandboxcorp.com']);
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Counterparties/operation/deleteCounterparty
use RevolutPHP\Client;
$client = new Client($accessToken);
$client->counterparties->delete('foo');
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Counterparties/operation/getCounterparties
use RevolutPHP\Client;
$client = new Client($accessToken);
$counterparties = $client->counterparties->all();
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Counterparties/operation/getCounterparty
use RevolutPHP\Client;
$client = new Client($accessToken);
$counterparty = $client->counterparties->get('bar');
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/createPayment
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);
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/createPayment
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);
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payment-Drafts/operation/getPaymentDrafts
use RevolutPHP\Client;
$client = new Client($accessToken);
$paymentDrafts = $client->paymentDrafts->all();
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payment-Drafts/operation/getPaymentDraft
use RevolutPHP\Client;
$client = new Client($accessToken);
$counterparty = $client->paymentDrafts->get('bar');
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payment-Drafts/operation/createPaymentDraft
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);
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payment-Drafts/operation/deletePaymentDraft
use RevolutPHP\Client;
$client = new Client($accessToken);
$client->paymentDrafts->delete('bar');
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Transfers/operation/createTransfer
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);
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/getTransaction
use RevolutPHP\Client;
$client = new Client($accessToken);
$transaction = $client->transactions->get('foo');
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
use RevolutPHP\Client;
$client = new Client($accessToken);
$transaction = $client->transactions->getByRequestId('inv-123456789');
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/cancelTransaction
use RevolutPHP\Client;
$client = new Client($accessToken);
$client->transactions->cancel('foo');
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/getTransactions
use RevolutPHP\Client;
$client = new Client($accessToken);
$transactions = $client->transactions->all();
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Payments/operation/getTransactions
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.
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);
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Exchanges
use RevolutPHP\Client;
$client = new Client($accessToken);
$rates = $client->rates->get('USD', 'EUR', 100);
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Exchanges/operation/exchangeMoney
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);
See more at https://developer.revolut.com/docs/api-reference/business/#tag/Webhooks/operation/setupWebhook
use RevolutPHP\Client;
$client = new Client($accessToken);
$webhook = [
'url' => 'https://foo.bar',
];
$webhook = $client->webhooks->create($webhook);
If you're looking to use this PHP API Client in a specific PHP framework you currently have the following options:
Framework | Package |
---|---|
Symfony | https://github.com/sverraest/revolut-php-bundle |
Laravel | https://github.com/vdbelt/laravel-revolut |
Currently the following errors are defined in the Revolut Business API.
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. |
You can follow me on π¦ Twitter or βοΈ email me at simon[-at-]appfleet.uk.
www.appfleet.uk