Appearance
Platform primitives
The same building blocks we use to run our platform, handed to you. Each platform primitive is a small HTTP API that nails one job (resolve a name, locate an IP, size up a host), and they're built to snap together.
Want proof they compose? The host inspector is really just geo + DNS + catalog stacked into a single answer. Nothing behind the curtain you can't call yourself.
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 we know about a host, in one call. | Public | Live |
| Catalog | Collection of major providers and their 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 |
| Key–value store | Durable, workspace-scoped storage for your functions. | Account | Beta |
Public vs. account
Public primitives need no sign-up and are rate-limited. You can curl those now. Account primitives store data on your behalf and require an API key. See Authentication.
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. For account primitives, send your 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. Over a limit you get 429 with { "error": "rate_limited" } and a Retry-After header.
DNS has its own budget
The resolver is free and carries its own dedicated per-IP budget, separate from the shared public one, so DoH clients are never squeezed by other traffic. Its queries never touch your plan quotas.
| Surface | Default limit | Notes |
|---|---|---|
| DNS-over-HTTPS resolver | 600 requests/min per IP (its own budget) | Free and unmetered, on the house. 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 through your monitors are fetched interally from our infrastructure and 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 your plan quotas instead of the shared public budget. Heavy anonymous use will see 429s well before an authenticated caller would.