Erreur WhatsApp 200 : accès refusé (200-299), solution
Erreur WhatsApp 200 sur la Cloud API : jeton absent, permission retirée ou utilisateur système sans accès au compte. Diagnostic et correction.
L'erreur WhatsApp 200, comme toute la plage 200 à 299, signifie que l'appel n'a pas les droits nécessaires : jeton absent, permission non accordée ou retirée, ou utilisateur système sans accès au compte WhatsApp visé. Rien à voir avec le statut HTTP 200. Elle se corrige en rendant l'accès, pas en réessayant.
Que signifie l'erreur 200 ?
Meta décrit deux entrées dans ses erreurs d'autorisation (Meta, codes d'erreur de la Cloud API) :
| Code | details selon Meta | Ce que Meta conseille |
|---|---|---|
200 | « No access token was provided. » L'API répond alors « Provide valid app ID », sur certains endpoints GET comme whatsapp_business_profile ; d'autres endpoints renvoient 190 ou 104 à la place | « Ensure your request includes a valid access token. » Meta précise que ce cas est distinct du 190 |
200 à 299 | « Permission is either not granted or has been removed. » | Vérifier dans le débogueur de jetons que l'app a les permissions exigées par l'endpoint |
Le guide des jetons de Meta ajoute le cas le plus courant en production : la plupart des endpoints vérifient que l'utilisateur derrière le jeton a accès à la ressource demandée, et refusent sinon avec le code 200, « à ne pas confondre avec le statut HTTP 200 » (Meta, Access tokens). Graph appelle cette plage « API Permission » (Meta, Graph API, gestion des erreurs).
Quand l'erreur 200 apparaît-elle ?
- L'utilisateur système n'est pas assigné au compte. Un utilisateur système « employé » doit recevoir un accès partiel ou complet au compte WhatsApp et au compte de messagerie : l'accès au second seul ne suffit pas (même page).
- Une permission manque au jeton. Désenregistrer un numéro sans
whatsapp_business_managementrenvoie 200, par exemple (Meta, Registration). - La requête part sans jeton, typiquement un
GETsur le profil professionnel. - L'entreprise a cessé de partager son compte avec le partenaire. Meta émet alors l'événement
PARTNER_REMOVED(Meta, webhook account_update), et l'utilisateur système du partenaire perd son accès au compte.
Où la voir dans Genuka WA ?
Avec Genuka WA, le dernier cas est fréquent : votre client a retiré l'accès de Genuka à son compte
WhatsApp, dans son Business Manager ou, pour un numéro en coexistence, depuis l'application
WhatsApp Business (Meta, coexistence). Genuka reçoit le
PARTNER_REMOVED, passe la connexion en disconnected et relaie l'événement account_update à
vos webhooks. La même situation peut aussi revenir sous le code 100 avec le
sous-code 33, « … cannot be loaded due to missing permissions », voir
erreur 100.
Genuka ne range pas les codes 200 à 299 dans une classe dédiée : la classe découle du statut HTTP
renvoyé par Meta, config sur un 401 ou un 403, unknown sinon. Dans les deux cas, le refus n'est
pas réessayable.
| Canal | Ce que vous recevez |
|---|---|
POST /api/v1/messages | 409 send_config ou 400 send_unknown, avec meta.code: 200 |
POST /api/v1/templates | 403 ou 422, "error": "meta_rejected" |
GET /api/v1/connections | "status": "disconnected" sur le numéro concerné |
Un numéro en coexistence peut aussi passer offboarded : Meta a signalé qu'il n'est plus relié à
l'API, par exemple après un changement d'appareil suivi d'un réenregistrement
(Meta, coexistence). Genuka refuse alors les envois lui-même, avant
d'appeler Meta : 409 send_config, avec un message qui nomme le retrait (« was offboarded by the
merchant… ») et sans meta.code. Un numéro que vous avez libéré de votre forfait est refusé de la
même façon, en 409 number_released.
Comment corriger l'erreur 200 ?
Si vous passez par Genuka WA
Regardez l'état du numéro.
curl "https://wa.genuka.com/api/v1/connections?companyId=cmp_123" \
-H "Authorization: Bearer $GENUKA_WA_API_KEY"{ "data": [ { "id": "con_1", "companyId": "cmp_123", "displayPhoneNumber": "+237 6 90 …",
"qualityRating": "GREEN", "status": "disconnected" } ] }S'il est disconnected, cherchez pourquoi avant de demander une reconnexion. Ce statut dit
que Meta a signalé le compte comme n'étant plus partagé avec Genuka, ou supprimé, ou que vous avez
libéré le numéro vous-même. Un client qui a retiré l'accès repasse par le même lien
/connect/{votre-slug} : l'accès revient sur la même fiche, messages, templates et statistiques
conservés, sans nouvelle place dans votre forfait (Connecter un numéro). Un
numéro libéré demande de nouveau une place libre. Un compte supprimé, ou désactivé par Meta
(erreur 368), ne se rétablit pas par une reconnexion : l'événement
account_update relayé à vos webhooks dit de quel cas il s'agit. S'il est offboarded, suivez le
guide coexistence.
S'il est toujours connected, écrivez au support Genuka avec l'en-tête x-request-id de la
réponse et meta.traceId. Ce statut reflète les derniers événements reçus de Meta : il ne prouve
pas que l'accès est intact.
Si vous appelez la Cloud API avec votre propre jeton
Assignez l'utilisateur système aux deux comptes. Dans Meta Business Suite : paramètres du portefeuille, Accounts > WhatsApp accounts, choisissez le compte, onglet People, +Add people, puis l'utilisateur système et son niveau d'accès. Recommencez dans Accounts > Messaging accounts (Meta, Access tokens).
Vérifiez les permissions du jeton dans le
débogueur de jetons :
whatsapp_business_management et whatsapp_business_messaging, plus business_management si
vous gérez des actifs du portefeuille.
Ne comptez pas sur la cascade de l'API. Un accès accordé par l'API sur le compte de messagerie s'applique aussi au compte WhatsApp lié, mais Meta qualifie ce comportement de provisoire, et Meta Business Suite ne le reproduit pas. Assignez les deux comptes explicitement (même page).
Comment éviter l'erreur 200 ?
- Abonnez un endpoint à
account_update. UnPARTNER_REMOVEDvous prévient au moment où le client retire l'accès, avant que vos envois n'échouent. - Expliquez à vos clients ce que le retrait implique. Retirer Genuka de son Business Manager coupe l'API sur tous les numéros de ce compte WhatsApp.
- Si vous gérez vos propres jetons, Meta indique qu'un utilisateur système administrateur a par défaut accès à tous les comptes WhatsApp possédés par votre portefeuille ou partagés avec lui ; un utilisateur employé doit être assigné compte par compte.
Quels codes sont liés ?
- 190 : le jeton a expiré ou a été invalidé.
- 10 : permission non accordée ou retirée, y compris les templates OTP d'une entreprise non vérifiée.
- 3 : capacité ou permission manquante pour cet endpoint.
- 0 : Meta n'a pas pu authentifier l'utilisateur de l'app.
FAQ
L'erreur 200 a-t-elle un rapport avec le statut HTTP 200 ?
Aucun. C'est un code d'erreur de Meta, renvoyé dans le champ code d'une réponse en échec. Meta
le précise lui-même dans sa documentation.
Mon client a retiré Genuka par erreur : que doit-il faire ?
Repasser par votre lien de connexion. Le numéro revient sur la même fiche, avec son historique, et sans consommer de place supplémentaire.
Pourquoi l'erreur ne touche-t-elle qu'une partie de mes numéros ?
Parce que l'accès se donne compte WhatsApp par compte WhatsApp. Les numéros d'un client qui a retiré l'accès échouent ; ceux des autres clients continuent.
Faut-il réessayer ?
Non. Tant que l'accès n'est pas rétabli, chaque nouvel appel produira la même erreur.