Resova API PHP7 client

1.2.5 2020-06-17 18:09 UTC

This package is auto-updated.

Last update: 2024-04-18 16:07:39 UTC


Latest Stable Version Build Status Total Downloads License Code Climate Code Coverage Scrutinizer CQ

Resova API PHP7 client

This project is a simple and minimalistic client for work with Resova API, based on Guzzle Http client.

composer require evilfreelancer/resova-api-php

Laravel framework support

Resova API client is optimized for usage as normal Laravel package, all functional is available via \ResovaApi facade, for access to client object you need instead:

$config = new \Resova\Config(['api_key' => 'my-secret-key']);
$resova = new \Resova\Client($config);


$resova = \ResovaApi::getClient();

You also may provide additional parameters to your client by passing array of parameters to getClient method:

$resova = \ResovaApi::getClient([
    'api_key' => 'my-secret-key',
    'timeout' => 1000,

Laravel installation

Install the package via Composer:

composer require evilfreelancer/resova-api-php

By default the package will automatically register its service provider, but if you are a happy owner of Laravel version less than 5.3, then in a project, which is using your package (after composer require is done, of course), add intoproviders block of your config/app.php:

'providers' => [
    // ...

Optionally, publish the configuration file if you want to change any defaults:

php artisan vendor:publish --provider="Resova\\Laravel\\ClientServiceProvider"


There are four key objects in Resova that every API developer should know about.

Objects Description
items An activity/service is known as an Item, these are what your customers will purchase.
instances An instance is a date and time belonging to an item. An instance is required to be included when creating a booking.
bookings A customer will make a booking for a specific Item and Instance (date/time), they're essentially purchasing something. All bookings belong to a Transaction
transactions A Transaction is the overall purchase order. All Bookings belong to a Transaction and there can be more than one Booking per Transaction.

How to use

See other examples of usage here separated by class names.

Basic example

require_once __DIR__ . '/vendor/autoload.php';

use Resova\Config;
use Resova\Client;

$config = new Config(['api_key' => getenv('API_KEY')]);
$resova = new Client($config);

// Get all slots for all items in dates range
$calendar = $resova->availability->calendar(date('Y-m-d'), date('Y-m-d'))->exec();

foreach ($calendar as $instances) {
    // Get availability of slots for some item
    $instance = $resova->availability->instance(3)->exec();

Where can I find my api key?

If you haven't already, you can sign up for a new account here. Once you have logged into your account head over to Settings > General Settings > Developer where your API KEY will be located.

*Items* endpoints

Items mean your rooms in Resova system.


// Single
$result = $resova->item(1)->exec();

// Single: Reviews list
$result = $resova->item(1)->reviews()->exec();

// Single: Booking questions list
$result = $resova->item(1)->booking_questions()->exec();

// Single: Extras list
$result = $resova->item(1)->extras()->exec();

// All
$result = $resova->items->exec();
*Availability* endpoints

Availability details of instances, instances prices and calendars of dates etc.

Instance - in logic of Resova API mean time slot with price


use \Resova\Models\Pricing;

$result = $resova->availability->instance(123)->exec();

$pricing = new Pricing([
    'quantities' => [
        ['pricing_category_id' => 1, 'quantity' => 2],
        ['pricing_category_id' => 1, 'quantity' => 3],
        ['pricing_category_id' => 1, 'quantity' => 4],
$result = $resova->availability->instance(123)->pricing($pricing)->exec();

$result = $resova->availability->calendar(date('Y-m-d'), date('Y-m-d'))->exec();
*Baskets* endpoints

Baskets in Resova it mean Carts, it contain details about prepared for booking carts created by clients.


use \Resova\Models\BasketRequest;

// Basket request object
$basket = new BasketRequest([
    'customer_id' => 123,
    'expires_at'  => '1558101934',

// Create
$result = $resova->baskets->create($basket)->exec();

// List
$result = $resova->baskets->exec();

// Single
$result = $resova->basket(123)->exec();

// Update
$result = $resova->basket(123)->update($basket)->exec();

// Delete
$result = $resova->basket(123)->delete()->exec();
*Customers* endpoints

For work with customers information, like emails, phones, addresses, etc.


use \Resova\Models\Customer;
use \Resova\Models\CustomerCreate;

// Customer create request object
$customerCreate = new CustomerCreate([
    'first_name' => 'John',
    'last_name'  => 'Doe',
    'email'      => 'email@example.com'

// Create
$result = $resova->customers->create($customerCreate)->exec();

// Single
$result = $resova->customer(123)->exec();

// Customer update request object
$customerUpdate = new Customer([
    'first_name' => 'John',
    'last_name'  => 'Doe',
    'email'      => 'email@example.com'

// Update
$result = $resova->customer(123)->update($customerUpdate)->exec();
*Gift Voucher* endpoints

Gift Vouchers in Resova it mean Promocodes, you can manage your promo campaigns.


// Single
$result = $resova->gift_voucher(123)->exec();

// All
$result = $resova->gift_vouchers->exec();
*Webhooks* endpoints
// All
$result = $resova->webhooks->all()->exec();

Some things which you also should know

  1. Resova's technical support is very reluctant to answer any of your requests, even if you have a bank card connected and you earn money, with a small degree of probability any requests from you will stop being processed, and your mail will be blacklisted

  2. On trial account you can't use API, so you can't check functionality before adding the bank card

  3. You should add your server's IP to whitelist in Resova developer settings

  4. But despite paragraph 3. your server's IP may be blocked automatically without explanations (via probably fail2ban), and support team after few unanswered questions will add your email/facebook account to blacklist

  5. Optimal amount of HTTP requests before your IP will banned is no more than 1000 per day, or about 40 requests per hour, maybe this is due to the recent DDoS ​​attack to their servers, so be very careful, otherwise you will have to configure intermediate proxy servers, which is not very convenient (and which also will be banned after some time)

  6. Resova does not provide test accounts or stagging environments to test the functionality of your application before publishing to production, so be very careful when working with Resova API, double-check all data