Geo API
IP geolocation as its own API: country, region, city, postal code, coordinates, timezone, ASN, network range (CIDR), RIR and provider — plus continent/EU flag, country metadata (calling code, currency, official and widely spoken languages), a full time-zone object, network signals (hosting/cloud incl. Azure, VPN, Tor, satellite, anycast, iCloud Relay, bogon), an estimated abuse score with a risk rating as well as an estimated accuracy radius and per-field confidence. Single or as a batch (up to 1,000 IPs/request). From an EU-hosted, vendor-free data base, with localized names (DE/EN) and a downloadable .mmdb (IPv4) for local use in GeoIP2-compatible tools.
# Quickstart
Create an API key with the “geo” scope under Settings → API Keys. Authentication via the ?key= query parameter (header-independent, ideal for any environment).
$ curl "https://api.xictraq.com/api/geo?ip=46.5.1.1&key=xtraq_IHR_KEY"
{
"ip": "46.5.1.1",
"network": "46.5.1.0/24",
"country_code": "DE",
"country_name": "Deutschland",
"is_eu": true,
"calling_code": 49,
"currency": { "code": "EUR", "symbol": "€" },
"languages": ["de"],
"continent": "Europa", "continent_code": "EU",
"rir": "RIPE",
"region": "Nordrhein-Westfalen", "region_code": "DE-NW",
"city": "Köln", "postal_code": "50667",
"latitude": 50.9379, "longitude": 6.835,
"timezone": "Europe/Berlin",
"time_zone": { "id": "Europe/Berlin", "utc_offset": "+02:00",
"utc_offset_seconds": 7200, "is_dst": true,
"current_time": "2026-06-05T14:23:11+02:00" },
"accuracy_radius_km": 25,
"confidence": { "country": 99, "region": 70, "city": 80 },
"asn": 3209, "isp": "Vodafone", "isp_domain": "vodafone.de",
"org_id": "ORG-VG1-RIPE", "org_type": "LIR", "registry_country": "DE",
"allocation_date": "1999-08-20", "abuse_contact": "abuse@vodafone.de",
"connection_type": "isp",
"is_hosting": false, "is_datacenter": false, "cloud_provider": null,
"is_anycast": false,
"is_relay": false, "is_vpn": false, "is_tor": false,
"is_satellite": false, "is_bogon": false,
"abuse_score": 4, "risk": "niedrig",
"quota": { "tier": "geo_api_pro", "used": 1241, "monthly_limit": 500000 }
}# Endpoints
$ curl -X POST "https://api.xictraq.com/api/geo/batch?key=xtraq_IHR_KEY" \
-H "Content-Type: application/json" \
-d '{"ips":["8.8.8.8","203.0.113.7"]}'
{
"results": [
{ "ip": "8.8.8.8", "network": "8.8.8.0/24", "country_code": "US",
"rir": "ARIN", "is_anycast": true, "cloud_provider": "Google Cloud",
"abuse_score": 12, "risk": "niedrig", "...": "…" },
{ "ip": "203.0.113.7", "error": "invalid_ip" }
],
"count": 2,
"quota": { "tier": "geo_api_pro", "used": 1243, "monthly_limit": 500000 }
}# What a response returns
Each lookup returns a flat JSON object — four field groups plus quota. Location fields, country metadata, network/registry fields and network/risk signals.
Location & time zone
country_code/country_name, is_eu, continent/continent_code, region/region_code, city, postal_code, latitude, longitude. timezone as an IANA zone plus a time_zone object with id, utc_offset (e.g. +02:00), utc_offset_seconds, is_dst (daylight-saving flag) and current_time (current local time as ISO 8601). If the city level returns no zone but the country has only one, timezone is filled with the primary country zone; multi-time-zone countries (US, Russia, …) deliberately stay null instead of inventing a blanket zone.
Country metadata
Per detected country calling_code (phone calling code as an integer, e.g. 49), currency as an object of code and symbol (e.g. EUR / €) and languages as an array of official and widely spoken languages in ISO 639-1 format. These fields derive from the country code and save you a second lookup table.
Network & RIR registry
network is the matched network range as an IPv4 CIDR (e.g. 8.8.8.0/24), rir the responsible Regional Internet Registry (RIPE, ARIN, APNIC, LACNIC, AFRINIC). asn, isp and isp_domain name the network operator. From the RIR registry additionally org_id (org handle to group all networks of one company), org_type (e.g. LIR or end-user), registry_country (operator country per the registry), allocation_date (first registration of the ASN — a very young network can be a risk signal) and abuse_contact (operator abuse email for abuse reports).
Network & risk signals
Per IP, flags for hosting (is_hosting), datacenter (is_datacenter), VPN (is_vpn), Tor (is_tor), satellite (is_satellite), anycast/resolver (is_anycast), iCloud Private Relay (is_relay) and bogon (is_bogon), plus cloud_provider (detects known cloud ASNs such as AWS, Google Cloud, Azure; otherwise null) and a derived connection_type (hosting, satellite, relay or isp). From these a 0–100 abuse_score is computed — Tor (+40), VPN (+30), hosting (+20) and anycast without a known public resolver (+10) add up; a hit in the Spamhaus DROP list raises the score to at least 90. risk groups the score coarsely: niedrig (below 20), erhöht (below 50), hoch (50 and above). The risk label is always returned in German regardless of lang. If the reputation datasets cannot be read, the API returns abuse_score and risk as null instead of a top grade. All flags and the score are estimates based on known IP ranges — not a guaranteed verdict.
Accuracy & confidence (transparent)
Instead of faking pinpoint accuracy, every response returns accuracy_radius_km (estimated radius in km around the coordinates) and confidence per field (country, region, city as 0–100). The radius reflects the granularity reached: city-precise from an operator/geofeed source about 25 km (iCloud relay locations coarser, about 80 km), from the city DB about 50 km, region-only 150 km, country-only 600 km. Both are open estimates — not guaranteed precision. If the open location database only knows a placeholder for an address range (such as the operator's head office, where connections from across the country pile up), city and region stay empty and the radius is 600 km — no answer rather than a wrong one. If the operator publishes the location itself via geofeed, its value applies.
# Quotas & pricing
Available as an add-on under Settings → Subscription & Billing. A per-minute limit can additionally be configured per key.
Geo-API Starter
5 €/mo
50.000 Lookups / month
cancel monthly
Geo-API Pro
12 €/mo
500.000 Lookups / month
cancel monthly
Geo-API Business
29 €/mo
3 Mio. Lookups / month
cancel monthly
# Local database (.mmdb)
To resolve geo data locally, download a .mmdb in the open GeoIP2 format via /geo/db. Any tool or framework that reads this format can use it directly — no external account, EU data base, IPv4, weekly refreshable. For IPv6 use the /geo endpoint additionally.