message. When present, data is an object. Collections use data.items; paginated collections add page, pageSize, totalItems, totalPages, hasNextPage and hasPreviousPage directly within data.
Global limits currently allow 600 requests per minute per authenticated credential per API instance, plus stricter Verify limits enforced in PostgreSQL. Instance-local limits are not a distributed quota guarantee. 429 responses include
Retry-After: 60; a daily Verify limit may require waiting longer. Avoid polling repeatedly when the limit window has not reset.
Safe idempotent sends
For each logical message or verification send, generate and persist a uniqueIdempotency-Key before the first request. It must contain 1–128 printable non-space ASCII characters. Resend the identical payload and same key after an unknown transport result. The key is scoped to organization/project/environment and, for shared sends, service. Reusing it for different content returns 409.
Do not automatically retry creation/submission/rotation operations unless their own contract makes the operation safe. Template submission and uncertain provider outcomes require reconciliation. A successful but lost verification check response may already have consumed the code; bind and reconcile the login flow on your server rather than interpreting another check as a new success.
Request diagnostics
Responses include a server-generatedX-Request-Id. Record it with your internal operation ID, never the API secret or OTP. Use GET /request-logs with project/environment and optional requestId, apiKeyId or statusCode filters.
Seven-day request logs store route templates, method, status, duration, API-key identity and timestamp. They omit bodies, query strings, raw resource IDs in paths, authorization headers, OTPs and credentials. Invalid unauthenticated keys cannot be safely attributed to an organization and do not appear in this tenant log. Logging is best-effort; an observability write failure never reverses a durably accepted charge.