Read a tenant's limits
const url = 'https://example.com/v1/system/tenants/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/limits';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/v1/system/tenants/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/limits \ --header 'Authorization: Bearer <token>'The tenant’s limits as stored, in the shape PUT takes: to change one, read them, change it and put them all back. A limit that isn’t set is absent, and isn’t enforced. From a runtime that counts it, inUse says how much of each counted limit the tenant uses now (projectsInProduction), which can be over a limit lowered below it. Takes system:tenants:limits. A closing tenant’s limits can be read.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The tenant’s id.
Responses
Section titled “Responses”The tenant’s limits.
object
The tenant’s limits that are set. A limit that isn’t set is absent, and isn’t enforced.
object
API requests a minute. Past it: 429 rate-limit-exceeded.
Webhook deliveries received a minute, across the tenant’s triggers. Past it: 429.
Runs executing at once. Past it, a new run waits as pending.
Runs waiting as pending. Past it, a new run is refused with 429.
Tool calls in flight to the tenant’s pack services. Past it, a call waits for a slot.
Approvals waiting for a decision. Past it, the step that asks fails, naming the limit.
Projects in production at once. Past it, putting another project in production is refused with 403 production-limit-reached. Lowering it takes no project out of production.
How much of each limit that counts something the tenant uses now, whether the limit is set or not: on GET …/limits only, and only from a runtime that counts it. A limit can be lowered below it: nothing is taken back, and the next one waits until the count is under the limit.
object
The tenant’s projects in production.
Examplegenerated
{ "tenantId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "limits": { "apiRequestsPerMinute": 1, "webhookReceivesPerMinute": 1, "runsAtOnce": 1, "runsPending": 1, "toolCallsInFlight": 1, "approvalsPending": 1, "projectsInProduction": 1 }, "inUse": { "projectsInProduction": 1 }}Missing / malformed / expired / revoked bearer token.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}A tenant’s key or session (system-principal-required), or a system key without system:tenants:limits (system-scope-missing).
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}No tenant with that id, or a purged one (tenant-not-found).
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}