Chaque clé API a une liste allowedHosts configurable. Une requête venant d’une IP absente de la liste est refusée 403.

Configuration

À la création d’une clé (Développeurs → Clés API → Nouvelle clé) ou via PATCH :
PATCH /v1/api-keys/<id>
{
  "allowedHosts": ["52.91.123.45", "52.91.123.46"]
}
Wildcard * (défaut : ["*"]), 0.0.0.0 ou liste vide = pas de restriction.

Use cases

SetupListe recommandée
Backend monolithe sur serveur dédiéIP statique du serveur
AWS ECS / Lambda avec NAT GatewayIP du NAT (statique)
Cloudflare WorkersPas d’IP fixe → laissez vide, sécurisez via clé
Vercel serverlessVercel n’a pas d’IP fixe sur le tier gratuit → laissez vide, ou utilisez Vercel Edge Config avec une clé scopée
Dev local127.0.0.1 ou laissez vide (clé sk_test_* uniquement)
Ne mettez pas votre IP de bureau dans la liste pour une clé de production. Si vous avez besoin d’appeler la prod depuis votre laptop, créez une clé séparée scoped lecture uniquement.

Derrière un proxy

Si vous êtes derrière un proxy ou un load balancer, assurez-vous qu’il transmet l’IP source réelle de l’appelant, sinon l’IP comparée à la liste sera celle du proxy interne.

Combinaison avec scopes

L’allowlist IP et les scopes s’appliquent tous les deux. Une requête est refusée 403 si :
  • l’IP n’est pas autorisée (403, sans code d’erreur stable) ;
  • ou le scope requis manque (403 avec le code INSUFFICIENT_SCOPE).
Défense en couches : même si une clé fuite, l’attaquant doit aussi appeler depuis une IP autorisée pour l’utiliser.