Keys and access levels
Every request carries the key in the X-API-Key header. You create them in ByDomu, under Settings › API and webhooks; the full key is shown only once.
Publishable and secret
domu_pk_live_For your website and the browser: it can live in the page’s code.
Only public data and receiving clients.
domu_sk_live_Server-side only: Zapier, Make, n8n, your backend or an MCP client.
From a browser it returns 403.
Older keys (domu_live_) keep working the same while we review them.
Test mode
Test keys (domu_sk_test_ and domu_pk_test_) have every permission without requesting access and only see your test organization, with sample data: nothing you do with them reaches your clients. Limit: 100 requests and 30 writes per minute.
Access levels
What a key can do depends on the plan and on what support approves. There is never API access during the free trial or with an unverified email.
Higher limits or more permissions are requested from Settings › API and webhooks.
Limits and pagination
Every response tells you what’s left of the minute. Lists are paginated with page and pageSize and include meta.total and meta.totalPages.
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 41
Retry-After: 41 # only with 429
Idempotency-Status: replayed # retry with the same Idempotency-KeyErrors
Always with the same shape: { "error": { "code", "message" } }.
VALIDATION_ERRORInvalid inputUNAUTHORIZEDMissing or invalid keyPAYMENT_REQUIREDAccount is read-only: write rejectedFORBIDDENThe key lacks that permissionSECRET_KEY_IN_BROWSERSecret key used from a browserAPI_ACCESS_REQUIREDThe account’s access level doesn’t allow this keyPLAN_LIMIT_REACHEDA plan limit was reachedNOT_FOUNDResource not foundIDEMPOTENCY_CONFLICTIdempotency-Key reused with a different bodyIDEMPOTENCY_IN_PROGRESSAnother request with the same Idempotency-Key is still runningRATE_LIMITEDPer-minute limit exceededTENANT_RATE_LIMITEDThe organization’s per-minute write limit was exceeded