Wiki

Clone wiki

API-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 spots
  • days (required) is number of days you need spots for starting from and including the date
  • 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 contain grid and days 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 24
    • minutes 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 present
    • spots is set of spots with availability status for date, each spot has attributes:
      • hours always present, possible value from 0 to 24, is hour part of spot's start time
      • minutes always present, possible value from 0 to 59, is minutes part of spot's start time
      • arrival_window always present, value from 0 to 1380, is arrival window for spot start time in minutes
      • past tells if spot (date + hours + minutes) is in the "past" or not, when value is true means that spot cannot be booked:
      • free tells if spot can be booked or not, value is true if spot is not fully booked yet. Note: free is always false for past=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