{"openapi":"3.1.0","info":{"title":"WhatsApp Link Guard API","version":"1.0.0","description":"API REST v1 multi-session du bot WhatsApp. Les 65 opérations explicites sont décrites avec leurs paramètres, corps JSON, statuts, schémas de réponse et prérequis d’abonnement. Pour les comptes standards, les clés API sont suspendues à l’expiration du plan API puis automatiquement réactivées lors de son renouvellement ; les administrateurs conservent leur accès."},"servers":[{"url":"/api/v1","description":"Serveur courant"}],"tags":[{"name":"Documentation","description":"Découverte et formats publics de documentation."},{"name":"Service","description":"Santé et disponibilité du serveur."},{"name":"Authentification","description":"Comptes, jetons et identité courante."},{"name":"Clés API","description":"Cycle de vie des clés privées du compte."},{"name":"Configuration","description":"Préférences techniques du compte."},{"name":"Sessions","description":"Cycle de vie des connexions WhatsApp."},{"name":"Messages","description":"Envoi unitaire, média et envoi multiple."},{"name":"Tâches","description":"Suivi des travaux asynchrones."},{"name":"Groupes","description":"Groupes WhatsApp et participants."},{"name":"Réglages","description":"Configuration de la modération."},{"name":"Diagnostic","description":"Statistiques, journaux, appels et limites."},{"name":"Modération","description":"Scans et avertissements."},{"name":"Exemptions","description":"Exceptions de groupes, motifs, utilisateurs et administrateurs."},{"name":"Blocages","description":"Blocages temporaires liés aux appels."},{"name":"Menus","description":"Menus interactifs et envoi dans les groupes."},{"name":"Annonces","description":"Brouillons, publication et statistiques de diffusion."}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"opaque","description":"Jeton de compte temporaire, ou clé wabot_ utilisée comme Bearer lorsque l’opération l’autorise."},"apiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Clé d’intégration durable. Pour un compte standard, elle exige un plan API actif, est suspendue à l’expiration puis réactivée automatiquement au renouvellement. Les administrateurs conservent leur accès. Ne placez jamais la clé dans l’URL."},"cookieAuth":{"type":"apiKey","in":"cookie","name":"authToken","description":"Cookie de connexion du portail privé, envoyé automatiquement en même origine."}},"parameters":{"RequestId":{"name":"X-Request-Id","in":"header","required":false,"description":"Identifiant de corrélation facultatif, tronqué à 128 caractères. Le serveur en génère un s’il est absent.","schema":{"type":"string","maxLength":128},"example":"req-client-001"}},"headers":{"RequestId":{"description":"Identifiant de corrélation effectif de la requête.","schema":{"type":"string","maxLength":128},"example":"req-client-001"},"CacheControl":{"description":"Les réponses de l’API ne doivent pas être mises en cache.","schema":{"type":"string","const":"no-store"},"example":"no-store"}},"schemas":{"ApiMeta":{"type":"object","properties":{"requestId":{"type":"string","description":"Identifiant de corrélation de la requête.","example":"req_01JABCDEF1234567890"},"timestamp":{"type":"string","description":"Date de la réponse en UTC.","example":"2026-07-18T12:00:00.000Z","format":"date-time"},"limit":{"type":"integer","description":"Limite appliquée aux listes bornées.","example":50,"minimum":1,"maximum":200},"returned":{"type":"integer","description":"Nombre d’éléments retournés.","example":12,"minimum":0}},"required":["requestId","timestamp"],"additionalProperties":true},"ErrorEnvelope":{"type":"object","properties":{"success":{"type":"boolean","const":false,"example":false},"error":{"type":"object","properties":{"code":{"type":"string","description":"Code d’erreur stable et exploitable par un programme.","example":"VALIDATION_ERROR"},"message":{"type":"string","description":"Message d’erreur lisible.","example":"Le champ demandé est invalide."},"details":{"type":"object","properties":{},"description":"Détails facultatifs de validation.","additionalProperties":true}},"required":["code","message"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","error","meta"]},"User":{"type":"object","properties":{"username":{"type":"string","description":"Nom du compte.","example":"@alice"},"isAdmin":{"type":"boolean","description":"Indique si le compte est administrateur.","example":false},"mustChangePassword":{"type":"boolean","description":"Indique si le mot de passe doit être remplacé.","example":false}},"required":["username","isAdmin"]},"AuthResult":{"type":"object","properties":{"token":{"type":"string","description":"Jeton Bearer opaque.","example":"token_opaque_a_conserver"},"tokenType":{"type":"string","const":"Bearer","example":"Bearer"},"expiresAt":{"type":"string","description":"Expiration du jeton.","example":"2026-07-19T12:00:00.000Z","format":"date-time"},"user":{"$ref":"#/components/schemas/User"}},"required":["token","tokenType","expiresAt","user"]},"ApiKey":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant de la clé.","example":"a76b94c0-2d9a-42ec-a9c3-778c919d1ca2"},"name":{"type":"string","description":"Nom descriptif de l’intégration.","example":"CRM production"},"prefix":{"type":"string","description":"Préfixe public permettant d’identifier la clé.","example":"2d4d7e31b9a194a0"},"createdAt":{"type":"string","description":"Date de création.","example":"2026-07-18T12:00:00.000Z","format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time","description":"Date du dernier usage.","example":null},"revokedAt":{"type":["string","null"],"format":"date-time","description":"Date de révocation.","example":null},"rotatedFromId":{"type":["string","null"],"description":"Identifiant de l’ancienne clé en cas de rotation.","example":null}},"required":["id","name","prefix","createdAt","lastUsedAt","revokedAt"]},"SessionEntitlement":{"type":"object","properties":{"active":{"type":"boolean","description":"Indique si cette session est couverte par un abonnement actif.","example":true},"operational":{"type":"boolean","description":"Indique si les opérations WhatsApp sont autorisées.","example":true},"status":{"type":"string","enum":["active","uncovered","expired","revoked","inactive","none"],"example":"active"},"source":{"type":"string","description":"Origine de la couverture.","example":"subscription"},"planId":{"type":["string","null"],"example":"api"},"planName":{"type":["string","null"],"example":"API"},"expiresAt":{"type":["string","null"],"format":"date-time","example":"2026-08-19T12:00:00.000Z"},"daysRemaining":{"type":"integer","description":"Jours restants, 0 si la session est suspendue.","example":31,"minimum":0},"maxSessions":{"type":["integer","null"],"minimum":0,"example":20},"apiAccess":{"type":"boolean","description":"Indique si le plan du compte inclut l’API.","example":true}},"required":["active","operational","status","source","planId","planName","expiresAt","daysRemaining","maxSessions","apiAccess"]},"Session":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant de session.","example":"session_01JABCDEF1234567890"},"name":{"type":"string","description":"Nom de la session.","example":"Boutique Douala"},"status":{"type":"string","enum":["pending","qr","connected","disconnected","stopped","auth_failure"],"example":"connected"},"phoneNumber":{"type":["string","null"],"example":"237690000000"},"pushName":{"type":["string","null"],"example":"Boutique"},"createdAt":{"type":["string","null"],"format":"date-time","example":"2026-07-18T12:00:00.000Z"},"hasQr":{"type":"boolean","description":"Indique si un QR est actuellement disponible.","example":false},"active":{"type":"boolean","description":"Indique si cette session est la session active du processus.","example":true},"subscription":{"oneOf":[{"$ref":"#/components/schemas/SessionEntitlement"},{"type":"null"}],"description":"Couverture de cette session. Une session listée peut être non couverte et donc non opérationnelle."},"ownerUsername":{"type":["string","null"],"description":"Propriétaire, visible uniquement par un administrateur.","example":"@alice"}},"required":["id","name","status","phoneNumber","pushName","createdAt","hasQr","active"]},"Job":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant de tâche.","example":"job_01JABCDEF1234567890"},"type":{"type":"string","description":"Type de tâche.","example":"api-v1-message"},"status":{"type":"string","enum":["queued","running","completed","failed"],"example":"queued"},"total":{"type":"integer","description":"Nombre total d’éléments.","example":2,"minimum":0},"processed":{"type":"integer","description":"Nombre d’éléments traités.","example":0,"minimum":0},"sent":{"type":"integer","description":"Nombre d’envois réussis.","example":0,"minimum":0},"failed":{"type":"integer","description":"Nombre d’échecs.","example":0,"minimum":0},"message":{"type":"string","description":"État lisible de la tâche.","example":"En attente de démarrage"},"error":{"type":["string","null"],"example":null}},"required":["id","type","status"]},"Group":{"type":"object","properties":{"id":{"type":"string","description":"JID du groupe.","example":"120363000000000000@g.us"},"name":{"type":"string","description":"Nom du groupe.","example":"Clients VIP"},"participants":{"type":"integer","description":"Nombre de participants.","example":42,"minimum":0},"participantsCount":{"type":"integer","description":"Alias du nombre de participants.","example":42,"minimum":0},"botIsAdmin":{"type":"boolean","description":"Indique si le bot administre le groupe.","example":true},"moderationExcluded":{"type":"boolean","description":"Indique si le groupe est exclu de la modération.","example":false},"isExcluded":{"type":"boolean","description":"Alias de moderationExcluded.","example":false},"welcomeEnabled":{"type":"boolean","description":"Indique si le message de bienvenue est activé.","example":true}},"required":["id","name","participantsCount","botIsAdmin","isExcluded","welcomeEnabled"]},"Participant":{"type":"object","properties":{"jid":{"type":["string","null"],"example":"237690000000@s.whatsapp.net"},"lid":{"type":["string","null"],"example":null},"phoneNumber":{"type":["string","null"],"example":"237690000000"},"number":{"type":["string","null"],"example":"237690000000"},"displayNumber":{"type":["string","null"],"example":"+237 690 00 00 00"},"name":{"type":["string","null"],"example":"Alice"},"nameAvailable":{"type":"boolean","description":"Indique si un nom a été trouvé.","example":true},"username":{"type":["string","null"],"example":"alice"},"role":{"type":"string","description":"Rôle dans le groupe.","example":"admin"},"isAdmin":{"type":"boolean","description":"Administrateur du groupe.","example":true},"isSuperAdmin":{"type":"boolean","description":"Créateur ou super administrateur.","example":false}},"additionalProperties":true},"Settings":{"type":"object","properties":{"maxWarnings":{"type":"integer","description":"Avertissements avant action.","example":3,"minimum":1,"maximum":10},"warningExpiryHours":{"type":"integer","description":"Durée de validité des avertissements.","example":24,"minimum":1,"maximum":168},"scanLimit":{"type":"integer","description":"Limite de messages analysés.","example":100,"minimum":1,"maximum":1000},"autoScan":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Active le scan automatique.","example":true},"intervalHours":{"type":"integer","description":"Intervalle entre les scans.","example":24,"minimum":1,"maximum":168}}},"delays":{"type":"object","properties":{"actionMinMs":{"type":"integer","description":"Délai minimum entre actions.","example":2000,"minimum":0,"maximum":60000},"actionMaxMs":{"type":"integer","description":"Délai maximum entre actions.","example":5000,"minimum":0,"maximum":120000},"groupMinMs":{"type":"integer","description":"Délai minimum entre groupes.","example":5000,"minimum":0,"maximum":300000},"groupMaxMs":{"type":"integer","description":"Délai maximum entre groupes.","example":15000,"minimum":0,"maximum":600000}}},"welcome":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Active le message de bienvenue.","example":true},"message":{"type":"string","description":"Texte de bienvenue.","example":"Bienvenue @user !","minLength":1,"maxLength":4096}}},"calls":{"type":"object","properties":{"rejectEnabled":{"type":"boolean","description":"Rejette les appels entrants.","example":true},"spamThreshold":{"type":"integer","description":"Seuil d’appels considéré comme spam.","example":4,"minimum":1,"maximum":50},"spamWindowMinutes":{"type":"integer","description":"Fenêtre du seuil de spam.","example":10,"minimum":1,"maximum":1440},"blockDurationMinutes":{"type":"integer","description":"Durée du blocage temporaire.","example":30,"minimum":1,"maximum":10080}}},"deleteStatusMentions":{"type":"boolean","description":"Supprime les mentions de statut détectées.","example":true}}},"ExemptionUser":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant WhatsApp.","example":"237690000000","maxLength":128},"aliases":{"type":"array","items":{"type":"string"},"description":"Autres identifiants reconnus."},"link":{"type":"boolean","description":"Exemption des liens.","example":true},"call":{"type":"boolean","description":"Exemption des appels.","example":false}},"required":["id"]},"Exemptions":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"string","maxLength":128,"pattern":"@g\\.us$"},"description":"Groupes exclus.","maxItems":500},"patterns":{"type":"array","items":{"type":"string","maxLength":120},"description":"Motifs de groupes exclus.","maxItems":100},"welcomeDisabledGroups":{"type":"array","items":{"type":"string","maxLength":128,"pattern":"@g\\.us$"},"description":"Groupes sans message de bienvenue.","maxItems":500},"users":{"type":"array","items":{"$ref":"#/components/schemas/ExemptionUser"},"description":"Utilisateurs exemptés.","maxItems":500},"adminsExempt":{"type":"boolean","description":"Exempte les administrateurs de groupe.","example":true}}},"MenuItem":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant de l’option.","example":"support"},"text":{"type":"string","description":"Texte du bouton.","example":"Parler au support"},"title":{"type":"string","description":"Titre d’une ligne de liste.","example":"Support"},"description":{"type":"string","description":"Description d’une ligne de liste.","example":"Contacter un conseiller"},"response":{"type":"string","description":"Réponse envoyée après sélection.","example":"Un conseiller vous répondra."},"nextMenu":{"type":["string","null"],"description":"Menu suivant.","example":null}}},"MenuSection":{"type":"object","properties":{"title":{"type":"string","description":"Titre de section.","example":"Services"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/MenuItem"},"description":"Lignes de la section.","maxItems":10}},"required":["rows"]},"Menu":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant du menu.","example":"menu_service_client","maxLength":128},"title":{"type":"string","description":"Titre du menu.","example":"Service client"},"description":{"type":"string","description":"Texte introductif.","example":"Choisissez une option"},"trigger":{"type":["string","null"],"description":"Un ou plusieurs déclencheurs séparés par virgule, point-virgule, barre ou nouvelle ligne.","example":"menu, aide"},"triggerMode":{"type":"string","enum":["exact","contains"],"default":"exact","example":"exact"},"type":{"type":"string","enum":["buttons","list"],"default":"buttons","example":"buttons"},"buttons":{"type":"array","items":{"$ref":"#/components/schemas/MenuItem"},"description":"Boutons du menu.","maxItems":10},"listSections":{"type":"array","items":{"$ref":"#/components/schemas/MenuSection"},"description":"Sections utilisées avec le type list."},"image":{"description":"Image facultative acceptée par le moteur de menu.","type":["string","null"],"example":null},"groupId":{"type":["string","null"],"description":"Groupe associé par défaut.","example":null},"enabled":{"type":"boolean","description":"Active le menu.","example":true,"default":true}}},"Announcement":{"type":"object","properties":{"id":{"type":"string","description":"Identifiant de l’annonce.","example":"ann_01JABCDEF1234567890"},"title":{"type":"string","description":"Titre.","example":"Fermeture exceptionnelle"},"content":{"type":"string","description":"Contenu.","example":"La boutique fermera à 16 h aujourd’hui.","maxLength":4096},"rawContent":{"type":"string","description":"Contenu source.","example":"La boutique fermera à 16 h aujourd’hui.","maxLength":4096},"groups":{"type":"array","items":{"type":"string","maxLength":128},"description":"Groupes cibles.","maxItems":500},"linkPreview":{"type":"boolean","description":"Active les aperçus de liens.","example":true},"sendAsHd":{"type":"boolean","description":"Envoie l’image en haute définition.","example":false},"status":{"type":"string","enum":["draft","publishing","published","failed"],"example":"draft"},"hasImage":{"type":"boolean","description":"Indique si une image est enregistrée.","example":false},"publishedAt":{"type":["string","null"],"format":"date-time","example":null}},"required":["id","title","content","groups","status","hasImage"],"additionalProperties":true},"RegisterRequest":{"type":"object","properties":{"username":{"type":"string","description":"Nom de compte, avec ou sans @.","example":"@alice","minLength":3,"maxLength":32,"pattern":"^@?[a-zA-Z0-9._-]{3,31}$"},"password":{"type":"string","description":"Mot de passe du compte.","example":"mot-de-passe-solide","minLength":6,"maxLength":256,"format":"password"},"securityQuestion":{"type":"string","description":"Question utilisée pour récupérer le compte.","example":"Nom de mon premier animal ?","minLength":3,"maxLength":200},"securityAnswer":{"type":"string","description":"Réponse à la question de sécurité.","example":"Milo","minLength":2,"maxLength":200,"format":"password"}},"required":["username","password","securityQuestion","securityAnswer"],"additionalProperties":false},"LoginRequest":{"type":"object","properties":{"username":{"type":"string","description":"Nom de compte.","example":"@alice","minLength":1,"maxLength":32},"password":{"type":"string","description":"Mot de passe.","example":"mot-de-passe-solide","minLength":1,"maxLength":256,"format":"password"}},"required":["username","password"],"additionalProperties":false},"CreateApiKeyRequest":{"type":"object","properties":{"name":{"type":"string","description":"Nom descriptif de l’intégration.","example":"CRM production","minLength":1,"maxLength":100}},"required":["name"],"additionalProperties":false},"DeveloperSettingsPayload":{"type":"object","properties":{"settings":{"type":"object","properties":{"defaultSessionId":{"type":["string","null"],"example":"session_01JABCDEF1234567890"},"baseUrl":{"type":"string","description":"URL de base calculée.","example":"http://localhost:3000/api/v1","format":"uri"},"corsOrigins":{"type":"array","items":{"type":"string"},"description":"Origines CORS autorisées."},"apiKeyHeader":{"type":"string","const":"X-API-Key","example":"X-API-Key"},"documentationUrl":{"type":"string","description":"Documentation web.","example":"/docs"},"markdownDocumentationUrl":{"type":"string","description":"Documentation Markdown.","example":"/api/v1/docs"},"openapiUrl":{"type":"string","description":"Contrat OpenAPI.","example":"/api/v1/openapi.json"},"updatedAt":{"type":["string","null"],"format":"date-time","example":null}}},"sessions":{"type":"array","items":{"$ref":"#/components/schemas/Session"},"description":"Sessions visibles."}},"required":["settings","sessions"]},"DeveloperSettingsRequest":{"type":"object","properties":{"defaultSessionId":{"type":["string","null"],"maxLength":128,"description":"Session proposée par défaut, chaîne vide ou null pour effacer.","example":"session_01JABCDEF1234567890"}},"required":["defaultSessionId"],"additionalProperties":false},"SubscriptionSummary":{"type":"object","properties":{"status":{"type":"string","description":"État persistant du plan.","example":"active"},"planId":{"type":["string","null"],"example":"api"},"planName":{"type":["string","null"],"example":"API"},"maxSessions":{"type":["integer","null"],"minimum":0,"example":20},"apiAccess":{"type":"boolean","description":"Le plan configuré inclut l’API.","example":true},"activatedAt":{"type":["string","null"],"format":"date-time","example":"2026-07-19T12:00:00.000Z"},"expiresAt":{"type":["string","null"],"format":"date-time","example":"2026-08-19T12:00:00.000Z"}},"required":["status","planId","planName","maxSessions","apiAccess","activatedAt","expiresAt"]},"AccountEntitlements":{"type":"object","properties":{"active":{"type":"boolean","description":"Indique si le plan du compte est actuellement actif.","example":true},"status":{"type":"string","description":"État calculé en tenant compte de la date d’expiration.","example":"active"},"source":{"type":"string","description":"Origine du droit : abonnement, administration ou accès libre.","example":"subscription"},"planId":{"type":["string","null"],"example":"api"},"planName":{"type":["string","null"],"example":"API"},"maxSessions":{"type":["integer","null"],"minimum":0,"example":20},"apiAccess":{"type":"boolean","description":"Accès développeur effectif ; false dès l’expiration.","example":true},"expiresAt":{"type":["string","null"],"format":"date-time","example":"2026-08-19T12:00:00.000Z"},"daysRemaining":{"type":"integer","description":"Jours restants.","example":31,"minimum":0}},"required":["active","status","source","planId","planName","maxSessions","apiAccess","expiresAt","daysRemaining"]},"UsagePayload":{"type":"object","properties":{"username":{"type":"string","description":"Compte concerné.","example":"@alice"},"limits":{"type":"object","properties":{},"description":"Limites courantes configurées par l’administrateur. 0 signifie illimité.","additionalProperties":{"type":"integer","minimum":0}},"apiRequests":{"type":"object","properties":{"period":{"type":"string","description":"Jour UTC mesuré.","example":"2026-07-19"},"consumed":{"type":"integer","description":"Requêtes consommées sur la journée.","example":42,"minimum":0},"limit":{"type":"integer","description":"Limite quotidienne, 0 si illimitée.","example":2000,"minimum":0},"remaining":{"type":["integer","null"],"minimum":0,"example":1958},"resetAt":{"type":"string","description":"Prochaine remise à zéro quotidienne UTC.","example":"2026-07-20T00:00:00.000Z","format":"date-time"},"perMinute":{"type":"object","properties":{"period":{"type":"string","description":"Minute UTC mesurée.","example":"2026-07-19T12:30Z"},"consumed":{"type":"integer","description":"Requêtes consommées dans la minute.","example":3,"minimum":0},"limit":{"type":"integer","description":"Limite par minute, 0 si illimitée.","example":60,"minimum":0},"remaining":{"type":["integer","null"],"minimum":0,"example":57},"resetAt":{"type":"string","description":"Fin de la fenêtre minute.","example":"2026-07-19T12:31:00.000Z","format":"date-time"}},"required":["period","consumed","limit","remaining","resetAt"]}},"required":["period","consumed","limit","remaining","resetAt","perMinute"],"additionalProperties":true},"messageUnits":{"type":"object","properties":{"period":{"type":"string","description":"Mois UTC mesuré.","example":"2026-07"},"consumed":{"type":"integer","description":"Messages effectivement envoyés.","example":320,"minimum":0},"reserved":{"type":"integer","description":"Messages réservés par des tâches en cours.","example":20,"minimum":0},"used":{"type":"integer","description":"Total consommé et réservé.","example":340,"minimum":0},"limit":{"type":"integer","description":"Quota mensuel, 0 si illimité.","example":10000,"minimum":0},"remaining":{"type":["integer","null"],"minimum":0,"example":9660},"resetAt":{"type":"string","description":"Prochaine remise à zéro mensuelle UTC.","example":"2026-08-01T00:00:00.000Z","format":"date-time"}},"required":["period","consumed","reserved","used","limit","remaining","resetAt"],"additionalProperties":true},"scanJobs":{"type":"object","properties":{"period":{"type":"string","description":"Jour UTC mesuré.","example":"2026-07-19"},"consumed":{"type":"integer","description":"Scans lancés dans la journée.","example":2,"minimum":0},"limit":{"type":"integer","description":"Limite quotidienne de scans, 0 si illimitée.","example":10,"minimum":0},"remaining":{"type":["integer","null"],"minimum":0,"example":8},"resetAt":{"type":"string","description":"Prochaine remise à zéro.","example":"2026-07-20T00:00:00.000Z","format":"date-time"}},"required":["period","consumed","limit","remaining","resetAt"],"additionalProperties":true},"resources":{"type":"object","properties":{},"description":"Occupation des sessions et clés API.","additionalProperties":true},"subscription":{"oneOf":[{"$ref":"#/components/schemas/SubscriptionSummary"},{"type":"null"}]},"subscriptionActive":{"type":"boolean","description":"Indique si le plan du compte est actif.","example":true},"accountEntitlements":{"oneOf":[{"$ref":"#/components/schemas/AccountEntitlements"},{"type":"null"}]},"developerAccess":{"type":"boolean","description":"Indique si le plan API est actif. Les clés sont suspendues lorsque cette valeur est false.","example":true}},"required":["username","limits","apiRequests","messageUnits","scanJobs","resources","subscription","subscriptionActive","accountEntitlements","developerAccess"],"additionalProperties":true},"CreateSessionRequest":{"type":"object","properties":{"name":{"type":"string","description":"Nom de la session.","example":"Boutique Douala","maxLength":80,"default":"Nouvelle session"},"start":{"type":"boolean","description":"Démarre immédiatement la connexion.","example":true,"default":true},"ownerUsername":{"type":"string","description":"Propriétaire demandé. Pris en compte uniquement pour un administrateur.","example":"@alice","maxLength":32}}},"RenameSessionRequest":{"type":"object","properties":{"name":{"type":"string","description":"Nouveau nom de la session.","example":"Boutique Akwa","minLength":1,"maxLength":80}},"required":["name"]},"MediaInput":{"type":"object","properties":{"url":{"type":"string","description":"URL HTTP(S) publique du média. Prioritaire sur le base64.","example":"https://example.com/facture.pdf","format":"uri","maxLength":2048},"data":{"type":"string","description":"Contenu base64 ou data URL.","example":"JVBERi0xLjQKJ...","format":"byte"},"base64":{"type":"string","description":"Alias de data.","example":"JVBERi0xLjQKJ...","format":"byte"},"mimetype":{"type":"string","description":"Type MIME requis avec du base64.","example":"application/pdf","pattern":"^[a-z0-9.+-]+/[a-z0-9.+-]+$"},"filename":{"type":"string","description":"Nom de fichier transmis à WhatsApp.","example":"facture.pdf","maxLength":255,"default":"media"}},"description":"Média de 8388608 octets décodés maximum. Utilisez url, ou data/base64 avec mimetype."},"BulkOptions":{"type":"object","properties":{"minDelayMs":{"type":"integer","description":"Délai minimum entre envois.","example":15000,"minimum":3000,"maximum":600000,"default":15000},"maxDelayMs":{"type":"integer","description":"Délai maximum entre envois.","example":45000,"minimum":3000,"maximum":900000,"default":45000},"pauseEvery":{"type":"integer","description":"Pause longue tous les N destinataires. 0 désactive la pause.","example":8,"minimum":0,"maximum":100,"default":8},"pauseMinMs":{"type":"integer","description":"Durée minimale d’une pause longue.","example":90000,"minimum":10000,"maximum":1800000,"default":90000},"pauseMaxMs":{"type":"integer","description":"Durée maximale d’une pause longue.","example":180000,"minimum":10000,"maximum":3600000,"default":180000},"maxRecipients":{"type":"integer","description":"Nombre maximal réellement traité par la tâche.","example":200,"minimum":1,"maximum":500,"default":200}}},"SendMessageRequest":{"type":"object","properties":{"to":{"description":"Destinataire ou liste de destinataires.","oneOf":[{"type":"string","example":"237690000000"},{"type":"array","items":{"type":"string"},"maxItems":500,"example":["237690000000","237691111111"]}]},"recipients":{"description":"Alias de to.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"maxItems":500}]},"text":{"type":"string","description":"Texte du message.","example":"Bonjour depuis le bot","maxLength":4096},"message":{"type":"string","description":"Alias de text.","example":"Bonjour depuis le bot","maxLength":4096},"media":{"$ref":"#/components/schemas/MediaInput"},"caption":{"type":"string","description":"Légende du média.","example":"Votre facture","minLength":1,"maxLength":4096},"mentions":{"type":"array","items":{"type":"string"},"description":"Utilisateurs à mentionner.","maxItems":50},"linkPreview":{"type":"boolean","description":"Active l’aperçu des liens.","example":true,"default":true},"replyTo":{"type":"string","description":"Identifiant du message auquel répondre.","example":"3EB0ABCDEF123","maxLength":256},"options":{"$ref":"#/components/schemas/BulkOptions"}},"allOf":[{"oneOf":[{"required":["to"]},{"required":["recipients"]}]},{"oneOf":[{"required":["text"]},{"required":["message"]},{"required":["media"]}]}],"description":"Un texte ou un média est requis. Pour plusieurs destinataires, le texte est obligatoire et les médias sont interdits."},"SettingsPatch":{"type":"object","properties":{"maxWarnings":{"type":"integer","description":"Avertissements avant action.","example":4,"minimum":1,"maximum":10},"warningExpiryHours":{"type":"integer","description":"Durée de validité des avertissements.","example":24,"minimum":1,"maximum":168},"scanLimit":{"type":"integer","description":"Limite d’analyse.","example":100,"minimum":1,"maximum":1000},"autoScan":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Active le scan automatique.","example":true},"intervalHours":{"type":"integer","description":"Intervalle des scans.","example":24,"minimum":1,"maximum":168}},"additionalProperties":false},"delays":{"type":"object","properties":{"actionMinMs":{"type":"integer","description":"Délai minimum entre actions.","example":2000,"minimum":0,"maximum":60000},"actionMaxMs":{"type":"integer","description":"Délai maximum entre actions.","example":5000,"minimum":0,"maximum":120000},"groupMinMs":{"type":"integer","description":"Délai minimum entre groupes.","example":5000,"minimum":0,"maximum":300000},"groupMaxMs":{"type":"integer","description":"Délai maximum entre groupes.","example":15000,"minimum":0,"maximum":600000}},"additionalProperties":false},"welcome":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Active le message de bienvenue.","example":false},"message":{"type":"string","description":"Texte de bienvenue.","example":"Bienvenue @user !","minLength":1,"maxLength":4096}},"additionalProperties":false},"calls":{"type":"object","properties":{"rejectEnabled":{"type":"boolean","description":"Rejette les appels.","example":true},"spamThreshold":{"type":"integer","description":"Seuil de spam.","example":4,"minimum":1,"maximum":50},"spamWindowMinutes":{"type":"integer","description":"Fenêtre de spam.","example":10,"minimum":1,"maximum":1440},"blockDurationMinutes":{"type":"integer","description":"Durée du blocage.","example":30,"minimum":1,"maximum":10080}},"additionalProperties":false},"deleteStatusMentions":{"type":"boolean","description":"Supprime les mentions de statut.","example":true}},"minProperties":1,"additionalProperties":false},"ExemptionsPatch":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"string","maxLength":128,"pattern":"@g\\.us$"},"description":"Liste complète des groupes exclus.","maxItems":500},"patterns":{"type":"array","items":{"type":"string","maxLength":120},"description":"Liste complète des motifs exclus.","maxItems":100},"welcomeDisabledGroups":{"type":"array","items":{"type":"string","maxLength":128,"pattern":"@g\\.us$"},"description":"Groupes sans bienvenue.","maxItems":500},"users":{"type":"array","items":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ExemptionUser"}]},"description":"Utilisateurs exemptés.","maxItems":500},"adminsExempt":{"type":"boolean","description":"Exempte les administrateurs.","example":true}},"additionalProperties":false},"UserExemptionRequest":{"type":"object","properties":{"links":{"type":"boolean","description":"Exemption des liens.","example":true,"default":true},"link":{"type":"boolean","description":"Alias de links.","example":true},"calls":{"type":"boolean","description":"Exemption des appels.","example":false,"default":false},"call":{"type":"boolean","description":"Alias de calls.","example":false}}},"AdminsExemptionRequest":{"type":"object","properties":{"enabled":{"type":"boolean","description":"Active l’exemption des administrateurs.","example":true}},"required":["enabled"]},"MenuInput":{"$ref":"#/components/schemas/Menu"},"SendMenuRequest":{"type":"object","properties":{"groupId":{"type":"string","description":"Groupe destinataire.","example":"120363000000000000@g.us","maxLength":128},"to":{"type":"string","description":"Alias de groupId.","example":"120363000000000000@g.us","maxLength":128}},"oneOf":[{"required":["groupId"]},{"required":["to"]}]},"AnnouncementInput":{"type":"object","properties":{"title":{"type":"string","description":"Titre de l’annonce.","example":"Fermeture exceptionnelle","minLength":1,"maxLength":160,"default":"Sans titre"},"content":{"type":"string","description":"Contenu à publier.","example":"La boutique fermera à 16 h aujourd’hui.","minLength":1,"maxLength":4096},"rawContent":{"type":"string","description":"Contenu source facultatif.","example":"La boutique fermera à 16 h aujourd’hui.","minLength":1,"maxLength":4096},"groups":{"type":"array","items":{"type":"string","maxLength":128},"description":"Groupes cibles.","maxItems":500},"groupIds":{"type":"array","items":{"type":"string","maxLength":128},"description":"Alias de groups à la création.","maxItems":500},"linkPreview":{"type":"boolean","description":"Active les aperçus de liens.","example":true,"default":true},"image":{"type":["string","null"],"description":"Data URL JPEG, PNG ou WebP de 8388608 octets décodés maximum, ou null.","pattern":"^data:image/(jpeg|png|webp);base64,","example":null},"sendAsHd":{"type":"boolean","description":"Envoie l’image en haute définition.","example":false,"default":false}},"required":["content"]},"AnnouncementPatch":{"type":"object","properties":{"title":{"type":"string","description":"Titre de l’annonce.","example":"Fermeture exceptionnelle","minLength":1,"maxLength":160,"default":"Sans titre"},"content":{"type":"string","description":"Contenu à publier.","example":"La boutique fermera à 16 h aujourd’hui.","minLength":1,"maxLength":4096},"rawContent":{"type":"string","description":"Contenu source facultatif.","example":"La boutique fermera à 16 h aujourd’hui.","minLength":1,"maxLength":4096},"groups":{"type":"array","items":{"type":"string","maxLength":128},"description":"Groupes cibles.","maxItems":500},"linkPreview":{"type":"boolean","description":"Active les aperçus de liens.","example":true,"default":true},"image":{"type":["string","null"],"description":"Data URL JPEG, PNG ou WebP de 8388608 octets décodés maximum, ou null.","pattern":"^data:image/(jpeg|png|webp);base64,","example":null},"sendAsHd":{"type":"boolean","description":"Envoie l’image en haute définition.","example":false,"default":false}},"additionalProperties":false},"PublishAnnouncementRequest":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session WhatsApp connectée utilisée pour publier.","example":"session_01JABCDEF1234567890","minLength":1,"maxLength":128}},"required":["sessionId"],"additionalProperties":false}}},"paths":{"/":{"get":{"tags":["Documentation"],"summary":"Découvrir l’API","description":"Retourne le nom, la version et les URL publiques de l’API.","operationId":"get_","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Index de l’API.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"name":{"type":"string","description":"Nom du service.","example":"WhatsApp Link Guard API"},"version":{"type":"string","description":"Version de l’API.","example":"v1"},"publicDocumentation":{"type":"string","description":"Documentation web.","example":"/docs"},"developerPortal":{"type":"string","description":"Portail privé des clés.","example":"/developer"},"documentation":{"type":"string","description":"Documentation Markdown.","example":"/api/v1/docs"},"openapi":{"type":"string","description":"Contrat OpenAPI.","example":"/api/v1/openapi.json"}},"required":["name","version","publicDocumentation","developerPortal","documentation","openapi"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"public-reference","step":1,"title":"Découvrir et vérifier l’API","description":"Consultez les ressources publiques, chargez le contrat OpenAPI et vérifiez la disponibilité du service.","priority":"reference","priorityLabel":"Référence publique","order":1},"x-subscription":{"public":true,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true}}},"/docs":{"get":{"tags":["Documentation"],"summary":"Télécharger la documentation Markdown","description":"Retourne la documentation Markdown brute, sans enveloppe JSON.","operationId":"get_docs","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Documentation Markdown.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"text/markdown":{"schema":{"type":"string"},"example":"# API HTTP v1"}}},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"text/markdown","x-workflow":{"id":"public-reference","step":1,"title":"Découvrir et vérifier l’API","description":"Consultez les ressources publiques, chargez le contrat OpenAPI et vérifiez la disponibilité du service.","priority":"reference","priorityLabel":"Référence publique","order":2},"x-subscription":{"public":true,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true}}},"/openapi.json":{"get":{"tags":["Documentation"],"summary":"Télécharger le contrat OpenAPI","description":"Retourne ce contrat OpenAPI 3.1 brut, sans enveloppe JSON.","operationId":"get_openapi_json","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Contrat OpenAPI 3.1.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"public-reference","step":1,"title":"Découvrir et vérifier l’API","description":"Consultez les ressources publiques, chargez le contrat OpenAPI et vérifiez la disponibilité du service.","priority":"reference","priorityLabel":"Référence publique","order":3},"x-subscription":{"public":true,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true}}},"/health":{"get":{"tags":["Service"],"summary":"Vérifier la santé du service","description":"Vérifie que le serveur répond et résume le nombre de sessions par statut.","operationId":"get_health","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Service disponible.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"status":{"type":"string","const":"ok","example":"ok"},"version":{"type":"string","const":"v1","example":"v1"},"uptimeSeconds":{"type":"integer","description":"Durée de fonctionnement du processus.","example":3600,"minimum":0},"sessions":{"type":"object","properties":{"total":{"type":"integer","description":"Nombre total de sessions.","example":1,"minimum":0},"byStatus":{"type":"object","properties":{},"description":"Nombre de sessions par statut.","additionalProperties":{"type":"integer","minimum":0},"example":{"connected":1}}},"required":["total","byStatus"]}},"required":["status","version","uptimeSeconds","sessions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"public-reference","step":1,"title":"Découvrir et vérifier l’API","description":"Consultez les ressources publiques, chargez le contrat OpenAPI et vérifiez la disponibilité du service.","priority":"reference","priorityLabel":"Référence publique","order":4},"x-subscription":{"public":true,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true}}},"/auth/register":{"post":{"tags":["Authentification"],"summary":"Créer un compte","description":"Crée un compte utilisateur puis retourne immédiatement un jeton Bearer temporaire.","operationId":"post_auth_register","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"Compte créé.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"$ref":"#/components/schemas/AuthResult"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["VALIDATION_ERROR","INVALID_BODY","INVALID_JSON"]},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ACCOUNT_EXISTS"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["AUTH_ERROR","INTERNAL_ERROR"]}},"x-accept":"application/json","x-workflow":{"id":"identity","step":2,"title":"S’identifier avec un compte","description":"Créez un compte si nécessaire, connectez-vous, puis vérifiez l’identité associée au jeton obtenu.","priority":"essential","priorityLabel":"P0 · Essentiel","order":5},"x-subscription":{"public":true,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true},"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"},"example":{"username":"@alice","password":"mot-de-passe-solide","securityQuestion":"Nom de mon premier animal ?","securityAnswer":"Milo"}}}},"x-action-warning":"Cette requête crée réellement un compte."}},"/auth/login":{"post":{"tags":["Authentification"],"summary":"Obtenir un jeton Bearer","description":"Valide les identifiants et retourne un jeton Bearer. Cette route ne crée pas de cookie.","operationId":"post_auth_login","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Authentification réussie.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"$ref":"#/components/schemas/AuthResult"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["VALIDATION_ERROR","INVALID_BODY","INVALID_JSON"]},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["INVALID_CREDENTIALS"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"identity","step":2,"title":"S’identifier avec un compte","description":"Créez un compte si nécessaire, connectez-vous, puis vérifiez l’identité associée au jeton obtenu.","priority":"essential","priorityLabel":"P0 · Essentiel","order":6},"x-subscription":{"public":true,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true},"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"},"example":{"username":"@alice","password":"mot-de-passe-solide"}}}}}},"/auth/me":{"get":{"tags":["Authentification"],"summary":"Lire l’identité courante","description":"Retourne l’utilisateur, le type d’authentification et les métadonnées publiques de la clé utilisée. Une clé est suspendue avec une réponse 402 lorsque le plan API expire, puis redevient utilisable après renouvellement.","operationId":"get_auth_me","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Identité authentifiée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/User"},"authentication":{"type":"string","enum":["session","api-key"],"example":"api-key"},"apiKey":{"oneOf":[{"$ref":"#/components/schemas/ApiKey"},{"type":"null"}],"description":"Métadonnées de la clé utilisée, sans secret."}},"required":["user","authentication","apiKey"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"identity","step":2,"title":"S’identifier avec un compte","description":"Créez un compte si nécessaire, connectez-vous, puis vérifiez l’identité associée au jeton obtenu.","priority":"essential","priorityLabel":"P0 · Essentiel","order":7},"x-subscription":{"public":false,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/auth/logout":{"post":{"tags":["Authentification"],"summary":"Révoquer le jeton courant","description":"Révoque un jeton de connexion de compte. Les clés API se révoquent avec la route dédiée.","operationId":"post_auth_logout","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Jeton révoqué.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"loggedOut":{"type":"boolean","const":true,"example":true}},"required":["loggedOut"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ACCOUNT_SESSION_REQUIRED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"maintenance","step":15,"title":"Maintenir puis fermer proprement","description":"Renouvelez ou révoquez les clés, purgez uniquement une clé révoquée, arrêtez la session avant de la supprimer, puis déconnectez le compte.","priority":"essential","priorityLabel":"P0 · Maintenance","order":65},"x-subscription":{"public":false,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"not_accepted"},"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Cette requête ferme la session correspondant au jeton envoyé."}},"/api-keys":{"get":{"tags":["Clés API"],"summary":"Lister ses clés API","description":"Liste les métadonnées des clés du compte. Un plan API actif est requis ; les secrets et empreintes ne sont jamais retournés.","operationId":"get_api_keys","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Liste des clés.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"},"description":"Clés du compte."},"total":{"type":"integer","description":"Nombre total de clés conservées.","example":2,"minimum":0},"maxActiveKeys":{"type":"integer","description":"Nombre maximal de clés actives.","example":10,"minimum":1}},"required":["keys","total","maxActiveKeys"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ACCOUNT_SESSION_REQUIRED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Fonction temporairement indisponible.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEYS_UNAVAILABLE"]}},"x-accept":"application/json","x-workflow":{"id":"credentials","step":3,"title":"Provisionner une clé API","description":"Créez une clé d’intégration depuis la session de compte, puis contrôlez la liste des clés du compte.","priority":"essential","priorityLabel":"P0 · Essentiel","order":9},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"not_accepted"},"security":[{"bearerAuth":[]},{"cookieAuth":[]}]},"post":{"tags":["Clés API"],"summary":"Créer une clé API","description":"Crée une clé sous un plan API actif. Le secret complet n’est retourné qu’une seule fois.","operationId":"post_api_keys","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"Clé créée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"apiKey":{"$ref":"#/components/schemas/ApiKey"},"key":{"type":"string","description":"Secret complet, retourné une seule fois.","example":"wabot_2d4d7e31b9a194a0_SECRET_A_COPIER","format":"password"},"secretShownOnce":{"type":"boolean","const":true,"example":true}},"required":["apiKey","key","secretShownOnce"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["VALIDATION_ERROR"]},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ACCOUNT_SESSION_REQUIRED"]},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEY_LIMIT_REACHED"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Fonction temporairement indisponible.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEYS_UNAVAILABLE"]}},"x-accept":"application/json","x-workflow":{"id":"credentials","step":3,"title":"Provisionner une clé API","description":"Créez une clé d’intégration depuis la session de compte, puis contrôlez la liste des clés du compte.","priority":"essential","priorityLabel":"P0 · Essentiel","order":8},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"not_accepted"},"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"},"example":{"name":"CRM production"}}}},"x-action-warning":"Cette requête crée un secret réel. Copiez-le immédiatement."}},"/api-keys/{keyId}":{"delete":{"tags":["Clés API"],"summary":"Révoquer une clé API","description":"Révoque immédiatement une clé du compte. Cette action de sécurité reste disponible avec une session de compte après expiration du plan.","operationId":"delete_api_keys_keyId","parameters":[{"name":"keyId","in":"path","required":true,"description":"Identifiant de la clé API retourné lors de sa création ou dans la liste des clés.","schema":{"type":"string","minLength":1,"maxLength":200},"example":"a76b94c0-2d9a-42ec-a9c3-778c919d1ca2"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/ApiKey"}},"required":["key"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ACCOUNT_SESSION_REQUIRED"]},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEY_NOT_FOUND"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Fonction temporairement indisponible.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEYS_UNAVAILABLE"]}},"x-accept":"application/json","x-workflow":{"id":"maintenance","step":15,"title":"Maintenir puis fermer proprement","description":"Renouvelez ou révoquez les clés, purgez uniquement une clé révoquée, arrêtez la session avant de la supprimer, puis déconnectez le compte.","priority":"essential","priorityLabel":"P0 · Maintenance","order":61},"x-subscription":{"public":false,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"not_accepted"},"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-action-warning":"La clé ne pourra plus authentifier aucune requête."}},"/api-keys/{keyId}/purge":{"delete":{"tags":["Clés API"],"summary":"Supprimer définitivement une clé révoquée","description":"Supprime définitivement les métadonnées et l’empreinte d’une clé déjà révoquée. Cette maintenance reste disponible avec une session de compte après expiration.","operationId":"delete_api_keys_keyId_purge","parameters":[{"name":"keyId","in":"path","required":true,"description":"Identifiant de la clé API retourné lors de sa création ou dans la liste des clés.","schema":{"type":"string","minLength":1,"maxLength":200},"example":"a76b94c0-2d9a-42ec-a9c3-778c919d1ca2"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Historique de la clé supprimé.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/ApiKey"},"permanentlyDeleted":{"type":"boolean","const":true,"example":true}},"required":["key","permanentlyDeleted"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ACCOUNT_SESSION_REQUIRED"]},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEY_NOT_FOUND"]},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEY_NOT_REVOKED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Fonction temporairement indisponible.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEYS_UNAVAILABLE"]}},"x-accept":"application/json","x-workflow":{"id":"maintenance","step":15,"title":"Maintenir puis fermer proprement","description":"Renouvelez ou révoquez les clés, purgez uniquement une clé révoquée, arrêtez la session avant de la supprimer, puis déconnectez le compte.","priority":"essential","priorityLabel":"P0 · Maintenance","order":62},"x-subscription":{"public":false,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"not_accepted"},"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Suppression irréversible. La clé doit être révoquée au préalable."}},"/api-keys/{keyId}/rotate":{"post":{"tags":["Clés API"],"summary":"Renouveler une clé API","description":"Sous un plan API actif, révoque atomiquement l’ancienne clé et retourne une nouvelle clé brute une seule fois.","operationId":"post_api_keys_keyId_rotate","parameters":[{"name":"keyId","in":"path","required":true,"description":"Identifiant de la clé API retourné lors de sa création ou dans la liste des clés.","schema":{"type":"string","minLength":1,"maxLength":200},"example":"a76b94c0-2d9a-42ec-a9c3-778c919d1ca2"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"Clé renouvelée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"apiKey":{"$ref":"#/components/schemas/ApiKey"},"key":{"type":"string","description":"Secret complet, retourné une seule fois.","example":"wabot_2d4d7e31b9a194a0_SECRET_A_COPIER","format":"password"},"secretShownOnce":{"type":"boolean","const":true,"example":true}},"required":["apiKey","key","secretShownOnce"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ACCOUNT_SESSION_REQUIRED"]},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEY_NOT_FOUND"]},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEY_REVOKED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Fonction temporairement indisponible.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_KEYS_UNAVAILABLE"]}},"x-accept":"application/json","x-workflow":{"id":"maintenance","step":15,"title":"Maintenir puis fermer proprement","description":"Renouvelez ou révoquez les clés, purgez uniquement une clé révoquée, arrêtez la session avant de la supprimer, puis déconnectez le compte.","priority":"essential","priorityLabel":"P0 · Maintenance","order":60},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"not_accepted"},"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"x-action-warning":"L’ancienne clé cessera immédiatement de fonctionner."}},"/developer-settings":{"get":{"tags":["Configuration"],"summary":"Lire la configuration développeur","description":"Sous un plan API actif, retourne l’URL calculée, la politique CORS en lecture seule, les liens utiles et la session préférée.","operationId":"get_developer_settings","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Configuration et sessions visibles.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"$ref":"#/components/schemas/DeveloperSettingsPayload"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ACCOUNT_SESSION_REQUIRED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Fonction temporairement indisponible.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["DEVELOPER_SETTINGS_UNAVAILABLE"]}},"x-accept":"application/json","x-workflow":{"id":"developer-settings","step":12,"title":"Configurer les préférences développeur","description":"Consultez puis modifiez la session WhatsApp par défaut utilisée par les intégrations du compte.","priority":"advanced","priorityLabel":"P2 · Avancé","order":44},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"not_accepted"},"security":[{"bearerAuth":[]},{"cookieAuth":[]}]},"patch":{"tags":["Configuration"],"summary":"Modifier la configuration développeur","description":"Sous un plan API actif, enregistre la session proposée par défaut. La configuration CORS reste pilotée par le serveur.","operationId":"patch_developer_settings","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Configuration enregistrée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"$ref":"#/components/schemas/DeveloperSettingsPayload"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["VALIDATION_ERROR"]},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ACCOUNT_SESSION_REQUIRED"]},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_FOUND"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Fonction temporairement indisponible.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["DEVELOPER_SETTINGS_UNAVAILABLE"]}},"x-accept":"application/json","x-workflow":{"id":"developer-settings","step":12,"title":"Configurer les préférences développeur","description":"Consultez puis modifiez la session WhatsApp par défaut utilisée par les intégrations du compte.","priority":"advanced","priorityLabel":"P2 · Avancé","order":45},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":false,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"not_accepted"},"security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperSettingsRequest"},"example":{"defaultSessionId":"session_01JABCDEF1234567890"}}}},"x-action-warning":"Cette requête modifie une préférence de compte."}},"/usage":{"get":{"tags":["Diagnostic"],"summary":"Consulter sa consommation et ses limites","description":"Retourne les quotas, l’occupation des ressources, le plan calculé et developerAccess. Une session de compte peut consulter ce diagnostic après expiration ; une clé suspendue ne peut plus authentifier la requête.","operationId":"get_usage","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Consommation courante.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"$ref":"#/components/schemas/UsagePayload"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"503":{"description":"Fonction temporairement indisponible.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["USAGE_UNAVAILABLE"]}},"x-accept":"application/json","x-workflow":{"id":"diagnostics","step":11,"title":"Diagnostiquer et superviser","description":"Analysez les statistiques, journaux, appels et limites après les premiers événements produits par le bot.","priority":"important","priorityLabel":"P1 · Important","order":39},"x-subscription":{"public":false,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions":{"get":{"tags":["Sessions"],"summary":"Lister les sessions","description":"Retourne uniquement les sessions visibles et la couverture d’abonnement de chacune. Une session listée mais non couverte n’est pas opérationnelle.","operationId":"get_sessions","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Sessions visibles.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"sessions":{"type":"array","items":{"$ref":"#/components/schemas/Session"},"description":"Sessions visibles."},"total":{"type":"integer","description":"Nombre de sessions.","example":1,"minimum":0}},"required":["sessions","total"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"sessions","step":4,"title":"Créer et connecter une session WhatsApp","description":"Créez la session, vérifiez-la, configurez-la, démarrez-la puis scannez son QR avant de continuer.","priority":"essential","priorityLabel":"P0 · Essentiel","order":11},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]},"post":{"tags":["Sessions"],"summary":"Créer une session","description":"Crée une session WhatsApp seulement si le plan API est actif et dispose encore de capacité, puis la démarre sauf si start vaut false. ownerUsername est réservé aux administrateurs.","operationId":"post_sessions","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"Session créée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"session":{"$ref":"#/components/schemas/Session"}},"required":["session"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","PLAN_REQUIRED","SUBSCRIPTION_RENEWAL_REQUIRED","PLAN_UPGRADE_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_CREATE_DENIED"]},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["OWNER_NOT_FOUND"]},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_LIMIT_REACHED"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"sessions","step":4,"title":"Créer et connecter une session WhatsApp","description":"Créez la session, vérifiez-la, configurez-la, démarrez-la puis scannez son QR avant de continuer.","priority":"essential","priorityLabel":"P0 · Essentiel","order":10},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":true,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":true,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionRequest"},"example":{"name":"Boutique Douala","start":true}}}},"x-action-warning":"Cette requête crée et peut démarrer une nouvelle session WhatsApp."}},"/sessions/{sessionId}":{"get":{"tags":["Sessions"],"summary":"Lire une session","description":"Retourne le statut assaini d’une session. Le QR brut et les chemins locaux ne sont pas exposés.","operationId":"get_sessions_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Session trouvée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"session":{"$ref":"#/components/schemas/Session"}},"required":["session"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_ACCESS_DENIED"]},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_FOUND"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"sessions","step":4,"title":"Créer et connecter une session WhatsApp","description":"Créez la session, vérifiez-la, configurez-la, démarrez-la puis scannez son QR avant de continuer.","priority":"essential","priorityLabel":"P0 · Essentiel","order":12},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]},"patch":{"tags":["Sessions"],"summary":"Renommer une session","description":"Modifie le nom visible de la session.","operationId":"patch_sessions_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Session renommée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"session":{"$ref":"#/components/schemas/Session"}},"required":["session"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"sessions","step":4,"title":"Créer et connecter une session WhatsApp","description":"Créez la session, vérifiez-la, configurez-la, démarrez-la puis scannez son QR avant de continuer.","priority":"essential","priorityLabel":"P0 · Essentiel","order":13},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenameSessionRequest"},"example":{"name":"Boutique Akwa"}}}},"x-action-warning":"Cette requête modifie le nom de la session."},"delete":{"tags":["Sessions"],"summary":"Supprimer une session","description":"Arrête puis supprime la session et ses données locales.","operationId":"delete_sessions_sessionId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Session supprimée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session supprimée.","example":"session_01JABCDEF1234567890"},"deleted":{"type":"boolean","const":true,"example":true}},"required":["sessionId","deleted"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"maintenance","step":15,"title":"Maintenir puis fermer proprement","description":"Renouvelez ou révoquez les clés, purgez uniquement une clé révoquée, arrêtez la session avant de la supprimer, puis déconnectez le compte.","priority":"essential","priorityLabel":"P0 · Maintenance","order":64},"x-subscription":{"public":false,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Suppression irréversible de la session et de ses données locales."}},"/sessions/{sessionId}/qr":{"get":{"tags":["Sessions"],"summary":"Lire le QR de connexion","description":"Retourne la valeur du QR courant ou null. Aucun délai d’expiration n’est exposé par cette route.","operationId":"get_sessions_sessionId_qr","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"État du QR.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session ciblée.","example":"session_01JABCDEF1234567890"},"status":{"type":"string","description":"Statut courant.","example":"qr"},"qr":{"type":["string","null"],"description":"Valeur à convertir en QR.","example":"2@ABCDEF..."}},"required":["sessionId","status","qr"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"sessions","step":4,"title":"Créer et connecter une session WhatsApp","description":"Créez la session, vérifiez-la, configurez-la, démarrez-la puis scannez son QR avant de continuer.","priority":"essential","priorityLabel":"P0 · Essentiel","order":15},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/start":{"post":{"tags":["Sessions"],"summary":"Démarrer une session","description":"Démarre ou redémarre la connexion WhatsApp uniquement si le plan API et la couverture de cette session sont actifs.","operationId":"post_sessions_sessionId_start","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Session démarrée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"session":{"$ref":"#/components/schemas/Session"}},"required":["session"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_START_DENIED","SESSION_ACCESS_DENIED"]},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_START_FAILED"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"sessions","step":4,"title":"Créer et connecter une session WhatsApp","description":"Créez la session, vérifiez-la, configurez-la, démarrez-la puis scannez son QR avant de continuer.","priority":"essential","priorityLabel":"P0 · Essentiel","order":14},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Cette requête démarre une connexion WhatsApp réelle."}},"/sessions/{sessionId}/stop":{"post":{"tags":["Sessions"],"summary":"Arrêter une session","description":"Arrête la connexion sans supprimer les données de la session.","operationId":"post_sessions_sessionId_stop","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Session arrêtée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session arrêtée.","example":"session_01JABCDEF1234567890"},"status":{"type":"string","const":"stopped","example":"stopped"}},"required":["sessionId","status"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_STOP_FAILED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"maintenance","step":15,"title":"Maintenir puis fermer proprement","description":"Renouvelez ou révoquez les clés, purgez uniquement une clé révoquée, arrêtez la session avant de la supprimer, puis déconnectez le compte.","priority":"essential","priorityLabel":"P0 · Maintenance","order":63},"x-subscription":{"public":false,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Cette requête déconnecte la session WhatsApp."}},"/sessions/{sessionId}/messages":{"post":{"tags":["Messages"],"summary":"Envoyer un message","description":"Envoie un texte ou média à une cible, ou lance une tâche pour plusieurs cibles. Maximum 500 destinataires et 8388608 octets par média.","operationId":"post_sessions_sessionId_messages","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"Message unitaire envoyé.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"message":{"type":"object","properties":{"id":{"type":["string","null"],"example":"3EB0ABCDEF123"},"to":{"type":"string","description":"Destinataire normalisé.","example":"237690000000@s.whatsapp.net"},"type":{"type":"string","description":"Type du message.","example":"text"},"timestamp":{"type":"integer","description":"Horodatage Unix en millisecondes.","example":1784376000000}},"required":["id","to","type","timestamp"]}},"required":["message"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"202":{"description":"Envoi multiple accepté.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"},"pollUrl":{"type":"string","description":"URL relative de suivi.","example":"/api/v1/jobs/job_01JABCDEF1234567890"}},"required":["job","pollUrl"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["VALIDATION_ERROR","TOO_MANY_RECIPIENTS","INVALID_RECIPIENT","TEXT_TOO_LONG","BULK_MEDIA_UNSUPPORTED","UNSAFE_MEDIA_URL","MEDIA_URL_UNREACHABLE"]},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_CONNECTED"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["MEDIA_TOO_LARGE","PAYLOAD_TOO_LARGE"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"messaging","step":5,"title":"Envoyer un premier message","description":"Utilisez une session connectée pour envoyer, puis suivez le job lorsque la réponse indique un traitement asynchrone.","priority":"essential","priorityLabel":"P0 · Essentiel","order":16},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"},"example":{"to":"237690000000","text":"Bonjour depuis le bot","linkPreview":true}}}},"x-action-warning":"Cette requête peut envoyer immédiatement un message WhatsApp réel."}},"/jobs/{jobId}":{"get":{"tags":["Tâches"],"summary":"Lire une tâche asynchrone","description":"Retourne l’avancement d’une tâche conservée en mémoire pendant une durée limitée.","operationId":"get_jobs_jobId","parameters":[{"name":"jobId","in":"path","required":true,"description":"Identifiant de la tâche asynchrone retourné avec un statut 202.","schema":{"type":"string","minLength":1},"example":"job_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Tâche trouvée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"}},"required":["job"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["JOB_ACCESS_DENIED"]},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["JOB_NOT_FOUND"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"messaging","step":5,"title":"Envoyer un premier message","description":"Utilisez une session connectée pour envoyer, puis suivez le job lorsque la réponse indique un traitement asynchrone.","priority":"essential","priorityLabel":"P0 · Essentiel","order":17},"x-subscription":{"public":false,"requiredPlan":null,"accountSessionRequiresActiveApiPlan":false,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":true,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/groups":{"get":{"tags":["Groupes"],"summary":"Lister les groupes","description":"Liste par défaut les groupes administrés par le bot. scope=all retourne tous les groupes.","operationId":"get_sessions_sessionId_groups","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"scope","in":"query","required":false,"description":"Filtre principal des groupes.","schema":{"type":"string","enum":["admin","all"],"default":"admin"},"example":"admin"},{"name":"adminOnly","in":"query","required":false,"description":"Alias historique utilisé seulement lorsque scope est absent.","schema":{"type":"boolean","default":true},"example":true},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Groupes visibles.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"groups":{"type":"array","items":{"$ref":"#/components/schemas/Group"},"description":"Groupes."},"total":{"type":"integer","description":"Nombre de groupes.","example":3,"minimum":0}},"required":["groups","total"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_CONNECTED"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"groups","step":6,"title":"Explorer les groupes et participants","description":"Listez les groupes avant d’utiliser leurs identifiants, consultez les membres, puis quittez un groupe seulement si nécessaire.","priority":"important","priorityLabel":"P1 · Important","order":18},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/groups/{groupId}":{"get":{"tags":["Groupes"],"summary":"Lire un groupe","description":"Retourne les informations principales d’un groupe WhatsApp.","operationId":"get_sessions_sessionId_groups_groupId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"groupId","in":"path","required":true,"description":"JID du groupe WhatsApp. Encodez toujours cette valeur dans le chemin.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"120363000000000000@g.us"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Groupe trouvé.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"group":{"$ref":"#/components/schemas/Group"}},"required":["group"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["GROUP_NOT_FOUND","SESSION_NOT_FOUND"]},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_CONNECTED"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"groups","step":6,"title":"Explorer les groupes et participants","description":"Listez les groupes avant d’utiliser leurs identifiants, consultez les membres, puis quittez un groupe seulement si nécessaire.","priority":"important","priorityLabel":"P1 · Important","order":19},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/groups/{groupId}/participants":{"get":{"tags":["Groupes"],"summary":"Lister les participants","description":"Retourne les identifiants, noms et rôles réellement disponibles pour chaque participant.","operationId":"get_sessions_sessionId_groups_groupId_participants","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"groupId","in":"path","required":true,"description":"JID du groupe WhatsApp. Encodez toujours cette valeur dans le chemin.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"120363000000000000@g.us"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Participants du groupe.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"group":{"type":"object","properties":{"id":{"type":"string","description":"JID du groupe.","example":"120363000000000000@g.us"},"name":{"type":"string","description":"Nom du groupe.","example":"Clients VIP"}},"required":["id","name"]},"participants":{"type":"array","items":{"$ref":"#/components/schemas/Participant"},"description":"Participants."},"total":{"type":"integer","description":"Nombre de participants.","example":42,"minimum":0}},"required":["group","participants","total"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_CONNECTED"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"groups","step":6,"title":"Explorer les groupes et participants","description":"Listez les groupes avant d’utiliser leurs identifiants, consultez les membres, puis quittez un groupe seulement si nécessaire.","priority":"important","priorityLabel":"P1 · Important","order":20},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/groups/{groupId}/leave":{"post":{"tags":["Groupes"],"summary":"Quitter un groupe","description":"Fait quitter le groupe au bot puis supprime sa copie locale du chat.","operationId":"post_sessions_sessionId_groups_groupId_leave","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"groupId","in":"path","required":true,"description":"JID du groupe WhatsApp. Encodez toujours cette valeur dans le chemin.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"120363000000000000@g.us"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Groupe quitté.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"groupId":{"type":"string","description":"Groupe quitté.","example":"120363000000000000@g.us"},"left":{"type":"boolean","const":true,"example":true}},"required":["groupId","left"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["GROUP_NOT_FOUND"]},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_CONNECTED"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"groups","step":6,"title":"Explorer les groupes et participants","description":"Listez les groupes avant d’utiliser leurs identifiants, consultez les membres, puis quittez un groupe seulement si nécessaire.","priority":"important","priorityLabel":"P1 · Important","order":21},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Le bot quittera réellement ce groupe WhatsApp."}},"/sessions/{sessionId}/settings":{"get":{"tags":["Réglages"],"summary":"Lire les réglages","description":"Retourne tous les réglages effectifs de la session.","operationId":"get_sessions_sessionId_settings","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Réglages effectifs.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session ciblée.","example":"session_01JABCDEF1234567890"},"settings":{"$ref":"#/components/schemas/Settings"}},"required":["sessionId","settings"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"protection-settings","step":7,"title":"Configurer la protection","description":"Lisez toujours les réglages actuels avant de modifier les règles de protection de la session.","priority":"important","priorityLabel":"P1 · Important","order":22},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]},"patch":{"tags":["Réglages"],"summary":"Modifier les réglages","description":"Modifie uniquement les champs fournis. Les champs inconnus et plages incohérentes sont refusés.","operationId":"patch_sessions_sessionId_settings","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Réglages enregistrés.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session ciblée.","example":"session_01JABCDEF1234567890"},"settings":{"$ref":"#/components/schemas/Settings"}},"required":["sessionId","settings"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["VALIDATION_ERROR"]},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"protection-settings","step":7,"title":"Configurer la protection","description":"Lisez toujours les réglages actuels avant de modifier les règles de protection de la session.","priority":"important","priorityLabel":"P1 · Important","order":23},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsPatch"},"example":{"maxWarnings":4,"welcome":{"enabled":false}}}}},"x-action-warning":"Ces réglages affectent immédiatement le comportement du bot."}},"/sessions/{sessionId}/stats":{"get":{"tags":["Diagnostic"],"summary":"Lire les statistiques","description":"Retourne les compteurs persistés et l’état agrégé des avertissements.","operationId":"get_sessions_sessionId_stats","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Statistiques de la session.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session ciblée.","example":"session_01JABCDEF1234567890"},"stats":{"type":"object","properties":{},"additionalProperties":true}},"required":["sessionId","stats"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"diagnostics","step":11,"title":"Diagnostiquer et superviser","description":"Analysez les statistiques, journaux, appels et limites après les premiers événements produits par le bot.","priority":"important","priorityLabel":"P1 · Important","order":40},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/logs":{"get":{"tags":["Diagnostic"],"summary":"Lire les journaux","description":"Retourne les entrées les plus récentes en premier.","operationId":"get_sessions_sessionId_logs","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"limit","in":"query","required":false,"description":"Nombre maximal d’éléments retournés. Valeur par défaut : 100.","schema":{"type":"integer","minimum":1,"maximum":200,"default":100},"example":100},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Journaux de la session.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"logs":{"type":"array","items":{},"description":"Entrées de journal."}},"required":["logs"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"diagnostics","step":11,"title":"Diagnostiquer et superviser","description":"Analysez les statistiques, journaux, appels et limites après les premiers événements produits par le bot.","priority":"important","priorityLabel":"P1 · Important","order":41},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/calls":{"get":{"tags":["Diagnostic"],"summary":"Lire les appels","description":"Retourne l’historique des appels rejetés, du plus récent au plus ancien.","operationId":"get_sessions_sessionId_calls","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"limit","in":"query","required":false,"description":"Nombre maximal d’éléments retournés. Valeur par défaut : 50.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"example":50},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Historique des appels.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"calls":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"description":"Appels enregistrés."}},"required":["calls"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"diagnostics","step":11,"title":"Diagnostiquer et superviser","description":"Analysez les statistiques, journaux, appels et limites après les premiers événements produits par le bot.","priority":"important","priorityLabel":"P1 · Important","order":42},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/rate-limit":{"get":{"tags":["Diagnostic"],"summary":"Lire la limite d’actions","description":"Retourne l’utilisation et les limites de débit isolées pour le compte propriétaire de la session.","operationId":"get_sessions_sessionId_rate_limit","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"État de la limite.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session ciblée.","example":"session_01JABCDEF1234567890"},"rateLimit":{"type":"object","properties":{},"additionalProperties":true}},"required":["sessionId","rateLimit"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"diagnostics","step":11,"title":"Diagnostiquer et superviser","description":"Analysez les statistiques, journaux, appels et limites après les premiers événements produits par le bot.","priority":"important","priorityLabel":"P1 · Important","order":43},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/scans":{"post":{"tags":["Modération"],"summary":"Lancer un scan de modération","description":"Lance un scan asynchrone des groupes administrés par la session connectée.","operationId":"post_sessions_sessionId_scans","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"202":{"description":"Scan accepté.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"},"pollUrl":{"type":"string","description":"URL relative de suivi.","example":"/api/v1/jobs/job_01JABCDEF1234567890"}},"required":["job","pollUrl"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_CONNECTED"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"scans-warnings","step":9,"title":"Scanner et gérer les avertissements","description":"Lancez le scan, consultez les avertissements, puis préférez l’effacement ciblé avant l’effacement global.","priority":"important","priorityLabel":"P1 · Important","order":33},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Cette requête lance un traitement réel sur les groupes administrés."}},"/sessions/{sessionId}/warnings":{"get":{"tags":["Modération"],"summary":"Lire les avertissements","description":"Retourne tous les avertissements ou les filtre par groupe et/ou utilisateur.","operationId":"get_sessions_sessionId_warnings","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"groupId","in":"query","required":false,"description":"JID du groupe à conserver dans le résultat.","schema":{"type":"string","maxLength":128},"example":"120363000000000000@g.us"},{"name":"userId","in":"query","required":false,"description":"Identifiant utilisateur à conserver dans le résultat.","schema":{"type":"string","maxLength":128},"example":"237690000000"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Avertissements filtrés.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"warnings":{"type":"object","properties":{},"additionalProperties":true},"totals":{"type":"object","properties":{"users":{"type":"integer","description":"Utilisateurs avertis.","example":1,"minimum":0},"warnings":{"type":"integer","description":"Nombre total d’avertissements.","example":2,"minimum":0}},"required":["users","warnings"]}},"required":["warnings","totals"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"scans-warnings","step":9,"title":"Scanner et gérer les avertissements","description":"Lancez le scan, consultez les avertissements, puis préférez l’effacement ciblé avant l’effacement global.","priority":"important","priorityLabel":"P1 · Important","order":34},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]},"delete":{"tags":["Modération"],"summary":"Effacer tous les avertissements","description":"Efface tous les avertissements de la session. all=true est une confirmation obligatoire.","operationId":"delete_sessions_sessionId_warnings","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"all","in":"query","required":true,"description":"Confirmation obligatoire de l’effacement global.","schema":{"type":"boolean","enum":[true]},"example":true},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Avertissements effacés.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"cleared":{"type":"boolean","const":true,"example":true}},"required":["cleared"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["CONFIRMATION_REQUIRED"]},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"scans-warnings","step":9,"title":"Scanner et gérer les avertissements","description":"Lancez le scan, consultez les avertissements, puis préférez l’effacement ciblé avant l’effacement global.","priority":"important","priorityLabel":"P1 · Important","order":36},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Tous les avertissements de cette session seront supprimés."}},"/sessions/{sessionId}/warnings/{groupId}/{userId}":{"delete":{"tags":["Modération"],"summary":"Effacer un avertissement ciblé","description":"Efface les avertissements d’un utilisateur précis dans un groupe précis.","operationId":"delete_sessions_sessionId_warnings_groupId_userId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"groupId","in":"path","required":true,"description":"JID du groupe WhatsApp. Encodez toujours cette valeur dans le chemin.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"120363000000000000@g.us"},{"name":"userId","in":"path","required":true,"description":"Numéro international ou identifiant WhatsApp de l’utilisateur.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"237690000000"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Avertissement ciblé effacé.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"groupId":{"type":"string","description":"Groupe ciblé.","example":"120363000000000000@g.us"},"userId":{"type":"string","description":"Utilisateur ciblé.","example":"237690000000"},"cleared":{"type":"boolean","const":true,"example":true}},"required":["groupId","userId","cleared"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["WARNING_NOT_FOUND","SESSION_NOT_FOUND"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"scans-warnings","step":9,"title":"Scanner et gérer les avertissements","description":"Lancez le scan, consultez les avertissements, puis préférez l’effacement ciblé avant l’effacement global.","priority":"important","priorityLabel":"P1 · Important","order":35},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Les avertissements ciblés seront supprimés."}},"/sessions/{sessionId}/exemptions":{"get":{"tags":["Exemptions"],"summary":"Lire les exemptions","description":"Retourne les groupes, motifs, utilisateurs et administrateurs exemptés.","operationId":"get_sessions_sessionId_exemptions","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Exemptions effectives.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"exemptions":{"$ref":"#/components/schemas/Exemptions"}},"required":["exemptions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"exemptions","step":8,"title":"Définir les exemptions","description":"Consultez l’état complet, puis ajoutez, retirez ou remplacez les groupes, motifs, utilisateurs et administrateurs exemptés.","priority":"important","priorityLabel":"P1 · Important","order":24},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]},"patch":{"tags":["Exemptions"],"summary":"Remplacer les exemptions","description":"Remplace uniquement les collections fournies puis retourne l’état complet.","operationId":"patch_sessions_sessionId_exemptions","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Exemptions enregistrées.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"exemptions":{"$ref":"#/components/schemas/Exemptions"}},"required":["exemptions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["VALIDATION_ERROR"]},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"exemptions","step":8,"title":"Définir les exemptions","description":"Consultez l’état complet, puis ajoutez, retirez ou remplacez les groupes, motifs, utilisateurs et administrateurs exemptés.","priority":"important","priorityLabel":"P1 · Important","order":25},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExemptionsPatch"},"example":{"groups":["120363000000000000@g.us"],"patterns":["VIP"],"adminsExempt":true}}}},"x-action-warning":"Cette requête remplace les collections d’exemptions fournies."}},"/sessions/{sessionId}/exemptions/groups/{groupId}":{"put":{"tags":["Exemptions"],"summary":"Ajouter une exemption de groupe","description":"Ajoute idempotemment un groupe dont le JID se termine par @g.us. Aucun corps n’est attendu.","operationId":"put_sessions_sessionId_exemptions_groups_groupId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"groupId","in":"path","required":true,"description":"JID du groupe WhatsApp. Encodez toujours cette valeur dans le chemin.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"120363000000000000@g.us"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Groupe exempté.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"exemptions":{"$ref":"#/components/schemas/Exemptions"}},"required":["exemptions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"exemptions","step":8,"title":"Définir les exemptions","description":"Consultez l’état complet, puis ajoutez, retirez ou remplacez les groupes, motifs, utilisateurs et administrateurs exemptés.","priority":"important","priorityLabel":"P1 · Important","order":26},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Ce groupe sera exclu de la modération."},"delete":{"tags":["Exemptions"],"summary":"Retirer une exemption de groupe","description":"Retire idempotemment un groupe de la liste des exemptions.","operationId":"delete_sessions_sessionId_exemptions_groups_groupId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"groupId","in":"path","required":true,"description":"JID du groupe WhatsApp. Encodez toujours cette valeur dans le chemin.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"120363000000000000@g.us"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Exemption du groupe retirée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"exemptions":{"$ref":"#/components/schemas/Exemptions"}},"required":["exemptions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"exemptions","step":8,"title":"Définir les exemptions","description":"Consultez l’état complet, puis ajoutez, retirez ou remplacez les groupes, motifs, utilisateurs et administrateurs exemptés.","priority":"important","priorityLabel":"P1 · Important","order":27},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"La modération pourra de nouveau agir dans ce groupe."}},"/sessions/{sessionId}/exemptions/patterns/{pattern}":{"put":{"tags":["Exemptions"],"summary":"Ajouter un motif exempt","description":"Ajoute idempotemment un motif de nom de groupe. Aucun corps n’est attendu.","operationId":"put_sessions_sessionId_exemptions_patterns_pattern","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"pattern","in":"path","required":true,"description":"Motif de nom de groupe à exempter. La valeur doit être encodée dans l’URL.","schema":{"type":"string","minLength":1,"maxLength":120},"example":"Groupe VIP"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Motif exempté.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"exemptions":{"$ref":"#/components/schemas/Exemptions"}},"required":["exemptions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"exemptions","step":8,"title":"Définir les exemptions","description":"Consultez l’état complet, puis ajoutez, retirez ou remplacez les groupes, motifs, utilisateurs et administrateurs exemptés.","priority":"important","priorityLabel":"P1 · Important","order":28},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Les groupes correspondant à ce motif pourront être exemptés."},"delete":{"tags":["Exemptions"],"summary":"Retirer un motif exempt","description":"Retire idempotemment un motif de la liste des exemptions.","operationId":"delete_sessions_sessionId_exemptions_patterns_pattern","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"pattern","in":"path","required":true,"description":"Motif de nom de groupe à exempter. La valeur doit être encodée dans l’URL.","schema":{"type":"string","minLength":1,"maxLength":120},"example":"Groupe VIP"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Motif retiré.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"exemptions":{"$ref":"#/components/schemas/Exemptions"}},"required":["exemptions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"exemptions","step":8,"title":"Définir les exemptions","description":"Consultez l’état complet, puis ajoutez, retirez ou remplacez les groupes, motifs, utilisateurs et administrateurs exemptés.","priority":"important","priorityLabel":"P1 · Important","order":29},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Ce motif ne sera plus exempté."}},"/sessions/{sessionId}/exemptions/users/{userId}":{"put":{"tags":["Exemptions"],"summary":"Ajouter une exemption utilisateur","description":"Ajoute ou remplace les exemptions de liens et d’appels d’un utilisateur.","operationId":"put_sessions_sessionId_exemptions_users_userId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"userId","in":"path","required":true,"description":"Numéro international ou identifiant WhatsApp de l’utilisateur.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"237690000000"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Utilisateur exempté.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"exemptions":{"$ref":"#/components/schemas/Exemptions"}},"required":["exemptions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"exemptions","step":8,"title":"Définir les exemptions","description":"Consultez l’état complet, puis ajoutez, retirez ou remplacez les groupes, motifs, utilisateurs et administrateurs exemptés.","priority":"important","priorityLabel":"P1 · Important","order":30},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserExemptionRequest"},"example":{"links":true,"calls":false}}}},"x-action-warning":"Les règles choisies ne s’appliqueront plus à cet utilisateur."},"delete":{"tags":["Exemptions"],"summary":"Retirer une exemption utilisateur","description":"Retire idempotemment toutes les exemptions de cet utilisateur.","operationId":"delete_sessions_sessionId_exemptions_users_userId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"userId","in":"path","required":true,"description":"Numéro international ou identifiant WhatsApp de l’utilisateur.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"237690000000"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Exemption utilisateur retirée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"exemptions":{"$ref":"#/components/schemas/Exemptions"}},"required":["exemptions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"exemptions","step":8,"title":"Définir les exemptions","description":"Consultez l’état complet, puis ajoutez, retirez ou remplacez les groupes, motifs, utilisateurs et administrateurs exemptés.","priority":"important","priorityLabel":"P1 · Important","order":31},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Cet utilisateur sera de nouveau soumis aux règles normales."}},"/sessions/{sessionId}/exemptions/admins":{"patch":{"tags":["Exemptions"],"summary":"Modifier l’exemption des administrateurs","description":"Active ou désactive l’exemption globale des administrateurs de groupe.","operationId":"patch_sessions_sessionId_exemptions_admins","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Exemption des administrateurs enregistrée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"exemptions":{"$ref":"#/components/schemas/Exemptions"}},"required":["exemptions"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"exemptions","step":8,"title":"Définir les exemptions","description":"Consultez l’état complet, puis ajoutez, retirez ou remplacez les groupes, motifs, utilisateurs et administrateurs exemptés.","priority":"important","priorityLabel":"P1 · Important","order":32},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminsExemptionRequest"},"example":{"enabled":true}}}},"x-action-warning":"Cette préférence affecte tous les administrateurs de groupe."}},"/sessions/{sessionId}/blocked-users":{"get":{"tags":["Blocages"],"summary":"Lire les utilisateurs bloqués","description":"Liste les blocages temporaires enregistrés pour les appels entrants.","operationId":"get_sessions_sessionId_blocked_users","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Utilisateurs bloqués.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"blockedUsers":{"type":"array","items":{"type":"object","properties":{},"additionalProperties":true},"description":"Blocages."},"total":{"type":"integer","description":"Nombre de blocages.","example":1,"minimum":0}},"required":["blockedUsers","total"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"blocked-users","step":10,"title":"Contrôler les blocages","description":"Consultez les utilisateurs bloqués avant de débloquer précisément la personne concernée.","priority":"important","priorityLabel":"P1 · Important","order":37},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/sessions/{sessionId}/blocked-users/{userId}":{"delete":{"tags":["Blocages"],"summary":"Débloquer un utilisateur","description":"Supprime immédiatement le blocage d’appels d’un utilisateur.","operationId":"delete_sessions_sessionId_blocked_users_userId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"userId","in":"path","required":true,"description":"Numéro international ou identifiant WhatsApp de l’utilisateur.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"237690000000"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Utilisateur débloqué.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"userId":{"type":"string","description":"Utilisateur débloqué.","example":"237690000000"},"unblocked":{"type":"boolean","const":true,"example":true}},"required":["userId","unblocked"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["BLOCK_NOT_FOUND"]},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_CONNECTED"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"blocked-users","step":10,"title":"Contrôler les blocages","description":"Consultez les utilisateurs bloqués avant de débloquer précisément la personne concernée.","priority":"important","priorityLabel":"P1 · Important","order":38},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Le blocage de cet utilisateur sera supprimé immédiatement."}},"/sessions/{sessionId}/menus":{"get":{"tags":["Menus"],"summary":"Lister les menus","description":"Retourne tous les menus interactifs enregistrés pour la session.","operationId":"get_sessions_sessionId_menus","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Menus de la session.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"menus":{"type":"array","items":{"$ref":"#/components/schemas/Menu"},"description":"Menus."},"total":{"type":"integer","description":"Nombre de menus.","example":2,"minimum":0}},"required":["menus","total"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"menus","step":13,"title":"Construire des menus interactifs","description":"Créez un menu, consultez-le, modifiez-le, envoyez-le à un groupe connu, puis supprimez-le en fin de cycle.","priority":"advanced","priorityLabel":"P2 · Avancé","order":47},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]},"post":{"tags":["Menus"],"summary":"Créer un menu","description":"Crée un menu à boutons ou à liste. Un objet vide crée un menu par défaut.","operationId":"post_sessions_sessionId_menus","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"Menu créé.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"menu":{"$ref":"#/components/schemas/Menu"}},"required":["menu"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"menus","step":13,"title":"Construire des menus interactifs","description":"Créez un menu, consultez-le, modifiez-le, envoyez-le à un groupe connu, puis supprimez-le en fin de cycle.","priority":"advanced","priorityLabel":"P2 · Avancé","order":46},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MenuInput"},"example":{"id":"menu_service_client","title":"Service client","description":"Choisissez une option","trigger":"menu, aide","triggerMode":"exact","type":"buttons","buttons":[{"id":"support","text":"Parler au support"}],"enabled":true}}}},"x-action-warning":"Cette requête crée ou remplace un menu portant le même identifiant."}},"/sessions/{sessionId}/menus/{menuId}":{"get":{"tags":["Menus"],"summary":"Lire un menu","description":"Retourne le menu demandé.","operationId":"get_sessions_sessionId_menus_menuId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"menuId","in":"path","required":true,"description":"Identifiant du menu interactif.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"menu_service_client"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Menu trouvé.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"menu":{"$ref":"#/components/schemas/Menu"}},"required":["menu"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["MENU_NOT_FOUND","SESSION_NOT_FOUND"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"menus","step":13,"title":"Construire des menus interactifs","description":"Créez un menu, consultez-le, modifiez-le, envoyez-le à un groupe connu, puis supprimez-le en fin de cycle.","priority":"advanced","priorityLabel":"P2 · Avancé","order":48},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]},"patch":{"tags":["Menus"],"summary":"Modifier un menu","description":"Fusionne les champs fournis avec le menu existant puis normalise son contenu.","operationId":"patch_sessions_sessionId_menus_menuId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"menuId","in":"path","required":true,"description":"Identifiant du menu interactif.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"menu_service_client"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Menu modifié.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"menu":{"$ref":"#/components/schemas/Menu"}},"required":["menu"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["MENU_NOT_FOUND","SESSION_NOT_FOUND"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"menus","step":13,"title":"Construire des menus interactifs","description":"Créez un menu, consultez-le, modifiez-le, envoyez-le à un groupe connu, puis supprimez-le en fin de cycle.","priority":"advanced","priorityLabel":"P2 · Avancé","order":49},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MenuInput"},"example":{"title":"Nouveau titre","enabled":true}}}},"x-action-warning":"Le menu existant sera modifié immédiatement."},"delete":{"tags":["Menus"],"summary":"Supprimer un menu","description":"Supprime définitivement le menu de la session.","operationId":"delete_sessions_sessionId_menus_menuId","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"menuId","in":"path","required":true,"description":"Identifiant du menu interactif.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"menu_service_client"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Menu supprimé.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"menuId":{"type":"string","description":"Menu supprimé.","example":"menu_service_client"},"deleted":{"type":"boolean","const":true,"example":true}},"required":["menuId","deleted"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["MENU_NOT_FOUND","SESSION_NOT_FOUND"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"menus","step":13,"title":"Construire des menus interactifs","description":"Créez un menu, consultez-le, modifiez-le, envoyez-le à un groupe connu, puis supprimez-le en fin de cycle.","priority":"advanced","priorityLabel":"P2 · Avancé","order":51},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Le menu sera supprimé définitivement."}},"/sessions/{sessionId}/menus/{menuId}/send":{"post":{"tags":["Menus"],"summary":"Envoyer un menu","description":"Envoie le menu dans un groupe où le bot est administrateur.","operationId":"post_sessions_sessionId_menus_menuId_send","parameters":[{"name":"sessionId","in":"path","required":true,"description":"Identifiant de la session WhatsApp ciblée.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"session_01JABCDEF1234567890"},{"name":"menuId","in":"path","required":true,"description":"Identifiant du menu interactif.","schema":{"type":"string","minLength":1,"maxLength":128},"example":"menu_service_client"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"Menu envoyé.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"menuId":{"type":"string","description":"Menu envoyé.","example":"menu_service_client"},"groupId":{"type":"string","description":"Groupe destinataire.","example":"120363000000000000@g.us"},"sent":{"type":"boolean","const":true,"example":true}},"required":["menuId","groupId","sent"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["MENU_NOT_FOUND","GROUP_NOT_FOUND"]},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_CONNECTED","BOT_NOT_GROUP_ADMIN","MENU_SEND_FAILED"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"menus","step":13,"title":"Construire des menus interactifs","description":"Créez un menu, consultez-le, modifiez-le, envoyez-le à un groupe connu, puis supprimez-le en fin de cycle.","priority":"advanced","priorityLabel":"P2 · Avancé","order":50},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMenuRequest"},"example":{"groupId":"120363000000000000@g.us"}}}},"x-action-warning":"Ce menu sera envoyé immédiatement dans le groupe indiqué."}},"/announcements":{"get":{"tags":["Annonces"],"summary":"Lister les annonces","description":"Liste les annonces visibles, avec contenu tronqué et sans données d’image.","operationId":"get_announcements","parameters":[{"name":"limit","in":"query","required":false,"description":"Nombre maximal d’éléments retournés. Valeur par défaut : 50.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"example":50},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Annonces visibles.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"announcements":{"type":"array","items":{"$ref":"#/components/schemas/Announcement"},"description":"Annonces."}},"required":["announcements"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"announcements","step":14,"title":"Préparer et diffuser des annonces","description":"Créez et révisez le brouillon, dupliquez-le si besoin, publiez-le, analysez les résultats, puis supprimez-le.","priority":"advanced","priorityLabel":"P2 · Avancé","order":53},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]},"post":{"tags":["Annonces"],"summary":"Créer une annonce","description":"Crée une annonce en brouillon. image accepte null ou une data URL JPEG, PNG ou WebP.","operationId":"post_announcements","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"Annonce créée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"announcement":{"$ref":"#/components/schemas/Announcement"}},"required":["announcement"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["MEDIA_TOO_LARGE","PAYLOAD_TOO_LARGE"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"announcements","step":14,"title":"Préparer et diffuser des annonces","description":"Créez et révisez le brouillon, dupliquez-le si besoin, publiez-le, analysez les résultats, puis supprimez-le.","priority":"advanced","priorityLabel":"P2 · Avancé","order":52},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnouncementInput"},"example":{"title":"Fermeture exceptionnelle","content":"La boutique fermera à 16 h aujourd’hui.","groups":["120363000000000000@g.us"],"linkPreview":true,"sendAsHd":false}}}},"x-action-warning":"Cette requête crée un brouillon d’annonce."}},"/announcements/stats":{"get":{"tags":["Annonces"],"summary":"Lire les statistiques des annonces","description":"Compte les annonces visibles par état.","operationId":"get_announcements_stats","parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Statistiques des annonces.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"stats":{"type":"object","properties":{"total":{"type":"integer","description":"Total.","example":5,"minimum":0},"drafts":{"type":"integer","description":"Brouillons.","example":2,"minimum":0},"publishing":{"type":"integer","description":"Publications en cours.","example":1,"minimum":0},"published":{"type":"integer","description":"Annonces publiées.","example":2,"minimum":0},"failed":{"type":"integer","description":"Annonces en échec.","example":0,"minimum":0}},"required":["total","drafts","publishing","published","failed"]}},"required":["stats"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"announcements","step":14,"title":"Préparer et diffuser des annonces","description":"Créez et révisez le brouillon, dupliquez-le si besoin, publiez-le, analysez les résultats, puis supprimez-le.","priority":"advanced","priorityLabel":"P2 · Avancé","order":58},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]}},"/announcements/{announcementId}":{"get":{"tags":["Annonces"],"summary":"Lire une annonce","description":"Retourne une annonce complète, sauf les données brutes de l’image remplacées par hasImage.","operationId":"get_announcements_announcementId","parameters":[{"name":"announcementId","in":"path","required":true,"description":"Identifiant de l’annonce.","schema":{"type":"string","minLength":1},"example":"ann_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Annonce trouvée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"announcement":{"$ref":"#/components/schemas/Announcement"}},"required":["announcement"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ANNOUNCEMENT_ACCESS_DENIED"]},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ANNOUNCEMENT_NOT_FOUND"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"announcements","step":14,"title":"Préparer et diffuser des annonces","description":"Créez et révisez le brouillon, dupliquez-le si besoin, publiez-le, analysez les résultats, puis supprimez-le.","priority":"advanced","priorityLabel":"P2 · Avancé","order":54},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}]},"patch":{"tags":["Annonces"],"summary":"Modifier une annonce","description":"Modifie les champs fournis tant que l’annonce n’est pas en cours de publication.","operationId":"patch_announcements_announcementId","parameters":[{"name":"announcementId","in":"path","required":true,"description":"Identifiant de l’annonce.","schema":{"type":"string","minLength":1},"example":"ann_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Annonce modifiée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"announcement":{"$ref":"#/components/schemas/Announcement"}},"required":["announcement"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ANNOUNCEMENT_NOT_EDITABLE"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["MEDIA_TOO_LARGE","PAYLOAD_TOO_LARGE"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"announcements","step":14,"title":"Préparer et diffuser des annonces","description":"Créez et révisez le brouillon, dupliquez-le si besoin, publiez-le, analysez les résultats, puis supprimez-le.","priority":"advanced","priorityLabel":"P2 · Avancé","order":55},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnouncementPatch"},"example":{"title":"Nouveau titre","linkPreview":false}}}},"x-action-warning":"L’annonce existante sera modifiée."},"delete":{"tags":["Annonces"],"summary":"Supprimer une annonce","description":"Supprime une annonce qui n’est pas en cours de publication.","operationId":"delete_announcements_announcementId","parameters":[{"name":"announcementId","in":"path","required":true,"description":"Identifiant de l’annonce.","schema":{"type":"string","minLength":1},"example":"ann_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Annonce supprimée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"announcementId":{"type":"string","description":"Annonce supprimée.","example":"ann_01JABCDEF1234567890"},"deleted":{"type":"boolean","const":true,"example":true}},"required":["announcementId","deleted"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["ANNOUNCEMENT_NOT_DELETABLE"]},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"announcements","step":14,"title":"Préparer et diffuser des annonces","description":"Créez et révisez le brouillon, dupliquez-le si besoin, publiez-le, analysez les résultats, puis supprimez-le.","priority":"advanced","priorityLabel":"P2 · Avancé","order":59},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"L’annonce sera supprimée définitivement."}},"/announcements/{announcementId}/duplicate":{"post":{"tags":["Annonces"],"summary":"Dupliquer une annonce","description":"Crée une copie en brouillon de l’annonce.","operationId":"post_announcements_announcementId_duplicate","parameters":[{"name":"announcementId","in":"path","required":true,"description":"Identifiant de l’annonce.","schema":{"type":"string","minLength":1},"example":"ann_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"Copie créée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"announcement":{"$ref":"#/components/schemas/Announcement"}},"required":["announcement"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"announcements","step":14,"title":"Préparer et diffuser des annonces","description":"Créez et révisez le brouillon, dupliquez-le si besoin, publiez-le, analysez les résultats, puis supprimez-le.","priority":"advanced","priorityLabel":"P2 · Avancé","order":56},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":false,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"x-action-warning":"Cette requête crée une nouvelle annonce."}},"/announcements/{announcementId}/publish":{"post":{"tags":["Annonces"],"summary":"Publier une annonce","description":"Lance une tâche de publication avec une session connectée. L’annonce doit contenir au moins un groupe.","operationId":"post_announcements_announcementId_publish","parameters":[{"name":"announcementId","in":"path","required":true,"description":"Identifiant de l’annonce.","schema":{"type":"string","minLength":1},"example":"ann_01JABCDEF1234567890"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"202":{"description":"Publication acceptée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true,"example":true},"data":{"type":"object","properties":{"job":{"$ref":"#/components/schemas/Job"},"pollUrl":{"type":"string","description":"URL relative de suivi.","example":"/api/v1/jobs/job_01JABCDEF1234567890"}},"required":["job","pollUrl"]},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"required":["success","data","meta"]}}}},"400":{"description":"Requête invalide ou paramètres incohérents.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["NO_TARGET_GROUPS"]},"401":{"description":"Authentification absente, invalide, expirée ou clé révoquée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"402":{"description":"Plan API ou couverture active de la session requis pour poursuivre.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"},"examples":{"apiPlanRequired":{"summary":"Plan API inactif ou expiré","value":{"success":false,"error":{"code":"API_PLAN_REQUIRED","message":"Le plan API est requis pour cette operation","details":{"requiredPlan":"api","subscriptionUrl":"/dashboard?upgrade=api","credentialStatus":"subscription_suspended","reactivatesOnRenewal":true}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}},"sessionSubscriptionRequired":{"summary":"Session non couverte ou expirée","value":{"success":false,"error":{"code":"SESSION_SUBSCRIPTION_REQUIRED","message":"Cette session n est pas couverte par un abonnement actif","details":{"sessionId":"session_01JABCDEF1234567890","subscriptionUrl":"/dashboard"}},"meta":{"requestId":"req_01JABCDEF1234567890","timestamp":"2026-07-19T12:00:00.000Z"}}}}}},"x-error-codes":["API_PLAN_REQUIRED","SESSION_SUBSCRIPTION_REQUIRED"]},"403":{"description":"Ressource interdite au compte ou session de compte exigée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"404":{"description":"Ressource introuvable.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"409":{"description":"État courant incompatible avec l’action demandée.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["SESSION_NOT_CONNECTED","ANNOUNCEMENT_ALREADY_PUBLISHING"]},"413":{"description":"Corps JSON ou média trop volumineux.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"429":{"description":"Quota ou limite de débit atteint.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"x-error-codes":["API_REQUEST_RATE_LIMIT_REACHED","DAILY_API_REQUEST_LIMIT_REACHED","MONTHLY_MESSAGE_QUOTA_EXCEEDED","CONCURRENT_JOB_LIMIT_REACHED","DAILY_SCAN_JOB_LIMIT_REACHED"]},"500":{"description":"Erreur interne inattendue.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"},"Cache-Control":{"$ref":"#/components/headers/CacheControl"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"x-accept":"application/json","x-workflow":{"id":"announcements","step":14,"title":"Préparer et diffuser des annonces","description":"Créez et révisez le brouillon, dupliquez-le si besoin, publiez-le, analysez les résultats, puis supprimez-le.","priority":"advanced","priorityLabel":"P2 · Avancé","order":57},"x-subscription":{"public":false,"requiredPlan":"api","accountSessionRequiresActiveApiPlan":true,"apiKeyRequiresActiveApiPlan":true,"requiresCoveredSession":true,"requiresSessionCapacity":false,"availableWhenInactiveWithAccountSession":false,"adminBypass":true,"adminDelegatedOwnerMustQualify":false,"apiKeyLifecycle":"suspended_on_expiry_reactivated_on_api_plan_renewal"},"security":[{"bearerAuth":[]},{"apiKeyAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"description":"Corps JSON de la requête.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishAnnouncementRequest"},"example":{"sessionId":"session_01JABCDEF1234567890"}}}},"x-action-warning":"Cette requête enverra réellement l’annonce dans tous les groupes cibles."}}}}