Skip to content

Set a tenant's limits

View as Markdown
PUT
/v1/system/tenants/{tenantId}/limits
curl --request PUT \
--url https://example.com/v1/system/tenants/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/limits \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "apiRequestsPerMinute": 1, "webhookReceivesPerMinute": 1, "runsAtOnce": 1, "runsPending": 1, "toolCallsInFlight": 1, "approvalsPending": 1, "projectsInProduction": 1 }'

Replaces the tenant’s limits with exactly these: a limit left out isn’t set, and isn’t enforced. Each is a whole number from 1 to 1000000. The tenant reads them on GET /v1/tenant. Takes system:tenants:limits. A closing tenant is frozen: 409 tenant-closing.

tenantId
required
string format: uuid

The tenant’s id.

Idempotency-Key
string
>= 1 characters

Caller-supplied idempotency key, scoped to the caller: the same key from someone else in the tenant is their own request (from 0.1.5). Retries with the same key return the original response byte-identical (per docs/API-ROUTE-CONVENTIONS.md §3.1). A retry sent while the first request still runs is answered 409 idempotency-key-in-flight with Retry-After, on a runtime whose store holds keys (from 0.1.5); retry after it, and you get the first request’s answer. An answer that carries a secret (a new API key or public run token, a session token, a generated signing secret) isn’t kept: a retry gets 409 idempotency-key-replay-withheld, with the first request’s status and when it succeeded (from 0.1.5).

Media typeapplication/json

The tenant’s limits that are set. A limit that isn’t set is absent, and isn’t enforced.

object
apiRequestsPerMinute

API requests a minute. Past it: 429 rate-limit-exceeded.

integer
>= 1
webhookReceivesPerMinute

Webhook deliveries received a minute, across the tenant’s triggers. Past it: 429.

integer
>= 1
runsAtOnce

Runs executing at once. Past it, a new run waits as pending.

integer
>= 1
runsPending

Runs waiting as pending. Past it, a new run is refused with 429.

integer
>= 1
toolCallsInFlight

Tool calls in flight to the tenant’s pack services. Past it, a call waits for a slot.

integer
>= 1
approvalsPending

Approvals waiting for a decision. Past it, the step that asks fails, naming the limit.

integer
>= 1
projectsInProduction

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.

integer
>= 1
Examplegenerated
{
"apiRequestsPerMinute": 1,
"webhookReceivesPerMinute": 1,
"runsAtOnce": 1,
"runsPending": 1,
"toolCallsInFlight": 1,
"approvalsPending": 1,
"projectsInProduction": 1
}

The tenant’s limits now.

Media typeapplication/json
object
tenantId
required
string format: uuid
limits
required

The tenant’s limits that are set. A limit that isn’t set is absent, and isn’t enforced.

object
apiRequestsPerMinute

API requests a minute. Past it: 429 rate-limit-exceeded.

integer
>= 1
webhookReceivesPerMinute

Webhook deliveries received a minute, across the tenant’s triggers. Past it: 429.

integer
>= 1
runsAtOnce

Runs executing at once. Past it, a new run waits as pending.

integer
>= 1
runsPending

Runs waiting as pending. Past it, a new run is refused with 429.

integer
>= 1
toolCallsInFlight

Tool calls in flight to the tenant’s pack services. Past it, a call waits for a slot.

integer
>= 1
approvalsPending

Approvals waiting for a decision. Past it, the step that asks fails, naming the limit.

integer
>= 1
projectsInProduction

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.

integer
>= 1
inUse

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
projectsInProduction
required

The tenant’s projects in production.

integer
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
}
}

Malformed request body.

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

Missing / malformed / expired / revoked bearer token.

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
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).

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

No tenant with that id, or a purged one (tenant-not-found).

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

The tenant is closing (tenant-closing); or an Idempotency-Key reused with another body.

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

The request body is over the API’s limit (request-too-large; details.maxBytes says how much).

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

Server error (unmapped domain code or framework crash).

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

See also