Flavoso APIVeröffentlichenÄnderungen
Änderungen
Was sich an der Schnittstelle geändert hat, mit Datum. Innerhalb von v1 kommen nur Ergänzungen, die nichts brechen.
So ändert sich die Schnittstelle
Innerhalb von v1 kommen nur Ergänzungen, die nichts brechen: neue Felder, neue Routen, neue Fehlercodes, neue Ereignisse. Was bricht, kommt nur in einer neuen Version, und die alte läuft danach mindestens sechs Monate weiter. Flavoso-Api-Version und api_version nennen das Versionsdatum.
8. Oktober 2026: Feinschliff vor den ersten Kassen
Bevor die ersten Kassen live gehen, haben wir den Vertrag an einigen Stellen nachgeschärft. Manches ist strenger als vorher; es kommt trotzdem innerhalb von v1, weil noch keine Anbindung live war. Hast du gegen einen früheren Stand gebaut, prüf diese Punkte.
- Versionsdatum:
Flavoso-Api-Versionundapi_versionneuer Ereignisse nennen jetzt2026-10-08. Schon zugestellte oder abgefragte Ereignisse behalten2026-10-04. - Größe des Rumpfs: ein Rumpf, der größer ist, als die Operation annimmt (64 KB, bei
PUT /menu2 MB, gezählt in Bytes), bekommt 413payload_too_largestatt 400invalid_request. - Unbekanntes ist ein Fehler: ein unbekannter Abfrageparameter oder ein unbekanntes Feld im Rumpf ergibt bei jeder Operation 400
invalid_requestmitparam. - Zeitpunkte mit Zeitzone:
updated_since,created_since,starts_fromund die übrigen Zeitpunkte einer Anfrage, auchuntilbeiPOST /store/pause, brauchenZoder einen Versatz, sonst 400. Ein unkodiertes+in der Abfrage wird vor dem Versatz angenommen. - Anlegen antwortet 201:
POST /menu/categories,/menu/products,/menu/option-groups,/menu/option-groups/{id}/optionsundPOST /store/closuresfür einen neuen Tag (200, wenn er einen ersetzt). - Annehmen:
POST /orders/{id}/acceptschaltet eine Bestellung auspendingauf den nächsten Stand, den der Betrieb benutzt (nicht immerconfirmed); steht sie schon dahinter, kommt sie unverändert mit 200 zurück, eine fertige oder stornierte antwortet mit 409invalid_transition. - Optionen in Bestellungen:
items[].options[]tragenid,group_idundgroup_name(nullbei älteren Bestellungen). - Speisekarte: neu ist
GET /menu/options; die Antwort vonPUT /menunenntwarningsvorids; ein Test-Betrieb behält höchstens 50 Bilder ausimage_url(darüber warntPUT /menumitimages_capped, ein einzelnes Gericht bekommt 400), Zurücksetzen löscht sie;menu.syncednennt dieconnection_id, die abgeglichen hat. - Gleichzeitiges Schreiben: ein Schreibzugriff auf Speisekarte oder Laden (
/store), der dreimal hintereinander mit einer anderen Änderung zusammenstößt, antwortet mit 409conflictundRetry-Afterstatt mit 500. Schick ihn danach unverändert noch einmal. - Ereignisse:
GET /eventsmit einemafter, das nicht mehr aufbewahrt ist, macht beim ältesten aufbewahrten Ereignis weiter und sagtgap: true, statt mit 400 zu antworten;after=latestfängt jetzt an;next_afterist immer gesetzt.data.object.updated_atin Ereignissen zu Bestellungen und Reservierungen ist der Zeitpunkt der gemeldeten Änderung.store.pausedundstore.resumedtragen den Laden alsobject;store.updatedmeldet auchorder_statuses;reservation.updatedmeldet auch eine geändertenote. - Ablehnen statt kürzen: eine
noteder Pause über 140 Zeichen und einreasonüber 200 Zeichen ergeben 400 mitparam, statt gekürzt zu werden. - Rechte:
GET /tablesundGET /areasgehen auch mitreservations:read. - Berichtigt:
order.paidverspricht keine vor Ort vermerkten Zahlungen mehr (Flavoso vermerkt keine); ein abgelaufenes oder widerrufenes Token zählt nicht mehr zur Grenze je IP-Adresse und bekommt immer 401; einPATCH /reservations/{id}, das mit 409 antwortet, hat nichts geändert; einIdempotency-Key, dessen erste Anfrage nie fertig wurde, ist nach 2 Minuten wieder frei;external_idfolgt überall einer Regel (kein Leerzeichen am Anfang oder Ende, keine Steuerzeichen).
6. Oktober 2026: die Entwicklerplattform
Die große Erweiterung: Kassen und andere Systeme pflegen jetzt die Karte, übernehmen Bestellungen, führen Zeiten und Reservierungen und gleichen Umsätze ab.
- Speisekarte:
PUT /menugleicht die ganze Karte ab (merge,replace,dry_run);POST /menu/availabilitymeldet bis zu 500 Einträge auf einmal; Kategorien, Gerichte, Optionsgruppen und Optionen lassen sich einzeln anlegen, ändern und löschen;image_url; jedes Objekt trägtexternal_idundupdated_at. - Bestellungen:
POST /orders/{id}/acknowledgeübernimmt eine Bestellung mit eigener Kennung; neue Filterpaid,acknowledged,created_since,created_until,external_id; neue Feldersource,external_id,acknowledged_atundtaxmit Steuerzeilen. - Betrieb:
GET /storenennt Kontakt, Anschrift, Lage, Mindestbestellwert, Vorlaufzeiten, Lieferzeiten und kommende Sondertage; neu sindPATCH /store,GETundPUT /store/hoursund die Sondertage unter/store/closures. - Tische und Bereiche:
GET /tables,GET /areas. - Reservierungen:
POST /reservations,PATCH /reservations/{id},GET /reservations/availability; neue Filterstarts_fromundstarts_until. - Berichte:
GET /reports/salesundGET /reports/products, mit dem neuen Rechtreports:read. - Ereignisse abrufen:
GET /eventsundGET /events/{id}. Ereignisse entstehen jetzt für jede aktive Verbindung, auch ohne Webhook. - Neue Ereignisarten:
order.paid,store.updated,app.scopes_changed,menu.category.*,menu.product.createdund.deleted,menu.option_group.*,menu.option.createdund.deleted,menu.synced(ein Ereignis je Abgleich).menu.product.updatedundmenu.option.updatedkommen bei jeder Feldänderung, mitchangedundprevious. - Test und echt:
livemodeinGET /meund in jedem Ereignis.GET /menennt dazutenant.country,planundrate_limit. - Fehler:
paramnennt das fehlerhafte Feld; neue Codesexternal_id_taken,slot_unavailable,limit_exceeded. - OAuth: ein schon getauschtes Refresh-Token wird 60 Sekunden lang noch angenommen.
- Webhooks: jede Zustellung mit jedem Versuch in der Konsole, „Erneut senden“, Test-Ereignisse jeder Art;
Flavoso-Delivery-Attemptzählt auch Sendungen von Hand. - Werkzeuge: Anfrage-Protokoll, API-Explorer, Test-Token, App-Verzeichnis,
postman.json,operationIdan jeder Operation der Spezifikation, und diese Dokumentation.
5. Oktober 2026: die neue Adresse
Die Schnittstelle hat eine eigene Adresse: https://api.flavoso.com. Tokens und Antworten bleiben dieselben, und die alten Adressen gelten weiter. Handeln musst du nur, wenn deine App iss mit einem festen Wert vergleicht.
- Routen: jede Route liegt unter
https://api.flavoso.com/v1, auchopenapi.jsonundpostman.json. - OAuth: Token unter
https://api.flavoso.com/oauth/token, Widerruf unterhttps://api.flavoso.com/oauth/revoke, Metadaten unterhttps://api.flavoso.com/.well-known/oauth-authorization-server. Der Zustimmungsbildschirm bleibt unterhttps://app.flavoso.com/oauth/authorize, denn dort meldet sich der Inhaber an. - Aussteller:
issuerin den Metadaten undissbei der Rückkehr sind jetzthttps://api.flavoso.comstatthttps://app.flavoso.com. Vergleicht deine Appissmit einem festen Wert, stell ihn um; besser liest sie ihn aus den Metadaten. - Alte Adressen:
https://app.flavoso.com/api/public/v1/…undhttps://app.flavoso.com/api/oauth/…antworten weiter; die alte Adresse der Metadaten leitet auf die neue weiter.
4. Oktober 2026: die erste Fassung
Die erste Fassung von v1, mit Anmeldung per OAuth 2.0 und PKCE: Bestellungen lesen, annehmen, ablehnen, stornieren und weiterschalten; die Speisekarte lesen, Ausverkauft und Preise melden; den Laden pausieren; Reservierungen lesen und ihren Stand setzen; signierte Webhooks.
Etwas unklar geblieben? Schreib an support@flavoso.com und nenne die Kennung aus X-Request-Id. Damit finden wir deine Anfrage im Protokoll.