142 endpoints.
One spec.
OpenAPI 3.1, idempotency keys on every write, GCRA rate limiting, cursor-based pagination, and a consistent error envelope.
Spec-first.
Code-generated.
The OpenAPI 3.1 spec is the source of truth. Client SDKs, server stubs, documentation, and request validation are all generated from the same YAML file.
| Resource | Endpoints | Methods |
|---|---|---|
| DNS | 34 | GET POST PUT PATCH DELETE |
| Domains | 22 | GET POST PUT DELETE |
| Certificates | 18 | GET POST DELETE |
| Monitoring | 26 | GET POST PUT PATCH DELETE |
| Incidents | 16 | GET POST PUT PATCH |
| Status Pages | 14 | GET POST PUT DELETE |
| Analytics | 12 | GET |
Retry safely.
No duplicates.
Every write endpoint accepts an Idempotency-Key header. Retries within 24 hours return the original response from cache. Different body with same key returns 409 Conflict.
Smooth, not bursty.
GCRA guarantees it.
Generic Cell Rate Algorithm (GCRA) provides smooth rate limiting without the thundering-herd problem of fixed-window counters. Every response includes standard rate limit headers.
| Plan | RPS | Burst | Window | Algorithm |
|---|---|---|---|---|
| Free | 10 | 20 | per-second | GCRA |
| Pro | 100 | 200 | per-second | GCRA |
| Business | 500 | 1,000 | per-second | GCRA |
| Enterprise | custom | custom | per-second | GCRA |
| Header | Example | Meaning |
|---|---|---|
| X-RateLimit-Limit | 100 | Requests per second allowed |
| X-RateLimit-Remaining | 94 | Requests remaining in window |
| X-RateLimit-Reset | 1712822400 | Unix timestamp of window reset |
| Retry-After | 0.1 | Seconds to wait (on 429) |
No offset.
No drift.
Cursor-based pagination avoids the consistency issues of offset pagination. Results are stable even as records are created or deleted between pages.
Every error.
Same shape.
Every error response follows the same JSON envelope: machine-readable code, human-readable message, field-level details, request ID for support, and a link to the documentation.
Real-time events.
One socket.
Subscribe to a WebSocket stream and receive events as they happen. Filter by event type, zone, or resource. Reconnection and backfill are handled by the client SDK.
| Time | Event | Payload |
|---|---|---|
| 07:12:03.112 | record.created | {"zone":"example.com","type":"A","name":"api"} |
| 07:12:06.540 | cert.issued | {"domain":"*.example.com","ca":"letsencrypt"} |
| 07:14:22.001 | monitor.down | {"monitor":"api-http","region":"FRA"} |
| 07:14:22.044 | incident.created | {"id":"INC-2848","severity":"critical"} |
| 07:18:41.220 | monitor.up | {"monitor":"api-http","region":"FRA"} |
| 07:18:41.300 | incident.resolved | {"id":"INC-2848","duration":"4m19s"} |