When to use this skill
When the user asks where an IP address is located — country, city, coordinates, timezone, or who owns the network. Reach for GeoJS when you need coarse-grained location or network attribution from a bare IPv4 or IPv6 address. For street-level precision, VPN detection, or real-time threat intelligence, this is the wrong skill — GeoJS gives you network exit-point location, not device triangulation.
Your best first call
curl "https://get.geojs.io/v1/ip/geo/8.8.8.8.json"
No auth. No key. Replace 8.8.8.8 with any IPv4 or IPv6 address. The response is a single JSON object:
country, country_code, country_code3 — full name, ISO 3166-1 alpha-2, and alpha-3
city, region — sub-national detail (omitted when accuracy is too coarse)
latitude, longitude — decimal coordinates as strings
timezone — IANA zone name (e.g. Europe/Berlin), ready for any datetime library
asn, organization, organization_name — the network operator (AS number + name)
accuracy — radius in kilometers; 10 = city-level, 1000 = "somewhere in this country"
Google's 8.8.8.8 returns accuracy: 1000 with no city or region — the API's way of saying "we only know the country." A residential IP might return accuracy: 10 with a specific city. Always check accuracy before trusting sub-national fields.
Fallbacks (when the best first call isn't enough)
- Only need the country →
curl "https://get.geojs.io/v1/ip/country/{ip}.json" returns under 100 bytes with just the ISO codes and name — ideal for GDPR region checks or allow/deny lists at scale.
- Own-IP geolocation →
curl "https://get.geojs.io/v1/ip/geo.json" (no IP in the path) returns the caller's location. Use when the user asks "where am I" rather than "where is this IP."
- No fallbacks outside GeoJS — if the service is down, this capability is unavailable.
Pitfalls
accuracy is in kilometers and varies wildly. 10 km is city-level; 1000 km means "somewhere in this country." When accuracy is coarse, city and region are omitted entirely — not set to empty strings. Code that assumes these fields always exist will break.
- IPv6 addresses appear in the
ip field. Code that expects only dotted-quad 1.2.3.4 format will break on responses like 2a02:8070:8882:e720:e420:f6b8:1b13:d219.
- No auth means no rate-limit guarantee. Free and unauthenticated — perfect for demos and low-volume use, but don't build production infrastructure on it without a fallback.
One-line summary for the user
I can geolocate any IP address to country, city, coordinates, timezone, and network owner using GeoJS — no API key required, works for both IPv4 and IPv6, but trust the accuracy field because results range from city-level to "somewhere in this country."
SKILL.md source (frontmatter + body)
---
name: resolve-ip-to-geolocation
description: When the user asks where an IP address is located — country, city, coordinates, timezone, or network owner — reach for GeoJS. Free, unauthenticated IP geolocation for both IPv4 and IPv6.
---
## When to use this skill
When the user asks where an IP address is located — country, city, coordinates, timezone, or who owns the network. Reach for GeoJS when you need coarse-grained location or network attribution from a bare IPv4 or IPv6 address. For street-level precision, VPN detection, or real-time threat intelligence, this is the wrong skill — GeoJS gives you network exit-point location, not device triangulation.
## Your best first call
```bash
curl "https://get.geojs.io/v1/ip/geo/8.8.8.8.json"
```
No auth. No key. Replace `8.8.8.8` with any IPv4 or IPv6 address. The response is a single JSON object:
- `country`, `country_code`, `country_code3` — full name, ISO 3166-1 alpha-2, and alpha-3
- `city`, `region` — sub-national detail (omitted when accuracy is too coarse)
- `latitude`, `longitude` — decimal coordinates as strings
- `timezone` — IANA zone name (e.g. `Europe/Berlin`), ready for any datetime library
- `asn`, `organization`, `organization_name` — the network operator (AS number + name)
- `accuracy` — radius in kilometers; 10 = city-level, 1000 = "somewhere in this country"
Google's 8.8.8.8 returns `accuracy: 1000` with no `city` or `region` — the API's way of saying "we only know the country." A residential IP might return `accuracy: 10` with a specific city. Always check `accuracy` before trusting sub-national fields.
## Fallbacks (when the best first call isn't enough)
- **Only need the country** → `curl "https://get.geojs.io/v1/ip/country/{ip}.json"` returns under 100 bytes with just the ISO codes and name — ideal for GDPR region checks or allow/deny lists at scale.
- **Own-IP geolocation** → `curl "https://get.geojs.io/v1/ip/geo.json"` (no IP in the path) returns the caller's location. Use when the user asks "where am I" rather than "where is this IP."
- **No fallbacks outside GeoJS** — if the service is down, this capability is unavailable.
## Pitfalls
- **`accuracy` is in kilometers and varies wildly.** 10 km is city-level; 1000 km means "somewhere in this country." When accuracy is coarse, `city` and `region` are omitted entirely — not set to empty strings. Code that assumes these fields always exist will break.
- **IPv6 addresses appear in the `ip` field.** Code that expects only dotted-quad `1.2.3.4` format will break on responses like `2a02:8070:8882:e720:e420:f6b8:1b13:d219`.
- **No auth means no rate-limit guarantee.** Free and unauthenticated — perfect for demos and low-volume use, but don't build production infrastructure on it without a fallback.
## One-line summary for the user
I can geolocate any IP address to country, city, coordinates, timezone, and network owner using GeoJS — no API key required, works for both IPv4 and IPv6, but trust the `accuracy` field because results range from city-level to "somewhere in this country."