get_capacity_plan
What it answers
Read the account's weekly capacity and planned hours. Requires range.from and range.to (real calendar dates, years 0100–9998; earliest start 0100-01-04), at most 156 intersecting Monday-start weeks. The window expands to Monday through Sunday. Optional breakdowns: role, task. Pending projects are off by default, as on the Capacity Plan page: planned hours count Active, Complete and blank-Status projects (a blank Status counts as Active). includePendingProjects true also counts Pending. Optional scenarioId (from list_scenarios) applies that saved scenario's Included payroll rows exactly as the page does; omitted includePendingProjects then takes the scenario's stored Include pending setting, and the scenario's model-input overrides do not change this report (an overrides-not-applied caveat says so). Optional statuses: Pending, Active, Complete; takes precedence over the default, filters included projects' planned hours and counts blank statuses as Active; it cannot be combined with includePendingProjects. An empty list means no planned projects. Payroll capacity is unchanged. Omit account only when the key reaches exactly one account. No person-level or compensation data is returned. Read parakeeto://methodology for shared response conventions and INVALID_ARGUMENT guidance.
Read-only.
Arguments
| Argument | Type | Required | Default | Allowed values |
|---|---|---|---|---|
account |
string (uuid) | no | — | — |
includeDefinitions |
boolean | no | true |
— |
range |
object | yes | — | — |
range.from |
string | yes | — | pattern ^\d{4}-\d{2}-\d{2}$ |
range.to |
string | yes | — | pattern ^\d{4}-\d{2}-\d{2}$ |
statuses |
array of string | no | — | — |
breakdowns |
array of string | no | — | — |
scenarioId |
string (uuid) | no | — | — |
includePendingProjects |
boolean | no | — | — |
Returned fields
The result is an envelope: ok: true with data, or ok: false with error. Error codes: MODEL_CALCULATOR_ACCESS_REQUIRED, PAYROLL_GRID_MISSING, PAYROLL_GRID_REQUIRED, PROJECT_GRID_REQUIRED, EXPENSE_GRID_REQUIRED, PAYROLL_ENTRY_REFERENCE_STALE, ACCOUNT_NOT_FOUND, ACCOUNT_CONFIGURATION_MISSING, NO_IMPORTED_TIME, NOTHING_IMPORTED, ACCOUNT_REQUIRED, NO_REACHABLE_ACCOUNTS, FEATURE_NOT_ENTITLED, PERMISSION_DENIED, CALCULATION_FAILED, INTERNAL_ERROR, INVALID_ARGUMENT.
data: objectdata.account: string (uuid)data.window: objectdata.window.startDate: string (pattern^\d{4}-\d{2}-\d{2}$)data.window.endDate: string (pattern^\d{4}-\d{2}-\d{2}$)
data.weeks: array of objectdata.weeks[].weekStart: string (pattern^\d{4}-\d{2}-\d{2}$)data.weeks[].overall: objectdata.weeks[].overall.grossCapacity: string, optional (pattern^-?\d+(?:\.\d+)?$)data.weeks[].overall.deliveryCapacity: string (pattern^-?\d+(?:\.\d+)?$)data.weeks[].overall.plannedHours: string (pattern^-?\d+(?:\.\d+)?$)
data.breakdowns: object, optionaldata.breakdowns.role: object, optionaldata.breakdowns.role.categories: array of stringdata.breakdowns.role.weeks: array of objectdata.breakdowns.role.weeks[].weekStart: string (pattern^\d{4}-\d{2}-\d{2}$)data.breakdowns.role.weeks[].overall: same shape asdata.weeks[].overalldata.breakdowns.role.weeks[].categories: array of objectdata.breakdowns.role.weeks[].categories[].grossCapacity: string, optional (pattern^-?\d+(?:\.\d+)?$)data.breakdowns.role.weeks[].categories[].deliveryCapacity: string (pattern^-?\d+(?:\.\d+)?$)data.breakdowns.role.weeks[].categories[].plannedHours: string (pattern^-?\d+(?:\.\d+)?$)data.breakdowns.role.weeks[].categories[].category: string
data.breakdowns.task: same shape asdata.breakdowns.role, optional
data.projectStatusFilter: object- One of:
- Variant 1 (
modeis"all",includesBlankistrue):data.projectStatusFilter.mode: string ("all")data.projectStatusFilter.includesBlank: boolean (true)
- Variant 2 (
modeis"filtered"):data.projectStatusFilter.mode: string ("filtered")data.projectStatusFilter.statuses: array of stringdata.projectStatusFilter.includesBlank: boolean
- Variant 1 (
- One of:
data.includesPendingProjects: booleandata.scenario: object, optionaldata.scenario.id: string (uuid)data.scenario.name: stringdata.scenario.revision: stringdata.scenario.includePending: booleandata.scenario.overrides: objectdata.scenario.overrides.grossCapacity: string, optional (pattern^-?\d+(?:\.\d+)?$)data.scenario.overrides.modelAbr: string, optional (pattern^-?\d+(?:\.\d+)?$)data.scenario.overrides.modelUtilization: string, optional (pattern^-?\d+(?:\.\d+)?$)data.scenario.overrides.deliveryPayrollBudget: string, optional (pattern^-?\d+(?:\.\d+)?$)data.scenario.overrides.deliveryExpenseBudget: string, optional (pattern^-?\d+(?:\.\d+)?$)data.scenario.overrides.smPayrollBudget: string, optional (pattern^-?\d+(?:\.\d+)?$)data.scenario.overrides.smExpenseBudget: string, optional (pattern^-?\d+(?:\.\d+)?$)data.scenario.overrides.adminPayrollBudget: string, optional (pattern^-?\d+(?:\.\d+)?$)data.scenario.overrides.adminExpenseBudget: string, optional (pattern^-?\d+(?:\.\d+)?$)data.scenario.overrides.facilitiesExpenseBudget: string, optional (pattern^-?\d+(?:\.\d+)?$)
data.scenario.missingRows: string (pattern^-?\d+(?:\.\d+)?$)
data.hasPlannedActivity: booleandata.message: stringdata.definitions: object, optionaldata.definitions.presentation: stringdata.definitions.capacity: stringdata.definitions.plannedHours: stringdata.definitions.grossCapacity: stringdata.definitions.comparisons: stringdata.definitions.categoryOrder: string
data.inputs: array (minItems: 2;maxItems: 2)data.freshness: array of objectdata.freshness[].source: string ("time-entries","role-task-mappings","annual-days","dashboard-inputs")data.freshness[].everCompleted: booleandata.freshness[].completedAt: string (date-time) or null
data.gridFreshness: array of objectdata.gridFreshness[].kind: string ("payroll","expense","project")data.gridFreshness[].gridId: string (uuid)data.gridFreshness[].name: stringdata.gridFreshness[].storage: string ("sheet","database")data.gridFreshness[].sheetRefreshedAt: string (date-time) or null
data.freshnessExplanation: stringdata.caveats: array of object- One of:
- Variant 1 (
codeis"allocation-mismatch",sourceis"payroll"):data.caveats[].code: string ("allocation-mismatch")data.caveats[].message: stringdata.caveats[].source: string ("payroll")
- Variant 2 (
codeis"category-order",sourceis"capacity-plan"):data.caveats[].code: string ("category-order")data.caveats[].source: string ("capacity-plan")data.caveats[].message: stringdata.caveats[].role: string ("source","deterministic-fallback")data.caveats[].task: string ("source","deterministic-fallback")data.caveats[].roleExplanation: stringdata.caveats[].taskExplanation: string
- Variant 3 (
codeis"overrides-not-applied"):data.caveats[].code: string ("overrides-not-applied")data.caveats[].message: string
- Variant 4 (
codeis"scenario-rows-missing"):data.caveats[].code: string ("scenario-rows-missing")data.caveats[].message: string
- Variant 1 (
- One of:
On failure:
error: objecterror.code: string ("MODEL_CALCULATOR_ACCESS_REQUIRED","PAYROLL_GRID_MISSING","PAYROLL_GRID_REQUIRED","PROJECT_GRID_REQUIRED","EXPENSE_GRID_REQUIRED","PAYROLL_ENTRY_REFERENCE_STALE","ACCOUNT_NOT_FOUND","ACCOUNT_CONFIGURATION_MISSING","NO_IMPORTED_TIME","NOTHING_IMPORTED","ACCOUNT_REQUIRED","NO_REACHABLE_ACCOUNTS","FEATURE_NOT_ENTITLED","PERMISSION_DENIED","CALCULATION_FAILED","INTERNAL_ERROR","INVALID_ARGUMENT")error.argument: string, optional (minLength: 1)error.message: stringerror.accounts: array of object, optionalerror.accounts[].id: string (uuid)error.accounts[].name: string
error.payrollGrids: array of object, optionalerror.payrollGrids[]: same shape aserror.accounts[]
error.projectGrids: array of object, optionalerror.projectGrids[]: same shape aserror.accounts[]
error.expenseGrids: array of object, optionalerror.expenseGrids[]: same shape aserror.accounts[]
error.context: object, optionalerror.context.account: object- Further fields: see the response.
error.context.imports: array of object- Further fields: see the response.
error.context.hasTimeEntries: booleanerror.context.reports: array of object- Further fields: see the response.
Definitions
Returned in definitions when includeDefinitions is true (the default). Each value is the definition text for that field.
presentationcapacityplannedHoursgrossCapacitycomparisonscategoryOrder
Caveats
allocation-mismatch. Also carriessource.category-order. Also carriessource,role,task,roleExplanation,taskExplanation.overrides-not-applied.scenario-rows-missing.
Read every caveat before interpreting a figure. See methodology on how to communicate caveats and data-quality conditions.
Example call
{
"name": "get_capacity_plan",
"arguments": {
"range": {
"from": "2026-09-01",
"to": "2026-09-30"
}
}
}
Add account with an identifier from list_accounts; omit it only when the connection reaches exactly one account.
Questions and answers
What does get_capacity_plan answer?
Read the account's weekly capacity and planned hours. Requires range.from and range.to (real calendar dates, years 0100–9998; earliest start 0100-01-04), at most 156 intersecting Monday-start weeks. The window expands to Monday through Sunday. Optional breakdowns: role, task. Pending projects are off by default, as on the Capacity Plan page: planned hours count Active, Complete and blank-Status projects (a blank Status counts as Active). includePendingProjects true also counts Pending. Optional scenarioId (from list_scenarios) applies that saved scenario's Included payroll rows exactly as the page does; omitted includePendingProjects then takes the scenario's stored Include pending setting, and the scenario's model-input overrides do not change this report (an overrides-not-applied caveat says so). Optional statuses: Pending, Active, Complete; takes precedence over the default, filters included projects' planned hours and counts blank statuses as Active; it cannot be combined with includePendingProjects. An empty list means no planned projects. Payroll capacity is unchanged. Omit account only when the key reaches exactly one account. No person-level or compensation data is returned. Read parakeeto://methodology for shared response conventions and INVALID_ARGUMENT guidance.
Which arguments does get_capacity_plan accept?
Argument Type Required Default Allowed values account string (uuid) no — — includeDefinitions boolean no true — range object yes — — range.from string yes — pattern ^\d{4}-\d{2}-\d{2}$ range.to string yes — pattern ^\d{4}-\d{2}-\d{2}$ statuses array of string no — — breakdowns array of string no — — scenarioId string (uuid) no — — includePendingProjects boolean no — —
What does get_capacity_plan return?
The result is an envelope: ok: true with data, or ok: false with error.