{"openapi":"3.1.0","info":{"title":"Sigmabox API","version":"1.0.0","description":"API pour la gestion de signatures email, campagnes UTM, validation d'emails, liens courts et analytics.","contact":{"email":"contact@sigmabox.fr","url":"https://sigmabox.fr"},"termsOfService":"https://sigmabox.fr/legal"},"servers":[{"url":"https://api.sigmabox.fr","description":"Production"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Clé API au format sk_live_xxx"}},"schemas":{"SuccessResponse":{"type":"object","required":["success","data"],"properties":{"success":{"type":"boolean","example":true},"data":{"type":"object","description":"Contenu de la réponse (varie selon l'endpoint)"}},"description":"Format standardisé pour toutes les réponses réussies"},"ErrorResponse":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","example":false},"error":{"type":"string","description":"Message d'erreur descriptif"}},"description":"Format standardisé pour toutes les réponses d'erreur"},"RateLimitError":{"type":"object","required":["success","error"],"properties":{"success":{"type":"boolean","example":false},"error":{"type":"string","example":"Trop de requêtes. Veuillez réessayer plus tard."}},"description":"Erreur retournée lorsque le rate limit est atteint (429). Headers inclus : Retry-After, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset"},"Pagination":{"type":"object","properties":{"page":{"type":"integer"},"limit":{"type":"integer"},"totalCount":{"type":"integer"},"totalPages":{"type":"integer"}}},"Signature":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","nullable":true},"filename":{"type":"string"},"imageUrl":{"type":"string","format":"uri"},"isActive":{"type":"boolean"},"isBlurred":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time","nullable":true},"organizationId":{"type":"string","format":"uuid","nullable":true}}},"Campaign":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"utmSource":{"type":"string"},"utmMedium":{"type":"string"},"utmCampaign":{"type":"string"},"utmContent":{"type":"string","nullable":true},"isActive":{"type":"boolean"},"emailsSent":{"type":"integer"},"endedAt":{"type":"string","format":"date-time","nullable":true},"signatureId":{"type":"string","format":"uuid","nullable":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"ShortLink":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"shortCode":{"type":"string"},"shortUrl":{"type":"string","format":"uri"},"originalUrl":{"type":"string","format":"uri"},"title":{"type":"string","nullable":true},"clickCount":{"type":"integer"},"uniqueClickCount":{"type":"integer"},"isActive":{"type":"boolean"},"expiresAt":{"type":"string","format":"date-time","nullable":true},"createdAt":{"type":"string","format":"date-time"}}},"EmailValidation":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"email":{"type":"string","format":"email"},"status":{"type":"string","enum":["VALID","INVALID","RISKY","UNKNOWN"]},"isValid":{"type":"boolean"},"isDisposable":{"type":"boolean"},"isCatchAll":{"type":"boolean"},"isRole":{"type":"boolean"},"score":{"type":"integer","nullable":true},"provider":{"type":"string","nullable":true},"validatedAt":{"type":"string","format":"date-time"}}},"Organization":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"slug":{"type":"string","nullable":true},"siret":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"website":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"createdAt":{"type":"string","format":"date-time"}}}}},"paths":{"/me":{"get":{"tags":["Profil"],"summary":"Informations du compte","responses":{"200":{"description":"Profil utilisateur et informations de la clé API","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/signatures":{"get":{"tags":["Signatures"],"summary":"Lister les signatures","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"limit","in":"query","schema":{"type":"integer","default":20,"maximum":100}}],"responses":{"200":{"description":"Liste paginée des signatures","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"post":{"tags":["Signatures"],"summary":"Upload une signature","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary","description":"Image PNG, JPEG, GIF ou WebP (max 10MB)"},"name":{"type":"string","maxLength":100,"description":"Nom de la signature"}}}}}},"responses":{"201":{"description":"Signature créée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Fichier invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"Fichier trop volumineux","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/signatures/{id}":{"get":{"tags":["Signatures"],"summary":"Détail d'une signature","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Détail de la signature","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"patch":{"tags":["Signatures"],"summary":"Modifier une signature","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"isActive":{"type":"boolean"},"isBlurred":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Signature modifiée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Données invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"delete":{"tags":["Signatures"],"summary":"Supprimer une signature","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Supprimée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/signatures/{id}/toggle-active":{"post":{"tags":["Signatures"],"summary":"Activer/désactiver une signature","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["isActive"],"properties":{"isActive":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Statut modifié","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/signatures/{id}/download":{"get":{"tags":["Signatures"],"summary":"Télécharger l'image de la signature","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Fichier image","content":{"image/*":{"schema":{"type":"string","format":"binary"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/campaigns":{"get":{"tags":["Campagnes"],"summary":"Lister les campagnes","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"limit","in":"query","schema":{"type":"integer","default":20}},{"name":"search","in":"query","schema":{"type":"string"}},{"name":"isActive","in":"query","schema":{"type":"boolean"}},{"name":"signatureId","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Liste paginée des campagnes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"post":{"tags":["Campagnes"],"summary":"Créer une campagne","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":3,"maxLength":100},"utmSource":{"type":"string"},"utmMedium":{"type":"string"},"utmCampaign":{"type":"string"},"utmContent":{"type":"string"},"signatureId":{"type":"string"},"emailsSent":{"type":"integer"}}}}}},"responses":{"201":{"description":"Campagne créée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Données invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Campagne dupliquée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/campaigns/{id}":{"get":{"tags":["Campagnes"],"summary":"Détail d'une campagne","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Détail campagne avec CTAs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"patch":{"tags":["Campagnes"],"summary":"Modifier une campagne","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"utmSource":{"type":"string"},"utmMedium":{"type":"string"},"utmCampaign":{"type":"string"},"isActive":{"type":"boolean"},"ended":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Campagne modifiée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Données invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"delete":{"tags":["Campagnes"],"summary":"Supprimer une campagne","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Supprimée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/campaigns/{id}/analytics":{"get":{"tags":["Campagnes"],"summary":"Analytics d'une campagne","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","schema":{"type":"integer","default":30,"maximum":365}}],"responses":{"200":{"description":"Vues, taux d'ouverture, répartition géographique","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/campaigns/export":{"get":{"tags":["Campagnes"],"summary":"Export CSV des campagnes","parameters":[{"name":"days","in":"query","schema":{"type":"integer","default":30}},{"name":"campaignIds","in":"query","schema":{"type":"string","description":"IDs séparés par virgules"}},{"name":"signatureIds","in":"query","schema":{"type":"string","description":"IDs séparés par virgules"}}],"responses":{"200":{"description":"Fichier CSV","content":{"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/email-validation/validate":{"post":{"tags":["Validation Email"],"summary":"Valider un email","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}}}}}},"responses":{"200":{"description":"Résultat de validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Email invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"Crédits insuffisants","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/email-validation/history":{"get":{"tags":["Validation Email"],"summary":"Historique des validations","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"limit","in":"query","schema":{"type":"integer","default":50}},{"name":"search","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string","description":"VALID,INVALID,RISKY,UNKNOWN"}}],"responses":{"200":{"description":"Liste paginée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/email-validation/bulk":{"get":{"tags":["Validation Email"],"summary":"Lister les validations en masse","responses":{"200":{"description":"Liste des batches","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/email-validation/bulk/{id}":{"get":{"tags":["Validation Email"],"summary":"Détail d'un batch de validation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"status","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Status et résultats du batch","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Batch non trouvé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/email-validation/credits":{"get":{"tags":["Validation Email"],"summary":"Solde des crédits de validation","responses":{"200":{"description":"Crédits disponibles","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/email-validation/bulk/{id}/export":{"get":{"tags":["Validation Email"],"summary":"Export résultats validation bulk (CSV ou liste emails)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"format","in":"query","schema":{"type":"string","enum":["csv","emails"],"default":"csv"}},{"name":"filter","in":"query","schema":{"type":"string","description":"VALID,INVALID,RISKY,UNKNOWN,ERROR"}}],"responses":{"200":{"description":"Fichier CSV ou liste d'emails (text/plain)","content":{"text/csv":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Batch non trouvé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/short-links":{"get":{"tags":["Liens Courts"],"summary":"Lister les liens courts","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"limit","in":"query","schema":{"type":"integer","default":20}},{"name":"campaignId","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Liste paginée avec shortUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"post":{"tags":["Liens Courts"],"summary":"Créer un lien court","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["originalUrl"],"properties":{"originalUrl":{"type":"string","format":"uri"},"title":{"type":"string"},"campaignId":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}}}}}},"responses":{"201":{"description":"Lien créé avec shortUrl","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"URL invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/short-links/{id}":{"get":{"tags":["Liens Courts"],"summary":"Détail d'un lien court","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Détail avec stats","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"patch":{"tags":["Liens Courts"],"summary":"Modifier un lien court","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"isActive":{"type":"boolean"},"title":{"type":"string"},"expiresAt":{"type":"string"}}}}}},"responses":{"200":{"description":"Lien modifié","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Données invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"delete":{"tags":["Liens Courts"],"summary":"Supprimer un lien court","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Supprimé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/short-links/{id}/analytics":{"get":{"tags":["Liens Courts"],"summary":"Analytics d'un lien court","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","schema":{"type":"integer","default":30}}],"responses":{"200":{"description":"Clics, pays, devices, navigateurs, OS","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/short-links/{id}/export":{"get":{"tags":["Liens Courts"],"summary":"Export CSV analytics d'un lien court","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","schema":{"type":"integer","default":30}}],"responses":{"200":{"description":"Fichier CSV (Date, Clics, Visiteurs uniques, Pays, Appareil, Navigateur, Source)","content":{"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/short-links/overview/export":{"get":{"tags":["Liens Courts"],"summary":"Export CSV overview liens courts","parameters":[{"name":"days","in":"query","schema":{"type":"integer","default":30}}],"responses":{"200":{"description":"Fichier CSV","content":{"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/analytics/overview":{"get":{"tags":["Analytics"],"summary":"Vue d'ensemble analytics","parameters":[{"name":"days","in":"query","schema":{"type":"integer","default":30,"maximum":365}}],"responses":{"200":{"description":"Vues totales, uniques, par signature, par pays","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/analytics/signatures/{id}":{"get":{"tags":["Analytics"],"summary":"Analytics d'une signature","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","schema":{"type":"integer","default":30}}],"responses":{"200":{"description":"Vues, uniques, pays, time series journalière","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Signature non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/analytics/overview/export":{"get":{"tags":["Analytics"],"summary":"Export CSV analytics overview","parameters":[{"name":"days","in":"query","schema":{"type":"integer","default":30}}],"responses":{"200":{"description":"Fichier CSV (Date, Signature, Vues, Ouvertures uniques, Pays, OS, Client mail)","content":{"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/analytics/signatures/{id}/export":{"get":{"tags":["Analytics"],"summary":"Export CSV analytics d'une signature","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"days","in":"query","schema":{"type":"integer","default":30}}],"responses":{"200":{"description":"Fichier CSV","content":{"text/csv":{"schema":{"type":"string"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Signature non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/organizations":{"get":{"tags":["Organisations"],"summary":"Lister les organisations","responses":{"200":{"description":"Liste avec compteurs de ressources","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"post":{"tags":["Organisations"],"summary":"Créer une organisation (Holding requis)","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","maxLength":200},"siret":{"type":"string"},"address":{"type":"string"},"website":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"201":{"description":"Organisation créée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Données invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Holding requis","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/organizations/{id}":{"get":{"tags":["Organisations"],"summary":"Détail d'une organisation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Détail avec compteurs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"patch":{"tags":["Organisations"],"summary":"Modifier une organisation","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Organisation modifiée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Holding requis","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}},"delete":{"tags":["Organisations"],"summary":"Supprimer une organisation","description":"Requiert une confirmation : fournir le nom exact de l'organisation via le body { confirm } ou le query param ?confirm=<nom>. Protection anti-suppression accidentelle.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"confirm","in":"query","required":false,"schema":{"type":"string"},"description":"Nom exact de l'organisation (alternative au body)"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"string","description":"Nom exact de l'organisation à supprimer"}}}}}},"responses":{"200":{"description":"Supprimée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Confirmation manquante ou invalide","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Holding requis","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/organizations/transfer":{"post":{"tags":["Organisations"],"summary":"Transférer une ressource entre organisations (Holding requis)","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["model","id"],"properties":{"model":{"type":"string","enum":["signature","shortLink","campaign","bulkEmailValidation"]},"id":{"type":"string"},"targetOrganizationId":{"type":"string","nullable":true}}}}}},"responses":{"200":{"description":"Transféré","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Données invalides","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Holding requis","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Ressource ou organisation non trouvée","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/credits/balance":{"get":{"tags":["Crédits"],"summary":"Solde des crédits et quotas","responses":{"200":{"description":"Crédits email, liens, signatures par tier","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}},"/credits/purchases":{"get":{"tags":["Crédits"],"summary":"Historique des achats de crédits","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"limit","in":"query","schema":{"type":"integer","default":20}}],"responses":{"200":{"description":"Liste paginée des achats","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"401":{"description":"Clé API invalide ou manquante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit dépassé","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Secondes avant de pouvoir réessayer"},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Nombre max de requêtes par fenêtre"},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requêtes restantes"},"X-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Timestamp Unix de réinitialisation"}}}}}}},"tags":[{"name":"Profil","description":"Informations du compte"},{"name":"Signatures","description":"Gestion des signatures email"},{"name":"Campagnes","description":"Campagnes UTM et tracking"},{"name":"Validation Email","description":"Validation unitaire et en masse"},{"name":"Liens Courts","description":"Liens courts et QR codes"},{"name":"Analytics","description":"Statistiques et rapports"},{"name":"Organisations","description":"Gestion multi-entreprises (Holding)"},{"name":"Crédits","description":"Solde et achats de crédits"}]}