{
    "variable": [
        {
            "id": "baseUrl",
            "key": "baseUrl",
            "type": "string",
            "name": "string",
            "value": "http:\/\/172.20.10.4:8000"
        }
    ],
    "info": {
        "name": "API Werise \u2014 Documentation",
        "_postman_id": "9837a66c-1957-40ee-9d87-028579534a4d",
        "description": "API Werise, le back-office de BabiMap : commerces, articles, adresses et commandes.",
        "schema": "https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"
    },
    "item": [
        {
            "name": "Administration",
            "description": "\nConnexion au back-office Werise.",
            "item": [
                {
                    "name": "Connexion",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/connexion",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/connexion"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"email\":\"admin@werise.com\",\"password\":\"motdepasse\"}"
                        },
                        "description": "V\u00e9rifie les identifiants et renvoie un couple de jetons. Le jeton d'acc\u00e8s\nest volontairement court : le client le rafra\u00eechit avec `refreshToken`.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"token\":\"\u2026\",\"refreshToken\":\"\u2026\",\"expiresIn\":900,\"expiresAt\":\"2026-08-02T12:15:00+00:00\",\"admin\":{\"id\":1,\"email\":\"admin@werise.com\"}}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Identifiants incorrects.\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 429,
                            "body": "{\"message\":\"Trop de tentatives. R\u00e9essaie dans 60 secondes.\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Rafra\u00eechir le jeton",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/rafraichir",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/rafraichir"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"refreshToken\":\"architecto\"}"
                        },
                        "description": "\u00c9change un jeton de rafra\u00eechissement contre un nouveau couple de jetons.\nL'ancien jeton de rafra\u00eechissement est invalid\u00e9 au passage.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"token\":\"\u2026\",\"refreshToken\":\"\u2026\",\"expiresIn\":900,\"expiresAt\":\"2026-08-02T12:30:00+00:00\",\"admin\":{\"id\":1,\"email\":\"admin@werise.com\"}}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Jeton de rafra\u00eechissement invalide ou expir\u00e9.\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Administrateur connect\u00e9",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/moi",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/moi"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Renvoie le compte associ\u00e9 au jeton d'acc\u00e8s.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"admin\":{\"id\":1,\"email\":\"admin@werise.com\"}}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\"message\":\"Jeton invalide ou expir\u00e9.\",\"expire\":true}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "D\u00e9connexion",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/deconnexion",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/deconnexion"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Invalide les deux jetons du compte.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"message\":\"D\u00e9connect\u00e9.\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Vue d'ensemble",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/vue-ensemble",
                            "query": [
                                {
                                    "key": "mois",
                                    "value": "12",
                                    "description": "Profondeur de la courbe d'inscriptions, entre 3 et 36.",
                                    "disabled": false
                                },
                                {
                                    "key": "debut",
                                    "value": "2026-01",
                                    "description": "Premier mois de la courbe au format AAAA-MM. Prend le pas sur `mois`.",
                                    "disabled": false
                                },
                                {
                                    "key": "fin",
                                    "value": "2026-08",
                                    "description": "Dernier mois de la courbe au format AAAA-MM. Par d\u00e9faut le mois courant.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/admin\/vue-ensemble?mois=12&debut=2026-01&fin=2026-08"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Indicateurs du tableau de bord : cartes de t\u00eate, volumes de contenu,\ncourbe des inscriptions, r\u00e9partition par cat\u00e9gorie, abonnements et\npaiements, file de mod\u00e9ration.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"cartes\":{\"commercantsActifs\":{\"valeur\":12,\"evolution\":\"+3 ce mois\",\"positif\":true}},\"contenu\":{\"articles\":{\"valeur\":2}},\"inscriptions\":[{\"mois\":\"Juil\",\"periode\":\"2026-07\",\"commercants\":4,\"utilisateurs\":9}],\"categories\":[{\"nom\":\"Restauration\",\"total\":3,\"pourcentage\":25}],\"abonnements\":{\"actifs\":2,\"encaisseMois\":55000},\"moderation\":{\"total\":0,\"elements\":[],\"source\":false}}",
                            "name": "succ\u00e8s"
                        }
                    ]
                },
                {
                    "name": "Carte des commerces",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/carte",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/carte"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Renvoie les commerces g\u00e9olocalis\u00e9s, les cat\u00e9gories servant de filtres et\nles compteurs de t\u00eate. Un commerce sans coordonn\u00e9es est compt\u00e9 mais pas\nrenvoy\u00e9 dans la liste : il n'a rien \u00e0 faire sur une carte.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"centre\":[5.33,-4.02],\"zoom\":13,\"stats\":{\"total\":8,\"cartographies\":5,\"actifs\":8,\"inactifs\":0,\"sansCoordonnees\":3},\"categories\":[{\"id\":1,\"nom\":\"Restauration\",\"couleur\":\"oklch(0.68 0.12 65)\",\"commerces\":2}],\"commerces\":[{\"id\":4,\"nom\":\"ete\",\"adresse\":\"Cocody\",\"telephone\":\"0700000000\",\"lat\":5.39,\"lng\":-3.98,\"actif\":true,\"categories\":[1],\"couleur\":\"oklch(0.68 0.12 65)\",\"categoriePrincipale\":\"Restauration\",\"categoriesNoms\":[\"Restauration\"],\"photo\":null,\"note\":4.3,\"avis\":12,\"abonnes\":48,\"likes\":130,\"articles\":9,\"dernierAvis\":{\"texte\":\"Tr\u00e8s bon accueil.\",\"note\":5,\"date\":\"2026-07-28T10:12:00Z\",\"auteur\":\"Awa K.\"}}]}",
                            "name": "succ\u00e8s"
                        }
                    ]
                },
                {
                    "name": "D\u00e9tail d'un commerce",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/commerces\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/commerces\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 4,
                                    "description": "Identifiant du commerce."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Toutes les informations que la base contient sur un commerce : fiche,\npropri\u00e9taire, cat\u00e9gories, photos, horaires, r\u00e9seaux, statistiques et\nderni\u00e8res activit\u00e9s.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "vary",
                                    "value": "Origin"
                                }
                            ],
                            "code": 401,
                            "body": "{\"message\":\"Jeton absent.\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\":\"Commerce introuvable.\"}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Liste des paiements",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/paiements",
                            "query": [
                                {
                                    "key": "recherche",
                                    "value": "Vigivot",
                                    "description": "Filtre sur le client, l'email ou la formule.",
                                    "disabled": false
                                },
                                {
                                    "key": "statut",
                                    "value": "paye",
                                    "description": "Filtre sur l'\u00e9tat du paiement.",
                                    "disabled": false
                                },
                                {
                                    "key": "moyen",
                                    "value": "wave",
                                    "description": "Filtre sur le moyen de paiement.",
                                    "disabled": false
                                },
                                {
                                    "key": "debut",
                                    "value": "2026-07-01",
                                    "description": "Date de d\u00e9but au format AAAA-MM-JJ.",
                                    "disabled": false
                                },
                                {
                                    "key": "fin",
                                    "value": "2026-08-31",
                                    "description": "Date de fin incluse au format AAAA-MM-JJ.",
                                    "disabled": false
                                },
                                {
                                    "key": "page",
                                    "value": "1",
                                    "description": "Num\u00e9ro de page, \u00e0 partir de 1.",
                                    "disabled": false
                                },
                                {
                                    "key": "parPage",
                                    "value": "20",
                                    "description": "Lignes par page, 100 au maximum.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/admin\/paiements?recherche=Vigivot&statut=paye&moyen=wave&debut=2026-07-01&fin=2026-08-31&page=1&parPage=20"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Tous les encaissements d'abonnement, avec le client, la formule et la\np\u00e9riode couverte. Filtrable et pagin\u00e9.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"resume\":{\"nombre\":2,\"montant\":55000,\"devise\":\"FCFA\"},\"paiements\":[{\"id\":\"\u2026\",\"montant\":50000,\"client\":\"Vigivot Eddy\",\"formule\":\"Prenium\",\"statut\":\"paye\"}],\"pagination\":{\"page\":1,\"parPage\":20,\"total\":2,\"pages\":1},\"filtres\":{\"statuts\":[\"paye\"],\"moyens\":[\"wave\"]}}",
                            "name": "succ\u00e8s"
                        }
                    ]
                },
                {
                    "name": "Liste des commer\u00e7ants",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/commercants",
                            "query": [
                                {
                                    "key": "recherche",
                                    "value": "ali",
                                    "description": "Filtre sur le commerce, le responsable ou l'email.",
                                    "disabled": false
                                },
                                {
                                    "key": "etat",
                                    "value": "bloque",
                                    "description": "`actif` ou `bloque`.",
                                    "disabled": false
                                },
                                {
                                    "key": "page",
                                    "value": "1",
                                    "description": "Num\u00e9ro de page, \u00e0 partir de 1.",
                                    "disabled": false
                                },
                                {
                                    "key": "parPage",
                                    "value": "20",
                                    "description": "Lignes par page, 100 au maximum.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/admin\/commercants?recherche=ali&etat=bloque&page=1&parPage=20"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Tous les commerces inscrits, avec leur responsable et leur \u00e9tat.\nIl n'y a pas de validation \u00e0 faire : un commerce existe d\u00e8s son\ninscription, l'administration peut seulement le bloquer.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"resume\":{\"total\":8,\"actifs\":8,\"bloques\":0},\"commercants\":[{\"id\":5,\"nom\":\"CHez Ali\",\"actif\":true}],\"pagination\":{\"page\":1,\"parPage\":20,\"total\":8,\"pages\":1}}",
                            "name": "succ\u00e8s"
                        }
                    ]
                },
                {
                    "name": "Bloquer ou d\u00e9bloquer un commerce",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/commerces\/:id\/blocage",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/commerces\/:id\/blocage",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": 5,
                                    "description": "Identifiant du commerce."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"bloque\":true}"
                        },
                        "description": "Bascule `is_active`. Un commerce bloqu\u00e9 dispara\u00eet de l'app mobile ;\naucune donn\u00e9e n'est supprim\u00e9e, l'op\u00e9ration est r\u00e9versible.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"id\":5,\"nom\":\"CHez Ali\",\"actif\":false,\"message\":\"Commerce bloqu\u00e9.\"}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"message\":\"Commerce introuvable.\"}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Syst\u00e8me",
            "description": "",
            "item": [
                {
                    "name": "\u00c9tat de l'API\n\nV\u00e9rifie que l'API Werise r\u00e9pond. Utile pour les sondes de disponibilit\u00e9.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/sante",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/sante"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"statut\": \"ok\", \"service\": \"werise-api\"}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Utilisateurs",
            "description": "",
            "item": [
                {
                    "name": "Utilisateur connect\u00e9\n\nRetourne l'utilisateur associ\u00e9 au jeton Sanctum envoy\u00e9 dans l'en-t\u00eate `Authorization`.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/user",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/user"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "vary",
                                    "value": "Origin"
                                }
                            ],
                            "code": 401,
                            "body": "{\"message\":\"Unauthenticated.\"}",
                            "name": ""
                        }
                    ]
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "key",
                "type": "string"
            }
        ]
    }
}