Task Management — Overview & Boards
Provider-agnostic API for managing tasks across Monday.com, Asana, Jira Cloud, Linear, and Notion. Use ?provider=monday when multiple providers are connected; if only one is connected it auto-resolves.
Base URL
/api/access/tasksAuthentication
Authorization: Bearer <access_token>Rate Limits
60 requests/minute300 requests/hour
Required
taskManagementEnabled: trueEndpoints Overview
| Method | Endpoint | Description |
|---|---|---|
| GET | /providers | List connected task providers |
| GET | /boards | List boards/projects |
| GET | /boards/{boardId} | Get a single board |
| GET | /boards/{boardId}/items | List items in a board |
| GET | /items/{itemId} | Get a single item |
| POST | /boards/{boardId}/items | Create a new item |
| PATCH | /items/{itemId} | Update an item |
| DELETE | /items/{itemId} | Delete an item |
| POST | /items/{itemId}/comments | Add a comment |
Common Errors
These can occur on any endpoint and are not repeated per-endpoint below.
| Status | Code | When |
|---|---|---|
| 401 | — | Invalid or missing token |
| 403 | OPERATION_NOT_ALLOWED | Token lacks the required operation flag |
| 422 | TASK_NOT_ENABLED | Token doesn’t have task management turned on |
| 422 | NO_TASK_CONNECTION | No provider connected, or specified provider not found |
| 400 | PROVIDER_REQUIRED | Multiple providers connected without ?provider= |
| 502 | — | Upstream provider error |
Note
When
PROVIDER_REQUIRED is returned, the response body includes a connectedProviders array so you know which values to pass.GET
/api/access/tasks/providersBearer TokenList Providers
List connected task providers. No operation permission required — only taskManagementEnabled.
Response 200 OK
[ { "taskProviderId": 1, "providerCode": "MONDAY", "providerDisplayName": "Monday.com" } ] Response Fields
| Field | Type | Description |
|---|---|---|
| taskProviderId | short | Internal provider type ID |
| providerCode | string | Code to use in ?provider= (e.g. MONDAY, NOTION, LINEAR, ASANA, JIRA_CLOUD) |
| providerDisplayName | string | Human-readable name (e.g. "Monday.com") |
Tip
Returns a flat array (not wrapped). Only verified, active connections are included. The only errors possible on this endpoint are 401 and 422 (
TASK_NOT_ENABLED).GET
/api/access/tasks/boardsBearer TokenList Boards
List boards/projects accessible to this token.
Required permission: ViewBoards
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| provider | string | auto | Provider code. Required when multiple providers are connected. |
| limit | int | 25 | Max results (1–200) |
| page | int? | — | Page number (page-based pagination: Asana, Jira) |
| cursor | string? | — | Cursor from previous response’s nextCursor (cursor-based: Monday, Notion, Linear) |
Response 200 OK
{ "provider": "MONDAY", "boards": [ { "id": "12345678", "name": "Sprint Board", "description": "Current sprint tasks", "state": "active", "groups": [ { "id": "new_group", "title": "To Do", "color": "#579BFC" } ], "columns": [ { "id": "status", "title": "Status", "type": "color" }, { "id": "person", "title": "Assignee", "type": "multiple-person" } ] } ], "nextCursor": "abc123", "nextPage": null, "accessInfo": null } Response Fields
| Field | Type | Description |
|---|---|---|
| provider | string? | Provider code used |
| boards | Board[] | List of boards (see Board object) |
| nextCursor | string? | Pass as ?cursor= for next page (cursor-based providers) |
| nextPage | int? | Pass as ?page= for next page (page-based providers) |
| accessInfo | string? | Restriction info for AI agents |
Warning
Board access is default-deny. When the token has no boards scoped the response is still 200 with an
accessInfo message directing you to configure board scoping at my.porteden.com → Access Tokens → Board Scoping.GET
/api/access/tasks/boards/{boardId}Bearer TokenGet Board
Get a single board with its groups and columns.
Required permission: ViewBoards
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| boardId | string | Board ID from the provider |
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| provider | string | auto | Provider code |
Response 200 OK
{ "provider": "MONDAY", "board": { "id": "12345678", "name": "Sprint Board", "description": "Current sprint tasks", "state": "active", "groups": [ { "id": "new_group", "title": "To Do", "color": "#579BFC" }, { "id": "done_group", "title": "Done", "color": "#00C875" } ], "columns": [ { "id": "status", "title": "Status", "type": "color" }, { "id": "person", "title": "Assignee", "type": "multiple-person" }, { "id": "date4", "title": "Due Date", "type": "date" } ] }, "accessInfo": null } Response Fields
| Field | Type | Description |
|---|---|---|
| provider | string? | Provider code |
| board | Board? | Board object (see Board object), null on error |
| accessInfo | string? | Restriction info |
Error Responses
| Status | Description |
|---|---|
| 403 | Board not in token scope |
| 404 | Board doesn’t exist at the provider |
| 502 | Provider error |
Data Types
Board Object
| Field | Type | Description |
|---|---|---|
| id | string | Board ID from the provider |
| name | string | Board name |
| description | string? | Board description |
| state | string? | Board state (e.g. "active", "archived") |
| groups | Group[]? | Groups/sections within the board |
| columns | Column[]? | Column definitions for the board |
Group Object
| Field | Type | Description |
|---|---|---|
| id | string | Group ID (use for ?groupId= filter and groupId in create) |
| title | string | Group display name |
| color | string? | Group color hex code |
Column Object
| Field | Type | Description |
|---|---|---|
| id | string | Column ID (use as key in fields for create/update) |
| title | string | Column display name |
| type | string | Column type (provider-specific, e.g. "color", "date", "people", "numbers", "text") |