{"auth":{"bearer":[{"key":"token","type":"string","value":"{{api_key}}"}],"type":"bearer"},"event":[{"listen":"prerequest","script":{"exec":[""],"type":"text/javascript"}}],"info":{"_postman_id":"tibida-api-v1-20261001","description":"API publique tibida v1 — REST pour agir, webhooks pour réagir.\n\nRenseignez la variable `api_key` avec votre clé (`tib_live_…`, créée dans Admin → Clés API). Documentation : https://app.tibida.com/developers/","name":"tibida API v1","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},"item":[{"item":[{"name":"Lister les boutiques","request":{"description":"Boutiques actives couvertes par la clé API. Portée : outlets:read.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["api","v1","outlets"],"raw":"{{base_url}}/api/v1/outlets"}},"response":[]}],"name":"Boutiques"},{"item":[{"name":"Lister les catégories","request":{"description":"Noms des catégories de produits actives. Portée : catalog:read.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["api","v1","categories"],"raw":"{{base_url}}/api/v1/categories"}},"response":[]},{"name":"Lister les produits","request":{"description":"Catalogue paginé. Portée : catalog:read.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["api","v1","products"],"query":[{"description":"Optionnel : prix et disponibilité pour cette boutique.","key":"outlet_id","value":"3"},{"description":"Optionnel : filtre exact sur la catégorie.","disabled":true,"key":"category","value":""},{"description":"1 à 500, défaut 100.","key":"limit","value":"100"},{"key":"offset","value":"0"}],"raw":"{{base_url}}/api/v1/products?outlet_id=3&limit=100&offset=0"}},"response":[]},{"name":"Détail d'un produit","request":{"description":"Fiche produit avec groupes d'options. Portée : catalog:read.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["api","v1","products","42"],"query":[{"description":"Optionnel : prix spécifique à la boutique.","key":"outlet_id","value":"3"}],"raw":"{{base_url}}/api/v1/products/42?outlet_id=3"}},"response":[]}],"name":"Catalogue"},{"item":[{"event":[{"listen":"test","script":{"exec":["pm.test(\"Statut 201\", function () {","    pm.response.to.have.status(201);","});","pm.test(\"Commande créée avec référence\", function () {","    var j = pm.response.json();","    pm.expect(j.order).to.have.property(\"id\");","    pm.expect(j.order).to.have.property(\"reference\");","    pm.expect(j.order.total).to.be.above(0);","});"],"type":"text/javascript"}}],"name":"Créer une commande","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"outlet_id\": 3,\n  \"customer_name\": \"Awa Diallo\",\n  \"customer_phone\": \"+221771234567\",\n  \"type\": \"delivery\",\n  \"address\": \"Sacré-Cœur 3, Villa 12, Dakar\",\n  \"delivery_zone_id\": 5,\n  \"items\": [\n    { \"product_id\": 42, \"qty\": 2 },\n    { \"product_id\": 87, \"qty\": 1, \"note\": \"Bien frais\" }\n  ],\n  \"customer_note\": \"Appeler à l'arrivée\"\n}"},"description":"Crée une commande (livraison ou retrait). Prix calculés côté serveur. Portée : orders:write.","header":[{"key":"Content-Type","value":"application/json"},{"description":"Recommandé : rejouez la même clé en cas de doute réseau.","key":"Idempotency-Key","value":"{{$guid}}"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["api","v1","orders"],"raw":"{{base_url}}/api/v1/orders"}},"response":[]},{"name":"Lister les commandes","request":{"description":"Commandes du périmètre, plus récentes d'abord. Portée : orders:read.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["api","v1","orders"],"query":[{"description":"Optionnel.","key":"outlet_id","value":"3"},{"description":"Optionnel : open, paid, cancelled…","key":"status","value":"open"},{"description":"Optionnel : ISO 8601.","disabled":true,"key":"since","value":""},{"description":"1 à 200, défaut 50.","key":"limit","value":"50"},{"key":"offset","value":"0"}],"raw":"{{base_url}}/api/v1/orders?outlet_id=3&status=open&limit=50&offset=0"}},"response":[]},{"name":"Détail d'une commande","request":{"description":"Commande avec le détail de ses lignes. Portée : orders:read.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["api","v1","orders","1024"],"raw":"{{base_url}}/api/v1/orders/1024"}},"response":[]},{"name":"Annuler une commande","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"reason\": \"Client injoignable\"\n}"},"description":"Annule une commande non payée (motif obligatoire). Portée : orders:write.","header":[{"key":"Content-Type","value":"application/json"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["api","v1","orders","1024","cancel"],"raw":"{{base_url}}/api/v1/orders/1024/cancel"}},"response":[]}],"name":"Commandes"},{"item":[{"name":"Créer une réservation","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"outlet_id\": 3,\n  \"customer_name\": \"Moussa Ndiaye\",\n  \"customer_phone\": \"+221781234567\",\n  \"party_size\": 4,\n  \"reserved_for\": \"2026-10-05T20:00:00+00:00\",\n  \"notes\": \"Table près de la fenêtre si possible\"\n}"},"description":"Crée une réservation de table (date future, ISO 8601). Portée : reservations:write.","header":[{"key":"Content-Type","value":"application/json"},{"description":"Recommandé.","key":"Idempotency-Key","value":"{{$guid}}"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["api","v1","reservations"],"raw":"{{base_url}}/api/v1/reservations"}},"response":[]},{"name":"Lister les réservations","request":{"description":"Réservations du périmètre, triées par date croissante. Portée : reservations:read.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["api","v1","reservations"],"query":[{"description":"Optionnel.","key":"outlet_id","value":"3"},{"description":"Optionnel : AAAA-MM-JJ.","key":"date","value":"2026-10-05"},{"description":"Optionnel : confirmee, annulee…","disabled":true,"key":"status","value":""},{"description":"1 à 200, défaut 50.","key":"limit","value":"50"},{"key":"offset","value":"0"}],"raw":"{{base_url}}/api/v1/reservations?outlet_id=3&date=2026-10-05&limit=50&offset=0"}},"response":[]},{"name":"Annuler une réservation","request":{"description":"Passe la réservation au statut annulee. Portée : reservations:write.","header":[],"method":"POST","url":{"host":["{{base_url}}"],"path":["api","v1","reservations","215","cancel"],"raw":"{{base_url}}/api/v1/reservations/215/cancel"}},"response":[]}],"name":"Réservations"},{"item":[{"name":"Consulter une carte","request":{"description":"Points, niveau et portefeuille d'une carte. Portée : loyalty:read.","header":[],"method":"GET","url":{"host":["{{base_url}}"],"path":["api","v1","loyalty","card","1234567890123456"],"raw":"{{base_url}}/api/v1/loyalty/card/1234567890123456"}},"response":[]},{"name":"Ajuster les points","request":{"body":{"mode":"raw","options":{"raw":{"language":"json"}},"raw":"{\n  \"points\": 100,\n  \"reason\": \"Parrainage octobre\",\n  \"outlet_id\": 3\n}"},"description":"Crédite ou débite des points (entier non nul, ±100 000 max). Portée : loyalty:write.","header":[{"key":"Content-Type","value":"application/json"},{"description":"Recommandé.","key":"Idempotency-Key","value":"{{$guid}}"}],"method":"POST","url":{"host":["{{base_url}}"],"path":["api","v1","loyalty","card","1234567890123456","points"],"raw":"{{base_url}}/api/v1/loyalty/card/1234567890123456/points"}},"response":[]}],"name":"Fidélité"}],"variable":[{"key":"base_url","type":"string","value":"https://app.tibida.com"},{"key":"api_key","type":"string","value":"tib_live_VOTRE_CLE_ICI"}]}