Company public service methods: Difference between revisions

No edit summary
No edit summary
 
(54 intermediate revisions by one other user not shown)
Line 1: Line 1:
You can find full list of Company public service] API methods [https://simplybook.me/api/doc#/ here].
{{#seo:
|title=Company public service methods - SimplyBook.me
|description=Explore public-facing service methods to improve client access. Manage service visibility with ease. Learn more now!
|titlemode=append
|keywords=faq, frequently asked questions, booking software, appointment system questions, appointments online, calendar software, booking system, booking calendar, scheduling software, online appointment scheduling, online scheduling, setup, setup help, support, help content
}}


====getCompanyParam====
==General Information==


<code>getCompanyParam(key)</code>
SimplyBook.me API service build on [https://en.wikipedia.org/wiki/JSON-RPC JSON-RPC] remote procedure call protocol. A remote method is invoked by sending a request to a remote service using HTTPS. All transfer types are single objects, serialized using [http://www.json.org JSON]. A request is a call to a specific method provided by a remote system. It must contain three certain properties:


Params:
* <code>jsonrpc</code> - a version of JSON-RPC protocol. Always <code>"2.0"</code>
* '''key''' string
* <code>method</code> - A String with the name of the method to be invoked.
* <code>params</code> - An Array of objects to be passed as parameters to the defined method.
* <code>id</code> - A value of any type, which is used to match the response with the request that it is replying to.


Returns string.
The receiver of the request must reply with a valid response to all received requests. A response must contain the properties mentioned below.


<code>getCompanyParam</code> API method returns configuration value for specified key. Method return invalid params error (code [[Errors handling#Error codes|-32602]]) in case if specified key not allowed.
* <code>result</code> - The data returned by the invoked method. If an error occurred while invoking the method, this value must be null.
* <code>error</code> - A specified error code if there was an error invoking the method, otherwise null.
* <code>id</code> - The id of the request it is responding to.


Possible values of key parameter:
Example
 
<pre>
  Request
  {
    "jsonrpc": "2.0",
    "method": "getEventList",
    "params":[],
    "id":1
  }
 
  Response
  {
    "result": {
        "1": {
            "id": "1",
            "name": "Hourly photoshoot",
            "duration": "60",
            "hide_duration": "0",
            "description": "<p>If you want to try yourself as a model but haven't decided on an image. <br /> 5-7 retouched and print-ready photos + the raw footage on a disc </p>",
            "picture": "a200edab10b669225e22d2b3803a38b5.jpg",
            "is_public": "1",
            "is_active": "1",
            "position": "0",
            "is_recurring": "0",
            "picture_path": "/uploads/mib/event__picture/small/a200edab10b669225e22d2b3803a38b5.jpg",
            "price": "300.0000",
            "currency": "UAH",
            "categories": ["1"]
        },
        ...
    },
    "id": "1",
    "jsonrpc": "2.0"
  }
</pre>
 
Example of request with error response:
 
<pre>
  Request
  {
    "jsonrpc": "2.0",
    "method": "someNotExistingMethod",
    "params":[],
    "id":1
  }
 
  Response
  {
    "jsonrpc": "2.0",
    "id":1,
    "error": {
      "code": -32601,
      "message": "Method not found"
    }
  }
</pre>
 
All calls of public service methods should have two additional HTTP headers:
 
* <code>X-Company-Login</code>
* <code>X-Token</code> an authentication token. See [[Company public service methods#Authentication|authentication]] section.
 
===Endpoint===
 
Use URL <code>https://user-api.simplybook.me/</code> for all public service API calls.
 
===Authentication===
 
Using Simplybook API methods require an authentification. 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 <code>[[Authentication#getToken|getToken]]</code> API method on https://user-api.simplybook.me/login service passing your personal API-key. You can copy your API-key at admin interface: go to the 'Custom Features' link and select [[Custom Features#API|API Custom Feature]] 'Settings'.
 
== Methods ==
 
=== book ===
 
<code>book($eventId, $unitId, $date, $time, $clientData, $additional, $count, $batchId, $recurringData)</code>
 
Parameters:
 
* '''$eventId''' Integer
* '''$unitId''' Integer
* '''$date''' String - in Y-m-d format
* '''$time''' String - in H:i:s format
* '''$clientData''' Object - eg. {name: 'Name', email: 'test@gmail.com', phone: '+38099999999'}
* '''$additional''' array|Object - additional params and fields.
* '''$count''' Integer - bookings count, min. 1 (using for group bookings batch). (optional)
* '''$batchId''' Integer - add booking to multiple bookings batch. (optional)
* '''$recurringData''' Array - make booking recurrent. (optional)
 
Returns Object.
 
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
<code>require_confirm = true</code>. <code>$startDate</code> and <code>$startTime</code> specifies a date of
booking and time slot. Time value should be multiple to 'timeframe' configuration of company (see
<code>[[Company public service methods#getTimeframe|getTimeframe]]</code> API method). <code>$endDate</code> and <code>$endTime</code> 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 <code>$endDate</code> and <code>$endTime</code> should be
later in time than <code>$startDate</code> and <code>$startTime</code>. If your clients located in different time
zone you should specify <code>'client_time_offset'</code> value in <code>$clientData</code> 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 <code>$clientTimeOffset</code> will be 60 minutes. You
can get information about company's time zone using <code>[[Company public service methods#getCompanyInfo|getCompanyInfo]]</code> API method. To
create batch booking you can specify either <code>count</code> more then 1 or valid <code>batchId</code> (only one
parameter can be specified). You should specify an <code>$additionalFields</code> parameter if service requires
some intake forms (see [[Custom Features#Intake Forms|Intake Forms Custom feature]]). To create a booking with promo code you
should pass it as additional field. For example: <code>{"name": "promocode", "value": "some code", "type": "text"}</code>See [[Company public service methods#book response|example]] of <code>book</code> API method response.
 
See also:
 
* [https://help.simplybook.me/index.php/Need_to_change_interval_(timeframe) Timeframe information]
 
----
 
=== calculateEndTime ===
 
<code>calculateEndTime($startDateTime, $eventId, $unitId)</code>
 
Parameters:
 
* '''$startDateTime''' String a date and time string in format 'Y-m-d H:i:s', eg. '2001-10-02 13:30:00'.
* '''$eventId''' Integer
* '''$unitId''' Integer
 
Returns String|Boolean.
 
Returns end datetime if booking is available, else return false
 
 
----
 
=== cancelBooking ===
 
<code>cancelBooking($id, $sign)</code>
 
Parameters:
 
* '''$id''' Integer
* '''$sign''' String
 
Returns Boolean.
 
Cancels a booking. <code>$sign</code> parameter must be a string created with formula: <code>md5($bookingId . $bookingHash . $secretKey)
</code>. You can get <code>$bookingHash</code> value as result of <code>[[Company public service methods#book|book]]</code> 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 <code>$sign</code> parameter is wrong.
 
 
----
 
=== confirmBooking ===
 
<code>confirmBooking($id, $sign)</code>
 
Parameters:
 
* '''$id''' Integer
* '''$sign''' String
 
Returns Boolean.
 
Confirm booking. Signature is required.$sign = md5($bookingId . $bookingHash . $secretKey);
Call this method from server side only
 
 
----
 
=== confirmBookingBatch ===
 
<code>confirmBookingBatch($batchId, $batchType, $sign)</code>
 
Parameters:
 
* '''$batchId''' Integer
* '''$batchType''' String
* '''$sign''' String
 
Returns Boolean.
 
Confirms booking batch. Signature is required.$sign = md5($batchId . $batchHash . $secret)
Call this method from server side only
 
 
----
 
=== confirmBookingBatchPayment ===
 
<code>confirmBookingBatchPayment($batchId, $batchType, $paymentProcessor, $sign)</code>
 
Parameters:
 
* '''$batchId''' Integer
* '''$batchType''' String
* '''$paymentProcessor''' 
* '''$sign''' String
 
Returns Boolean.
 
Confirms booking batch payment. Signature is required.$sign = md5($batchId . $batchHash . $secret)
Call this method from server side only
 
 
----
 
=== confirmBookingCart ===
 
<code>confirmBookingCart($cartId, $paymentProcessor, $sign)</code>
 
Parameters:
 
* '''$cartId''' Integer - cart id
* '''$paymentProcessor''' String - payment processor name
* '''$sign''' String - signature. (md5($cartId . $cartHash . $secretKey))
 
Returns Boolean.
 
Confirm booking cart. Use it to confirm payment. Signature is required.
 
 
----
 
=== confirmBookingPayment  !Deprecated!===
 
<code>confirmBookingPayment($id, $paymentProcessor, $sign)</code>
 
Parameters:
 
* '''$id''' Integer
* '''$paymentProcessor''' String
* '''$sign''' String
 
Returns Boolean.
 
Confirm booking payment. Signature is required.$sign = md5($bookingId . $bookingHash . $secretKey);
Call this method from server side only
 
 
----
 
=== createBatch ===
 
<code>createBatch()</code>
 
No arguments.
Returns Integer.
 
Creates new booking batch record. Returns newly created batch id. You can use this id in <code>[[Company public service methods#book|book]]</code>
API method.
 
 
----
 
=== filterAvailableUnits ===
 
<code>filterAvailableUnits($eventId, $dateTime, $unitIds, $count)</code>
 
Parameters:
 
* '''$eventId''' Integer
* '''$dateTime''' String a date and time string in format 'Y-m-d H:i:s'
* '''$unitIds''' 
* '''$count''' Integer
 
Returns Array.
 
Returns list of available unit ids for specified date and service from provided $unitIds list.You can use this method with locations Custom feature.
Returns empty array if all units are not allowed.
Eg.: <code>[1, 2, 3]</code>
 
 
----
 
=== getAdditionalFields ===
 
<code>getAdditionalFields($eventId)</code>
 
Parameters:
 
* '''$eventId''' Integer
 
Returns Array.
 
Return intake forms for certain event if [[Custom Features#Intake Forms|Intake Forms Custom feature]] is
activated. Returns empty array otherwise. Call <code>[[Company public service methods#isPluginActivated|isPluginActivated('event_field')]]</code>
API method to check if 'event_field' Custom Feature activated.
 
 
----
 
=== getAnyUnitData ===
 
<code>getAnyUnitData()</code>
 
No arguments.
Returns Object|null.
 
Returns information about [[Custom Features#Any Employee Selector|Any Employee Selector Custom Feature]] configuration. Returns
null if Custom Feature 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
  }
 
 
----
 
=== getAvailableTimeIntervals ===
 
<code>getAvailableTimeIntervals($dateFrom, $dateTo, $eventId, $unitId, $count)</code>
 
Parameters:
 
* '''$dateFrom''' String
* '''$dateTo''' String
* '''$eventId''' Integer
* '''$unitId''' Mixed can be Integer or Array of Integers
* '''$count''' Integer
 
Returns Object.
 
Returns available time intervals for all service providers for given period, taking into account breaktimes, start and end working time
Eg.: <code>{['2016-03-04': ['1': [['09:00:00','09:30:00'], ['11:15:00','14:45:00']] , ...], ...]}</code>
 
 
----
 
=== getAvailableUnits ===
 
<code>getAvailableUnits($eventId, $dateTime, $count)</code>
 
Parameters:
 
* '''$eventId''' Integer
* '''$dateTime''' String a date and time string in format 'Y-m-d H:i:s'
* '''$count''' Integer
 
Returns Array.
 
Returns list of available unit ids for specified date and service or empty array if all units are not allowed.Eg.: <code>[1, 2, 3]</code>
 
 
----
 
=== getBooking ===
 
<code>getBooking($id, $sign)</code>
 
Parameters:
 
* '''$id''' Integer
* '''$sign''' String
 
Returns Object.
 
Returns an object with details information about booking. <code>$sign</code> parameter must be a string created
with formula: <code>md5($bookingId . $bookingHash . $secretKey)</code>. You can get <code>$bookingHash</code>
value as result of <code>[[Company public service methods#book|book]]</code> 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 <code>$sign</code> parameter is wrong.
 
 
----
 
=== getBookingCart ===
 
<code>getBookingCart($bookingIds)</code>
 
Parameters:
 
* '''$bookingIds''' Array
 
Returns Object.
 
Returns cart information by bookings ids.
 
* <code>cart_id</code> and <code>cart_hash</code> is used to create secure signature to confirm cart payment.
* <code>amount</code> - is total amount to payment
* <code>currency</code> - cart currency
* <code>cart</code> - contains cart items. You can use them to provide information for payment system. Each item is object with following fields:
* <code>id</code> - booking id
* <code>event_id</code> - service id
* <code>name</code> - event name + start date time (use it to provide cart information for payment system)
* <code>price</code> - booking price
* <code>qty</code> - qty of bookings
 
 
----
 
=== getBookingDetails ===
 
<code>getBookingDetails($id, $sign)</code>
 
Parameters:
 
* '''$id''' Integer
* '''$sign''' String
 
Returns Object.
 
Returns an object with details information about booking. <code>$sign</code> parameter must be a string created
with formula: <code>md5($bookingId . $bookingHash . $secretKey)</code>. You can get <code>$bookingHash</code>
value as result of <code>[[Company public service methods#book|book]]</code> 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 <code>$sign</code> parameter is wrong.
 
 
----
 
=== getCategoriesList ===
 
<code>getCategoriesList($isPublic)</code>
 
Parameters:
 
* '''$isPublic''' boolean
 
Returns Array.
 
Returns company categories list if [[Custom Features#Service Categories|Service Categories Custom Feature]] is activated. Returns
an error with code -32001 if Custom Feature is not activated. Use <code>[[Company public service methods#isPluginActivated|isPluginActivated('event_category')]]</code>
API method to check if Custom Feature activated.
 
 
----
 
=== getCompanyInfo ===
 
<code>getCompanyInfo()</code>
 
No arguments.
Returns Object.
 
Returns an object with detailed information about company. See [[Company public service methods#getCompanyInfo response|example of response]].
 
 
----
 
=== getCompanyParam ===
 
<code>getCompanyParam($key)</code>
 
Parameters:
 
* '''$key''' String
 
Returns mixed.
 
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 public service methods#Company params|list of available keys]].
 
 
----
 
=== getCompanyParams ===
 
<code>getCompanyParams($keys)</code>
 
Parameters:
 
* '''$keys''' Array
 
Returns Array.
 
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 public service methods#Company params|list of available keys]].
 
----
 
=== getCompanyTimezoneOffset ===
 
<code>getCompanyTimezoneOffset()</code>
 
No arguments.
Returns array.
 
Returns company timezone offset and company timezone
 
 
----
 
=== getCountryPhoneCodes ===
 
<code>getCountryPhoneCodes()</code>
 
No arguments.
Returns Array.
 
Returns country phone code list
 
 
----
 
=== getEventList ===
 
<code>getEventList($isVisibleOnly, $asArray)</code>
 
Parameters:
 
* '''$isVisibleOnly''' boolean
* '''$asArray''' boolean
 
Returns Array.
 
Returns company's events list. If <code>$asArray</code> 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.
 
 
----
 
=== getFirstWorkingDay ===
 
<code>getFirstWorkingDay($unitId)</code>
 
Parameters:
 
* '''$unitId''' Integer
 
Returns String.
 
Returns first working date for unit
 
 
----
 
=== getLocationsList ===
 
<code>getLocationsList($isPublic, $asArray)</code>
 
Parameters:
 
* '''$isPublic''' Boolean Optional. Default value is '''false'''.
* '''$asArray''' boolean Optional. Default value is '''false'''.
 
Returns Array.
 
Returns available locations for company if Custom Feature [[Custom Features#Multiple Locations|Multiple locations Custom Feature]] is activated. Return
an error with code -32001 if Custom Feature is not activated. Use <code>[[Company public service methods#isPluginActivated|isPluginActivated('location')]]</code>
API method to check if Custom Feature 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.
 
----
 
=== getPaymentProcessorConfig ===
 
<code>getPaymentProcessorConfig($paymentProcessor)</code>
 
Parameters:
 
* '''$paymentProcessor''' String
 
Returns Array.
 
Returns payment processor config
 
 
----
 
<!----=== getPluginPromoInfoByCode ===
 
<code>getPluginPromoInfoByCode($code)</code>
 
Parameters:
 
* '''$code''' 
 
Returns Array.
 
Returns an object with detailed information about Rewards and referrals promotion by promotion code. You can get promotion code
using <code>[[Catalogue#getPromotionList|getPromotionList]]</code> API method. If promotion record with specified
code not found then method returns an empty array (an empty object). If [[Rewards_and_Referrals_custom_feature|Rewards and Referrals Custom Feature]]
not enabled then method returns an error with code -32001 (Custom Feature is not activated). Use
<code>[[#isPluginActivated|isPluginActivated('promo')]]</code> API method call to check if Custom Feature enabled.See [[#getPromotionList response|example]] of <code>getPromotionList</code> API method response. Please note that
response contains a list of services for wich promotion discount can be applied (<code>service_ids</code> key).-->
 
 
----
 
=== getPluginStatuses ===
 
<code>getPluginStatuses($pluginNames)</code>
 
Parameters:
 
* '''$pluginNames''' Array
 
Returns Array.
 
Return Custom Feature status true if status active, else false. See [[Company public service methods#Custom Features.27 identifiers|list of available Custom Feature's names]].
 
 
----
 
=== getPromocodeInfo ===
 
<code>getPromocodeInfo($code)</code>
 
Parameters:
 
* '''$code''' String
 
Returns Array|null.
 
Returns an object with detailed information about promotion by promotion code. Returns null if no promotions with
specified code were not found.
 
 
----
 
<!---=== getPromotionRewardInfo ===
 
<code>getPromotionRewardInfo($commonPromotionId, $clientId, $hash)</code>
 
Parameters:
 
* '''$commonPromotionId''' Integer
* '''$clientId''' Integer
* '''$hash''' String
 
Returns Array|null.
 
Returns promotion reward by common promotion id, client id and hash.
 
-->
----
 
=== getRecurringDatetimes ===
 
<code>getRecurringDatetimes($eventId, $unitId, $date, $time, $recurringData)</code>
 
Parameters:
 
* '''$eventId''' Integer
* '''$unitId''' Integer
* '''$date''' String
* '''$time''' String
* '''$recurringData''' Array
 
Returns Array.
 
Get list of dates for recurring booking
 
 
----
 
=== getReservedTime ===
 
<code>getReservedTime($from, $to, $eventId, $unitId, $count)</code>
 
Parameters:
 
* '''$from''' String
* '''$to''' String
* '''$eventId''' Integer
* '''$unitId''' Integer
* '''$count''' Integer
 
Returns Object.
 
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 <code>reserved_time</code> and type
<code>not_worked_time</code>. <code>reserved_time</code> type represents time slots working time but already booked
by clients. Nobody knows what kind of data represented by <code>not_worked_time</code> type. Please don't use it.If [[Custom Features#Calendar Sync|Calendar Sync Custom Feature]] is enabled then object with
<code>reserved_time</code> type will contain not empty list of time slots marked as busy in Google calendar. Call
<code>[[Company public service methods#isPluginActivated|isPluginActivated('google_calendar_export')]]</code> API method to check if  Calendar Sync Custom Feature activated.
 
 
Example:
<pre>
  {
    "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"
    }],
    ...
  }
</pre>
 
 
----
 
=== getReservedTimeIntervals ===
 
<code>getReservedTimeIntervals($dateFrom, $dateTo, $eventId, $unitId, $count)</code>
 
Parameters:
 
* '''$dateFrom''' String
* '''$dateTo''' String
* '''$eventId''' Integer
* '''$unitId''' Integer|Array
* '''$count''' Integer
 
Returns Object.
 
Returns not available time
Eg.: <code>{'2014-05-14': [{'reserved_time': [{'from': '14:00', 'to': '16:30'}], 'type': "reserved_time"}, ...], ...}</code>
 
 
----
 
=== getStartTimeMatrix ===
 
<code>getStartTimeMatrix($from, $to, $eventId, $unitId, $count)</code>
 
Parameters:
 
* '''$from''' String
* '''$to''' String
* '''$eventId''' Integer
* '''$unitId''' Mixed can be Integer or Array of Integers
* '''$count''' Integer
 
Returns Object.
 
Returns available start time, taking into account breaktimes, start and end working time
Eg.: <code>{'2014-05-14': ['09:00:00', ...], ...}</code>
 
If locations Custom Feature activated for company you should pass a list as $unitID parameter for filter results with
units available only for selected location. See [[Custom Features#Multiple Locations|Multiple Locations]] Custom Feature description for
more details.
 
 
----
 
=== getTimeframe ===
 
<code>getTimeframe()</code>
 
No arguments.
Returns Integer.
 
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 [[Need to change interval (timeframe)|here]].
 
 
----
 
=== getTimelineType ===
 
<code>getTimelineType()</code>
 
No arguments.
Returns String.
 
Returns company calendar layout type
 
 
----
 
=== getUnitList ===
 
<code>getUnitList($isVisibleOnly, $asArray)</code>
 
Parameters:
 
* '''$isVisibleOnly''' boolean
* '''$asArray''' boolean
 
Returns Array.
 
Returns list of service performers. If <code>$asArray</code> 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.
 
 
----
 
=== getUserLicenseText ===
 
<code>getUserLicenseText()</code>
 
No arguments.
Returns String.
 
Returns user license text if user license Custom Feature is turned on,
otherwise throws exception
 
 
----
 
=== getWorkCalendar ===
 
<code>getWorkCalendar($year, $month, $unitId)</code>
 
Parameters:
 
* '''$year''' Integer
* '''$month''' Integer
* '''$unitId''' Integer
 
Returns Object.
 
Returns company work schedule as array
Eg.: <code>{'2014-05-01': {'from': '09:00:00', 'to': '21:00:00', 'is_day_off': '0'}, '2014-05-02': ...}</code>
 
 
----
 
=== getWorkDaysInfo ===
 
<code>getWorkDaysInfo($from, $to, $unitId, $eventId, $count)</code>
 
Parameters:
 
* '''$from''' String
* '''$to''' String
* '''$unitId''' Integer (optional)
* '''$eventId''' Integer (optional)
* '''$count''' Integer (optional)
 
Returns Object.
 
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:
 
<pre>
  {'2014-05-14' : [
    {'from': '09:00:00', 'to': '13:00:00'},
    {'from': '14:00:00', 'to': '19:00:00'}
  ] }
</pre>
 
Warning! Method can return a time string '24:00:00' as right edge of time range. This happens in case if time
range finishes on midnight.
 
 
----
 
=== hasUpcommingPromotions ===
 
<code>hasUpcommingPromotions()</code>
 
No arguments.
Returns Boolean.
 
Returns availability of active promotions
 
 
----
 
=== isPaymentRequired ===
 
<code>isPaymentRequired($eventId)</code>
 
Parameters:
 
* '''$eventId''' Integer
 
Returns Boolean.
 
Returns true if [[Custom Features#Accept Payments|Accept Payments]] Custom Feature activated and event with specified id has
configured price. If no parameters specified then method returns true if payments Custom Feature activated and at least
one event has configured price. Otherwise returns false.
 
----
 
=== isPluginActivated ===
 
<code>isPluginActivated($pluginName)</code>
 
Parameters:
 
* '''$pluginName''' String
 
Returns Boolean.
 
Return Custom Feature status true if status active, else false. <var>$pluginName</var> parameter is a Custom Feature identifier.See [[Custom Features]] page for full Custom Features description. See [[Company public service methods#Custom Features.27 identifiers|list of available Custom Features' names]].
 
 
----
 
=== validatePayment ===
 
<code>validatePayment($paymentInfo, $cartId)</code>
 
Parameters:
 
* '''$paymentInfo''' mixed
* '''$cartId''' Integer
 
Returns Boolean.
 
Validate application payment.
 
 
----
 
=== validatePromoCode ===
 
<code>validatePromoCode($code, $startDateTime, $eventId, $count, $clientData)</code>
 
Parameters:
 
* '''$code''' String
* '''$startDateTime''' String
* '''$eventId''' Integer
* '''$count''' Integer
* '''$clientData''' array|Object
 
Returns Boolean.
 
Validate promotion code.Returns true in case promocode is valid otherwise throws exception with error.
 
 
----
 
==Constants==
 
=== Error codes ===
 
See [[Errors handling]] for details.
 
* -32001 Custom Feature is not activated
* -32010 Some required params are missed
* -32011 Params is not array
* -32012 Sheduler id not found
* -32015 Passed event id is not reccuren
* -32020 Sorry, you have no permissions to perform this action
* -32030 Invalid promotion code
* -32031 Promotion has expired
* -32032 Promotion is not active yet
* -32033 This promocode is not valid for selected service
* -32034 Exceed max usage limit
* -32035 Exceed max usage per customer limit'const
* -32036 This promocode is not available for datetime range
* -32051 Selected event id is not available
* -32052 Selected unit id is not available
* -32053 Selected date start is not available
* -32054 Selected time start is not available
* -32055 One or more appointments couldn't be reserved
* -32056 Booking is not allowed at this time
* -32061 Client name value is wrong
* -32062 Client email value is wrong
* -32063 Client phone value is wrong
* -32070 Intake forms values are wrong
* -32080 Appointemnt couldn't be found
* -32085 Signature error
* -32090 Confirmation with this key type is not available
* -32095 Batch not found
* -32097 Unsupported payment system
* -32099 Payment failed
* -32600
*: An error with this code can be thrown with one of the following messages:
** Access denied
** Company does not exists
* -32601 Method not found
* -32602 Invalid params
* -32603 Internal error
* -3264 Client with given id not found
 
----
 
===Company params===
 
Use these values to get configuration params for company with <code>[[Company public service methods#getCompanyParam|getCompanyParam]]</code> API method.
 
=====General params=====


* allow_delay_payment
* allow_event_breaktime_break
* allow_event_breaktime_break
*: <code>true</code> if service can extend over breaktime
* allow_event_day_break
* allow_event_day_break
*: <code>true</code> if service can extend over closing hours
* changable_prefix_by_client
* company_timezone
* company_timezone
* date_format
* date_format
* fixed_country_prefix
* fixed_country_prefix
* hide_sale_tax
* max_group_bookings
*: [[Custom Features#Group Bookings|Group Bookings Custom Feature]] configuration. Integer.
* max_time_till_event
* max_time_till_event
* min_time_till_event
* min_time_till_event
* monday_is_first_day
* monday_is_first_day
* payment_timeout
*: <code>true</code> if monday specified as first day of the week in company's settings
* require_fields
* require_fields
*: String. Client's data fields required for booking. Possible values:  
*: Client's data fields required for booking. String. Possible values:  
** phone - phone number is required
** phone - phone number is required
** email - email address is required
** email - email address is required
** email_phone - phone number and email address are required
** email_phone - phone number and email address are required
* sale_tax
* send_notifications_in_client_timezone
* send_notifications_in_client_timezone
* show_booking_page_in_client_timezone
* show_booking_page_in_client_timezone
* time_format
* time_format
* timeframe
* timeframe
*: 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 [[Need to change interval (timeframe)|here]]
* user_public_timeline_type
* user_public_timeline_type
*: String. Can be one of the following values:
** flexible
** modern
** flexible_week
** modern_week
** classes
** classic
*: Please note that <code>classic</code> timeline type is deprecated and not supported anymore.
=====Accept Payments Custom Feature params=====
Read more about [[Custom Features#Accept Payments|Accept Payments Custom Feature configuration]].
* allow_delay_payment
*: Allow delay payment option. Boolean.
* hide_sale_tax
*: Hide sales tax option. Boolean.
* payment_timeout
*: Payment timeout option. String ("5 minutes", "1 hour", ...)
* sale_tax
*: Sales tax option. Integer. You should divide by 100 to get percent value.
=====Cancellation Policy Custom Feature params=====
Read more about [[Custom Features#Cancellation Policy|Cancellation Policy Custom Feature configuration]].
* cancelation_policy_text
*: Full policy text. String.
* cancelation_policy_label
*: Short label for confirmation control. String.
* cancelation_policy_period
*: Time period value. String ("5 minutes", "1 hour", ...)
----
====Custom Features' identifiers====
Custom Feature identifier is a string constant which represents a Custom Feature in system. These constants used in <code>[[Company public service methods#isPluginActivated|isPluginActivated]]</code> and <code>[[Company public service methods#getPluginStatuses|getPluginStatuses]]</code> API methods.
* advanced_notification
*:Book Soon notification system
* any_unit
*:Any Employee selector
* api
*:API
* approve_booking
*:Approve booking
* back_to_site
*:Take me back home
* contact_widget
*:Contact widget
* counter
*:Visitor Counter
* custom_css
*:Custom CSS
* data_security
*:Clean history
* description
*:HTML description field for events
* event_category
*:Service categories
* event_field
*:Intake forms
* facebookImage
*:Facebook client info
* financial_dashboard
*:Insights
* google_analytics
*:Google Adwords and analytics
* google_calendar_export
*:Calendar sync
* group_booking
*:Group bookings
* hipaa
*:HIPAA
* limit_bookings
*:Limit bookings
* location
*:Multiple locations
* mobile_app_backend
*:Mobile application
* multiple_booking
*:Multiple bookings
* news
*:News
* paid_events
*:Accept payments
<!--* promo
*:Rewards and Referrals-->
* recap
*:Daily report
* secure
*:SSL
* status
*:Status
* unit_colors
*:Providers color coding
* user_license
*:Terms and conditions
* cancelation_policy
*:Cancellation Policy
See [[Custom Features]] page for description for each .
----
== Examples ==
====book response====
[[Company public service methods#book|<code>book</code>]] API method returns an object which contains list of objects with short description of newly create bookings. Method returns only one item in 'bookings' array for regular appointment and more than one item for recurring or batch bookings.
  {
    "require_confirm":false,
    "bookings":[
      {
        "id":"434",
        "event_id":"7",
        "unit_id":"3",
        "client_id":"34",
        "start_date_time":"2015-12-30 13:00:00",
        "end_date_time":"2015-12-30 13:30:00",
        "is_confirmed":"1",
        "code":"h8vc14ca",
        "hash":"785cb8cce316e64765b94c05a635f4be"
      },
      {
        "id":"435",
        "event_id":"7",
        "unit_id":"3",
        "client_id":"34",
        "start_date_time":"2015-12-31 13:00:00",
        "end_date_time":"2015-12-31 13:30:00",
        "is_confirmed":"1",
        "code":"h8vc2pge",
        "hash":"8b92d634541bfd93c0830967e56f4653"
      },
      {
        "id":"436",
        "event_id":"7",
        "unit_id":"3",
        "client_id":"34",
        "start_date_time":"2016-01-04 13:00:00",
        "end_date_time":"2016-01-04 13:30:00",
        "is_confirmed":"1",
        "code":"h8vc3urb",
        "hash":"cd22a0bf183f7350e595988dd2486e5b"
      },
      {
        "id":"437",
        "event_id":"7",
        "unit_id":"3",
        "client_id":"34",
        "start_date_time":"2016-01-05 13:00:00",
        "end_date_time":"2016-01-05 13:30:00",
        "is_confirmed":"1",
        "code":"h8vc44d9",
        "hash":"53f98ff4e4a0323aa907156c59c99362"
      }
    ],
    "batch_type":"batch_recurrent_booking",
    "recurrent_batch_id":"1",
    "batch_hash":"357178bce290381bb7235080941ec143"
  }
----
====getCompanyInfo response====
An example of data returned by [[Company public service methods#getCompanyInfo|getCompanyInfo]] API method.
  {
    "login": "pierrecoetzee",
    "name": "Pierre",
    "description": "Write a description about your company or about you as a service provider. You can add other service providers inside the system and each can have his own description.",
    "address1": "",
    "address2": "Storey's Gate, ",
    "city": "London",
    "country_id": "GB",
    "lat": "51.500435",
    "lng": "-0.129811",
    "email": "pierre.coe@gmail.com",
    "phone": "",
    "web": null,
    "skip_address": null,
    "logo": null,
    "address": "GB, London, Storey's Gate, ",
    "description_text": "Write a description about your company or about you as a service provider. You can add other service providers inside the system and each can have his own description.",
    "timezone": "Europe London",
    "show_in_client_timezone": false,
    "timeframe": "60",
    "timeline_type": "modern_week",
    "allow_event_day_break": "0",
    "allow_event_breaktime_break": "0"
  }
<code>timeline_type</code> field can be one the following values:
* flexible
* modern
* flexible_week
* modern_week
* classic
* classes
Please note that <code>classic</code> timeline type is deprecated and not supported anymore.
<code>description</code> field contains raw data of company's description which can include HTML tags. <code>description_text</code> field contains only text information without HTML tags.
For information about <code>timeframe</code>, <code>timezone</code>, <code>allow_event_day_break</code> and <code>allow_event_breaktime_break</code> see [[Company public service methods#Company params|Company params section]].
----


====isPluginActivated====
<!----====getPluginPromoInfoByCode response====


<code>isPluginActivated(pluginName)</code>
  {
    "id": "1",
    "title": "[service\/services] with [discount]% discount!",
    "code": "yvuvugum",
    "description": "We are offering [service\/services] with an amazing [discount]% discount! We are running this deal for a limited time only.",
    "discount": "99.9999",
    "start_date": "2015-12-23",
    "expired_date": "2016-01-23",
    "sheduler_start_date": "2015-12-23",
    "sheduler_end_date": "2015-12-31",
    "sheduler_start_time": "09:00:00",
    "sheduler_end_time": "22:30:00",
    "allow_usage_count": "20",
    "fineprint_text": "Deal is limited for new clients only. Reward is claimable [client_claim_times_number] times per client. Deal is only claimable for the locations specified. Deal is cannot be combined with any other promotion. Must be redeemed prior to the expiration date shown on the deal.",
    "redemption_text": "Present your confirmation code when you want to redeem your deal. You may either to print off your confirmation email or show your confirmation code by loggin into Simplybook on your mobile phone\/Pc.\r\n[promocode]\r\n[discount]\r\n[reward]\r\n[referal_qty]",
    "headline": "[service\/services] with [discount]% discount!",
    "image": null,
    "allow_customer_count": "1",
    "show_in_catalogue": "1",
    "status": "active",
    "plugin_promo_message_id": "1",
    "common_promotion_id": "132",
    "service_ids": ["1"]
  }


Params:
<code>service_ids</code> contains a list of services for wich promotion discount can be applied.-->
* '''pluginName''' string
----


Returns boolean (1 or 0).
====getLocationsList response====


Return plugin status true if status active, else false. <code>pluginName</code> parameter is a plugin. Can be one of the following values:
  {
    "1": {
        "id": "1",
        "title": "location 1",
        "description": null,
        "picture": "e1e9409fe9682c78b2f8f294dc151af0.jpg",
        "address1": null,
        "address2": "Saint Margaret Street",
        "city": "London",
        "zip": null,
        "country_id": "GB",
        "lat": "51.50013000000000000000",
        "lng": "-0.12630500000000000000",
        "phone": "",
        "position": "1",
        "is_default": "1",
        "file_id": "4",
        "picture_sub_path": "\/image_files",
        "picture_path": "\/uploads\/mycompany\/image_files\/small\/e1e9409fe9682c78b2f8f294dc151af0.jpg",
        "units": ["1", "3", "4", "5"]
    },
    ...
  }


* 'advanced_notification' Book Soon notification system plugin
<code>position</code> property of location object used for order list. <code>units</code> array contains list of performers ids associated with location.
* 'any_unit' Any Employee selector plugin
* 'api' API plugin
* 'approve_booking' Approve booking plugin
* 'back_to_site' Take me back home plugin
* 'contact_widget' Contact widget plugin
* 'counter' Visitor Counter plugin
* 'custom_css' Custom CSS plugin
* 'data_security' Clean history plugin
* 'description' HTML description field for events
* 'event_category' Service categories plugin
* 'event_field' Additional fields plugin
* 'facebookImage' Facebook client info plugin
* 'financial_dashboard' Insights plugin
* 'google_analytics' Google Adwords and analytics plugin
* 'google_calendar_export' Google calendar sync plugin
* 'group_booking' Group bookings plugin
* 'hipaa' HIPAA plugin
* 'limit_bookings' Limit bookings plugin
* 'location' Unit location plugin
* 'mobile_app_backend' Mobile application plugin
* 'multiple_booking' Multiple bookings plugin
* 'news' News plugin
* 'paid_events' Accept payments plugin
* 'promo' Simply Smart Promotions plugin
* 'recap' Daily report plugin
* 'secure' SSL plugin
* 'status' Status plugin
* 'unit_colors' Provider's color coding plugin
* 'user_license' Terms and conditions plugin