{"openapi":"3.1.0","info":{"title":"CODFamilia — API vendeur","version":"1.3","description":"Créer et suivre des commandes en paiement à la livraison. Authentification par clé API ; le vendeur est déduit de la clé, jamais d'un paramètre."},"servers":[{"url":"https:\/\/api.codfamilia.com"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Clé API « cfk_… » créée depuis Applications → API."}}},"paths":{"\/v1\/products":{"get":{"summary":"Catalogue commandable","description":"Les produits que CE vendeur peut vendre : catalogue public plus ses produits privés. Le prix renvoyé est le prix CODFamilia (ce que le vendeur paie), jamais le prix usine.","responses":{"200":{"description":"Succès","content":{"application\/json":{"example":{"data":[{"id":3,"sku":"CF-TEETH-03","name":"Stylo blanchiment dentaire","codfamilia_price":"188.00","in_stock":true,"private":false,"variants":[]}]}}}}},"security":[{"bearerAuth":[]}]}},"\/v1\/cities":{"get":{"summary":"Villes livrées et frais de livraison","description":"À lire avant d'envoyer un lead : une ville inconnue n'est pas refusée, mais le lead part en « lead endommagé » et attend une correction.","responses":{"200":{"description":"Succès","content":{"application\/json":{"example":{"data":[{"id":1,"name":"Casablanca","delivery_fee":"29.50"}]}}}}},"security":[{"bearerAuth":[]}]}},"\/v1\/leads":{"post":{"summary":"Créer un lead","description":"Le corps est en JSON. Un lead douteux (SKU inconnu, ville non reconnue, total incohérent, doublon récent) n'est jamais perdu : il est enregistré comme « lead endommagé » et la réponse est 202 avec la liste des anomalies. Un lead accepté répond 201.","responses":{"200":{"description":"Succès","content":{"application\/json":{"example":{"customer_name":"Yassine A.","customer_phone":"0612345678","city":"Casablanca","address":"12 rue des Orangers","total_client":"299.00","items":[{"sku":"CF-TEETH-03","quantity":1}],"external_ref":"CMD-1042"}}}}},"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application\/json":{"example":{"customer_name":"Yassine A.","customer_phone":"0612345678","city":"Casablanca","address":"12 rue des Orangers","total_client":"299.00","items":[{"sku":"CF-TEETH-03","quantity":1}],"external_ref":"CMD-1042"},"schema":{"type":"object","properties":{"customer_name":{"type":"string","description":"Nom du client (obligatoire)"},"customer_phone":{"type":"string","description":"Téléphone marocain, 06…\/07… (obligatoire)"},"city":{"type":"string","description":"Nom de la ville, ou city_id"},"address":{"type":"string","description":"Adresse de livraison"},"total_client":{"type":"string","description":"Montant à encaisser à la livraison, en MAD"},"items":{"type":"string","description":"Tableau [{sku ou product_id, quantity}] (obligatoire)"},"external_ref":{"type":"string","description":"Votre référence, reprise telle quelle dans nos écrans"}}}}}}},"get":{"summary":"Lister vos leads","description":"Du plus récent au plus ancien. La pagination se fait par curseur : reprenez `next_before` dans le paramètre `before` pour la page suivante. Un numéro de page se décalerait à chaque nouveau lead, et l'intégration sauterait des commandes sans le voir.","responses":{"200":{"description":"Succès","content":{"application\/json":{"example":{"data":[{"id":412,"ref":"TAH-00042","confirmation_status":"confirmed","shipping_status":"shipped","total_client":"299.00"}],"next_before":412}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Nombre de leads, 1 à 100 (défaut 50)","schema":{"type":"string"}},{"name":"before","in":"query","required":false,"description":"Identifiant renvoyé par next_before","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filtre sur le statut de confirmation (new, confirmed, canceled…)","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Date minimale de création (AAAA-MM-JJ)","schema":{"type":"string"}}]}},"\/v1\/leads\/{ref}":{"get":{"summary":"Suivre un lead","description":"Par sa référence CODFamilia (TAH-00042). La référence d'un autre vendeur répond 404 : aucune différence entre « pas à vous » et « n'existe pas ».","responses":{"200":{"description":"Succès","content":{"application\/json":{"example":{"data":{"ref":"TAH-00042","confirmation_status":"confirmed","shipping_status":"delivered","tracking_number":"OZ123456","seller_profit":"90.00"}}}}}},"security":[{"bearerAuth":[]}],"parameters":[{"name":"ref","in":"path","required":true,"description":"Référence du lead","schema":{"type":"string"}}]}},"\/v1\/me":{"get":{"summary":"Vérifier votre clé","description":"Le premier appel à faire : il confirme que la clé fonctionne et à quel compte elle appartient, sans exposer la moindre donnée client.","responses":{"200":{"description":"Succès","content":{"application\/json":{"example":{"data":{"account":"H7K2-9QRX","name":"Anasse Tahboun","lead_prefix":"TAH","api_version":"1.3","rate_limit_per_minute":120}}}}}},"security":[{"bearerAuth":[]}]}}}}