Une clé API permet à un autre logiciel (un CRM, un site web, un script, un outil d'automatisation) d'appeler votre passerelle sans utiliser de compte du dashboard. Chaque clé est indépendante : elle a son propre nom, ses propres droits et ses propres plafonds, et peut être révoquée sans toucher aux autres.
Les clés se gèrent sur la page Clés API du dashboard (menu Système > Clés API, ou le bouton Gérer les clés API de la page Référence de l'API).
Qui peut faire quoi
| Rôle | Sur la page Clés API |
|---|---|
| Superadministrateur | Créer, modifier, révoquer et supprimer des clés |
| Opérateur, Lecture seule | Voir la liste, en lecture seule. Les actions ne sont pas affichées |
Une clé de portée admin peut aussi gérer les clés par l'API (/api-keys). Aucune autre clé ne le
peut : une clé autorisée à envoyer ne doit pas pouvoir s'accorder davantage de droits.
Créer une clé
- Ouvrez Clés API, puis Nouvelle clé API.
- Renseignez les options ci-dessous. Seuls le nom et la portée sont obligatoires.
- Cliquez sur Créer la clé.
- La clé s'affiche une seule fois, avec un bouton Copier la clé et une commande
curlprête à l'emploi qui lit le dernier message (elle n'envoie rien, quelle que soit la portée). Copiez la clé dans votre application ou votre gestionnaire de secrets. - Cliquez sur J'ai copié la clé. La fenêtre ne se ferme pas autrement, pour que la clé ne soit pas perdue sur un clic malheureux.
Ensuite, personne ne peut plus lire la clé : ni vous, ni l'API, ni le support. La passerelle n'en garde qu'une empreinte, qui suffit à la reconnaître et ne permet pas de la reconstituer. Une clé perdue se remplace par une nouvelle.
Ce qui reste visible, c'est le préfixe : sk_ suivi des huit premiers caractères, par exemple
sk_A1b2C3d. Il permet de reconnaître une clé dans la liste, ou dans la configuration de votre
application, sans l'exposer.
Options
| Option | Où | Par défaut | Valeurs admises | Effet |
|---|---|---|---|---|
| Nom | Création et modification | obligatoire | 1 à 80 caractères, unique (sans tenir compte des majuscules) | Un libellé seulement. Nommez la clé d'après l'application qui l'utilise, pour savoir laquelle révoquer |
| Portée | Création et modification | Lecture | Lecture (read), Envoi (send), Administration (admin) |
Ce que la clé peut appeler. Voir Portées |
| Adresses IP autorisées | Création et modification | vide : toutes les adresses | Jusqu'à 16 entrées, chacune une adresse IPv4 ou IPv6 ou une plage CIDR (203.0.113.7, 10.0.0.0/8, 2001:db8::/32), une par ligne |
Un appel venant de toute autre adresse est refusé avec 403 IP_NOT_ALLOWED. Voir Adresses autorisées |
| Appels par jour | Création et modification | vide : aucun plafond | 0 à 1 000 000. Vide ou 0 signifie aucun plafond | Au-delà, les appels sont refusés avec 429 RATE_LIMITED jusqu'à minuit UTC. Le compteur survit à un redémarrage de la passerelle |
| Appels par minute | Création et modification | vide : aucun plafond | 0 à 10 000. Vide ou 0 signifie aucun plafond | Au-delà, les appels sont refusés avec 429 RATE_LIMITED et un en-tête Retry-After. Une fois réglé, chaque réponse porte les en-têtes X-RateLimit-* |
Les changements faits par Modifier valent dès l'appel suivant. La clé elle-même ne change pas : l'application continue de fonctionner avec la même valeur.
Portées
Les trois portées sont ordonnées : chacune inclut la précédente.
| Portée dans le dashboard | Valeur | Ce que la clé peut faire | Usage typique |
|---|---|---|---|
| Lecture | read |
Consulter les messages, conversations, contacts, groupes, appareils, campagnes, statistiques et le journal d'activité. Aucun envoi, aucune modification | Un outil de reporting, votre propre tableau de bord |
| Envoi | send |
Tout ce que permet Lecture, plus envoyer un SMS et relancer un message en échec. Aucune modification de la configuration | Un site web qui envoie des codes de confirmation, un CRM qui envoie des rappels |
| Administration | admin |
Toute l'API : configuration, contacts, modèles, règles, campagnes, webhooks, exports en masse, sauvegardes, journal technique et les clés elles-mêmes | Un outil de confiance qui administre la passerelle |
Certaines lectures sont réservées à Administration même si elles ne modifient rien, parce qu'elles livrent beaucoup de données d'un coup : les exports en masse, les sauvegardes (qui contiennent toute la base), la liste des comptes du dashboard (elle contient des adresses e-mail) et le journal technique. Une clé Lecture sert à consulter un message ou un appareil, pas à emporter l'installation.
Quelle que soit sa portée, une clé ne peut jamais créer, modifier ou supprimer un compte du dashboard : ces actions demandent un superadministrateur connecté au dashboard.
Un appel hors de la portée de la clé reçoit 403 FORBIDDEN_SCOPE. Un appel refusé n'entame pas
votre quota.
Adresses autorisées
Laissez la liste vide et la clé fonctionne depuis n'importe où, ce qui convient à une clé utilisée depuis plusieurs endroits dont les adresses changent. Remplissez-la dès que l'application appelante a une adresse fixe : une clé copiée par erreur dans un dépôt public devient alors inutile à qui la trouve.
L'adresse contrôlée est celle de la machine qui appelle la passerelle, telle que la passerelle la voit :
- dans l'installation standard avec un domaine, le frontal HTTPS (Caddy) transmet l'adresse réelle de l'appelant, et c'est elle qui est contrôlée ;
- sur un réseau local, c'est l'adresse de la machine appelante sur ce réseau ;
- si vous placez votre propre proxy inverse devant la passerelle, déclarez-le dans
GATEWAY_TRUSTED_PROXIES(voir le guide d'installation). Sinon, tous les appels semblent venir du proxy, et la liste laisse tout passer ou refuse tout. Tant qu'une liste existe, un appel dont l'adresse est illisible est refusé plutôt que laissé passer.
Plafonds
Les deux plafonds protègent contre des choses différentes :
- Appels par minute arrête une rafale : un script en boucle, une page rechargée mille fois. Il compte en mémoire et repart de zéro au redémarrage de la passerelle.
- Appels par jour plafonne le volume total d'une journée. Il est enregistré avec vos données : un redémarrage ne rend donc pas le quota. Il est compté par jour UTC, de minuit à minuit UTC, quel que soit votre fuseau horaire.
Tous les appels comptent, lectures comprises, pas seulement les envois. Un appel refusé (mauvaise portée, adresse non autorisée) n'entame pas le quota journalier ; un appel refusé pour dépassement du plafond par minute compte tout de même dans cette minute, donc réessayer plus vite n'aide pas.
Ces plafonds sont propres à chaque clé. Ils sont indépendants du quota journalier de chaque SIM réglé sur la page Appareils, qui limite les SMS réellement envoyés par chaque carte, quelle que soit leur origine. Une clé sans plafond ne peut donc pas faire dépasser son quota à une SIM.
La liste
| Colonne | Ce qu'elle affiche |
|---|---|
| Nom | Le nom, et la date de création |
| Préfixe | sk_ et les huit premiers caractères de la clé |
| Portée | Lecture, Envoi ou Administration |
| Adresses autorisées | « Toutes les adresses », ou la première entrée et le nombre des autres |
| Plafonds | Par jour et par minute, ou « Aucun plafond » |
| Dernière utilisation | L'heure du dernier appel accepté, ou « Jamais » |
| Statut | Active, ou Révoquée avec sa date |
Dernière utilisation est le moyen le plus rapide de repérer une clé que plus personne n'utilise : une clé inutilisée depuis des mois est une clé à révoquer.
Renouveler une clé
Il n'y a pas de bouton « régénérer », volontairement : remplacer une clé sur place casserait l'application qui l'utilise à l'instant même du clic. Le renouvellement se fait en trois étapes, sans interruption :
- Créez une nouvelle clé avec la même portée et les mêmes options, nommée par exemple
CRM 2026-09. - Placez la nouvelle clé dans l'application et vérifiez qu'elle fonctionne (sa colonne Dernière utilisation se remplit).
- Révoquez l'ancienne clé.
Renouvelez une clé quand une personne qui la connaissait s'en va, quand elle a pu être exposée (un journal, une capture d'écran, un dépôt, un ticket de support), et sinon au rythme qui vous convient.
Révoquer ou supprimer
| Action | Effet | Quand l'utiliser |
|---|---|---|
| Révoquer | La clé est refusée dès l'appel suivant, définitivement. La ligne reste dans la liste, avec sa date de révocation et de dernière utilisation | La façon normale de retirer une clé |
| Supprimer | La clé est refusée, puis effacée avec ses compteurs. Il ne reste rien dans la liste | Faire le ménage d'une clé déjà révoquée |
Les deux prennent effet immédiatement : rien n'est mis en cache, chaque appel vérifie la clé. Une clé
révoquée ne peut être ni modifiée ni réactivée : créez-en une nouvelle. Une clé révoquée répond
exactement comme une clé inconnue (403 INVALID_API_KEY), si bien qu'un appelant ne peut pas savoir
si une valeur a existé.
La création, la révocation et la suppression des clés apparaissent dans le Journal, avec le préfixe et jamais la clé.
Bonnes pratiques
- Une clé par application. Quand un outil est retiré ou compromis, vous révoquez sa clé et rien d'autre ne s'arrête.
- La portée la plus restreinte. Envoi pour une application qui envoie, Lecture pour une qui lit. Gardez Administration pour les outils à qui vous faites autant confiance qu'à un superadministrateur.
- Des adresses autorisées dès que l'appelant a une adresse fixe.
- Un plafond journalier un peu au-dessus du volume normal : un script qui s'emballe s'arrête alors de lui-même au lieu de vider les quotas des SIM.
- La clé dans un gestionnaire de secrets ou une variable d'environnement, jamais dans le code
source, jamais dans une URL, jamais dans un e-mail. Elle voyage toujours dans l'en-tête
X-API-KEY. - En HTTPS. Sur un réseau que vous ne maîtrisez pas, n'appelez la passerelle que par son adresse
https://: enhttpsimple, la clé traverse le réseau en clair. - Relisez la liste de temps en temps, et révoquez les clés qui ne servent plus.
En cas de problème
| Réponse | Cause probable |
|---|---|
401 MISSING_API_KEY |
L'en-tête X-API-KEY manque, ou un proxy entre vous et la passerelle le supprime |
403 INVALID_API_KEY |
La clé est mal recopiée, tronquée, révoquée ou supprimée |
403 IP_NOT_ALLOWED |
L'adresse appelante n'est pas dans la liste. Vérifiez l'adresse que la passerelle voit réellement |
403 FORBIDDEN_SCOPE |
L'opération demande une portée plus large |
429 RATE_LIMITED |
Plafond par minute ou quota journalier atteint. Retry-After donne l'attente en secondes |
Voir aussi Utiliser l'API pour le format des erreurs, et Sécurité.