Identité limitée au parent
Chaque id fourni par votre intégration reste immuable. Les ressources déjà présentes dans un catalogue créé par un POS ou le dashboard conservent leur ID provider lorsqu’il existe ; sinon Chataigne attribue un ID public opaque et stable. Les IDs privés de la base de données et des SKU ne servent jamais de fallback.
- Un ID de catalogue est unique dans un établissement.
- Les IDs de catégorie, produit, groupe de modifiers et formule sont uniques dans un catalogue.
- Un ID de modifier est unique dans son groupe.
- Un ID de ligne est unique dans sa formule.
Les mêmes IDs delivery-menu, burger-classic ou sauces peuvent être utilisés dans plusieurs établissements. Chataigne résout toujours un ID avec l’intégralité de son chemin parent.
N’utilisez jamais un nom d’affichage comme clé de relation. Les noms peuvent changer. Utilisez
category_id, modifier_group_ids et product_ids.
Catégories
Les catégories regroupent produits et formules. id et name sont requis ; description et image_url sont optionnels.
Produits
Un produit représente l’article vendable public complet :
Il n’existe aucune ressource SKU publique. Chataigne maintient un SKU principal privé pour sa compatibilité interne avec les commandes, mais son ID n’apparaît jamais dans cette API. Les concepts de produit stockés avec ce SKU en interne, comme price_overrides et bundle_only, sont remontés directement sur le produit public.
order est optionnel en écriture et toujours présent dans les réponses. À la création, son omission ajoute le produit à la fin de sa catégorie. Dans un snapshot complet, les produits sans ordre suivent les produits explicitement ordonnés de leur catégorie.
Groupes de modifiers et modifiers
Un groupe définit les limites de sélection et contient des modifiers. min_selections vaut 0 par défaut ; max_selections: null signifie sans limite. Un groupe avec min_selections > 0 doit contenir au moins un modifier. Un modifier possède un nom et un prix optionnel ; sans prix, il vaut zéro dans la devise de l’établissement. Les modifiers exposent les mêmes champs opérationnels que les produits.
Une formule possède un prix fixe et une ou plusieurs lignes de sélection. Chaque ligne référence des produits publics avec product_ids. Les limites de sélection s’appliquent à la ligne. Les formules exposent les mêmes champs opérationnels que les produits, sauf bundle_only et order.
État opérationnel et restrictions
disabled et out_of_stock sont indépendants. Une ressource désactivée est masquée et ne peut pas être commandée. Une ressource en rupture reste visible mais ne peut pas être sélectionnée jusqu’au retour en stock.
Chaque entrée de restrictions est une fenêtre de disponibilité. days_of_week contient les jours de la semaine, start_time et end_time utilisent HH:MM, start_date et end_date utilisent des dates-heures ISO 8601, et service_types contient delivery, collection ou les deux. Une ressource est disponible dès qu’une restriction correspond. Un tableau vide signifie sans restriction.
Prix et prix conditionnels
Les prix utilisent { "amount": 12.9, "currency": "EUR" }. Le montant doit être positif ou nul, avec deux décimales maximum. La devise doit correspondre à celle de l’établissement.
Chaque entrée de price_overrides contient un price et des conditions. Les conditions peuvent sélectionner un service_type, un ou plusieurs days_of_week et un intervalle local start_time/end_time. Au moins une condition non nulle est requise. Lorsque plusieurs prix correspondent, le plus spécifique l’emporte ; le prix de base reste le fallback. Un tableau vide supprime tous les prix conditionnels.