API-Referenz

Einfache, konsistente Endpunkte. CORS aktiviert. Keine Authentifizierung. Vollständig mehrsprachig — jedes Feld, jeder Schlüssel und Wert wird in über 10 Sprachen übersetzt.

Basis-URL

https://ipto.to

Schnellstart

# Detect your own IP curl https://ipto.to/v1/ip # Look up any IP curl https://ipto.to/v1/ip/8.8.8.8 # Bulk lookup (up to 100 IPs, Pro/Enterprise only) curl -X POST https://ipto.to/v1/ip/bulk \ -H "Content-Type: application/json" \ --data '["1.1.1.1","8.8.8.8","9.9.9.9"]'

Terminal-Shortcut: curl ipto.to oder curl ipto.to/8.8.8.8 (kein https:// oder /v1/ip/ nötig) funktioniert ebenfalls, wenn die Anfrage von curl, Wget oder HTTPie kommt — erkannt über den User-Agent. Dabei wird ein kürzerer, an ipinfo.io angelehnter Feldsatz zurückgegeben (ip, country, city, asn, org, ...), nicht das vollständige Schema unten — verwenden Sie die /v1/ip-Pfade direkt für die vollständige, auf dieser Seite dokumentierte Antwort.

Nur die IP: curl ipto.to/ip (oder im Browser öffnen) gibt nichts als die eigene IP-Adresse als reinen Text zurück — 73.9.114.155, kein JSON, kein Seiten-Chrome. Direktes Äquivalent zu ipinfo.io/ip. Siehe GET /ip unten.

Standardmäßig mehrsprachig: Setzen Sie ?lang= auf einen unterstützten Code, und jeder JSON-Schlüssel und -Wert in der Antwort kommt übersetzt zurück — nicht nur Land/Kontinent. Siehe Lokalisierung unten für die vollständige Sprachliste und die &localize=0-Option zum Abschalten.

curl "https://ipto.to/v1/ip/8.8.8.8?lang=de" # "landesname":"Vereinigte Staaten","ist_vpn":false, ... # every key & value comes back translated -- add &localize=0 for the legacy English-keys shape

Lookup Lab

Baue eine beliebige ipto-Anfrage, kopiere sie als sofort lauffähigen Code in deiner Sprache oder sende sie direkt hier ab und lies die Live-Antwort. Für den kostenlosen Tarif ist kein Schlüssel nötig.

MCP-Server

ipto ist auch als MCP-Tool-Server (Model Context Protocol) erreichbar — richten Sie Claude Desktop, Cursor oder einen beliebigen MCP-fähigen Client auf den unten stehenden Endpunkt, und es werden 14 aufrufbare Tools bereitgestellt: 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 und patent_lookup. JSON-RPC 2.0 über Streamable HTTP — nur POST, keine Session/SSE erforderlich. Gleiche Authentifizierung wie bei der REST-API: weglassen für den kostenlosen Tarif (1.000 Anfragen/Tag pro IP), oder ?api_key= an die Endpunkt-URL anhängen.

{ "mcpServers": { "ipto": { "url": "https://ipto.to/mcp" } } }

Für reine Stdio-Clients per Bridge verbinden: npx mcp-remote https://ipto.to/mcp

curl -X POST https://ipto.to/mcp \ -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ip_lookup","arguments":{"ip":"8.8.8.8"}}}'

Endpunkte

GET/ip

Gibt nichts als die eigene öffentliche IP-Adresse des anfragenden Clients als reinen Text zurück (Content-Type: text/plain) — z. B. 73.9.114.155. Direktes Äquivalent zu ipinfo.io/ip: funktioniert identisch über curl, Wget, HTTPie oder einen einfachen Browser-Aufruf (keine User-Agent-Erkennung, anders als beim curl ipto.to-Shortcut oben), und zeigt im Browser geöffnet nur die reine IP ohne Seiten-Chrome an.

Keine Parameter, kein Query-String. Für das vollständige Geolokalisierungs-/Threat-Intelligence-Objekt verwenden Sie stattdessen GET /v1/ip unten. Diese Route liest die verbindende IP direkt aus (kein D1-/KV-Lookup) und wird nicht auf das tägliche Anfragebudget angerechnet — siehe Ratenlimits.

curl https://ipto.to/ip # 203.0.113.7
GET/v1/ip

Liefert Geolokalisierung und Threat Intelligence für die anfragende IP, einschließlich Daten auf Stadtebene über das CF-Edge-Objekt.

Keine erforderlichen Parameter. Akzeptiert ?lang=, ?fields=, ?format= — siehe Lokalisierung und Ausgabeformate unten.

curl https://ipto.to/v1/ip # the lookup for the calling IP: same shape as /v1/ip/:ip below
GET/v1/ip/:ip

Beliebige IPv4-Adresse nachschlagen. Felder auf Stadtebene (city, state, postal_code, latitude, longitude, timezone) werden befüllt, wenn die IP in einem von zwei zusammengeführten Geo-Datensätzen liegt, IP2Location oder MaxMind — prüfen Sie geo_precision in der Antwort, um zu sehen, ob Sie Daten auf Stadt- oder Länderebene erhalten haben. Das Format von timezone hängt davon ab, welche Quelle den Treffer geliefert hat (ein UTC-Offset-String von IP2Location, ein IANA-Name von MaxMind). IPv6-Abfragen liefern derzeit nur Daten auf Länderebene.

ParameterInDescription
ippathErforderlich. Eine beliebige gültige IPv4- oder IPv6-Adresse.
langqueryOptional. Lokalisiert country_name und continent: en (Standard), pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN.
fieldsqueryOptional. Kommagetrennte Liste der einzuschließenden Felder. Z. B. ?fields=ip,country_code,is_vpn
formatqueryOptional. Antwortformat: json (Standard), csv, text, xml, yaml.
curl https://ipto.to/v1/ip/8.8.8.8 # only the fields you want: curl "https://ipto.to/v1/ip/8.8.8.8?fields=ip,asn,country_code,city" # {"ip":"8.8.8.8","asn":15169,"country_code":"US","city":"Mountain View"}
GET/v1/search/:query

Der einheitliche Such-Endpunkt hinter der Suchleiste auf der Startseite. Erkennt, ob :query eine IP, eine ASN (AS15169 oder 15169), ein zweistelliger Ländercode, eine E-Mail-Adresse oder eine Telefonnummer ist, und fasst dann alle relevanten Prüfungen in einer Antwort zusammen. Bei einer IP-Abfrage wird dies serverseitig parallel auf die primäre IP-Abfrage plus RPKI, IP-zu-Unternehmen, Mobilfunkanbieter, Hosted-Domains und Orte aufgefächert, sodass eine einzelne Suche nur eine Anfrage gegen Ihr tägliches Ratenlimit-Budget zählt statt eine pro Funktion.

ParameterInDescription
querypathErforderlich. Eine IP, ASN, ein Ländercode, eine E-Mail-Adresse oder eine Telefonnummer.
FieldTypeDescription
querystringDie dekodierte Eingabe, wie empfangen.
detected_typestring"ip", "asn", "country", "email" oder "phone".
ipobject|nullVorhanden, wenn detected_type "ip" ist — gleiche Struktur wie GET /v1/ip/:ip.
rpkiobject|nullVorhanden bei IP-Abfragen — gleiche Struktur wie GET /v1/ip/:ip/rpki.
companyobject|nullVorhanden bei IP-Abfragen — gleiche Struktur wie GET /v1/ip/:ip/company.
whoisobject|nullVorhanden bei IP-Abfragen — gleiche Struktur wie GET /v1/ip/:ip/whois.
carrierobject|nullVorhanden bei IP-Abfragen — gleiche Struktur wie GET /v1/ip/:ip/carrier.
asn / country / email / phoneobject|nullAnstelle der sechs oben genannten Felder vorhanden, wenn detected_type entsprechend übereinstimmt — gleiche Struktur wie der eigene, dedizierte Endpunkt dieses Typs.

Jedes Teilfeld degradiert unabhängig — ein langsamer oder fehlgeschlagener Upstream (RIPEstat, ein RDAP-Server, crt.sh) äußert sich darin, dass genau dieses Feld null ist, niemals darin, dass die gesamte Suche fehlschlägt. Nur eine ungültige primäre Abfrage (z. B. eine fehlerhafte IP) liefert einen Fehlerstatus für die gesamte Anfrage.

curl https://ipto.to/v1/search/8.8.8.8
GET/v1/ip/:ip/hostname

Reverse-DNS — eine einzelne Live-PTR-Abfrage über DNS-over-HTTPS, keine Domain-Enumerationsdatenbank. Gibt null zurück, wenn die IP keinen PTR-Eintrag hat.

ParameterInDescription
ippathErforderlich. Eine beliebige gültige IPv4- oder IPv6-Adresse.
curl https://ipto.to/v1/ip/8.8.8.8/hostname # {"ip":"8.8.8.8","hostname":"dns.google"}
GET/v1/ip/:ip/rpki

RPKI-Route-Origin-Validierung für die aktuell angekündigte Route einer IP, live über RIPEstat aufgelöst (keine ROA-Datenbank wird lokal eingelesen oder synchron gehalten). status ist ausschließlich "valid", "invalid" oder "unknown" — niemals aus einem anderen Signal abgeleitet; jeder RIPEstat-Fehler oder Timeout liefert "unknown" mit einem Grund-String, keinen Fehler.

ParameterInDescription
ippathErforderlich. Eine beliebige gültige IPv4- oder IPv6-Adresse.
FieldTypeDescription
asninteger|nullDie aktuell ankündigende ASN, live aufgelöst — nicht aus dem eigenen ASN-Datensatz dieser Seite abgeleitet.
prefixstring|nullDas aktuell angekündigte CIDR-Präfix.
statusstring"valid", "invalid" oder "unknown".
validating_roasarrayDie konkreten ROA(s), die RIPEstat zugeordnet hat, jeweils mit origin/prefix/max_length/validity.
validatorstring|nullWelchen RPKI-Validator RIPEstat verwendet hat (z. B. "routinator").
reasonstring|nullErklärt ein "unknown"-Ergebnis — z. B. es existiert keine abdeckende ROA, oder RIPEstat war nicht erreichbar.
curl https://ipto.to/v1/ip/8.8.8.8/rpki # {"ip":"8.8.8.8","asn":15169,"prefix":"8.8.8.0/24","status":"valid",...}
GET/v1/rpki

Explizite (ASN, Präfix) RPKI-Validierung — für den Fall, dass Sie bereits die genaue zu prüfende Route kennen, statt der oben beschriebenen, aus der IP abgeleiteten Komfortvariante.

ParameterInDescription
asnqueryErforderlich. ASN-Nummer, mit oder ohne AS-Präfix. Z. B. 15169 oder AS15169.
prefixqueryErforderlich. CIDR-Präfix, z. B. 8.8.8.0/24.
curl "https://ipto.to/v1/rpki?asn=15169&prefix=8.8.8.0/24"
GET/v1/ip/:ip/company

Identifiziert die Organisation, auf die eine IP registriert ist, indem RDAP-Registrant-Daten (strukturiertes WHOIS) mit dem eigenen Organisationsnamen der ASN zu einer kategorialen Confidence kombiniert werden — nie ein numerischer Score.

ParameterInDescription
ippathErforderlich. Eine beliebige gültige IPv4- oder IPv6-Adresse.
FieldTypeDescription
company_namestring|nullDer ermittelte Firmenname — null, wenn confidence "low" ist (die beiden Quellen widersprechen sich, sodass keine als maßgeblich dargestellt wird) oder "none".
rdap_org_namestring|nullDer RDAP-Registrant-Name, unabhängig von company_name.
asn_org_namestring|nullDer eigene Organisationsname der ASN, unabhängig von company_name.
confidencestring"high" (Quellen stimmen überein), "medium" (nur eine Quelle verfügbar), "low" (Quellen widersprechen sich — beide werden angezeigt) oder "none".
reasonstringErklärung der Confidence-Stufe in einfachen, verständlichen Worten.
curl https://ipto.to/v1/ip/1.1.1.1/company # {"ip":"1.1.1.1","company_name":null,"rdap_org_name":"APNIC Research and Development","asn_org_name":"Cloudflare, Inc.","confidence":"low",...}
GET/v1/ip/:ip/whois

Der zugrunde liegende RDAP-Registrierungsdatensatz selbst — Netzblock, Registrierungs-/letztes-Änderungsdatum und jeder bei RDAP hinterlegte Kontakt. Zu unterscheiden von /company oben, das dieselben Registrant-Daten mit dem Organisationsnamen der ASN zu einer Confidence-bewerteten Antwort abgleicht; dieser Endpunkt liefert den Rohdatensatz unverändert, näher an klassischer WHOIS-Ausgabe. IPv6-Adressen werden ebenfalls unterstützt.

ParameterInDescription
ippathErforderlich. Eine beliebige gültige IPv4- oder IPv6-Adresse.
FieldTypeDescription
availablebooleanfalse, wenn kein RDAP-Datensatz aufgelöst werden konnte — siehe reason.
reasonstring|nullErklärt ein available: false-Ergebnis.
startAddress / endAddress / cidrstring|nullDer registrierte Netzblock.
netName / netHandle / parentHandlestring|nullVon der RIR vergebene Kennungen für das Netzwerkobjekt.
countrystring|nullLand des Registranten laut RDAP.
allocationTypestring|nullz. B. "direct allocation", "reassigned".
registeredDate / lastChangedDatestring|nullISO-Zeitstempel aus dem RDAP-Datensatz.
rirstring|nullWelches Regional Internet Registry (ARIN, RIPE, APNIC, LACNIC, AFRINIC) den Datensatz geliefert hat.
contactsarrayJeder bei RDAP hinterlegte Kontakt, jeweils mit roles, name, email und handle — nicht nur der erste Treffer.
curl https://ipto.to/v1/ip/8.8.8.8/whois # {"ip":"8.8.8.8","available":true,"cidr":"8.8.8.0/24","netName":"LVLT-GOGL-8-8-8","rir":"ARIN","contacts":[...],...}
GET/v1/ip/:ip/carrier

Bestmögliche Identifikation des Mobilfunkanbieters für als Mobilfunknetze klassifizierte IPs, abgeglichen mit einem MCC/MNC-Betreiberverzeichnis. Es gibt bewusst kein einzelnes carrier-Feld — siehe matched_carrier_entries und note unten —, da ein einzelner Anbietername als Live-Aussage pro Teilnehmer gelesen würde, was diese Daten ehrlicherweise nicht belegen können.

ParameterInDescription
ippathErforderlich. Eine beliebige gültige IPv4- oder IPv6-Adresse.
FieldTypeDescription
is_mobile_networkbooleanfalse endet hier mit einem leeren Verzeichnis — keine Schätzung für eine nicht-mobile ASN.
asn_organizationstring|nullDer eigene Organisationsname der ASN.
matched_carrier_entriesarrayMCC/MNC-Verzeichniseinträge, deren carrier-Name unscharf mit asn_organization übereinstimmt, beschränkt auf das eigene Land der IP.
notestringErklärt, was dieses Feld aussagen kann und was nicht.
curl https://ipto.to/v1/ip/8.8.8.8/carrier # {"ip":"8.8.8.8","is_mobile_network":false,"asn_organization":null,"matched_carrier_entries":[],...}
GET/v1/ip/:ip/hosted-domains

Findet Domains, die mit einer IP über ihren Reverse-DNS-(PTR)-Hostnamen und Certificate-Transparency-Logs (crt.sh) verknüpft sind — keine allgemeine Reverse-IP-Abfrage. Das eigene limitations-Feld der Antwort erläutert genau, was hiermit gefunden werden kann und was nicht.

ParameterInDescription
ippathErforderlich. Eine beliebige gültige IPv4- oder IPv6-Adresse.
FieldTypeDescription
ptr_hostnamestring|nullDer Reverse-DNS-Hostname der IP, oder null, wenn sie keinen PTR-Eintrag hat.
root_domainstring|nullDie aus ptr_hostname abgeleitete registrierbare Domain.
subdomains_seenarray|nullÜber Certificate Transparency gefundene Subdomains. null bedeutet, dass die crt.sh-Suche selbst nicht abgeschlossen werden konnte — im Unterschied zu einem leeren Array, das bedeutet, dass die Suche lief, aber nichts gefunden hat.
limitationsstringErklärt, was dieses Feature strukturell nicht erkennen kann (kein PTR, Shared Hosting, nicht zertifizierte Domains).
curl https://ipto.to/v1/ip/8.8.8.8/hosted-domains # {"ip":"8.8.8.8","ptr_hostname":"dns.google","root_domain":"dns.google","subdomains_seen":["dns.google","dns.google.com",...],...}
POST/v1/ip/bulk

Batch-Abfrage — bis zu 100 IPs pro Anfrage, nur Pro/Enterprise. Liefert ein Objekt mit jeder IP als Schlüssel. Schneller als sequenzielle Aufrufe dank paralleler Cache- und Datenbankzugriffe. Jede IP im Batch zählt gegen Ihr tägliches Anfragebudget, genau wie eine einzelne Abfrage. Anfragen im kostenlosen Tarif erhalten einen 403 — siehe Preise.

ParameterInDescription
bodybody (JSON)JSON-Array von IP-Strings. Z. B. ["1.1.1.1","8.8.8.8"]
curl -X POST https://ipto.to/v1/ip/bulk \ -H "Content-Type: application/json" \ --data '["1.1.1.1","8.8.8.8"]'
GET/v1/asn/:asn

Ein autonomes System anhand seiner Nummer nachschlagen. Liefert den Organisationsnamen, Land, Kontinent, Anzahl der IP-Bereiche, Klassifizierungstyp, Wechselkurs und Locale-Referenzdaten (Sprachen, TLD, Hauptstadt, Nachbarländer).

ParameterInDescription
asnpathASN-Nummer ohne AS-Präfix. Z. B. 15169 für Google.
langqueryOptional. Lokalisiert country_name und continent: en (Standard), pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN.
formatqueryOptional. Antwortformat: json (Standard), csv, text, xml, yaml.
curl https://ipto.to/v1/asn/15169
GET/v1/places/:ip

Führt ein Reverse-Geocoding des vorhandenen Standorts einer IP auf Stadtebene durch und liefert dann nahegelegene Points of Interest (Restaurants, Parks, Schulen, Verkehrsmittel, bekannte Sehenswürdigkeiten), lokale Kriminalitätsdaten, sofern eine Quelle existiert (nur Großbritannien und USA), sowie eine optionale, auf Anfrage berechnete Pendel-Schätzung mit dem Auto.

ParameterInDescription
ippathErforderlich. Eine beliebige gültige IPv4-Adresse. IPv6 wird noch nicht unterstützt.
dest_latqueryOptional. Ziel-Breitengrad für eine Pendel-Schätzung — zusammen mit dest_lon verwenden.
dest_lonqueryOptional. Ziel-Längengrad für eine Pendel-Schätzung — zusammen mit dest_lat verwenden.
dest_addressqueryOptional. Freitext-Zieladresse für eine Pendel-Schätzung, wird automatisch per Forward-Geocoding aufgelöst. Wird ignoriert, wenn zusätzlich dest_lat/dest_lon angegeben sind.
FieldTypeDescription
geocodeobject|nullcountry, countryCode, region, city, neighbourhood, displayName — null, wenn die IP über keinen Standort auf Stadtebene verfügt, von dem aus geokodiert werden könnte.
locality.restaurants / .parks / .schools / .transitarrayBis zu 4 nächstgelegene Einträge pro Kategorie, jeweils mit name und distanceMeters.
locality.notablearrayBekannte nahegelegene Sehenswürdigkeiten mit Kurzbeschreibung, über Wikidata.
locality.usCrimeobject|nullGewalt-/Eigentumskriminalitäts-Summen der zuständigen Behörde — nur USA, erfordert einen FBI_CRIME_API_KEY im Deployment. Überall sonst null.
locality.ukCrimeobject|nullVorfallsübersicht auf Straßenebene innerhalb von 1 Meile — nur Großbritannien.
locality.caCrimenullImmer null — es ist keine kanadaweite Kriminalitätsquelle angebunden (siehe docs/places.md).
commuteobject|nulldurationMinutes und distanceKm, nur wenn ein Ziel angegeben wurde und OpenRouteService eine Route geliefert hat. Andernfalls null — wird nie spekulativ berechnet.
curl https://ipto.to/v1/places/8.8.8.8 curl "https://ipto.to/v1/places/8.8.8.8?dest_address=Space+Needle,+Seattle"
GET/v1/country/:code

Aggregierte Statistiken auf Länderebene plus Locale-Referenzdaten (Währung, Wechselkurs, Sprachen, TLD, Hauptstadt, Nachbarländer).

ParameterInDescription
codepathISO-3166-1-Alpha-2-Ländercode. Z. B. US, DE, JP.
langqueryOptional. Lokalisiert country_name und continent: en (Standard), pt, fr, de, zh-TW, ko, zh-CN, ja-JP, es-ES, ar-SA, hi-IN.
formatqueryOptional. Antwortformat: json (Standard), csv, text, xml, yaml.
curl https://ipto.to/v1/country/US # {"country_code":"US","country_name":"United States","continent":"North America","currency_code":"USD", # "calling_code":"+1","languages":["English"],"tld":[".us"],"capital":"Washington D.C.","borders":["CA","MX"], # "is_eu":false,"ip_range_count":151633,"ip_range_count_v6":30329,"asn_count":18243, ...}
GET/v1/ua

Analysiert einen User-Agent-String. Liefert Browser, Betriebssystem, Gerätetyp und Bot-Erkennung. Liest standardmäßig den User-Agent-Header des Aufrufers, oder übergeben Sie einen beliebigen String über ?ua=.

ParameterInDescription
uaqueryOptional. URL-kodierter, zu analysierender User-Agent-String. Standardmäßig der User-Agent-Header der Anfrage.
curl "https://ipto.to/v1/ua?ua=Mozilla%2F5.0+%28iPhone%3B+CPU+iPhone+OS+17_0%29"
GET/v1/phone/:number

Validiert und formatiert eine Telefonnummer stets kostenlos: Region, Anschlussart sowie E.164-/nationale/internationale Formatierung über einen selbst gehosteten Parser, kein Anbieteraufruf. Wenn ein monatliches Premium-Budget pro IP/Schlüssel verfügbar ist (100/Monat im Free-Tarif, mehr in bezahlten Tarifen — siehe Preise), liefert dieselbe Anfrage zusätzlich einen aktuellen Anbieternamen, den Portierungsstatus und eine anbieterklassifizierte Telefonart von einem Echtzeit-Anbieterabfrage-Dienst — siehe source und die Felder unten. Ein lokalisierter country_name sowie lang/lang_source sind unabhängig von der Stufe immer enthalten — siehe Lokalisierung. Ist das Premium-Budget aufgebraucht oder liegt ein Problem beim Dienst vor, fällt die Anfrage nahtlos auf die kostenlosen Felder oben zurück; sie schlägt dadurch nie fehl. Für eine länderweite Netzbetreiber-Referenz statt einer Abfrage pro Nummer siehe stattdessen GET /v1/carriers.

ParameterInDescription
numberpathErforderlich. Eine beliebige Telefonnummer, idealerweise im E.164-Format (z. B. +14155552671). Das führende + muss URL-kodiert werden.
countryqueryOptional. Zweistelliger Ländercode als Hinweis zum Parsen mehrdeutiger Nummern im nationalen Format, z. B. ?country=US.
modequeryOptional. ?mode=current fordert den aktuellen (statt den bei der SIM ausgestellten) Anbieter der Nummer an, sofern die Premium-Stufe verfügbar ist. Wird ignoriert, wenn die Anfrage auf den kostenlosen Tarif zurückfällt.
FieldTypeDescription
validbooleantrue, wenn die Nummer einem gültigen Nummerierungsplan-Muster für ihre Region entspricht.
country_codestring|nullISO-3166-1-Alpha-2-Region, zu der die Nummer gehört.
national_formatstring|nullFormatiert gemäß der nationalen Konvention der jeweiligen Region.
international_formatstring|nullFormatiert mit Ländercode und Leerzeichen, z. B. "+1 415 555 2671".
e164string|nullKanonische E.164-Form, z. B. "+14155552671".
line_typestring|nullFIXED_LINE, MOBILE, FIXED_LINE_OR_MOBILE, VOIP, TOLL_FREE, PREMIUM_RATE oder Ähnliches. Viele Nummerierungspläne (einschließlich des nordamerikanischen) können Festnetz und Mobilfunk anhand der Nummer allein nicht unterscheiden.
sourcestring"premium", wenn für diese Anfrage ein Live-Anbieterabfrage-Budget verfügbar war, "local", wenn auf den kostenlosen Parser oben zurückgefallen wurde. carrier, phone_type, original_carrier, is_ported, phone_region und country_prefix unten sind nur befüllt, wenn source "premium" ist — country_name sowie lang/lang_source weiter unten sind unabhängig von der Stufe immer befüllt.
phone_typestring|nullEine der eigenen Kategorien des Echtzeit-Anbieterabfrage-Dienstes: mobile, fixed_line, voip, toll_free, premium_rate, shared_cost, personal_number, pager, uan, voicemail oder unknown — nicht nur die ersten vier, die lediglich die häufigsten Beispiele sind. null, wenn source "local" ist — unterscheidet sich von line_type oben, das vom lokalen Parser stammt und andere Kategorien verwendet.
carrierstring|nullDer Name des aktuellen Netzbetreibers der Nummer. null, wenn source "local" ist.
original_carrierstring|nullDer Netzbetreiber, bei dem die Nummer ursprünglich ausgestellt wurde, falls sie seither portiert wurde. null, wenn source "local" ist oder die Nummer nicht portiert wurde.
is_portedboolean|nulltrue, wenn die Nummer von ihrem ursprünglichen Anbieter wegportiert wurde. null, wenn source "local" ist.
phone_regionstring|nullOrts-/bundeslandbezogenes Detail zur Nummer (z. B. "California"), feiner aufgelöst als country_code oben. null, wenn source "local" ist.
country_prefixstring|nullDie Landesvorwahl der Nummer ohne führendes "+" (z. B. "49" für Deutschland). null, wenn source "local" ist.
country_namestring|nullVollständiger Länderanzeigename (z. B. "Germany") — country_code oben ist nur die ISO-3166-1-Alpha-2-Form ("DE"), kein Anzeigename. Anders als die reinen Premium-Felder oben ist dieses Feld immer befüllt (sobald country_code es ist) und wird genau wie das country_name-Feld jedes anderen Endpunkts über ?lang=/Accept-Language lokalisiert — siehe lang/lang_source unten.
langstringDie tatsächlich auf country_name oben angewendete Sprache — der aufgelöste ?lang=-Wert oder "en", wenn keiner angefragt wurde oder der angefragte nicht unterstützt wird.
lang_sourcestring"param", wenn ?lang= in der Anfrage vorhanden war, "header", wenn stattdessen Accept-Language verwendet wurde, oder "default", wenn keines von beiden vorlag und Englisch verwendet wurde. Dieselbe Bedeutung wie das gleichnamige Feld bei GET /v1/asn/:asn und GET /v1/country/:code.
curl "https://ipto.to/v1/phone/+14155552671"
POST/v1/phone/bulk

Batch-Validierung. Jeder Tarif erhält Bulk-Zugriff (anders als /v1/ip/bulk) — die Obergrenze pro Tarif hält den kostenlosen Tarif in Grenzen, nicht ein 403. Free: 10/Anfrage, 100/Tag. Pro: 100/Anfrage, 1.000/Tag. Enterprise: 1.000/Anfrage, 10.000/Tag. Dieses Budget ist getrennt von Ihrem allgemeinen täglichen Anfragelimit — siehe Ratenlimits.

ParameterInDescription
bodybody (JSON)JSON-Array von Telefonnummern-Strings.
curl -X POST https://ipto.to/v1/phone/bulk \ -H "Content-Type: application/json" \ --data '["+14155552671","+442071838750"]'
GET/v1/carriers

Referenzabfrage: welche Mobilfunknetzbetreiber (MCC/MNC) für ein bestimmtes Land bekannt sind — nicht an eine konkrete Telefonnummer gebunden. Stammt aus einer community-gepflegten MCC/MNC-Zusammenstellung (MIT-lizenziert, zuletzt 2026 synchronisiert — Details siehe docs-Repo); eine statische Referenztabelle, kein Live-Feed, da sich Nummerierungsplan-Zuweisungen nicht oft genug ändern, um einen solchen zu rechtfertigen.

ParameterInDescription
countryqueryErforderlich. Zweistelliger Ländercode, z. B. ?country=US.
curl "https://ipto.to/v1/carriers?country=US"
GET/v1/email/:email

Validierung der E-Mail-Syntax, eine Live-Prüfung des MX-Eintrags über DNS-over-HTTPS sowie die Erkennung von Wegwerf-/temporären Domains anhand einer community-gepflegten Blockliste (CC0-lizenziert, täglich synchronisiert). Prüft nicht, ob das Postfach selbst existiert — das würde einen SMTP-Handshake erfordern, den diese API nicht durchführt (siehe die Feldreferenz unten für genau das, was has_mx beweist und was nicht).

ParameterInDescription
emailpathErforderlich. Eine beliebige E-Mail-Adresse, URL-kodiert (das @ muss als %40 kodiert werden).
FieldTypeDescription
valid_syntaxbooleantrue, wenn die Adresse einem üblichen E-Mail-Syntaxmuster entspricht. Prüft nicht, ob das Postfach existiert.
domainstring|nullDer Domain-Anteil, in Kleinbuchstaben. null, wenn valid_syntax false ist.
has_mxboolean|nulltrue, wenn die Domain aktuell mindestens einen MX-Eintrag hat. null, wenn die Syntax ungültig war oder die DNS-Abfrage selbst fehlgeschlagen ist oder ein Timeout hatte — null als unbekannt behandeln, nicht als false.
disposableboolean|nulltrue, wenn die Domain einem bekannten Wegwerf-/temporären E-Mail-Anbieter entspricht. null unter denselben Bedingungen wie has_mx.
source"premium"|"local""premium", wenn für diese Anfrage eine Live-Prüfung durchgeführt wurde, sonst "local" (Limit erreicht oder Funktion nicht aktiviert) — die obigen Felder (valid_syntax bis disposable) sind in beiden Fällen immer vorhanden.
is_reachablestring|nullDas Gesamturteil einer optionalen Live-Prüfung: "safe" (zustellbar), "invalid" (abgelehnt), "risky" (unsicher) oder "unknown" (nicht eindeutig — erneut versuchen). null, wenn für diese Anfrage keine Live-Prüfung durchgeführt wurde (siehe source unten).
is_catch_allboolean|nulltrue, wenn die Domain E-Mails für jede beliebige Adresse akzeptiert, wodurch die Existenz dieses konkreten Postfachs nicht bestätigt werden kann. null, wenn keine Live-Prüfung durchgeführt wurde.
mailbox_fullboolean|nulltrue, wenn die Live-Prüfung ein volles Postfach festgestellt hat. null, wenn keine Live-Prüfung durchgeführt wurde.
is_role_accountboolean|nulltrue, wenn die Adresse wie eine Sammel-/Funktionsadresse aussieht (z. B. support@, admin@) statt dem Postfach einer Einzelperson. null, wenn keine Live-Prüfung durchgeführt wurde.
is_disabledboolean|nulltrue, wenn die Live-Prüfung ein ausdrücklich deaktiviertes Postfach festgestellt hat. null, wenn keine Live-Prüfung durchgeführt wurde.
curl "https://ipto.to/v1/email/user%40example.com" # When the live-verification budget allows, the same response also includes the # source/is_reachable/is_catch_all/mailbox_full/is_role_account/is_disabled fields above: # {"email":"user@example.com","valid_syntax":true,"domain":"example.com","has_mx":true, # "disposable":false,"source":"premium","is_reachable":"safe","is_catch_all":false, # "mailbox_full":false,"is_role_account":false,"is_disabled":false}
GET/v1/fraud-score

Kombiniert je nachdem, welche von IP, E-Mail, Telefon und User-Agent Sie angeben, zu einem einzigen Score von 0–100 — das eine, was weder ip-api.com, ipapi.co, ipgeolocation.io, ipify.org, ipregistry.co, ip2location.io, AbstractAPI, IPLocate.io noch BigDataCloud als ein einziges fusioniertes Signal anbieten (direkt geprüft). Alle vier Eingaben sind optional und unabhängig — übergeben Sie eine beliebige Teilmenge. ip verwendet standardmäßig Ihre eigene IP und ua Ihren eigenen User-Agent-Header, falls weggelassen, dieselbe Konvention wie bei GET /v1/ip und GET /v1/ua. Ein Signal, das Sie nicht übergeben, fehlt schlicht in der Antwort und wird nicht als unauffällig bewertet — sein Gewicht wird auf die von Ihnen tatsächlich angegebenen Signale umverteilt.

ParameterInDescription
ipqueryOptional. Standardmäßig Ihre eigene IP. IPv6 wird noch nicht bewertet (gleiche Einschränkung wie bei der übrigen Threat-Data-API).
emailqueryOptional. Eine beliebige E-Mail-Adresse.
phonequeryOptional. Eine beliebige Telefonnummer.
uaqueryOptional. Standardmäßig Ihr eigener User-Agent-Header.
FieldTypeDescription
scoreintegerGewichteter Gesamtwert von 0-100 über die jeweils angegebenen Signale.
risk_tierstring"low" (<20), "medium" (20-44), "high" (45-69) oder "critical" (70+).
signalsobjectAufschlüsselung pro Eingabe — es sind nur Schlüssel für tatsächlich übergebene Eingaben vorhanden: ip, email, phone, user_agent. Jeder enthält seinen eigenen Komponenten-Score sowie dieselben Felder, die GET /v1/ip/:ip, /v1/email/:email, /v1/phone/:number und /v1/ua für diese Eingabe bereits liefern.
curl "https://ipto.to/v1/fraud-score?ip=1.2.3.4&email=test%40mailinator.com"
GET/v1/screenshot

Rendert eine URL in einer echten Headless-Chrome-Instanz (Cloudflare Browser Rendering, kein Screenshot-Anbieter eines Drittanbieters) und liefert ein PNG zurück. Interne/private Ziele (localhost, RFC-1918-Bereiche, Link-Local-/Cloud-Metadata-Adressen) werden abgelehnt, bevor der Browser überhaupt gestartet wird. Unterliegt den eigenen Plattform-Limits von Browser Rendering, die deutlich enger sind als beim Rest dieser API — rechnen Sie damit, dass hier auf niedrigeren Cloudflare-Plänen bereits weit vor Ihrem regulären täglichen Anfragebudget gedrosselt wird.

ParameterInDescription
urlqueryErforderlich. Muss http oder https sein.
curl "https://ipto.to/v1/screenshot?url=https://example.com" --output screenshot.png
GET/v1/language

Identifiziert die Sprache eines Textausschnitts über eine lokale Trigramm-Häufigkeitsanalyse — kein externer Anbieteraufruf, keine KI-Modell-Inferenz, kein Logging. Eingaben unter 10 Zeichen liefern language als null zurück; unter ca. 30 Zeichen kann noch eine beste Schätzung geliefert werden, aber reliable ist dann false.

ParameterInDescription
textqueryErforderlich. Bis zu 5.000 Zeichen — längere Eingaben werden gekürzt, nicht abgelehnt.
FieldTypeDescription
languageobject|nullcode (ISO 639-1), iso639_3, name und local_name für den besten Treffer. null, wenn der Text zu kurz oder nicht erkennbar ist ("und").
reliablebooleanfalse bei kurzen Eingaben — das Ergebnis ist als Schätzung zu behandeln, nicht als sicherer Treffer.
candidatesarrayBis zu 5 weitere in Frage kommende Sprachen mit relativen Scores, für eng verwandte Sprachpaare.
curl "https://ipto.to/v1/language?text=Bonjour%2C+comment+allez-vous%3F"
GET/v1/currency/convert

Rechnet einen Betrag zwischen zwei Währungen um (154 unterstützt), unter Verwendung desselben täglichen Referenzkurs-Feeds, der bereits currency_code/exchange_rate_usd bei jeder IP-, ASN- und Länderabfrage speist — hier als eigenständiger Umrechnungs-Endpunkt bereitgestellt, statt in eine Geolokalisierungsantwort eingebettet.

ParameterInDescription
fromqueryErforderlich. Dreistelliger ISO-4217-Währungscode.
toqueryErforderlich. Dreistelliger ISO-4217-Währungscode.
amountqueryOptional. Standardmäßig 1.
FieldTypeDescription
resultnumberUmgerechneter Betrag.
ratenumberEinheiten von to pro 1 from.
updatedstringISO-Zeitstempel der Referenzkurs-Synchronisierung, die dieser Umrechnung zugrunde liegt.
curl "https://ipto.to/v1/currency/convert?from=USD&to=EUR&amount=100"
GET/v1/currency/rates

Vollständige Wechselkurstabelle (154 Währungen), neu berechnet auf Basis einer beliebigen unterstützten Währung, nicht nur USD.

ParameterInDescription
basequeryOptional. Standardmäßig USD.
FieldTypeDescription
ratesobjectZuordnung von Währungscode → Kurs gegenüber base.
curl "https://ipto.to/v1/currency/rates?base=EUR"
GET/v1/currency/history

Tägliche Referenzkurs-Historie für ein Währungspaar, bis zu 90 Tage zurück — die Daten hinter dem Kursverlaufsdiagramm im Währungsrechner-Tool. Einmalig rückwirkend befüllt, danach täglich durch denselben Cronjob ergänzt, der auch GET /v1/currency/convert aktualisiert. Dies ist ein einzelner täglicher Referenzkurs über die Zeit, kein Geld-/Brief-Handelsspread.

ParameterInDescription
targetqueryErforderlich. Dreistelliger ISO-4217-Währungscode für das Diagramm.
basequeryOptional. Standardmäßig USD.
daysqueryOptional. Einer von 30, 60, 90. Standardmäßig 30.
FieldTypeDescription
seriesarrayAufsteigend nach Datum sortiertes Array von { date, rate }-Punkten.
statsobjectmin, avg, max und current über die zurückgegebene Serie.
curl "https://ipto.to/v1/currency/history?base=USD&target=EUR&days=90"
GET/v1/weather

Aktuelle Bedingungen — und mit detail=1 zusätzlich eine stündliche Vorschau und eine mehrtägige Vorhersage — für einen Ortsnamen, eine Postleitzahl oder ein "lat,lon"-Paar oder für lat + lon bzw. eine ip. Orte in den USA beantwortet der National Weather Service, alle anderen MET Norway. Fügen Sie include= hinzu, um das vollständige Dokument mit Einheiten, bis zu 9 Tagen, Sonne und Mond, amtlichen Warnungen und mehr zu erhalten — siehe die include-Karte weiter unten. Das Weather-Lookup-Tool erkennt zudem den eigenen Standort des Aufrufers clientseitig, bevor es diesen Endpunkt explizit aufruft.

ParameterInDescription
qqueryStadtname, Postleitzahl oder "lat,lon" (maximal 100 Zeichen). Alternativ lat und lon oder ip übergeben. Eines der drei ist erforderlich.
detailqueryOptional. "1" ergänzt weather um pressure_mb/visibility_km/dewpoint_c/sunrise/sunset/usw., plus ein forecast-Objekt (hourly + daily). Standardmäßig weggelassen.
FieldTypeDescription
conditionstring|nullKurze Textbeschreibung.
temp_c / temp_fnumber|nullAktuelle Temperatur.
feels_like_cnumber|nullGefühlte Temperatur in Celsius.
humidity_pctnumber|nullRelative Luftfeuchtigkeit.
wind_kmph / wind_dirnumber|null / string|nullWindgeschwindigkeit und Windrichtung nach 16-Punkte-Kompass.
uv_indexnumber|nullUV-Index.
locationobject|nullAufgelöster Name, Region, Land sowie lat/lon für den abgefragten Ort — nicht nur die Rohangabe.
forecast.hourly[]arrayNur bei detail=1. Nächste 24 Stunden in 3-Stunden-Schritten: hour_label, temp_c/temp_f, weather_code, chance_of_rain_pct.
forecast.daily[]arrayNur bei detail=1. 3-Tages-Vorschau: date, day_label, weather_code, condition, chance_of_rain_pct, max/min temp_c/temp_f.
curl "https://ipto.to/v1/weather?q=Tokyo"
curl "https://ipto.to/v1/weather?q=Tokyo&detail=1"
GET/v1/trademark/:serial

Live-Proxy zum Trademark Status & Document Retrieval (TSDR)-System des USPTO für den Fallstatus anhand einer 8-stelligen Seriennummer — ein direkter Aufruf pro Anfrage, keine zwischengespeicherte oder weiterverkaufte Kopie. Fallstatus-Daten sind ein Werk der US-Regierung und laut den eigenen Nutzungsbedingungen des USPTO gemeinfrei, daher trägt jede Antwort ein source-/attribution-Feld, statt sie stillschweigend zu cachen oder weiterzuverkaufen. Marken-Logo-/Bilddaten sind bewusst nicht enthalten — die Nutzungsbedingungen des USPTO grenzen die Bildlizenzierung getrennt von den Fallstatus-Textdaten ab, die dieser Endpunkt liefert. Die Suche per Registrierungsnummer wird noch nicht unterstützt; derzeit dokumentiert das USPTO nur den Weg über die Seriennummer. Probieren Sie es im Trademark-Lookup-Tool aus.

ParameterInDescription
serialpathErforderlich. Genau 8 Ziffern, z. B. 98267877.
FieldTypeDescription
sourcestringImmer "USPTO TSDR".
attributionstringErforderliche Attribution-Zeile gemäß den Nutzungsbedingungen des USPTO.
dataobjectRohes Fallstatus-Payload, wie vom USPTO zurückgegeben, durchgereicht statt umgeformt — live bestätigt am 2026-08-12. Unter data.trademarks[0]: status (Anmelde-/Registrierungsdaten, markElement, descOfMark, tm5StatusDesc), parties.ownerGroups (Name/Adresse des Inhabers nach Rolle), gsList[] (Beschreibung und Klassen der Waren/Dienstleistungen) und prosecutionHistory[] (vollständiger zeitlicher Verlauf des Falls). Welche Felder vorhanden sind, hängt vom Anmeldestatus ab — z. B. hat eine anhängige Anmeldung noch kein usRegistrationNumber.
curl "https://ipto.to/v1/trademark/98267877" # ANTHROPIC, Reg. No. 8296420
GET/v1/patent/:number

Live-Proxy zur Patent File Wrapper API (Open Data Portal) des USPTO für den Erteilungsstatus anhand einer 7- bis 8-stelligen Gebrauchspatentnummer — ein direkter Aufruf pro Anfrage, keine zwischengespeicherte oder weiterverkaufte Kopie. Die ursprünglich vorgesehene Quelle (die Search API von PatentsView) wurde nachweislich am 2026-03-20 abgeschaltet; dieser Endpunkt ist stattdessen ein Proxy zu deren aktivem Nachfolger. Patent-File-Wrapper-Daten sind ein Werk der US-Regierung und laut den eigenen Nutzungsbedingungen des USPTO gemeinfrei, daher trägt jede Antwort ein source-/attribution-Feld. Der Umfang ist anmelde-/verfahrenszentriert — kein Zitationsgraph, keine Patentfamilie, kein Rechtsstatus-Feld und keine Bilder, wie sie Lens.org, Espacenet oder Google Patents zeigen. Die Abdeckung beginnt bei Anmeldungen aus dem Jahr 2001. Geschmacksmuster-, Pflanzen- und Reissue-Patente werden noch nicht unterstützt; nur Gebrauchspatente anhand der erteilten Patentnummer. Probieren Sie es im Patent-Lookup-Tool aus.

ParameterInDescription
numberpathErforderlich. 7-8 Ziffern, z. B. 12393227. Nur erteilte Gebrauchspatentnummer, keine Anmeldenummer.
FieldTypeDescription
sourcestringImmer "USPTO Patent File Wrapper".
attributionstringErforderliche Attribution-Zeile gemäß den Nutzungsbedingungen des USPTO.
dataobjectRohes Verfahrensdatensatz-Payload, wie vom USPTO zurückgegeben, durchgereicht statt umgeformt — live bestätigt am 2026-08-12 anhand echter Patente (12393227, 9935534). Wichtige Felder: applicationMetaData (inventionTitle, filingDate, applicationStatusDescriptionText, applicationStatusDate, patentNumber, inventorBag[]), recordAttorney.attorneyBag[], applicationNumberText sowie eventDataBag[] (vollständiger zeitlicher Verfahrensverlauf). Liefert 404, wenn die Nummer nicht existiert, es sich um ein Geschmacksmuster-/Pflanzen-/Reissue-Patent handelt oder sie vor Beginn der Abdeckung 2001 liegt.
curl "https://ipto.to/v1/patent/12393227" # WEARABLE COMPUTING DEVICE, granted 2025
GET/v1/feeds

Paginierter VPN-, Tor- und Threat-Intelligence-Feed. 200 Einträge pro Seite. Jeder Eintrag enthält IP/CIDR, Anbieterzuordnung, ISP, Land und Klassifizierungstyp.

ParameterInDescription
pagequeryNullbasierte Seitenzahl. Standard: 0.
typequeryNach Typ filtern: VPN, Tor Exit Node, Tor Node, High-Risk Threat Intel.
qqueryNach IP- oder CIDR-Teilstring filtern.
curl "https://ipto.to/v1/feeds?page=0&type=VPN" # {"metadata":{...},"pagination":{"page":0,"page_size":200,"total":11200,"total_pages":56,"has_next":true}, # "ranges":[{"ip":"2.26.157.0/24","type":"VPN","provider":"Datacamp Limited","isp":"Datacamp Limited","country":"GB"}, ...]}
GET/v1/feeds/stats

Nur Metadaten — Gesamtzahl der Einträge, Anzahl je Quelle und letzter Synchronisierungszeitpunkt. Liefert keine IP-Daten.

curl https://ipto.to/v1/feeds/stats # {"total_tracked_ranges":34561,"last_updated":"2026-10-06T18:00:44.321Z", # "sources":[{"name":"X4BNet VPN Ranges","type":"VPN","count":11200}, ...]}
GET/v1/abuse

Paginierte missbräuchliche Netzwerkbereiche. Bewertet von 1-10 anhand feedübergreifender Bestätigung. Risikostufen: critical (8-10), high (5-7), medium (3-4).

ParameterInDescription
pagequeryNullbasierte Seitenzahl. Standard: 0.
tierqueryNach Risikostufe filtern: critical, high, medium.
qqueryNach Teilstring des Netzwerkbereichs filtern.
sourcequeryOptional. Filtert nach dem Namen des Quell-Feeds, genau wie in source_feed zurückgegeben, z. B. 'Spamhaus DROP' oder 'IPsum Threat Intel'.
curl "https://ipto.to/v1/abuse?page=0&tier=critical&source=Spamhaus%20DROP" # {"metadata":{...},"pagination":{"page":0,"page_size":200,"total":1640,"total_pages":9,"has_next":true}, # "networks":[{"network_range":"1.10.16.0/20","abuse_score":10,"risk_tier":"critical","source_feed":"Spamhaus DROP"}, ...]}
GET/v1/abuse/stats

Nur Metadaten — Gesamtzahl der Netzwerke, Anzahl je Quelle, Aufschlüsselung nach Risikostufe und letzter Synchronisierungszeitpunkt.

curl https://ipto.to/v1/abuse/stats # {"total_networks_tracked":18300,"last_updated":"2026-10-06T18:00:15.762Z", # "classification":{"ipsum_threat_intel":16660,"spamhaus_drop":1641,"spamhaus_edrop":0}, # "sources":[{"name":"IPsum Threat Intel","count":16660}, ...]}
GET/v1/datasets/:kind

Herunterladbarer CSV-Export der offenen Datensätze, auf denen die API bereits aufbaut — dieselben Daten, keine neue Lizenz. asn und ranges sind immer verfügbar; geo-city liefert 503, bis der Datensatz dieser Quelle auf einem gegebenen Deployment aktiv ist. geo-city exportiert jeweils die Rohdaten einer Geo-Quelle, keine zusammengeführte Ansicht — geben Sie ?source=primary (Standard) oder ?source=secondary an.

ParameterInDescription
kindpathEiner von: asn, ranges, geo-city.
sourcequeryNur bei geo-city. primary (Standard) oder secondary.
curl -OJ https://ipto.to/v1/datasets/asn curl -OJ https://ipto.to/v1/datasets/ranges curl -OJ "https://ipto.to/v1/datasets/geo-city?source=secondary"
POST/v1/keys

Stellt sofort einen API-Schlüssel aus — keine E-Mail, keine Anmeldung. Jeder Schlüssel startet im kostenlosen Tarif (1.000 Anfragen/Tag; Massensuche nicht enthalten). Pro- und Enterprise-Schlüssel schalten höhere Tageslimits und Massensuche frei (bis zu 100 IPs/Anfrage) — siehe Preise. Speichern Sie den Schlüssel — er kann später nicht wieder abgerufen werden.

curl -X POST https://ipto.to/v1/keys
GET/v1/keys/usage

Prüfen Sie, wie viele Anfragen ein Schlüssel gemacht hat. Übergeben Sie den Schlüssel bei jeder /v1/*-Anfrage über den X-API-Key-Header oder ?api_key=, damit sie gezählt wird.

ParameterInDescription
keyqueryErforderlich. Ein von POST /v1/keys zurückgegebener Schlüssel.
curl "https://ipto.to/v1/keys/usage?key=ipto_xxxxxxxx"
GET/v1/ip/:ip/abuse

Abuse-Meldekontakt des Netzes, dem eine IP gehört, aus RDAP: das RIR, das Netzwerk-Handle, das umfassende CIDR und die Abuse-Mailbox(en). Zeigt, wohin eine Meldung geschickt werden soll.

ParameterInDescription
ippathIPv4- oder IPv6-Adresse.
curl https://ipto.to/v1/ip/8.8.8.8/abuse # {"available":true,"failure":null,"ip":"8.8.8.8","rir":"arin","network":"GOGL","cidr":"8.8.8.0/24", # "contacts":[{"name":"Abuse","email":"network-abuse@google.com","handle":"ABUSE5250-ARIN"}]}

available ist false (mit einem Grund in failure), wenn die Registry nicht erreichbar war.

GET/v1/asn/:asn/ranges

Die tatsächlich von einem ASN angekündigten IP-Bereiche, seitenweise, jeweils mit Land und den Flags Hosting / Mobil / Privatkunden / Bot / Sperrliste.

ParameterInDescription
asnpathASN-Nummer ohne AS-Präfix, z. B. 15169.
limitqueryBereiche pro Seite. Standard 50, maximal 200.
offsetqueryZu überspringende Bereiche. Standard 0.
curl "https://ipto.to/v1/asn/15169/ranges?limit=1&offset=0" # {"asn":15169,"total":153,"limit":1,"offset":0,"ranges":[{"start_ip":"8.8.4.0","end_ip":"8.8.4.255", # "country_code":"US","is_hosting":false,"is_mobile":false,"is_residential":false,"is_bot":false,"is_blacklisted":false}]}
GET/v1/asn/:asn/whois

Registry-Eintrag (RDAP) eines ASN: Handle, Name, Land, Zuteilungsart, Registrierungsdaten, das RIR und seine Kontakte.

ParameterInDescription
asnpathASN-Nummer ohne AS-Präfix, z. B. 15169.
curl https://ipto.to/v1/asn/15169/whois # {"asn":15169,"available":true,"reason":null,"handle":"AS15169","name":"GOOGLE","country":"US", # "allocationType":"...","registeredDate":"...","lastChangedDate":"...","rir":"arin","contacts":[...]}

available ist false mit einem reason, wenn die Registry nicht erreichbar ist.

GET/v1/asn/:asn/geo-sample

Wo ein ASN tatsächlich sitzt: Punkte auf Stadtebene, geolokalisiert aus einer Stichprobe seiner größten Bereiche, plus die häufigsten Städte. Speist die Verteilungskarte auf der ASN-Seite.

ParameterInDescription
asnpathASN-Nummer ohne AS-Präfix, z. B. 15169.
curl https://ipto.to/v1/asn/15169/geo-sample # {"asn":15169,"sampled":true,"sample_size":30,"points":[{"city":"Council Bluffs","state":"Iowa", # "country_code":"US","latitude":41.2591,"longitude":-95.8517}, ...],"top_cities":[...]}

Eine Stichprobe, nicht die vollständige Bereichsliste. Für alle Bereiche /v1/asn/:asn/ranges verwenden.

GET/v1/asn/:asn/hosted-domains

In einem ASN gehostete Domains, per Reverse-DNS (PTR) auf einer Stichprobe seiner Adressen ermittelt. Jeder Eintrag enthält die Root-Domain, den PTR-Hostnamen und die abgefragte IP.

ParameterInDescription
asnpathASN-Nummer ohne AS-Präfix, z. B. 15169.
curl https://ipto.to/v1/asn/15169/hosted-domains # {"asn":15169,"sampled":true,"sample_size":5,"domains":[{"root_domain":"googleusercontent.com", # "ptr_hostname":"0.0.214.35.bc.googleusercontent.com","sample_ip":"35.214.0.0"}, ...]}

Stichprobenbasiert, also ein Hinweis darauf, was der ASN hostet, keine vollständige Liste. Für eine einzelne IP /v1/ip/:ip/hosted-domains verwenden.

GET/v1/asn/:asn/relationships

BGP-Beziehungen eines ASN: Peers, Upstream-Provider und Downstream-Kunden, mit Anzahlen.

ParameterInDescription
asnpathASN-Nummer ohne AS-Präfix, z. B. 15169.
curl https://ipto.to/v1/asn/15169/relationships # {"asn":15169,"available":true,"peers":[],"upstreams":[],"downstreams":[], # "peer_count":0,"upstream_count":0,"downstream_count":0}

available ist false, wenn die BGP-Datenquelle nicht erreichbar war. Leere Arrays mit available: true bedeuten, dass für diesen ASN nichts gemeldet wurde.

GET/v1/ip-ranges

Verzeichnis des IPv4-Raums: ein Eintrag pro /8-Block mit der Zahl der Bereiche, Länder und ASNs sowie dem häufigsten Land. Hier beginnen und dann mit /v1/ip-ranges/:a und /v1/ip-ranges/:a/:b weiter hineinzoomen.

curl https://ipto.to/v1/ip-ranges # {"blocks":[{"octet":1,"range_count":814,"country_count":15,"asn_count":182,"top_country":"KR", # "top_country_share":35,"top_country_name":"South Korea"}, ...],"data_version":"2026-10-06"}
GET/v1/ip-ranges/:a

Die /16-Blöcke innerhalb eines /8 (z. B. 8.0.0.0/8) mit denselben Zahlen zu Bereichen, Ländern und ASNs pro Block.

ParameterInDescription
apathErstes Oktett, 0-255.
curl https://ipto.to/v1/ip-ranges/8 # {"octet1":8,"cidr":"8.0.0.0/8","blocks":[{"octet":8,"range_count":...,"country_count":...,"asn_count":..., # "top_country":"US", ...}, ...]}
GET/v1/ip-ranges/:a/:b

Die vergebenen Bereiche innerhalb eines /16 (z. B. 8.8.0.0/16), jeweils mit dem zugehörigen ASN, plus die Zahlen pro Block.

ParameterInDescription
apathErstes Oktett, 0-255.
bpathZweites Oktett, 0-255.
curl https://ipto.to/v1/ip-ranges/8/8 # {"octet1":8,"octet2":8,"cidr":"8.8.0.0/16","blocks":[{"octet":1,"range_count":1,"country_count":1,"asn_count":1, # "top_country":"US", ...}, ...],"ranges_total":30,"ranges":[...]}
GET/v1/nearby

Ein Teil der Nearby-Nutzdaten für eine Koordinate, damit ein Client jeden Teil rendern kann, sobald er eintrifft: Reverse-Geocoding, Points of Interest oder lokale Kriminalitätsstatistik.

ParameterInDescription
latqueryBreitengrad, erforderlich.
lonqueryLängengrad, erforderlich.
partqueryWelcher Teil: geocode, poi oder crime. Ein unbekannter Wert liefert 400.
countryqueryNur part=crime: ISO-Ländercode. Kriminalitätsdaten gibt es für US und GB.
regionqueryNur part=crime: Name des Bundesstaats oder der Region, z. B. Utah.
cityqueryNur part=crime: Stadtname, z. B. Orem.
langqueryOptional. Lokalisiert Ortsbezeichnungen (dieselben Codes wie in der Lokalisierungstabelle oben).
curl "https://ipto.to/v1/nearby?lat=40.2969&lon=-111.6948&part=geocode" # {"geocode":{...reverse-geocoded place...}} curl "https://ipto.to/v1/nearby?lat=40.2969&lon=-111.6948&part=poi" # {"locality":{...nearby points of interest...}} curl "https://ipto.to/v1/nearby?lat=40.2969&lon=-111.6948&part=crime&country=US&region=Utah&city=Orem" # {"locality":{"ukCrime":null,"usCrime":{"agencyName":"Orem Police Department","agencyType":"City", # "distanceKm":4.4,"year":2025,"categories":[{"category":"violent-crime","label":"Violent crime","totalOffenses":129}, ...]}}}
GET/v1/commute

Fahrzeit und Entfernung zwischen zwei Punkten. Ein Schnellpfad: er überspringt das Reverse-Geocoding und die POI-Abfragen, die /v1/places/:ip durchführt.

ParameterInDescription
from_latqueryBreitengrad des Startpunkts, erforderlich.
from_lonqueryLängengrad des Startpunkts, erforderlich.
dest_latqueryBreitengrad des Ziels. Zusammen mit dest_lon verwenden oder stattdessen dest_address übergeben.
dest_lonqueryLängengrad des Ziels.
dest_addressqueryZiel als Freitext, für Sie geocodiert. Wird verwendet, wenn dest_lat/dest_lon fehlen.
curl "https://ipto.to/v1/commute?from_lat=40.2969&from_lon=-111.6948&dest_lat=40.7608&dest_lon=-111.8910" # {"from":{"lat":40.2969,"lon":-111.6948},"to":{"lat":40.7608,"lon":-111.891}, # "commute":{"durationMinutes":44,"distanceKm":63.5}}

Lässt sich kein Ziel auflösen, enthält die Antwort to: null, commute: null und einen reason-String.

GET/v1/address-lookup

Die Nutzdaten von /v1/places/:ip, verankert an einer eingegebenen Adresse statt an einer IP: Geocode, Ortsangaben und eine optionale Pendelzeit-Schätzung.

ParameterInDescription
qqueryAdresse als Freitext, erforderlich.
dest_latqueryOptionaler Breitengrad des Ziels, um eine Pendelzeit-Schätzung einzuschließen (mit dest_lon).
dest_lonqueryOptionaler Längengrad des Ziels.
dest_addressqueryOptionales Ziel als Freitext, statt dest_lat/dest_lon.
partquerypart=geo liefert nur Bezeichnung und Koordinaten, für eine schnellere erste Darstellung.
langqueryOptional. Lokalisiert Ortsbezeichnungen (dieselben Codes wie in der Lokalisierungstabelle oben).
curl "https://ipto.to/v1/address-lookup?q=1600+Pennsylvania+Ave+NW+Washington+DC" # {"query":"1600 Pennsylvania Ave NW Washington DC","found":true,"label":"...","latitude":38.89, # "longitude":-77.03,"geocode":{...},"commute":null,"locality":{...}} curl "https://ipto.to/v1/address-lookup?q=1600+Pennsylvania+Ave+NW+Washington+DC&part=geo" # {"query":"...","found":true,"label":"...","latitude":38.89,"longitude":-77.03}

found ist false, wenn die Adresse nicht geocodiert werden konnte.

GET/v1/address-suggest

Adress-Autovervollständigung: einige passende Orte zu einer Teiladresse, optional zu einem Punkt hin gewichtet.

ParameterInDescription
qqueryTeiltext der Adresse, erforderlich.
near_latqueryOptionaler Breitengrad, zu dem die Ergebnisse gewichtet werden.
near_lonqueryOptionaler Längengrad, zu dem die Ergebnisse gewichtet werden.
curl "https://ipto.to/v1/address-suggest?q=1600+Penn&near_lat=38.9&near_lon=-77.0" # {"suggestions":[{"label":"Penn Quarter, Ward 2, Washington, District of Columbia, United States", # "lat":38.8949563,"lon":-77.0224592}, ...]}
GET/v1/weather?include=

Das vollständige Wetterdokument für einen Ortsnamen, eine Postleitzahl, Koordinaten oder eine IP. Wählen Sie die benötigten Blöcke mit include: current, hourly, daily, astro (Sonne und Mond), solar, indicators, alerts, marine, air_quality, nowcast oder all. Orte in den USA stammen vom National Weather Service, alle anderen von MET Norway; meta.source nennt die Quelle. Ohne include erhalten Sie das oben beschriebene einfache Format { query, weather }.

ParameterInDescription
q / lat+lon / ipqueryWo: q (Stadt, Postleitzahl oder "lat,lon"), oder lat und lon, oder ip. Eines der drei ist erforderlich.
countryqueryOptional. ISO-Code oder Ländername, um ein mehrdeutiges q aufzulösen, z. B. country=FR für die Postleitzahl 75001.
includequeryFür dieses Format erforderlich. Kommagetrennt: current, hourly, daily, astro, solar, indicators, alerts, marine, air_quality, nowcast oder all.
unitsquerymetric (Standard) oder imperial. Die Feldnamen folgen der Einheit: temp_c wird zu temp_f, wind_kmph zu wind_mph, precip_mm zu precip_in.
wind_unitquerykmh, ms, mph oder kn. Ändert nur die Windeinheit.
hoursqueryAnzahl der stündlichen Einträge, 1-240. Standard 48. Die ersten sind stündlich, spätere im 6-Stunden-Takt; step_hours gibt es an.
daysqueryAnzahl der Tageseinträge, 1-9. Standard 7. US-Daten decken 7 Tage ab.
curl "https://ipto.to/v1/weather?lat=38.8977&lon=-77.0365&include=current,daily,alerts&days=1" # {"query":"38.8977,-77.0365","place":{"name":"Washington","region":"DC","country":"United States","country_code":"US", # "lat":38.8977,"lon":-77.0365,"timezone":"America/New_York"}, # "current":{"time":"2026-10-07T12:00-04:00","observed":false,"temp_c":18.9,"feels_like_c":18.9,"humidity_pct":52,"wind_kmph":12.9, # "wind_gust_kmph":24.1,"wind_dir":"S","uv_index":5.4,"condition":"Sunny","weather_code":113,"is_day":true, ...}, # "daily":[{"date":"2026-10-07","tmax_c":22.2,"tmin_c":12.8,"precip_mm":0,"precip_prob_pct":1,"gust_max_kmph":25.9,"uv_index_max":5.4, ...}], # "alerts":{"available":true,"source":"NWS","official":true,"items":[]}, # "meta":{"source":"NOAA National Weather Service","fallback_used":false,"coverage":{"precip_prob":true,"wind_gusts":true, ...}, # "derived":["current.uv_index","current.wet_bulb", ...],"timezone":"America/New_York", ...}} curl "https://ipto.to/v1/weather?q=Oslo&include=marine,air_quality,nowcast&units=imperial" # Norway-only blocks come back with available: true there and available: false everywhere else

meta.coverage zeigt, welche Felder für den Ort existieren: Regenwahrscheinlichkeit, Böen und Gewitterwahrscheinlichkeit gibt es nur in den USA und im Norden Europas und sind anderswo null (nie 0). alerts sind amtliche Warnungen für die USA und Norwegen; marine, air_quality und nowcast decken nur Norwegen und angrenzende Gewässer ab und melden anderswo available: false. Alles in meta.derived ist eine Schätzung von ipto.to, und indicators sind abgeleitete Hinweise, keine amtlichen Warnungen. Behalten Sie meta.attribution bei, wenn Sie die Daten anzeigen (MET-Norway-Daten stehen unter CC BY 4.0).

GET/v1/weather/history

Die eigene Tagesaufzeichnung von ipto.to für bereits abgefragte Orte: der höchste Höchstwert, der niedrigste Tiefstwert und der größte Niederschlag aus den Vorhersage-Schnappschüssen des Tages. Nur bereits angefragte Orte haben Daten, die sich mit der Zeit ansammeln.

ParameterInDescription
q / lat+lon / ipqueryWo: q (Stadt, Postleitzahl oder "lat,lon"), oder lat und lon, oder ip. Eines der drei ist erforderlich.
daysqueryAnzahl der letzten Tage, 1-400. Standard 30.
curl "https://ipto.to/v1/weather/history?q=Tokyo&days=7" # {"query":"Tokyo","place":{"name":"Tokyo","cc":"JP", ...}, # "days":[{"date":"2026-10-06","tmax_c":24.1,"tmin_c":17.8,"precip_mm":1.2,"condition_code":296,"source":"metno","snapshots":4}, ...], # "note":"Daily envelope of day-0 forecast snapshots (highest high, lowest low, largest precipitation seen), not station observations."}

Es sind Vorhersage-Schnappschüsse, keine Stationsbeobachtungen oder Reanalysen – verwenden Sie sie nicht als beobachtete Historie. 404 bedeutet, dass für diesen Ort noch keine Schnappschüsse aufgezeichnet wurden.

GET/v1/weather/radar/frames

Die verfügbaren Radar-Animationsbilder, älteste zuerst, jeweils mit Unix-Zeitstempel und der Bild-ID für die Radar-Kachel-URL.

curl https://ipto.to/v1/weather/radar/frames # {"frames":[{"time":1791316200,"id":"fdc753dba723"},{"time":1791316800,"id":"2314000028f2"}, ...]}
GET/v1/weather/radar/:frame/:z/:x/:y.png

Eine Radar-Kartenkachel (PNG) für ein Bild an einer üblichen z/x/y-Position einer Webkarte. Über dieselbe Origin ausgeliefert, damit eine Karte sie ohne Drittanbieter-Anfrage laden kann.

ParameterInDescription
framepathBild-ID aus /v1/weather/radar/frames (Hex in Kleinbuchstaben).
zpathZoomstufe.
xpathKachelspalte.
ypathKachelzeile.
# 1. pick the latest frame id FRAME=$(curl -s https://ipto.to/v1/weather/radar/frames | python3 -c "import sys,json;print(json.load(sys.stdin)['frames'][-1]['id'])") # 2. fetch a tile (image/png) curl -o radar.png "https://ipto.to/v1/weather/radar/$FRAME/5/6/12.png"
GET/v1/weather/satellite/:z/:x/:y.png

Eine Satellitenbild-Kartenkachel für eine übliche z/x/y-Position einer Webkarte, über dieselbe Origin ausgeliefert.

ParameterInDescription
zpathZoomstufe.
xpathKachelspalte.
ypathKachelzeile.
curl -o satellite.jpg "https://ipto.to/v1/weather/satellite/5/6/12.png" # the response body is the tile image (served as image/jpeg despite the .png path)
GET/v1/openapi/email.json

Maschinenlesbarer OpenAPI-3.1-Vertrag für /v1/email/:email, geschrieben, damit LLM- und MCP-Agenten den E-Mail-Endpunkt aufrufen können, ohne diese Dokumentation zu lesen.

curl https://ipto.to/v1/openapi/email.json # {"openapi":"3.1.0","info":{...},"servers":[{"url":"https://ipto.to"}],"paths":{"/v1/email/{email}":{...}}}

Feldreferenz für IP-Abfragen

FieldTypeDescription
ipstringDie abgefragte IP-Adresse.
versionstring"v4" oder "v6".
bogonbooleantrue, wenn es sich um eine private, reservierte oder nicht routbare Adresse handelt.
bogon_typestring|nullGrund-Code, falls bogon: "loopback", "private", "link-local", "multicast", "reserved", "documentation", "unspecified".
asninteger|nullAutonome-System-Nummer, die diese IP ankündigt.
asn_namestring|nullKurzname der ASN (z. B. "GOOGLE").
asn_orgstring|nullAuf die ASN registrierte Organisation (z. B. "Google LLC").
asn_typestring|nullASN-Kategorie: "hosting", "isp", "business", "education", "government", "mobile", "residential".
continentstring|nullVollständiger Kontinentname (z. B. "North America").
continent_codestring|nullZweistelliger Kontinentcode: AF AS EU NA SA OC AN.
country_codestring|nullISO-3166-1-Alpha-2-Ländercode (z. B. "US") des Landes, in dem sich die IP befindet, aus denselben Geolokalisierungsdaten wie Stadt und Koordinaten. Ohne Geolokalisierungstreffer wird das Registrierungsland des ASN (asn_country_code) verwendet. Ländername, Flagge, Währung usw. werden daraus abgeleitet.
country_namestring|nullVollständiger englischer Ländername (z. B. "United States").
country_flagstring|nullEmoji-Flagge des Landes (z. B. "🇺🇸").
is_eubooleantrue, wenn das Land ein EU-Mitgliedstaat ist (27 Mitglieder).
citystring|nullStadtname. Wird bei der Selbstabfrage befüllt sowie bei expliziten Abfragen, bei denen eine der zusammengeführten Geo-Quellen (IP2Location oder MaxMind) einen Treffer hat — geo_precision prüfen.
statestring|nullVerwaltungsregion/Untergliederung. Gleiche Verfügbarkeit wie city.
postal_codestring|nullPostleitzahl. Wird bei der Selbstabfrage befüllt sowie bei expliziten Abfragen, bei denen IP2Location (bevorzugt) oder MaxMind einen Treffer hat — gleiche Verfügbarkeit wie city.
latitudenumber|nullDezimaler Breitengrad. Gleiche Verfügbarkeit wie city.
longitudenumber|nullDezimaler Längengrad. Gleiche Verfügbarkeit wie city.
timezonestring|nullZeitzone — gleiche Verfügbarkeit wie city. Bei der Selbstabfrage ein IANA-Bezeichner (z. B. "America/New_York"). Bei expliziten Abfragen hängt das Format davon ab, welche Quelle den Treffer geliefert hat: ein UTC-Offset-String wie "-08:00" von IP2Location, oder ein IANA-Name von MaxMind.
geo_precisionstringWie präzise die Standortdaten sind: "city", "country" (Abfrage auf Stadtebene hatte keinen Treffer) oder "none".
geo_country_codestring|nullLand, in dem sich die IP befindet, laut Geolokalisierungsdaten (ISO 3166-1 alpha-2). Entspricht country_code, sobald gesetzt. null, wenn kein Geolokalisierungstreffer vorliegt.
asn_country_codestring|nullRegistrierungsland des ASN-Inhabers (ISO 3166-1 alpha-2). Kann von country_code abweichen, etwa bei CDN-, VPN-, Hosting- oder Anycast-Netzen, die aus einem anderen Land announciert werden als dem, in dem der Inhaber registriert ist. null, wenn die IP keinen ASN-Eintrag hat.
currency_codestring|nullISO-4217-Währungscode für das Land (z. B. "USD").
exchange_rate_usdnumber|nullEinheiten der Landeswährung pro 1 USD, aus einem täglich synchronisierten Referenzkurs-Feed, der 154 Währungen abdeckt. null für Währungen außerhalb dieser Menge.
calling_codestring|nullLandesvorwahl inklusive +-Präfix (z. B. "+1").
languagesstring[]Offizielle/anerkannte Sprachen des Landes, auf Englisch.
tldstring[]Länder-Top-Level-Domain(s), z. B. [".us"].
capitalstring|nullName der Hauptstadt.
bordersstring[]ISO-Alpha-2-Codes der angrenzenden Länder.
is_datacenterbooleantrue, wenn die IP zu einem Hosting- oder Cloud-Anbieter gehört.
is_mobilebooleantrue, wenn die IP auf einen Mobilfunkanbieter registriert ist.
is_residentialbooleantrue, wenn die IP als privater Breitbandanschluss klassifiziert ist.
connection_typestring"mobile", "datacenter" oder "unknown" — abgeleitet aus derselben Klassifizierung wie is_mobile/is_datacenter. Es wird bewusst nicht versucht, zwischen privat und geschäftlich zu unterscheiden: Das lässt sich aus dem ASN-Organisationsnamen allein nicht zuverlässig ableiten, sodass eine ASN, die nicht sicher als mobile oder datacenter klassifiziert werden kann, "unknown" bleibt, statt geraten zu werden.
is_botbooleantrue, wenn die IP mit bekannter Bot-Infrastruktur assoziiert ist.
is_proxybooleantrue, wenn die IP ein bekannter Proxy-Exit-Punkt ist.
is_vpnbooleantrue, wenn die IP in einen bekannten VPN-Serverbereich aus dem Threat-Feed fällt.
is_torbooleantrue, wenn die IP ein bestätigter Tor-Exit-Node ist.
is_abuserbooleantrue, wenn die IP in einen Netzwerkbereich fällt, der von mehreren Abuse-Intel-Feeds markiert wurde.
abuse_scoreinteger|nullSchweregrad-Score von 1-10, wenn is_abuser true ist, aus feedübergreifender Bestätigung. Andernfalls null.
risk_tierstring|null"critical" (8-10), "high" (5-7) oder "medium" (3-4) — abgeleitet aus abuse_score. null, wenn nicht markiert.
threat_typestring|nullDie einzelne, am besten handhabbare übereinstimmende Kategorie, wenn sich is_tor/is_vpn/is_abuser überschneiden: "tor_exit" > "abuser" > "vpn". null, wenn keine übereinstimmt.
flagsobjectAbwärtskompatibles Objekt, das die is_*-Felder spiegelt. Schlüssel: hosting, mobile, residential, bot, blacklisted, vpn, tor, abuser.
meta.data_versionstringDatum des für die Abfrage verwendeten Datensatzes (YYYY-MM-DD). "cf-edge" bei Selbstabfrage. "bogon" bei privaten Bereichen.
meta.cachedbooleantrue, wenn die Antwort aus der Cache-Schicht bedient wurde.
meta.langstringDie für diese Antwort tatsächlich verwendete Sprache — entspricht ?lang=, falls angegeben, oder dem aus Accept-Language ermittelten Wert, oder "en".
meta.lang_source"param"|"header"|"default"Wie lang bestimmt wurde: "param" (?lang= wurde übergeben), "header" (aus Accept-Language ermittelt), oder "default" (keines von beiden war vorhanden).

Ausgabeformate

IP-, ASN- und Länderabfragen unterstützen alle ?format=.

FormatContent-TypeUsage
jsonapplication/jsonStandard. Vollständig strukturierte Antwort.
csvtext/csvFlache key,value-Paare. Verschachtelte Objekte werden weggelassen.
texttext/plainkey: value-Zeilen. Ein Feld pro Zeile.
xmlapplication/xmlVollständig verschachtelte Struktur, Arrays wiederholen das Tag.
yamlapplication/x-yamlVollständig verschachtelte Struktur.
curl "https://ipto.to/v1/ip/8.8.8.8?format=csv" curl "https://ipto.to/v1/ip/8.8.8.8?format=xml" curl "https://ipto.to/v1/ip/8.8.8.8?format=yaml" curl "https://ipto.to/v1/ip/8.8.8.8?fields=ip,country_code,is_vpn,is_tor"

Lokalisierung

Übergeben Sie ?lang= bei /v1/ip, /v1/asn/:asn oder /v1/country/:code, um country_name und continent zu lokalisieren. Alles andere (ASN-Organisationsnamen, Stadtnamen, Währungscodes) bleibt in seiner ursprünglichen Form — das sind Bezeichner und Eigennamen, kein UI-Text. Nicht unterstützte Codes fallen auf Englisch zurück, statt einen Fehler zu liefern.

CodeLanguage
enEnglish (default)
ptPortuguês
frFrançais
deDeutsch
zh-TW繁體中文
ko한국어
zh-CN简体中文
ja-JP日本語
es-ESEspañol
ar-SAالعربية
hi-INहिन्दी
curl "https://ipto.to/v1/ip/8.8.8.8?lang=de" # "landesname":"Vereinigte Staaten","kontinent":"Nordamerika","ist_vpn":false, ... # every key is renamed and every enum value translated -- this is the default for any non-English lang

Kein ?lang=? Senden Sie stattdessen einen Accept-Language-Header — dieselben Endpunkte lesen ihn ebenfalls, sodass ein einfaches curl -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 die Antwort ohne Query-String lokalisiert. Ein explizites ?lang= hat immer Vorrang, wenn beide vorhanden sind. Hinweis: Die Shell-Umgebungsvariable LANG/LC_ALL (z. B. LANG=es_ES.UTF-8 curl ...) legt nur das eigene Locale von curl fest — curl liest sie nie und wandelt sie nie in einen Header um, sie hat also keinen Einfluss auf die Antwortsprache. Nur Accept-Language oder ?lang= funktionieren tatsächlich.

curl -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 # "nombre_país":"Estados Unidos","continente":"Norteamérica" -- full key+value localization, same as ?lang=es # equivalent, explicit form: curl "https://ipto.to/v1/ip/8.8.8.8?lang=es" # does NOT work -- LANG only sets curl's own locale, never a header: LANG=es_ES.UTF-8 curl https://ipto.to/v1/ip/8.8.8.8

Jede Antwort von /v1/ip, /v1/asn/:asn und /v1/country/:code enthält lang und lang_source (verschachtelt unter meta bei /v1/ip; auf oberster Ebene bei den anderen beiden), sodass Sie immer genau sehen können, welche Sprache angewendet wurde und wie sie ausgewählt wurde — "param", "header" oder "default" — ohne anhand Ihrer Anfrage raten zu müssen.

curl -s -H "Accept-Language: es" https://ipto.to/v1/ip/8.8.8.8 | python3 -m json.tool # "meta": { "data_version": "...", "cached": true, "lang": "es-ES", "lang_source": "header" }

Die vollständige Lokalisierung von Schlüsseln und Werten ist das Standardverhalten, sobald Sie einen nicht-englischen lang setzen — jedes Feld, einschließlich der verschachtelten Schlüssel flags und meta, kommt in die Zielsprache umbenannt zurück, und auch die festen Enum-Werte (risk_tier, threat_type, connection_type, geo_precision, bogon_type, asn_type) werden übersetzt. Brauchen Sie stattdessen die alte Form mit englischen Schlüsseln? Fügen Sie &localize=0 zu /v1/ip hinzu, um es abzuschalten.

curl -s "https://ipto.to/v1/ip/8.8.8.8?lang=de&localize=0" | python3 -m json.tool # opts back out to the legacy English-keys shape: # "country_name": "Vereinigte Staaten", "geo_precision": "country", "is_vpn": false, # "flags": { "hosting": false, "mobile": false, ... }, # "meta": { "lang": "de", "lang_source": "param", ... }

Codebeispiele

JavaScript

const res = await fetch("https://ipto.to/v1/ip/8.8.8.8"); const data = await res.json(); console.log(data.country_name, data.asn_org, data.is_vpn);

Python

import requests r = requests.get("https://ipto.to/v1/ip/8.8.8.8") print(r.json()["country_name"], r.json()["is_vpn"])

PHP

$data = json_decode(file_get_contents("https://ipto.to/v1/ip/8.8.8.8"), true); echo $data["country_name"] . " " . $data["asn_org"];

Go

resp, _ := http.Get("https://ipto.to/v1/ip/8.8.8.8") var data map[string]interface{} json.NewDecoder(resp.Body).Decode(&data)

Ratenlimits

Limits werden pro Tag (UTC) durchgesetzt, gezählt nach IP-Adresse im kostenlosen Tarif oder nach Schlüssel bei Pro/Enterprise. Bei Überschreitung Ihres Limits erhalten Sie HTTP 429 mit einem Retry-After-Header. Für Produktions-Workloads siehe Preise.

Gilt für jeden /v1/*-Endpunkt, den /mcp-Server sowie die Shortcuts curl ipto.to / curl ipto.to/:ip. GET /ip ist die einzige Ausnahme — ein reines Header-Echo ohne Abfragekosten, das somit gar kein Budget beansprucht.

TierRequests / dayAuth
Free1,000Keine
Pro100,000API-Schlüssel (Header)
EnterpriseUnlimitedAPI-Schlüssel + dedizierte Endpunkte

Fehlercodes

StatusMeaning
200OK. Die Antwort enthält die Daten.
202Feed-Daten werden synchronisiert. In 45 Sekunden erneut versuchen.
400Ungültige Anfrage. Ungültige IP, ASN oder Ländercode.
404ASN oder Land nicht im Datensatz gefunden.
503Datensatz noch nicht verfügbar. Der initiale Import läuft möglicherweise noch.