API conventions
-
JSON only. Timestamps are ISO-8601 UTC unless a field documents epoch milliseconds.
-
Errors are RFC 7807 problem details (
application/problem+json):{ "type": "about:blank", "title": "Not Found", "status": 404, "requestId": "3f9c…" } -
401 vs 403.
401= no or invalid credential;403= valid credential but the route’s gate (admin/tenant/user) or a required scope is not satisfied. -
Request IDs. Every response carries
X-Request-Id; send your own to correlate logs. -
Idempotency. Mutating endpoints accept an
Idempotency-Keyheader. Readings ingestion additionally dedupes on(sourceId, metric, ts). -
Pagination is cursor-based:
?cursor=&limit=(limit ≤ 500),nextCursorin the response. -
Rate limits are per tenant and advertised via
RateLimit-*headers;429responses includeRetry-After. -
Versioning. Breaking changes bump the path version (
/v2); additive changes do not. Deprecations are announced withSunsetheaders at least 6 months ahead.
OpenAPI
GET /openapi.json on any Engine returns the machine-readable contract for that build.