A REST API to plug bookings into a custom website.

Time slots, availability and booking creation over REST. The interface stays in your hands.

REST + JSONOne API key per venueTyped, documented responses

Why use it

Your interface, our engine

You build the form, the date picker and the mobile experience the project calls for. Behind the scenes, Couverty applies opening hours, closures, capacity per room and service rules: the business logic nobody wants to rewrite.

Only slots that are genuinely available

The availability and time slot endpoints return what can be booked at that moment, closures and capacity included. You never show a time the restaurant cannot honour.

Key-based authentication, per venue

Data endpoints authenticate with an X-API-Key header or a Bearer token, using a key specific to each venue. Booking creation stays public (it is what the booking widget uses) and is protected by rate limiting.

Not just bookings

The food menu, drinks, daily menu, rooms and restaurant settings are exposed by the same API. A custom website can show a menu that is always up to date, without anyone re-entering it.

How to integrate it

1

Generate an API key

Generate an API key in the settings of the restaurant's Couverty account. It is sent in an X-API-Key header, or as a Bearer token if your HTTP client prefers.

bash
curl -H "X-API-Key: qr_your_api_key" \
  https://api.couverty.ch/api/public/v1/restaurant
2

Read the time slots, then create the booking

Query the available time slots for the chosen date, display them however you like, then post the booking. The restaurant sees it arrive in its Couverty calendar, and the confirmation emails go out automatically.

javascript
// 1. The bookable time slots for a date
const creneaux = await fetch(
  `https://api.couverty.ch/api/public/${slug}/creneaux?date=2026-09-12&service=soir`
).then((r) => r.json());

// 2. The booking
await fetch(`https://api.couverty.ch/api/public/${slug}/reservations`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    prenom: 'Jean',
    nom: 'Dupont',
    email: 'jean@example.com',
    telephone: '+41 79 123 45 67',
    dateReservation: '2026-09-12',
    service: 'soir',
    heureReservation: '19:30',
    nombrePersonnes: 4,
  }),
});
3

Or let your coding assistant handle it

If you build with Claude, Cursor or another assistant, paste this context in: it gives the assistant the base URL, the authentication and the endpoint contract it needs to write the integration.

prompt
Integrate Couverty bookings into this website.

Base: https://api.couverty.ch
Docs: https://couverty.ch/docs/api
Auth (data endpoints): header "X-API-Key: qr_..."

Useful endpoints, where {slug} is the restaurant's identifier:
  GET  /api/public/{slug}/config          -> opening hours, services, public settings
  GET  /api/public/{slug}/creneaux        -> ?date=YYYY-MM-DD&service=midi|soir
  GET  /api/public/{slug}/availability    -> availability per date
  GET  /api/public/{slug}/menu            -> food menu
  POST /api/public/{slug}/reservations    -> creates the booking (public, rate-limited)

POST /reservations body:
  prenom, nom, email, telephone, dateReservation (YYYY-MM-DD),
  service ("midi" | "soir"), heureReservation ("HH:mm"),
  nombrePersonnes (number), commentaires (optional)

Constraints:
- only display the slots returned by /creneaux, do not recalculate them;
- handle the error when a slot fills up between display and submission;
- never put the API key in client-side code.

A custom Next.js website where booking is part of the design

The client wants a three-step journey, their own typography, their own animations. Not an iframe dropped in the middle of the page. You fetch the time slots from a Server Component, render your own picker, and post the booking from a Server Action. On the restaurant side, nothing changes: the booking lands in the same calendar as those from the booking widget, with the same emails and the same no-show rules. All you wrote was the interface.

FAQ

The questions integrators and developers ask.

No. The creation endpoint is public and rate-limited. It is the data endpoints that require a key.

Calendar dates use the YYYY-MM-DD format, and the time uses HH:mm, separately.

Yes: the restaurant's profile, the food menu, drinks, the daily menu, rooms and closures.

The API documentation is the reference: see /docs/api for the exact status of outgoing notifications.

Data endpoints are versioned in the URL (/api/public/v1/). The API version is independent of the app version.

A question? Contact us

You build the interface, we handle the rest.

Full documentation, API keys per venue and direct contact with the technical team. The partner programme pays you for the restaurants you bring in.

A question? contact@couverty.ch