Wiki
Clone wikiAPI-2.0 / Spots_for_booking
Method: POST
Path: /booking/spots
Return spots available for booking on given date, for given mode and number of days.
Request Schema:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Spots request", "type": "object", "properties": { "date": { "type": "string", "pattern": "\\A\\d{4}-\\d{2}-\\d{2}\\z" }, "days": { "type": "integer", "minimum": 1, "maximum": 7 }, "mode": { "type": "string", "enum": ["new", "reschedule"] }, "location_id": { "type":["integer", "null"], "minimum": 1 }, "grid": { "type":["boolean", "null"] } }, "required": [ "date", "days", "mode" ] }
Where:
date
(required) is the date starting from which you need spotsdays
(required) is number of days you need spots for starting from and including thedate
mode
(required) affects how available spots calculated: using reschedule booking policy or new booking policy.- new mode should be used when you need to create new booking. Note: New booking policy is applied, so it is possible to have future spots not available because of the policy
- reschedule mode should be used when you need to change date and/or time for already existing booking. Note: Booking reschedule policy is applied, so it is possible to have future spots not available because of the policy
location_id
(optional) is unique ID of location for which you need spots:- not provided: spots for default location returned
- provided and valid ID: spots for requested location returned
grid
(optional) if provided and value is true response will containgrid
anddays
sections
Example of response (grid
attribute not provided or set to false)
[ { "date": "2016-02-17", "spots": [ { "hours": 8, "minutes": 30, "arrival_window": 0, "past": true, "free": false }, { "hours": 8, "minutes": 30, "arrival_window": 60, "past": true, "free": false }, { "hours": 8, "minutes": 30, "past": true, "free": false }, { "hours": 10, "minutes": 30, "arrival_window": 0, "past": true, "free": false }, { "hours": 10, "minutes": 30, "arrival_window": 120, "past": true, "free": false }, { "hours": 12, "minutes": 30, "past": true, "free": false }, { "hours": 14, "minutes": 30, "arrival_window": 0, "past": true, "free": false }, { "hours": 16, "minutes": 30, "arrival_window": 0, "past": true, "free": false } ] }, { "date": "2016-02-18", "spots": [ { "hours": 8, "minutes": 30, "arrival_window": 0, "past": true, "free": false }, { "hours": 8, "minutes": 30, "arrival_window": 60, "past": true, "free": false }, { "hours": 8, "minutes": 30, "arrival_window": 60, "past": true, "free": false }, { "hours": 10, "minutes": 30, "arrival_window": 0, "past": true, "free": false }, { "hours": 10, "minutes": 30, "arrival_window": 120, "past": true, "free": false }, { "hours": 12, "minutes": 30, "past": true, "free": false }, { "hours": 14, "minutes": 30, "arrival_window": 0, "past": true, "free": false }, { "hours": 16, "minutes": 30, "arrival_window": 0, "past": true, "free": false } ] } ]
Example of response (grid
attribute provided and set to true)
{ "grid": [ { "hours": 2, "minutes": 10 }, { "hours": 4, "minutes": 20 }, { "hours": 6, "minutes": 30 }, { "hours": 8, "minutes": 40 }, { "hours": 10, "minutes": 50 } ], "days": [ { "date": "2016-12-07", "spots": [ { "hours": 2, "minutes": 10, "arrival_window": 0, "past": true, "free": false }, { "hours": 2, "minutes": 10, "arrival_window": 60, "past": true, "free": false }, { "hours": 4, "minutes": 20, "arrival_window": 0, "past": true, "free": false }, { "hours": 4, "minutes": 20, "arrival_window": 60, "past": true, "free": false }, { "hours": 6, "minutes": 30, "arrival_window": 0, "past": true, "free": false }, { "hours": 6, "minutes": 30, "arrival_window": 60, "past": true, "free": false }, { "hours": 8, "minutes": 40, "arrival_window": 0, "past": true, "free": false }, { "hours": 8, "minutes": 40, "arrival_window": 60, "past": true, "free": false }, { "hours": 10, "minutes": 50, "arrival_window": 0, "past": true, "free": false }, { "hours": 10, "minutes": 50, "arrival_window": 60, "past": true, "free": false } ] }, { "date": "2016-12-08", "spots": [ { "hours": 2, "minutes": 10, "arrival_window": 0, "past": false, "free": false }, { "hours": 2, "minutes": 10, "arrival_window": 60, "past": false, "free": false }, { "hours": 4, "minutes": 20, "arrival_window": 0, "past": false, "free": false }, { "hours": 4, "minutes": 20, "arrival_window": 60, "past": false, "free": false }, { "hours": 6, "minutes": 30, "arrival_window": 0, "past": false, "free": false }, { "hours": 6, "minutes": 30, "arrival_window": 60, "past": false, "free": false }, { "hours": 8, "minutes": 40, "arrival_window": 0, "past": false, "free": false }, { "hours": 8, "minutes": 40, "arrival_window": 60, "past": false, "free": false }, { "hours": 10, "minutes": 50, "arrival_window": 0, "past": false, "free": false }, { "hours": 10, "minutes": 50, "arrival_window": 60, "past": false, "free": false } ] }, { "date": "2016-12-09", "spots": [ { "hours": 2, "minutes": 10, "arrival_window": 0, "past": false, "free": false }, { "hours": 2, "minutes": 10, "arrival_window": 60, "past": false, "free": false }, { "hours": 4, "minutes": 20, "arrival_window": 0, "past": false, "free": false }, { "hours": 4, "minutes": 20, "arrival_window": 60, "past": false, "free": false }, { "hours": 6, "minutes": 30, "arrival_window": 0, "past": false, "free": false }, { "hours": 6, "minutes": 30, "arrival_window": 60, "past": false, "free": false }, { "hours": 8, "minutes": 40, "arrival_window": 0, "past": false, "free": false }, { "hours": 8, "minutes": 40, "arrival_window": 60, "past": false, "free": false }, { "hours": 10, "minutes": 50, "arrival_window": 0, "past": false, "free": false }, { "hours": 10, "minutes": 50, "arrival_window": 60, "past": false, "free": false } ] }, { "date": "2016-12-10", "spots": [ { "hours": 2, "minutes": 10, "arrival_window": 0, "past": false, "free": false }, { "hours": 2, "minutes": 10, "arrival_window": 60, "past": false, "free": false }, { "hours": 4, "minutes": 20, "arrival_window": 0, "past": false, "free": false }, { "hours": 4, "minutes": 20, "arrival_window": 60, "past": false, "free": false }, { "hours": 6, "minutes": 30, "arrival_window": 0, "past": false, "free": false }, { "hours": 6, "minutes": 30, "arrival_window": 60, "past": false, "free": false }, { "hours": 8, "minutes": 40, "arrival_window": 0, "past": false, "free": false }, { "hours": 8, "minutes": 40, "arrival_window": 60, "past": false, "free": false }, { "hours": 10, "minutes": 50, "arrival_window": 0, "past": false, "free": false }, { "hours": 10, "minutes": 50, "arrival_window": 60, "past": false, "free": false } ] } ] }
Where:
grid
is a set of possible start time for booking; each item has attributes:hours
always present, possible value from 0 to 24minutes
always present, possible value from 0 to 59
days
is a set of requested days with availability, each has attributes:date
is requested date, always presentspots
is set of spots with availability status fordate
, each spot has attributes:hours
always present, possible value from 0 to 24, is hour part of spot's start timeminutes
always present, possible value from 0 to 59, is minutes part of spot's start timearrival_window
always present, value from 0 to 1380, is arrival window for spot start time in minutespast
tells if spot (date
+hours
+minutes
) is in the "past" or not, when value is true means that spot cannot be booked:- because
date
+hours
+minutes
is in the past (in account's timezone) - OR because of New booking policy (for
mode
="new") - OR because of Booking reschedule policy (for
mode
="reschedule")
- because
free
tells if spot can be booked or not, value is true if spot is not fully booked yet. Note:free
is always false forpast
=true
Example request:
For production, replace https://acme-sandbox.l27.co
with https://<your subdomain>.launch27.com
curl -H "Content-Type: application/json" \ -X POST -k \ -d '{"date": "2017-08-15", "days": 5, "mode": "new"}' \ https://acme-sandbox.l27.co/latest/booking/spots
Updated