Account & provisioning
Sign up, get an API key, set your webhook URL, go live. Dashboard session, not your API key.
These calls use your dashboard session, not your API key. Your application
does not call them. You call them once, while setting QuotaStack up.
You will normally do all of this in the
dashboard. The calls are written down here
so you can automate the setup instead, if you would rather.
Nine of them are yours. Sign up, confirm your email, make and revoke API keys,
read and change your tenant settings, and rotate your
webhook signing secret.
Five of them belong to QuotaStack. Those approve, refuse, or pause your access
to the live environment. Your key cannot call
them, whatever it holds.
Every other page in this reference is the product API, which your application
does call, with your API key.
0 of 14 operations documented in full.
Start public self-serve signup.
POST/v1/admin/auth/signup
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Body parameters
| Field | Type | Meaning |
|---|
namerequired | string | |
emailrequired | string (email) | |
passwordrequired | string | |
company_namerequired | string | |
captcha_tokenoptional | string | |
Response fields
| Field | Type | Meaning |
|---|
messagerequired | string | |
Errors
400 — Malformed request. 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself. 422 — Request shape was valid but field validation failed. 500 — Unexpected server error.
Verify signup email and create an admin session.
POST/v1/admin/auth/verify-email
| Idempotency-Key | Not required for this operation. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Body parameters
| Field | Type | Meaning |
|---|
tokenrequired | string | |
Response fields
| Field | Type | Meaning |
|---|
userrequired | object | |
tenantrequired | object | |
tokenrequired | string | |
Resend signup email verification when available.
POST/v1/admin/auth/resend-verification
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Body parameters
| Field | Type | Meaning |
|---|
emailrequired | string (email) | |
Response fields
| Field | Type | Meaning |
|---|
messagerequired | string | |
Errors
409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself. 422 — Request shape was valid but field validation failed.
List the tenant's API keys.
GET/v1/admin/api-keys
| Idempotency-Key | Not used. This is a read. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Response fields
| Field | Type | Meaning |
|---|
dataoptional | array | |
Errors
401 — Missing or invalid authentication.
Create a tenant API key from the admin dashboard.
POST/v1/admin/api-keys
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Body parameters
| Field | Type | Meaning |
|---|
environmentrequired | string | Which environment this resource lives in. Determined by the API key prefix used (qs_live_… → live, qs_test_… → sandbox). |
nameoptional | string | |
scopesoptional | array | |
Response fields
| Field | Type | Meaning |
|---|
idoptional | string (uuid) | |
tenant_idoptional | string (uuid) | |
environmentoptional | string | Which environment this resource lives in. Determined by the API key prefix used (qs_live_… → live, qs_test_… → sandbox). |
key_prefixoptional | string | |
nameoptional | string | |
scopesoptional | array | |
created_atoptional | string (date-time) | |
keyoptional | string | |
Errors
403 — Authenticated but not permitted (insufficient scope). 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself. 422 — Request shape was valid but field validation failed.
Revoke a tenant API key from the admin dashboard.
POST/v1/admin/api-keys/{id}/revoke
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Path parameters
| Field | Type | Meaning |
|---|
idrequired | string (uuid) | |
Errors
403 — Authenticated but not permitted (insufficient scope). 404 — Resource not found. 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself. 422 — Request shape was valid but field validation failed.
Read the tenant's configuration.
GET/v1/admin/tenants/{tenant_id}/config
| Idempotency-Key | Not used. This is a read. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Path parameters
| Field | Type | Meaning |
|---|
tenant_idrequired | string (uuid) | |
Response fields
| Field | Type | Meaning |
|---|
tenant_idoptional | string (uuid) | |
webhook_urloptional | string | |
webhook_secret_setoptional | boolean | True when a webhook signing secret exists for this tenant. The secret itself is never returned here. To get a secret, call POST /v1/admin/tenants/{tenant_id}/webhook-secret/rotate. That endpoint returns the new secret one time. |
overage_policyoptional | string | |
default_currencyoptional | string | |
timezoneoptional | string | |
data_regionoptional | string | |
low_balance_threshold_mcoptional | integer (int64)0–∞ | Default threshold (millicredits) for credit.low_balance webhooks. 0 (default) disables low_balance for customers that inherit this value. Per-customer override via Customer.low_balance_threshold_mc. credit.exhausted is always on and ignores this field. |
credit_expiring_soon_hoursoptional | integer0–8760 | Lead time in hours for credit.expiring_soon webhooks (per credit block). 0 (default) disables the alert. Recommended: 72 for packs / annual grants. Maximum: 8760 (1 year). No per-customer override in Phase 1. |
updated_atoptional | string (date-time) | |
Errors
401 — Missing or invalid authentication. 403 — Authenticated but not permitted (insufficient scope). 404 — Resource not found.
Update the tenant's configuration (partial).
PATCH/v1/admin/tenants/{tenant_id}/config
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Path parameters
| Field | Type | Meaning |
|---|
tenant_idrequired | string (uuid) | |
Body parameters
| Field | Type | Meaning |
|---|
webhook_urloptional | string | |
overage_policyoptional | string | |
default_currencyoptional | string | |
timezoneoptional | string | |
low_balance_threshold_mcoptional | integer (int64)0–∞ | Millicredits. 0 = low_balance alerts off (default). |
credit_expiring_soon_hoursoptional | integer0–8760 | Hours before expires_at to emit credit.expiring_soon (0 = off). Recommended: 72. Maximum: 8760 (1 year). |
Response fields
| Field | Type | Meaning |
|---|
tenant_idoptional | string (uuid) | |
webhook_urloptional | string | |
webhook_secret_setoptional | boolean | True when a webhook signing secret exists for this tenant. The secret itself is never returned here. To get a secret, call POST /v1/admin/tenants/{tenant_id}/webhook-secret/rotate. That endpoint returns the new secret one time. |
overage_policyoptional | string | |
default_currencyoptional | string | |
timezoneoptional | string | |
data_regionoptional | string | |
low_balance_threshold_mcoptional | integer (int64)0–∞ | Default threshold (millicredits) for credit.low_balance webhooks. 0 (default) disables low_balance for customers that inherit this value. Per-customer override via Customer.low_balance_threshold_mc. credit.exhausted is always on and ignores this field. |
credit_expiring_soon_hoursoptional | integer0–8760 | Lead time in hours for credit.expiring_soon webhooks (per credit block). 0 (default) disables the alert. Recommended: 72 for packs / annual grants. Maximum: 8760 (1 year). No per-customer override in Phase 1. |
updated_atoptional | string (date-time) | |
Errors
401 — Missing or invalid authentication. 403 — Authenticated but not permitted (insufficient scope). 404 — Resource not found. 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself. 422 — Request shape was valid but field validation failed.
Rotate the tenant's webhook signing secret.
POST/v1/admin/tenants/{tenant_id}/webhook-secret/rotate
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Path parameters
| Field | Type | Meaning |
|---|
tenant_idrequired | string (uuid) | |
Response fields
| Field | Type | Meaning |
|---|
webhook_secretrequired | string | New base64 signing secret. Store it now — it is not shown again. |
Errors
401 — Missing or invalid authentication. 403 — Authenticated but not permitted (insufficient scope). 404 — Resource not found. 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself. 422 — Request shape was valid but field validation failed.
Approve live access for a tenant.
POST/v1/tenants/{id}/live-access/approve
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Path parameters
| Field | Type | Meaning |
|---|
idrequired | string (uuid) | |
Response fields
| Field | Type | Meaning |
|---|
tenant_idrequired | string (uuid) | |
live_access_statusrequired | string | |
reviewed_atoptional | string (date-time) | |
Errors
403 — Authenticated but not permitted (insufficient scope). 404 — Resource not found. 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself.
Reject live access for a tenant.
POST/v1/tenants/{id}/live-access/reject
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Path parameters
| Field | Type | Meaning |
|---|
idrequired | string (uuid) | |
Body parameters
| Field | Type | Meaning |
|---|
reasonrequired | string | |
Response fields
| Field | Type | Meaning |
|---|
tenant_idrequired | string (uuid) | |
live_access_statusrequired | string | |
Errors
403 — Authenticated but not permitted (insufficient scope). 404 — Resource not found. 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself.
Suspend live access for a tenant.
POST/v1/tenants/{id}/live-access/suspend
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Path parameters
| Field | Type | Meaning |
|---|
idrequired | string (uuid) | |
Body parameters
| Field | Type | Meaning |
|---|
reasonrequired | string | |
Response fields
| Field | Type | Meaning |
|---|
tenant_idrequired | string (uuid) | |
live_access_statusrequired | string | |
Errors
403 — Authenticated but not permitted (insufficient scope). 404 — Resource not found. 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself.
Suspend sandbox access for a tenant.
POST/v1/tenants/{id}/sandbox-access/suspend
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Path parameters
| Field | Type | Meaning |
|---|
idrequired | string (uuid) | |
Body parameters
| Field | Type | Meaning |
|---|
reasonrequired | string | |
Response fields
| Field | Type | Meaning |
|---|
tenant_idrequired | string (uuid) | |
sandbox_access_statusrequired | string | |
Errors
403 — Authenticated but not permitted (insufficient scope). 404 — Resource not found. 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself.
Enable sandbox access for a tenant.
POST/v1/tenants/{id}/sandbox-access/enable
| Idempotency-Key | Required. Returns 422 without it. |
| Environment | Sandbox and Live |
| Auth | Dashboard session |
| Fires | No webhooks. |
Header parameters
| Field | Type | Meaning |
|---|
Idempotency-Keyrequired | string | Required idempotency key for this mutating admin/public operation. Reusing the same key with a different body returns 409 Conflict; successful 2xx and client 4xx responses are cached for 24 hours. |
Path parameters
| Field | Type | Meaning |
|---|
idrequired | string (uuid) | |
Response fields
| Field | Type | Meaning |
|---|
tenant_idrequired | string (uuid) | |
sandbox_access_statusrequired | string | |
Errors
403 — Authenticated but not permitted (insufficient scope). 404 — Resource not found. 409 — State conflict (e.g., duplicate resource, stale version). On any
route that requires Idempotency-Key, a 409 here can also mean a
concurrent duplicate request under the same key is still in flight:
the duplicate waited up to 10 seconds for the original to finish and
gave up. That case carries a Retry-After header — retry after that
many seconds; the original has by then either completed (so the
retry replays it) or failed, in which case the retry runs itself.
● raw markdown ·
account.md ↗ — this is exactly what an agent fetches
Loading…