PHPackages                             tbclla/laravel-revolut-business - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. tbclla/laravel-revolut-business

ActiveLibrary[API Development](/categories/api)

tbclla/laravel-revolut-business
===============================

An unofficial Laravel wrapper for Revolut's Open API for Business

v1.0(6y ago)64879MITPHPCI failing

Since Apr 14Pushed 6y ago1 watchersCompare

[ Source](https://github.com/tbclla/laravel-revolut-business)[ Packagist](https://packagist.org/packages/tbclla/laravel-revolut-business)[ RSS](/packages/tbclla-laravel-revolut-business/feed)WikiDiscussions master Synced yesterday

READMEChangelog (3)Dependencies (3)Versions (4)Used By (0)

[![Latest Stable Version](https://camo.githubusercontent.com/06df9ad982d1780dc8660ff4d2857de75a4c068bae752aa845b90153a1a6c74f/68747470733a2f2f706f7365722e707567782e6f72672f7462636c6c612f6c61726176656c2d7265766f6c75742d627573696e6573732f762f737461626c65)](https://packagist.org/packages/tbclla/laravel-revolut-business)[![License](https://camo.githubusercontent.com/caa810785a4ce5a80d6f3c293e260d1e448dff0d24d2be2b5f9f41a437d39da6/68747470733a2f2f706f7365722e707567782e6f72672f7462636c6c612f6c61726176656c2d7265766f6c75742d627573696e6573732f6c6963656e7365)](https://packagist.org/packages/tbclla/laravel-revolut-business)[![Build Status](https://camo.githubusercontent.com/f8985ed896fe9ff1fd7c21c2dde3bb089ad08a4802ef674a2515f2bf34465f46/68747470733a2f2f7472617669732d63692e636f6d2f7462636c6c612f6c61726176656c2d7265766f6c75742d627573696e6573732e7376673f6272616e63683d6d6173746572)](https://travis-ci.com/tbclla/laravel-revolut-business)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/597b30243244eb9666da3da29d50312ac55e2b03bd84dd6820ca72a0c80507cc/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f7462636c6c612f6c61726176656c2d7265766f6c75742d627573696e6573732f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/tbclla/laravel-revolut-business/?branch=master)

Laravel-Revolut (Business)
==========================

[](#laravel-revolut-business)

An unofficial Laravel wrapper for [Revolut's Open API for Business](https://www.revolut.com/open-api).
A sister package for [Revolut's Merchant API](https://developer.revolut.com/docs/merchant-api/#introduction-to-merchant-accounts) can be found [here](https://github.com/tbclla/laravel-revolut-merchant).

Getting Started
---------------

[](#getting-started)

Read [Revolut's official documentation](https://revolut-engineering.github.io/api-docs/business-api) to get familiar with the API and the authorization process.

⚠️ **Please use a [sandbox account](https://sandbox-business.revolut.com/signup) when setting up this package, and only switch to your real-world account once you're happy that everything is working correclty.**

### Requirements

[](#requirements)

- Laravel &gt;=5.8
- PHP &gt;=7.2

### Installation

[](#installation)

Pull this package in through composer.

```
composer require tbclla/laravel-revolut-business

```

### Service Provider &amp; Facade

[](#service-provider--facade)

If you have disabled Laravel's auto-discovery feature, add the service provider and facade to your `config/app.php`.

```
'providers' => [
    // ...
    tbclla\Revolut\Providers\RevolutServiceProvider::class,
],

'aliases' => [
    // ...
    'Revolut' => tbclla\Revolut\Facades\Revolut::class,
]
```

### Configuration

[](#configuration)

After you have installed the package, publish the configuration file.

```
php artisan vendor:publish --provider "tbclla\Revolut\Providers\RevolutServiceProvider"

```

You can now configure this package under `config/revolut.php`.

#### Access Expiry

[](#access-expiry)

As per [the official documentation](https://developer.revolut.com/docs/business-api/#getting-started-usage-and-limits), businesses on the Freelancer plan must explicitly authorise access to their account via the API every 90 days. If this applies to your business, set 'expire\_api\_access' to `true`.

#### Credentials

[](#credentials)

Add the following keys to your `.env` file, as most of the configuration values are read from there.
You will complete the missing values as you [set up access to the API](https://github.com/tbclla/laravel-revolut-business#setting-up-access-to-the-api).

```
REVOLUT_SANDBOX=true
REVOLUT_PRIVATE_KEY=
REVOLUT_REDIRECT_URI=
REVOLUT_CLIENT_ID=

```

#### Token store

[](#token-store)

Tokens can be stored in either your database or in your cache.

##### Cache

[](#cache)

When using the 'cache' store, you may optionally define a `driver`. If set to null, your app's default cache driver (`config/cache.php > default`) will be used.

##### Database

[](#database)

When using the 'database' store, a migration for the required table is automatically included when you run your migrations. The name of this table can be customised in the configuration.

Run `php artisan migrate` to create the table.

Setting up access to the API
----------------------------

[](#setting-up-access-to-the-api)

Please follow steps 1 and 2 of [Revolut's documentation on how to set up access to the API](https://revolut-engineering.github.io/api-docs/business-api/#authentication-setting-up-access-to-your-business-account).

#### Step 1 - Generate a pair of public/private keys

[](#step-1---generate-a-pair-of-publicprivate-keys)

Complete step 1 of Revolut's instructions to generate a key pair.
❗Add the path to your private key to your `.env` as `REVOLUT_PRIVATE_KEY`.

#### Step 2 - Upload your public key

[](#step-2---upload-your-public-key)

Follow Revolut's step 2 to upload your newly created public key and provide a redirect URI.
⚠️ You do NOT have to create a route or controller for this redirect URI, this package will handle it.
❗Add this redirect URI to your `.env` as `REVOLUT_REDIRECT_URI`.

Revolut will now have created a client ID for you.
❗Add this client ID to your `.env` as `REVOLUT_CLIENT_ID`.

#### Step 3 - Sign a JWT

[](#step-3---sign-a-jwt)

Skip this step, this package will generate a JWT for you whenever one is needed.
You can verify that you have configured everything correctly by generating a JWT via the below artisan command. Optionally, you can pass it the path to the matching public key with the `--public` flag, to validate the JWT.

```
php artisan revolut:jwt

php artisan revolut:jwt --public /Path/to/publickey.cer

```

#### Steps 4-7

[](#steps-4-7)

You do not have to complete any of the remaining steps!
Instead, initate the authorization with the following artisan command, and follow the generated link.

```
php artisan revolut:authorize

```

**To mitigate against CSRF attacks, requesting an authorization code via Revolut's web interface does *NOT* work in conjunction with Laravel-Revolut!**Read more about the authorization process [here](https://github.com/tbclla/laravel-revolut-business#authorization).

#### Finishing up

[](#finishing-up)

An access and refresh token will now have been stored in your defined token store. This package will now use this access token until it expires, and request a new one from Revolut when needed, via the refresh token.

To verify that your app has been authorized, you can retrieve an access token with the below artisan command.

```
php artisan revolut:access-token

```

Using the API
-------------

[](#using-the-api)

To use the client, either access its methods via the facade, or resolve it from Laravel's service container.

```
use tbclla\Revolut\Client;
use tbclla\Revolut\Facades\Revolut;

$revolut = resolve(Client::class);
$revolut->account()->details('11d79893-2703-489f-96e9-7946d9aba8b7');
// or simply
Revolut::account()->details('11d79893-2703-489f-96e9-7946d9aba8b7');
```

### Accounts

[](#accounts)

Please refer to [Revolut's documentation](https://revolut-engineering.github.io/api-docs/business-api/#accounts).

#### Get all accounts

[](#get-all-accounts)

```
$accounts = Revolut::account()->all();
```

#### Get an account

[](#get-an-account)

```
Revolut::account()->get('ac57ffc9-a5cb-4322-89d2-088e8a007a97');
```

#### Get account details

[](#get-account-details)

```
Revolut::account()->details('11d79893-2703-489f-96e9-7946d9aba8b7');
```

### Counterparties

[](#counterparties)

#### Get all counterparties

[](#get-all-counterparties)

```
Revolut::counterparty()->all();
```

#### Get a counterparty

[](#get-a-counterparty)

```
Revolut::counterparty()->get('5435ff9e-bacd-430b-95c2-094da8662829');
```

#### Delete a counterparty

[](#delete-a-counterparty)

```
Revolut::counterparty()->delete('5435ff9e-bacd-430b-95c2-094da8662829');
```

#### Create a counterparty

[](#create-a-counterparty)

Please refer to [Revolut's documentation](https://revolut-engineering.github.io/api-docs/business-api/#counterparties-add-revolut-counterparty) for more details.

##### Create a Revolut counterparty

[](#create-a-revolut-counterparty)

```
Revolut::counterparty()->create([
    "profile_type" => "personal",
    "name" => "John Smith",
    "phone" => "+4412345678900"
]);
```

##### Create a non-Revolut counterparty

[](#create-a-non-revolut-counterparty)

```
Revolut::counterparty()->create([
    "company_name" => "John Smith Co.",
    "bank_country" => "GB",
    "currency" => "GBP",
    "account_no" => "12345678",
    "sort_code" => "223344",
    "email" => "test@sandboxcorp.com",
    "address" => [
        "street_line1" => "1 Canada Square",
        "street_line2" => "Canary Wharf",
        "region" => "East End",
        "postcode" => "E115AB",
        "city" => "London",
        "country" => "GB"
    ]
]);
```

#### Build a counterparty

[](#build-a-counterparty)

Read more about builders and how to use them [here](https://github.com/tbclla/laravel-revolut-business#builders).

##### Build a Revolut counterparty

[](#build-a-revolut-counterparty)

```
$builder = Revolut::counterparty()->build();
$builder->profileType('personal')
$builder->name('John Doe')
$builder->phone('+4412345678900');
$builder->create();
```

The builder also provides the following shortcuts to achieve the same as above:

```
Revolut::counterparty()->build()->personal('John Doe', '+4412345678900')->create();

Revolut::counterparty()->build()->business('test@sandboxcorp.com')->create();
```

##### Build a non-Revolut counterparty

[](#build-a-non-revolut-counterparty)

```
$counterparty = Revolut::counterparty()->build()
    ->bankCountry('GB')
    ->currency('GBP')
    ->accountNumber('12345678')
    ->sortCode('223344');

$counterparty->companyName('John Smith Co');

// or for an individual
$counterparty->individualName('John', 'Smith');

// The counterparty builder accepts the address as an array
$counterparty->address([
    "street_line1" => "1 Canada Square",
    "street_line2" => "Canary Wharf",
    "region" => "East End",
    "postcode" => "E115AB",
    "city" => "London",
    "country" => "GB"
]);

// Alternatively, the builder lets you build the address fluently
$counterparty->streetLine1('1 Canada Square')
    ->streetLine2('Canary Wharf')
    ->region('East End')
    ->postcode('E115AB')
    ->city('London')
    ->country('GB');
```

### Transfers

[](#transfers)

Please refer to [Revolut's documentation on how to create a transfer](https://revolut-engineering.github.io/api-docs/business-api/#transfers-create-transfer).

#### Create a transfer

[](#create-a-transfer)

```
Revolut::transfer()->create([
    "request_id" => "e0cbf84637264ee082a848b",
    "source_account_id" => "bdab1c20-8d8c-430d-b967-87ac01af060c",
    "target_account_id" => "5138z40d1-05bb-49c0-b130-75e8cf2f7693",
    "amount" => 123.11,
    "currency" => "EUR",
]);
```

#### Build a transfer

[](#build-a-transfer)

Read more about builders and how to use them [here](https://github.com/tbclla/laravel-revolut-business#builders).

```
$transfer = Revolut::transfer()->build()
    ->sourceAccount($sourceAccountId)
    ->targetAccout($targetAccountId)
    ->amount(231.20)
    ->reference('payroll'); // optional

// If you want to keep the request ID for your records, retrieve it from the builder
$requestId = $transfer->request_id;

$transfer->create();
```

### Payments

[](#payments)

Please refer to [Revolut's documentation on how to create a payment](https://revolut-engineering.github.io/api-docs/business-api/#payments).

#### Create a payment

[](#create-a-payment)

```
Revolut::payment()->create([
    "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",
]);
```

#### Build a payment

[](#build-a-payment)

Read more about builders and how to use them [here](https://github.com/tbclla/laravel-revolut-business#builders).

```
$payment = Revolut::payment()->build()
    ->account('bdab1c20-8d8c-430d-b967-87ac01af060c')
    ->receiver('5138z40d1-05bb-49c0-b130-75e8cf2f7693')
    ->amount(93.12)
    ->currency('USD')
    ->create();
```

#### Schedule a payment

[](#schedule-a-payment)

The `schedule()` method accepts the same data as the `create()` method, and an ISO date as its second parameter.

```
Revolut::payment()->schedule($data, '2020-05-19');
```

#### Cancel a scheduled payment

[](#cancel-a-scheduled-payment)

```
Revolut::payment()->cancel('b63f30f0-62dc-4b6b-98cf-2a9a2e5ac981');
```

### Transactions

[](#transactions)

#### Get all transactions

[](#get-all-transactions)

The `all()` method accepts an optional array of filters as its first parameter. Please refer to [Revolut's documentation](https://revolut-engineering.github.io/api-docs/business-api/#payments-get-transactions) for a list of available filters.

```
$transactions = Revolut::transaction()->all();

$filtered = Revolut::transaction()->all([
    'count' => 200,
    'type' => 'card_payment',
]);
```

As per the offical documentation, transacations which are older than 90 days can only be accessed if your access token has been generated within the last 5 minutes. To handle this, you can pass an optional boolean value as a second parameter, indicating whether or not to force the client to refresh the access token before making the request.

```
Revolut::transaction()->all([], true);
```

#### Get a transaction

[](#get-a-transaction)

The `get()` method let's you retrieve a transaction by its ID. If you want to get a transaction by its request ID, you can use the `getByRequestId()` method instead.

```
Revolut::transaction()->get($id);

Revolut::transaction()->getByRequestId($requestId);
```

### Payment Drafts

[](#payment-drafts)

#### Get all payment drafts

[](#get-all-payment-drafts)

```
Revolut::paymentDraft()->all();
```

#### Get a payment draft

[](#get-a-payment-draft)

```
Revolut::paymentDraft()->get($id);
```

#### Delete a payment draft

[](#delete-a-payment-draft)

```
Revolut::paymentDraft()->delete($id);
```

#### Create a payment draft

[](#create-a-payment-draft)

```
Revolut::paymentDraft()->create([
    "title": "Sample title",
    "schedule_for": '2020-05-29',
    "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"
            ],
        ]
    ]
]);
```

#### Build a payment draft

[](#build-a-payment-draft)

When building a payment draft, the payments can either be set by passing an array of payments to the `payment()` method, or by adding individual payments via the `addPayment()` method.

```
$date = now()->addDays(7)->format('Y-m-d');

$draft = Revolut::paymentDraft()->build()
    ->title('Sample title')
    ->schedule($date)
    ->payments($payments);

foreach ($employees as $employee) {
    $draft->addPayment($payment);
}

$draft->create()
```

### Rates

[](#rates)

#### Get an exchange rate

[](#get-an-exchange-rate)

The `get()` method accepts the source and target currencies as the first two parameters.
You can optionally pass it the exchange amount as a third parameter, which otherwise defaults to 1.

```
Revolut::rate()->get('EUR', 'CHF');

Revolut::rate()->get('USD', 'GBP', 143.23);
```

### Exchanges

[](#exchanges)

#### Create an exchange

[](#create-an-exchange)

```
Revolut::exchange()->create([
    "from" => [
        "account_id" => "d56dd396-523b-4613-8cc7-54974c17bcac",
        "currency" => "USD",
        "amount" => 135.25
    ],
    "to": [
        "account_id" => "a44dd365-523b-4613-8457-54974c8cc7ac",
        "currency" => "EUR"
    ],
    "reference" => "Time to sell",
    "request_id" => Revolut::generateRequestId(),
]);
```

#### Build an exchange

[](#build-an-exchange)

```
$exchange = Revolut::exchange()->build()
    ->reference('Time to sell')
    ->from('d56dd396-523b-4613-8cc7-54974c17bcac', 'USD', 135.25)
    ->to('a44dd365-523b-4613-8457-54974c8cc7ac', 'EUR');

$response = $exchange->create()
```

### Web-hook

[](#web-hook)

Refer to [Revolut's documentation](https://revolut-engineering.github.io/api-docs/business-api/#web-hooks) to read about web-hooks and available events.

#### Creating the web-hook

[](#creating-the-web-hook)

```
Revolut::webhook()->create('https://mydomain.com/endpoint');
```

#### Deleting the web-hook

[](#deleting-the-web-hook)

```
Revolut::webhook()->delete();
```

Builders
--------

[](#builders)

All API resources that have a `create()` method (except for Web-hooks) also have a `build()` method which returns a resource specific instance of the `tbclla\Revolut\Builders\Builder`. Builders can be used to create the at times complex arrays of data in a more fluent manner.

```
Revolut::counterparty()->build() // tbclla\Revolut\Builders\CounterpartyBuilder
Revolut::payment()->build() // tbclla\Revolut\Builders\PaymentBuilder
Revolut::paymentDraft()->build() // tbclla\Revolut\Builders\PaymentDraftBuilder
Revolut::transfer()->build() // tbclla\Revolut\Builders\TransferBuilder
Revolut::exchange()->build() // tbclla\Revolut\Builders\ExchangeBuilder
```

#### Output

[](#output)

All builders use the `toArray()` method to return the data in the format required by Revolut.
For example:

```
Revolut::exchange()->build()
    ->from('d56dd396-523b-4613-8cc7-54974c17bcac', 'USD')
    ->to('a44dd365-523b-4613-8457-54974c8cc7ac', 'EUR', 735.23)
    ->reference('Off to France!')
    ->toArray();
```

Will return:

```
[
    'from' => [
        'account_id' => 'd56dd396-523b-4613-8cc7-54974c17bcac',
        'currency' => 'USD'
    ],
    'to' => [
        'account_id' => 'a44dd365-523b-4613-8457-54974c8cc7ac',
        'currency' => 'EUR',
        'amount' => 735.23,
    ],
    'reference' => 'Off to France!',
    'request_id' => 'c60ec5b3-c5b9-4cea-936c-fa0306374df5'
]

```

#### Creating the built resource

[](#creating-the-built-resource)

When you are done building, you can simply call the `create()` method on the builder.

```
Revolut::transfer()->build()
    ->sourceAccount('bdab1c20-8d8c-430d-b967-87ac01af060c')
    ->targetAccout('5138z40d1-05bb-49c0-b130-75e8cf2f7693')
    ->amount(231.20)
    ->create();
```

Request ID's
------------

[](#request-ids)

Revolut requires some requests to contain a unique `request_id` parameter.

If you are using the builder, the request ID will be created for you automatically. You can set your own request ID, or get the existing request ID from the builder:

```
$builder = Revolut::exchange()->build()->requestId('my_own_request_id');

$requestId = $builder->request_id;
```

If you are not using the builder, you can use the static `generateRequestId()` method on the Revolut Client to create a request ID - which is what the builder uses under the hood. This method uses `\Illuminate\Support\Str::Uuid()` to return a UUIDv4 string.

```
use tbclla\Revolut\Client;

Client::generateRequestId();
```

Tokens and Authorization
------------------------

[](#tokens-and-authorization)

### Authorization

[](#authorization)

In accordance with [RFC6749 10.12](https://tools.ietf.org/html/rfc6749#section-10.12), this package implements CSRF protection for the `redirect_uri` and includes a controller to handle both the authorization request and subsequent response to enforce this.

#### Authorization Request

[](#authorization-request)

As the controller will require a valid state paramater, you can **not** use Revolut's web interface to authorize your app in conjunction with this package. To authorize your app, you must enter Revolut's Oauth flow from the `auth_route`.
You can get the url via the below artisan command.

```
php artisan revolut:authorize

```

If you need to redirect a user to Revolut's authorization flow, you can get the url via the route helper. The `auth_route` is a named route and its name is configurable in your `config/revolut.php` file under `auth_route.name`. You may pass it an optional 'after\_success' paramater which will redirect the user to the specified location after the authorization has been completed.

```
$url = route('revolut-authorize');

$url = route('revolut-authorize', [
    'after_success' => route('home')
]);

return redirect($url);
```

To redirect a user to the authorization flow whenever your app is not authorized, you can catch an `AppUnauthorizedException`, which is thrown when there is no valid refresh token available and your app needs to be re-authorized.

```
use tbclla\Revolut\Exceptions\AppUnauthorizedException;

Route::get('/accounts', function () {
    try {
        return Revolut::account()->all();
    } catch(AppUnauthorizedException $e) {
        return redirect(route('revolut-authorization', [
            'after_success' => '/accounts'
        ]));
    }
});
```

#### Authorization Response

[](#authorization-response)

Once your app has been authorized, Revolut will redirect you to the redirect URI which you have set when creating the API certificate. This redirect URI must match the `redirect_uri` set in `config/revolut.php`.

You do **not** need to create a route or controller for this redirect URI.

The authorization controller contained in this package will verify the presence and validity of the response's state parameter, and if accepted, will exchange the response's authorization code for an access and refresh token. Once these tokens are received and stored, the controller will redirect the user to a specified location. If no location was provided, the controller will return a `200` response instead.

### Token Storage

[](#token-storage)

This package will store access and refresh tokens in either your database or the cache. Authorization codes are never stored and are instead exchanged for tokens immediately. You can configure the token driver in your `config/revolut.php` file.

### Token Encryption

[](#token-encryption)

By default, all access and refresh tokens are encrypted before being stored in either your database or cache. This packages uses [Laravel's built-in encryption tools](https://laravel.com/docs/7.x/encryption#introduction) to encrypt your tokens, so make sure that you have a strong `key` set in your `config/app.php`.

### Cleaning up expired tokens

[](#cleaning-up-expired-tokens)

#### Cache

[](#cache-1)

Tokens stored in your cache are only remembered for the duration of their validity, so there is no need to remove them. If you would like to remove tokens from your cache, you can `forget()` them using their respective keys.

```
// remove access token
Cache::forget('revolut_access_token');
// remove refresh token
Cache::forget('revolut_refresh_token');
```

#### Database

[](#database-1)

If you are using the database token store, you can remove expired access tokens and refresh tokens from your database with the below artisan command.

```
php artisan revolut:cleanup

```

You can also schedule the command in your `App\Console\Kernel` class, to automate this process.

```
$schedule->command('revolut:cleanup')->daily();
```

Switching from sandbox to a real account
----------------------------------------

[](#switching-from-sandbox-to-a-real-account)

- Update your `.env` file and set `REVOLUT_SANDBOX=false`.
- Clear any sandbox tokens from your database or cache.
- Update your `config/revolut.php` and set `encrypt_tokens` to true, if it isn't already.
- Whitelist the IP's that will access the API by visiting your account Settings &gt; API.
- Reauthorize your app.

License
-------

[](#license)

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity22

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

3

Last Release

2215d ago

Major Versions

v0.2 → v1.02020-04-18

### Community

Maintainers

![](https://www.gravatar.com/avatar/78bdce2dd15c3f5801880b4649558b1be2953355ed74b5f92ee2d4af47f542a5?d=identicon)[tbclla](/maintainers/tbclla)

### Embed Badge

![Health badge](/badges/tbclla-laravel-revolut-business/health.svg)

```
[![Health](https://phpackages.com/badges/tbclla-laravel-revolut-business/health.svg)](https://phpackages.com/packages/tbclla-laravel-revolut-business)
```

###  Alternatives

[get-stream/stream

A PHP client for Stream (https://getstream.io)

1451.3M8](/packages/get-stream-stream)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3731.2M42](/packages/tencentcloud-tencentcloud-sdk-php)[agence104/livekit-server-sdk

Server-side SDK for LiveKit.

79189.9k1](/packages/agence104-livekit-server-sdk)[packbackbooks/lti-1p3-tool

A library used for building IMS-certified LTI 1.3 tool providers in PHP.

51438.3k2](/packages/packbackbooks-lti-1p3-tool)[hoels/app-store-server-library-php

The PHP server library for the App Store Server API and App Store Server Notifications.

44162.2k](/packages/hoels-app-store-server-library-php)[tamara-solution/php-sdk

Tamara PHP Client Library

10259.4k1](/packages/tamara-solution-php-sdk)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
