cURL
curl --fail-with-body \
https://api.ipfrog.com/v1/ip
Public API · Version 1
A small, privacy-first JSON API for caller IP discovery, DNS resolution, regional latency probes, and client-side speed-test configuration. No account or API key is required.
Quick start
Ask IPFrog what connection reached the API. The result includes the observed address, IP version, reverse hostname when available, network details, approximate location, and Cloudflare edge context.
curl --fail-with-body \
https://api.ipfrog.com/v1/ip
const response = await fetch(
'https://api.ipfrog.com/v1/ip'
)
if (!response.ok) throw new Error('Request failed')
const result = await response.json()
console.log(result.data.address)
{
"data": {
"address": "203.0.113.7",
"ip_version": "ipv4",
"reverse_hostname": null,
"network": { "asn": 64500, "organization": "Example Network" },
"location": { "country_code": "US", "timezone": "America/Chicago" },
"connection": { "cloudflare_colo": "ORD", "http_protocol": "HTTP/2" },
"data_provenance": "observed_connection"
},
"meta": {
"api_version": "v1",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"requested_at": "2026-07-16T12:00:00.000Z"
}
}
Endpoint reference
All success payloads use a data object and request metadata lives in meta. Open any GET example directly or copy its cURL command.
Returns information observed from the caller’s current connection. It does not accept a target IP and is never cached.
Try in browser →Resolves an allowlisted DNS type through IPFrog’s fixed resolver. Types: A, AAAA, CNAME, MX, NS, TXT, and PTR. For PTR, pass a normal IPv4 or IPv6 address as name.
curl 'https://api.ipfrog.com/v1/dns/resolve?name=example.com&type=A'
Try example →
Lists stable region identifiers and their current availability.
Try in browser →Measures a Cloudflare edge-to-regional Durable Object round trip. This is infrastructure latency, not the caller’s complete network latency.
curl https://api.ipfrog.com/v1/latency/regions/wnam/probe
Returns the versioned measurement modes, units, limits, and analytics schema used by official clients. Speed tests execute on the client; IPFrog does not run or persist them server-side.
Try in browser →Accepts documented, privacy-safe speed-test analytics events. Unknown properties are discarded; IP addresses, coordinates, hostnames, User-Agent strings, DNS contents, and persistent identifiers are prohibited.
curl --fail-with-body https://api.ipfrog.com/v1/events \
-H 'content-type: application/json' \
--data '{
"event": "speed_test_completed",
"event_id": "550e8400-e29b-41d4-a716-446655440000",
"properties": {
"source": "cli",
"mode": "full",
"duration_ms": 14000,
"download_mbps": 242.5,
"upload_mbps": 31.2,
"latency_ms": 22.4,
"jitter_ms": 3.1
}
}'
Returns sanitized service health and the active API version without consuming DNS-provider quota.
Check service health →HTTP conventions
Errors use application/problem+json with status, a stable machine-readable code, a safe detail, and request_id.
Limited routes expose RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset. A 429 response also includes Retry-After.
Public endpoints allow any origin without credentials. Preflight requests use OPTIONS; GET endpoints also support HEAD.
No accounts or API keys. Request-specific IP results are never cached. Speed-test results are not persisted by the API.
| Status | Meaning |
|---|---|
200 | Successful GET request. |
202 | Analytics event accepted for best-effort delivery. |
400 | Invalid parameter or JSON body. |
405 | Unsupported method; inspect the Allow header. |
429 | Rate limit exceeded; honor Retry-After. |
502–504 | A bounded upstream operation failed or timed out. |