{
    "variable": [
        {
            "id": "baseUrl",
            "key": "baseUrl",
            "type": "string",
            "name": "string",
            "value": "https:\/\/api-assovix.gestiem.com"
        }
    ],
    "info": {
        "name": "ASSOVIX API",
        "_postman_id": "d08b16c8-8e2f-4259-8925-7c250bfb8e9e",
        "description": "API REST multi-tenant pour la gestion d'associations africaines (tontines, ONG, mutuelles, syndicats).\n\n## Identification du tenant\n\nToutes les routes `\/api\/v1\/*` (sauf `register`, `login` et `login\/select-tenant`) n\u00e9cessitent le header **`X-Tenant-Slug`** :\n\n```\nX-Tenant-Slug: mon-association\n```\n\nLe slug est l'identifiant unique de l'association, choisi lors de l'inscription.\n\n## Format de r\u00e9ponse uniforme\n\nToutes les r\u00e9ponses suivent ce format :\n\n```json\n{\n  \"success\": true,\n  \"message\": \"Description lisible.\",\n  \"data\": {},\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}\n```\n\nEn cas d'erreur, le champ `errors` s'ajoute et `data` vaut `null`.\n\n## Codes d'erreur\n\n| Code | Signification |\n|------|---------------|\n| 200  | Succ\u00e8s |\n| 201  | Ressource cr\u00e9\u00e9e |\n| 401  | Token manquant ou expir\u00e9 |\n| 403  | Acc\u00e8s interdit (tenant suspendu) |\n| 404  | Ressource ou tenant introuvable |\n| 422  | Validation \u00e9chou\u00e9e |\n| 429  | Trop de requ\u00eates (100\/min API \u00b7 10\/min auth) |\n| 500  | Erreur serveur interne |",
        "schema": "https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"
    },
    "item": [
        {
            "name": "Authentication",
            "description": "",
            "item": [
                {
                    "name": "Se d\u00e9connecter",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/auth\/logout",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/auth\/logout"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "R\u00e9voque **tous** les tokens Sanctum de l'utilisateur connect\u00e9 (toutes les sessions)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"D\u00e9connexion r\u00e9ussie.\",\n  \"data\": null,\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "D\u00e9connexion r\u00e9ussie"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Non authentifi\u00e9.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Token manquant ou expir\u00e9"
                        }
                    ]
                },
                {
                    "name": "Profil et permissions",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/auth\/me",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/auth\/me"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Retourne le profil complet de l'utilisateur connect\u00e9 et\nla liste de ses permissions dans le contexte du tenant courant."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Utilisateur courant.\",\n  \"data\": {\n    \"user\": {\n      \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n      \"tenant_id\": \"660e8400-e29b-41d4-a716-446655440000\",\n      \"first_name\": \"Kofi\",\n      \"last_name\": \"Mensah\",\n      \"email\": \"kofi@example.com\",\n      \"phone\": \"+22997000000\",\n      \"avatar_url\": null,\n      \"locale\": \"fr\",\n      \"is_active\": true,\n      \"last_login_at\": \"2026-04-27T10:00:00+00:00\",\n      \"roles\": [{ \"name\": \"admin\", \"guard_name\": \"web\" }]\n    },\n    \"permissions\": [\"manage-members\", \"manage-cotisations\", \"view-reports\"]\n  },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Succ\u00e8s"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Non authentifi\u00e9.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Token manquant ou expir\u00e9"
                        }
                    ]
                },
                {
                    "name": "Rafra\u00eechir le token",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/auth\/refresh",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/auth\/refresh"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "R\u00e9voque le token courant et \u00e9met un nouveau token Sanctum valide 24h.\nUtile pour prolonger une session sans redemander les credentials."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Token rafra\u00eechi.\",\n  \"data\": {\n    \"token\": \"3|assovix_newFreshToken789xyz\"\n  },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Token rafra\u00eechi"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Non authentifi\u00e9.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Token manquant ou expir\u00e9"
                        }
                    ]
                },
                {
                    "name": "Cr\u00e9er un compte association",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/auth\/register",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/auth\/register"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"association_name\":\"Tontine Les Amis\",\"association_type\":\"tontine\",\"slug\":\"tontine-les-amis\",\"country\":\"BJ\",\"currency\":\"XOF\",\"first_name\":\"Kofi\",\"last_name\":\"Mensah\",\"email\":\"kofi@example.com\",\"phone\":\"+22997000000\",\"password\":\"Secret@2026!\",\"password_confirmation\":\"Secret@2026!\"}"
                        },
                        "description": "Cr\u00e9e simultan\u00e9ment un nouveau tenant (association) et son premier utilisateur\navec le r\u00f4le `admin`. Retourne un token Sanctum imm\u00e9diatement utilisable.\nCe endpoint ne n\u00e9cessite pas le header `X-Tenant-Slug` car le tenant n'existe pas encore.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Inscription r\u00e9ussie.\",\n  \"data\": {\n    \"token\": \"1|assovix_K2c3QTLQgDywEmIa0qaXL1ivbosnIr4\",\n    \"user\": {\n      \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n      \"tenant_id\": \"660e8400-e29b-41d4-a716-446655440000\",\n      \"first_name\": \"Kofi\",\n      \"last_name\": \"Mensah\",\n      \"email\": \"kofi@example.com\",\n      \"phone\": \"+22997000000\",\n      \"avatar_url\": null,\n      \"locale\": \"fr\",\n      \"is_active\": true,\n      \"last_login_at\": null\n    },\n    \"tenant\": {\n      \"id\": \"660e8400-e29b-41d4-a716-446655440000\",\n      \"name\": \"Tontine Les Amis\",\n      \"association_type\": \"tontine\",\n      \"slug\": \"tontine-les-amis\",\n      \"country\": \"BJ\",\n      \"currency\": \"XOF\",\n      \"plan\": \"free\",\n      \"status\": \"trial\",\n      \"trial_ends_at\": \"2026-05-11T10:00:00+00:00\"\n    }\n  },\n  \"meta\": {\n    \"timestamp\": \"2026-04-27T10:00:00+00:00\",\n    \"version\": \"v1\"\n  }\n}",
                            "name": "Inscription r\u00e9ussie"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Donn\u00e9es invalides.\",\n  \"data\": null,\n  \"errors\": { \"slug\": [\"The slug has already been taken.\"] },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Slug d\u00e9j\u00e0 utilis\u00e9"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Donn\u00e9es invalides.\",\n  \"data\": null,\n  \"errors\": { \"email\": [\"The email field must be a valid email address.\"] },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Email invalide"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Donn\u00e9es invalides.\",\n  \"data\": null,\n  \"errors\": { \"password\": [\"The password field must be at least 8 characters.\"] },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Mot de passe trop court"
                        }
                    ]
                },
                {
                    "name": "Se connecter",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/auth\/login",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/auth\/login"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"email\":\"kofi@example.com\",\"password\":\"Secret@2026!\"}"
                        },
                        "description": "Authentifie un utilisateur **sans header `X-Tenant-Slug`**. Le syst\u00e8me\nidentifie automatiquement l'association en croisant `email` et `password`.\n- Cas standard (un seul match) : retourne un token Sanctum, l'utilisateur,\n  le tenant et les permissions.\n- Cas ambigu (l'email existe dans plusieurs associations actives) : retourne\n  un `login_intent` court-vie (5 min) et la liste des associations \u00e0 choisir.\n  Aucun token Sanctum n'est \u00e9mis tant que la s\u00e9lection n'est pas faite via\n  `POST \/api\/v1\/auth\/login\/select-tenant`.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Connexion r\u00e9ussie.\",\n  \"data\": {\n    \"token\": \"2|assovix_4xK2c3QTLQgDywEmIa0qaXL1ivbosnIr4\",\n    \"user\": { \"id\": \"550e8400-...\", \"email\": \"kofi@example.com\", \"is_active\": true },\n    \"tenant\": { \"id\": \"660e8400-...\", \"name\": \"Tontine Les Amis\", \"slug\": \"tontine-les-amis\" },\n    \"permissions\": [\"manage-members\"]\n  },\n  \"meta\": { \"timestamp\": \"2026-05-04T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Connexion directe (un seul tenant)"
                        },
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Plusieurs associations correspondent. S\u00e9lectionnez-en une.\",\n  \"data\": {\n    \"requires_tenant_selection\": true,\n    \"login_intent\": \"lit_9f3a2b81e4c64d9bb9a1d0e2f1c8b3a7\",\n    \"expires_at\": \"2026-05-04T10:05:00+00:00\",\n    \"associations\": [\n      { \"id\": \"660e8400-...\", \"name\": \"Tontine Les Amis\", \"slug\": \"tontine-les-amis\",\n        \"association_type\": \"tontine\", \"logo_url\": null, \"country\": \"BJ\" }\n    ]\n  },\n  \"meta\": { \"timestamp\": \"2026-05-04T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "S\u00e9lection d'association requise"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Donn\u00e9es invalides.\",\n  \"data\": null,\n  \"errors\": { \"email\": [\"Identifiants incorrects.\"] },\n  \"meta\": { \"timestamp\": \"2026-05-04T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Identifiants incorrects"
                        }
                    ]
                },
                {
                    "name": "S\u00e9lectionner une association apr\u00e8s login multi-tenant",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/auth\/login\/select-tenant",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/auth\/login\/select-tenant"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"login_intent\":\"lit_9f3a2b81e4c64d9bb9a1d0e2f1c8b3a7\",\"tenant_id\":\"660e8400-e29b-41d4-a716-446655440000\"}"
                        },
                        "description": "Consomme un `login_intent` \u00e9mis par `POST \/auth\/login` quand l'email\nmatche plusieurs associations, et retourne un token Sanctum complet\npour le tenant choisi. Le `login_intent` est **one-shot** : un second\nappel \u00e9choue. TTL 5 min.",
                        "auth": {
                            "type": "noauth"
                        }
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Connexion r\u00e9ussie.\",\n  \"data\": {\n    \"token\": \"3|assovix_freshTokenForSelectedTenant\",\n    \"user\": { \"id\": \"550e8400-...\", \"email\": \"kofi@example.com\" },\n    \"tenant\": { \"id\": \"660e8400-...\", \"name\": \"Tontine Les Amis\", \"slug\": \"tontine-les-amis\" },\n    \"permissions\": [\"manage-members\"]\n  },\n  \"meta\": { \"timestamp\": \"2026-05-04T10:00:30+00:00\", \"version\": \"v1\" }\n}",
                            "name": "S\u00e9lection r\u00e9ussie"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Donn\u00e9es invalides.\",\n  \"data\": null,\n  \"errors\": { \"login_intent\": [\"Lien expir\u00e9, recommencez la connexion.\"] },\n  \"meta\": { \"timestamp\": \"2026-05-04T10:05:30+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Intent expir\u00e9 ou inconnu"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Donn\u00e9es invalides.\",\n  \"data\": null,\n  \"errors\": { \"tenant_id\": [\"S\u00e9lection invalide.\"] },\n  \"meta\": { \"timestamp\": \"2026-05-04T10:00:30+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant non autoris\u00e9 pour cet intent"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Tenant (Admin)",
            "description": "",
            "item": [
                {
                    "name": "Lister les tenants",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/tenants",
                            "query": [
                                {
                                    "key": "status",
                                    "value": "active",
                                    "description": "Filtre par statut. Valeurs : `active`, `suspended`, `trial`.",
                                    "disabled": false
                                },
                                {
                                    "key": "search",
                                    "value": "tontine",
                                    "description": "Recherche dans le nom ou le slug du tenant.",
                                    "disabled": false
                                },
                                {
                                    "key": "page",
                                    "value": "1",
                                    "description": "Num\u00e9ro de page. D\u00e9faut: 1.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/admin\/tenants?status=active&search=tontine&page=1"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Retourne la liste pagin\u00e9e de tous les tenants (25 par page), tri\u00e9e par date de cr\u00e9ation d\u00e9croissante.\nFiltres disponibles : `status` et `search` (recherche dans `name` et `slug`)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Liste des tenants.\",\n  \"data\": [\n    {\n      \"id\": \"660e8400-e29b-41d4-a716-446655440000\",\n      \"name\": \"Tontine Les Amis\",\n      \"slug\": \"tontine-les-amis\",\n      \"country\": \"BJ\",\n      \"currency\": \"XOF\",\n      \"plan\": \"free\",\n      \"status\": \"trial\",\n      \"trial_ends_at\": \"2026-05-11T10:00:00+00:00\",\n      \"created_at\": \"2026-04-27T10:00:00+00:00\"\n    }\n  ],\n  \"meta\": {\n    \"current_page\": 1,\n    \"last_page\": 3,\n    \"per_page\": 25,\n    \"total\": 72,\n    \"timestamp\": \"2026-04-27T10:00:00+00:00\",\n    \"version\": \"v1\"\n  }\n}",
                            "name": "Liste pagin\u00e9e"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Non authentifi\u00e9.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Non authentifi\u00e9"
                        }
                    ]
                },
                {
                    "name": "Cr\u00e9er un tenant",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/tenants",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/tenants"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"ONG Solidarit\u00e9 B\u00e9nin\",\"slug\":\"ong-solidarite-benin\",\"country\":\"SN\",\"currency\":\"XOF\",\"plan\":\"free\",\"status\":\"trial\"}"
                        },
                        "description": "Cr\u00e9e manuellement un nouveau tenant sans cr\u00e9er d'utilisateur associ\u00e9.\nR\u00e9serv\u00e9 au super admin de la plateforme."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Tenant cr\u00e9\u00e9.\",\n  \"data\": {\n    \"id\": \"770e8400-e29b-41d4-a716-446655440000\",\n    \"name\": \"ONG Solidarit\u00e9 B\u00e9nin\",\n    \"slug\": \"ong-solidarite-benin\",\n    \"country\": \"SN\",\n    \"currency\": \"XOF\",\n    \"plan\": \"free\",\n    \"status\": \"trial\",\n    \"created_at\": \"2026-04-27T10:00:00+00:00\"\n  },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant cr\u00e9\u00e9"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Non authentifi\u00e9.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Non authentifi\u00e9"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Donn\u00e9es invalides.\",\n  \"data\": null,\n  \"errors\": { \"slug\": [\"The slug has already been taken.\"] },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Slug dupliqu\u00e9"
                        }
                    ]
                },
                {
                    "name": "Modifier un tenant",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/tenants\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/tenants\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "660e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du tenant."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Tontine Les Amis v2\",\"country\":\"CI\",\"currency\":\"XOF\",\"plan\":\"starter\",\"locale\":\"fr\"}"
                        },
                        "description": "Met \u00e0 jour les informations d'un tenant existant.\nSeuls les champs envoy\u00e9s sont modifi\u00e9s (comportement PATCH sur PUT)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Tenant mis \u00e0 jour.\",\n  \"data\": {\n    \"id\": \"660e8400-e29b-41d4-a716-446655440000\",\n    \"name\": \"Tontine Les Amis v2\",\n    \"slug\": \"tontine-les-amis\",\n    \"country\": \"CI\",\n    \"currency\": \"XOF\",\n    \"plan\": \"starter\",\n    \"status\": \"trial\"\n  },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant mis \u00e0 jour"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Non authentifi\u00e9.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Non authentifi\u00e9"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Ressource introuvable.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant introuvable"
                        }
                    ]
                },
                {
                    "name": "Suspendre un tenant",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/tenants\/:id\/suspend",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/tenants\/:id\/suspend",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "660e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du tenant."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Passe le statut du tenant \u00e0 `suspended`.\nLes utilisateurs du tenant recevront une erreur 403 sur chaque requ\u00eate."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Tenant suspendu.\",\n  \"data\": {\n    \"id\": \"660e8400-e29b-41d4-a716-446655440000\",\n    \"name\": \"Tontine Les Amis\",\n    \"slug\": \"tontine-les-amis\",\n    \"status\": \"suspended\"\n  },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant suspendu"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Non authentifi\u00e9.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Non authentifi\u00e9"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Ressource introuvable.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant introuvable"
                        }
                    ]
                },
                {
                    "name": "Activer un tenant",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/tenants\/:id\/activate",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/tenants\/:id\/activate",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "660e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du tenant."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Passe le statut du tenant \u00e0 `active`.\nR\u00e9tablit l'acc\u00e8s complet \u00e0 l'API pour les utilisateurs du tenant."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Tenant activ\u00e9.\",\n  \"data\": {\n    \"id\": \"660e8400-e29b-41d4-a716-446655440000\",\n    \"name\": \"Tontine Les Amis\",\n    \"slug\": \"tontine-les-amis\",\n    \"status\": \"active\"\n  },\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant activ\u00e9"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Non authentifi\u00e9.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Non authentifi\u00e9"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Ressource introuvable.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant introuvable"
                        }
                    ]
                },
                {
                    "name": "Supprimer un tenant",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/admin\/tenants\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/admin\/tenants\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "660e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du tenant."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Soft-delete du tenant. Les donn\u00e9es sont conserv\u00e9es en base (`deleted_at` non null).\nCette action est r\u00e9versible via une restauration manuelle."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"message\": \"Tenant supprim\u00e9.\",\n  \"data\": null,\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant supprim\u00e9"
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Non authentifi\u00e9.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Non authentifi\u00e9"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"success\": false,\n  \"message\": \"Ressource introuvable.\",\n  \"data\": null,\n  \"errors\": [],\n  \"meta\": { \"timestamp\": \"2026-04-27T10:00:00+00:00\", \"version\": \"v1\" }\n}",
                            "name": "Tenant introuvable"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Member Groups",
            "description": "",
            "item": [
                {
                    "name": "Liste des groupes",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/member-groups",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/member-groups"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Cr\u00e9er un groupe",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/member-groups",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/member-groups"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Bureau\",\"description\":\"Rerum non doloribus aspernatur ad eius molestiae accusantium.\",\"color\":\"#059669\",\"parent_id\":null}"
                        },
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Modifier un groupe",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/member-groups\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/member-groups\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du groupe."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"vwgshl\",\"description\":\"Rerum non doloribus aspernatur ad eius molestiae accusantium.\",\"color\":\"#057Fce\",\"parent_id\":\"a00372d2-8e4a-326e-8cb5-f40c121e1465\"}"
                        },
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Supprimer un groupe",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/member-groups\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/member-groups\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du groupe."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Refus\u00e9 si le groupe contient des membres (actifs ou supprim\u00e9s)."
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Membres d'un groupe",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/member-groups\/:id\/members",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/member-groups\/:id\/members",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du groupe."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Members",
            "description": "",
            "item": [
                {
                    "name": "Statistiques des membres",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/stats",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/stats"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Retourne le total, la r\u00e9partition par statut et par groupe, les nouveaux ce mois\/ann\u00e9e."
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Exporter les membres en CSV",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/export",
                            "query": [
                                {
                                    "key": "status",
                                    "value": "active",
                                    "description": "Filtre statut.",
                                    "disabled": false
                                },
                                {
                                    "key": "group_id",
                                    "value": "",
                                    "description": "Filtre groupe.",
                                    "disabled": true
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/export?status=active&group_id="
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "T\u00e9l\u00e9charger le template CSV d'import",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/template",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/template"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Importer des membres depuis CSV",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/import",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/import"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "multipart\/form-data"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "formdata",
                            "formdata": [
                                {
                                    "key": "file",
                                    "src": [],
                                    "type": "file"
                                }
                            ]
                        },
                        "description": "Importe des membres depuis un fichier CSV. Max 1000 lignes.\nColonnes requises : first_name*, last_name*. Toutes les autres sont optionnelles."
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Liste des membres",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members",
                            "query": [
                                {
                                    "key": "search",
                                    "value": "Kofi",
                                    "description": "Recherche sur nom, pr\u00e9nom, email, num\u00e9ro.",
                                    "disabled": false
                                },
                                {
                                    "key": "status",
                                    "value": "active",
                                    "description": "Filtre statut : active, inactive, pending, suspended, honorary, deceased.",
                                    "disabled": false
                                },
                                {
                                    "key": "group_id",
                                    "value": "",
                                    "description": "UUID du groupe.",
                                    "disabled": true
                                },
                                {
                                    "key": "sponsor_id",
                                    "value": "",
                                    "description": "UUID du parrain.",
                                    "disabled": true
                                },
                                {
                                    "key": "joined_from",
                                    "value": "2026-01-01",
                                    "description": "Date d\u00e9but adh\u00e9sion (YYYY-MM-DD).",
                                    "disabled": false
                                },
                                {
                                    "key": "joined_to",
                                    "value": "2026-12-31",
                                    "description": "Date fin adh\u00e9sion (YYYY-MM-DD).",
                                    "disabled": false
                                },
                                {
                                    "key": "sort",
                                    "value": "member_number",
                                    "description": "Champ de tri : member_number, last_name, joined_at.",
                                    "disabled": false
                                },
                                {
                                    "key": "order",
                                    "value": "asc",
                                    "description": "Ordre : asc ou desc.",
                                    "disabled": false
                                },
                                {
                                    "key": "per_page",
                                    "value": "25",
                                    "description": "R\u00e9sultats par page (max 100).",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/v1\/members?search=Kofi&status=active&group_id=&sponsor_id=&joined_from=2026-01-01&joined_to=2026-12-31&sort=member_number&order=asc&per_page=25"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Retourne la liste pagin\u00e9e des membres du tenant courant.\nSupporte la recherche, le filtrage et le tri."
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Cr\u00e9er un membre",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "multipart\/form-data"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "formdata",
                            "formdata": [
                                {
                                    "key": "first_name",
                                    "value": "Kofi",
                                    "type": "text",
                                    "description": "Pr\u00e9nom."
                                },
                                {
                                    "key": "last_name",
                                    "value": "Mensah",
                                    "type": "text",
                                    "description": "Nom de famille."
                                },
                                {
                                    "key": "email",
                                    "value": "kofi@example.com",
                                    "type": "text",
                                    "description": "Email (unique par tenant)."
                                },
                                {
                                    "key": "phone",
                                    "value": "+22997000000",
                                    "type": "text",
                                    "description": "T\u00e9l\u00e9phone."
                                },
                                {
                                    "key": "gender",
                                    "value": "M",
                                    "type": "text",
                                    "description": "Genre : M, F, other."
                                },
                                {
                                    "key": "birth_date",
                                    "value": "1990-01-15",
                                    "type": "text",
                                    "description": "Date de naissance (YYYY-MM-DD)."
                                },
                                {
                                    "key": "address",
                                    "value": "wgshlz",
                                    "type": "text",
                                    "description": "validation.max."
                                },
                                {
                                    "key": "city",
                                    "value": "aedjxa",
                                    "type": "text",
                                    "description": "validation.max."
                                },
                                {
                                    "key": "country",
                                    "value": "BJ",
                                    "type": "text",
                                    "description": "Code pays ISO alpha-2."
                                },
                                {
                                    "key": "profession",
                                    "value": "izxgnx",
                                    "type": "text",
                                    "description": "validation.max."
                                },
                                {
                                    "key": "status",
                                    "value": "pending",
                                    "type": "text",
                                    "description": "Statut."
                                },
                                {
                                    "key": "group_id",
                                    "value": "",
                                    "type": "text",
                                    "description": "UUID du groupe."
                                },
                                {
                                    "key": "sponsor_id",
                                    "value": "4b9c5595-1c58-3e6a-9a54-8e9361992634",
                                    "type": "text",
                                    "description": "validation.uuid The <code>id<\/code> of an existing record in the members table."
                                },
                                {
                                    "key": "joined_at",
                                    "value": "2026-05-04T13:50:09",
                                    "type": "text",
                                    "description": "validation.date."
                                },
                                {
                                    "key": "notes",
                                    "value": "architecto",
                                    "type": "text",
                                    "description": ""
                                },
                                {
                                    "key": "photo",
                                    "src": [],
                                    "type": "file"
                                },
                                {
                                    "key": "id_card",
                                    "src": [],
                                    "type": "file"
                                }
                            ]
                        },
                        "description": "Cr\u00e9e un nouveau membre. Le num\u00e9ro de membre est g\u00e9n\u00e9r\u00e9 automatiquement.\nEnvoyer les fichiers en multipart\/form-data."
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "D\u00e9tail d'un membre",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du membre."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Modifier un membre",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du membre."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "multipart\/form-data"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "formdata",
                            "formdata": [
                                {
                                    "key": "first_name",
                                    "value": "vwgshl",
                                    "type": "text",
                                    "description": "validation.max."
                                },
                                {
                                    "key": "last_name",
                                    "value": "zaedjx",
                                    "type": "text",
                                    "description": "validation.max."
                                },
                                {
                                    "key": "email",
                                    "value": "rosenbaum.javonte@example.com",
                                    "type": "text",
                                    "description": "validation.email validation.max."
                                },
                                {
                                    "key": "phone",
                                    "value": "xgnxor",
                                    "type": "text",
                                    "description": "validation.max."
                                },
                                {
                                    "key": "gender",
                                    "value": "F",
                                    "type": "text",
                                    "description": ""
                                },
                                {
                                    "key": "birth_date",
                                    "value": "2026-03-12",
                                    "type": "text",
                                    "description": "validation.date validation.before."
                                },
                                {
                                    "key": "address",
                                    "value": "wgshlz",
                                    "type": "text",
                                    "description": "validation.max."
                                },
                                {
                                    "key": "city",
                                    "value": "aedjxa",
                                    "type": "text",
                                    "description": "validation.max."
                                },
                                {
                                    "key": "country",
                                    "value": "uu",
                                    "type": "text",
                                    "description": "validation.size."
                                },
                                {
                                    "key": "profession",
                                    "value": "izxgnx",
                                    "type": "text",
                                    "description": "validation.max."
                                },
                                {
                                    "key": "group_id",
                                    "value": "5b0c0231-0539-3fcd-86ff-38b36e835b89",
                                    "type": "text",
                                    "description": "validation.uuid The <code>id<\/code> of an existing record in the member_groups table."
                                },
                                {
                                    "key": "sponsor_id",
                                    "value": "4b9c5595-1c58-3e6a-9a54-8e9361992634",
                                    "type": "text",
                                    "description": "validation.uuid The <code>id<\/code> of an existing record in the members table. Must not be one of <code><\/code>."
                                },
                                {
                                    "key": "joined_at",
                                    "value": "2026-05-04T13:50:09",
                                    "type": "text",
                                    "description": "validation.date."
                                },
                                {
                                    "key": "notes",
                                    "value": "architecto",
                                    "type": "text",
                                    "description": ""
                                },
                                {
                                    "key": "photo",
                                    "src": [],
                                    "type": "file"
                                },
                                {
                                    "key": "id_card",
                                    "src": [],
                                    "type": "file"
                                },
                                {
                                    "key": "_method",
                                    "value": "PUT",
                                    "type": "text"
                                }
                            ]
                        },
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Supprimer un membre (soft delete)",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du membre."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Restaurer un membre supprim\u00e9",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/:id\/restore",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/:id\/restore",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du membre."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Changer le statut d'un membre",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/:id\/status",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/:id\/status",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du membre."
                                }
                            ]
                        },
                        "method": "PUT",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"status\":\"active\",\"reason\":\"Cotisations \u00e0 jour\"}"
                        },
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "T\u00e9l\u00e9charger la carte membre PDF",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/:id\/card",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/:id\/card",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du membre."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "G\u00e9n\u00e8re et retourne la carte membre au format PDF (A6 paysage).\nLe QR code int\u00e9gr\u00e9 pointe vers l'endpoint de v\u00e9rification publique."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "file {\"description\": \"Fichier PDF de la carte membre\"}",
                            "name": "Carte PDF"
                        }
                    ]
                },
                {
                    "name": "R\u00e9g\u00e9n\u00e9rer le token QR code de la carte",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/members\/:id\/card\/regenerate",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/members\/:id\/card\/regenerate",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "550e8400-e29b-41d4-a716-446655440000",
                                    "description": "UUID du membre."
                                }
                            ]
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "X-Tenant-Slug",
                                "value": "demo"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Invalide l'ancien QR code et g\u00e9n\u00e8re un nouveau token."
                    },
                    "response": [
                        {
                            "header": [
                                {
                                    "key": "cache-control",
                                    "value": "no-cache, private"
                                },
                                {
                                    "key": "content-type",
                                    "value": "application\/json"
                                },
                                {
                                    "key": "access-control-allow-origin",
                                    "value": "*"
                                }
                            ],
                            "code": 500,
                            "body": "{\"success\":false,\"message\":\"Erreur serveur.\",\"data\":null,\"errors\":[],\"meta\":{\"timestamp\":\"2026-05-04T13:50:09+00:00\",\"version\":\"v1\"}}",
                            "name": ""
                        }
                    ]
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "Authorization",
                "type": "string"
            }
        ]
    }
}