{"openapi":"3.1.0","info":{"title":"ipinfo.fyi","version":"1.0.0","summary":"Free IP, ASN, DNS, CGNAT, and VPN comparison API.","description":"No account and no API key. Routes are limited per caller IP. curl and wget receive plain text on HTML routes. HTML pages also respond to a .md suffix and to Accept: text/markdown. VPN output is marked affiliate: true. Discovery: /.well-known/api-catalog, /.well-known/ai-catalog.json, and /mcp/server-card."},"servers":[{"url":"https://ipinfo.fyi"}],"paths":{"/api/json":{"get":{"operationId":"apiJson","summary":"Caller IP, or ?ip= for a lookup. Same per-minute limit as the rest of the site.","parameters":[{"name":"ip","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lookup plus attribution"},"429":{"description":"Rate limit exceeded"}}}},"/json":{"get":{"operationId":"myIp","summary":"IP of the caller","responses":{"200":{"description":"Caller IP and Cloudflare edge data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ip"}}}}}}},"/{ip}/json":{"get":{"operationId":"lookup","summary":"Look up an IP, ASN, or domain","parameters":[{"name":"ip","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Lookup result"},"400":{"description":"Not an IP, ASN, or domain"},"404":{"description":"Domain did not resolve"}}}},"/vpn.json":{"get":{"operationId":"vpn","summary":"VPN comparison and a needs-based recommendation","parameters":[{"name":"budget","in":"query","schema":{"type":"string","enum":["low","medium","any"]}},{"name":"privacy","in":"query","schema":{"type":"string","enum":["standard","high"]}},{"name":"streaming","in":"query","schema":{"type":"boolean"}},{"name":"country","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Comparison. affiliate is true."}}}},"/mcp":{"post":{"operationId":"mcp","summary":"Stateless streamable HTTP MCP server","description":"JSON-RPC 2.0. Tools: my_ip, lookup_ip, lookup_asn, dns_resolve, blacklist_check, cgnat_check, vpn_recommendation. Accept application/json, text/event-stream. The response is JSON when the client accepts application/json, otherwise one SSE event. vpn_recommendation includes affiliate: true. No API key.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number","null"]},"method":{"type":"string"},"params":{"type":"object"}},"required":["jsonrpc","method"]}}}},"responses":{"200":{"description":"JSON-RPC result, as application/json or one text/event-stream message"},"202":{"description":"Notification accepted"},"429":{"description":"Rate limit exceeded"}}}},"/llms.txt":{"get":{"operationId":"llms","summary":"Short notes for agents","responses":{"200":{"description":"text/plain"}}}},"/llms-full.txt":{"get":{"operationId":"llmsFull","summary":"Longer notes for agents","responses":{"200":{"description":"text/plain"}}}},"/.well-known/api-catalog":{"get":{"operationId":"apiCatalog","summary":"RFC 9727 API catalog (linkset)","responses":{"200":{"description":"application/linkset+json"}}}},"/mcp/server-card":{"get":{"operationId":"mcpServerCard","summary":"MCP server card for registry and domain discovery","responses":{"200":{"description":"application/mcp-server-card+json"}}}},"/asn/{number}":{"get":{"operationId":"asnPage","summary":"ASN lookup. A bare number such as 13335, or AS13335 which redirects to the number.","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"HTML, or text/markdown with Accept or a .md suffix"},"404":{"description":"Unknown ASN with no local profile"}}}},"/go/{partner}":{"get":{"operationId":"affiliateGo","summary":"Affiliate redirect. 200 with an explanation when the https URL is not configured. Does not invent a destination.","parameters":[{"name":"partner","in":"path","required":true,"schema":{"type":"string","enum":["nordvpn","protonvpn","surfshark"]}}],"responses":{"200":{"description":"Link not configured. Disclosure and a link to /vpn. Not a redirect."},"302":{"description":"Redirect to the configured https affiliate URL"},"404":{"description":"Unknown partner id"}}}}},"components":{"schemas":{"Ip":{"type":"object","properties":{"ip":{"type":"string"},"version":{"type":["integer","null"]},"city":{"type":["string","null"]},"region":{"type":["string","null"]},"country":{"type":["string","null"]},"country_name":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"timezone":{"type":["string","null"]},"org":{"type":["string","null"]},"asn":{"type":["string","null"]},"connection":{"type":"object"},"bogon":{"type":"boolean"},"sources":{"type":"array","items":{"type":"string"}}}}}}}