Developers and AI agents
Developer Resources: API, OpenAPI and Markdown Access
How to read Crafzo IP Lookup without a browser: the JSON API and its OpenAPI document, Markdown content negotiation for every page, llms.txt, the sitemap and the feed, plus the error format agents can rely on.
Machine-readable entry points
Everything on Crafzo IP Lookup can be read without a browser. These files are the stable entry points; each one is generated on deploy from the same data that renders the site, so they never lag behind the pages.
| Resource | URL | Format | What it contains |
|---|---|---|---|
| llms.txt | https://ip.crafzo.com/llms.txt | text/plain | llmstxt.org index of every tool page and guide, with one-line descriptions. |
| llms-full.txt | https://ip.crafzo.com/llms-full.txt | text/plain | Full text of every tool page and guide, with canonical URLs, dates, FAQ and sources. |
| openapi.json | https://ip.crafzo.com/openapi.json | application/json | OpenAPI 3.1 document describing the JSON API and the content endpoints. |
| sitemap.xml | https://ip.crafzo.com/sitemap.xml | application/xml | XML sitemap of every indexable page (static pages, tool pages and guides) with last-modified dates. |
| feed.xml | https://ip.crafzo.com/feed.xml | application/rss+xml | RSS 2.0 feed of the guides, newest first, with titles, descriptions and publication dates. |
| robots.txt | https://ip.crafzo.com/robots.txt | text/plain | Crawl policy. AI search, citation and training crawlers are allowed. |
Read any page as Markdown
Every HTML page on the site also has a Markdown representation at the same URL. Send Accept: text/markdown and the response is the page's text with Content-Type: text/markdown; charset=utf-8 and Vary: Accept; clients that ask for text/html keep receiving HTML. The negotiation follows RFC 9110: q-values are honoured, a specific media range overrides a wildcard, and a request that accepts none of text/html, text/markdown or text/plain receives 406 Not Acceptable.
curl -sS -H "Accept: text/markdown" https://ip.crafzo.com/
curl -sS -H "Accept: text/markdown" https://ip.crafzo.com/blog/cgnat-shared-ip-addressesFor tools that cannot set request headers, appending .md to a page path returns the same Markdown regardless of the Accept header, for example https://ip.crafzo.com/blog/cgnat-shared-ip-addresses.md. Guides render their sections, tables, FAQ and sources; tool pages render their description, checks, steps and FAQ; retired guide URLs answer with the same permanent redirect as the HTML site.
A path that does not exist returns 404 with a Markdown body that links back to /llms.txt, the sitemap and this page, so an agent can recover without parsing an HTML error page.
JSON API
The JSON API is small and needs no authentication or API key. Responses are application/json, and every error uses the envelope described below. It is offered for interactive use and light automation without a service-level guarantee; if you need programmatic IP lookups at volume, contact us before building on it.
GET /api/current-ip returns the public IP address of the caller as the server sees it. When the address cannot be read from the connection, the server asks a fallback resolver, and source names where the answer came from (request-header when it was read from the connection).
curl -sS https://ip.crafzo.com/api/current-ip{
"ip": "203.0.113.42",
"source": "request-header"
}The full IP report shown on the site (geolocation, network ownership, fraud score, VPN and proxy signals) runs inside the web application and is not exposed as a JSON endpoint. The OpenAPI document lists every endpoint that exists today; anything not listed there is not part of the API.
Error format
Every error under /api/ is JSON with a stable code, a human-readable message, a hint that says how to resolve it, the HTTP status and a docs link. Unknown /api/ paths return 404 in this format instead of an HTML page, and unsupported methods return 405 with an Allow header.
{
"error": {
"code": "not_found",
"message": "No API endpoint exists at /api/example.",
"hint": "The available endpoints are listed in https://ip.crafzo.com/openapi.json.",
"status": 404,
"docs": "https://ip.crafzo.com/developers"
}
}not_found: no endpoint at that path.method_not_allowed: the endpoint exists but not for that HTTP method; theAllowheader lists the methods it supports.upstream_unavailable: the public IP address could not be determined from the connection or the fallback resolvers; retry later.
Pages outside /api/ report errors in the representation that was requested: an HTML page for browsers, a Markdown body for Accept: text/markdown.
Crawling and AI use
AI search, citation and training crawlers are allowed by robots.txt; only /api/ and the internal /markdown/ renderer are excluded. Cite the canonical URL that appears at the top of each Markdown document and in llms-full.txt.
Read the content with its limits in mind. IP geolocation is approximate: country and network are usually reliable, city is an estimate and coordinates mark the centre of an area, not a device. Fraud, VPN, proxy and reputation values are signals from third-party providers, not proof, and belong beside first-party logs and account context before any decision.
Corrections and questions
Report a problem with the API, the OpenAPI document or a Markdown rendering through the contact page. Include the URL, the request headers you sent and a timestamp; confirmed mistakes are fixed in the next deploy.