Ticketed events
Public booking API · https://api.conciar.com/public/v1
Special events sold with tickets, paid in full when booked (held 30 minutes).
INFO
La référence de l’API est en anglais.
List events
Ticketed events that are on sale or not on sale yet.
Limite de débit: 120/min per restaurant and IP
Paramètres de chemin
organization_guidstringobligatoireThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
Paramètres de requête
langstringen, nl, de, fr or es. Falls back to Accept-Language, then the restaurant's language, then en.
Codes de statut
404NOT_FOUND — unknown restaurant, or not a restaurant.
Bon à savoir
- seating is tables or seats; state is not_ticketed, not_started, open or ended; sale_opens is a date text or null; start_time and end_time are null (and start_iso a date) for all-day events.
curl "https://api.conciar.com/public/v1/restaurants/bistro-example/events" \
-H "Accept: application/json"{
"status": true,
"events": [
{
"id": 7,
"name": "Example wine dinner",
"description": "Five courses with matching wines.",
"url": "https://r.conciar.com/bistro-example/events/7-example-wine-dinner?lang=en",
"slug": "example-wine-dinner",
"when": "Friday 30 October 2026 · 19:00–23:00",
"start_date": "2026-10-30",
"end_date": "2026-10-30",
"start_time": "19:00",
"end_time": "23:00",
"start_iso": "2026-10-30T19:00",
"seating": "tables",
"unit": {
"amount": "65.00",
"minor": 6500,
"currency": "EUR"
},
"unit_label": "€65.00",
"vat_rate": 9,
"max_per_booking": 8,
"state": "open",
"remaining": 24,
"sold_out": false,
"sale_opens": null
}
]
}Get an event
Limite de débit: 120/min per restaurant and IP
Paramètres de chemin
organization_guidstringobligatoireThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
eventintegerobligatoireEvent id.
Paramètres de requête
langstringen, nl, de, fr or es. Falls back to Accept-Language, then the restaurant's language, then en.
Codes de statut
404NOT_FOUND — unknown restaurant, or no published ticketed event with this id.
Bon à savoir
- Ended events are still returned; on_sale is true only while the sale is open and tickets remain.
curl "https://api.conciar.com/public/v1/restaurants/bistro-example/events/7" \
-H "Accept: application/json"{
"status": true,
"event": {
"id": 7,
"name": "Example wine dinner",
"description": "Five courses with matching wines.",
"url": "https://r.conciar.com/bistro-example/events/7-example-wine-dinner?lang=en",
"slug": "example-wine-dinner",
"when": "Friday 30 October 2026 · 19:00–23:00",
"start_date": "2026-10-30",
"end_date": "2026-10-30",
"start_time": "19:00",
"end_time": "23:00",
"start_iso": "2026-10-30T19:00",
"seating": "tables",
"unit": {
"amount": "65.00",
"minor": 6500,
"currency": "EUR"
},
"unit_label": "€65.00",
"vat_rate": 9,
"max_per_booking": 8,
"state": "open",
"remaining": 24,
"sold_out": false,
"sale_opens": null
},
"on_sale": true,
"max_tickets": 8,
"hold_minutes": 30,
"t": {
"…": "…"
}
}Event dates
Limite de débit: 120/min per restaurant and IP
Paramètres de chemin
organization_guidstringobligatoireThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
eventintegerobligatoireEvent id.
Paramètres de requête
party_sizeintegerobligatoire1–20.
Codes de statut
404NOT_FOUND.422INVALID.
Bon à savoir
- status is open or full.
curl "https://api.conciar.com/public/v1/restaurants/bistro-example/events/7/dates?party_size=2" \
-H "Accept: application/json"{
"status": true,
"dates": [
{
"date": "2026-10-30",
"status": "open"
}
]
}Event times and price
Limite de débit: 120/min per restaurant and IP
Paramètres de chemin
organization_guidstringobligatoireThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
eventintegerobligatoireEvent id.
Paramètres de requête
party_sizeintegerobligatoire1–20.
datestringobligatoireY-m-d.
Codes de statut
404NOT_FOUND.422INVALID.
Bon à savoir
- times is [] when fewer tickets remain than party_size.
curl "https://api.conciar.com/public/v1/restaurants/bistro-example/events/7/times?party_size=2&date=2026-10-30" \
-H "Accept: application/json"{
"status": true,
"date": "2026-10-30",
"times": [
"19:00"
],
"total": {
"amount": "130.00",
"minor": 13000,
"currency": "EUR"
},
"tax": {
"amount": "10.73",
"minor": 1073,
"currency": "EUR"
},
"vat_rate": 9
}Buy tickets
Books the tickets and returns the payment page; the booking is held for 30 minutes until paid. After paying, the guest lands on your return_url (through an API redirect), or without one on the reservation page.
Limite de débit: 10/min per restaurant and IP
Paramètres de chemin
organization_guidstringobligatoireThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
eventintegerobligatoireEvent id.
Corps
request_idstringobligatoireYour idempotency id, 8–64 letters, digits or dashes (a UUID works). Sending the same id again returns the first result with replayed: true.
party_sizeintegerobligatoireNumber of guests: 1 up to booking.max_party (table bookings) or 1–20 (tickets).
datestringobligatoireY-m-d.
timestringobligatoireH:i, one of the times returned by the times endpoint.
first_namestringobligatoireMax 80 characters.
last_namestringobligatoireMax 80 characters.
emailstringobligatoireAn email address, max 190 characters.
phone_country_idintegerobligatoireA country id from GET /countries.
phonestringobligatoire6–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.
Codes de statut
200Replay of an earlier request_id (replayed: true).404NOT_FOUND.409TICKETS_UNAVAILABLE, SALE_CLOSED or SOLD_OUT (with message).422INVALID, TOO_MANY (more than the event allows per booking) or SLOT_TAKEN.502PAYMENT_FAILED.503BUSY.
curl -X POST "https://api.conciar.com/public/v1/restaurants/bistro-example/events/7/tickets" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"request_id": "0b7d4c1e-0000-4000-8000-000000000000",
"party_size": 2,
"date": "2026-10-30",
"time": "19:00",
"first_name": "Alex",
"last_name": "Example",
"email": "alex@example.com",
"phone_country_id": 150,
"phone": "+31 6 00000000"
}'{
"status": true,
"replayed": false,
"payment_url": "https://payment-provider.example/checkout/…",
"hold_minutes": 30,
"manage_url": "https://r.conciar.com/bistro-example/reservation/0000000000000000000000000000000000000000",
"token": "0000000000000000000000000000000000000000",
"tickets": {
"reference": "EXAMPLE-T-0001",
"quantity": 2,
"date": "2026-10-30",
"time": "19:00",
"status": "pending"
}
}A booking's tickets
Limite de débit: 120/min per restaurant and IP
Paramètres de chemin
organization_guidstringobligatoireThe restaurant's guid or its handle (any case, a leading @ is ignored; former handles still resolve).
tokenstringobligatoireThe 40-character confirmation token from manage_url (letters and digits).
Codes de statut
404NOT_FOUND.
Bon à savoir
- tickets.status is pending, paid, cancelled or refunded; payment_url is set only while pending. The token does not expire here.
curl "https://api.conciar.com/public/v1/restaurants/bistro-example/reservations/0000000000000000000000000000000000000000/tickets" \
-H "Accept: application/json"{
"status": true,
"tickets": {
"reference": "EXAMPLE-T-0001",
"quantity": 2,
"event": "Example wine dinner",
"total": "€ 130,00",
"status": "paid"
},
"payment_url": null
}