API FlavosoFondamentauxRequêtes
Requêtes
URL de base, en-têtes, JSON, montants en centimes, horodatages, identifiants, external_id, livemode et versions : les règles qui valent pour chaque requête.
URL de base
Chaque route se trouve sous https://api.flavoso.com/v1. HTTPS uniquement. La version figure dans le chemin (v1), la date de version dans l'en-tête Flavoso-Api-Version.
En-têtes
| En-tête | Sens | Signification |
|---|---|---|
Authorization | Requête | Bearer <access_token>. Obligatoire, sauf pour openapi.json et postman.json. |
Content-Type | Requête | application/json pour chaque requête avec un corps. |
Idempotency-Key | Requête | Pour un POST : rend une nouvelle tentative sans risque. Voir Idempotence. |
User-Agent | Requête | Recommandé : le nom et la version de votre application, par exemple ExamplePOS/4.2. Affiché dans le journal des requêtes. |
X-Request-Id | Réponse | L'identifiant de cette requête (req_…). Indiquez-le au support. |
Flavoso-Api-Version | Réponse | La date de version de la réponse. |
RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset | Réponse | La limite de requêtes. Voir Limites de requêtes. |
Retry-After | Réponse | En cas de 429 : nombre de secondes avant la prochaine tentative. |
Idempotent-Replayed | Réponse | true quand il s'agit d'une réponse enregistrée qui est rejouée. |
Cache-Control | Réponse | Toujours no-store. |
curl -i -X POST https://api.flavoso.com/v1/orders/ORDER_ID/accept \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Idempotency-Key: accept-ORDER_ID" \
-H "User-Agent: ExamplePOS/4.2 (support@example.com)"JSON
Les corps sont des objets JSON, les réponses aussi. Les noms de champs sont en anglais et en snake_case. Un corps peut peser jusqu'à 64 Ko, et jusqu'à 2 Mo pour la synchronisation de la carte (PUT /menu), comptés en octets ; au-delà, la réponse est 413 payload_too_large. Un champ inconnu de l'opération ou un paramètre de requête inconnu renvoie 400 invalid_request avec param : une faute de frappe ne passe donc pas inaperçue.
Chaque objet indique son type dans object, une liste est { "object": "list", "data": [ … ] }. Un champ sans valeur vaut null.
Montants et TVA
Les montants sont des entiers dans la plus petite unité de la devise, donc en centimes : 1290 correspond à 12,90 €. La devise figure à côté (currency, ISO 4217) ou sur l'établissement. Jamais de nombres décimaux.
Les taux de TVA sont exprimés en points de base : 700 correspond à 7 %, 1900 à 19 %. Les prix sur Flavoso sont des prix TTC ; une commande porte en plus sa TVA ventilée par taux (tax.lines). Si l'établissement n'a enregistré aucun taux pour une part, cette ligne porte rate_bps: null, et net et tax valent null ; le tax_rate_bps d'une ligne de commande peut aussi valoir null. Comptabilisez une telle part comme à clarifier, et non comme exonérée de TVA.
Dates et heures
- Les horodatages suivent la norme ISO 8601, en UTC avec
Z:2026-10-04T17:44:59.942Z. Envoyez-les avec un fuseau,Zou un décalage comme+02:00; sans fuseau, la réponse est 400. Dans les paramètres de requête, écrivez+sous la forme%2B(ou utilisezZ). Les réponses sont toujours en UTC. - Les jours calendaires au format
YYYY-MM-DDdans l'heure locale de l'établissement, par exemple pour les jours particuliers et les rapports. - Les heures au format
HH:MMdans l'heure locale de l'établissement, par exemple pour les horaires d'ouverture.weekday0 correspond au lundi, 6 au dimanche. - Le fuseau horaire de l'établissement (IANA, par exemple
Europe/Berlin) figure dansGET /meetGET /store.
Identifiants
Les identifiants sont des UUID et ne changent jamais. Exceptions : les événements (evt_…) et les requêtes (req_…). Une commande a en plus un court code que voit le client, par exemple 3271CD ; il n'est pas destiné au rapprochement des données.
Vos propres identifiants : external_id
Avec external_id, vous attachez votre propre identifiant à un objet : le numéro d'article de votre caisse à un plat, le numéro de ticket à une commande. Vous retrouvez ensuite l'objet grâce à lui, sans table de correspondance à tenir.
- 1 à 100 caractères, sans caractère de contrôle, sans espace au début ni à la fin. Comptés en caractères, pas en octets.
- Unique par application, établissement et type : deux plats de votre application dans le même établissement ne peuvent pas porter le même, un plat et une commande le peuvent.
- Seule votre application voit ses identifiants, dans les réponses des routes. Pour toute autre application, le champ vaut
null, et dans les événements il vaut toujoursnull: une même enveloppe part vers tous les destinataires. - Disponible sur les catégories, les plats, les groupes d'options, les options et les commandes.
- Défini via
PUT /menu, lors de la création et de la modification, et pour les commandes avecPOST /orders/{id}/acknowledge. - Filtrable avec
?external_id=sur les listes. - S'il est déjà pris, Flavoso répond 409
external_id_taken. - Si l'objet est supprimé, son identifiant disparaît avec lui.
# Find the dish your POS knows as ART-1001
curl "https://api.flavoso.com/v1/menu/products?external_id=ART-1001" \
-H "Authorization: Bearer $ACCESS_TOKEN"
# Find the order you booked as receipt R-2026-000123
curl "https://api.flavoso.com/v1/orders?external_id=R-2026-000123" \
-H "Authorization: Bearer $ACCESS_TOKEN"livemode
livemode figure dans GET /me et dans chaque événement : false pour un établissement de test, true pour tout établissement réel. Il n'existe pour cela ni adresse distincte ni clés distinctes.
Versions
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 (un champ disparaît ou change de signification) n'arrive qu'avec une nouvelle version, et l'ancienne continue de fonctionner au moins six mois.
Flavoso-Api-Version dans chaque réponse et api_version dans chaque événement indiquent la date de version, actuellement 2026-10-08. Les changements et leur date figurent dans le Journal des modifications.
Pas de CORS
L'API fonctionne de serveur à serveur. Les routes qui renvoient des données n'envoient pas d'en-tête Access-Control-Allow-Origin, donc aucun navigateur ne laisse une page tierce lire leur réponse. Un jeton placé dans un navigateur serait un jeton rendu public. Seuls openapi.json, postman.json et les métadonnées OAuth sont accessibles sans authentification.
Méthodes
| Méthode | Usage |
|---|---|
GET | Lire. Ne modifie jamais rien. |
POST | Créer (réponse 201) et actions (accept, pause). Répétable sans risque avec une Idempotency-Key. |
PUT | Remplacer un ensemble complet : la carte (/menu), les horaires d'ouverture (/store/hours). |
PATCH | Modifier des champs isolés ; les champs absents restent inchangés. |
DELETE | Supprimer ou déconnecter. |
Un chemin inconnu sous /v1 répond 404 not_found dans le même format d'erreur.
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.