Count task-stage groups — GET /v1/task-stages/group-counts | AgencyTitan API
# Count task-stage groups
> `GET` `/v1/task-stages/group-counts`
URL: https://www.agencytitan.com/docs/tag/task-stages/GET/v1/task-stages/group-counts
Operation ID: `task_stages_group_counts`
Tag: [task_stages](https://www.agencytitan.com/docs/tag/task-stages.md)
## Description
Returns paginated stage-grain group/kanban buckets using the same vocabulary and sentinels as tasks.group_counts.
## Parameters
- `assigned_to` (query, optional, `array<string>`) — Current-stage assignees (OR). Use for "who is working the active stage". For parent-task assignees, use `process_assigned_to`. See [`GET /v1/users`](/docs/tag/…
- `client_ids` (query, optional, `array<string>`) — Only return rows linked to any of these clients (OR). Pass a one-element array to filter to a single client. Optional filter. Omit unless the user asked for it…
- `completed_at_from` (query, optional, `string`) — Completed-at lower bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `completed_at_to` (query, optional, `string`) — Completed-at upper bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `created_at_from` (query, optional, `string`) — Created-at lower bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `created_at_to` (query, optional, `string`) — Created-at upper bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `due_date_from` (query, optional, `string`) — Current-stage due date lower bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `due_date_to` (query, optional, `string`) — Current-stage due date upper bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `filter_group` (query, optional, `anyOf`) — Advanced filter tree for task columns and custom fields. Prefer first-class query params (`priority_level`, `tags`, `status_scope`, assignees, dates) when they…
- `group_by` (query, optional, `string`) — Narrow this page to one grouped/kanban bucket. Requires group_value. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `group_value` (query, optional, `string`) — Bucket value for group_by. Use __none__ for an empty bucket, or not_started for an empty task status bucket. Optional filter. Omit unless the user asked for it…
- `hide_blocked` (query, optional, `boolean`) — When true, omit rows whose current stage is dependency-blocked. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `hide_future_start` (query, optional, `boolean`) — When true, omit rows whose current stage has a future start date. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `instance_ids` (query, optional, `array<string>`) — Only return these task ids. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `limit` (query, optional, `integer`) — Maximum number of items to return (1-200).
- `offset` (query, optional, `integer`) — Number of items to skip before collecting the result set.
- `order` (query, optional, `string`) — Sort direction. Default `desc`.
- `priority_level` (query, optional, `array<string>`) — Only return rows whose current-stage priority_level matches one of these values (OR). Resolve values from [`GET /v1/tenant-context`](/docs/tag/tenant_context/G…
- `process_assigned_to` (query, optional, `array<string>`) — Parent-task assignees (OR). Use for overall job ownership. For the current stage's assignees, use `assigned_to`. See [`GET /v1/users`](/docs/tag/users/GET/v1/u…
- `process_definition_id` (query, optional, `string`) — Only return rows for tasks created from this process definition. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `process_due_date_from` (query, optional, `string`) — Parent-task due date lower bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `process_due_date_to` (query, optional, `string`) — Parent-task due date upper bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `process_status_scope` (query, optional, `string`) — Filter by parent-task status scope (active / past_due / completed / all). Use when you care about the overall job state, not the current stage. For exact paren…
- `process_statuses` (query, optional, `array<string>`) — Exact parent-task status values (OR). Prefer with `process_definition_id`. Resolve values with [`GET /v1/tasks/options`](/docs/tag/tasks/GET/v1/tasks/options) …
- `search` (query, optional, `string`) — Free-text search filter.
- `sort` (query, optional, `string`) — Field to sort by. Default `group_count`.
- `start_date_from` (query, optional, `string`) — Current-stage start date lower bound (inclusive). This is the stage start_date field, not `started_at`. Omit for no bound. Optional filter. Omit unless the use…
- `start_date_to` (query, optional, `string`) — Current-stage start date upper bound (inclusive). This is the stage start_date field, not `started_at`. Omit for no bound. Optional filter. Omit unless the use…
- `started_at_from` (query, optional, `string`) — Started-at lower bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `started_at_to` (query, optional, `string`) — Started-at upper bound (inclusive). Omit for no bound. Optional filter. Omit unless the user asked for it; never guess identifiers.
- `status_scope` (query, optional, `string`) — Filter by current-stage status scope (active / past_due / completed / all). Use this for cross-process "open work". For exact stage status keys, use `statuses`…
- `statuses` (query, optional, `array<string>`) — Exact current-stage status values (OR). Keys can mean different things across processes; prefer also passing `process_definition_id`, and resolve values with […
- `tags` (query, optional, `array<string>`) — Only return rows whose task tags include at least one of these values (OR). Resolve values from [`GET /v1/tenant-context`](/docs/tag/tenant_context/GET/v1/tena…
- `watched_by` (query, optional, `string`) — Only return task or stage rows watched by this user. Optional filter. Omit unless the user asked for it; never guess identifiers.
## Request body
_None_
## Responses
- `200` (`application/json`): Successful response.
- Type: `object`
- Properties:
- `data` (`array<object>`, required)
- `pagination` (`object`, required)
- `400` (`application/json`): Request validation failed (unknown or out-of-range parameters/properties are rejected).
- Type: `object`
- Properties:
- `error` (`object`, required)
- `401` (`application/json`): Missing, invalid, expired, or revoked bearer token.
- Type: `object`
- Properties:
- `error` (`string`, required)
- `error_description` (`string`, required)
- `403` (`application/json`): The authenticated user does not have permission for this operation.
- Type: `object`
- Properties:
- `error` (`object`, required)
- `404` (`application/json`): The requested resource was not found.
- Type: `object`
- Properties:
- `error` (`object`, required)
- `429` (`application/json`): Per-tenant rate limit exceeded (600 requests/minute across all /v1 REST endpoints). The Retry-After header indicates how many seconds to wait.
- Type: `object`
- Properties:
- `error` (`object`, required)
- `500` (`application/json`): An unexpected internal error occurred.
- Type: `object`
- Properties:
- `error` (`object`, required)
## Authentication
- `bearerAuth` — http (bearer) — All /v1 endpoints (except `/v1/openapi.json` and `/v1/llms.txt`) require a bearer token. Two equal first-class paths: (1) an OAuth 2.0 access token from the au…
## Useful links
- Interactive page: https://www.agencytitan.com/docs/tag/task-stages/GET/v1/task-stages/group-counts
- API reference home: https://www.agencytitan.com/docs/
- Tag page: https://www.agencytitan.com/docs/tag/task-stages.md
- This operation as Markdown: https://www.agencytitan.com/docs/tag/task-stages/GET/v1/task-stages/group-counts.md
- OpenAPI JSON: https://www.agencytitan.com/docs/openapi.json
- Full API Markdown: https://api.agencytitan.com/v1/llms.txt
- API keys: https://app.agencytitan.com/settings/api-mcp