Référence API
Endpoints simples. CORS activé. Pas d'authentification. Entièrement multilingue — chaque champ, clé et valeur, est traduit en plus de 10 langues.
URL de base
Démarrage rapide
Raccourci terminal : curl ipto.to ou curl ipto.to/8.8.8.8 (pas besoin de https:// ni de /v1/ip/) fonctionne aussi lorsque la requête provient de curl, Wget ou HTTPie — détecté via le User-Agent. Cela renvoie un ensemble de champs plus court, façon ipinfo.io (ip, country, city, asn, org, ...), et non le schéma complet ci-dessous — utilisez directement les chemins /v1/ip pour la réponse complète documentée sur cette page.
Juste l'IP : curl ipto.to/ip (ou ouvrez-le dans un navigateur) ne renvoie que votre propre adresse IP en texte brut — 73.9.114.155, sans JSON, sans habillage de page. Équivalent direct de ipinfo.io/ip. Voir GET /ip ci-dessous.
Multilingue par défaut : Définissez ?lang= sur un code pris en charge et chaque clé et valeur JSON de la réponse revient traduite — pas seulement pays/continent. Voir Localisation ci-dessous pour la liste complète des langues et l'option de désactivation &localize=0.
Lookup Lab
Construisez n’importe quelle requête ipto, copiez-la en code prêt à l’emploi dans votre langage, ou envoyez-la ici et lisez la réponse en direct. Aucune clé n’est nécessaire pour l’offre gratuite.
Serveur MCP
ipto est également accessible en tant que serveur d'outils MCP (Model Context Protocol) — pointez Claude Desktop, Cursor, ou tout client compatible MCP vers l'endpoint ci-dessous : il expose 14 outils appelables : ip_lookup, bulk_ip_lookup (Pro/Enterprise), asn_lookup, country_lookup, reverse_dns_lookup, user_agent_parse, phone_lookup, email_lookup, fraud_score, language_detect, currency_convert, weather_lookup, trademark_lookup, et patent_lookup. JSON-RPC 2.0 via Streamable HTTP — POST uniquement, aucune session/SSE nécessaire. Authentification identique à celle de l'API REST : omettez-la pour le niveau gratuit (1 000 req/jour par IP), ou ajoutez ?api_key= à l'URL de l'endpoint.
Pour les clients stdio uniquement, faites le pont : npx mcp-remote https://ipto.to/mcp
Points de terminaison
Ne renvoie que la propre adresse IP publique du client à l'origine de la requête, en texte brut (Content-Type: text/plain) — ex. 73.9.114.155. Équivalent direct de ipinfo.io/ip : fonctionne à l'identique depuis curl, Wget, HTTPie, ou une simple visite dans un navigateur (pas de détection du User-Agent, contrairement au raccourci curl ipto.to ci-dessus), et s'affiche comme une IP nue sans habillage de page lorsqu'il est ouvert dans un navigateur.
Aucun paramètre, aucune chaîne de requête. Pour l'objet complet de géolocalisation/renseignement sur les menaces, utilisez plutôt GET /v1/ip ci-dessous. Cette route lit directement l'IP de connexion (sans recherche D1/KV) et n'est pas comptabilisée dans le quota de requêtes quotidien — voir Limites de débit.
Renvoie la géolocalisation et le renseignement sur les menaces pour l'IP à l'origine de la requête, y compris des données au niveau de la ville via l'objet edge de CF.
Aucun paramètre requis. Accepte ?lang=, ?fields=, ?format= — voir Localisation et Formats de sortie ci-dessous.
Recherchez n'importe quelle adresse IPv4. Les champs de niveau ville (city, state, postal_code, latitude, longitude, timezone) sont renseignés lorsque l'IP appartient à l'un des deux jeux de données géo fusionnés, IP2Location ou MaxMind — vérifiez geo_precision dans la réponse pour savoir si vous avez obtenu des données au niveau ville ou pays. Le format de timezone dépend de la source ayant fourni la correspondance (une chaîne de décalage UTC pour IP2Location, un nom IANA pour MaxMind). Les recherches IPv6 ne renvoient actuellement que des données au niveau pays.
| Parameter | In | Description |
|---|---|---|
ip | path | Requis. Toute adresse IPv4 ou IPv6 valide. |
lang | query | Optionnel. Localise country_name et continent : en (par défaut), pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN. |
fields | query | Optionnel. Liste de champs à inclure, séparés par des virgules. Ex. ?fields=ip,country_code,is_vpn |
format | query | Optionnel. Format de réponse : json (par défaut), csv, text, xml, yaml. |
L'endpoint de recherche unifié derrière la barre de recherche de la page d'accueil. Détecte si :query est une IP, un ASN (AS15169 ou 15169), un code pays à 2 lettres, un e-mail, ou un numéro de téléphone, puis agrège chaque vérification pertinente en une seule réponse. Pour une requête IP, cela se répartit — en parallèle, côté serveur — sur la recherche IP principale plus RPKI, IP-vers-entreprise, opérateur mobile, domaines hébergés et lieux, de sorte qu'une seule recherche ne consomme qu'une seule requête sur votre quota quotidien de débit, au lieu d'une par fonctionnalité.
| Parameter | In | Description |
|---|---|---|
query | path | Requis. Une IP, un ASN, un code pays, un e-mail, ou un numéro de téléphone. |
| Field | Type | Description |
|---|---|---|
query | string | L'entrée décodée telle que reçue. |
detected_type | string | "ip", "asn", "country", "email", ou "phone". |
ip | object|null | Présent lorsque detected_type vaut "ip" — même forme que GET /v1/ip/:ip. |
rpki | object|null | Présent pour les requêtes IP — même forme que GET /v1/ip/:ip/rpki. |
company | object|null | Présent pour les requêtes IP — même forme que GET /v1/ip/:ip/company. |
whois | object|null | Présent pour les requêtes IP — même forme que GET /v1/ip/:ip/whois. |
carrier | object|null | Présent pour les requêtes IP — même forme que GET /v1/ip/:ip/carrier. |
asn / country / email / phone | object|null | Présent à la place des six champs ci-dessus lorsque detected_type correspond — même forme que l'endpoint dédié de ce type. |
Chaque sous-champ se dégrade indépendamment — un service amont lent ou en échec (RIPEstat, un serveur RDAP, crt.sh) se traduit par ce seul champ à null, jamais par l'échec de la recherche entière. Seule une requête principale invalide (par ex. une IP malformée) renvoie un statut d'erreur pour la requête dans son ensemble.
DNS inversé — une seule recherche PTR en direct via DNS-over-HTTPS, pas une base de données d'énumération de domaines. Renvoie null si l'IP n'a pas d'enregistrement PTR.
| Parameter | In | Description |
|---|---|---|
ip | path | Requis. Toute adresse IPv4 ou IPv6 valide. |
Validation RPKI de l'origine de route pour la route actuellement annoncée d'une IP, résolue en direct via RIPEstat (aucune base de données ROA ingérée ou synchronisée localement). status vaut uniquement "valid", "invalid", ou "unknown" — jamais synthétisé à partir d'un autre signal ; tout échec ou dépassement de délai de RIPEstat renvoie "unknown" accompagné d'une chaîne reason, jamais une erreur.
| Parameter | In | Description |
|---|---|---|
ip | path | Requis. Toute adresse IPv4 ou IPv6 valide. |
| Field | Type | Description |
|---|---|---|
asn | integer|null | L'ASN annonçant actuellement la route, résolu en direct — non dérivé du propre jeu de données ASN du site. |
prefix | string|null | Le préfixe CIDR actuellement annoncé. |
status | string | "valid", "invalid", ou "unknown". |
validating_roas | array | Le ou les ROA spécifiques trouvés par RIPEstat, chacun avec origin/prefix/max_length/validity. |
validator | string|null | Le validateur RPKI utilisé par RIPEstat (par ex. "routinator"). |
reason | string|null | Explique un résultat "unknown" — par ex. aucun ROA couvrant n'existe, ou RIPEstat était injoignable. |
Validation RPKI explicite (ASN, préfixe) — pour lorsque vous connaissez déjà la route exacte à vérifier, plutôt que la commodité dérivée de l'IP ci-dessus.
| Parameter | In | Description |
|---|---|---|
asn | query | Requis. Numéro d'ASN, avec ou sans le préfixe AS. Ex. 15169 ou AS15169. |
prefix | query | Requis. Préfixe CIDR, ex. 8.8.8.0/24. |
Identifie l'organisation à laquelle une IP est enregistrée en combinant les données du titulaire RDAP (WHOIS structuré) avec le nom d'organisation propre de l'ASN, pour obtenir une confiance catégorielle, jamais un score numérique.
| Parameter | In | Description |
|---|---|---|
ip | path | Requis. Toute adresse IPv4 ou IPv6 valide. |
| Field | Type | Description |
|---|---|---|
company_name | string|null | Le nom d'entreprise résolu — null lorsque confidence vaut "low" (les deux sources sont en désaccord, donc aucune n'est présentée comme faisant autorité) ou "none". |
rdap_org_name | string|null | Le nom du titulaire RDAP, indépendant de company_name. |
asn_org_name | string|null | Le nom d'organisation propre de l'ASN, indépendant de company_name. |
confidence | string | "high" (les sources concordent), "medium" (une seule source disponible), "low" (les sources sont en désaccord — les deux sont affichées), ou "none". |
reason | string | Explication en langage clair du niveau de confidence. |
L'enregistrement RDAP sous-jacent lui-même — bloc réseau, dates d'enregistrement/de dernière modification, et tous les contacts que RDAP a en fichier. Distinct de /company ci-dessus, qui réconcilie ces mêmes données de titulaire avec le nom d'organisation de l'ASN en une seule réponse assortie d'un score de confidence ; cet endpoint renvoie l'enregistrement brut tel quel, plus proche d'une sortie WHOIS classique. Les adresses IPv6 sont également prises en charge.
| Parameter | In | Description |
|---|---|---|
ip | path | Requis. Toute adresse IPv4 ou IPv6 valide. |
| Field | Type | Description |
|---|---|---|
available | boolean | false si aucun enregistrement RDAP n'a pu être résolu — voir reason. |
reason | string|null | Explique un résultat available: false. |
startAddress / endAddress / cidr | string|null | Le bloc réseau enregistré. |
netName / netHandle / parentHandle | string|null | Identifiants attribués par le RIR pour l'objet réseau. |
country | string|null | Pays du titulaire, selon RDAP. |
allocationType | string|null | par ex. "direct allocation", "reassigned". |
registeredDate / lastChangedDate | string|null | Horodatages ISO issus de l'enregistrement RDAP. |
rir | string|null | Quel registre régional (ARIN, RIPE, APNIC, LACNIC, AFRINIC) a fourni l'enregistrement. |
contacts | array | Tous les contacts que RDAP a en fichier, chacun avec ses rôles, nom, e-mail, et handle — pas seulement la première correspondance. |
Identification de l'opérateur mobile au mieux pour les IP classées comme réseaux mobiles, croisée avec un annuaire d'opérateurs MCC/MNC. N'a délibérément pas de champ carrier unique — voir matched_carrier_entries et note ci-dessous — car un simple nom d'opérateur se lirait comme une affirmation en direct au niveau de l'abonné, ce que ces données ne peuvent pas honnêtement garantir.
| Parameter | In | Description |
|---|---|---|
ip | path | Requis. Toute adresse IPv4 ou IPv6 valide. |
| Field | Type | Description |
|---|---|---|
is_mobile_network | boolean | false s'arrête ici avec un annuaire vide — aucune supposition pour un ASN non mobile. |
asn_organization | string|null | Le nom d'organisation propre de l'ASN. |
matched_carrier_entries | array | Les entrées de l'annuaire MCC/MNC dont le nom d'opérateur correspond approximativement à asn_organization, limitées au pays propre de l'IP. |
note | string | Explique ce que ce champ peut et ne peut pas affirmer. |
Trouve les domaines associés à une IP via son nom d'hôte DNS inversé (PTR) et les journaux de transparence des certificats (crt.sh) — pas une recherche IP inversée générale. Le champ limitations de la réponse précise exactement ce que cela peut et ne peut pas trouver.
| Parameter | In | Description |
|---|---|---|
ip | path | Requis. Toute adresse IPv4 ou IPv6 valide. |
| Field | Type | Description |
|---|---|---|
ptr_hostname | string|null | Le nom d'hôte DNS inversé de l'IP, ou null s'il n'a pas d'enregistrement PTR. |
root_domain | string|null | Le domaine enregistrable dérivé de ptr_hostname. |
subdomains_seen | array|null | Sous-domaines trouvés via la transparence des certificats. null signifie que la recherche crt.sh elle-même n'a pas pu être menée à bien — à distinguer d'un tableau vide, qui signifie qu'elle s'est exécutée sans rien trouver. |
limitations | string | Explique ce que cette fonctionnalité ne peut structurellement pas détecter (pas de PTR, hébergement mutualisé, domaines non certifiés). |
Recherche par lot — jusqu'à 100 IP par requête, réservé Pro/Enterprise. Renvoie un objet indexé avec chaque IP comme clé. Plus rapide que des appels séquentiels grâce aux lectures parallèles du cache et de la base de données. Chaque IP du lot compte dans votre quota de requêtes quotidien, comme une recherche individuelle. Les requêtes du niveau gratuit reçoivent un 403 — voir tarifs.
| Parameter | In | Description |
|---|---|---|
body | body (JSON) | Tableau JSON de chaînes IP. Ex. ["1.1.1.1","8.8.8.8"] |
Recherchez un système autonome par son numéro. Renvoie le nom de l'organisation, le pays, le continent, le nombre de plages IP, le type de classification, le taux de change, et des données de référence locales (langues, tld, capitale, frontières).
| Parameter | In | Description |
|---|---|---|
asn | path | Numéro d'ASN sans le préfixe AS. Ex. 15169 pour Google. |
lang | query | Optionnel. Localise country_name et continent : en (par défaut), pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN. |
format | query | Optionnel. Format de réponse : json (par défaut), csv, text, xml, yaml. |
Géocode inversement la localisation existante au niveau ville d'une IP, puis renvoie les points d'intérêt à proximité (restaurants, parcs, écoles, transports, sites remarquables), des données de criminalité locales lorsqu'une source existe (Royaume-Uni et États-Unis uniquement), et une estimation de trajet en voiture optionnelle et à la demande.
| Parameter | In | Description |
|---|---|---|
ip | path | Requis. Toute adresse IPv4 valide. L'IPv6 n'est pas encore pris en charge. |
dest_lat | query | Optionnel. Latitude de destination pour une estimation de trajet — à associer avec dest_lon. |
dest_lon | query | Optionnel. Longitude de destination pour une estimation de trajet — à associer avec dest_lat. |
dest_address | query | Optionnel. Adresse de destination en texte libre pour une estimation de trajet, géocodée automatiquement. Ignorée si dest_lat/dest_lon sont également fournis. |
| Field | Type | Description |
|---|---|---|
geocode | object|null | country, countryCode, region, city, neighbourhood, displayName — null si l'IP n'a pas de localisation au niveau ville à partir de laquelle géocoder. |
locality.restaurants / .parks / .schools / .transit | array | Jusqu'à 4 entrées les plus proches par catégorie, chacune avec name et distanceMeters. |
locality.notable | array | Sites remarquables à proximité avec une courte description, via Wikidata. |
locality.usCrime | object|null | Totaux de criminalité violente/contre les biens de l'agence la plus proche — États-Unis uniquement, nécessite une FBI_CRIME_API_KEY sur le déploiement. null partout ailleurs. |
locality.ukCrime | object|null | Résumé des incidents au niveau de la rue dans un rayon de 1 mile — Royaume-Uni uniquement. |
locality.caCrime | null | Toujours null — aucune source de criminalité couvrant tout le Canada n'est intégrée (voir docs/places.md). |
commute | object|null | durationMinutes et distanceKm, uniquement lorsqu'une destination a été fournie et qu'OpenRouteService a renvoyé un itinéraire. null sinon — jamais calculé de manière spéculative. |
Statistiques agrégées au niveau pays plus des données de référence locales (devise, taux de change, langues, tld, capitale, frontières).
| Parameter | In | Description |
|---|---|---|
code | path | Code pays ISO 3166-1 alpha-2. Ex. US, DE, JP. |
lang | query | Optionnel. Localise country_name et continent : en (par défaut), pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN. |
format | query | Optionnel. Format de réponse : json (par défaut), csv, text, xml, yaml. |
Analyse une chaîne User-Agent. Renvoie le navigateur, l'OS, le type d'appareil, et la détection de bot. Lit par défaut l'en-tête User-Agent de l'appelant, ou transmettez n'importe quelle chaîne via ?ua=.
| Parameter | In | Description |
|---|---|---|
ua | query | Optionnel. Chaîne User-Agent encodée en URL à analyser. Par défaut, l'en-tête User-Agent de la requête. |
Valide et formate un numéro de téléphone gratuitement, toujours : région, type de ligne, et formatage E.164/national/international via un analyseur auto-hébergé, sans appel à un fournisseur. Lorsqu'un budget premium mensuel par IP/clé est disponible (100/mois sur Free, plus sur les plans payants — voir tarifs), la même requête renvoie en plus un nom d'opérateur en direct, le statut de portabilité, et un type de téléphone classifié par le fournisseur, depuis un service de recherche d'opérateur en temps réel — voir source et les champs ci-dessous. Un country_name localisé ainsi que lang/lang_source sont toujours inclus, quel que soit le niveau — voir Localisation. L'épuisement du budget premium, ou tout problème en amont, entraîne un retour sans accroc aux champs gratuits ci-dessus ; la requête n'échoue jamais pour cette raison. Pour une référence des opérateurs réseau au niveau pays plutôt qu'une recherche par numéro, voir GET /v1/carriers.
| Parameter | In | Description |
|---|---|---|
number | path | Requis. Tout numéro de téléphone, idéalement au format E.164 (ex. +14155552671). Encodez le + initial en URL. |
country | query | Optionnel. Indice de code pays à 2 lettres pour analyser des numéros au format national ambigu, ex. ?country=US. |
mode | query | Optionnel. ?mode=current demande l'opérateur en temps réel (plutôt que celui émis par la SIM) du numéro, lorsque le niveau premium est disponible. Ignoré si la requête revient au plan gratuit. |
| Field | Type | Description |
|---|---|---|
valid | boolean | true si le numéro correspond à un schéma de plan de numérotation valide pour sa région. |
country_code | string|null | Région ISO 3166-1 alpha-2 à laquelle appartient le numéro. |
national_format | string|null | Formaté selon la convention nationale propre à la région. |
international_format | string|null | Formaté avec le code pays et des espaces, ex. "+1 415 555 2671". |
e164 | string|null | Forme E.164 canonique, ex. "+14155552671". |
line_type | string|null | FIXED_LINE, MOBILE, FIXED_LINE_OR_MOBILE, VOIP, TOLL_FREE, PREMIUM_RATE, ou similaire. De nombreux plans de numérotation (y compris celui de l'Amérique du Nord) ne permettent pas de distinguer une ligne fixe d'une ligne mobile à partir du seul numéro. |
source | string | "premium" si un budget de recherche d'opérateur en direct était disponible pour cette requête, "local" si elle est revenue à l'analyseur gratuit ci-dessus. carrier, phone_type, original_carrier, is_ported, phone_region et country_prefix ci-dessous ne sont renseignés que lorsque source vaut "premium" — country_name et lang/lang_source plus bas sont toujours renseignés, quel que soit le niveau. |
phone_type | string|null | L'une des propres catégories du fournisseur de recherche d'opérateur en temps réel : mobile, fixed_line, voip, toll_free, premium_rate, shared_cost, personal_number, pager, uan, voicemail, ou unknown — pas seulement les quatre premières, qui ne sont que les exemples les plus courants. null lorsque source vaut "local" — distinct de line_type ci-dessus, qui provient de l'analyseur local et utilise un ensemble de catégories différent. |
carrier | string|null | Le nom de l'opérateur réseau actuel du numéro. null lorsque source vaut "local". |
original_carrier | string|null | L'opérateur réseau sur lequel le numéro a été émis à l'origine, s'il a été porté depuis. null lorsque source vaut "local" ou que le numéro n'a pas été porté. |
is_ported | boolean|null | true si le numéro a été porté hors de son opérateur d'origine. null lorsque source vaut "local". |
phone_region | string|null | Détail au niveau localité/état pour le numéro (par ex. "California"), plus précis que country_code ci-dessus. null lorsque source vaut "local". |
country_prefix | string|null | L'indicatif d'appel du numéro sans le "+" initial (par ex. "49" pour l'Allemagne). null lorsque source vaut "local". |
country_name | string|null | Nom complet du pays (par ex. "Germany") — country_code ci-dessus n'est que la forme ISO alpha-2 ("DE"), pas un nom d'affichage. Contrairement aux champs premium ci-dessus, celui-ci est toujours renseigné (dès que country_code l'est) et est localisé via ?lang=/Accept-Language de la même façon que le champ country_name de tous les autres endpoints — voir lang/lang_source ci-dessous. |
lang | string | La langue effectivement appliquée à country_name ci-dessus — la valeur résolue de ?lang=, ou "en" si aucune n'a été demandée ou si celle demandée n'est pas prise en charge. |
lang_source | string | "param" si ?lang= était présent sur la requête, "header" si Accept-Language a été utilisé à la place, ou "default" si aucun des deux et que l'anglais a été utilisé. Même signification que le champ portant le même nom sur GET /v1/asn/:asn et GET /v1/country/:code. |
Validation par lot. Chaque niveau a accès au traitement par lot (contrairement à /v1/ip/bulk) — c'est le plafond de lot par niveau qui limite le niveau gratuit, pas un 403. Gratuit : 10/requête, 100/jour. Pro : 100/requête, 1 000/jour. Enterprise : 1 000/requête, 10 000/jour. Ce quota est distinct de votre limite de requêtes quotidienne générale — voir Limites de débit.
| Parameter | In | Description |
|---|---|---|
body | body (JSON) | Tableau JSON de chaînes de numéros de téléphone. |
Recherche de référence : quels opérateurs de réseau mobile (MCC/MNC) sont connus pour un pays donné — sans lien avec un numéro de téléphone spécifique. Provient d'une compilation MCC/MNC maintenue par la communauté (sous licence MIT, dernière synchronisation en 2026 — voir le dépôt docs pour plus de détails) ; une table de référence statique, pas un flux en direct, car les attributions de plans de numérotation ne changent pas assez souvent pour en justifier un.
| Parameter | In | Description |
|---|---|---|
country | query | Requis. Code pays à 2 lettres, ex. ?country=US. |
Validation de la syntaxe d'un e-mail, vérification en direct de l'enregistrement MX via DNS-over-HTTPS, et détection de domaine jetable/temporaire par rapport à une liste noire maintenue par la communauté (sous licence CC0, synchronisée quotidiennement). Ne vérifie pas que la boîte aux lettres elle-même existe — cela nécessiterait une négociation SMTP que cette API n'effectue pas (voir la référence des champs ci-dessous pour savoir exactement ce que has_mx prouve et ne prouve pas).
| Parameter | In | Description |
|---|---|---|
email | path | Requis. Toute adresse e-mail, encodée en URL (le @ doit être encodé en %40). |
| Field | Type | Description |
|---|---|---|
valid_syntax | boolean | true si l'adresse correspond à un schéma de syntaxe e-mail standard. Ne vérifie pas que la boîte aux lettres existe. |
domain | string|null | La partie domaine, en minuscules. null si valid_syntax vaut false. |
has_mx | boolean|null | true si le domaine possède au moins un enregistrement MX à l'instant présent. null si la syntaxe était invalide ou si la requête DNS elle-même a échoué/expiré — traitez null comme inconnu, pas comme false. |
disposable | boolean|null | true si le domaine correspond à un fournisseur d'e-mail jetable/temporaire connu. null dans les mêmes conditions que has_mx. |
source | "premium"|"local" | "premium" si une vérification en direct a été effectuée pour cette requête, "local" sinon (limite atteinte, ou fonctionnalité non activée) — les champs ci-dessus (valid_syntax à disposable) sont toujours renseignés dans les deux cas. |
is_reachable | string|null | Le verdict global d'une vérification en direct optionnelle : "safe" (livrable), "invalid" (rejeté), "risky" (incertain) ou "unknown" (non concluant — réessayez). null lorsque la vérification en direct n'a pas été effectuée pour cette requête (voir source ci-dessous). |
is_catch_all | boolean|null | true si le domaine accepte les e-mails pour n'importe quelle adresse, ce qui signifie que l'existence de cette boîte spécifique n'a pas pu être confirmée. null lorsque la vérification en direct n'a pas été effectuée. |
mailbox_full | boolean|null | true si la vérification en direct a détecté une boîte pleine. null lorsque la vérification en direct n'a pas été effectuée. |
is_role_account | boolean|null | true si l'adresse ressemble à une adresse de fonction (par ex. support@, admin@) plutôt qu'à la boîte d'un individu. null lorsque la vérification en direct n'a pas été effectuée. |
is_disabled | boolean|null | true si la vérification en direct a détecté une boîte explicitement désactivée. null lorsque la vérification en direct n'a pas été effectuée. |
Combine ceux que vous fournissez parmi IP, e-mail, téléphone, et User-Agent en un seul score de 0 à 100 — la seule chose qu'aucun de ip-api.com, ipapi.co, ipgeolocation.io, ipify.org, ipregistry.co, ip2location.io, AbstractAPI, IPLocate.io, ou BigDataCloud n'offre comme signal unique fusionné (vérifié directement). Les quatre entrées sont optionnelles et indépendantes — transmettez n'importe quel sous-ensemble. ip prend par défaut votre propre IP et ua votre propre en-tête User-Agent si omis, même convention que GET /v1/ip et GET /v1/ua. Un signal que vous ne transmettez pas est simplement absent de la réponse, il n'est pas noté comme propre — son poids est redistribué entre les signaux que vous avez effectivement fournis.
| Parameter | In | Description |
|---|---|---|
ip | query | Optionnel. Par défaut, votre propre IP. L'IPv6 n'est pas encore noté (même limitation que le reste de l'API de renseignement sur les menaces). |
email | query | Optionnel. Toute adresse e-mail. |
phone | query | Optionnel. Tout numéro de téléphone. |
ua | query | Optionnel. Par défaut, votre propre en-tête User-Agent. |
| Field | Type | Description |
|---|---|---|
score | integer | Composite pondéré de 0 à 100 sur l'ensemble des signaux fournis. |
risk_tier | string | "low" (<20), "medium" (20-44), "high" (45-69), ou "critical" (70+). |
signals | object | Détail par entrée — seules les clés correspondant aux entrées que vous avez réellement fournies sont présentes : ip, email, phone, user_agent. Chacune inclut son propre score de composant plus les mêmes champs déjà renvoyés par GET /v1/ip/:ip, /v1/email/:email, /v1/phone/:number, et /v1/ua pour cette entrée. |
Restitue une URL dans une véritable instance Chrome headless (Cloudflare Browser Rendering, pas un fournisseur tiers de captures d'écran) et renvoie un PNG. Les cibles internes/privées (localhost, plages RFC 1918, adresses link-local/métadonnées cloud) sont rejetées avant même le lancement du navigateur. Soumis aux propres limites, au niveau plateforme, de Browser Rendering, bien plus strictes que le reste de cette API — attendez-vous à une limitation bien avant que votre quota de requêtes quotidien habituel ne soit atteint sur les plans Cloudflare inférieurs.
| Parameter | In | Description |
|---|---|---|
url | query | Requis. Doit être http ou https. |
Identifie la langue d'un texte via une analyse locale de fréquence de trigrammes — aucun appel à un fournisseur externe, aucune inférence par modèle d'IA, aucune journalisation. Une entrée de moins de 10 caractères renvoie une langue à null ; en dessous d'environ 30 caractères, une meilleure estimation peut encore être renvoyée mais reliable vaudra false.
| Parameter | In | Description |
|---|---|---|
text | query | Requis. Jusqu'à 5 000 caractères — une entrée plus longue est tronquée, pas rejetée. |
| Field | Type | Description |
|---|---|---|
language | object|null | code (ISO 639-1), iso639_3, name, et local_name pour la meilleure correspondance. null si le texte est trop court ou non reconnu ("und"). |
reliable | boolean | false pour une entrée courte — considérez le résultat comme une estimation, pas une correspondance fiable. |
candidates | array | Jusqu'à 5 langues finalistes avec des scores relatifs, pour les paires de langues proches. |
Convertit un montant entre deux devises (154 prises en charge) en utilisant le même flux quotidien de taux de référence qui alimente déjà currency_code/exchange_rate_usd sur chaque recherche IP, ASN, et pays — exposé ici comme un endpoint de conversion autonome plutôt qu'imbriqué dans une réponse de géolocalisation.
| Parameter | In | Description |
|---|---|---|
from | query | Requis. Code devise ISO 4217 à 3 lettres. |
to | query | Requis. Code devise ISO 4217 à 3 lettres. |
amount | query | Optionnel. Par défaut : 1. |
| Field | Type | Description |
|---|---|---|
result | number | Montant converti. |
rate | number | Unités de to pour 1 from. |
updated | string | Horodatage ISO de la synchronisation du taux de référence utilisée par cette conversion. |
Table complète des taux de change (154 devises) rebasée sur n'importe quelle devise prise en charge, pas seulement l'USD.
| Parameter | In | Description |
|---|---|---|
base | query | Optionnel. Par défaut : USD. |
| Field | Type | Description |
|---|---|---|
rates | object | Correspondance code devise → taux par rapport à base. |
Historique quotidien des taux de référence pour une paire de devises, jusqu'à 90 jours en arrière — les données derrière le graphique de tendance des taux sur l'outil de conversion de devises. Rempli une fois rétroactivement, puis complété quotidiennement par le même cron qui met à jour GET /v1/currency/convert. Il s'agit d'un unique taux de référence quotidien dans le temps, pas d'un écart de cours acheteur/vendeur.
| Parameter | In | Description |
|---|---|---|
target | query | Requis. Code devise ISO 4217 à 3 lettres à représenter graphiquement. |
base | query | Optionnel. Par défaut : USD. |
days | query | Optionnel. Une valeur parmi 30, 60, 90. Par défaut : 30. |
| Field | Type | Description |
|---|---|---|
series | array | Tableau de points { date, rate } trié par date croissante. |
stats | object | min, avg, max, et current sur la série renvoyée. |
Conditions actuelles — et, avec detail=1, des prévisions horaires et sur plusieurs jours — pour un nom de lieu, un code postal ou une paire "lat,lon", ou pour lat + lon ou une ip. Les lieux américains sont servis par le National Weather Service, le reste du monde par MET Norway. Ajoutez include= pour le document complet avec unités, jusqu'à 9 jours, soleil et lune, alertes officielles et plus — voir la carte include ci-dessous. L'outil weather-lookup détecte en outre automatiquement la position de l'appelant côté navigateur avant tout appel explicite à ce point de terminaison.
| Parameter | In | Description |
|---|---|---|
q | query | Nom de ville, code postal ou "lat,lon" (100 caractères maximum). Ou transmettez lat et lon, ou ip, à la place. L'un des trois est obligatoire. |
detail | query | Optionnel. "1" ajoute pressure_mb/visibility_km/dewpoint_c/sunrise/sunset/etc. à weather, plus un objet forecast (hourly + daily). Omis par défaut. |
| Field | Type | Description |
|---|---|---|
condition | string|null | Courte description textuelle. |
temp_c / temp_f | number|null | Température actuelle. |
feels_like_c | number|null | Température ressentie en Celsius. |
humidity_pct | number|null | Humidité relative. |
wind_kmph / wind_dir | number|null / string|null | Vitesse du vent et direction sur une rose des vents à 16 points. |
uv_index | number|null | Indice UV. |
location | object|null | Nom résolu, région, pays, et lat/lon pour le lieu recherché — pas seulement l'entrée brute. |
forecast.hourly[] | array | detail=1 uniquement. Prochaines 24h par pas de 3 heures : hour_label, temp_c/temp_f, weather_code, chance_of_rain_pct. |
forecast.daily[] | array | detail=1 uniquement. Prévisions sur 3 jours : date, day_label, weather_code, condition, chance_of_rain_pct, max/min temp_c/temp_f. |
Proxy en direct vers le système Trademark Status & Document Retrieval (TSDR) de l'USPTO pour le statut d'un dossier via un numéro de série à 8 chiffres — un appel direct par requête, pas une copie mise en cache ou revendue. Les données de statut de dossier constituent une œuvre du gouvernement américain et relèvent du domaine public selon les propres conditions d'utilisation de l'USPTO ; chaque réponse comporte donc un champ source/attribution plutôt que d'être mise en cache ou revendue silencieusement. Les données de logo/image de marque sont délibérément hors périmètre — les conditions de l'USPTO isolent les licences d'image séparément des données textuelles de statut de dossier renvoyées par cet endpoint. La recherche par numéro d'enregistrement n'est pas encore prise en charge ; seul le chemin par numéro de série est documenté par l'USPTO à ce jour. Essayez-le sur l'outil Recherche de marque.
| Parameter | In | Description |
|---|---|---|
serial | path | Requis. Exactement 8 chiffres, ex. 98267877. |
| Field | Type | Description |
|---|---|---|
source | string | Toujours "USPTO TSDR". |
attribution | string | Ligne d'attribution requise selon les conditions d'utilisation de l'USPTO. |
data | object | Charge utile brute du statut de dossier telle que renvoyée par l'USPTO, transmise telle quelle plutôt que remodelée — confirmée en service le 2026-08-12. Sous data.trademarks[0] : status (dates de dépôt/enregistrement, markElement, descOfMark, tm5StatusDesc), parties.ownerGroups (nom/adresse du titulaire par rôle), gsList[] (description des produits/services et classes), et prosecutionHistory[] (historique complet du dossier). La présence des champs varie selon le statut de la demande — par ex. une demande en attente n'a pas encore de usRegistrationNumber. |
Proxy en direct vers l'API Patent File Wrapper (Open Data Portal) de l'USPTO pour le statut de délivrance via un numéro de brevet d'utilité à 7-8 chiffres — un appel direct par requête, pas une copie mise en cache ou revendue. La source initialement visée (l'API de recherche de PatentsView) a été confirmée fermée le 2026-03-20 ; ceci fait plutôt proxy vers son successeur en direct. Les données Patent File Wrapper constituent une œuvre du gouvernement américain et relèvent du domaine public selon les propres conditions d'utilisation de l'USPTO, chaque réponse comportant donc un champ source/attribution. Le périmètre est centré sur la demande/procédure — aucun graphe de citations, famille de brevets, champ de statut juridique, ou images comme le montrent Lens.org, Espacenet, ou Google Patents. La couverture démarre avec les demandes déposées en 2001. Les brevets de dessin, de plante, et de réémission ne sont pas encore pris en charge ; seuls les brevets d'utilité par numéro de brevet délivré. Essayez-le sur l'outil Recherche de brevet.
| Parameter | In | Description |
|---|---|---|
number | path | Requis. 7 à 8 chiffres, ex. 12393227. Numéro de brevet d'utilité délivré uniquement, pas un numéro de demande. |
| Field | Type | Description |
|---|---|---|
source | string | Toujours "USPTO Patent File Wrapper". |
attribution | string | Ligne d'attribution requise selon les conditions d'utilisation de l'USPTO. |
data | object | Charge utile brute du dossier de procédure telle que renvoyée par l'USPTO, transmise telle quelle plutôt que remodelée — confirmée en service le 2026-08-12 sur des brevets réels (12393227, 9935534). Champs clés : applicationMetaData (inventionTitle, filingDate, applicationStatusDescriptionText, applicationStatusDate, patentNumber, inventorBag[]), recordAttorney.attorneyBag[], applicationNumberText, et eventDataBag[] (historique complet de la procédure). Renvoie 404 si le numéro n'existe pas, s'il s'agit d'un brevet de dessin/plante/réémission, ou s'il est antérieur à la couverture de 2001. |
Flux paginé de VPN, Tor, et renseignement sur les menaces. 200 entrées par page. Chaque entrée inclut IP/CIDR, attribution du fournisseur, FAI, pays, et type de classification.
| Parameter | In | Description |
|---|---|---|
page | query | Numéro de page indexé à partir de 0. Par défaut : 0. |
type | query | Filtrer par type : VPN, Tor Exit Node, Tor Node, High-Risk Threat Intel. |
q | query | Filtrer par sous-chaîne d'IP ou de CIDR. |
Métadonnées uniquement — nombre total d'entrées, nombre par source, et heure de dernière synchronisation. Ne renvoie pas de données IP.
Plages réseau abusives paginées. Notées de 1 à 10 par corroboration croisée des flux. Niveaux de risque : critical (8-10), high (5-7), medium (3-4).
| Parameter | In | Description |
|---|---|---|
page | query | Numéro de page indexé à partir de 0. Par défaut : 0. |
tier | query | Filtrer par niveau de risque : critical, high, medium. |
q | query | Filtrer par sous-chaîne de plage réseau. |
source | query | Facultatif. Filtre par nom de flux source exactement tel que renvoyé dans source_feed, p. ex. 'Spamhaus DROP' ou 'IPsum Threat Intel'. |
Métadonnées uniquement — nombre total de réseaux, nombre par source, répartition des niveaux de risque, et heure de dernière synchronisation.
Export CSV téléchargeable des jeux de données ouverts sur lesquels l'API est déjà construite — mêmes données, aucune nouvelle licence. asn et ranges sont toujours disponibles ; geo-city renvoie 503 tant que le jeu de données de cette source n'est pas actif sur un déploiement donné. geo-city exporte les lignes brutes d'une seule source géo à la fois, pas une vue fusionnée — transmettez ?source=primary (par défaut) ou ?source=secondary.
| Parameter | In | Description |
|---|---|---|
kind | path | Une valeur parmi : asn, ranges, geo-city. |
source | query | geo-city uniquement. primary (par défaut) ou secondary. |
Délivre une clé API instantanément — aucun e-mail, aucune inscription. Chaque clé démarre sur le niveau gratuit (1 000 requêtes/jour ; recherche en masse non incluse). Les clés Pro et Enterprise débloquent des limites quotidiennes plus élevées et la recherche en masse (jusqu'à 100 IP/requête) — voir tarifs. Conservez la clé — elle ne pourra pas être récupérée ultérieurement.
Vérifiez combien de requêtes une clé a effectuées. Transmettez la clé sur n'importe quelle requête /v1/* via l'en-tête X-API-Key ou ?api_key= pour qu'elle soit comptabilisée.
| Parameter | In | Description |
|---|---|---|
key | query | Requis. Une clé renvoyée par POST /v1/keys. |
Contact de signalement d'abus du réseau propriétaire d'une IP, d'après RDAP : le RIR, l'identifiant du réseau, le CIDR qui le couvre et la ou les adresses e-mail d'abus. Utile pour savoir où envoyer un signalement.
| Parameter | In | Description |
|---|---|---|
ip | path | Adresse IPv4 ou IPv6. |
available vaut false (avec un motif dans failure) lorsque le registre n'a pas pu être joint.
Les plages d'IP réellement annoncées par un ASN, paginées, chacune avec son pays et les indicateurs hébergement / mobile / résidentiel / bot / liste noire.
| Parameter | In | Description |
|---|---|---|
asn | path | Numéro d'ASN sans le préfixe AS, p. ex. 15169. |
limit | query | Plages par page. Par défaut 50, plafonné à 200. |
offset | query | Plages à ignorer. Par défaut 0. |
Enregistrement du registre (RDAP) d'un ASN : identifiant, nom, pays, type d'allocation, dates d'enregistrement, le RIR et ses contacts.
| Parameter | In | Description |
|---|---|---|
asn | path | Numéro d'ASN sans le préfixe AS, p. ex. 15169. |
available vaut false avec un reason lorsque le registre est injoignable.
Où se trouve réellement un ASN : des points au niveau de la ville, géolocalisés à partir d'un échantillon de ses plus grandes plages, plus les villes les plus fréquentes. Alimente la carte de répartition de la page ASN.
| Parameter | In | Description |
|---|---|---|
asn | path | Numéro d'ASN sans le préfixe AS, p. ex. 15169. |
Un échantillon, pas la liste complète des plages. Utilisez /v1/asn/:asn/ranges pour toutes les plages.
Domaines hébergés dans un ASN, trouvés par DNS inverse (PTR) sur un échantillon de ses adresses. Chaque entrée contient le domaine racine, le nom d'hôte PTR et l'IP échantillonnée.
| Parameter | In | Description |
|---|---|---|
asn | path | Numéro d'ASN sans le préfixe AS, p. ex. 15169. |
Échantillonné : c'est un indice de ce que l'ASN héberge, pas une liste complète. Pour une seule IP, utilisez /v1/ip/:ip/hosted-domains.
Relations BGP d'un ASN : pairs, fournisseurs amont et clients aval, avec leur nombre.
| Parameter | In | Description |
|---|---|---|
asn | path | Numéro d'ASN sans le préfixe AS, p. ex. 15169. |
available vaut false lorsque la source de données BGP n'a pas pu être jointe. Des tableaux vides avec available: true signifient que rien n'a été signalé pour cet ASN.
Annuaire de l'espace IPv4 : une entrée par bloc /8 avec le nombre de plages, de pays et d'ASN qu'il contient et son pays principal. Commencez ici, puis descendez avec /v1/ip-ranges/:a et /v1/ip-ranges/:a/:b.
Les blocs /16 d'un /8 (par exemple 8.0.0.0/8), avec les mêmes nombres de plages, de pays et d'ASN par bloc.
| Parameter | In | Description |
|---|---|---|
a | path | Premier octet, 0-255. |
Les plages attribuées dans un /16 (par exemple 8.8.0.0/16), chacune avec l'ASN auquel elle appartient, plus les nombres par bloc.
| Parameter | In | Description |
|---|---|---|
a | path | Premier octet, 0-255. |
b | path | Deuxième octet, 0-255. |
Une tranche de la charge Nearby pour une coordonnée, afin qu'un client affiche chaque partie à mesure qu'elle arrive : géocodage inverse, points d'intérêt ou statistiques locales de criminalité.
| Parameter | In | Description |
|---|---|---|
lat | query | Latitude, obligatoire. |
lon | query | Longitude, obligatoire. |
part | query | Quelle tranche : geocode, poi ou crime. Une valeur inconnue renvoie 400. |
country | query | part=crime uniquement : code pays ISO. Des données de criminalité existent pour US et GB. |
region | query | part=crime uniquement : nom de l'État ou de la région, p. ex. Utah. |
city | query | part=crime uniquement : nom de la ville, p. ex. Orem. |
lang | query | Facultatif. Localise les libellés de lieux (mêmes codes que le tableau de localisation ci-dessus). |
Durée et distance en voiture entre deux points. Un chemin rapide : il évite le géocodage inverse et la recherche de points d'intérêt de /v1/places/:ip.
| Parameter | In | Description |
|---|---|---|
from_lat | query | Latitude d'origine, obligatoire. |
from_lon | query | Longitude d'origine, obligatoire. |
dest_lat | query | Latitude de destination. À utiliser avec dest_lon, ou passez dest_address à la place. |
dest_lon | query | Longitude de destination. |
dest_address | query | Destination en texte libre, géocodée pour vous. Utilisée quand dest_lat/dest_lon sont absents. |
Lorsqu'aucune destination ne peut être résolue, la réponse contient to: null, commute: null et une chaîne reason.
La charge de /v1/places/:ip ancrée sur une adresse postale saisie au lieu d'une IP : géocodage, localité et estimation de trajet facultative.
| Parameter | In | Description |
|---|---|---|
q | query | Adresse en texte libre, obligatoire. |
dest_lat | query | Latitude de destination facultative, pour inclure une estimation de trajet (avec dest_lon). |
dest_lon | query | Longitude de destination facultative. |
dest_address | query | Destination facultative en texte libre, à la place de dest_lat/dest_lon. |
part | query | part=geo renvoie seulement le libellé et les coordonnées, pour un premier affichage plus rapide. |
lang | query | Facultatif. Localise les libellés de lieux (mêmes codes que le tableau de localisation ci-dessus). |
found vaut false lorsque l'adresse n'a pas pu être géocodée.
Autocomplétion d'adresses : quelques lieux correspondant à une adresse partielle, avec une préférence facultative pour un point.
| Parameter | In | Description |
|---|---|---|
q | query | Texte partiel de l'adresse, obligatoire. |
near_lat | query | Latitude facultative vers laquelle orienter les résultats. |
near_lon | query | Longitude facultative vers laquelle orienter les résultats. |
Le document météo complet, pour un nom de lieu, un code postal, des coordonnées ou une IP. Choisissez les blocs voulus avec include : current, hourly, daily, astro (soleil et lune), solar, indicators, alerts, marine, air_quality, nowcast, ou all. Les lieux américains viennent du National Weather Service, le reste du monde de MET Norway ; meta.source indique lequel. Sans include, vous obtenez le format simple { query, weather } décrit plus haut.
| Parameter | In | Description |
|---|---|---|
q / lat+lon / ip | query | Où : q (ville, code postal ou "lat,lon"), ou lat et lon, ou ip. L'un des trois est obligatoire. |
country | query | Facultatif. Code ISO ou nom du pays pour lever l'ambiguïté d'un q, par exemple country=FR pour le code postal 75001. |
include | query | Obligatoire pour ce format. Valeurs séparées par des virgules : current, hourly, daily, astro, solar, indicators, alerts, marine, air_quality, nowcast, ou all. |
units | query | metric (par défaut) ou imperial. Les noms de champs suivent l'unité : temp_c devient temp_f, wind_kmph devient wind_mph, precip_mm devient precip_in. |
wind_unit | query | kmh, ms, mph ou kn. Ne change que l'unité du vent. |
hours | query | Nombre d'entrées horaires à renvoyer, 1-240. Par défaut 48. Les premières sont horaires, les suivantes toutes les 6 heures ; step_hours l'indique. |
days | query | Nombre d'entrées quotidiennes à renvoyer, 1-9. Par défaut 7. Les données américaines couvrent 7 jours. |
meta.coverage indique les champs disponibles pour le lieu : la probabilité de pluie, les rafales et la probabilité d'orage n'existent qu'aux États-Unis et dans les pays nordiques, et valent null (jamais zéro) ailleurs. alerts sont des alertes officielles pour les États-Unis et la Norvège ; marine, air_quality et nowcast ne couvrent que la Norvège et ses eaux proches et renvoient available: false ailleurs. Tout ce qui figure dans meta.derived est une estimation d'ipto.to, et indicators sont des signalements dérivés, pas des alertes officielles. Conservez meta.attribution si vous affichez ces données (les données de MET Norway sont sous licence CC BY 4.0).
Le relevé quotidien propre à ipto.to pour les lieux déjà consultés : la température maximale la plus haute, la minimale la plus basse et les plus fortes précipitations vues dans les instantanés de prévision de la journée. Seuls les lieux déjà demandés ont des données, qui s'accumulent avec le temps.
| Parameter | In | Description |
|---|---|---|
q / lat+lon / ip | query | Où : q (ville, code postal ou "lat,lon"), ou lat et lon, ou ip. L'un des trois est obligatoire. |
days | query | Nombre de jours récents à renvoyer, 1-400. Par défaut 30. |
Ce sont des instantanés de prévision, pas des observations de station ni une réanalyse : ne les utilisez pas comme historique observé. Un 404 signifie qu'aucun instantané n'a encore été enregistré pour ce lieu.
Les images d'animation radar disponibles, de la plus ancienne à la plus récente, chacune avec un horodatage Unix et l'identifiant d'image à utiliser dans l'URL de la tuile radar.
Une tuile de carte radar (PNG) pour une image, à une position z/x/y standard de carte web. Servie depuis la même origine pour qu'une carte la charge sans requête tierce.
| Parameter | In | Description |
|---|---|---|
frame | path | Identifiant d'image issu de /v1/weather/radar/frames (hexadécimal en minuscules). |
z | path | Niveau de zoom. |
x | path | Colonne de la tuile. |
y | path | Ligne de la tuile. |
Une tuile de carte d'imagerie satellite pour une position z/x/y standard de carte web, servie depuis la même origine.
| Parameter | In | Description |
|---|---|---|
z | path | Niveau de zoom. |
x | path | Colonne de la tuile. |
y | path | Ligne de la tuile. |
Contrat OpenAPI 3.1 lisible par machine pour /v1/email/:email, écrit pour que les agents LLM et MCP appellent le point de terminaison e-mail sans lire cette documentation.
Référence des champs de recherche IP
| Field | Type | Description |
|---|---|---|
ip | string | L'adresse IP recherchée. |
version | string | "v4" ou "v6". |
bogon | boolean | true s'il s'agit d'une adresse privée, réservée, ou non routable. |
bogon_type | string|null | Code de motif si bogon : "loopback", "private", "link-local", "multicast", "reserved", "documentation", "unspecified". |
asn | integer|null | Numéro de système autonome qui annonce cette IP. |
asn_name | string|null | Nom court de l'ASN (ex. "GOOGLE"). |
asn_org | string|null | Organisation enregistrée auprès de l'ASN (ex. "Google LLC"). |
asn_type | string|null | Catégorie d'ASN : "hosting", "isp", "business", "education", "government", "mobile", "residential". |
continent | string|null | Nom complet du continent (ex. "North America"). |
continent_code | string|null | Code continent à deux lettres : AF AS EU NA SA OC AN. |
country_code | string|null | Code pays ISO 3166-1 alpha-2 (ex. "US") du pays où se trouve l'IP, issu des mêmes données de géolocalisation que la ville et les coordonnées. Sans correspondance de géolocalisation, c'est le pays d'enregistrement de l'ASN (asn_country_code) qui est utilisé. Le nom du pays, le drapeau, la devise, etc. en sont dérivés. |
country_name | string|null | Nom complet du pays en anglais (ex. "United States"). |
country_flag | string|null | Emoji du drapeau du pays (ex. "🇺🇸"). |
is_eu | boolean | true si le pays est un État membre de l'UE (27 membres). |
city | string|null | Nom de la ville. Renseigné lors d'une recherche sur soi-même, et lors de recherches explicites lorsque l'une des sources géo fusionnées (IP2Location ou MaxMind) trouve une correspondance — vérifiez geo_precision. |
state | string|null | Région/subdivision administrative. Même disponibilité que city. |
postal_code | string|null | Code postal. Renseigné lors d'une recherche sur soi-même, et lors de recherches explicites lorsque IP2Location (privilégié) ou MaxMind trouve une correspondance — même disponibilité que city. |
latitude | number|null | Latitude décimale. Même disponibilité que city. |
longitude | number|null | Longitude décimale. Même disponibilité que city. |
timezone | string|null | Fuseau horaire — même disponibilité que city. Un identifiant IANA (ex. "America/New_York") lors d'une recherche sur soi-même. Pour les recherches explicites, le format dépend de la source ayant fourni la correspondance : une chaîne de décalage UTC comme "-08:00" pour IP2Location, ou un nom IANA pour MaxMind. |
geo_precision | string | Niveau de précision des données de localisation : "city", "country" (la recherche au niveau ville n'a trouvé aucune correspondance), ou "none". |
geo_country_code | string|null | Pays où se trouve l'IP, d'après les données de géolocalisation (ISO 3166-1 alpha-2). Égal à country_code dès qu'il est défini. null si aucune correspondance de géolocalisation. |
asn_country_code | string|null | Pays d'enregistrement du titulaire de l'ASN (ISO 3166-1 alpha-2). Peut différer de country_code pour les réseaux CDN, VPN, d'hébergement ou anycast annoncés depuis un autre pays que celui où le titulaire est enregistré. null si l'IP n'a pas d'entrée ASN. |
currency_code | string|null | Code devise ISO 4217 du pays (ex. "USD"). |
exchange_rate_usd | number|null | Unités de devise locale pour 1 USD, issues d'un flux de taux de référence synchronisé quotidiennement couvrant 154 devises. null pour les devises hors de cet ensemble. |
calling_code | string|null | Indicatif téléphonique du pays, préfixe + inclus (ex. "+1"). |
languages | string[] | Langues officielles/reconnues du pays, en anglais. |
tld | string[] | Domaine(s) de premier niveau national/nationaux, ex. [".us"]. |
capital | string|null | Nom de la capitale. |
borders | string[] | Codes ISO alpha-2 des pays frontaliers. |
is_datacenter | boolean | true si l'IP appartient à un fournisseur d'hébergement ou de cloud. |
is_mobile | boolean | true si l'IP est enregistrée auprès d'un opérateur mobile. |
is_residential | boolean | true si l'IP est classée comme accès résidentiel à haut débit. |
connection_type | string | "mobile", "datacenter", ou "unknown" — dérivé de la même classification que is_mobile/is_datacenter. Ne tente délibérément pas de distinguer résidentiel de professionnel : cela n'est pas dérivable de façon fiable à partir du seul texte du nom d'organisation de l'ASN, donc un ASN qui n'est pas classé avec confiance comme mobile ou datacenter reste "unknown" plutôt que deviné. |
is_bot | boolean | true si l'IP est associée à une infrastructure de bot connue. |
is_proxy | boolean | true si l'IP est un point de sortie proxy connu. |
is_vpn | boolean | true si l'IP appartient à une plage de serveurs VPN connue du flux de menaces. |
is_tor | boolean | true si l'IP est un nœud de sortie Tor confirmé. |
is_abuser | boolean | true si l'IP appartient à une plage réseau signalée par plusieurs flux de renseignement sur les abus. |
abuse_score | integer|null | Score de gravité de 1 à 10 lorsque is_abuser vaut true, issu de la corroboration croisée des flux. null sinon. |
risk_tier | string|null | "critical" (8-10), "high" (5-7), ou "medium" (3-4) — dérivé de abuse_score. null si non signalé. |
threat_type | string|null | La catégorie correspondante la plus actionnable lorsque is_tor/is_vpn/is_abuser se chevauchent : "tor_exit" > "abuser" > "vpn". null si aucune correspondance. |
flags | object | Objet rétrocompatible reflétant les champs is_*. Clés : hosting, mobile, residential, bot, blacklisted, vpn, tor, abuser. |
meta.data_version | string | Date du jeu de données utilisé pour la recherche (AAAA-MM-JJ). "cf-edge" pour une recherche sur soi-même. "bogon" pour les plages privées. |
meta.cached | boolean | true si la réponse a été servie depuis la couche de cache. |
meta.lang | string | La langue effectivement utilisée pour cette réponse — correspond à ?lang= si fourni, ou à la valeur résolue à partir d'Accept-Language, ou à "en". |
meta.lang_source | "param"|"header"|"default" | Comment lang a été déterminé : "param" (?lang= a été transmis), "header" (résolu à partir d'Accept-Language), ou "default" (aucun des deux n'était présent). |
Formats de sortie
Les recherches IP, ASN, et pays prennent toutes en charge ?format=.
| Format | Content-Type | Usage |
|---|---|---|
json | application/json | Par défaut. Réponse structurée complète. |
csv | text/csv | Paires clé,valeur à plat. Les objets imbriqués sont omis. |
text | text/plain | Lignes clé : valeur. Un champ par ligne. |
xml | application/xml | Structure imbriquée complète, les tableaux répètent la balise. |
yaml | application/x-yaml | Structure imbriquée complète. |
Localisation
Transmettez ?lang= sur /v1/ip, /v1/asn/:asn, ou /v1/country/:code pour localiser country_name et continent. Tout le reste (noms d'organisation ASN, noms de ville, codes devise) reste dans sa forme d'origine — ce sont des identifiants et des noms propres, pas du texte d'interface. Les codes non pris en charge se replient sur l'anglais plutôt que de renvoyer une erreur.
| Code | Language |
|---|---|
en | English (default) |
pt | Português |
fr | Français |
de | Deutsch |
zh-TW | 繁體中文 |
ko | 한국어 |
zh-CN | 简体中文 |
ja-JP | 日本語 |
es-ES | Español |
ar-SA | العربية |
hi-IN | हिन्दी |
Pas de ?lang= ? Envoyez plutôt un en-tête Accept-Language — les mêmes endpoints le lisent aussi, donc un simple curl -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 localise la réponse sans avoir besoin de chaîne de requête. Un ?lang= explicite l'emporte toujours lorsque les deux sont présents. Remarque : la variable d'environnement shell LANG/LC_ALL (ex. LANG=es_ES.UTF-8 curl ...) ne fait que définir la locale propre de curl — curl ne la lit jamais et ne la transforme jamais en en-tête, elle n'a donc aucun effet sur la langue de la réponse. Seuls Accept-Language ou ?lang= fonctionnent réellement.
Chaque réponse de /v1/ip, /v1/asn/:asn et /v1/country/:code inclut lang et lang_source (imbriqué dans meta sur /v1/ip ; au niveau racine sur les deux autres), afin que vous sachiez toujours exactement quelle langue a été appliquée et comment elle a été choisie — "param", "header" ou "default" — sans avoir à deviner à partir de la requête envoyée.
La localisation complète des clés et des valeurs est le comportement par défaut dès que vous définissez un lang autre que l'anglais — chaque champ, y compris les clés imbriquées flags et meta, revient renommé dans la langue cible, et les valeurs d'énumération fixes (risk_tier, threat_type, connection_type, geo_precision, bogon_type, asn_type) sont également traduites. Besoin de l'ancien format avec des clés en anglais ? Ajoutez &localize=0 à /v1/ip pour le désactiver.
Exemples de code
JavaScript
Python
PHP
Go
Limites de débit
Les limites sont appliquées par jour (UTC), comptées par adresse IP sur le niveau gratuit ou par clé sur Pro/Enterprise. Dépasser votre limite renvoie un statut HTTP 429 avec un en-tête Retry-After. Pour des charges de production, voir tarifs.
S'applique à chaque endpoint /v1/*, au serveur /mcp, et aux raccourcis curl ipto.to / curl ipto.to/:ip. GET /ip est la seule exception — un simple écho d'en-tête sans coût de recherche, qui ne consomme donc aucun quota.
| Tier | Requests / day | Auth |
|---|---|---|
| Free | 1,000 | Aucun |
| Pro | 100,000 | Clé API (en-tête) |
| Enterprise | Unlimited | Clé API + endpoints dédiés |
Codes d'erreur
| Status | Meaning |
|---|---|
200 | OK. La réponse inclut les données. |
202 | Les données du flux sont en cours de synchronisation. Réessayez dans 45 secondes. |
400 | Requête invalide. IP, ASN, ou code pays invalide. |
404 | ASN ou pays introuvable dans le jeu de données. |
503 | Jeu de données pas encore disponible. L'ingestion initiale est peut-être en cours. |