> For the complete documentation index, see [llms.txt](https://docs.ipcheck.ing/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ipcheck.ing/developer/fr/configuration/optional-api-keys.md).

# Clés API facultatives

Clés API tierces facultatives et les fonctionnalités que chacune débloque.

Aucune des clés de cette page n’est requise. MyIP démarre et sert le trafic sans aucune d’entre elles. Chaque clé active simplement une capacité supplémentaire.

Le schéma est toujours le même :

1. Vous définissez une variable d’environnement et redémarrez le backend.
2. Le backend expose un **booléen** (jamais la valeur) pour cette variable via `GET /api/configs`.
3. Le frontend lit ces booléens et affiche, masque ou désactive l’interface utilisateur correspondante.

{% hint style="info" %}
`/api/configs` ne répond jamais qu’avec `true` / `false` pour une clé. Son unique champ de chaîne, `bulkLookupSource`, nomme la source de données de la recherche groupée d’IP, pas un secret. Vos clés restent sur le serveur et ne sont jamais envoyées au navigateur.
{% endhint %}

## Résumé

| Variable d’environnement                               | Débloque                                                                                                                                                                                                       | Coût                                 |
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| `IPINFO_API_KEY`                                       | IPinfo.io comme source de géolocalisation IP sélectionnable                                                                                                                                                    | Offre gratuite disponible            |
| `IPAPIIS_API_KEY`                                      | IPAPI.is comme source de géolocalisation IP sélectionnable                                                                                                                                                     | Voir les tarifs du fournisseur       |
| `IP2LOCATION_API_KEY`                                  | IP2Location.io comme source de géolocalisation IP sélectionnable                                                                                                                                               | Offre gratuite disponible            |
| `GOOGLE_MAP_API_KEY`                                   | Bouton de carte sur les cartes de détails IP (Google Static Maps)                                                                                                                                              | Compte Google Cloud avec facturation |
| `CLOUDFLARE_API_KEY`                                   | Panneau d’infos ASN (Cloudflare Radar), l’outil Profil ASN, la carte thermique d’activité en ligne par pays, le flux de pannes Earth Online — et, avec les deux éléments ci-dessous, des rapports partageables | Compte Cloudflare gratuit            |
| `CLOUDFLARE_ACCOUNT_ID` + `CLOUDFLARE_KV_NAMESPACE_ID` | Rapports de diagnostic partageables stockés dans Workers KV                                                                                                                                                    | Compte Cloudflare gratuit            |
| `RIPESTAT_SOURCE_APP`                                  | Pas une clé — identifie votre déploiement auprès de RIPEstat                                                                                                                                                   | Gratuit, sans inscription            |

{% hint style="warning" %}
`/api/configs` peut être mis en cache en périphérie pendant une heure. Après avoir ajouté une clé et redémarré, un CDN ou un navigateur peut continuer à servir les anciens indicateurs de fonctionnalité pendant jusqu’à une heure. Faites un rafraîchissement forcé ou purgez le cache si une nouvelle fonctionnalité n’apparaît pas.
{% endhint %}

## Sources de géolocalisation IP

MyIP peut interroger plusieurs bases de données IP. L’utilisateur choisit celle active dans **Préférences**. Les sources dont la clé est manquante sont barrées et ne peuvent pas être sélectionnées ; si un choix enregistré auparavant perd sa clé, il est automatiquement déplacé vers la source disponible la plus proche, avec une notification.

Trois sources sont protégées par clé : IPinfo.io, IPAPI.is et IP2Location.io. Les autres (IP-API.com, IP.sb, MaxMind) n’ont besoin d’aucune clé — voir [Configuration de MaxMind](/developer/fr/getting-started/maxmind-setup.md) et [Sources de données IP](/developer/fr/architecture/ip-data-sources.md).

### IPinfo.io — `IPINFO_API_KEY`

* **Débloque**: `IPinfo.io` dans le sélecteur de source IP, servie par `GET /api/ipinfo`.
* **Sans cela**: la source est désactivée dans le sélecteur. (Le point de terminaison lui-même retombe sur une requête sans jeton, mais l’interface ne la proposera pas.)
* **Où l’obtenir**: inscrivez-vous sur [ipinfo.io](https://ipinfo.io/) et copiez le jeton d’accès depuis votre tableau de bord.

{% hint style="info" %}
L’ancienne orthographe `IPINFO_API_TOKEN` est toujours lue comme solution de repli, donc les anciens déploiements continuent de fonctionner après une mise à niveau. Les nouvelles installations doivent utiliser `IPINFO_API_KEY`.
{% endhint %}

### IPAPI.is — `IPAPIIS_API_KEY`

* **Débloque**: `IPAPI.is` dans le sélecteur de source IP, servie par `GET /api/ipapiis`. Cette source renvoie aussi les indicateurs d’hébergement / proxy.
* **Sans cela**: la source est désactivée dans le sélecteur. Appeler le point de terminaison directement renvoie une erreur 500.
* **Où l’obtenir**: inscrivez-vous sur [ipapi.is](https://ipapi.is/).

### IP2Location.io — `IP2LOCATION_API_KEY`

* **Débloque**: `IP2Location.io` dans le sélecteur de source IP, servie par `GET /api/ip2location`.
* **Sans cela**: la source est désactivée dans le sélecteur. Appeler le point de terminaison directement renvoie une erreur 500.
* **Où l’obtenir**: inscrivez-vous sur [ip2location.io](https://www.ip2location.io/).

{% hint style="success" %}
**La rotation des clés est intégrée.** `IPINFO_API_KEY`, `IPAPIIS_API_KEY`, `IP2LOCATION_API_KEY` et `GOOGLE_MAP_API_KEY` acceptent tous une **liste séparée par des virgules**. Une clé est choisie aléatoirement par requête, ce qui répartit la charge sur plusieurs comptes gratuits.

```bash
IPINFO_API_KEY="token_one,token_two,token_three"
```

{% endhint %}

## Google Maps — `GOOGLE_MAP_API_KEY`

* **Débloque**: le bouton de carte sur une carte de détails IP. Il ouvre une carte statique centrée sur les coordonnées de l’IP, servie par `GET /api/map`, avec un style dédié au mode sombre.
* **Sans cela**: le bouton de carte ne s’affiche jamais. Tout le reste de la carte n’est pas affecté.
* **Où l’obtenir**: Console Google Cloud → activez **Maps Static API** → créez une clé API. Un projet Google Cloud avec facturation est requis.

{% hint style="warning" %}
Restreignez la clé dans Google Cloud (par API, et par IP lorsque c’est possible) avant de la mettre sur une instance publique. Le backend relaie l’image via proxy, donc la clé n’atteint jamais les visiteurs — mais une clé divulguée côté serveur reste un risque de facturation.
{% endhint %}

## Cloudflare Radar — `CLOUDFLARE_API_KEY`

* **Débloque**: quatre vues de l’unique `GET /api/cfradar` route, et l’outil construit dessus. Le **Infos ASN** bouton dans le bloc ASN d’une carte de détails IP (`?view=asn`): le panneau affiche le nom de l’ASN, le pays, l’organisation et le nombre d’utilisateurs estimé ; la qualité moyenne de connexion (bande passante téléchargement / envoi, latence, gigue) agrégée à partir des tests de vitesse Cloudflare effectués sur cet ASN ; plus les répartitions de trafic sur 7 jours — IPv4 contre IPv6, HTTP contre HTTPS, ordinateur contre mobile, bot contre humain. L’ **Profil ASN** outil dans Outils avancés (`/tools/asn`, également lié depuis le panneau Infos ASN) : une page par numéro AS combinant ce résumé Radar, les préfixes annoncés et leur empreinte géographique par pays (`?view=bgp-prefixes`), la topologie CAIDA et les listes de voisins, l’enregistrement de registre RDAP, l’entrée CAIDA AS Rank et l’enregistrement PeeringDB du réseau — le tout servi par `GET /api/asn-profile`. Le **carte thermique d’activité en ligne par pays** sur la carte de détails IP (`?view=country-traffic`): une grille 7×24 des heures de la semaine construite à partir de 28 jours de la série temporelle horaire des requêtes HTTP de Radar, affichant par défaut le trafic probablement humain avec un commutateur pour tout le trafic. Et le **Earth Online** flux mondial de pannes (`?view=outages`) — suffisant à lui seul pour afficher l’entrée de navigation du panneau, uniquement les pannes sur les forks sans backend de balise pulse. Voir [Features Tied to IPCheck.ing](/developer/fr/configuration/features-tied-to-ipcheck-ing.md).
* **Sans cela**: le bouton Infos ASN est masqué, l’outil Profil ASN n’est pas répertorié dans les cartes Outils avancés (son groupe Recherche et calcul) ni dans la navigation, le point d’entrée de la carte thermique par pays n’apparaît jamais (les trois se trouvent derrière le même `Cloudflare` indicateur dans `/api/configs`), et le flux de pannes reste désactivé — sur un fork sans backend de balise pulse, le panneau Earth Online n’apparaît pas du tout. L’ensemble de données PeeringDB n’est pas non plus téléchargé, car seul le Profil ASN l’utilise. Les deux boutons voisins — **Historique ASN** et **Connectivité ASN** — continuent de fonctionner : ils sont alimentés par RIPEstat et par des instantanés CAIDA locaux, et non par Cloudflare. C’est également le cas de la recherche du numéro AS de l’outil Whois, qui interroge les serveurs RDAP des registres.
* **Où l’obtenir**: Tableau de bord Cloudflare → **Mon profil → Jetons d’API → Créer un jeton**. Le jeton doit avoir un accès en lecture au Radar.

{% hint style="info" %}
L’ancienne orthographe `CLOUDFLARE_API` est toujours lu comme solution de repli.
{% endhint %}

Les données Radar du panneau Infos ASN sont récupérées en six segments indépendants. Si certains d’entre eux échouent, le panneau se dégrade champ par champ au lieu de produire une erreur — les ASN petits ou privés n’ont légitimement aucune donnée de trafic. Le panneau ne comporte aucun comptage de préfixes ni de relations ; ils se trouvent dans le Profil ASN. Le Profil ASN se dégrade de la même façon, un niveau plus haut — chacune de ses sources a son propre délai, et une source en échec ne laisse vide que sa propre section (voir [Points de terminaison de l'API](/developer/fr/reference/api-endpoints.md#api-asn-profile)). La carte thermique par pays est différente : une requête par pays qui renvoie soit une matrice, soit un résultat valide et cacheable `trafficMatrix: null`.

## Rapports partageables — `CLOUDFLARE_ACCOUNT_ID` + `CLOUDFLARE_KV_NAMESPACE_ID`

MyIP peut transformer une exécution de diagnostic en lien partageable, adossé à Cloudflare Workers KV.

* **Débloque**: `POST /api/report` (stockage) et `GET /api/report/:id` (lecture), ainsi que l’option de lien de partage dans la boîte de dialogue du rapport et la page de rapport en lecture seule.
* **Nécessite les trois éléments suivants**: `CLOUDFLARE_API_KEY`, `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_KV_NAMESPACE_ID`. En manquer un seul et la fonctionnalité reste désactivée.
* **Sans eux**: les deux points de terminaison répondent par `503`, `/api/configs` signale `reportSharing: false`, et l’interface de partage n’apparaît jamais. Les utilisateurs peuvent toujours copier le rapport en Markdown ou le télécharger en JSON.

<details>

<summary>Configuration</summary>

1. Tableau de bord Cloudflare → **Workers & Pages → KV** → créez un espace de noms.
2. Copiez l’ **ID hexadécimal** — pas son nom. `CLOUDFLARE_KV_NAMESPACE_ID` attend l’ID.
3. Copiez votre **ID du compte** depuis le tableau de bord dans `CLOUDFLARE_ACCOUNT_ID`.
4. Assurez-vous que le jeton dans `CLOUDFLARE_API_KEY` porte aussi l’autorisation **Workers KV Storage : modification** permission. Le même jeton est utilisé pour Radar et pour KV.

</details>

Fonctionnement des rapports stockés :

* Le corps du rapport est validé selon une liste blanche stricte de schémas — aucun texte libre ne peut être stocké.
* Les ID des rapports sont 16 octets aléatoires, encodés en base64url (22 caractères), donc les liens sont impossibles à deviner.
* Chaque rapport est écrit avec un TTL et expire tout seul de KV. Les IDs expirés répondent `404`.
* Les rapports ne sont jamais mis en cache en périphérie, ni à la lecture ni à l’écriture.

{% hint style="warning" %}
Les points de terminaison des rapports ont **aucune limite de débit dédiée**. Sur une instance publique, protégez-les avec le limiteur global (voir [Options de sécurité](/developer/fr/configuration/security-options.md)) ou avec des règles de périphérie.
{% endhint %}

## RIPEstat — `RIPESTAT_SOURCE_APP`

Ce n’est pas une clé API et aucun compte n’est nécessaire. RIPEstat demande aux appelants de s’identifier via un paramètre `sourceapp` ; cette variable le définit. Sa valeur par défaut est `myip`.

Définissez-la sur quelque chose qui identifie votre déploiement (par exemple `myip-yourdomain`) afin que votre trafic soit identifiable si RIPE doit un jour vous contacter à ce sujet.

RIPEstat alimente l’Historique ASN et le repli du nom d’organisation utilisé par la Connectivité ASN. Les deux fonctionnent que cette variable soit définie ou non.

## Éléments ne nécessitant aucune configuration

* **Étoiles GitHub** (`GET /api/github-stars`) interroge l’API REST publique de GitHub sans authentification et est mise en cache en périphérie pendant une journée. Il n’y a aucun jeton à définir.
* **Connectivité ASN** s’appuie sur des instantanés CAIDA locaux, avec RIPEstat seulement comme solution de repli pour les noms d’organisation manquants.
* **Whois pour les numéros AS** (`AS13335` dans l’outil Whois) interroge le serveur RDAP public du registre responsable, localisé via le fichier d’amorçage RDAP d’IANA. Pas de compte, pas de clé.
* **Recherche IP en masse** (`POST /api/bulk-lookup`) répond à partir des mêmes bases locales MaxMind GeoLite2 que `/api/maxmind`, donc il n’a besoin de rien d’autre que [Configuration de MaxMind](/developer/fr/getting-started/maxmind-setup.md) — aucune clé supplémentaire, et aucun quota amont par IP à dépenser.
* **MAC Lookup** (`GET /api/macchecker`) répond à partir de copies locales des registres MAC de l’IEEE, téléchargées au démarrage et actualisées quotidiennement. Aucun compte, aucune clé — voir [Sources de données IP](/developer/fr/architecture/ip-data-sources.md#ieee-mac-registries).
* **CAIDA AS Rank**, l’une des sources du Profil ASN, est une API publique gratuite qui n’a besoin d’aucune clé — mais le Profil ASN lui-même n’est listé qu’avec `CLOUDFLARE_API_KEY`.

## Définition des variables

{% tabs %}
{% tab title="Node (.env)" %}
{% code title=".env" %}

```bash
IPINFO_API_KEY="your-ipinfo-token"
IPAPIIS_API_KEY="your-ipapi-is-key"
IP2LOCATION_API_KEY="your-ip2location-key"
GOOGLE_MAP_API_KEY="your-google-maps-key"
CLOUDFLARE_API_KEY="your-cloudflare-token"
CLOUDFLARE_ACCOUNT_ID="your-account-id"
CLOUDFLARE_KV_NAMESPACE_ID="your-namespace-hex-id"
RIPESTAT_SOURCE_APP="myip-yourdomain"
```

{% endcode %}

Redémarrez ensuite le backend. Voir [Déployer avec Node.js](/developer/fr/getting-started/deploy-with-nodejs.md).
{% endtab %}

{% tab title="Docker" %}

```bash
docker run -d -p 18966:18966 \\
  -e IPINFO_API_KEY="your-ipinfo-token" \\
  -e GOOGLE_MAP_API_KEY="your-google-maps-key" \\
  -e CLOUDFLARE_API_KEY="your-cloudflare-token" \\
  -e CLOUDFLARE_ACCOUNT_ID="your-account-id" \\
  -e CLOUDFLARE_KV_NAMESPACE_ID="your-namespace-hex-id" \\
  -e RIPESTAT_SOURCE_APP="myip-yourdomain" \\
  --name myip \
  jason5ng32/myip:latest
```

Toutes les variables de cette page sont lues à l’exécution, donc `docker run -e` suffit — aucune reconstruction nécessaire. Voir [Déployer avec Docker](/developer/fr/getting-started/deploy-with-docker.md).
{% endtab %}
{% endtabs %}

## Pages connexes

* [Variables d’environnement](/developer/fr/reference/environment-variables.md) — la liste complète, y compris les éléments requis
* [Features Tied to IPCheck.ing](/developer/fr/configuration/features-tied-to-ipcheck-ing.md) — les capacités qui dépendent de services privés
* [Points de terminaison de l'API](/developer/fr/reference/api-endpoints.md) — ce que chaque route renvoie
* [Options de sécurité](/developer/fr/configuration/security-options.md) — empêchent les inconnus d’épuiser votre quota


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.ipcheck.ing/developer/fr/configuration/optional-api-keys.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
