Authentification
Chaque requête porte la clé dans l'en-tête x-api-key. La forme Authorization: Bearer fitsa_live_... est également acceptée, pour les plateformes qui ne savent poser qu'un jeton porteur.
-H "x-api-key: fitsa_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Aucun identifiant de boutique à transmettre
La boutique, son numéro WhatsApp et ses autorisations sont tous déduits de la clé.
Une requête qui contient storeId, store_id, userId ou tout champ équivalent est refusée, pas silencieusement ignorée : 400, code unsupported_field.
C'est un choix de conception, pas une restriction arbitraire :
- une chose à gérer côté client au lieu de deux, une seule à mettre en secret ;
- un identifiant accepté en paramètre serait une invitation à en essayer un autre ;
- une clé compromise n'expose qu'une boutique, il n'y a aucun second paramètre à faire varier.
Portées
Chaque clé porte des portées, au format domaine:ressource:verbe :
| Portée | Autorise |
|---|---|
whatsapp:messages:write | Envoyer des messages |
whatsapp:messages:read | Lire les accusés de réception |
whatsapp:templates:read | Lister les modèles |
whatsapp:templates:write | Créer et supprimer des modèles |
Un appel hors portée répond 403 avec le code insufficient_scope et la portée manquante dans param.
Rotation
Le bouton Remplacer du tableau de bord crée une clé neuve avec les mêmes réglages et révoque l'ancienne immédiatement. Un délai de grâce laisserait deux clés valides sans qu'on sache laquelle est compromise.