Integrations · Partner API

Jesdi connects with any platform that takes reservations.

Are you a reservation platform, deal site, restaurant guide or app? With the Jesdi Partner API you see our restaurants' free times in real time and put reservations straight into their agenda. No double bookings, no retyping and no hassle for the restaurant.

Free for platforms and restaurants · Every connection built within a day · Test key with a demo restaurant

Why connect

One agenda for the restaurant, real availability for you.

Always the real free times

You see exactly what the restaurant offers online: opening hours, capacity, free tables, holidays and full days. What you sell, the restaurant can actually deliver.

Straight into the agenda

Your reservation is in the restaurant's agenda immediately, with your name as a label. If the restaurant changes or cancels something, you hear about it within a minute.

Free, and connected within a day

Connecting costs nothing, not for you and not for the restaurant. Use our API, or do you prefer to work with your own API? Then we build the connection with your system within a day.

How it works

Connected in four steps.

Request a key

E-mail us your company name and what you want to connect. You'll get a test key. If you have your own API, we build the connection within a day.

Test

Try free times, booking, changing and cancelling with our demo restaurant.

The restaurant switches it on

The restaurant picks your platform in its Jesdi back office. Only then do you see its times.

Live

Reservations through your platform go straight into the agenda. The same for every next restaurant.

Documentation

Jesdi Partner API v1

Everything you need to connect. The examples are in English, like the API itself.

Basics

All calls go to this address, with your key in the header. Data is JSON in UTF-8. Dates are YYYY-MM-DD and times HH:MM, in the restaurant's local time (Europe/Amsterdam).

Base URL:  https://jesdi.nl/partner/v1
Header:    Authorization: Bearer <your api key>

Restaurants

The restaurants that have switched on the connection with your platform. Use the id field in all other calls. If bookable is false, the restaurant is paused or has closed online booking.

GET/restaurants
{ "restaurants": [ {
    "id": "in-den-vlaemschen-pot", "name": "In den Vlaemschen Pot",
    "address": "…", "phone": "…", "website": "…",
    "bookable": true, "max_party": 8, "seating_choice": false,
    "slot_minutes": 30, "duration_minutes": 120, "days_ahead": 120
} ] }

Free times

The same rules as the restaurant's own widget: opening hours, capacity, arrivals per time slot, minimum notice, holidays, free tables and the largest group that can book online. You only get times that are confirmed immediately.

GET/restaurants/{id}/availability?date=2026-10-15&party=2
{ "date": "2026-10-15", "party": 2, "times": ["17:30", "18:00", "20:30"] }

Or per day over a period of up to 62 days, for example for a calendar:

GET/restaurants/{id}/availability?from=2026-10-15&to=2026-11-15&party=2
{ "party": 2, "days": { "2026-10-15": "open", "2026-10-16": "full", "2026-10-17": "closed" } }

If the restaurant offers a choice between indoor and terrace (seating_choice), add &seating=terrace.

Create a reservation

POST/restaurants/{id}/reservations
{ "external_id": "DS-1001", "date": "2026-10-15", "time": "19:00", "party": 2,
  "name": "Jan de Vries", "email": "jan@example.com", "phone": "+31612345678",
  "remarks": "Restaurant Week menu, 1x gluten free", "seating": "indoor", "lang": "nl" }
  • external_id (required) is your reservation number. If you send the same external_id again, you get the existing reservation back. Retrying after a time-out is therefore safe.
  • email and phone are optional. Jesdi does not send its own confirmation to partner guests; you do that.
  • Response: 201 with the reservation, or 409 slot_unavailable if the time has just filled up.
{ "reservation": {
    "id": 35, "external_id": "DS-1001", "restaurant": "in-den-vlaemschen-pot",
    "date": "2026-10-15", "time": "19:00", "duration_minutes": 120, "party": 2,
    "seating": null, "status": "confirmed", "name": "Jan de Vries",
    "remarks": "…", "updated_at": "2026-10-07 16:10:00"
} }

Change and cancel

GET/reservations/{external_id}
PATCH/reservations/{external_id}
{ "date": "2026-10-16", "time": "20:00", "party": 4 }     // move
{ "status": "cancelled" }                                 // cancel

A reservation in the past, or one where the guests have already arrived, can no longer be changed (409).

GET/reservations?updated_since=2026-10-07 12:00:00

All reservations from your platform that changed since that moment. Useful if you prefer polling to webhooks.

Status

statusMeaning
confirmedConfirmed
pendingThe restaurant still has to approve
seatedThe guests have arrived
cancelledCancelled
declinedDeclined by the restaurant
no_showDid not show up

Webhooks

If the restaurant cancels or moves a reservation, or marks it as seated or no-show, we send a POST to your webhook address within a minute. If that fails, we retry every minute until you respond with a 2xx status.

POST https://your-platform.example/jesdi-webhook
X-Jesdi-Signature: sha256=<hmac of the body with your webhook secret>

{ "event": "reservation.updated", "reservation": { … } }

Error codes

HTTPerrorMeaning
400date_time_party_required, name_required, invalid_emailA required field is missing or invalid
401unauthorizedKey is missing or not valid
404restaurant_not_connected, not_foundThe restaurant has not switched on the connection, or the reservation does not exist
409slot_unavailable, not_changeableThe time is full, or the reservation can no longer be changed

Ready to connect?

Connecting is free. E-mail us your company name and what you want to connect: you get a test key and a demo restaurant, or we build the connection with your own API within a day.

Request an API key