Reservations
Public booking API · https://api.conciar.com/public/v1
INFO
De API-referentie is in het Engels.
Book a table
Without a deposit or guarantee the reservation is confirmed at once and the guest is emailed. With a deposit it is held for 30 minutes and payment_url points at the payment page; with a card guarantee next_step.type is guarantee and the URL is the card page. After paying, the payment provider sends the guest back through the API, which redirects (303) to your return_url, or without one to manage_url?paid=1. An Apple Pay or Google Pay deposit can be charged in this call (wallet_status).
Rate limit: 10/min per restaurant and IP
Padparameters
organization_guidstringverplichtThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
Body
request_idstringverplichtYour idempotency id, 8–64 letters, digits or dashes (a UUID works). Sending the same id again returns the first result with replayed: true.
party_sizeintegerverplichtNumber of guests: 1 up to booking.max_party (table bookings) or 1–20 (tickets).
datestringverplichtY-m-d.
timestringverplichtH:i, one of the times returned by the times endpoint.
first_namestringverplichtMax 80 characters.
last_namestringverplichtMax 80 characters.
emailstringverplichtAn email address, max 190 characters.
phone_country_idintegerverplichtA country id from GET /countries.
phonestringverplicht6–25 characters: digits, spaces and + ( ) . -
notestringMax 500 characters.
marketing_opt_inbooleanThe guest agrees to receive marketing.
sourcestringbooking_page (default) or widget.
langstringen, nl, de, fr or es — the language of the emails.
return_urlstringhttp(s) URL, max 2000. Where the guest lands after paying; without it they land on the reservation page in the Conciar guest app.
guarantee_consentbooleanMust be true when a card guarantee applies (show terms.consent_text from GET …/guarantee).
payment_methodobjectThe deposit payment method the guest chose: payment_id (integer), payment_service_provider_id (integer) and payment_key (max 50), all required when payment_method is sent. Must be enabled for the restaurant.
apple_pay_token, apple_pay_payment_dataobjectRequired when payment_method.payment_key is applepay.
payment_datastringThe Google Pay token. Required when payment_method.payment_key is google_pay.
Statuscodes
200Replay of an earlier request_id (replayed: true).404NOT_FOUND (unknown restaurant) or UNAVAILABLE.409DEPOSIT_UNAVAILABLE or GUARANTEE_UNAVAILABLE — the restaurant cannot take the payment it requires.422INVALID (with errors; also a party_size above booking.max_party), TOO_SOON, TOO_FAR, SLOT_TAKEN, TICKETS_REQUIRED, CONSENT_REQUIRED or PAYMENT_METHOD_UNAVAILABLE.502PAYMENT_FAILED — the payment could not be started.503BUSY — try again.
Goed om te weten
- The manage_url is the guest's own page; its last path segment is the confirmation token used by the manage, guarantee and tickets endpoints.
- reservation.deposit is a formatted amount (e.g. "€ 20,00") or null. reservation.status is the stored status; state is pending, confirmed, cancelled or expired. payment_required stays true while a deposit or card is still due.
curl -X POST "https://api.conciar.com/public/v1/restaurants/bistro-example/reservations" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"request_id": "6f1c2a9e-0000-4000-8000-000000000000",
"party_size": 2,
"date": "2026-10-24",
"time": "19:00",
"first_name": "Alex",
"last_name": "Example",
"email": "alex@example.com",
"phone_country_id": 150,
"phone": "+31 6 00000000",
"return_url": "https://www.example.com/booked"
}'{
"status": true,
"replayed": false,
"payment_required": false,
"payment_url": null,
"next_step": null,
"wallet_status": null,
"hold_minutes": 30,
"manage_url": "https://r.conciar.com/bistro-example/reservation/0000000000000000000000000000000000000000",
"reservation": {
"reference": "EXAMPLE-R-0001",
"date": "2026-10-24",
"time": "19:00",
"party_size": 2,
"name": "Alex Example",
"email": "alex@example.com",
"status": "confirmed",
"state": "confirmed",
"source": "booking_page",
"locale": "en",
"deposit": null,
"deposit_paid": false
}
}Get a booking by request id
Look up a booking you made with request_id, e.g. after the guest returns from paying.
Rate limit: 120/min per restaurant and IP
Padparameters
organization_guidstringverplichtThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
request_idstringverplichtThe request_id you booked with.
Statuscodes
404NOT_FOUND — unknown restaurant, or no booking (from the booking page or widget) with this request_id.
Goed om te weten
- tickets is {reference, quantity, event, total (formatted), status} or null; guarantee is {amount (formatted), deadline (localized text), status} or null, and stays null while the guarantee is pending or failed.
curl "https://api.conciar.com/public/v1/restaurants/bistro-example/reservations/6f1c2a9e-0000-4000-8000-000000000000" \
-H "Accept: application/json"{
"status": true,
"payment_required": false,
"payment_url": null,
"next_step": null,
"manage_url": "https://r.conciar.com/bistro-example/reservation/0000000000000000000000000000000000000000",
"reservation": {
"reference": "EXAMPLE-R-0001",
"date": "2026-10-24",
"time": "19:00",
"party_size": 2,
"name": "Alex Example",
"email": "alex@example.com",
"status": "confirmed",
"state": "confirmed",
"source": "booking_page",
"locale": "en",
"deposit": null,
"deposit_paid": false
},
"tickets": null,
"guarantee": null
}Card guarantee terms
Whether a no-show card guarantee applies to a date, time and party size, and its fee, deadline and the consent text to show the guest.
Rate limit: 120/min per restaurant and IP
Padparameters
organization_guidstringverplichtThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
Queryparameters
party_sizeintegerverplicht1–20.
datestringverplichtY-m-d.
timestringverplichtH:i.
langstringen, nl, de, fr or es (anything else is 422 INVALID). Falls back to Accept-Language, then the restaurant's language, then en.
Statuscodes
404NOT_FOUND — unknown restaurant, or not a restaurant.422INVALID, with errors.
Goed om te weten
- When a guarantee applies, terms is {fee, total (money), basis, free_cancellation_hours, deadline (Y-m-d H:i), deadline_label, total_label, consent_text}. reason (NO_MOLLIE or NO_CARD_METHOD) and message explain why it is unavailable.
curl "https://api.conciar.com/public/v1/restaurants/bistro-example/guarantee?party_size=6&date=2026-10-24&time=19%3A00" \
-H "Accept: application/json"{
"status": true,
"required": false,
"available": true,
"reason": null,
"message": null,
"terms": null
}A booking's card guarantee
Rate limit: 120/min per restaurant and IP
Padparameters
organization_guidstringverplichtThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
tokenstringverplichtThe 40-character confirmation token from manage_url (letters and digits).
Statuscodes
404NOT_FOUND — unknown restaurant or token.
Goed om te weten
- With a guarantee: guarantee_status (pending, active, failed, charging, charge_failed, charged, waived), awaits_card, card_on_file, terms ({amount, deadline, status} or null), deadline (Y-m-d H:i), deadline_passed and payment_url while a card is still needed. Unlike the manage calls, the token does not expire here.
curl "https://api.conciar.com/public/v1/restaurants/bistro-example/reservations/0000000000000000000000000000000000000000/guarantee" \
-H "Accept: application/json"{
"status": true,
"has_guarantee": false
}Get the card page
The page where the guest registers the card for the guarantee.
Rate limit: 10/min per restaurant and IP
Padparameters
organization_guidstringverplichtThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
tokenstringverplichtThe 40-character confirmation token from manage_url (letters and digits).
Statuscodes
404NOT_FOUND — unknown restaurant or token.409NO_CARD_DUE — no card is needed, or a card payment could not be started.
curl -X POST "https://api.conciar.com/public/v1/restaurants/bistro-example/reservations/0000000000000000000000000000000000000000/guarantee/card" \
-H "Accept: application/json"{
"status": true,
"payment_url": "https://payment-provider.example/card/…"
}