API FlavosoPublicationJournal des modifications
Journal des modifications
Ce qui a changé dans l'API, avec les dates. Au sein de v1, seuls des ajouts rétrocompatibles sont publiés.
Comment l'API évolue
Au sein de v1, seuls des ajouts rétrocompatibles sont publiés : nouveaux champs, nouvelles routes, nouveaux codes d'erreur, nouveaux événements. Tout changement incompatible n'arrive qu'avec une nouvelle version, et l'ancienne continue de fonctionner au moins six mois. Flavoso-Api-Version et api_version indiquent la date de version.
8 octobre 2026 : finitions avant les premières caisses
Avant la mise en service des premières caisses, nous avons resserré le contrat à quelques endroits. Certains points sont plus stricts qu'avant ; cela reste malgré tout dans v1, car aucune intégration n'était encore en service. Si vous avez développé sur une version antérieure, vérifiez les points suivants.
- Date de version :
Flavoso-Api-Versionetapi_versiondes nouveaux événements indiquent désormais2026-10-08. Les événements déjà livrés ou récupérés gardent2026-10-04. - Taille du corps : un corps plus grand que ce que l'opération accepte (64 Ko, 2 Mo pour
PUT /menu, comptés en octets) reçoit 413payload_too_largeau lieu de 400invalid_request. - Tout élément inconnu est une erreur : un paramètre de requête ou un champ de corps inconnu renvoie 400
invalid_requestavecparam, sur toutes les opérations. - Horodatages avec fuseau :
updated_since,created_since,starts_fromet les autres horodatages d'une requête, ainsi queuntildePOST /store/pause, doivent porterZou un décalage, sinon la réponse est 400. Un+non encodé dans les paramètres de requête est accepté devant le décalage. - Les créations renvoient 201 :
POST /menu/categories,/menu/products,/menu/option-groups,/menu/option-groups/{id}/optionsetPOST /store/closurespour un nouveau jour (200 s'il en remplace un). - Accepter :
POST /orders/{id}/acceptfait passer une commandependingau statut suivant utilisé par l'établissement (pas toujoursconfirmed) ; une commande qui a déjà dépassépendingest renvoyée inchangée avec 200 ; pour une commande terminée ou annulée, la réponse est 409invalid_transition. - Options des commandes :
items[].options[]portentid,group_idetgroup_name(nullpour les commandes plus anciennes). - Carte : nouveau
GET /menu/options; la réponse dePUT /menuplacewarningsavantids; un établissement de test garde au plus 50 images issues deimage_url(au-delà,PUT /menuavertit avecimages_cappedet un plat envoyé seul reçoit 400), une réinitialisation les supprime ;menu.syncedindique leconnection_idà l'origine de la synchronisation. - Écritures simultanées : une écriture sur la carte ou l'établissement (
/store) qui entre en collision trois fois de suite avec une autre modification reçoit 409conflictavecRetry-Afterau lieu de 500. Renvoyez-la ensuite telle quelle. - Événements :
GET /eventsavec unafterqui n'est plus conservé reprend au plus ancien événement conservé et indiquegap: trueau lieu de répondre 400 ;after=latestpart de l'instant présent ;next_afterest toujours renseigné.data.object.updated_atdes événements de commandes et de réservations est l'heure du changement signalé.store.pausedetstore.resumedportent l'établissement dansobject;store.updatedsignale aussiorder_statuses;reservation.updatedsignale aussi unenotemodifiée. - Refuser plutôt que tronquer : une
notede pause de plus de 140 caractères et unreasonde plus de 200 renvoient 400 avecparamau lieu d'être tronqués. - Droits :
GET /tablesetGET /areasfonctionnent aussi avecreservations:read. - Corrections :
order.paidne promet plus de paiements enregistrés sur place (Flavoso n'en enregistre aucun) ; un jeton expiré ou révoqué ne compte plus dans la limite par adresse IP et reçoit toujours 401 ; unPATCH /reservations/{id}qui répond 409 n'a rien modifié ; uneIdempotency-Keydont la première requête n'a jamais abouti est de nouveau libre après 2 minutes ;external_idsuit partout la même règle (pas d'espace au début ni à la fin, pas de caractères de contrôle).
6 octobre 2026 : la plateforme développeurs
Une extension majeure : les caisses et d'autres systèmes tiennent désormais la carte à jour, prennent en charge les commandes, gèrent horaires et réservations et rapprochent le chiffre d'affaires.
- Carte :
PUT /menusynchronise toute la carte (merge,replace,dry_run) ;POST /menu/availabilitysignale jusqu'à 500 entrées à la fois ; catégories, plats, groupes d'options et options peuvent être créés, modifiés et supprimés un par un ;image_url; chaque objet porteexternal_idetupdated_at. - Commandes :
POST /orders/{id}/acknowledgeprend en charge une commande avec votre propre identifiant ; nouveaux filtrespaid,acknowledged,created_since,created_until,external_id; nouveaux champssource,external_id,acknowledged_atettaxavec les lignes de TVA. - Établissement :
GET /storeindique le contact, l'adresse, l'emplacement, le montant minimum de commande, les délais de préparation, les horaires de livraison et les prochains jours particuliers ; nouveautés :PATCH /store,GETetPUT /store/hourset les jours particuliers sous/store/closures. - Tables et zones :
GET /tables,GET /areas. - Réservations :
POST /reservations,PATCH /reservations/{id},GET /reservations/availability; nouveaux filtresstarts_frometstarts_until. - Rapports :
GET /reports/salesetGET /reports/products, avec le nouveau droitreports:read. - Récupérer les événements :
GET /eventsetGET /events/{id}. Les événements sont désormais créés pour chaque connexion active, même sans webhook. - Nouveaux types d'événements :
order.paid,store.updated,app.scopes_changed,menu.category.*,menu.product.createdet.deleted,menu.option_group.*,menu.option.createdet.deleted,menu.synced(un événement par synchronisation).menu.product.updatedetmenu.option.updatedarrivent à chaque modification de champ, avecchangedetprevious. - Test et réel :
livemodedansGET /meet dans chaque événement.GET /meindique aussitenant.country,planetrate_limit. - Erreurs :
paramindique le champ fautif ; nouveaux codesexternal_id_taken,slot_unavailable,limit_exceeded. - OAuth : un jeton de rafraîchissement déjà échangé est encore accepté pendant 60 secondes.
- Webhooks : chaque livraison et toutes ses tentatives dans la console, « Renvoyer », événements de test de tous types ;
Flavoso-Delivery-Attemptcompte aussi les envois manuels. - Outils : journal des requêtes, explorateur d'API, jetons de test, annuaire des applications,
postman.json, unoperationIdsur chaque opération de la spécification, et cette documentation.
5 octobre 2026 : la nouvelle adresse
L'API a désormais sa propre adresse : https://api.flavoso.com. Les jetons et les réponses restent les mêmes, et les anciennes adresses continuent de fonctionner. Vous n'avez à intervenir que si votre application compare iss à une valeur fixe.
- Routes : chaque route se trouve sous
https://api.flavoso.com/v1, y comprisopenapi.jsonetpostman.json. - OAuth : jeton sous
https://api.flavoso.com/oauth/token, révocation soushttps://api.flavoso.com/oauth/revoke, métadonnées soushttps://api.flavoso.com/.well-known/oauth-authorization-server. L'écran de consentement reste soushttps://app.flavoso.com/oauth/authorize, car c'est là que le propriétaire s'identifie. - Émetteur :
issuerdans les métadonnées etissau retour valent désormaishttps://api.flavoso.comau lieu dehttps://app.flavoso.com. Si votre application compareissà une valeur fixe, mettez-la à jour ; mieux encore, lisez-la dans les métadonnées. - Anciennes adresses :
https://app.flavoso.com/api/public/v1/…ethttps://app.flavoso.com/api/oauth/…répondent toujours ; l'ancienne adresse des métadonnées redirige vers la nouvelle.
4 octobre 2026 : la première version
La première version de v1, avec authentification via OAuth 2.0 et PKCE : lire, accepter, refuser, annuler et faire avancer les commandes ; lire la carte, signaler les plats épuisés et les prix ; mettre l'établissement en pause ; lire les réservations et définir leur statut ; webhooks signés.
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.