Flavoso APIPublishingChangelog
Changelog
What changed in the API, with dates. Within v1, only non-breaking additions arrive.
How the API changes
Within v1, only non-breaking additions arrive: new fields, new routes, new error codes, new events. Anything breaking comes only in a new version, and the old one keeps running for at least six months afterwards. Flavoso-Api-Version and api_version name the version date.
8 October 2026: final polish before the first POS systems
Before the first POS systems go live, we tightened the contract in a few places. Some of it is stricter than before; it still comes within v1 because no integration was live yet. If you built against an earlier version, check these points.
- Version date:
Flavoso-Api-Versionandapi_versionof new events now say2026-10-08. Events delivered or fetched before keep2026-10-04. - Body size: a body larger than the operation accepts (64 KB, 2 MB for
PUT /menu, counted in bytes) gets 413payload_too_largeinstead of 400invalid_request. - Unknown is an error: an unknown query parameter or body field gets 400
invalid_requestwithparam, on every operation. - Timestamps need a time zone:
updated_since,created_since,starts_fromand the other timestamps of a request, includinguntilofPOST /store/pause, must carryZor an offset, otherwise 400. An unencoded+in a query string is accepted before the offset. - Creating answers 201:
POST /menu/categories,/menu/products,/menu/option-groups,/menu/option-groups/{id}/options, andPOST /store/closuresfor a new day (200 when it replaces one). - Accepting:
POST /orders/{id}/acceptmoves apendingorder to the next status the restaurant uses (not alwaysconfirmed); an order already pastpendingcomes back unchanged with 200, a completed or cancelled one answers 409invalid_transition. - Order options:
items[].options[]carryid,group_idandgroup_name(nullfor older orders). - Menu: new
GET /menu/options; the response ofPUT /menuputswarningsbeforeids; a test restaurant keeps at most 50 images fromimage_url(beyond that,PUT /menuwarns withimages_cappedand a single product answers 400), and resetting deletes them;menu.syncednames theconnection_idthat synced. - Concurrent writes: a write to the menu or the store (
/store) that collides with another change three times in a row answers 409conflictwithRetry-Afterinstead of 500. Send it again unchanged afterwards. - Events:
GET /eventswith anafterthat is no longer kept continues with the oldest kept event and saysgap: trueinstead of answering 400;after=lateststarts at now;next_afteris always set.data.object.updated_atof order and reservation events is the time of the reported change.store.pausedandstore.resumedcarry the store asobject;store.updatedalso reportsorder_statuses;reservation.updatedalso reports a changednote. - Rejecting instead of truncating: a pause
noteover 140 characters and an orderreasonover 200 get 400 withparaminstead of being truncated. - Scopes:
GET /tablesandGET /areasalso work withreservations:read. - Fixes:
order.paidno longer promises payments recorded on site (Flavoso records none); an expired or revoked token no longer counts toward the limit per IP address and always gets 401; aPATCH /reservations/{id}that answers 409 has changed nothing; anIdempotency-Keywhose first request never finished is free again after 2 minutes;external_idfollows one rule everywhere (no space at the start or end, no control characters).
6 October 2026: the developer platform
The big expansion: POS and other systems can now maintain the menu, take over orders, manage hours and reservations and reconcile sales.
- Menu:
PUT /menusyncs the whole menu (merge,replace,dry_run);POST /menu/availabilityreports up to 500 entries at once; categories, products, option groups and options can be created, changed and deleted one by one;image_url; every object carriesexternal_idandupdated_at. - Orders:
POST /orders/{id}/acknowledgetakes over an order with your own id; new filterspaid,acknowledged,created_since,created_until,external_id; new fieldssource,external_id,acknowledged_atandtaxwith tax lines. - Store:
GET /storenames contact, address, location, minimum order, lead times, delivery hours and upcoming special days; new:PATCH /store,GETandPUT /store/hoursand the special days under/store/closures. - Tables and areas:
GET /tables,GET /areas. - Reservations:
POST /reservations,PATCH /reservations/{id},GET /reservations/availability; new filtersstarts_fromandstarts_until. - Reports:
GET /reports/salesandGET /reports/products, with the new scopereports:read. - Fetching events:
GET /eventsandGET /events/{id}. Events are now created for every active connection, even without a webhook. - New event types:
order.paid,store.updated,app.scopes_changed,menu.category.*,menu.product.createdand.deleted,menu.option_group.*,menu.option.createdand.deleted,menu.synced(one event per sync).menu.product.updatedandmenu.option.updatedarrive on every field change, withchangedandprevious. - Test and live:
livemodeinGET /meand in every event.GET /mealso namestenant.country,planandrate_limit. - Errors:
paramnames the faulty field; new codesexternal_id_taken,slot_unavailable,limit_exceeded. - OAuth: a refresh token that was already exchanged is still accepted for 60 seconds.
- Webhooks: every delivery with every attempt in the console, “Resend”, test events of every type;
Flavoso-Delivery-Attemptalso counts manual sends. - Tools: request log, API explorer, test tokens, app directory,
postman.json, anoperationIdon every operation of the specification, and this documentation.
5 October 2026: the new address
The API has its own address now: https://api.flavoso.com. Tokens and responses stay the same, and the old addresses keep working. You only need to act if your app compares iss with a fixed value.
- Routes: every route lives under
https://api.flavoso.com/v1, includingopenapi.jsonandpostman.json. - OAuth: token at
https://api.flavoso.com/oauth/token, revocation athttps://api.flavoso.com/oauth/revoke, metadata athttps://api.flavoso.com/.well-known/oauth-authorization-server. The consent screen stays athttps://app.flavoso.com/oauth/authorize, because that is where the owner signs in. - Issuer:
issuerin the metadata andisson the redirect are nowhttps://api.flavoso.cominstead ofhttps://app.flavoso.com. If your app comparesisswith a fixed value, update it; better still, read it from the metadata. - Old addresses:
https://app.flavoso.com/api/public/v1/…andhttps://app.flavoso.com/api/oauth/…keep answering; the old metadata address redirects to the new one.
4 October 2026: the first version
The first version of v1, with sign-in via OAuth 2.0 and PKCE: read, accept, reject, cancel and advance orders; read the menu, report sold-out items and prices; pause the store; read reservations and set their status; signed webhooks.
Still unclear? Write to support@flavoso.com and include the id from X-Request-Id. It lets us find your request in the log.