Docs

Quickstart

You'll make your first lookup in about two minutes. No credit card required.

1. Get an API key

Create a free account and copy your key from the dashboard. Free includes 1,000 lookups/day with every signal.

Get your free API key

2. Set it as an environment variable

export GEOQ_API_KEY="geoq_live_xxxxxxxxxxxx"

3. Make your first call

$ curl "https://api.geoq.io/v1/check?ip=8.8.8.8" \
    -H "Authorization: Bearer $GEOQ_API_KEY"
const res = await fetch(
  "https://api.geoq.io/v1/check?ip=8.8.8.8",
  { headers: { Authorization: `Bearer ${process.env.GEOQ_API_KEY}` } }
);
const data = await res.json();
console.log(data.risk.score, data.risk.reasons);
import os, requests

r = requests.get(
    "https://api.geoq.io/v1/check",
    params={"ip": "8.8.8.8"},
    headers={"Authorization": f"Bearer {os.environ['GEOQ_API_KEY']}"},
)
print(r.json()["risk"])
req, _ := http.NewRequest("GET",
    "https://api.geoq.io/v1/check?ip=8.8.8.8", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("GEOQ_API_KEY"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()

4. Read the response

You'll get JSON like this:

{
  "ip": "8.8.8.8",
  "version": 4,
  "geo": {
    "country": "United States",
    "country_code": "US",
    "region": "California",
    "city": "Mountain View",
    "latitude": 37.4,
    "longitude": -122.1,
    "timezone": "America/Los_Angeles"
  },
  "network": {
    "asn": 15169,
    "as_org": "Google LLC"
  },
  "signals": {
    "is_datacenter": true,
    "datacenter_provider": "gcp",
    "is_tor": false,
    "is_vpn": false,
    "is_proxy": false,
    "is_bot": false
  },
  "risk": {
    "score": 35,
    "level": "medium",
    "reasons": [
      "is_datacenter"
    ]
  },
  "attribution": "https://geoq.io/attributions"
}

5. Act on the risk score

The risk.score (0–100) and risk.level (low/medium/high) summarise every triggered signal. A common pattern:

if (data.risk.level === "high") {
  // step up: MFA, manual review, hold the order
} else if (data.risk.level === "medium") {
  // monitor / log
} else {
  // allow
}
Treat the score as one input. Don't make a sole-basis automated decision about a person — see the AUP.

Next

Read the full endpoint reference, the response schema, or grab an official SDK.