GeoIP API

API reference

GeoIP HTTP endpoints on api.syndaq.com.

All GeoIP endpoints are served from https://api.syndaq.com/v1/geoip/.

Authenticated requests require a valid GeoIP key. Lookup routes require your geo_sec_ secret key.

Endpoints overview

MethodPathAuthPurpose
GET/v1/geoip/lookupSecret keyLookup by ?ip= query parameter
GET/v1/geoip/lookup/{ip}Secret keyLookup by IP in the URL path
GET/v1/geoip/statusPublic or secret keyPlan limits and quota snapshot

Response headers

Successful and error responses may include:

HeaderDescription
X-Request-IdUnique ID for support and log correlation
X-RateLimit-LimitPlan requests per minute for this key
X-RateLimit-RemainingRequests left in the current minute window
X-RateLimit-ResetUnix timestamp when the minute window resets
X-Quota-LimitMonthly quota for the subscription
X-Quota-RemainingLookups left this calendar month (UTC)
X-Quota-PeriodCurrent quota month (YYYY-MM)
Retry-AfterSeconds to wait after HTTP 429

GET /v1/geoip/lookup

Returns geolocation and network metadata for a single IP address.

Request

Pass the target IP using one of these forms:

GET /v1/geoip/lookup/8.8.8.8
GET /v1/geoip/lookup?ip=8.8.8.8

Both IPv4 and IPv6 are supported. IPv6 addresses in the path should be URL-encoded.

Headers:

Authorization: Bearer geo_sec_YOUR_SECRET_KEY

Success response (200)

{
  "success": true,
  "ip": "8.8.8.8",
  "cached": true,
  "provider": "ipwhois",
  "fetched_at": "2026-06-22 12:00:00.000",
  "continent": "North America",
  "country": {
    "code": "US",
    "name": "United States"
  },
  "region": "California",
  "city": "Mountain View",
  "postal": "94035",
  "location": {
    "latitude": 37.386,
    "longitude": -122.084
  },
  "timezone": {
    "id": "America/Los_Angeles"
  },
  "connection": {
    "isp": "Google LLC",
    "org": "Google Public DNS",
    "asn": 15169,
    "domain": "google.com",
    "type": "IPv4"
  },
  "is_eu": false,
  "request_id": "e6d04020be9b57b1e1069d6e483c0443"
}

Response fields

FieldTypeDescription
cachedbooleantrue when served from cache or local database
country.codestringISO 3166-1 alpha-2 country code
country.namestringCountry display name
regionstringState, province, or region
citystringCity name when available
postalstringPostal or ZIP code when available
location.latitudenumberWGS84 latitude
location.longitudenumberWGS84 longitude
timezone.idstringIANA timezone identifier when available
connection.ispstringInternet service provider
connection.orgstringOrganization name
connection.asnintegerAutonomous system number
connection.domainstringReverse DNS domain when known
connection.typestringIPv4 or IPv6
is_eubooleanWhether the country is in the European Union

GET /v1/geoip/status

Returns key status, plan limits, and quota usage without performing a lookup.

Request

GET /v1/geoip/status
Authorization: Bearer geo_sec_YOUR_SECRET_KEY

The public key (geo_pub_) is accepted on this route.

Success response (200)

{
  "success": true,
  "status": "active",
  "product": "geoip",
  "plan": "starter",
  "rate_limit_per_minute": 120,
  "monthly_quota": 10000,
  "quota_unlimited": false,
  "quota_remaining": 9842,
  "quota_period": "2026-06",
  "database_records": 1250000
}

Errors

Failed requests return JSON with success: false, error, error_code, and usually request_id.

HTTPerror_codeTypical cause
400invalid_ipMissing or malformed IP address
401missing_credentialsNo API key provided
401invalid_api_keyUnknown, inactive, or revoked key
401wrong_key_typePublic key used on a lookup endpoint
403ip_not_allowedCaller IP not on the key allowlist
404ip_not_foundUpstream could not resolve the address
422ip_not_routablePrivate, reserved, or non-routable IP
429rate_limit_exceededPer-minute limit exceeded
429quota_exceededMonthly quota exhausted
502lookup_failedTemporary upstream error
500internal_errorUnexpected server error

Handle non-200 responses in your application and retry transient errors with exponential backoff.