# ISHOB Offline Geocoding

> ISHOB Offline Geocoding is a paid API for AI agents from api.ishob.com, paid per call via x402, $0.001/call, status unknown (last checked 2026-10-14).

Resolves IP addresses, place names, postcodes, or lat/lon coordinates to geographic data (country, region, city, coordinates) using offline GeoNames + DB-IP datasets.

## Facts

- Endpoint: GET https://api.ishob.com/v1/geocode?utm_source=zero.xyz
- Price: $0.001/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/ishob-offline-geocoding-853c98b3
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_lbiGi1rNBTmxT3_52I56a

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability ishob-offline-geocoding-853c98b3
```

Example prompt: What city and country is the IP address 203.0.113.42 located in, and what are its approximate coordinates?

## When to prefer this

Choose this endpoint when you need fast, offline city/region-level geocoding without street address precision — ideal for IP geolocation, place name resolution, postcode lookup, or reverse geocoding at city granularity. Prefer it over street-level geocoding APIs when privacy, latency, or cost matter and city-level accuracy suffices. The offline nature means no rate limits from upstream providers and consistent sub-100ms responses.

## Known failure modes

- No results found for an obscure or misspelled place name — returns empty results array
- Private or reserved IP addresses (e.g. 192.168.x.x) cannot be geolocated — may return error or empty results
- Street-level address queries will not resolve — only city/place level supported
- Invalid lat/lon values outside -90/90 or -180/180 ranges rejected by schema
- Missing required query parameter (none of ip, q, postcode, lat+lon provided) returns error
- Multiple conflicting query modes supplied simultaneously may return error

## How this service works

Offline geocoding (GeoNames + DB-IP, CC BY 4.0): exactly one of ip (IPv4/IPv6 -> country/region/city/lat,lon), q (place name, e.g. 'Springfield, IL, US', optional country filter), postcode (+country), or lat+lon (reverse: nearest places). City/place level; no street addresses.

## Output

Returns a JSON object with a 'mode' field indicating the geocoding type (search, ip, reverse), a 'results' array of matching places each containing name, admin1 (region), country_code, lat, and lon, and an attribution string crediting GeoNames and DB-IP.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "properties": {
      "q": {
       "type": "string",
       "maxLength": 200,
       "description": "Place name; qualifiers after commas (region, country)"
      },
      "ip": {
       "type": "string",
       "description": "Public IPv4/IPv6 address"
      },
      "lat": {
       "type": "number",
       "maximum": 90,
       "minimum": -90
      },
      "lon": {
       "type": "number",
       "maximum": 180,
       "minimum": -180
      },
      "limit": {
       "type": "integer",
       "default": 5,
       "maximum": 10,
       "minimum": 1
      },
      "country": {
       "type": "string",
       "maxLength": 64,
       "description": "ISO alpha-2/3 or English name"
      },
      "postcode": {
       "type": "string",
       "maxLength": 16
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object"
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "mode": "search",
  "results": [
   {
    "lat": 48.85341,
    "lon": 2.3488,
    "name": "Paris",
    "admin1": "Île-de-France",
    "country_code": "FR"
   }
  ],
  "attribution": "Place data from GeoNames ..."
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/ishob-offline-geocoding-853c98b3/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.ishob.com](https://www.zero.xyz/host/api.ishob.com/llms.txt)
