read_plan_quotas
Generated automatically from the published contract sources.
Build metadata: Registered in this build. Registration describes the default dispatcher in this build. It does not guarantee that a caller has the required credential or grant, that a tool is listed for that connection, or that the required service is configured.
A script calls this action over HTTPS at POST https://turnzero.ai/api/v1/actions/read_plan_quotas, with a bearer credential and the action's payload as the JSON body. It also accepts GET.
Contract description
Read what each of the three plans includes, without holding an application on the plan. The answer holds the selected plans' enforced entries and served values, every customer plan's where the call names neither `plan` nor `measure`, each row with its quantity (null for an Unset cell), its stamp, and its author. Any signed-in credential reads them, an application-bounded token included. Each quantity is in its entry's base unit: `schedule-minimum-interval` in minutes, `free-idle-stop` in seconds, `development-halt-after-days` in days, `stored-data-capacity` in bytes, `data-transfer-capacity` in bytes, `log-retained-capacity` in bytes, `egress-bytes-per-day` in bytes, `gemini-flash-allowance` in token units, and every other entry a count. A platform setting that is the same on every plan has no row here, the schedule window among them: `window_seconds` in `read_schedules` and `submit_manifest` answers it.
A call naming neither `plan` nor `measure` answers every row. `plan` (`free`, `standard`, or `pro`) answers that plan's rows, `measure` that entry's row on each plan that sets it, and both at most one row. Every plan admits a development environment, turned on with `create_environment`; its `development-` rows give its bounds.
Access and action metadata
{
"name": "read_plan_quotas",
"resource": "account",
"tier": "observe",
"summary": "The served quantities of the plans the call selects, every customer plan's where it names neither `plan` nor `measure` — the enforced entries and the served values each plan sets, each selected row of the quota table with its stamp and author, in `read_platform_usage`'s order — under any signed-in credential, an application-bounded token included, so a caller reads a plan's quotas without holding an application on it.",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": false,
"idempotentHint": true
}
}
MCP catalog entry
{
"name": "read_plan_quotas",
"tier": "observe",
"scenario": "CHI-L0-09",
"summary": "Read what each of the three plans includes, without holding an application on the plan. The answer holds the selected plans' enforced entries and served values, every customer plan's where the call names neither `plan` nor `measure`, each row with its quantity (null for an Unset cell), its stamp, and its author. Any signed-in credential reads them, an application-bounded token included. Each quantity is in its entry's base unit: `schedule-minimum-interval` in minutes, `free-idle-stop` in seconds, `development-halt-after-days` in days, `stored-data-capacity` in bytes, `data-transfer-capacity` in bytes, `log-retained-capacity` in bytes, `egress-bytes-per-day` in bytes, `gemini-flash-allowance` in token units, and every other entry a count. A platform setting that is the same on every plan has no row here, the schedule window among them: `window_seconds` in `read_schedules` and `submit_manifest` answers it.\n\nA call naming neither `plan` nor `measure` answers every row. `plan` (`free`, `standard`, or `pro`) answers that plan's rows, `measure` that entry's row on each plan that sets it, and both at most one row. Every plan admits a development environment, turned on with `create_environment`; its `development-` rows give its bounds.",
"owners": []
}
request
| JSON pointer | Description and constraints |
|---|---|
| "" (root) | Type: object Additional properties: false |
| / |
Answers that plan's rows alone; with `measure`, at most one row. A call naming neither `plan` nor `measure` answers every customer plan's rows. Over the HTTP route an unlisted value is refused `invalid_request`. Type: string Allowed values: ["free","standard","pro"] |
| / |
Answers that entry's row on each plan that sets it; with `plan`, at most one row, and none where that plan sets no such value, the `detail` then saying so. Over the HTTP route an unlisted value is refused `invalid_request`. Type: string Allowed values: ["stored-data-capacity","backend-actions-capacity","data-transfer-capacity","database-connection-limit","schedule-minimum-interval","schedule-count-limit","deploys-per-day","log-retained-capacity","gemini-flash-allowance","free-idle-stop","development-halt-after-days","development-realm-account-limit","signin-code-sends-per-hour","egress-connections-per-minute","egress-bytes-per-day","push-messages-capacity"] |
response
| JSON pointer | Description and constraints |
|---|---|
| "" (root) | The rows of the quota table the plans serve that the call selected, every row where it named neither `plan` nor `measure`. They come in `read_platform_usage`'s order: per plan, the ten enforced entries and then the served values the plan sets, six on Free and five on Standard and Pro, the idle stop being Free's alone. Each row carries its quantity in base units (null for an Unset cell), its stamp, and its author (PRC-L0-16). The retired entry `issue-tracking-calls` is not answered. Type: object Required fields: ["contract_version","quotas"] Additional properties: false |
| / |
Required value: 1 |
| / |
Type: array |
| / |
Type: object Required fields: ["plan","measure","quantity","set_at","set_by"] |
| / |
Type: string Allowed values: ["free","standard","pro"] |
| / |
Type: string Allowed values: ["stored-data-capacity","backend-actions-capacity","data-transfer-capacity","database-connection-limit","schedule-minimum-interval","schedule-count-limit","deploys-per-day","log-retained-capacity","gemini-flash-allowance","free-idle-stop","development-halt-after-days","development-realm-account-limit","signin-code-sends-per-hour","egress-connections-per-minute","egress-bytes-per-day","push-messages-capacity"] |
| / |
The quantity in its entry's base unit, null for an Unset cell: `schedule-minimum-interval` in minutes, `free-idle-stop` in seconds, `development-halt-after-days` in days, `stored-data-capacity` in bytes, `data-transfer-capacity` in bytes, `log-retained-capacity` in bytes, `egress-bytes-per-day` in bytes, `gemini-flash-allowance` in token units, and every other entry a count. Type: ["integer","null"] |
| / |
Type: string |
| / |
Type: string |
| / |
What the rows are, and each quantity's base unit, `schedule-minimum-interval` in minutes among them. Type: string |
Complete payload contract
{
"request": {
"type": "object",
"properties": {
"plan": {
"type": "string",
"enum": [
"free",
"standard",
"pro"
],
"description": "Answers that plan's rows alone; with `measure`, at most one row. A call naming neither `plan` nor `measure` answers every customer plan's rows. Over the HTTP route an unlisted value is refused `invalid_request`."
},
"measure": {
"type": "string",
"enum": [
"stored-data-capacity",
"backend-actions-capacity",
"data-transfer-capacity",
"database-connection-limit",
"schedule-minimum-interval",
"schedule-count-limit",
"deploys-per-day",
"log-retained-capacity",
"gemini-flash-allowance",
"free-idle-stop",
"development-halt-after-days",
"development-realm-account-limit",
"signin-code-sends-per-hour",
"egress-connections-per-minute",
"egress-bytes-per-day",
"push-messages-capacity"
],
"description": "Answers that entry's row on each plan that sets it; with `plan`, at most one row, and none where that plan sets no such value, the `detail` then saying so. Over the HTTP route an unlisted value is refused `invalid_request`."
}
},
"additionalProperties": false
},
"response": {
"type": "object",
"required": [
"contract_version",
"quotas"
],
"properties": {
"contract_version": {
"const": 1
},
"quotas": {
"type": "array",
"items": {
"type": "object",
"required": [
"plan",
"measure",
"quantity",
"set_at",
"set_by"
],
"properties": {
"plan": {
"type": "string",
"enum": [
"free",
"standard",
"pro"
]
},
"measure": {
"type": "string",
"enum": [
"stored-data-capacity",
"backend-actions-capacity",
"data-transfer-capacity",
"database-connection-limit",
"schedule-minimum-interval",
"schedule-count-limit",
"deploys-per-day",
"log-retained-capacity",
"gemini-flash-allowance",
"free-idle-stop",
"development-halt-after-days",
"development-realm-account-limit",
"signin-code-sends-per-hour",
"egress-connections-per-minute",
"egress-bytes-per-day",
"push-messages-capacity"
]
},
"quantity": {
"type": [
"integer",
"null"
],
"description": "The quantity in its entry's base unit, null for an Unset cell: `schedule-minimum-interval` in minutes, `free-idle-stop` in seconds, `development-halt-after-days` in days, `stored-data-capacity` in bytes, `data-transfer-capacity` in bytes, `log-retained-capacity` in bytes, `egress-bytes-per-day` in bytes, `gemini-flash-allowance` in token units, and every other entry a count."
},
"set_at": {
"type": "string"
},
"set_by": {
"type": "string"
}
}
}
},
"detail": {
"type": "string",
"description": "What the rows are, and each quantity's base unit, `schedule-minimum-interval` in minutes among them."
}
},
"additionalProperties": false,
"description": "The rows of the quota table the plans serve that the call selected, every row where it named neither `plan` nor `measure`. They come in `read_platform_usage`'s order: per plan, the ten enforced entries and then the served values the plan sets, six on Free and five on Standard and Pro, the idle stop being Free's alone. Each row carries its quantity in base units (null for an Unset cell), its stamp, and its author (PRC-L0-16). The retired entry `issue-tracking-calls` is not answered."
}
}
Shared contracts
- Refusals: every refusal, by surface, with its cause and its remedy
- schemas/wire_error.schema.json
- schemas/wire_errors.json
- schemas/action_payloads.json (includes shared shapes)
- management_api_contract.md