让您的客户不用离开您的应用程序就能预约服务!
提供您的客户发现在地商家时会想采取的动作,藉此让您的网站或应用程序更加贴切、迷人、更有效益。我们的 API 让您轻松在您的网页上直接添加一个「现在预约」的按钮,以让您的客户能够不分日夜做实时预约。
我们的 API 提供您所有需要的预约数据之访问权限,让您架构并配置适合您的客户群之预约功能。
藉由将客户连结至您的营业时间表,我们会创造一个全新的交易层面。我们相信直接在您的应用程序或网站上预约将允许我们提供您实际的有效客户,而不仅是潜在客户。
提供您的客户发现在地商家时会想采取的动作,藉此让您的网站或应用程序更加贴切、迷人、更有效益。我们的 API 让您轻松在您的网页上直接添加一个「现在预约」的按钮,以让您的客户能够不分日夜做实时预约。
我们的 API 提供您所有需要的预约数据之访问权限,让您架构并配置适合您的客户群之预约功能。
藉由将客户连结至您的营业时间表,我们会创造一个全新的交易层面。我们相信直接在您的应用程序或网站上预约将允许我们提供您实际的有效客户,而不仅是潜在客户。
简单利落的界面,轻松打造您自己的预约服务。
您可轻易地置入所有您需要的功能。
实时排程——您的客户能够天天 24 小时随时随地与您预约。
我们集成多种实用功能,打造专属预约管理 App 应用,点击这里查看更多 相关预约管理功能。
使用我们的开发人员 API 来创建您自己的预约界面。从最简单的小部件到多功能的应用程序,您可依据您特定的业务来客制任何的解决方案。
SimplyВook.me 应用程序界面(API)使用的是 JSON-RPC 2.0 协定。
看看以 API 架设的预约界面之范例,并且查看这个解决方案的程序代码。
Simplybook API methods require an authentication. To authorize in Simplybook API you need to get an access key — access-token. In order to get this access-token you should call the JSON-RPC method getToken on http://user-api.simplybook.me/login service passing your personal API-key. You can copy your API-key at admin interface: go to the 'Plugins' link and select API plugin 'Settings'. 接着您必须将远程访问初始化至 SimplyВook.me API。您的请求应包含下面标题:'X-Company-Login', 'X-Token'。
授权码的取得可由客户端或由您的服务器来执行,然而后者是两者中较安全的解决方案。
您可使用我们的范例中的 javascript JSON-RPC-客户端链接库与 php JSON-RPC-客户端链接库来开发您自己的解决方案。
从客户端代码之授权
取得授权码。
var loginClient = new JSONRpcClient({
'url': 'https://user-api.simplybook.me' + '/login',
'onerror': function (error) {},
});
var token = loginClient.getToken( YOUR_COMPANY_LOGIN, YOUR_API_KEY);
Initialization JSON-RPC-client
this.client = new JSONRpcClient({
'url': 'https://user-api.simplybook.me',
'headers': {
'X-Company-Login': YOUR_COMPANY_LOGIN,
'X-Token': token
},
'onerror': function (error) {}
});
从服务器端代码之授权
取得授权码。
$loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
$token = $loginClient->getToken(YOUR_COMPANY_LOGIN, YOUR_API_KEY);
初始化客户端 JSON-RPC。
$client = new JsonRpcClient( 'https://user-api.simplybook.me' . '/', array(
'headers' => array(
'X-Company-Login: ' . YOUR_COMPANY_LOGIN,
'X-Token: ' . $token
)
));
从客户端代码之授权
取得授权码。
var loginClient = new JSONRpcClient({
'url': {$api_url} + '/login',
'onerror': function (error) {},
});
var token = loginClient.getUserToken( YOUR_COMPANY_LOGIN, YOUR_USER_LOGIN, YOUR_USER_PASSWORD);
初始化客户端 JSON-RPC。
this.client = new JSONRpcClient({
'url': 'https://user-api.simplybook.me' + '/admin/',
'headers': {
'X-Company-Login': YOUR_COMPANY_LOGIN,
'X-User-Token': token
},
'onerror': function (error) {}
});
取得授权码。
$loginClient = new JsonRpcClient('https://user-api.simplybook.me' . '/login/');
$token = $loginClient->getUserToken({YOUR_COMPANY_LOGIN, YOUR_USER_LOGIN, YOUR_USER_PASSWORD);
初始化客户端 JSON-RPC。
$client = new JsonRpcClient('https://user-api.simplybook.me' . '/admin/', array(
'headers' => array(
'X-Company-Login: ' . YOUR_COMPANY_LOGIN,
'X-User-Token: ' . $token
)
));
预约页面通常是一个让客户选择他们所需的服务、员工,以及他们的会议时间的页面。客户会接着输入一些联络信息并确认预约。较复杂的解决方案可包含填入不同的额外字段、做团体或多次预约等等。让我们描述一下创建最简单的预约页面之工作流程。然后,如果您需要为您的页面添加一些额外的功能,则请参阅这里的 SimplyВook.me API 方法之完整列表。
所以您应展示的第一项信息为服务列表及员工列表,使用 getEventList 及 getUnitList 方法来取得这个数据。两者皆会回传一个清单,内含其中每项对象的完整信息,所以您会有许多可能性来选择如何在您的页面上展示服务与员工。欲做员工筛选,使用服务清单的 unit_map 性能,其含有可以提供所选服务之员工的信息。
取得服务列表的范例代码
$services = $client->getEventList();
// returns array(array(
// 'id' => 1, - service id
// 'name' => 'Service 1', - service's name
// 'description' => 'Describe your service...', - service description
// 'duration' => 60, - service duration
// 'hide_duration' => 0, - Hide duration to clients flag,
// 'picture' => null, - file name of picture or null
// 'picture_path' => '/uploads/apidemo/event__picture/small/', - full path to picture,
// 'position' => 1 - service position
// 'is_active' => 1, - the service is activated
// 'is_public' => 1, - the service is allowed to book by clients
// ), ...)
取得服务执行者列表的范例代码
$services = $client->getUnitList();
// returns array(array(
// 'id' => 1, - performer id
// 'name' => 'Provider 1', - performer name
// 'phone' => '111111111', - perfomer phone number
// 'description' => 'Describe your performer...', - performer description
// 'email' => 'test@gmail.com', - perfomer email,
// 'is_active' => 1, - the performer is activated
// 'is_visible' => 1, - the perfomer is visible for clients,
// 'picture' => null, - file name of picture or null,
// 'picure_path' => '/uploads/apidemo/unit_group__picture/small/', - full path to picture
// 'position' => 1, - performer position
// 'qty' => 1, performer quantity
// ), ...)
客户的下一步是选择想要的服务日期与时间。我们在 API 使用范例中使用了一个 Bootstrap 日期选择器,您可以使用之或是任何其他的日历。 欲设定您日历的第一天,使用 getFirstWorkingDay 方法。其可用员工 ID 作为参数并回传所选员工(预设则为任何员工)可做预约的下一天之日期。{""|t} 欲显示所选日期中的时段,您需要 getWorkCalendar 及 getStartTimeMatrix 方法。第一个方法给您工作日的开始及结束时间以及休息日的信息,第二个方法则回传一个特定日期中可预约的时段之清单。
取得工作日信息的范例代码
$year = 2020;
$month = 3; // March
$performerId = 1; // Can be null
$workDaysInfo = $client->getWorkCalendar($year, $month, $performerId);
// returns array(
// '2020-03-01' => array('from' => '09:00:00', 'to' => '18:00:00', 'is_day_off' => 0),
// '2020-03-02' => array('from' => '09:00:00', 'to' => '18:00:00', 'is_day_off' => 0),
// ...
//);
取得开始时间矩阵的范例代码
$dateFrom = '2020-03-03';
$dateTo = '2020-03-04';
$serviceId = 1;
$performerId = 1;
$qty = 1;
$availableTime = $client->getStartTimeMatrix($dateFrom, $dateTo, $serviceId, $performerId, $qty);
// returns array(
// '2015-03-03' => array('09:00:00', '09:30:00', '10:00:00', ....),
// '2015-03-04' => array('09:00:00', '09:30:00', '10:00:00', ....),
//);
另一个您可能会需要的实用方法为 calculateEndTime。每个服务皆可有自己的服务时间长度,您的员工每天亦可能有不同的工作时段。使用这个方法,您就可以为客户正确地显示其所预约的服务之结束日期与时间。
计算预约结束时间的范例代码
$startDateTime = '2020-03-03 09:00:00';
$serviceId = 1;
$performerId = 1;
$availableTime = $client->calculateEndTime($startDateTime, $serviceId, $performerId);
// returns '2020-03-03 10:00:00'
当一位客户点击确认预约的按钮时,您必须呼叫 book 方法。 这是执行所有必要的验证和在 SimplyВook.me 系统中注册新预约的主要功能。它需要与预约及客户数据(如名称、电话和一些额外的参数)相关的信息。在 API 功能列表中查看此方法的所有参数说明。 本 book 方法的回应含有一组独特的代码以及这个新预约的其他细节,如果出现任何问题,亦会回传错误的清单,所以您可使用这个信息来以便利、直观的方式将预约结果展示给客户。
某些情况下,book 方法可能会需要确认动作。例如,如果您接受客户的付款,则您仅在收到款项后才确认该预约。 SimplyВook.me API 的 confirmBookng 方法搜集预约 ID 以及安全签名以作为参数。(cancelBookng 是另一个需要安全签名的方法。) 您必需使用您的 API 密钥来产生安全签名。欲知如何完成这个动作,请见下面的范例。您可开启管里界面的「客制功能」页面,然后从 API 客制功能的「设定」内取得这组密钥。
服务预约以及使用 API 密钥来确认之范例代码
$additionalFields = array(
'6740d3bce747107ddb9a789cbb78abf3' => 'value1',
'b0657bafaec7a2c9800b923f959f8163' => 'value2'
);
$clientData = array(
'name' => 'Client name',
'email' => 'client@email.com',
'phone' => '+13152108338'
);
$bookingsInfo = $client->book($eventId, $unitId, $date, $time, $clientData, $additionalFields);
if ($bookingsInfo->require_confirm) {
foreach ($bookingsInfo->bookings as $booking) {
$sign = md5($booking->id . $booking->hash . YOUR_API_SECRET_KEY);
$result = $client->confirmBooking($booking->id, $sign);
echo '<br>Confirm result</b><br />';
var_dump($result);
}
}
取得额外字段的范例代码
$fields = $client->getAdditionalFields($eventId);
// returns - array(array(
// 'name' => 'b0657bafaec7a2c9800b923f959f8163', - field name
// 'title' => 'Test digits', - field title
// 'type' => 'digits', - field type
// 'values' => null, - available values for select field type
// 'default' => null, - default value for field
// 'is_null' => null, - is filed nullable
// 'on_main_page' => 1,
// 'pos' => 1, - field position
// 'value' => null
// )), ...)
如果您的公司需要一些特定的额外功能,您可启用一些我们的额外客制功能。您可于管理界面的「客制功能」页面查看完整的客制功能列表及详细描述。启用所需的客制功能之后,相应的 API 方法亦会启动,供您使用于您的代码中。
在 SimplyВook.me API 中使用 loginClient.getToken(companyLogin, apiKey); 功能来授权。
Check if Service categories plugin is activated by isPluginActivated('event_category') if yes then display list of categories getCategoriesList().
Get list of services (events) and performers (units) using getEventList() and getUnitList() functions. If 'unit_map' array is available for service it means this service can be provided by given performers only.
If Any Employee selector plugin is activated isPluginActivated('any_unit') and no special duration is set for service-performer pair in 'unit_map' array then user should be allowed to select Any provider option or choose provider manually. But manual selection of performers should not be possible if getCompanyParam('any_unit__hide_other_units') is enabled.
Use getStartTimeMatrix ($from as current date, $to as current date, $eventId, $unitId, $count as selected participants value ) to get available timeslots for given date. $unitId should be null if Any employee option is selected.
If Any Employee selector is active and Any employee was selected call getAvailableUnits($eventId, $dateTime, $count) to get available $unitId
If Additional fields plugin is activated isPluginActivated('event_field') call getAdditionalFields($eventId) function to get list of fields for client to fill.
Call book($eventId, $unitId, $date, $time, $clientData, $additional, $count, $batchId) to make a booking.
var token = loginClient.getToken(companyLogin, apiKey);
var loginClient = new JSONRpcClient({
'url': 'https://user-api.simplybook.me/login',
'onerror': function (error) {
alert(error);
}
});
var token = loginClient.getToken('{companyLogin}', '{apiKey}');
var events = client.getEventList();
var client = new JSONRpcClient({
'url': 'https://user-api.simplybook.me',
'headers': {
'X-Company-Login': '{companyLogin}',
'X-Token': '{token}'
},
'onerror': function (error) {
alert(error);
}
});
var services = client.getEventList();
var units = client.getUnitList();
var performers = client.getUnitList();
// fetch service and performers selects here
var serviceId;
var performerId;
jQuery('#select_event_id').empty();
jQuery('#select_unit_id').empty();
jQuery('#select_event_id').append('<option value=""></option>');
jQuery('#select_unit_id').append('<option value=""></option>');
for (var id in services) {
jQuery('#select_event_id').append('<option value="' + id + '">' + services[id].name + '</option>');
}
for (var id in performers) {
jQuery('#select_unit_id').append('<option value="' + id + '">' + performers[id].name + '</option>');
}
jQuery('#select_event_id').change(function () {
// service id
serviceId = jQuery(this).val();
var selectedService = services[serviceId];
// filter available performers
if (selectedService) {
if (typeof(selectedService.unit_map) != 'undefined' && selectedService.unit_map.length) {
jQuery('#select_unit_id option').attr('disabled', true);
jQuery('#select_unit_id option[value=""]').attr('disabled', false);
for (var i = 0; i < selectedService.unit_map.length; i++) {
jQuery('#select_unit_id option[value="' + selectedService.unit_map[i] + '"]').attr('disabled', false);
}
} else {
jQuery('#select_unit_id option').attr('disabled', false);
}
}
jQuery('#eventId').val(serviceId).change();
});
jQuery('#select_unit_id').change(function () {
performerId = jQuery(this).val();
});
var firstWorkingDay = client.getFirstWorkingDay(performerId);
var firstWorkingDay = client.getFirstWorkingDay(performerId);
workCalendar = client.getWorkCalendar(year, month, performerId);
// Init datepicker.
var workCalendar = {};
jQuery('#datepicker').datepicker({
'onChangeMonthYear': function (year, month, inst) {
workCalendar = client.getWorkCalendar(year, month, performerId);
jQuery('#datepicker').datepicker('refresh');
},
'beforeShowDay': function (date) {
var year = date.getFullYear();
var month = ("0" + (date.getMonth() + 1)).slice(-2);
var day = ("0" + date.getDate()).slice(-2);
var date = year + '-' + month + '-' + day;
if (typeof(workCalendar[date]) != 'undefined') {
if (parseInt(workCalendar[date].is_day_off) == 1) {
return [false, "", ""];
}
}
return [true, "", ""];
}
});
var firstWorkingDateArr = firstWorkingDay.split('-');
workCalendar = client.getWorkCalendar(firstWorkingDateArr[0], firstWorkingDateArr[1], performerId);
jQuery('#datepicker').datepicker('refresh');
var startMatrix = client.getStartTimeMatrix(from, to, eventId, unitId, count)
// Handle date selection
var count = 1; // How many slots book
function formatDate(date) {
var year = date.getFullYear();
var month = ("0" + (date.getMonth() + 1)).slice(-2);
var day = ("0" + date.getDate()).slice(-2);
return year + '-' + month + '-' + day;
}
function drawMatrix(matrix) {
jQuery('#starttime').empty();
for (var i = 0; i < matrix.length; i++) {
jQuery('#starttime').append('<span data-time="' + matrix[i] + '">' + matrix[i] + '</span>');
}
jQuery('#starttime span').click(function () {
startTime = jQuery(this).data('time');
jQuery('#starttime span').removeClass('selected');
jQuery(this).addClass('selected');
});
}
jQuery('#datepicker').datepicker('option', 'onSelect', function () {
var startDate = formatDate(jQuery(this).datepicker('getDate'));
jQuery('#dateFrom, #dateTo').val(startDate);
var startMatrix = client.getStartTimeMatrix(startDate, startDate, serviceId, performerId, count);
drawMatrix(startMatrix[startDate]);
});
var startMatrix = client.getStartTimeMatrix(firstWorkingDay, firstWorkingDay, serviceId, performerId, count);
drawMatrix(startMatrix[firstWorkingDay]);
var additionalFieldsActivated = client.isPluginActivated('event_field');
var additionalFieldsActivated = client.isPluginActivated('event_field');
// load additional fields
var additionalFields = [];
function clearAdditionalFields() {
jQuery('#additional-fields').empty();
additionalFields = [];
}
function addAdditionalField(field) {
var container = jQuery('<div class="form-group"></div>');
var title = jQuery('<div class="control-label">' + field.title + '</div>');
container.append(title);
var fieldContainer = jQuery('<div class="field"></div>');
container.append(fieldContainer);
var fieldNode = null;
switch (field.type) {
case 'checkbox':
fieldNode = jQuery('<input type="checkbox" name="' + field.name + '" id="' + field.name + '" value="1" />');
if (field['default']) {
fieldNode.attr('checked', true);
}
break;
case 'select':
fieldNode = jQuery('<select class="select select2" name="' + field.name + '" id="' + field.name + '"></select>');
var values = field.values.split(',');
for (var k = 0; k < values.length; k++) {
fieldNode.append(jQuery('<option value="' + values[k].trim() + '">' + values[k].trim() + '</option>'));
}
if (field['default']) {
fieldNode.val(field['default']);
}
break;
case 'textarea':
fieldNode = jQuery('<textarea name="' + field.name + '" id="' + field.name + '"></textarea>');
if (field['default']) {
fieldNode.val(field['default']);
}
break;
default:
fieldNode = jQuery('<input type="text" name="' + field.name + '" id="' + field.name + '" />');
if (field['default']) {
fieldNode.val(field['default']);
}
break;
}
if (fieldNode) {
if (field.type == 'checkbox') {
fieldNode.addClass('checkbox');
} else {
fieldNode.addClass('form-control');
}
fieldContainer.append(fieldNode);
jQuery('#additional-fields').append(container);
}
}
if (additionalFieldsActivated) {
clearAdditionalFields();
additionalFields = client.getAdditionalFields(serviceId);
for (var i = 0; i < additionalFields.length; i++) {
addAdditionalField(additionalFields[i]);
}
}
// Collect client data
var clientData = {
'name': jQuery('#clientName').val(),
'email': jQuery('#clientEmail').val(),
'phone': jQuery('#clientPhone').val()
};
// Collect additional fields
var additionalFieldValues = {};
jQuery('#additional-fields input, #additional-fields select, #additional-fields textarea').each(function () {
var val = '';
if (jQuery(this).attr('type') == 'checkbox') {
if (jQuery(this).is(':checked')) {
val = 1;
} else {
val = 0;
}
} else {
val = jQuery(this).val();
}
additionalFieldValues[jQuery(this).attr('name')] = val;
});
var count = 1;
var result = client.book(serviceId, performerId, startDate, startTime, clientData, additionalFieldValues, count);
Thank you for reading!
Returns API url for given company login
Returns an application's token string for a company. You should use this token to authenticate all calls of
[[Company public service methods|Company public service API methods]] and [[Catalogue|Catalogue API methods]]. To
get application API key you need to enable [[Plugins#API|API plugin]].
Returns an authentication token string for certain user registered for company. You should use this token to
authenticate all calls of [[Company administration service methods|Company administration service API methods]] and
[[Catalogue|Catalogue API methods]].
Returns an application's token string for an application. You should use this token to authenticate all calls of
[[Company public service methods|Company public service API methods]] and [[Catalogue|Catalogue API methods]]. To
get application API key please contact SimplyBook.me support team.
{@inheritdoc}
{@inheritdoc}
{@inheritdoc}
{@inheritdoc}
Returns payment processor config
Validate application payment.
Returns cart information by bookings ids.
cart_id
and cart_hash
is used to create secure signature to confirm cart payment.
status
- current cart status
amount
- is total amount to payment
currency
- cart currency
cart
- contains cart items. You can use them to provide information for payment system. Each item is object with following fields:
id
- booking id
event_id
- service id
name
- event name + start date time (use it to provide cart information for payment system)
price
- booking price
qty
- qty of bookings
Returns current cart information
cart_id
and cart_hash
is used to create secure signature to confirm cart payment.
amount
- is total amount to payment
currency
- cart currency
cart
- contains cart items. You can use them to provide information for payment system. Each item is object with following fields:
id
- booking id
event_id
- service id
name
- event name + start date time (use it to provide cart information for payment system)
price
- booking price
qty
- qty of bookings
Returns current cart status
Possible result values:
cancel
- user has canceled payment
paid
- user has paid
error
- error has been occurred on validation payment
not_paid
- cart is not paid yet or payment status is pending
Confirm booking cart. Use it to confirm payment. Signature is required.
Confirm booking. Signature is required.
$sign = md5($bookingId . $bookingHash . $secretKey);
Call this method from server side only
Confirm booking payment. Signature is required.
$sign = md5($bookingId . $bookingHash . $secretKey);
Call this method from server side only
Confirms booking batch. Signature is required.
$sign = md5($batchId . $batchHash . $secret)
Call this method from server side only
Returns an object with details information about booking. $sign
parameter must be a string created
with formula: md5($bookingId . $bookingHash . $secretKey)
. You can get $bookingHash
value as result of [[#book|book]]
API method call. Method return an error with code -32080
(Appointment couldn't be found) if record with specified id not exists. Methods returns an error with code -32085
(Signature error) if $sign
parameter is wrong.
Returns an object with details information about booking. $sign
parameter must be a string created
with formula: md5($bookingId . $bookingHash . $secretKey)
. You can get $bookingHash
value as result of [[#book|book]]
API method call. Method return an error with code -32080
(Appointment couldn't be found) if record with specified id not exists. Methods returns an error with code -32085
(Signature error) if $sign
parameter is wrong.
Returns true if [[Plugins#Accept_payments|Accept payments]] plugin activated and event with specified id has
configured price. If no paramentes specified then method returns true if payments plugin activated and at least
one event has configured price. Otherwise returns false.
Creates new booking record. Returns an object with appointment information or throw exception if booking time not
available or any of required parameters missed. If appointment requires confirmation, in result object will be
require_confirm = true
. $startDate
and $startTime
specifies a date of
booking and time slot. Time value should be multiple to 'timeframe' configuration of company (see
[[#getTimeframe|getTimeframe]]
API method). $endDate
and $endTime
parameters
should be calculated according to service duration. However you can specify different values to make appointment
longer or shorter then service configuration. Note that $endDate
and $endTime
should be
later in time than $startDate
and $startTime
. If your clients located in different time
zone you should specify 'client_time_offset'
value in $clientData
object as difference
between client's time zone and company's time zone in minutes. For example if company located in city with time
zone GMT+2 and customer located in city with GMT+3 then $clientTimeOffset
will be 60 minutes. You
can get information about company's time zone using [[#getCompanyInfo|getCompanyInfo]]
API method. To
create batch booking you can specify either count
more then 1 or valid batchId
(only one
parameter can be specified). You should specify an $additionalFields
parameter if service requires
some additional fields (see [[Plugins#Additional fields|Additional fields plugin]]). To create a booking with promo code you
should pass it as additional field. For example: {"name": "promocode", "value": "some code", "type": "text"}
See [[#book response|example]] of book
API method response.
Get list of dates for recurring booking
Returns availability of active promotions
Validate promotion code.
Returns true in case promocode is valid otherwise throws exception with error.
Returns an object with detailed information about promotion by promotion code. Returns null if no promotions with
specified code were not found.
Returns promotion reward by common promotion id, client id and hash.
Returns user license text if user license plugin is turned on,
otherwise throws exception
Returns client info by client id
Returns client information by clients login (email)/password
Sends remind email for client
Get client information by client login hash
Edit client information data
Returns list of available memberships
Returns purchased membership list
Returns client bookings, accepts $filter ($filter {upcoming_only: true/false, confirmed_only: true/false})
Checks if client has access to book with $eventId at $startDateTime
Returns product list with filter.
At this time filter can accept only service_id parameter
Returns company's classes list. Ordered by position
Edit existing booking record. See [[#book|book]] API method description for more details about date/time parameters,
time zone handling and additional fields. Returns null if parameters not valid.
Returns company config value for key. A different set of keys available for public API and for company
administration API. Method return 'invalid params' error (code -32602) in case if access to specified key not
allowed. See [[#Company_params|list of available keys]].
Returns company's config values for specified keys as key-value map. For non-existent and not-allowed param keys
it will return '''false''' as result. A different set of keys available for public API and for company
administration API. See [[#Company_params|list of available keys]].
Returns company timeline type
Returns end datetime if booking is available, else return false
Returns company work schedule as array
Eg.: {'2014-05-01': {'from': '09:00:00', 'to': '21:00:00', 'is_day_off': '0'}, '2014-05-02': ...}
Returns map of objects for each day in specified date range. The key of the result mps is a date string. The value
is an array of two objects. Both objects contains list of time slots for type reserved_time
and type
not_worked_time
. reserved_time
type represents time slots working time but already booked
by clients. Nobody knows what kind of data represented by not_worked_time
type. Please don't use it.
If [[Plugins#Google calendar sync plugin|Google calendar sync plugin]] enabled then object with
reserved_time
type will contain not empty list of time slots marked as busy in Google calendar. Call
[[#isPluginActivated|isPluginActivated('google_calendar_export')]]
API method to check if Google
calendar sync plugin activated.
Example:
{
"2016-02-05": [
{
"dd": [], // time slots from Google calendar
"events": [ // reserved time slots
{ "from": "16:00", "to": "16:30" },
{ "from": "16:30", "to": "17:00" },
... ],
"type": "reserved_time",
},
{
"events": [
{ "from": "09:00", "to": "09:30" },
{ "from": "09:30", "to": "10:00" },
... ],
"type": "not_worked_time"
}],
...
}
Returns an information about working hours and break times for specified service and performer for a period
between two dates. If only service specified then information about performer (or performers) will be taken from
service configuration. Method returns a list of objects for each date in specified period. Count of objects in
list depends on break times. For example if performer works from 9:00 till 19:00 with one hour break at 13:00 method
returns:
{'2014-05-14' : [
{'from': '09:00:00', 'to': '13:00:00'},
{'from': '14:00:00', 'to': '19:00:00'}
] }
Returns first working date for unit
Returns available start time, taking into account breaktimes, start and end working time
Eg.: {'2014-05-14': ['09:00:00', ...], ...}
If locations plugin activated for company you should pass a list as $unitID parameter for filter results with
units available only for selected location. See [[Plugins#Unit_location|Unit location]] plugin description for
more details.
Returns available time intervals for all service providers for given period, taking into account breaktimes, start and end working time
Eg.: {['2016-03-04': ['1': [['09:00:00','09:30:00'], ['11:15:00','14:45:00']] , ...], ...]}
Returns available time intervals for all servics for given period, taking into account breaktimes, start and end working time
Eg.: {['2016-03-04': ['1': [['09:00:00','09:30:00'], ['11:15:00','14:45:00']] , ...], ...]}
Returns not available time
Eg.: {'2014-05-14': [{'reserved_time': [{'from': '14:00', 'to': '16:30'}], 'type': "reserved_time"}, ...], ...}
Returns list of available unit ids for specified date and service or empty array if all units are not allowed.
Eg.: [1, 2, 3]
Returns information about [[Plugins#Any_Employee_selector|Any Employee selector plugin]] configuration. Returns
null if plugin not enabled.
Example:
{
"description" : "Select this option, if you want to find an available time with any of the employees",
"hide_other_units" : 1, // 1 or 0
"image" : null,
"name" : "Any employee",
"picture_path" : null,
"random_selection" : 0 // 1 or 0
}
Return additional fields for certain event if [[Plugins#Additional_fields|Additional fields plugin]] is
activated. Returns empty array otherwise. Call [[#isPluginActivated|isPluginActivated('event_field')]]
API method to check if 'event_field' plugin activated.
Returns company's timeframe configuration (in minutes). Timeframe can be either 5, 10, 15, 20, 30 or 60 minutes.
You can find more details about timeframe [[Settings#Timeframe|here]].
Return plugin status true if status active, else false. $pluginName parameter is a plugin identifier.
See [[Plugins|plugins]] page for full plugins description. See [[#Plugin's identifiers|list of available plugin's names]].
Return plugin status true if status active, else false. See [[#Plugin's identifiers|list of available plugin's names]].
Returns an object with detailed information about company. See [[#getCompanyInfo response|example of response]].
Creates new booking batch record. Returns newly created batch id. You can use this id in [[#book|book]]
API method.
Returns country phone code list
Returns an object with detailed information about promotion by promotion code. You can get promotion code
using [[Catalogue#getPromotionList|getPromotionList]]
API method. If promotion record with specified
code not found then method returns an empty array (an empty object). If [[Plugins#Simply Smart Promotions|Simply Smart Promotions plugin]]
not enabled then method returns an error with code -32001 (Plugin is not activated). Use
[[#isPluginActivated|isPluginActivated('promo')]]
API method call to check if plugin enabled.
See [[#getPromotionList response|example]] of getPromotionList
API method response. Please note that
response contains a list of services for wich promotion discount can be applied (service_ids
key).
Returns company timezone offset and company timezone
Get user db data (id, phone, is_validated)
Save configuration keys
Get structure of SMS and Email notification config params
Returns list of bookings filtered by given params. Filter params represented as object with following fields:
* '''date_from''' a date of booking in string format 'Y-m-d'
* '''time_from''' a time string in format 'H:i:s'
* '''date_to''' a date string in format 'Y-m-d'
* '''time_to''' a time string in format 'H:i:s'
* '''created_date_from''' a date string in format 'Y-m-d'
* '''created_date_to''' a date string in format 'Y-m-d'
* '''edited_date_from''' a date string in format 'Y-m-d'
* '''edited_date_to''' a date string in format 'Y-m-d'
* '''unit_group_id''' an integer. Use it to get bookings assigned for certain service provider.
* '''event_id''' an integer. Use it to get bookings only for certain service.
* '''is_confirmed''' 1 or 0. If [[Plugins#Approve booking|Approve booking]] plugin enabled then method will return confirmed bookings with approve status 'new'.
* '''client_id''' an integer. Use it to get bookings only for certain client.
* '''order''' string either 'record_date', 'date_start' or 'date_start_asc'. By default used 'date_start' value.
* '''booking_type''' a string. Value of this field depends on Approve booking plugin status.
* '''code''' booking code
*: If plugin not active:
** '''all''' for all bookings (default value)
** '''cancelled''' alias to 'is_confirmed' equal to 0
** '''non_cancelled''' alias to 'is_confirmed' equal to 1
*: If plugin active:
** '''all''' for all bookings (default value)
** '''cancelled''' returns bookings with 'is_confirmed' field equals to 0 and approve booking status equals to 'cancelled' (or booking does not have any approve status)
** '''non_cancelled''' returns bookings with either 'is_confirmed' field equals to 1 or approve booking status equals to 'new'
** '''cancelled_by_client''' returns bookings approved by admin but cancelled by client
** '''cancelled_by_admin''' returns bookings cancelled by admin
** '''non_approved_yet''' returns bookings with approve status 'new'
** '''approved''' returns bookings with either 'is_confirmed' field equals to 1 and approve booking status equals to 'approved' (or booking does not have any approve status)
Example:
{
"date_from":"2015-12-29",
"date_to":"2015-12-29",
"booking_type":"cancelled",
"event_id":"5",
"order":"start_date"
}
'create', 'cancel', 'new_client', 'change', 'create_invoice'
Returns client data
Returns client data
Returns client data
Returns list of bookings filtered by given params
Returns detailed bookings object by booking id. See [[#getBookingDetails_response|response example]].
Return busy time by unit id by GoogleCalendar plugin if enabled.
Please note that this method may return not actual data because data synchronization between server and
Google Calendar may take some time and synchronized data are cached for 15 minutes.
Returns a list of objects represented a time intervals marked as busy in Google Calendar. Each object of result
contains from
and to
properties with datetime string as value. This method only actual if
[Plugins#Google calendar sync plugin|Google calendar sync plugin] enabled. If plugin not enabled an empty list will
be returned. You should call [[#isPluginActivated|isPluginActivated('google_calendar_export')]]
to
check status of the plugin. Each object of result contains from
and to
properties with
datetime string as value. Please note that this method may return not actual data because data synchronization
between server and Google Calendar may take some time and synchronized data are cached for 15 minutes.
Example:
[
{"from" : "2016-02-16 13:30:00",
"to" : "2016-02-16 16:00:00"},
...
]
Returns configured unit ids, allowed to sync busy time
Returns time intervals not available for bookings because of configuration of [[Plugins#Limit bookings|Limit bookings]]
plugin for period of time. Returns empty array if plugin not available.
Return working durations
Return workload data for units in period of time. Workload for each unit represented as array with work hours
at index 0, confirmed booking hours as load at index 1 and cancelled bookings hours at index 2.
Example:
['2015-10-21' : {
5 : [
10, // working hours
10, // load hours (confirmed bookings hours)
0 // cancelled bookings hours
] }]
Return bookings count and revenue value for each date in specified period. Data grouped by unit id and
represented as array with bookings count at index 0 and revenue amount at index 1. You can filter data either
by unit or by service. Set $dateStart
and $dateEnd
to null to get data for current week.
Example:
['2015-11-12' : {
3 : [
11, // bookings count
128.53 // revenue
]}
Return workday info (date_start and date_end)
Cancels booking. Returns true on success. Returns an error with code -32080 (Appointment couldn't be found) if
no booking with specified id were found.
Cancel batch of bookings. Returns true on success. Returns an error with code -32080 (Appointment couldn't be found)
if no booking with specified id were found. A booking with first id in $bookingIds
list is used for
information in notifications.
Creates new booking record. Returns an object with appointment information or throw exception if booking time not
available or any of required parameters missed. If appointment requires confirmation, in result object will be
require_confirm = true
. $startDate
and $startTime
specifies a date of
booking and time slot. Time value should be multiple to 'timeframe' configuration of company (see
[[#getTimeframe|getTimeframe]]
API method). $endDate
and $endTime
parameters
should be calculated according to service duration. However you can specify different values to make appointment
longer or shorter then service configuration. Note that $endDate
and $endTime
should be
later in time than $startDate
and $startTime
. If your clients located in different time
zone you should specify 'client_time_offset'
value in $clientData
object as difference
between client's time zone and company's time zone in minutes. For example if company located in city with time
zone GMT+2 and customer located in city with GMT+3 then $clientTimeOffset
will be 60 minutes.
You can get information about company's
time zone using [[#getCompanyInfo|getCompanyInfo]]
API method. To create batch booking you can
specify either count
more then 1 or valid batchId
(only one parameter can be
specified). You should specify an $additionalFields
parameter if service requires some additional
fields (see [[Plugins#Additional fields|Additional fields plugin]]).
To create a booking with promo code you should pass it as additional field. For example: {"promocode": "some code"}
If [[Plugins#Unit location|Unit location]] enabled you need to pass locations ID parameter as additional field
location_id
. For example: {"location_id": "1"}
. Use [[#isPluginActivated|isPluginActivated('location')]]
to check if plugin active and [[#getLocationsList|getLocationsList()]]
method to get list of
available locations.
See [[#book response|example]] of book
API method response.
Edit existing booking record. See [[#book|book]] API method description for more details about date/time parameters,
time zone handling and additional fields. Returns null if parameters not valid.
Adds new client with specified data. You can specify name, email, phone, address1, address2, city, zip,
country_id.
email, phone number or both of them can be mandatory fields. You should call
getCompanyParam('require_fields')
method to check which fields are required.
Method returns an error:
* -32061 Client name value is wrong
* -32062 Client email value is wrong
* -32063 Client phone value is wrong
Example:
{
name: "Frances T. Perez",
phone: "+1502-810-4521",
email: "FrancesTPerez@teleworm.us",
address1: "3872 Earnhardt Drive",
address2: "Louisville, KY 40219",
city: Louisville,
zip: 3872
}
Edits client's record. See [[#addClient|addClient]]
method description for list of available fields.
Method returns an id of client's record.
Change client password and send password email changing
Resets client password and send them emails
Sends remind email for client
Returns list of clients associated with company. You can use either phone number, email address or name as value
for $searchString
. Pass an empty string for $searchString
and null for $limit
parameters to get all records. See [[#addClient|addClient]]
API method for list of available fields
of client data object.
Returns list of available statuses or an empty list if [[Plugins#Status|Status plugin]] not enabled.
Returns status of given booking (if status plugin is enabled)
default status will be returned if bookingId does not exists
Sets specified status for booking. Returns an error with code -32020 if logged in user don't have access to edit
bookings. This method does nothing if [[Plugins#Status|Status plugin]] not enabled.
Returns an object with recurring settings for an event. Returns false if specified event does not configured as
recurring.
Returns a list with statistics for services for a period of time. This data contains number of bookings and
revenues value for each service.
Returns a list with statistics for performers. This data contains number of bookings and revenues value for each performer.
Get list of dates for recurring booking
Get list of all countries
Get list of feedbacks
Returns latest actions
Returns a list of objects represented system warnings. Each warning contains warning_type
and warning_text
properties. warning_text
property contains localized message. warning_type
can be one of the values:
* '''sms_limit''' – warning indicates low amount of SMS credits
* '''sheduler_limit''' – warning indicates low amount of available bookings
Mark notifications as readed
Returns last update datetime
Returns statistics about created bookings and cancellations for a time period. Data presented as array of hashes for
each type of operation (created or cancelled booking) groped by clients. "type"
field can be either
"create", "cancel" or "nopayment_cancel". If "user_id"
not specified then bookings where created or
cancelled by admin or employee. Data with type "nopayment_cancel"
represents bookings cancelled
automatically by system.
Example:
3 bookings where created by admin or employee and 2 bookings where automatically cancelled by system.
[{
"cnt" : 3,
"firstname" : null,
"lastname" : null,
"login" : null,
"type" : "create",
"user_id"" : null
}, {
"cnt" : 2,
"firstname" : null,
"lastname" : null,
"login" : null,
"type" : "nopayment_cancel",
"user_id"" : null
}]
Sets approve booking status to 'approved' if [[Plugins#Approve booking|Approve booking]] plugin enabled and returns
list of approved booking IDs. Returns false if plugin not enabled. Use [[#isPluginActivated|isPluginActivated('approve_booking')]]
API method call to check if plugin enabled.
Sets approve booking status to 'canceled' if [[Plugins#Approve booking|Approve booking]] plugin enabled and returns
true. Returns false if plugin not enabled. Use [[#isPluginActivated|isPluginActivated('approve_booking')]]
API method call to check if plugin enabled.
Returns count of bookings pending approval if [[Plugins#Approve booking|Approve booking]] plugin enabled. Returns
0 if plugin not enabled. Use [[#isPluginActivated|isPluginActivated('approve_booking')]]
API method
call to check if plugin enabled.
Returns list of objects with information about bookings pending approval if [[Plugins#Approve booking|Approve booking]]
plugin enabled. Returns empty list if plugin not enabled. Use [[#isPluginActivated|isPluginActivated('approve_booking')]]
API method call to check if plugin enabled.
Returns a list of all plugins associated with company with status.
Returns booking comment
Set booking comment
Returns all information about current tariff (subscription). For example:
{
"name" : "gold",
"expire_date" : "2016-02-11 12:32:00",
"rest" : 41, // number of days until subscription expiration
"color" : "#fcb322"
}
Returns number of clients registrations by 'day', 'week' or 'month'. A time period depends on selected
grouping parameter:
* for 'day' methods returns statistics for last 31 days
* for 'week' methods returns data last 10 weeks period
* for 'month' time period is last 12 months
Returns statistic about bookings count grouped by 'day', 'week' or 'month'. A time period depends on selected
grouping parameter:
* for 'day' methods returns statistics for last 31 days
* for 'week' methods returns data last 10 weeks period
* for 'month' time period is last 12 months
Returns statistics about page visits if plugin [[Plugins#Visitor Counter|Visitor Counter plugin]] enabled. Returns
an empty list if plugin not enabled. Use [[#isPluginActivated|isPluginActivated('counter')]]
API method
call to check if plugin enabled. Results can be grouped by 'day', 'week' or 'month'. A time period depends on
selected grouping parameter:
* for 'day' methods returns statistics for last 31 days
* for 'week' methods returns data last 10 weeks period
* for 'month' time period is last 12 months
Returns social counters value for your domain
Returns company's currency as three chars code (ISO 4217).
Returns list of all comments for given client
Returns current SOAP information by client id
Returns SOAP history by client id
Returns current SOAP (crypt) information by client id
Returns SOAP (crypt) history by client id
Returns an object with information about logged in user. Note: you are responsible for implementation of some
access rights based on group
property value. Most of API methods returns an error if user has low access
rights but not all. There are 4 roles:
* '''Administrator''' - have full access to the system
* '''Senior Employee''' - have access to calendar, services and providers, and can modify bookings related with user
* '''Junior Employee''' - can access caledar (but only to own bookings), services associated with user
* '''Viewer''' - have only access to calendar and services in read only mode
group
property can be one of the values:
* shop_user
- "Senior Employee" access role
* station_user
- "Junior Employee" access role
* admin
- "Administrator" access role
* viewer
- "Viewer" access role
* reseller_company_admin
- reserved
Example:
{
"id": 1,
"login": admin,
"email": "admin@mycoolcompany.com";
"firstname": "Michail",
"lastname": " ",
"phone": "",
"group": "admin",
"is_blocked": 0,
"last_access_time": "2016-06-06 17:55:51",
"unit_group_id": null
}
Returns company categories list if [[Plugins#Service categories|Service categories plugin]] is activated. Returns
an error with code -32001 if plugin is not activated. Use [[#isPluginActivated|isPluginActivated('event_category')]]
API method to check if plugin activated.
Returns available locations for company if plugin [[Plugins#Unit location|Unit location plugin]] is activated. Return
an error with code -32001 if plugin is not activated. Use [[#isPluginActivated|isPluginActivated('location')]]
API method to check if plugin activated.
This method accepts two boolean flags as parameters. If '''isPublic''' flag is '''true''' then method returns only
public locations. If '''asArray''' flag is '''true''' method returns list of objects. Otherwise method returns
map of objects with object id as key. You can omit both parameters.
Returns membership's data object.
Returns purchased membership list
Set work day schedule for company|service|provider for week_day|date
Example:
{
"start_time":"10:00",
"end_time":"18:00",
"is_day_off":0,
"breaktime":[{"start_time":"14:00","end_time":"15:00"}],
"index":"1",
"name":"Monday",
"date":"",
"unit_group_id":"",
"event_id":""
}
index is 1-7 for Monday - Sunday (used for weekly settings)
date is used to set worktime for special date
unit_group_id is provider id
event_id is service id
if unit_group_id and event_id not passed then it set data for company
Delete special date if set
Example:
{
"unit_group_id":"",
"event_id":""
}
Returns company special days and vacations
Returns special days and vacations, defined for given service (event)
Get list of company vacations in format array(vacation_id => array())
Get list of service vacations
Get list of performer vacations
Get company vacation by id
Get service vacation by id
Get service vacation by id
Save company vacation data
(create or update table depending on 'id' param existing in $data)
Save company vacation data
(create or update table depending on 'id' param existing in $data)
Save company vacation data
(create or update table depending on 'id' param existing in $data)
Delete company vacation with all it's bindings
(including created special days in work_day_special table)
Delete service vacation with all it's bindings
(including created special days in work_day_special table)
Delete performer vacation with all it's bindings
(including created special days in work_day_special table)
Returns company's classes list. If $asArray
is false then method returns a map with event id as key
and details object as value. If parameter set to true then method returns a list sorted by 'position' property of
class's details object.
Returns product list with filter.
At this time filter can accept only service_id parameter
Get paginated data for Booking report
The following filters can be provided in request param:
Date date_from, date_to, created_date_from, created_date_to
Integer unit_group_id, client_id
String code, promo_code
String booking_type = 'approved' | 'not_approved_yet' | 'cancelled_by_admin' | 'cancelled_by_client' | 'non_cancelled' | 'cancelled' | 'all'
Order can be one of the following values: record_date, date_start, date_start_asc
Return data in the following format:
array(
'data' => $data,
'metadata' => array(
'items_count'
'pages_count'
'page'
'on_page'
)
or Api_Service_Exception in error case
Get paginated data for Client report
The following filters can be provided in request param:
Date date_from, date_to
Integer event_id, unit_group_id, client_id
String client_search (search string, can contains client name, address, phone)
String service_using_type = 'used_in_period' | 'not_used_in_period' | 'not_used_in_period_but_used_before'
No custom ordering implemented yet
Group data = 'client' | 'client_email_phone' | 'client_email' | 'client_phone'
Return data in the following format:
array(
'data' => $data,
'metadata' => array(
'items_count'
'pages_count'
'page'
'on_page'
)
or Api_Service_Exception in error case
Get paginated data for SMS report
The following filters can be provided in request param:
Date date_from, date_to
Integer unit_group_id, client_id
String phone, message
No custom ordering implemented yet (always ordered by client name)
Return data in the following format:
array(
'data' => $data,
'metadata' => array(
'items_count'
'pages_count'
'page'
'on_page'
)
or Api_Service_Exception in error case
Get paginated data for Pos report
Return data in the following format:
array(
'data' => $data,
'metadata' => array(
'items_count'
'pages_count'
'page'
'on_page'
)
or Api_Service_Exception in error case
Get paginated data for Feedback report
The following filters can be provided in request param:
Date date_from, date_to
Integer from 1 to 5 rate_from, rate_to
String name, subject, message
Report can be ordered by one of the following fields:
date, rate, name, message, subject, answer
Return data in the following format:
array(
'data' => $data,
'metadata' => array(
'items_count'
'pages_count'
'page'
'on_page'
)
or Api_Service_Exception in error case
Get detailed list of promotions (new)
Get all list of promotion instances
Return promotion detailed info
Get static page list
Confirms invoice by id
Applies promo code to order (Coupons & Gift Cards custom feature)
Returns company config value for key. A different set of keys available for public API and for company
administration API. Method return 'invalid params' error (code -32602) in case if access to specified key not
allowed. See [[#Company_params|list of available keys]].
Returns company's config values for specified keys as key-value map. For non-existent and not-allowed param keys
it will return '''false''' as result. A different set of keys available for public API and for company
administration API. See [[#Company_params|list of available keys]].
Returns company timeline type
Returns company's events list. If $asArray
is false then method returns a map with event id as key
and details object as value. If parameter set to true then method returns a list sorted by 'position' property of
event's details object.
Returns list of service performers. If $asArray
is false then method returns a map with event id as
key and details object as value. If parameter set to true then method returns a list sorted by 'position' property
of event's details object.
Returns end datetime if booking is available, else return false
Returns company work schedule as array
Eg.: {'2014-05-01': {'from': '09:00:00', 'to': '21:00:00', 'is_day_off': '0'}, '2014-05-02': ...}
Returns map of objects for each day in specified date range. The key of the result mps is a date string. The value
is an array of two objects. Both objects contains list of time slots for type reserved_time
and type
not_worked_time
. reserved_time
type represents time slots working time but already booked
by clients. Nobody knows what kind of data represented by not_worked_time
type. Please don't use it.
If [[Plugins#Google calendar sync plugin|Google calendar sync plugin]] enabled then object with
reserved_time
type will contain not empty list of time slots marked as busy in Google calendar. Call
[[#isPluginActivated|isPluginActivated('google_calendar_export')]]
API method to check if Google
calendar sync plugin activated.
Example:
{
"2016-02-05": [
{
"dd": [], // time slots from Google calendar
"events": [ // reserved time slots
{ "from": "16:00", "to": "16:30" },
{ "from": "16:30", "to": "17:00" },
... ],
"type": "reserved_time",
},
{
"events": [
{ "from": "09:00", "to": "09:30" },
{ "from": "09:30", "to": "10:00" },
... ],
"type": "not_worked_time"
}],
...
}
Returns an information about working hours and break times for specified service and performer for a period
between two dates. If only service specified then information about performer (or performers) will be taken from
service configuration. Method returns a list of objects for each date in specified period. Count of objects in
list depends on break times. For example if performer works from 9:00 till 19:00 with one hour break at 13:00 method
returns:
{'2014-05-14' : [
{'from': '09:00:00', 'to': '13:00:00'},
{'from': '14:00:00', 'to': '19:00:00'}
] }
Returns first working date for unit
Returns available start time, taking into account breaktimes, start and end working time
Eg.: {'2014-05-14': ['09:00:00', ...], ...}
If locations plugin activated for company you should pass a list as $unitID parameter for filter results with
units available only for selected location. See [[Plugins#Unit_location|Unit location]] plugin description for
more details.
Returns available time intervals for all service providers for given period, taking into account breaktimes, start and end working time
Eg.: {['2016-03-04': ['1': [['09:00:00','09:30:00'], ['11:15:00','14:45:00']] , ...], ...]}
Returns available time intervals for all servics for given period, taking into account breaktimes, start and end working time
Eg.: {['2016-03-04': ['1': [['09:00:00','09:30:00'], ['11:15:00','14:45:00']] , ...], ...]}
Returns not available time
Eg.: {'2014-05-14': [{'reserved_time': [{'from': '14:00', 'to': '16:30'}], 'type': "reserved_time"}, ...], ...}
Returns list of available unit ids for specified date and service or empty array if all units are not allowed.
Eg.: [1, 2, 3]
Returns information about [[Plugins#Any_Employee_selector|Any Employee selector plugin]] configuration. Returns
null if plugin not enabled.
Example:
{
"description" : "Select this option, if you want to find an available time with any of the employees",
"hide_other_units" : 1, // 1 or 0
"image" : null,
"name" : "Any employee",
"picture_path" : null,
"random_selection" : 0 // 1 or 0
}
Return additional fields for certain event if [[Plugins#Additional_fields|Additional fields plugin]] is
activated. Returns empty array otherwise. Call [[#isPluginActivated|isPluginActivated('event_field')]]
API method to check if 'event_field' plugin activated.
Returns company's timeframe configuration (in minutes). Timeframe can be either 5, 10, 15, 20, 30 or 60 minutes.
You can find more details about timeframe [[Settings#Timeframe|here]].
Return plugin status true if status active, else false. $pluginName parameter is a plugin identifier.
See [[Plugins|plugins]] page for full plugins description. See [[#Plugin's identifiers|list of available plugin's names]].
Return plugin status true if status active, else false. See [[#Plugin's identifiers|list of available plugin's names]].
Returns an object with detailed information about company. See [[#getCompanyInfo response|example of response]].
Creates new booking batch record. Returns newly created batch id. You can use this id in [[#book|book]]
API method.
Returns country phone code list
Returns an object with detailed information about promotion by promotion code. You can get promotion code
using [[Catalogue#getPromotionList|getPromotionList]]
API method. If promotion record with specified
code not found then method returns an empty array (an empty object). If [[Plugins#Simply Smart Promotions|Simply Smart Promotions plugin]]
not enabled then method returns an error with code -32001 (Plugin is not activated). Use
[[#isPluginActivated|isPluginActivated('promo')]]
API method call to check if plugin enabled.
See [[#getPromotionList response|example]] of getPromotionList
API method response. Please note that
response contains a list of services for wich promotion discount can be applied (service_ids
key).
Returns company timezone offset and company timezone
Returns companies list
$filter filter params. Object that contains following params
'search_string': String,
'service_name': String,
'company_name': String,
'company_address': String,
'category_id': Integer,
'tag_ids': [Integer, Integer, ...],
'tags': String,
'country_id': String,
'city_id': String,
'nearby': {
'radius': Integer,
'center': {
'lat': Number,
'lng': NUmber
}
}
Returns active promotion list
$filter filter params. Object that contains following params
'search_string': String,
'service_name': String,
'company_name': String,
'company_address': String,
'tag_ids': [Integer, Integer, ...],
'tags': String,
'country_id': String,
'city_id': String,
'nearby': {
'radius': Integer,
'center': {
'lat': Number,
'lng': NUmber
}
}
Returns active promotion list
Returns total companies count with specified filter
$filter filter params. Object that contains following params
'search_string': String,
'service_name': String,
'company_name': String,
'company_address': String,
'tag_ids': [Integer, Integer, ...],
'tags': String,
'country_id': String,
'city_id': String,
'nearby': {
'radius': Integer,
'center': {
'lat': Number,
'lng': NUmber
}
}
Returns total active promotions count with specified filter
$filter filter params. Object that contains following params
'search_string': String,
'service_name': String,
'company_name': String,
'company_address': String,
'tag_ids': [Integer, Integer, ...],
'tags': String,
'country_id': String,
'city_id': String,
'nearby': {
'radius': Integer,
'center': {
'lat': Number,
'lng': NUmber
}
}
Returns country list as Array order by company count in country
Returns city list as Array order by company count in city
Returns a list of objects with just two properties each: id
and country. An id
is a two character string with ISO 3166-1 country code.
Returns a list of objects. If $country
parametr specified then method returns only cities of this
country. Each object in list has 4 properties:
* id
- number. A unique identificator of city. You should use it as filter options in methods getCompanyList
.
* city
- string. A city name.
* count_id
- string. Two chars ISO 3166-1 country code.
* count
- number.
Example:
[{
"cnt" : 7,
"country_id"" : "GB",
"id" : 4607,
"name" : "Uxbridge"
},
...]
Returns tags list
$filter filter params. Object that contains following params
'tag_ids': [Integer, Integer, ...],
'tags': String,
'country_id': String,
'city_id': String
Returns company information by company login
Returns promotion information by id
Returns related promotions by given promotion id
Returns a list of company's review objects.
[{
"company_id" : 86409,
"domain" : "simplybook.me",
"feedback_datetime" : "2015-10-27 13:06:57",
"feedback_id" : 4623,
"feedback_link" : "",
"id" : 17384,
"image" : "http://graph.facebook.com/1020443689023222/picture",
"link" : "https://www.facebook.com/app_scoped_user_id/1020443689023222/",
"message" : "Brilliant!",
"name" : "Simply Booker",
"provider" : "",
"provider_data" : "...", // String. An object encoded with PHP's serialize method.
"rate" : 5, // 0 to 5 rate
"status" : "approved", // 'new' or 'approved'
"subject" : "Good",
"with_comment" : 1
},
...]
Returns company's reviews count
Returns a company's review objects.
Returns a list of company's review likes.
Adds company review
Add promotion review
Returns promotion reviews list
Returns list of promotions ordered by date DESC
Returns list of feedbacs ordered by date DESC
Returns list of companies ordered by date DESC
Returns all categories as list of objects. Each category can have a subcategories. Each subcategory contains parent
category id in company_category_id
field. For top level categories this field is null
and
is_header
field is true
.
Example:
[{
"company_category_id": null,
"id": "1",
"image": "/common/images/category_icons/car.png",
"is_active": "1",
"is_header": "1",
"name": "Cars",
},
{
"company_category_id": "1",
"id" = 11;
"image": null,
"is_active": "1",
"is_header": "0",
"name": "Car wash",
},
...]
Get list of ALL simplybook feedbacks
Returns a list of promotions objects associated with specified company. If company doesn't have any promotions or
[[Plugins#Simply_Smart_Promotions|Simply Smart Promotions plugin]] not active for this company method returns an
empty list.
Returns user location info
Returns suggestions for autocompeter
$filter filter params. Object that contains following params
'search_string': String,
'service_name': String,
'company_name': String,
'company_address': String,
'category_id': Integer,
'tag_ids': [Integer, Integer, ...],
'tags': String,
'country_id': String,
'city_id': String,
'nearby': {
'radius': Integer,
'center': {
'lat': Number,
'lng': NUmber
}
}
Anonymize client feedbacks and feedback likes
according to GDPR client's right to be forgotten
Delete promotion_feedbak and promotion_feedback_response data
according to GDPR client's right to be forgotten
POST https://user-api-v2.simplybook.me/admin/auth
Content-Type: application/json
{
"company": "<insert your company login>",
"login": "<insert your user login>",
"password": "<insert your user password>"
}
POST https://user-api-v2.simplybook.me/admin/auth/2fa
Content-Type: application/json
{
"company": "<insert your company login>",
"session_id": "<insert session_id value from auth request>",
"code": "<insert 2FA code>",
"type": "<insert 2FA type (ga/sms)>"
}
GET https://user-api-v2.simplybook.me/admin/auth/sms?company=<insert your company login>&session_id=<insert session_id value from auth request>
Content-Type: application/json
POST https://user-api-v2.simplybook.me/admin/auth/refresh-token
Content-Type: application/json
{
"company": "<insert your company login>",
"refresh_token": "<insert refresh_token from auth step>"
}
POST https://user-api-v2.simplybook.me/admin/auth/logout
Content-Type: application/json
{
"auth_token": "<insert your token from auth step>"
}
POST https://user-api-v2.simplybook.me/admin/bookings
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"count": 1,
"start_datetime": "2020-12-02 09:30:00",
"location_id": 2,
"category_id": 2,
"provider_id": 4,
"service_id": 3,
"client_id": 10,
"additional_fields": [
{
"field": "e5a1d0e5312b9515874406a89c986765",
"value": "test"
},
{
"field": "3adae019f9183fcfb7b02fcef54b094d",
"value": "Option 1"
},
{
"field": "9c3ce1fc22bd50cbb21bdfcfd2f850bf",
"value": "988"
},
{
"field": "1a2e4bdc78b9fd4593d8924b25f38244",
"value": "Select 2"
}
]
}
PUT https://user-api-v2.simplybook.me/admin/bookings/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"count": 1,
"start_datetime": "2020-12-02 09:30:00",
"location_id": 2,
"category_id": 2,
"provider_id": 4,
"service_id": 3,
"client_id": 10,
"additional_fields": [
{
"field": "e5a1d0e5312b9515874406a89c986765",
"value": "test"
},
{
"field": "3adae019f9183fcfb7b02fcef54b094d",
"value": "Option 1"
},
{
"field": "9c3ce1fc22bd50cbb21bdfcfd2f850bf",
"value": "988"
},
{
"field": "1a2e4bdc78b9fd4593d8924b25f38244",
"value": "Select 2"
},
{
"field": "b90b2d238ffc2a7a782c6a81a8e60bb1",
"value": "test"
}
]
}
GET https://user-api-v2.simplybook.me/admin/bookings/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
DELETE https://user-api-v2.simplybook.me/admin/bookings/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
PUT https://user-api-v2.simplybook.me/admin/bookings/1/approve
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
PUT https://user-api-v2.simplybook.me/admin/bookings/1/status
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"status_id": 1
}
GET https://user-api-v2.simplybook.me/admin/bookings/1/links
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
PUT https://user-api-v2.simplybook.me/admin/bookings/1/comment
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"comment": "This is booking comment."
}
GET https://user-api-v2.simplybook.me/admin/schedule?date_from=2020-08-25&date_to=2020-08-27&provider_id=2&service_id=1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/schedule/slots?date=2020-08-28&provider_id=1&service_id=5
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/schedule/available-slots?date=2020-08-27&provider_id=1&service_id=5
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/schedule/first-available-slot?date=2020-08-30&provider_id=1&service_id=5
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/timeline/slots?date_from=2020-09-25&date_to=2020-09-25&provider_id=1&service_id=1&with_available_slots=1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/bookings?filter[upcoming_only]=1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/calendar?mode=provider&filter[status]=confirmed_pending&filter[date_from]=2020-08-26&filter[date_to]=2020-08-26
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
POST https://user-api-v2.simplybook.me/admin/detailed-report
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"filter": {
"created_date_from": "2021-01-01",
"created_date_to": "2021-03-31",
"date_from": "2021-01-02",
"date_to": "2021-03-29",
"event_id": "2",
"unit_group_id": "7",
"client_id": "12",
"booking_type": "non_cancelled"
},
"export_columns": [
],
"order_direction": "asc",
"order_field": "record_date"
}
GET https://user-api-v2.simplybook.me/admin/detailed-report/193
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/clients?page=1&on_page=10&filter[search]=al
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/clients/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
POST https://user-api-v2.simplybook.me/admin/clients
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"name": "Mike",
"email": "mikeemail@gmail.com",
"phone": "+123456789987"
}
PUT https://user-api-v2.simplybook.me/admin/clients/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"name": "Mike",
"email": "mikeemail@gmail.com",
"phone": "+123456789987"
}
DELETE https://user-api-v2.simplybook.me/admin/clients/1000
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/clients/memberships?page=1&on_page=10&filter[client_id]=78&filter[service_id]=8&filter[service_start_date]=2020-08-20
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/clients/fields
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/clients/field-values/2
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
PUT https://user-api-v2.simplybook.me/admin/clients/field-values/7
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"id": 7,
"fields":
[
{
"id": "name",
"value": "test"
},
{
"id": "email",
"value": "test@gmail.com"
},
{
"id": "phone",
"value": "38099999999999"
},
{
"id": "de3b235b9e42131c9a86b5449acca9dd",
"value": 12
}
]
}
POST https://user-api-v2.simplybook.me/admin/clients/field-values
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"id": null,
"fields":
[
{
"id": "name",
"value": "test"
},
{
"id": "email",
"value": "test@gmail.com"
},
{
"id": "phone",
"value": "38099999999999"
},
{
"id": "de3b235b9e42131c9a86b5449acca9dd",
"value": 12
}
]
}
GET https://user-api-v2.simplybook.me/admin/services?filter[search]=massage
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/services/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/services/products?filter[service_id]=1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/categories
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/providers?filter[search]=mike&filter[service_id]=1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/providers/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/locations
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/additional-fields?filter[service_id]=1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/products?filter[search]=cofee&filter[service_id]=1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/products/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/statuses
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/calendar-notes?page=1&filter[services][]=1&filter[services][]=2&filter[date_from]=2020-08-01&filter[date_to]=2020-08-10
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/calendar-notes/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
POST https://user-api-v2.simplybook.me/admin/calendar-notes
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"provider_id": 1,
"service_id": null,
"start_date_time": "2020-09-06 15:00:00",
"end_date_time": "2020-09-06 15:30:00",
"note_type_id": "1",
"note": "note body",
"mode": "provider",
"time_blocked": true
}
PUT https://user-api-v2.simplybook.me/admin/calendar-notes/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"provider_id": 2,
"service_id": null,
"start_date_time": "2020-09-06 15:00:00",
"end_date_time": "2020-09-06 15:30:00",
"note_type_id": "1",
"note": "note body",
"mode": "provider",
"time_blocked": true
}
DELETE https://user-api-v2.simplybook.me/admin/calendar-notes/1
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/calendar-notes/types
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/calendar-notes/types/default
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/invoices?filter[booking_code]=0z2ohjmy
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
GET https://user-api-v2.simplybook.me/admin/invoices/34
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
PUT https://user-api-v2.simplybook.me/admin/invoices/1/accept-payment
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"payment_processor": "manual"
}
PUT https://user-api-v2.simplybook.me/admin/invoices/1/apply-promo-code
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
{
"code": "mycode123"
}
GET https://user-api-v2.simplybook.me/admin/tickets/0z2ph7e716b88
Content-Type: application/json
X-Company-Login: <insert your company login>
X-Token: <insert your token from auth step>
Name | Type | Description |
---|---|---|
company | string | Company name |
login | string | User login |
password | string | User password |
Name | Type | Description |
---|---|---|
company | string | Company name |
Name | Type | Description |
---|---|---|
auth_token | string | Auth token |
Name | Type | Description |
---|---|---|
token | string | Auth token |
company | string | Company login |
login | string | User login |
refresh_token | string|null | Refresh token (use it to get new access token when old expired) |
domain | string|null | Company domain |
require2fa | bool | Required two factor authorisation (token and refresh will be empty) |
allowed2fa_providers | array|string[] | Allowed providers (sms/ga) |
auth_session_id | string | Authentication session id (pass it with 2FA request) |
Name | Type | Description |
---|---|---|
company | string | Company login |
refresh_token | string | Refresh token |
device_token | string|null | Device token |
Name | Type | Description |
---|---|---|
start_datetime | string | Booking start datetime |
end_datetime | string | Booking end datetime |
location_id | int | Location id |
category_id | int | Category id |
service_id | int | Service id |
provider_id | int | Provider id |
client_id | int | Client id |
count | int | Group booking count. You can use either count or recurringSettings |
recurring_settings | Booking_RecurringSettingsEntity | Recurring settings. You can use either count or recurringSettings |
additional_fields | array|Booking_AdditionalFieldValueEntity[] | Array of additional fields values. Booking_AdditionalFieldValueEntity[] |
products | array|ProductQtyEntity[] | Array of products (addons). ProductQtyEntity[] |
client_membership_id | int | Client membership instance id. |
skip_membership | bool | Do not use membership for this booking |
user_status_id | int | Users status id |
accept_payment | bool | Set true to make payment order for booking |
payment_processor | string|null | Payment accepted by payment processor |
Name | Type | Description |
---|---|---|
bookings | array|BookingEntity[] | Array of bookings, that were booked. |
batch | BookingBatchEntity|null | Booking batch |
Name | Type | Description |
---|---|---|
id | int | Booking id. Auto-generated value. |
code | string | Booking code. Auto-generated value. |
is_confirmed | bool | Booking is confirmed |
start_datetime | string | Booking start datetime |
end_datetime | string | Booking end datetime |
location_id | int | Location id |
category_id | int | Category id |
service_id | int | Service id |
provider_id | int | Provider id |
client_id | int | Client id |
duration | int | Duration in minutes |
Name | Type | Description |
---|---|---|
id | int | Batch id. Auto-generated value. |
type | string | Batch type. Can be 'recurring', 'multiple', 'group'. |
is_closed | bool | Flag that indicates that user has finished booking. |
Name | Type | Description |
---|---|---|
days | int | Repeat days. Use each $days day for 'fixed' type and mask of week days for 'weekly' type. |
repeat_count | int | Repeat count |
type | string | Type of repeat. Can be 'fixed', 'weekly' 'weekly' means repeat every week day, that set in $days mask. 'fixed' means repeat every $days day. |
mode | string | Mode when it is impossible to book appointment on some date. Can be: 'skip', 'book_available', 'book_and_move'. 'skip' - Skip all bookings 'book_available' - book only on available dates 'book_and_move' - move to next date in case some date is not available |
Name | Type | Description |
---|---|---|
id | int | Additional field id |
field | string | Additional field name. |
value | mixed | Additional field value |
Name | Type | Description |
---|---|---|
product_id | int | Product id |
qty | int | Product qty |
Name | Type | Description |
---|---|---|
id | int | Booking id. Auto-generated value. |
code | string | Booking code. Auto-generated value. |
is_confirmed | bool | Booking is confirmed |
start_datetime | string | Booking start datetime |
end_datetime | string | Booking end datetime |
location_id | int|null | Provider location id |
category_id | int|null | Service category id |
service_id | int | Service id |
provider_id | int | Provider id |
client_id | int | Client id |
duration | int | Duration in minutes |
provider | ProviderEntity | Booking provider details entity |
service | ServiceEntity | Booking service details entity |
client | ClientEntity | Client details entity |
status | string | Booking status - confirmed/pending/canceled (depending on approve booking status and accept payment) |
membership_id | int|null | Client membership id |
invoice_id | int|null | Invoice id |
invoice_status | string|null | Booking payment status ('deleted', 'new', 'pending', 'cancelled', 'cancelled_by_timeout', 'error', 'paid') |
invoice_payment_received | bool|null | Payment was received |
invoice_number | string|null | Invoice number |
invoice_datetime | string|null | Invoice datetime |
invoice_payment_processor | string|null | Payment processor key |
ticket_code | string|null | Booking ticket code |
ticket_validation_datetime | string|null | Booking ticket validation date and time |
ticket_is_used | bool|null | Ticket was already validated |
user_status_id | int|null | Status custom feature id |
category | CategoryEntity|null | Service category entity |
location | LocationEntity|null | Provider location entity |
can_be_edited | bool | Can this booking be edited by user |
can_be_canceled | bool | Can this booking be canceled by user |
log | array|Booking_LogEntity[] | Booking edit log |
additional_fields | array|Booking_AdditionalFieldValueEntity[] | Booking intake form details |
products | array|Booking_DetailedProductQtyEntity[] | Booking detailed products list |
attributes | array|Booking_DetailedProductQtyEntity[] | Booking detailed attributes list |
invoice | AdminInvoiceEntity|null | Invoice entity |
membership | ClientMembershipPaymentEntity|null | Client membership object |
user_status | StatusEntity|null | User status entity |
comment | string | Booking comment |
resources | array|ResourceEntity[] | Booking resources list |
Name | Type | Description |
---|---|---|
id | int | Booking id. Auto-generated value. |
code | string | Booking code. Auto-generated value. |
is_confirmed | bool | Booking is confirmed |
start_datetime | string | Booking start datetime |
end_datetime | string | Booking end datetime |
location_id | int|null | Provider location id |
category_id | int|null | Service category id |
service_id | int | Service id |
provider_id | int | Provider id |
client_id | int | Client id |
duration | int | Duration in minutes |
provider | ProviderEntity | Booking provider details entity |
service | ServiceEntity | Booking service details entity |
client | ClientEntity | Client details entity |
status | string | Booking status - confirmed/pending/canceled (depending on approve booking status and accept payment) |
membership_id | int|null | Client membership id |
invoice_id | int|null | Invoice id |
invoice_status | string|null | Booking payment status ('deleted', 'new', 'pending', 'cancelled', 'cancelled_by_timeout', 'error', 'paid') |
invoice_payment_received | bool|null | Payment was received |
invoice_number | string|null | Invoice number |
invoice_datetime | string|null | Invoice datetime |
invoice_payment_processor | string|null | Payment processor key |
ticket_code | string|null | Booking ticket code |
ticket_validation_datetime | string|null | Booking ticket validation date and time |
ticket_is_used | bool|null | Ticket was already validated |
user_status_id | int|null | Status custom feature id |
category | CategoryEntity|null | Service category entity |
location | LocationEntity|null | Provider location entity |
can_be_edited | bool | Can this booking be edited by user |
can_be_canceled | bool | Can this booking be canceled by user |
Name | Type | Description |
---|---|---|
product_id | int | Product id |
qty | int | Product qty |
product | ProductEntity | Product entity |
Name | Type | Description |
---|---|---|
id | int | Id |
datetime | string | Log datetime |
type | string | Event type |
user_login | string|null | User login |
user_name | string|null | User name |
Name | Type | Description |
---|---|---|
date | string | Work day date |
time_from | string | Work day time from |
time_to | string | Work day time to |
is_day_off | bool | Is day off |
Name | Type | Description |
---|---|---|
date | string | Time slot date |
time | string | Time slot time |
Name | Type | Description |
---|---|---|
date | string | Date |
slots | Timeline_SlotEntity[] | Slots |
Name | Type | Description |
---|---|---|
time | string | Time |
available_count | int | Available slots count |
total_count | int | Total slots count |
Name | Type | Description |
---|---|---|
id | int | Location id. Auto-generated value. |
name | string | Location name |
providers | array|int[] | Location providers (list of ids) |
address1 | string|null | Location address 1 |
address2 | string|null | Location address 2 |
city | string|null | Location city |
zip | string|null | Location zip code |
country_id | string|null | Location country id |
Name | Type | Description |
---|---|---|
id | int | Category id. Auto-generated value. |
name | string | Category name |
services | array|int[] | Category services (list of ids) |
Name | Type | Description |
---|---|---|
id | int | Provider id. Auto-generated value. |
name | string | Provider name |
qty | int | Provider capacity |
string | Provider email | |
description | string | Provider description |
phone | string | Provider phone |
picture | string | Picture file name |
picture_preview | string | Path to preview picture |
color | string | Provider color |
is_active | bool | If provider is active |
Name | Type | Description |
---|---|---|
id | int | Service id. Auto-generated value. |
name | string | Service name |
description | string | Promotion description |
price | float | Service price |
currency | string | Service price currency |
tax_id | int | Tax id |
tax | TaxEntity | Tax information |
duration | int | Duration in minutes |
buffer_time_after | int | Buffer time after in minutes |
recurring_settings | Booking_RecurringSettingsEntity|null | Service recurring settings (in case it is recurring service) |
memberships | array|int[] | Array of ids of memberships where this service presents. |
picture | string | Picture file name |
picture_preview | string | Path to preview picture |
is_active | bool | If service is active |
Name | Type | Description |
---|---|---|
product | ProductEntity | Product |
qty | int | Qty |
Name | Type | Description |
---|---|---|
id | int | Status id. Auto-generated value. |
name | string | Status name. |
description | string | Status description. |
color | string | Status color |
is_default | bool | Is status default |
Name | Type | Description |
---|---|---|
id | int | Resource id |
name | string | Resource name |
Name | Type | Description |
---|---|---|
id | int | Client id. Auto-generated value. |
name | string | Client name |
string | Client email | |
phone | string | Client phone |
Name | Type | Description |
---|---|---|
id | string | Field id |
title | string | Field title |
default_value | mixed | Default field value |
values | array|Client_FieldSelectOptionEntity[] | Array of available values for select field |
is_visible | bool | Field is visible on public site |
is_optional | bool | Field is optional |
type | string | Field type |
Name | Type | Description |
---|---|---|
id | int | Id of client |
fields | array|Client_FieldValueEntity[] | Array of fields with values |
Name | Type | Description |
---|---|---|
value | string | Option value |
is_default | bool | Is default value |
position | int | Position |
Name | Type | Description |
---|---|---|
id | string | Field id |
field | Client_FieldDetailsEntity | Field object. Read only (you do not need to pass it on save) |
value | mixed | Field value |
Name | Type | Description |
---|---|---|
id | int | User id. Auto-generated value. |
login | string | User login |
firstname | string | User first name |
lastname | string | User last name |
string | User email | |
phone | string | User phone |
company | CompanyEntity | User company |
Name | Type | Description |
---|---|---|
login | string | Company login |
name | string | Company name |
dashboard_url | string | Dashboard company url |
public_url | string | Public company url |
Name | Type | Description |
---|---|---|
id | int | Field id |
name | string | Unique field name |
field_name | string | Field label |
field_type | string | Field type |
field_options | array | Field options |
default_value | mixed | Default field value |
optional | bool | Is optional field |
is_visible | bool | Is visible on public site |
show_for_all_services | bool | Show field for all services |
Name | Type | Description |
---|---|---|
id | int | Product id. Auto-generated value. |
name | string | Product name |
barcode | string | Product barcode |
description | string | Product description |
type | string | Product type. It can be 'product' or 'attribute' |
price | float | Product price |
currency | string | Product currency |
tax_id | int | Tax id |
tax | TaxEntity | Tax information |
duration | int | Product duration |
Name | Type | Description |
---|---|---|
id | int | Invoice id. Auto-generated value. |
number | string | Invoice number. Auto-generated value. |
datetime | string | Invoice datetime. Readonly |
due_datetime | string | Invoice due date. By default current datetime + payment timeout |
payment_datetime | string | Invoice payment date |
amount | float | Invoice amount. Readonly |
deposit | float | Invoice deposit. Readonly |
rest_amount | float | Invoice rest amount. Readonly |
taxes | array|Invoice_TaxEntity[] | Array of invoice taxes |
discount | float | Invoice discount amount. Readonly |
currency | string | Invoice currency code. ISO 4217 |
client_id | int | Client id |
description | string | Invoice description |
payment_received | bool | Payment was received by company |
payment_processor | string | Payment processor key |
lines | array | Array of lines. The line can be one of the following types: Invoice_BookingLineEntity, Invoice_ProductLineEntity, Invoice_MembershipLineEntity, Invoice_PackageLineEntity, Invoice_PromotionLineEntity, Invoice_DepositLineEntity |
promotion_instances | array|PromotionInstanceEntity[] | Array of PromotionInstanceEntity. Promotion instances used in invoice |
package_instances | array|PackageInstanceEntity[] | Array of PackageInstanceEntity. Package instances used in invoice |
status | string | Current invoice status |
support_recurring_payment | bool | True in case this invoice can be payed with recurring payment method |
recurring_profile_id | int | Recurring profile id, linked to this invoice |
client | ClientEntity | Client |
created_by_user_id | int | User ID that created invoice |
created_by_user | UserEntity | User object that created invoice |
approved_by_user_id | int | User ID that receive payment (for manual and delay payments) |
approved_by_user | UserEntity | User object that receive payment (for manual and delay payments) |
Name | Type | Description |
---|---|---|
id | int | Invoice line id. Auto-generated value. |
invoice_id | int | Invoice id |
name | string | Invoice line name |
type | string | Invoice line type. Can be booking, product, membership, custom |
discount_ratio | float | Invoice line discount ratio |
discount_amount | float | Invoice line discount fixed amount |
discount | float | Invoice line discount |
price | float | Invoice line price |
final_price | float | Invoice line final price (including tax and discount) |
qty | float | Invoice line qty |
package_qty | float | Invoice line qty, that was purchased by using package |
tax | TaxEntity | Tax entity related to this invoice line Note: Use tax_rate in calculations as rate in this object can be different. |
tax_ratio | float | Invoice line tax ratio |
tax_amount | float | Invoice line tax amount |
amount | float | Invoice line amount |
deposit | float | Invoice line deposit |
rest_amount | float | Invoice line rest amount |
booking_ids | array | Booking ids, that were purchased. It can have multiple ids in case recurring booking and group booking. In case recurring booking qty will be equal 1, because client pays for session. In case group booking qty will be equal count of group booking. |
bookings | array|BookingEntity[] | Bookings, that were purchased |
Name | Type | Description |
---|---|---|
id | int | Invoice line id. Auto-generated value. |
invoice_id | int | Invoice id |
name | string | Invoice line name |
type | string | Invoice line type. Can be booking, product, membership, custom |
discount_ratio | float | Invoice line discount ratio |
discount_amount | float | Invoice line discount fixed amount |
discount | float | Invoice line discount |
price | float | Invoice line price |
final_price | float | Invoice line final price (including tax and discount) |
qty | float | Invoice line qty |
package_qty | float | Invoice line qty, that was purchased by using package |
tax | TaxEntity | Tax entity related to this invoice line Note: Use tax_rate in calculations as rate in this object can be different. |
tax_ratio | float | Invoice line tax ratio |
tax_amount | float | Invoice line tax amount |
amount | float | Invoice line amount |
deposit | float | Invoice line deposit |
rest_amount | float | Invoice line rest amount |
product_id | int | Product id, that was purchased |
booking_id | int | Related booking id |
product | ProductEntity | Product, that was purchased |
Name | Type | Description |
---|---|---|
id | int | Invoice line id. Auto-generated value. |
invoice_id | int | Invoice id |
name | string | Invoice line name |
type | string | Invoice line type. Can be booking, product, membership, custom |
discount_ratio | float | Invoice line discount ratio |
discount_amount | float | Invoice line discount fixed amount |
discount | float | Invoice line discount |
price | float | Invoice line price |
final_price | float | Invoice line final price (including tax and discount) |
qty | float | Invoice line qty |
package_qty | float | Invoice line qty, that was purchased by using package |
tax | TaxEntity | Tax entity related to this invoice line Note: Use tax_rate in calculations as rate in this object can be different. |
tax_ratio | float | Invoice line tax ratio |
tax_amount | float | Invoice line tax amount |
amount | float | Invoice line amount |
deposit | float | Invoice line deposit |
rest_amount | float | Invoice line rest amount |
membership_id | int | Membership entity object id |
membership | MembershipEntity | Membership data |
period_start | string | Optional period start of membership |
membership_payment_id | int | Membership payment id, that was initialized by client |
Name | Type | Description |
---|---|---|
id | int | Invoice line id. Auto-generated value. |
invoice_id | int | Invoice id |
name | string | Invoice line name |
type | string | Invoice line type. Can be booking, product, membership, custom |
discount_ratio | float | Invoice line discount ratio |
discount_amount | float | Invoice line discount fixed amount |
discount | float | Invoice line discount |
price | float | Invoice line price |
final_price | float | Invoice line final price (including tax and discount) |
qty | float | Invoice line qty |
package_qty | float | Invoice line qty, that was purchased by using package |
tax | TaxEntity | Tax entity related to this invoice line Note: Use tax_rate in calculations as rate in this object can be different. |
tax_ratio | float | Invoice line tax ratio |
tax_amount | float | Invoice line tax amount |
amount | float | Invoice line amount |
deposit | float | Invoice line deposit |
rest_amount | float | Invoice line rest amount |
package_id | int | Package entity object id |
package | PackageEntity | Package data |
period_start | string | Optional period start of membership |
package_instance_id | int | Membership payment id, that was initialized by client |
Name | Type | Description |
---|---|---|
id | int | Invoice line id. Auto-generated value. |
invoice_id | int | Invoice id |
name | string | Invoice line name |
type | string | Invoice line type. Can be booking, product, membership, custom |
discount_ratio | float | Invoice line discount ratio |
discount_amount | float | Invoice line discount fixed amount |
discount | float | Invoice line discount |
price | float | Invoice line price |