# API revendeur v1 ## Authentification Une clé est créée depuis le portail après une connexion Telegram vérifiée : ```http POST /api/v1/keys Cookie: tgsmm_session=... ``` La réponse contient la clé une seule fois. Elle doit être conservée par le revendeur. Les appels API utilisent : ```http Authorization: Bearer tgsmm_... ``` La révocation est immédiate : ```http DELETE /api/v1/keys/{key_id} Cookie: tgsmm_session=... ``` ## Routes - `GET /api/v1/catalog` - `GET /api/v1/catalog/products/{product_id}` - `POST /api/v1/orders` - `GET /api/v1/orders` - `GET /api/v1/orders/{order_ref}` - `GET /api/v1/orders/{order_ref}/download` - `GET /api/v1/orders/{order_ref}/login-code` - `POST /api/v1/orders/{order_ref}/login-code/refresh` Un achat doit toujours avoir une clé d’idempotence : ```http Idempotency-Key: panier-unique-123 Content-Type: application/json ``` ```json {"productId":"123","quantity":1} ``` La même clé avec une requête différente est refusée. Une nouvelle tentative avec le même contenu renvoie la réponse déjà enregistrée et ne débite pas le compte une seconde fois. ## Sécurité et quotas Chaque clé est liée à l’utilisateur Telegram qui l’a créée. Les commandes API sont liées à cette clé et à cet utilisateur. Une clé ne peut donc pas voir les commandes d’un autre compte ou celles créées par une autre clé. Les tokens du fournisseur ne sont jamais acceptés dans les paramètres de l’API. Les codes de connexion sont résolus côté serveur depuis la commande achetée. Les quotas actuels sont appliqués par clé et par catégorie de route ; un dépassement renvoie `429`. Les archives livrées sont contrôlées avant extraction : taille maximale, nombre maximal de fichiers, taille décompressée cumulée et chemins dangereux. Les journaux ne contiennent pas de clés ni de tokens. Le webhook entrant NowPayments reste séparé et signé par son secret IPN. Les webhooks sortants revendeur ne sont pas nécessaires pour cette v1 ; le revendeur peut interroger le statut de sa commande.