> 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

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 fonctionnalité 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 correspondante.

{% hint style="info" %}
`/api/configs` ne renvoie jamais que `true` / `false`. 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                                         | Plan gratuit 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                                    | Plan gratuit disponible              |
| `GOOGLE_MAP_API_KEY`                                   | Bouton de carte sur les cartes de détail IP (Google Static Maps)                                    | Compte Google Cloud avec facturation |
| `MAC_LOOKUP_API_KEY`                                   | Requêtes MAC Lookup authentifiées (l'outil fonctionne sans)                                         | Plan gratuit disponible              |
| `CLOUDFLARE_API_KEY`                                   | Panneau d'informations ASN (Cloudflare Radar) — et, avec les deux ci-dessous, 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` est mis en cache en périphérie pendant une heure. Après l'ajout d'une clé et le redémarrage, un CDN ou le navigateur peut continuer à servir les anciens indicateurs de fonctionnalité pendant une heure. Faites un rechargement forcé ou videz 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 qui est active dans **Préférences**. Les sources dont la clé est manquante sont affichées barrées et ne peuvent pas être sélectionnées ; si un choix précédemment enregistré perd sa clé, il est automatiquement déplacé vers la source disponible la plus proche, avec une notification.

Trois sources nécessitent une clé : IPinfo.io, IPAPI.is et IP2Location.io. Les autres (IP-API.com, IP.sb, MaxMind) n'ont pas besoin de 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, servi par `GET /api/ipinfo`.
* **Sans elle**: 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 appellation `IPINFO_API_TOKEN` est encore lue en 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, servi par `GET /api/ipapiis`. Cette source renvoie également les indicateurs d'hébergement / proxy.
* **Sans elle**: la source est désactivée dans le sélecteur. L'appel direct du point de terminaison renvoie un 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, servi par `GET /api/ip2location`.
* **Sans elle**: la source est désactivée dans le sélecteur. L'appel direct du point de terminaison renvoie un 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 à chaque 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étail IP. Il ouvre une carte statique centrée sur les coordonnées IP, servie par `GET /api/map`, avec un style dédié au mode sombre.
* **Sans elle**: le bouton de carte ne s'affiche jamais. Tout le reste sur la carte n'est pas affecté.
* **Où l'obtenir**: Console Google Cloud → activez l' **Maps Static API** → créez une clé API. Un projet Google Cloud avec facturation est requis.

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

## MAC Lookup — `MAC_LOOKUP_API_KEY`

* **Débloque**: requêtes authentifiées vers [maclookup.app](https://maclookup.app/) depuis l'outil MAC Lookup (`GET /api/macchecker`).
* **Sans elle**: l'outil fonctionne toujours. Le backend envoie la requête sans clé, et les limites que le fournisseur applique au trafic anonyme s'appliquent à vous.
* **Où l'obtenir**: inscrivez-vous sur [maclookup.app](https://maclookup.app/) et créez une clé API.

C'est la seule clé de cette page qui achète du débit plutôt qu'une fonctionnalité.

## Cloudflare Radar — `CLOUDFLARE_API_KEY`

* **Débloque**: le **Infos ASN** bouton dans le bloc ASN d'une carte de détail IP, servi par `GET /api/cfradar`. Le panneau affiche le nom de l'ASN, le pays, l'organisation et le nombre d'utilisateurs estimé, ainsi que la répartition du trafic sur 7 jours : IPv4 vs IPv6, HTTP vs HTTPS, ordinateur vs mobile, bot vs humain.
* **Sans elle**: le bouton Infos ASN est masqué. Les deux boutons voisins — **Historique ASN** et **Connectivité ASN** — continuent de fonctionner : ils s'appuient sur RIPEstat et sur des instantanés CAIDA locaux, pas sur Cloudflare.
* **Où l'obtenir**: tableau de bord Cloudflare → **Mon profil → Jetons API → Créer un jeton**. Le jeton nécessite un accès en lecture à Radar.

{% hint style="info" %}
L'ancienne appellation `CLOUDFLARE_API` est encore lue en solution de repli.
{% endhint %}

Les données Radar sont récupérées sous forme de cinq segments indépendants. Si certains échouent, le panneau se dégrade champ par champ au lieu de renvoyer une erreur — les petits ASNs ou les ASNs privés n'ont légitimement pas de données de trafic.

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

MyIP peut transformer une exécution de diagnostic en lien de partage 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 manquez un seul et la fonctionnalité reste désactivée.
* **Sans eux**: les deux points de terminaison renvoient `503`, `/api/configs` rapports `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'identifiant hexadécimal** de l'espace de noms — pas son nom. `CLOUDFLARE_KV_NAMESPACE_ID` attend l'ID.
3. Copiez votre **ID de compte** depuis le tableau de bord dans `CLOUDFLARE_ACCOUNT_ID`.
4. Assurez-vous que le jeton dans `CLOUDFLARE_API_KEY` porte également la permission **Workers KV Storage : Modifier** . Le même jeton est utilisé pour Radar et pour KV.

</details>

Comportement des rapports stockés :

* Le contenu du rapport est validé par rapport à une liste blanche de schémas stricte — aucun texte libre ne peut être stocké.
* Les identifiants de rapport 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 de KV de lui-même. Les identifiants expirés renvoient `404`.
* Les rapports ne sont jamais mis en cache en périphérie, ni en lecture ni en écriture.

{% hint style="warning" %}
Les points de terminaison des rapports n'ont **pas de 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 en périphérie.
{% endhint %}

## RIPEstat — `RIPESTAT_SOURCE_APP`

Ce n'est pas une clé API et cela ne nécessite aucun compte. RIPEstat demande aux appelants de s'identifier via un `sourceapp` paramètre ; 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 a jamais besoin de vous contacter à ce sujet.

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

## Éléments qui ne nécessitent aucune configuration

* **Étoiles GitHub** (`GET /api/github-stars`) appelle l'API REST publique de GitHub sans authentification et est mis 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, RIPEstat n'intervenant qu'en solution de repli pour les noms d'organisation manquants.

## 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"
MAC_LOOKUP_API_KEY="your-maclookup-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 le backend ensuite. Voir [Déploiement 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'est nécessaire. Voir [Déploiement avec Docker](/developer/fr/getting-started/deploy-with-docker.md).
{% endtab %}
{% endtabs %}

## Pages associées

* [Variables d'environnement](/developer/fr/reference/environment-variables.md) — la liste complète, y compris les variables requises
* [Fonctionnalités liées à IPCheck.ing](/developer/fr/configuration/features-tied-to-ipcheck-ing.md) — fonctionnalités qui dépendent de services privés
* [Points de terminaison de l'API](/developer/fr/reference/api-endpoints.md) — ce que renvoie chaque route
* [Options de sécurité](/developer/fr/configuration/security-options.md) — empêchent des 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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
