API FlavosoRéférence de l'APIÉtablissement
Établissement
Statut d'ouverture, horaires d'ouverture et de livraison, jours particuliers, délais de préparation, modes de commande et mise en pause des commandes.
Points de terminaison
- get
/storeRetrieve the store - patch
/storeChange lead times, pre-orders and order types - get
/store/hoursRetrieve opening and delivery hours - put
/store/hoursReplace opening and/or delivery hours - get
/store/closuresList special days - post
/store/closuresCreate or replace a special day - delete
/store/closures/{date}Delete a special day - post
/store/pausePause online ordering - post
/store/resumeResume online ordering
Retrieve the store
get/store
- Droit:
store:read- Offre:
- toutes les offres
Open, closed or paused right now, the next opening, order types, the statuses the restaurant uses, lead times, minimum order, opening and delivery hours, upcoming special days, contact details, address and location.
Réponse200
OK
objectstringobligatoireAlways
store.Valeurs:
"store"idstring (uuid)obligatoireThe restaurant.
namestringobligatoireName.
slugstringobligatoireIts address:
<slug>.flavoso.com.timezonestringobligatoireIANA time zone of all local times.
currencystringobligatoireISO 4217.
statusstringobligatoireRight now: open, closed (outside hours or a closed special day), or paused.
Valeurs:
"open""closed""paused"paused_untilstring (date-time)obligatoirepeut être nullEnd of the running pause; null without one.
pause_notestringobligatoirepeut être nullReason of the running pause.
next_opening_atstring (date-time)obligatoirepeut être nullNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanobligatoireGuests may order for a later time, also while closed.
order_typesobjectobligatoireWhich order types guests can choose.
Champs contenus (3)
pickupbooleanobligatoirePickup.
deliverybooleanobligatoireDelivery.
dine_inbooleanobligatoireOrdering at the table via QR code (Pro and up).
order_statusesstring[]obligatoireStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectobligatoireHow long the kitchen needs; the earliest pickup or delivery time.
Champs contenus (2)
pickup_minutesintegerobligatoireMinutes until pickup, 0 to 240.
delivery_minutesintegerobligatoireMinutes until delivery, 0 to 360.
min_orderintegerobligatoireMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanobligatoireNo weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.
opening_hoursWeekWindow[]obligatoireThe weekly opening windows; a weekday without windows is closed.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]obligatoireWeekly delivery windows; empty means delivery follows opening_hours.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closuresClosure[]obligatoireUpcoming special days (today and later).
Champs contenus (5)
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanobligatoireClosed all day.
hoursTimeWindow[]obligatoireThe windows of that day when not closed (at most two).
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringobligatoirepeut être nullNote, e.g. the reason.
contactobjectobligatoirePublic contact details.
Champs contenus (3)
phonestringobligatoirepeut être nullPhone.
emailstringobligatoirepeut être nullE-mail.
websitestringobligatoirepeut être nullWebsite.
addressobjectobligatoirepeut être nullThe address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.
Champs contenus (4)
linestringobligatoirepeut être nullStreet and number (or the whole address when it cannot be split).
postal_codestringobligatoirepeut être nullPostal code, when it can be read from the address.
citystringobligatoirepeut être nullCity, when it can be read from the address.
countrystringobligatoirepeut être nullISO 3166-1 alpha-2, as in GET /me.
locationobjectobligatoirepeut être nullCoordinates; null when not set.
Champs contenus (2)
latnumberobligatoireLatitude.
lonnumberobligatoireLongitude.
Erreurs
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl "https://api.flavoso.com/v1/store" \
-H "Authorization: Bearer $ACCESS_TOKEN"{
"object": "store",
"id": "8a3e5c7d-2f14-4b9e-a6d1-0c4b7e9f2a35",
"name": "Trattoria Bella Rosa",
"slug": "bella-rosa",
"timezone": "Europe/Berlin",
"currency": "EUR",
"status": "open",
"paused_until": null,
"pause_note": null,
"next_opening_at": null,
"preorders": true,
"order_types": {
"pickup": true,
"delivery": true,
"dine_in": true
},
"order_statuses": [
"pending",
"confirmed",
"preparing",
"ready",
"completed",
"cancelled"
],
"lead_times": {
"pickup_minutes": 20,
"delivery_minutes": 45
},
"min_order": 1500,
"always_open": false,
"opening_hours": [
{
"weekday": 1,
"open": "11:30",
"close": "14:30"
},
{
"weekday": 1,
"open": "17:30",
"close": "22:00"
},
{
"weekday": 5,
"open": "12:00",
"close": "23:00"
}
],
"delivery_hours": [],
"closures": [
{
"object": "closure",
"date": "2026-12-24",
"closed": false,
"hours": [
{
"open": "11:00",
"close": "14:00"
}
],
"note": "Christmas Eve: lunch only"
}
],
"contact": {
"phone": "+49 30 1234567",
"email": "hello@example.com",
"website": "https://example.com"
},
"address": {
"line": "Kastanienallee 12",
"postal_code": "10435",
"city": "Berlin",
"country": "DE"
},
"location": {
"lat": 52.5386,
"lon": 13.4093
}
}Change lead times, pre-orders and order types
patch/store
- Droit:
store:write- Offre:
- toutes les offres
Changes only the fields you send; everything else stays as the restaurant set it. The same rules as the dashboard: lead times 0 to 240 minutes for pickup and 0 to 360 for delivery, and an order type can only be switched on when the restaurant's plan includes it (plan_required, ordering at the table needs Pro).
Opening hours are changed with PUT /store/hours, special days with /store/closures, a pause with /store/pause. A change produces store.updated.
Corpsapplication/json
lead_timesobjectKitchen lead times.
Champs contenus (2)
pickup_minutesintegerMinutes until pickup.
0 to 240
delivery_minutesintegerMinutes until delivery.
0 to 360
order_typesobjectSwitch order types on or off. Switching on needs a plan that includes the type.
Champs contenus (3)
pickupbooleanPickup.
deliverybooleanDelivery.
dine_inbooleanOrdering at the table (Pro and up).
preordersbooleanAllow orders for a later time.
Réponse200
The store after the change.
objectstringobligatoireAlways
store.Valeurs:
"store"idstring (uuid)obligatoireThe restaurant.
namestringobligatoireName.
slugstringobligatoireIts address:
<slug>.flavoso.com.timezonestringobligatoireIANA time zone of all local times.
currencystringobligatoireISO 4217.
statusstringobligatoireRight now: open, closed (outside hours or a closed special day), or paused.
Valeurs:
"open""closed""paused"paused_untilstring (date-time)obligatoirepeut être nullEnd of the running pause; null without one.
pause_notestringobligatoirepeut être nullReason of the running pause.
next_opening_atstring (date-time)obligatoirepeut être nullNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanobligatoireGuests may order for a later time, also while closed.
order_typesobjectobligatoireWhich order types guests can choose.
Champs contenus (3)
pickupbooleanobligatoirePickup.
deliverybooleanobligatoireDelivery.
dine_inbooleanobligatoireOrdering at the table via QR code (Pro and up).
order_statusesstring[]obligatoireStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectobligatoireHow long the kitchen needs; the earliest pickup or delivery time.
Champs contenus (2)
pickup_minutesintegerobligatoireMinutes until pickup, 0 to 240.
delivery_minutesintegerobligatoireMinutes until delivery, 0 to 360.
min_orderintegerobligatoireMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanobligatoireNo weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.
opening_hoursWeekWindow[]obligatoireThe weekly opening windows; a weekday without windows is closed.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]obligatoireWeekly delivery windows; empty means delivery follows opening_hours.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closuresClosure[]obligatoireUpcoming special days (today and later).
Champs contenus (5)
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanobligatoireClosed all day.
hoursTimeWindow[]obligatoireThe windows of that day when not closed (at most two).
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringobligatoirepeut être nullNote, e.g. the reason.
contactobjectobligatoirePublic contact details.
Champs contenus (3)
phonestringobligatoirepeut être nullPhone.
emailstringobligatoirepeut être nullE-mail.
websitestringobligatoirepeut être nullWebsite.
addressobjectobligatoirepeut être nullThe address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.
Champs contenus (4)
linestringobligatoirepeut être nullStreet and number (or the whole address when it cannot be split).
postal_codestringobligatoirepeut être nullPostal code, when it can be read from the address.
citystringobligatoirepeut être nullCity, when it can be read from the address.
countrystringobligatoirepeut être nullISO 3166-1 alpha-2, as in GET /me.
locationobjectobligatoirepeut être nullCoordinates; null when not set.
Champs contenus (2)
latnumberobligatoireLatitude.
lonnumberobligatoireLongitude.
Erreurs
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.409invalid_transition(the status of the object does not allow this),stage_not_used(the restaurant does not use this status),external_id_taken(your app already uses thisexternal_idfor another object of the same kind in this restaurant),slot_unavailable(the time or the table is taken),idempotency_in_progress(a request with this Idempotency-Key is still running) orconflict(the same data was changed elsewhere at the same moment, three times in a row; retry unchanged afterRetry-Afterseconds).413payload_too_large: the body is larger than the operation takes, counted in bytes: 64 KB, 2 MB forPUT /menu. Split the request.429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl -X PATCH "https://api.flavoso.com/v1/store" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"lead_times": {
"pickup_minutes": 25
},
"order_types": {
"delivery": false
}
}'{
"lead_times": {
"pickup_minutes": 25
},
"order_types": {
"delivery": false
}
}{
"object": "store",
"id": "8a3e5c7d-2f14-4b9e-a6d1-0c4b7e9f2a35",
"name": "Trattoria Bella Rosa",
"slug": "bella-rosa",
"timezone": "Europe/Berlin",
"currency": "EUR",
"status": "open",
"paused_until": null,
"pause_note": null,
"next_opening_at": null,
"preorders": true,
"order_types": {
"pickup": true,
"delivery": true,
"dine_in": true
},
"order_statuses": [
"pending",
"confirmed",
"preparing",
"ready",
"completed",
"cancelled"
],
"lead_times": {
"pickup_minutes": 20,
"delivery_minutes": 45
},
"min_order": 1500,
"always_open": false,
"opening_hours": [
{
"weekday": 1,
"open": "11:30",
"close": "14:30"
},
{
"weekday": 1,
"open": "17:30",
"close": "22:00"
},
{
"weekday": 5,
"open": "12:00",
"close": "23:00"
}
],
"delivery_hours": [],
"closures": [
{
"object": "closure",
"date": "2026-12-24",
"closed": false,
"hours": [
{
"open": "11:00",
"close": "14:00"
}
],
"note": "Christmas Eve: lunch only"
}
],
"contact": {
"phone": "+49 30 1234567",
"email": "hello@example.com",
"website": "https://example.com"
},
"address": {
"line": "Kastanienallee 12",
"postal_code": "10435",
"city": "Berlin",
"country": "DE"
},
"location": {
"lat": 52.5386,
"lon": 13.4093
}
}Retrieve opening and delivery hours
get/store/hours
- Droit:
store:read- Offre:
- toutes les offres
The weekly schedule. Several windows on one weekday are a lunch break. A weekday without windows is closed. Special days are separate (/store/closures).
Réponse200
OK
objectstringobligatoireAlways
store_hours.Valeurs:
"store_hours"always_openbooleanobligatoireNo weekly schedule: online orders around the clock, no reservation times.
opening_hoursWeekWindow[]obligatoireOpening windows.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]obligatoireDelivery windows; empty means the opening hours apply.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
Erreurs
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl "https://api.flavoso.com/v1/store/hours" \
-H "Authorization: Bearer $ACCESS_TOKEN"{
"object": "store_hours",
"always_open": false,
"opening_hours": [
{
"weekday": 1,
"open": "11:30",
"close": "14:30"
},
{
"weekday": 1,
"open": "17:30",
"close": "22:00"
},
{
"weekday": 5,
"open": "12:00",
"close": "23:00"
}
],
"delivery_hours": []
}Replace opening and/or delivery hours
put/store/hours
- Droit:
store:write- Offre:
- toutes les offres
Each list you send replaces that whole schedule; a list you leave out stays as it is. At most two windows per weekday, times HH:MM; a window may run past midnight (18:00–02:00). Weekdays missing from a list are closed.
An empty opening_hours list means the restaurant has no weekly schedule: online orders are taken around the clock and no reservation times are offered. An empty delivery_hours list means delivery follows the opening hours. A change produces store.updated.
Corpsapplication/json
opening_hoursWeekWindow[]At most two windows per weekday. Empty: no weekly schedule.
max 14 items
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]At most two windows per weekday. Empty: delivery follows the opening hours.
max 14 items
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
Réponse200
OK
objectstringobligatoireAlways
store_hours.Valeurs:
"store_hours"always_openbooleanobligatoireNo weekly schedule: online orders around the clock, no reservation times.
opening_hoursWeekWindow[]obligatoireOpening windows.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]obligatoireDelivery windows; empty means the opening hours apply.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
Erreurs
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.409invalid_transition(the status of the object does not allow this),stage_not_used(the restaurant does not use this status),external_id_taken(your app already uses thisexternal_idfor another object of the same kind in this restaurant),slot_unavailable(the time or the table is taken),idempotency_in_progress(a request with this Idempotency-Key is still running) orconflict(the same data was changed elsewhere at the same moment, three times in a row; retry unchanged afterRetry-Afterseconds).413payload_too_large: the body is larger than the operation takes, counted in bytes: 64 KB, 2 MB forPUT /menu. Split the request.429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl -X PUT "https://api.flavoso.com/v1/store/hours" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"opening_hours": [
{
"weekday": 0,
"open": "11:30",
"close": "14:30"
},
{
"weekday": 0,
"open": "17:30",
"close": "22:00"
},
{
"weekday": 4,
"open": "11:30",
"close": "23:00"
},
{
"weekday": 5,
"open": "12:00",
"close": "23:00"
}
],
"delivery_hours": []
}'{
"opening_hours": [
{
"weekday": 0,
"open": "11:30",
"close": "14:30"
},
{
"weekday": 0,
"open": "17:30",
"close": "22:00"
},
{
"weekday": 4,
"open": "11:30",
"close": "23:00"
},
{
"weekday": 5,
"open": "12:00",
"close": "23:00"
}
],
"delivery_hours": []
}{
"object": "store_hours",
"always_open": false,
"opening_hours": [
{
"weekday": 0,
"open": "11:30",
"close": "14:30"
},
{
"weekday": 0,
"open": "17:30",
"close": "22:00"
},
{
"weekday": 4,
"open": "11:30",
"close": "23:00"
},
{
"weekday": 5,
"open": "12:00",
"close": "23:00"
}
],
"delivery_hours": []
}List special days
get/store/closures
- Droit:
store:read- Offre:
- toutes les offres
Upcoming special days (today and later, in the restaurant's time zone): closed days and days with their own hours. At most 60.
Réponse200
OK
objectstringobligatoireAlways
list.Valeurs:
"list"dataClosure[]obligatoireThe items of this page.
Champs contenus (5)
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanobligatoireClosed all day.
hoursTimeWindow[]obligatoireThe windows of that day when not closed (at most two).
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringobligatoirepeut être nullNote, e.g. the reason.
has_morebooleanobligatoireWhether another page follows.
next_cursorstringobligatoirepeut être nullPass as
cursor(with the same filters) to get the next page; null on the last page.
Erreurs
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl "https://api.flavoso.com/v1/store/closures" \
-H "Authorization: Bearer $ACCESS_TOKEN"{
"object": "list",
"data": [
{
"object": "closure",
"date": "2026-12-24",
"closed": false,
"hours": [
{
"open": "11:00",
"close": "14:00"
}
],
"note": "Christmas Eve: lunch only"
}
],
"has_more": false,
"next_cursor": null
}Create or replace a special day
post/store/closures
- Droit:
store:write- Offre:
- toutes les offres
Sets what applies on one date instead of the weekly schedule: closed: true, or hours with that day's windows. A new special day answers 201; one on the same date is replaced and answers 200. Today or later only; at most 60 special days (limit_exceeded). A running pause is not affected. Produces store.updated.
Paramètres
| Nom | Emplacement | Description |
|---|---|---|
Idempotency-Keystring | header | Any unique string up to 255 printable characters. Retrying a POST with the same key returns the first response (header Idempotent-Replayed: true) instead of acting twice; the same key with a different body is 422 idempotency_key_reused. Kept for 24 hours. Answers that ask for a retry (5xx, 409 conflict) are not kept. While the first request runs, a retry gets 409 idempotency_in_progress; a first request that never finished frees the key after 2 minutes.max 255 chars |
Corpsapplication/json
datestring (date)obligatoireToday or later. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleantrue: closed all day.
hoursTimeWindow[]The windows of that day (one or two).
max 2 items
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringNote, e.g. the reason.
max 140 chars
Réponse200
A special day on this date was replaced.
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanobligatoireClosed all day.
hoursTimeWindow[]obligatoireThe windows of that day when not closed (at most two).
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringobligatoirepeut être nullNote, e.g. the reason.
Erreurs
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.409invalid_transition(the status of the object does not allow this),stage_not_used(the restaurant does not use this status),external_id_taken(your app already uses thisexternal_idfor another object of the same kind in this restaurant),slot_unavailable(the time or the table is taken),idempotency_in_progress(a request with this Idempotency-Key is still running) orconflict(the same data was changed elsewhere at the same moment, three times in a row; retry unchanged afterRetry-Afterseconds).413payload_too_large: the body is larger than the operation takes, counted in bytes: 64 KB, 2 MB forPUT /menu. Split the request.422idempotency_key_reused(the key was used with a different request) orlimit_exceeded(too many entries in one request, such as products inPUT /menu, or a limit of the restaurant is reached, such as 60 special days).429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl -X POST "https://api.flavoso.com/v1/store/closures" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-12-24",
"hours": [
{
"open": "11:00",
"close": "14:00"
}
],
"note": "Christmas Eve: lunch only"
}'{
"date": "2026-12-24",
"hours": [
{
"open": "11:00",
"close": "14:00"
}
],
"note": "Christmas Eve: lunch only"
}{
"object": "closure",
"date": "2026-12-24",
"closed": false,
"hours": [
{
"open": "11:00",
"close": "14:00"
}
],
"note": "Christmas Eve: lunch only"
}Delete a special day
delete/store/closures/{date}
- Droit:
store:write- Offre:
- toutes les offres
Removes the special day on this date; the weekly schedule applies again. Produces store.updated.
Paramètres
| Nom | Emplacement | Description |
|---|---|---|
datestring (date)obligatoire | path | The date of the special day (YYYY-MM-DD). |
Réponse200
OK
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe date that was removed. A date YYYY-MM-DD in the restaurant's time zone.
deletedbooleanobligatoireAlways true.
Valeurs:
true
Erreurs
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.404not_found: no such object in this restaurant (objects of other restaurants are never found).409invalid_transition(the status of the object does not allow this),stage_not_used(the restaurant does not use this status),external_id_taken(your app already uses thisexternal_idfor another object of the same kind in this restaurant),slot_unavailable(the time or the table is taken),idempotency_in_progress(a request with this Idempotency-Key is still running) orconflict(the same data was changed elsewhere at the same moment, three times in a row; retry unchanged afterRetry-Afterseconds).429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl -X DELETE "https://api.flavoso.com/v1/store/closures/2026-12-24" \
-H "Authorization: Bearer $ACCESS_TOKEN"{
"object": "closure",
"date": "2026-12-24",
"deleted": true
}Pause online ordering
post/store/pause
- Droit:
store:write- Offre:
- toutes les offres
Stops new online orders until the given time, exactly like the pause button in the dashboard. A pause always ends by itself; at most 12 hours. Without a body: 30 minutes. Send minutes or until, not both. Produces store.paused.
Paramètres
| Nom | Emplacement | Description |
|---|---|---|
Idempotency-Keystring | header | Any unique string up to 255 printable characters. Retrying a POST with the same key returns the first response (header Idempotent-Replayed: true) instead of acting twice; the same key with a different body is 422 idempotency_key_reused. Kept for 24 hours. Answers that ask for a retry (5xx, 409 conflict) are not kept. While the first request runs, a retry gets 409 idempotency_in_progress; a first request that never finished frees the key after 2 minutes.max 255 chars |
Corpsapplication/json
minutesintegerPause for this many minutes from now. Default 30.
1 to 720
untilstring (date-time)Pause until this instant (ISO 8601 with time zone, at most 12 hours ahead). Without a zone: 400.
notestringReason, shown to guests on the ordering page. Longer than 140 characters answers 400 with
param.max 140 chars
Réponse200
OK
objectstringobligatoireAlways
store.Valeurs:
"store"idstring (uuid)obligatoireThe restaurant.
namestringobligatoireName.
slugstringobligatoireIts address:
<slug>.flavoso.com.timezonestringobligatoireIANA time zone of all local times.
currencystringobligatoireISO 4217.
statusstringobligatoireRight now: open, closed (outside hours or a closed special day), or paused.
Valeurs:
"open""closed""paused"paused_untilstring (date-time)obligatoirepeut être nullEnd of the running pause; null without one.
pause_notestringobligatoirepeut être nullReason of the running pause.
next_opening_atstring (date-time)obligatoirepeut être nullNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanobligatoireGuests may order for a later time, also while closed.
order_typesobjectobligatoireWhich order types guests can choose.
Champs contenus (3)
pickupbooleanobligatoirePickup.
deliverybooleanobligatoireDelivery.
dine_inbooleanobligatoireOrdering at the table via QR code (Pro and up).
order_statusesstring[]obligatoireStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectobligatoireHow long the kitchen needs; the earliest pickup or delivery time.
Champs contenus (2)
pickup_minutesintegerobligatoireMinutes until pickup, 0 to 240.
delivery_minutesintegerobligatoireMinutes until delivery, 0 to 360.
min_orderintegerobligatoireMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanobligatoireNo weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.
opening_hoursWeekWindow[]obligatoireThe weekly opening windows; a weekday without windows is closed.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]obligatoireWeekly delivery windows; empty means delivery follows opening_hours.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closuresClosure[]obligatoireUpcoming special days (today and later).
Champs contenus (5)
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanobligatoireClosed all day.
hoursTimeWindow[]obligatoireThe windows of that day when not closed (at most two).
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringobligatoirepeut être nullNote, e.g. the reason.
contactobjectobligatoirePublic contact details.
Champs contenus (3)
phonestringobligatoirepeut être nullPhone.
emailstringobligatoirepeut être nullE-mail.
websitestringobligatoirepeut être nullWebsite.
addressobjectobligatoirepeut être nullThe address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.
Champs contenus (4)
linestringobligatoirepeut être nullStreet and number (or the whole address when it cannot be split).
postal_codestringobligatoirepeut être nullPostal code, when it can be read from the address.
citystringobligatoirepeut être nullCity, when it can be read from the address.
countrystringobligatoirepeut être nullISO 3166-1 alpha-2, as in GET /me.
locationobjectobligatoirepeut être nullCoordinates; null when not set.
Champs contenus (2)
latnumberobligatoireLatitude.
lonnumberobligatoireLongitude.
Erreurs
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.409invalid_transition(the status of the object does not allow this),stage_not_used(the restaurant does not use this status),external_id_taken(your app already uses thisexternal_idfor another object of the same kind in this restaurant),slot_unavailable(the time or the table is taken),idempotency_in_progress(a request with this Idempotency-Key is still running) orconflict(the same data was changed elsewhere at the same moment, three times in a row; retry unchanged afterRetry-Afterseconds).413payload_too_large: the body is larger than the operation takes, counted in bytes: 64 KB, 2 MB forPUT /menu. Split the request.429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl -X POST "https://api.flavoso.com/v1/store/pause" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"minutes": 30,
"note": "Kitchen at capacity"
}'{
"minutes": 30,
"note": "Kitchen at capacity"
}{
"object": "store",
"id": "8a3e5c7d-2f14-4b9e-a6d1-0c4b7e9f2a35",
"name": "Trattoria Bella Rosa",
"slug": "bella-rosa",
"timezone": "Europe/Berlin",
"currency": "EUR",
"status": "paused",
"paused_until": "2026-10-09T18:15:00.000Z",
"pause_note": "Kitchen at capacity",
"next_opening_at": null,
"preorders": true,
"order_types": {
"pickup": true,
"delivery": true,
"dine_in": true
},
"order_statuses": [
"pending",
"confirmed",
"preparing",
"ready",
"completed",
"cancelled"
],
"lead_times": {
"pickup_minutes": 20,
"delivery_minutes": 45
},
"min_order": 1500,
"always_open": false,
"opening_hours": [
{
"weekday": 1,
"open": "11:30",
"close": "14:30"
},
{
"weekday": 1,
"open": "17:30",
"close": "22:00"
},
{
"weekday": 5,
"open": "12:00",
"close": "23:00"
}
],
"delivery_hours": [],
"closures": [
{
"object": "closure",
"date": "2026-12-24",
"closed": false,
"hours": [
{
"open": "11:00",
"close": "14:00"
}
],
"note": "Christmas Eve: lunch only"
}
],
"contact": {
"phone": "+49 30 1234567",
"email": "hello@example.com",
"website": "https://example.com"
},
"address": {
"line": "Kastanienallee 12",
"postal_code": "10435",
"city": "Berlin",
"country": "DE"
},
"location": {
"lat": 52.5386,
"lon": 13.4093
}
}Resume online ordering
post/store/resume
- Droit:
store:write- Offre:
- toutes les offres
Lifts a running pause early. Without a running pause there is nothing to do; the store is returned unchanged. Produces store.resumed.
Paramètres
| Nom | Emplacement | Description |
|---|---|---|
Idempotency-Keystring | header | Any unique string up to 255 printable characters. Retrying a POST with the same key returns the first response (header Idempotent-Replayed: true) instead of acting twice; the same key with a different body is 422 idempotency_key_reused. Kept for 24 hours. Answers that ask for a retry (5xx, 409 conflict) are not kept. While the first request runs, a retry gets 409 idempotency_in_progress; a first request that never finished frees the key after 2 minutes.max 255 chars |
Réponse200
OK
objectstringobligatoireAlways
store.Valeurs:
"store"idstring (uuid)obligatoireThe restaurant.
namestringobligatoireName.
slugstringobligatoireIts address:
<slug>.flavoso.com.timezonestringobligatoireIANA time zone of all local times.
currencystringobligatoireISO 4217.
statusstringobligatoireRight now: open, closed (outside hours or a closed special day), or paused.
Valeurs:
"open""closed""paused"paused_untilstring (date-time)obligatoirepeut être nullEnd of the running pause; null without one.
pause_notestringobligatoirepeut être nullReason of the running pause.
next_opening_atstring (date-time)obligatoirepeut être nullNext opening while closed (looks two weeks ahead); null while open.
preordersbooleanobligatoireGuests may order for a later time, also while closed.
order_typesobjectobligatoireWhich order types guests can choose.
Champs contenus (3)
pickupbooleanobligatoirePickup.
deliverybooleanobligatoireDelivery.
dine_inbooleanobligatoireOrdering at the table via QR code (Pro and up).
order_statusesstring[]obligatoireStatuses this restaurant uses, in order, plus completed and cancelled.
lead_timesobjectobligatoireHow long the kitchen needs; the earliest pickup or delivery time.
Champs contenus (2)
pickup_minutesintegerobligatoireMinutes until pickup, 0 to 240.
delivery_minutesintegerobligatoireMinutes until delivery, 0 to 360.
min_orderintegerobligatoireMinimum order value for delivery (0 = none). Integer amount in the smallest currency unit (cents).
always_openbooleanobligatoireNo weekly schedule is set: online orders are taken around the clock (special days and pauses still apply) and no reservation times are offered.
opening_hoursWeekWindow[]obligatoireThe weekly opening windows; a weekday without windows is closed.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
delivery_hoursWeekWindow[]obligatoireWeekly delivery windows; empty means delivery follows opening_hours.
Champs contenus (3)
weekdayintegerobligatoire0 = Monday … 6 = Sunday.
0 to 6
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing. Earlier than open: the window runs past midnight. Equal to open: until midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closuresClosure[]obligatoireUpcoming special days (today and later).
Champs contenus (5)
objectstringobligatoireAlways
closure.Valeurs:
"closure"datestring (date)obligatoireThe day. A date YYYY-MM-DD in the restaurant's time zone.
closedbooleanobligatoireClosed all day.
hoursTimeWindow[]obligatoireThe windows of that day when not closed (at most two).
Champs contenus (2)
openstringobligatoireOpening. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
closestringobligatoireClosing; earlier than open runs past midnight. 24-hour local time "HH:MM" in the restaurant's time zone.
pattern ^([01][0-9]|2[0-3]):[0-5][0-9]$
notestringobligatoirepeut être nullNote, e.g. the reason.
contactobjectobligatoirePublic contact details.
Champs contenus (3)
phonestringobligatoirepeut être nullPhone.
emailstringobligatoirepeut être nullE-mail.
websitestringobligatoirepeut être nullWebsite.
addressobjectobligatoirepeut être nullThe address as far as it is known. Restaurants type it freely; postal code and city are only split out when a line starts with a postal code.
Champs contenus (4)
linestringobligatoirepeut être nullStreet and number (or the whole address when it cannot be split).
postal_codestringobligatoirepeut être nullPostal code, when it can be read from the address.
citystringobligatoirepeut être nullCity, when it can be read from the address.
countrystringobligatoirepeut être nullISO 3166-1 alpha-2, as in GET /me.
locationobjectobligatoirepeut être nullCoordinates; null when not set.
Champs contenus (2)
latnumberobligatoireLatitude.
lonnumberobligatoireLongitude.
Erreurs
400invalid_request: a parameter or the body is wrong, or it contains a query parameter or field the operation does not know.paramnames the field.401unauthorized: missing, malformed, expired or revoked access token, or the app was disconnected or suspended.403insufficient_scope,plan_required(withparamwhen an order type is not in the plan) oraccount_inactive.409invalid_transition(the status of the object does not allow this),stage_not_used(the restaurant does not use this status),external_id_taken(your app already uses thisexternal_idfor another object of the same kind in this restaurant),slot_unavailable(the time or the table is taken),idempotency_in_progress(a request with this Idempotency-Key is still running) orconflict(the same data was changed elsewhere at the same moment, three times in a row; retry unchanged afterRetry-Afterseconds).429rate_limited: more than 120 requests per minute on this connection. WaitRetry-Afterseconds.500server_error. Safe to retry with the same Idempotency-Key.
curl -X POST "https://api.flavoso.com/v1/store/resume" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"{
"object": "store",
"id": "8a3e5c7d-2f14-4b9e-a6d1-0c4b7e9f2a35",
"name": "Trattoria Bella Rosa",
"slug": "bella-rosa",
"timezone": "Europe/Berlin",
"currency": "EUR",
"status": "open",
"paused_until": null,
"pause_note": null,
"next_opening_at": null,
"preorders": true,
"order_types": {
"pickup": true,
"delivery": true,
"dine_in": true
},
"order_statuses": [
"pending",
"confirmed",
"preparing",
"ready",
"completed",
"cancelled"
],
"lead_times": {
"pickup_minutes": 20,
"delivery_minutes": 45
},
"min_order": 1500,
"always_open": false,
"opening_hours": [
{
"weekday": 1,
"open": "11:30",
"close": "14:30"
},
{
"weekday": 1,
"open": "17:30",
"close": "22:00"
},
{
"weekday": 5,
"open": "12:00",
"close": "23:00"
}
],
"delivery_hours": [],
"closures": [
{
"object": "closure",
"date": "2026-12-24",
"closed": false,
"hours": [
{
"open": "11:00",
"close": "14:00"
}
],
"note": "Christmas Eve: lunch only"
}
],
"contact": {
"phone": "+49 30 1234567",
"email": "hello@example.com",
"website": "https://example.com"
},
"address": {
"line": "Kastanienallee 12",
"postal_code": "10435",
"city": "Berlin",
"country": "DE"
},
"location": {
"lat": 52.5386,
"lon": 13.4093
}
}Une question reste ouverte ? Écrivez à support@flavoso.com en indiquant l'identifiant de X-Request-Id. Il nous permet de retrouver votre requête dans le journal.