Getting Started

Introduction

Restaurant reservation API for online booking systems

eTender Connect is a restaurant reservation platform for third party booking systems.

Your booking system can access the real time availability of restaurants and create/modify online table reservations - using an access key (token). Please contact the restaurant to get an access key. In order to use a single access key for multiple restaurants, please contact us.







Documentation

API

Our HATEOAS (Hypermedia As The Engine Of Application State) RESTful API uses HTTP-verbs with UTF-8 encoding and URL encoded values.

Structured data following Schema.org > Thing > Intangible > Reservation > FoodEstablishmentReservation


Design

SWAGGER 2.0

Download swagger file here

RAML 1.0

Download RAML file here


Authorization

API Authorization framework

Authorization: Bearer <AccessKey>


Payload

JSON

Request and response payloads are formatted as JSON.


End point

https://eTender-connect.com/v1

IP address

Requests from our platform originate from 193.93.173.20 - 193.93.173.24.


Resources and methods

GET /restaurants

OK: response restaurant objects by access key/booking partner

GET /restaurants /{restaurantId}

OK: response a restaurant object by id

GET /restaurants /{restaurantId} /availability

OK: response date-availability objects for all dates

GET /restaurants /{restaurantId} /availability /{year}

OK: response date-availability objects by year

GET /restaurants /{restaurantId} /availability /2017 /{month}

OK: response date-availability objects by year and month

GET /restaurants /{restaurantId} /availability /2017 /12 /{day}

OK: response TIME-availability objects by date

GET /restaurants /{restaurantId} /reservations /{reservationId}

OK; response reservation details

POST /restaurants /{restaurantId} /reservations

OK; reservation created

PATCH /restaurants /{restaurantId} /reservations /{reservationCode}

OK; reservation updated

PUT /restaurants /{restaurantId} /reservations /{reservationCode}

OK; reservation replaced

DELETE /restaurants /{restaurantId} /reservations /{reservationcode}

OK; reservation deleted

Restaurant object

This is an example object of the restaurant.

{
  "id": 10000,
  "name": "Restaurant Los Pollos Hermanos",
  "phone": "+31 (0) 20-7793839",
  "email": "info@lospolloshermanos.restaurant",
  "address": "Keizersgracht 188",
  "postalCode": "1016 DW",
  "city": "Amsterdam",
  "state": "Noord-Holland",
  "country": "Nederland",
  "website": "http://www.lospolloshermanos.restaurant/",
  "facebook": "lospolloshermanos",
  "timeZone": "Europe/Amsterdam",
  "links": [
    {
      "href": "https://eTender-connect.com/v1/restaurants/10000",
      "rel": "self",
      "method": "GET"
    },
    {
      "href": "https://eTender-connect.com/v1/restaurants/10000/availability",
      "rel": "availability",
      "method": "GET"
    },
    {
      "href": "https://eTender-connect.com/v1/restaurants/10000/reservations",
      "rel": "create-reservation",
      "method": "POST"
    }
  ]
}
	  

Availability object

This is an example object of the availability by date.

[
  {
    "localDate": "2017-01-24",
    "isAvailable": false,
    "isOpen": true,
    "links": [
      {
        "href": "https://eTender-connect.com/v1/restaurants/10000/availability/2017/1/24",
        "rel": "self",
        "method": "GET"
      }
    ]
  },
  {
    "localDate": "2017-01-25",
    "isAvailable": false,
    "isOpen": false,
    "links": [
      {
        "href": "https://eTender-connect.com/v1/restaurants/10000/availability/2017/1/25",
        "rel": "self",
        "method": "GET"
      }
    ]
  },
  {
    "localDate": "2017-01-26",
    "isAvailable": true,
    "isOpen": true,
    "links": [
      {
        "href": "https://eTender-connect.com/v1/restaurants/10000/availability/2017/1/26",
        "rel": "self",
        "method": "GET"
      }
    ]
  },

...

]
	  

This is an example object of the availability by time (15 minutes).

[
  {
    "localTime": "00:00",
    "minPartySize": 1,
    "maxPartySize": 0,
    "isOpen": false,
    "isAvailable": false
  },
  {
    "localTime": "00:15",
    "minPartySize": 1,
    "maxPartySize": 0,
    "isOpen": false,
    "isAvailable": false
  },
  {
    "localTime": "00:30",
    "minPartySize": 1,
    "maxPartySize": 0,
    "isOpen": false,
    "isAvailable": false
  },
  {
    "localTime": "00:45",
    "minPartySize": 1,
    "maxPartySize": 0,
    "isOpen": false,
    "isAvailable": false
  },
  {
    "localTime": "01:00",
    "minPartySize": 1,
    "maxPartySize": 0,
    "isOpen": false,
    "isAvailable": false
  },

...

]
	  

Reservation object

This is an example object of the reservation.

Sorry, not available
	  

Triggers

A trigger consists of one or more actions performed when a reservation is created or updated. The actions are performed only if certain conditions are met. For example, a trigger can notify your booking system when the status of a reservation is cancelled. Or when the availability of the restaurant is changed.

Please contact us
	  

Error codes

HTTP status code 400

Error 2001, "Timeslot {reservationDate} is not available for table reservation."
	  
Error 2002, "Party size {partySize} exceeds the available party size."
Error 2003, "Party size {partySize} is too small."
Error 2004, "No time specified."
Error 2005, "No date specified."
Error 2006, "Date {date}, or time {time} are not in a valid format, should be yyyy-MM-dd and HH:mm."
Error 2007, "Could not allocate a table for party size {partySize} while table allocation is required."

Error 2101, "Reservation has no contact information."
Error 2102, "Contact should have a title."
Error 2103, "Contact should have a name."
Error 2104, "Contact should have a phone number."
Error 2105, "Contact should have an email address."
Error 2106, "Contact should have a valid email address, email address is {email}."
Error 2107, "Contact should have a gender."

Error 6001, "Invalid date: {year}/{month}/({day}). Dates should be formatted as yyyy/MM/(dd)."
Error 6002, "Invalid date: {year}/{month}/({day}). Dates should not be in the past."

HTTP status code 401

Error 3001, "No authorization header."
	  
Error 3002, "No AccessKey present in authorization header."
Error 3003, "AccessKey {apiKey} is not a valid AccessKey."

HTTP status code 404

Error 4001, "Restaurant {restaurantId} not found."
	  
Error 4002, "Reservation {reservationId} not found."

HTTP status code 500

Error 9999, "Internal server error."