{
	"info": {
		"_postman_id": "b2b-v2-api-collection",
		"name": "Terasend B2B API",
		"description": "Collection API Laravel (Sanctum) — Auth + KYC.\n\n**Mise à jour** : ce fichier est versionné dans le dépôt ; ajouter les nouvelles routes ici au fil de l’évolution du backend.\n\n**Variables de collection** :\n- `base_url` : URL du serveur (ex. `http://127.0.0.1:8000`)\n- `token` : rempli automatiquement après Register / Login (script de test)\n\n**Header** : `Accept: application/json` sur toutes les requêtes.",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"variable": [
		{
			"key": "base_url",
			"value": "http://127.0.0.1:8000"
		},
		{
			"key": "token",
			"value": ""
		},
		{
			"key": "kyc_document_id",
			"value": "1"
		}
	],
	"item": [
		{
			"name": "Auth",
			"item": [
				{
					"name": "Register",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"// Enregistre le token Sanctum pour les requêtes suivantes",
									"if (pm.response.code === 201 || pm.response.code === 200) {",
									"    try {",
									"        const json = pm.response.json();",
									"        if (json.data && json.data.token) {",
									"            pm.collectionVariables.set('token', json.data.token);",
									"        }",
									"    } catch (e) {}",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"name\": \"Jean Dupont\",\n    \"email\": \"jean@example.com\",\n    \"password\": \"motdepasse1A\",\n    \"password_confirmation\": \"motdepasse1A\",\n    \"phone\": null,\n    \"type\": \"particulier\",\n    \"pays\": \"SN\"\n}"
						},
						"url": "{{base_url}}/api/v1/auth/register",
						"description": "Crée un compte et retourne `user` + `token` (Bearer)."
					},
					"response": []
				},
				{
					"name": "Login",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"if (pm.response.code === 200) {",
									"    try {",
									"        const json = pm.response.json();",
									"        if (json.data && json.data.token) {",
									"            pm.collectionVariables.set('token', json.data.token);",
									"        }",
									"    } catch (e) {}",
									"}"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"email\": \"jean@example.com\",\n    \"password\": \"motdepasse1A\"\n}"
						},
						"url": "{{base_url}}/api/v1/auth/login",
						"description": "Connexion ; invalide les anciens tokens côté serveur et en émet un nouveau."
					},
					"response": []
				},
				{
					"name": "Logout",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": "{{base_url}}/api/v1/auth/logout",
						"description": "Révoque le token Bearer courant."
					},
					"response": []
				},
				{
					"name": "Me",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": "{{base_url}}/api/v1/auth/me",
						"description": "Profil utilisateur authentifié."
					},
					"response": []
				}
			]
		},
		{
			"name": "KYC",
			"item": [
				{
					"name": "Status",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": "{{base_url}}/api/v1/kyc/status",
						"description": "Résumé : `kyc_status` + nombre de pièces déposées."
					},
					"response": []
				},
				{
					"name": "List documents",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": "{{base_url}}/api/v1/kyc/documents",
						"description": "Liste des pièces KYC de l'utilisateur (statut, can_replace, download_path)."
					},
					"response": []
				},
				{
					"name": "Download document",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "*/*"
							}
						],
						"url": "{{base_url}}/api/v1/kyc/documents/{{kyc_document_id}}/download",
						"description": "Télécharge le fichier d'une pièce déposée. Définir `kyc_document_id` (id dans List documents)."
					},
					"response": []
				},
				{
					"name": "Upload document",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "formdata",
							"formdata": [
								{
									"key": "type",
									"value": "cni",
									"type": "text",
									"description": "cni | passeport | ninea | rccm | autre"
								},
								{
									"key": "file",
									"type": "file",
									"src": [],
									"description": "PDF, JPG ou PNG (max 10 Mo)"
								}
							]
						},
						"url": "{{base_url}}/api/v1/kyc/documents",
						"description": "Multipart : `type` + `file`. Crée la pièce ou remplace une pièce en attente / rejetée du même type (réponse 200 si remplacement, 201 si création)."
					},
					"response": []
				}
			]
		},
		{
			"name": "Admin KYC",
			"description": "Réservé aux comptes `role: admin` (même Bearer Sanctum après login admin).",
			"item": [
				{
					"name": "Queue",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": "{{base_url}}/api/v1/admin/kyc/queue?statut=en_attente&per_page=20",
						"description": "File paginée. Query : `statut` (défaut en_attente, ou `all`, `approuve`, `rejete`), `page`, `per_page`."
					},
					"response": []
				},
				{
					"name": "Approve document",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": "{{base_url}}/api/v1/admin/kyc/documents/{{kyc_document_id}}/approve",
						"description": "Approuve une pièce `en_attente`. Définir `kyc_document_id` (réponse Queue)."
					},
					"response": []
				},
				{
					"name": "Reject document",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "POST",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							},
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"commentaire\": \"Document illisible, merci d'envoyer une photo plus nette.\"\n}"
						},
						"url": "{{base_url}}/api/v1/admin/kyc/documents/{{kyc_document_id}}/reject",
						"description": "Rejette avec motif obligatoire (visible côté utilisateur)."
					},
					"response": []
				},
				{
					"name": "Download document (admin)",
					"request": {
						"auth": {
							"type": "bearer",
							"bearer": [
								{
									"key": "token",
									"value": "{{token}}",
									"type": "string"
								}
							]
						},
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "*/*"
							}
						],
						"url": "{{base_url}}/api/v1/admin/kyc/documents/{{kyc_document_id}}/download",
						"description": "Téléchargement côté administrateur (même fichier que l’utilisateur)."
					},
					"response": []
				}
			]
		}
	]
}
