Skip to content
GDPR compliant. Hosted in DE.
14-day free trial →

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).

First geo lookup
View in demo account →
$ 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 }
}
For testing, 1,000 lookups/month are included without an add-on. Note: accuracy_radius_km, confidence and abuse_score/risk are transparent estimates (no guaranteed precision); the flags is_vpn/is_tor/is_hosting/is_anycast etc. are based on known IP ranges. timezone falls back to the primary country zone for countries with a single time zone.

# Endpoints

Batch lookup (up to 1,000 IPs)
View in demo account →
$ 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.

Neutralised responses
The switch ?neutral=1 and the header X-Neutral: 1 apply to the Geo API as well. They remove email addresses from the response — in this API that affects abuse_contact only, which then reads [entfernt]. The queried IP address itself stays: it is the input of the call, which the caller already knows. If you do not want to process it further you have to drop it yourself — neutralisation does not remove it. Whether a response was actually neutralised is stated in the X-Neutralisiert response header.

# 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.

City/region names in the API are localized by language (lang=de|en, e.g. “Munich”). The .mmdb itself contains the original English names.

Frequently asked questions

Via the ?key=xtraq_… query parameter (recommended, header-independent). The key needs the “geo” scope — select it when creating it under Settings → API Keys. X-Api-Key and Authorization: Bearer are also accepted.
Availability by plan
The Geo API is an add-on on every plan, including Free, booked under Settings → Subscription & Billing in three volume tiers: Starter (€5/mo, cancel monthly, 50,000 lookups), Pro (€12/mo, cancel monthly, 500,000) and Business (€29/mo, cancel monthly, 3M). Without a booked add-on, 1,000 lookups/month are included for testing. Every API key needs the “geo” scope; without it /geo responds with 403 scope_denied. A key whose only scope is “geo” can be created under Settings → API Keys on every plan — including below Business, where the rest of the REST API stays locked. It is valid for the Geo endpoints only. Prices incl. VAT, cancel monthly.
Start in 60 seconds

Let XICTRAQ watch your website.

Permanent free plan available. No credit card, no installation, no hidden fees.