Appearance
Platform primitives
The same building blocks that run our platform, open to everyone. Each platform primitive is a small HTTP API for one job (resolve a name, locate an IP, size up a host), and the primitives compose.
The host inspector, for example, is geo + DNS + catalog combined into a single answer. Every piece behind the inspector is publicly callable.
The primitives
| Primitive | What it does | Auth | Status |
|---|---|---|---|
| DNS | DNS-over-HTTPS resolver (RFC 8484 wire + JSON). | Public | Live |
| Geo | Geolocation and network operator (ASN) for an IP. | Public | Live |
| Inspect | Everything known about a host, in one call. | Public | Live |
| Catalog | Major providers and live status, reconciled against our probes. | Public | Beta |
| Incidents | Confirmed and crowd-reported outages for a target. | Public | Beta |
| Search | Find services and popular domains. | Public | Beta |
No sign-up needed
Every primitive here is public: no account, rate-limited, and ready for curl. Authenticate for sustained use.
Base URL
All primitives live under a single versioned host:
https://ws.latency.app/v1/Conventions
- Format. Responses are JSON unless a primitive documents otherwise (the DNS wire format returns binary).
- Rate limits. Public primitives are limited per client IP. Exceeding a limit returns
429with a JSON body; slow down and retry. - Errors. Failures return a non-2xx status and a JSON body of the shape
{ "error": "<code>" }, sometimes with adetailfield. - No secrets in URLs. Account primitives take the API key in the
Authorizationheader, never in the query string.
Rate limits
Public primitives are metered per client IP, and geo is additionally metered per Referrer for keyless callers. Calls over a limit get 429 with { "error": "rate_limited" } and a Retry-After header.
DNS has a separate budget
The resolver is free and carries a dedicated per-IP budget, separate from the shared public one, so DoH clients are never squeezed by other traffic. Resolver queries never touch plan quotas.
| Surface | Default limit | Notes |
|---|---|---|
| DNS-over-HTTPS resolver | 600 requests/min per IP (dedicated budget) | Free and unmetered. Never counted against any plan quota. |
| Public primitives (inspect, catalog, incidents, search) | 600 requests/min per IP (shared budget) | The shared budget for light public use; authenticate for sustained use. |
| Geo without an api key | 10 requests/min per Referrer | Stringent on purpose. Authenticated calls use the shared budget instead. |
| Running a published Function | 120 executions/min | Limits are in Beta and subject to change |
WARNING
Functions run by monitors are fetched internally from our infrastructure and are not included in the public quota.
Going past the public limits
The public budgets are sized for interactive and light programmatic use. For sustained or high-volume access, authenticate with an API key: account calls are governed by plan quotas instead of the shared public budget. Heavy anonymous use will see 429s well before an authenticated caller would.