The base is https://pinateca.com/api. Call it with the token you issued in the workspace settings in Authorization: Bearer. The machine readable definition is at openapi.json.
Boards
/boardsList boards
Get the boards in the workspace
Returns 200 List boards
/boardsCreate a board
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string | Board name |
boardType | string | Board type |
Returns 201 The board that was created
/boards/{boardId}/listsLists in a board
Get the lists of a board as a flat array of names and positions. Cards are not included.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 An array of lists
/boards/{boardId}Board detail
Get the board with its lists, cards, and column and row headers
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Board detail
/boards/{boardId}Update a board
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Body (JSON)
| Name | Type | Description |
|---|---|---|
name | string | |
description | string | |
settings | object | Timetable settings such as visibleDays and startDay |
Returns 200 The board after the update
/boards/{boardId}Delete a board
Only archived boards can be deleted. Lists and cards are deleted too
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Success
/boards/{boardId}/columnsColumn headers (grid and timetable boards)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Columns
/boards/{boardId}/columnsAdd a column
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string |
Returns 201 The column that was created
/boards/{boardId}/rowsRow headers (grid and timetable boards)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Rows
/boards/{boardId}/rowsAdd a row
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string |
Returns 201 The row that was created
/boards/{boardId}/fieldsCustom fields
Get the custom fields defined on a kanban board, in position order
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Fields
/boards/{boardId}/fieldsAdd a custom field
Define a new field on a kanban board
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string | Field name |
fieldTyperequired | string | Field type |
options | object | |
showOnCard | boolean | Whether to show it on the cards in the kanban view |
readOnly | boolean | If true, it cannot be edited in the screen and only the API can change it |
Returns 201 The field that was created
/boards/{boardId}/fields/{fieldId}Update a custom field
Update the field. fieldType cannot be changed.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | |
fieldIdrequired | path | number |
Body (JSON)
| Name | Type | Description |
|---|---|---|
name | string | |
options | object | |
position | number | Display order within the board |
showOnCard | boolean | |
readOnly | boolean | If true, it cannot be edited in the screen |
Returns 200 The field after the update
/boards/{boardId}/fields/{fieldId}Delete a custom field
Delete the field. The values on every card that used it are deleted with it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | |
fieldIdrequired | path | number |
Returns 200 Deleted
/boards/{boardId}/field-valuesField values for every card in a board
For drawing the kanban view. Pairs of (cardId, fieldId) with no value are not included.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Field values
/boards/{boardId}/labelsList a board's labels
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 An array of labels
/boards/{boardId}/labelsCreate a label
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
name | string | Label name (omit for a color-only label) |
colorrequired | string | Color (for example #3b82f6) |
Returns 201 The label that was created
/boards/{boardId}/assignablesPeople who can be assigned on a board
The people you can assign to cards on that board
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 An array of people
/boards/{boardId}/dependenciesList a board's dependencies
List the order between cards on a board (a successor task starts after its predecessor finishes). These are the arrows on the Gantt chart.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 An array of dependencies (id, predecessorId, successorId)
/boards/{boardId}/membersList a board's members
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 An array of members
/boards/{boardId}/membersAdd a member to a board
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
userIdrequired | number | Member ID of the person to add |
role | string | Role on the board (admin, editor, commenter, or viewer) |
Returns 201 The member that was added
/boards/{boardId}/members/{userId}Change a member's role on a board
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | |
userIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
rolerequired | string | Role on the board (admin, editor, commenter, or viewer) |
Returns 200 The role after the change
/boards/{boardId}/members/{userId}Remove a member from a board
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | |
userIdrequired | path | number |
Returns 200 Removed
/boards/import/trelloImport a Trello board
Import lists, cards, labels, checklists, comments and due dates from a Trello JSON export into a new kanban board. Send the JSON as a string in trelloJson, or attach it as file.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
trelloJsonrequired | string | The Trello JSON export (as a string) |
Returns 200 Success
/boards/{boardId}/archiveArchive a board
Remove from the board list without deleting anything
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Success
/boards/{boardId}/restoreRestore an archived board
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Success
/boards/reorderReorder boards
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
orderedIdsrequired | array of number | Board IDs in the new order |
Returns 200 Success
/boards/favoritesFavorite boards
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/boards/favoritesSet favorite boards
Replace the favorites with these board IDs, in order. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
boardIdsrequired | array of number | Board IDs, in order |
Returns 200 Success
/boards/{boardId}/trashTrash (one board)
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Success
/boards/{boardId}/columns/{columnId}Rename a column
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | |
columnIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string | New name |
Returns 200 Success
/boards/{boardId}/columns/{columnId}Delete a column
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | |
columnIdrequired | path | number |
Returns 200 Success
/boards/{boardId}/rows/{rowId}Rename a row
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | |
rowIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string | New name |
Returns 200 Success
/boards/{boardId}/rows/{rowId}Delete a row
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | |
rowIdrequired | path | number |
Returns 200 Success
/boards/{boardId}/cardsAll cards on a board
Returns every card on the board across lists in one call.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | Board ID |
Returns 200 Success
/boards/{boardId}/mention-candidatesPeople you can mention
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | Board ID |
Returns 200 Success
/boards/{boardId}/columns/reorderReorder grid columns
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | Board ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
updatesrequired | array of object | Column IDs and positions |
Returns 200 Success
/boards/{boardId}/columns/{columnId}/resizeSet a grid column width
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | Board ID |
columnIdrequired | path | number | Column ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
widthrequired | number | Width, 80 to 800 (null for default) |
Returns 200 Success
/boards/{boardId}/rows/reorderReorder grid rows
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | Board ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
updatesrequired | array of object | Row IDs and positions |
Returns 200 Success
/boards/{boardId}/rows/{rowId}/resizeSet a grid row height
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | Board ID |
rowIdrequired | path | number | Row ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
heightrequired | number | Height, 48 to 800 (null for default) |
Returns 200 Success
/boards/{boardId}/available-rolesRoles you can use for field permissions
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | Board ID |
Returns 200 Success
/boards/{boardId}/fields/{fieldId}/permissionsCustom field permissions
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | Board ID |
fieldIdrequired | path | number | Field ID |
Returns 200 Success
/boards/{boardId}/fields/{fieldId}/permissionsSet custom field permissions
For each role, allow, deny or inherit viewing and editing.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number | Board ID |
fieldIdrequired | path | number | Field ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
entriesrequired | array of object | Settings per role |
Returns 200 Success
Cards
/cardsCreate a card
Add a card to a list (cell)
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
listIdrequired | number | List (cell) ID |
titlerequired | string | Card title |
position | number | Position (defaults to the end of the list; on resource boards, the row to place the card in) |
description | string | Description (optional) |
Returns 201 The card that was created
/cards/{cardId}Card detail
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 The card with its subtasks, labels, and attachments
/cards/{cardId}Update a card
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON)
| Name | Type | Description |
|---|---|---|
title | string | |
description | string | |
listId | number | ID of the list to move it to |
position | number | |
startDate | date-time | |
dueDate | date-time | |
done | boolean | |
lastName | string | Standard field: family name |
firstName | string | Standard field: given name |
email | string | Standard field: email address |
phone | string | Standard field: phone number |
Returns 200 The card after the update
/cards/{cardId}Delete a card
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 Deleted
/cards/reorderReorder or move cards
Update card positions and moves between lists (cells) in one go
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
updatesrequired | array of object |
Returns 200 Updated
/cards/{cardId}/fields/{fieldId}Set a field value on a card
Send value:null to remove the value that is there
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number | |
fieldIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
value | The type follows fieldType (string, number, boolean, or null) |
Returns 200 Saved
/cards/{cardId}/commentsList comments
Get the comments on a card, oldest first, including replies and reactions
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 An array of comments
/cards/{cardId}/commentsPost a comment
Write a comment on a card. Mention someone with @username and they get a notification.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
body | string | The comment text (up to 5,000 characters) |
parentId | number | ID of the comment to reply to (omit for a top-level comment) |
closeCard | boolean | If true, the card is marked done when the comment is posted |
attachmentIds | array of number | Files already attached to the card to put on this comment (up to 10). With files, the body may be empty. |
Returns 201 The comment that was created
/cards/{cardId}/labelsList a card's labels
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 An array of labels
/cards/{cardId}/labels/{labelId}Add a label to a card
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number | |
labelIdrequired | path | number |
Returns 201 Added
/cards/{cardId}/labels/{labelId}Remove a label from a card
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number | |
labelIdrequired | path | number |
Returns 200 Removed
/cards/{cardId}/subtasksList checklist items
Get a card's checklist items in order
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 An array of checklist items
/cards/{cardId}/subtasksAdd a checklist item
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
titlerequired | string | Item text (up to 500 characters) |
Returns 201 The item that was created
/cards/{cardId}/membersList a card's assignees
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 An array of assignees
/cards/{cardId}/membersAssign someone to a card
Get the candidates from "People who can be assigned on a board"
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
userIdrequired | number | Member ID of the person to assign |
Returns 201 The assignee that was added
/cards/{cardId}/members/{memberId}Unassign someone from a card
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number | |
memberIdrequired | path | number |
Returns 200 Removed
/cards/{cardId}/linksList a card's links
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 An array of links
/cards/{cardId}/linksAdd a link to a card
Attach the URL of material kept elsewhere, such as Google Drive, to a card
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
urlrequired | string | The link URL |
name | string | Display name (omit to show the URL itself) |
Returns 201 The link that was created
/cards/{cardId}/dependenciesA card's predecessor and successor tasks
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 predecessors (tasks that come before) and successors (tasks that come after)
/cards/{cardId}/dependenciesAdd a predecessor to a card
Make this card start after the card predecessorId finishes. Both cards must be on the same board. A dependency that would form a loop is refused.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
predecessorIdrequired | number | ID of the predecessor card |
Returns 200 The dependency already existed / 201 The dependency that was created
/cards/{cardId}/dependencies/{predecessorId}Remove a predecessor from a card
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number | |
predecessorIdrequired | path | number |
Returns 200 Removed
/cards/{cardId}/attachmentsList attachments
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 An array of attachments
/cards/{cardId}/attachmentsUpload an attachment
Send the file in the file field of a multipart/form-data request
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 201 The attachment that was created
/cards/{cardId}/attachments/externalAttach an external file by link
Attach the URL of a file kept elsewhere instead of uploading it. It does not count toward storage.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
urlrequired | string | The file URL |
filename | string | File name to display |
mimeType | string | File type (for example application/pdf) |
Returns 201 The attachment that was created
/cards/{cardId}/moveMove a card to another board
Move a card to another board by naming the destination list. To move it within the same board, use listId in Update a card.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
targetListIdrequired | number | Destination list ID |
Returns 200 The card that was moved
/cards/{cardId}/coverSet a card cover
A color (#RRGGBB) or an image URL. Neither clears it
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
color | string | Color |
url | string | Image URL |
Returns 200 Success
/cards/{cardId}/restoreRestore a deleted card
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 Success
/cards/{cardId}/purgePermanently delete a card in the trash
This cannot be undone. Only the person who deleted it, a board admin, or a workspace admin.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | string | Card ID |
Returns 200 Success
Lists (cells)
/listsCreate a list
Add a list (a kanban column) to a board
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
boardIdrequired | number | Board ID |
namerequired | string | List name |
Returns 201 The list that was created
/lists/reorderReorder lists
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
updatesrequired | array of object |
Returns 200 Reordered
/lists/{listId}/cardsCards in a list
Parameters
| Name | In | Type | Description |
|---|---|---|---|
listIdrequired | path | number |
Returns 200 An array of cards
/lists/{listId}Delete a list
Delete a list. The cards in it are deleted too.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
listIdrequired | path | number |
Returns 200 Deleted
/lists/{listId}Update a list (cell)
Update the name of a list, or its metadata such as the person in charge and notes
Parameters
| Name | In | Type | Description |
|---|---|---|---|
listIdrequired | path | number |
Body (JSON)
| Name | Type | Description |
|---|---|---|
name | string | |
metadata | object | Free-form metadata, for example {"teacher": "Ms. Tanaka", "note": "Room 3-A"} |
Returns 200 The list after the update
/lists/resizeSet kanban list widths
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
listIdsrequired | array of number | List ID |
widthrequired | number | Width, 180 to 900 (null for default) |
Returns 200 Success
/lists/{listId}/attachmentsAttachments on a list (grid cell)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
listIdrequired | path | number | List ID |
Returns 200 Success
/lists/{listId}/attachmentsAttach a file to a list (grid cell)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
listIdrequired | path | number | List ID |
Returns 200 Success
Gantt
/gantt/boards/{boardId}Gantt board overview
Get a board as a Gantt chart: its lists together with a flat list of its tasks. Works on Gantt, kanban, list, and calendar boards
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Gantt board detail
/gantt/boards/{boardId}/tasksGantt tasks (flat)
Get every task in the board as a flat array in position order, including listName, start date, end date, and the done flag
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Returns 200 Tasks
/gantt/boards/{boardId}/tasksAdd a Gantt task
Add a task. Give listId or listName; if you give neither, it goes into the first list.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
titlerequired | string | Task name |
description | string | Description (optional) |
startDate | date-time | Start date (ISO 8601) |
dueDate | date-time | End date (ISO 8601) |
listId | number | ID of the list it belongs to (must be in the same board) |
listName | string | Name of the list it belongs to. It is created if it does not exist. |
done | boolean | Done flag |
Returns 201 The task that was created
/gantt/tasks/{cardId}Update a Gantt task
Update the title, the dates, whether it is done, and which list it belongs to
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Body (JSON)
| Name | Type | Description |
|---|---|---|
title | string | |
description | string | |
startDate | date-time | |
dueDate | date-time | |
done | boolean | |
position | number | Position within the list |
listId | number | Move it to a list in the same board |
listName | string | Give the list by name. It is created if it does not exist. |
Returns 200 The task after the update
/gantt/tasks/{cardId}Delete a Gantt task
Parameters
| Name | In | Type | Description |
|---|---|---|---|
cardIdrequired | path | number |
Returns 200 Deleted
/gantt/boards/{boardId}/tasks/reorderReorder Gantt tasks
Pass an array of task IDs to set the flat order in one go
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
idsrequired | array of number | Task IDs in the new order |
Returns 200 Updated
Webhooks
/webhooksList webhooks
Return the endpoints registered in this workspace
Returns 200 The endpoints
/webhooksRegister a webhook
Create an endpoint that hears about events. The secret in the response is the signing key, and it is returned only this once.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
urlrequired | string | The URL to send to |
name | string | Name (optional) |
events | array of string | Which events to receive. Empty means all of them, for example ["card.create","card.move"]. |
boardId | number | To narrow it to certain boards (optional) |
Returns 201 The endpoint that was created, including the secret
/webhooks/eventsThe events you can subscribe to
Returns 200 The name and description of each event
/webhooks/{webhookId}Update a webhook
Parameters
| Name | In | Type | Description |
|---|---|---|---|
webhookIdrequired | path | number |
Body (JSON)
| Name | Type | Description |
|---|---|---|
url | string | |
name | string | |
events | array of string | |
boardId | number | |
status | string | active or disabled |
Returns 200 The endpoint after the update
/webhooks/{webhookId}Delete a webhook
Parameters
| Name | In | Type | Description |
|---|---|---|---|
webhookIdrequired | path | number |
Returns 200 Deleted
/webhooks/{webhookId}/deliveriesDelivery log
The last 50. When it was sent, what was sent, and what came back.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
webhookIdrequired | path | number |
Returns 200 Delivery log
/webhooks/{webhookId}/testSend a test
Send one ping event right now and report whether it arrived
Parameters
| Name | In | Type | Description |
|---|---|---|---|
webhookIdrequired | path | number |
Returns 200 Whether it arrived
/webhooks/subscribeSubscribe (for automation tools)
The endpoint that tools such as Zapier call themselves. It creates one endpoint per event and returns its id.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
targetUrlrequired | string | The URL that receives the notifications |
eventrequired | string | The event to receive, for example card.create |
boardId | number |
Returns 201 The id of the subscription that was created
/webhooks/subscribe/{webhookId}Unsubscribe (for automation tools)
Parameters
| Name | In | Type | Description |
|---|---|---|---|
webhookIdrequired | path | number |
Returns 200 Unsubscribed
comments
/comments/{commentId}Edit a comment
Parameters
| Name | In | Type | Description |
|---|---|---|---|
commentIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
bodyrequired | string | The comment text (up to 5,000 characters) |
Returns 200 The comment after the update
/comments/{commentId}Delete a comment
Parameters
| Name | In | Type | Description |
|---|---|---|---|
commentIdrequired | path | number |
Returns 200 Deleted
/comments/{commentId}/reactionsReact to a comment
Sending the same emoji again removes it
Parameters
| Name | In | Type | Description |
|---|---|---|---|
commentIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
emojirequired | string | One emoji |
Returns 200 Success
labels
/labels/{labelId}Update a label
Parameters
| Name | In | Type | Description |
|---|---|---|---|
labelIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
name | string | Label name (omit for a color-only label) |
color | string | Color (for example #3b82f6) |
Returns 200 The label after the update
/labels/{labelId}Delete a label
Delete a label from a board. It is also removed from the cards that had it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
labelIdrequired | path | number |
Returns 200 Deleted
subtasks
/subtasks/{subtaskId}Update a checklist item
Change the text, mark it done or not done, or change its position
Parameters
| Name | In | Type | Description |
|---|---|---|---|
subtaskIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
title | string | Item text (up to 500 characters) |
done | boolean | true when done |
position | number | Position |
Returns 200 The item after the update
/subtasks/{subtaskId}Delete a checklist item
Parameters
| Name | In | Type | Description |
|---|---|---|---|
subtaskIdrequired | path | number |
Returns 200 Deleted
card-links
/card-links/{linkId}Update a card link
Parameters
| Name | In | Type | Description |
|---|---|---|---|
linkIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
url | string | The link URL |
name | string | Display name (omit to show the URL itself) |
position | number | Position |
Returns 200 The link after the update
/card-links/{linkId}Delete a card link
Parameters
| Name | In | Type | Description |
|---|---|---|---|
linkIdrequired | path | number |
Returns 200 Deleted
files
/filesList files
Return card attachments and files sent in chat, newest first. Card files come only from boards you can see, and chat files only from conversations you take part in. A workspace API token returns card attachments only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
source | query | string | Filter by where the file is |
kind | query | string | Filter by file type |
q | query | string | Search by file name |
before | query | date-time | Only files added before this time (to load more) |
limit | query | number | How many (default 50) |
Returns 200 An array of files
attachments
/attachments/{attachmentId}Delete an attachment
Parameters
| Name | In | Type | Description |
|---|---|---|---|
attachmentIdrequired | path | number |
Returns 200 Deleted
/attachments/{attachmentId}/textRead the text of an attachment
The text inside a PDF, Word, Excel or text file
Parameters
| Name | In | Type | Description |
|---|---|---|---|
attachmentIdrequired | path | number |
Returns 200 Success
/attachments/{attachmentId}/rawDownload an attachment
Parameters
| Name | In | Type | Description |
|---|---|---|---|
attachmentIdrequired | path | number | Attachment ID |
Returns 200 Success
members
/membersList workspace members
The people in the workspace. Use their member IDs when assigning cards or adding board members.
Returns 200 An array of members
/members/meGet me
The member this key acts as (ID, name, username, role). Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/members/onlineMembers online now
People who have Pinateca open right now
Returns 200 Success
/members/{userId}Remove a member from the workspace
Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
userIdrequired | path | number | Member ID |
Returns 200 Success
/members/{userId}/roleChange a member's workspace role
Owner, admin, member, or view-only guest. Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
userIdrequired | path | number | Member ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
rolerequired | string | Role |
Returns 200 Success
/members/{userId}/rolesSet a member's custom roles
Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
userIdrequired | path | number | Member ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
roleIdsrequired | array of number | Role IDs (replaces the current list) |
Returns 200 Success
/members/{userId}/boardsBoards a member belongs to, with roles
Parameters
| Name | In | Type | Description |
|---|---|---|---|
userIdrequired | path | number | Member ID |
Returns 200 Success
/members/{userId}/boardsSet a member's boards and roles
Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
userIdrequired | path | number | Member ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
assignmentsrequired | array of object | Boards and roles (replaces the current list) |
Returns 200 Success
/members/{userId}/linkLink a name-only member to a real person
Ties a name-only member created during a migration to the person who joined with that email. Past time and contracts stay. Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
userIdrequired | path | number | Member ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
emailrequired | string | Email of the person who joined |
Returns 200 Success
search
/searchSearch cards
Search card titles, descriptions, comments, and attachment text
Parameters
| Name | In | Type | Description |
|---|---|---|---|
qrequired | query | string | Search words |
scope | query | string | all searches the whole workspace; board searches only the board in boardId |
boardId | query | string | Board ID when scope is board |
limit | query | number | Number of results (default 30) |
Returns 200 Cards that were found
activity-logs
/activity-logsActivity log
Who did what and when (cards created, moved, updated, completed, deleted, comments and more), newest first
Parameters
| Name | In | Type | Description |
|---|---|---|---|
boardId | query | number | Only this board |
actorMemberId | query | number | Only actions by this member |
action | query | string | Only this action (e.g. card.created) |
limit | query | number | How many (default 50) |
beforeId | query | number | Older than this ID (for paging) |
Returns 200 Success
inbox
/inboxInbox
My cards across all boards (assigned, created, or all), overdue and due-soon first. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
filter | query | string | assigned, created or all (default assigned) |
includeDone | query | string | true to include completed cards |
Returns 200 Success
/inbox/countInbox counts
Overdue and total counts. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
notifications
/notificationsList notifications
Mentions, assignments, comments, invitations and more. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/notifications/unread-countUnread notification count
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/notifications/{notificationId}/readMark a notification read
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
notificationIdrequired | path | number |
Returns 200 Success
/notifications/read-allMark all notifications read
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/notifications/{notificationId}Delete a notification
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
notificationIdrequired | path | number | Notification ID |
Returns 200 Success
/notifications/settingsNotification settings
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/notifications/settingsChange notification settings
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON)
| Name | Type | Description |
|---|---|---|
notifyEmailMention | boolean | Email me when mentioned |
notifyEmailAssigned | boolean | Email me when assigned |
notifyEmailChat | boolean | Email me about unread chat |
notifyBrowserMention | boolean | Browser notification when mentioned |
notifyBrowserAssigned | boolean | Browser notification when assigned |
notifyBrowserChat | boolean | Browser notification for chat |
Returns 200 Success
chat
/chat/conversationsList chat conversations
Direct messages and groups, with the last message and unread count. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/chat/conversationsStart a direct chat
Returns the existing conversation if there is one. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
withUserIdrequired | number | The other member ID |
Returns 200 Success
/chat/conversations/groupCreate a group chat
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
name | string | Group name |
userIds | array of number | Member IDs to add |
roleIds | array of number | Add everyone with these roles |
Returns 200 Success
/chat/conversations/{conversationId}Rename a group chat
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string | New name |
Returns 200 Success
/chat/conversations/{conversationId}/participantsAdd people to a group chat
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
userIds | array of number | Member IDs |
roleIds | array of number | Role IDs |
Returns 200 Success
/chat/conversations/{conversationId}/messagesList chat messages
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number |
Returns 200 Success
/chat/conversations/{conversationId}/messagesSend a chat message
Mention people with @username. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
bodyrequired | string | Text (up to 5000 characters) |
Returns 200 Success
/chat/conversations/{conversationId}/readMark a conversation read
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number |
Returns 200 Success
/chat/messages/{messageId}Edit a chat message
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
messageIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
bodyrequired | string | Text |
Returns 200 Success
/chat/messages/{messageId}Delete a chat message
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
messageIdrequired | path | number |
Returns 200 Success
/chat/messages/{messageId}/reactionsReact to a chat message
Sending the same emoji again removes it. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
messageIdrequired | path | number |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
emojirequired | string | One emoji |
Returns 200 Success
/chat/unread-countUnread chat count
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/chat/conversations/{conversationId}/pinPin a conversation
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number | Conversation ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
pinnedrequired | boolean | Pin (false to unpin) |
Returns 200 Success
/chat/conversations/{conversationId}/read-receiptsWho has read how far
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number | Conversation ID |
Returns 200 Success
/chat/conversations/reorderReorder conversations
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
orderedIdsrequired | array of number | Conversation IDs, top first |
Returns 200 Success
/chat/conversations/{conversationId}/leaveLeave a group chat
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number | Conversation ID |
Returns 200 Success
/chat/conversations/{conversationId}/participants/{userId}Remove someone from a group chat
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number | Conversation ID |
userIdrequired | path | number | Member ID |
Returns 200 Success
/chat/conversations/{conversationId}/attachmentsSend a file in chat
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number | Conversation ID |
Returns 200 Success
/chat/conversations/{conversationId}/iconSet a group chat icon
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number | Conversation ID |
Returns 200 Success
/chat/conversations/{conversationId}/iconRemove a group chat icon
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
conversationIdrequired | path | number | Conversation ID |
Returns 200 Success
videos
/videos/{videoId}/transcriptMeeting transcript
Cleaned-up text, summary, and timed lines with speakers
Parameters
| Name | In | Type | Description |
|---|---|---|---|
videoIdrequired | path | number |
Returns 200 Success
/videos/{videoId}/playbackPlayback address for a meeting recording
Returns a time-limited playback address and the processing status.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
videoIdrequired | path | number | Video attachment ID |
Returns 200 Success
trash
/trashTrash (all boards)
Cards deleted in the last 30 days. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
time-entries
/time-entriesList time entries
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
fromrequired | query | string | From (YYYY-MM-DD) |
torequired | query | string | To (YYYY-MM-DD) |
memberId | query | number | This member (managers only) |
Returns 200 Success
/time-entriesLog work time
Replaces the same day, project and category (one cell of the weekly grid). Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
workDaterequired | string | Date (YYYY-MM-DD) |
minutesrequired | number | Minutes |
projectId | number | Project ID |
categoryId | number | Work category ID |
cardId | number | Card ID |
note | string | Note |
billable | boolean | Billable |
memberId | number | Log for this member (managers only) |
Returns 200 Success
/time-entries/{entryId}Delete a time entry
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
entryIdrequired | path | number |
Returns 200 Success
projects
/projectsList timesheet projects
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
includeArchived | query | string | true to include archived projects |
Returns 200 Success
/projectsCreate a timesheet project
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string | Project name |
clientName | string | Client name |
boardId | number | Board to tie it to |
color | string | Color |
Returns 200 Success
/projects/{projectId}Update a time project
Change the name, color, client, linked board, or archive it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
projectIdrequired | path | number | Project IDs |
Body (JSON)
| Name | Type | Description |
|---|---|---|
name | string | Project name |
color | string | Color |
clientName | string | Client name |
boardId | number | Board to tie it to |
archived | boolean | Archive it |
Returns 200 Success
/projects/{projectId}Delete a time project
Only projects with no time logged can be deleted.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
projectIdrequired | path | number | Project IDs |
Returns 200 Success
/projects/{projectId}/membersSet who works on a project
Parameters
| Name | In | Type | Description |
|---|---|---|---|
projectIdrequired | path | number | Project IDs |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
memberIdsrequired | array of number | Member IDs (replaces the current list) |
Returns 200 Success
/projects/archiveArchive several projects
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
projectIdsrequired | array of number | Project IDs |
archivedrequired | boolean | Archive (false to restore) |
Returns 200 Success
work-categories
/work-categoriesList work categories
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/work-categoriesCreate a work category
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string | Category name |
Returns 200 Success
/work-categories/{categoryId}Update a work category
Parameters
| Name | In | Type | Description |
|---|---|---|---|
categoryIdrequired | path | number | Category ID |
Body (JSON)
| Name | Type | Description |
|---|---|---|
name | string | Category name |
position | number | Position |
archived | boolean | Archive it |
Returns 200 Success
/work-categories/{categoryId}Delete a work category
Only categories with no time logged can be deleted.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
categoryIdrequired | path | number | Category ID |
Returns 200 Success
reports
/reports/timeTime report
Totals by person, project and category. Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
fromrequired | query | string | From |
torequired | query | string | To |
memberId | query | number | Only this member |
projectId | query | number | Only this project |
Returns 200 Success
/reports/statementWork statement
Hours and amounts by project (for invoicing). Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
fromrequired | query | string | From |
torequired | query | string | To |
memberId | query | number | For this member (default: you) |
Returns 200 Success
/reports/time.csvExport the time report as CSV
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
fromrequired | query | string | From (YYYY-MM-DD) |
torequired | query | string | To (YYYY-MM-DD) |
memberId | query | number | Only this member |
projectId | query | number | Only this project |
Returns 200 Success
contracts
/contractsList contracts
Hourly, fixed and monthly contracts. Contract managers see everyone; others see their own.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
activeOnly | query | boolean | Only active contracts (true) |
Returns 200 Success
/contractsCreate a contract
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
memberIdrequired | number | Member |
projectId | number | Project |
contractTyperequired | string | Contract type |
hourlyRate | number | Hourly rate |
totalAmount | number | Fixed amount |
monthlyAmount | number | Monthly amount |
deliverable | string | Deliverable |
dueDate | string | Due date (YYYY-MM-DD) |
validFromrequired | string | From (YYYY-MM-DD) |
validTo | string | To (YYYY-MM-DD) |
Returns 200 Success
assignments
/assignments/{assignmentId}/statusChange the status of a fixed-price assignment
Only approvers can set accepted or returned.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
assignmentIdrequired | path | number | Assignment ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
statusrequired | string | Status |
Returns 200 Success
project-tasks
/project-tasksList project tasks
Parameters
| Name | In | Type | Description |
|---|---|---|---|
projectId | query | number | Only this project |
Returns 200 Success
/project-tasksCreate a project task
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
projectIdrequired | number | Project |
namerequired | string | Task name |
Returns 200 Success
/project-tasks/{taskId}Update a project task
Parameters
| Name | In | Type | Description |
|---|---|---|---|
taskIdrequired | path | number | Task ID |
Body (JSON)
| Name | Type | Description |
|---|---|---|
name | string | Task name |
archived | boolean | Archive it |
Returns 200 Success
timesheet-favorites
/timesheet-favoritesList timesheet favorites
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Returns 200 Success
/timesheet-favoritesAdd a timesheet favorite
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON)
| Name | Type | Description |
|---|---|---|
projectId | number | Project |
taskId | number | Task |
categoryId | number | Category |
Returns 200 Success
/timesheet-favorites/{favoriteId}Remove a timesheet favorite
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
favoriteIdrequired | path | number | Favorite ID |
Returns 200 Success
time-permissions
/time-permissionsWhat you can do in timesheets
Returns whether you can log time, see everyone, enter for others, approve, manage contracts, and change settings.
Returns 200 Success
timesheet-submissions
/timesheet-submissionsGet the submission for a period
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
periodStartrequired | query | string | Period start (YYYY-MM-DD) |
periodEndrequired | query | string | Period end (YYYY-MM-DD) |
memberId | query | number | For this member (default: you) |
Returns 200 Success
/timesheet-submissionsSubmit a timesheet
Needs a key that acts as a person (signing in from an AI app, or a signed-in session). Workspace API tokens cannot use it.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
periodStartrequired | string | Period start (YYYY-MM-DD) |
periodEndrequired | string | Period end (YYYY-MM-DD) |
memberId | number | For this member (default: you) |
note | string | Note |
Returns 200 Success
/timesheet-submissions/listList timesheet submissions
Includes those waiting for approval. Only people who can see all time see everyone.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
fromrequired | query | string | From (YYYY-MM-DD) |
torequired | query | string | To (YYYY-MM-DD) |
memberId | query | number | Only this member |
Returns 200 Success
/timesheet-submissions/{submissionId}/reviewApprove or return a timesheet
Approvers only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
submissionIdrequired | path | number | Submission ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
actionrequired | string | approve or return |
note | string | Note |
Returns 200 Success
roles
/rolesList custom roles
Returns 200 Success
/rolesCreate a custom role
Workspace admins only.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
namerequired | string | Role name |
color | string | Color (#RRGGBB) |
Returns 200 Success
/roles/{roleId}Update a custom role
Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
roleIdrequired | path | number | Role ID |
Body (JSON)
| Name | Type | Description |
|---|---|---|
name | string | Role name |
color | string | Color (#RRGGBB) |
Returns 200 Success
/roles/{roleId}Delete a custom role
Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
roleIdrequired | path | number | Role ID |
Returns 200 Success
/roles/{roleId}/membersList the people in a role
Parameters
| Name | In | Type | Description |
|---|---|---|---|
roleIdrequired | path | number | Role ID |
Returns 200 Success
/roles/{roleId}/membersSet the people in a role
Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
roleIdrequired | path | number | Role ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
memberIdsrequired | array of number | Member IDs (replaces the current list) |
Returns 200 Success
/roles/positionsReorder custom roles
Workspace admins only.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
ordersrequired | array of object | Role IDs and positions |
Returns 200 Success
invitations
/invitationsList invitations
Invitations not accepted yet. Workspace admins only.
Returns 200 Success
/invitationsInvite someone to the workspace
Sends an invitation email. View-only guests do not count as seats. Workspace admins only.
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
emailrequired | string | Email of the person to invite |
role | string | Role |
boardAssignments | array of object | Boards and roles to start with |
Returns 200 Success
/invitations/{invitationId}Cancel an invitation
Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
invitationIdrequired | path | number | Invitation ID |
Returns 200 Success
/invitations/{invitationId}/resendResend an invitation email
Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
invitationIdrequired | path | number | Invitation ID |
Returns 200 Success
imported-members
/imported-membersList name-only members from imports
Names created for people who had not joined yet when you imported from Trello and others. Workspace admins only.
Returns 200 Success
/imported-members/{importedMemberId}Set the email of a name-only member
When the person joins with this email they are linked automatically. Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
importedMemberIdrequired | path | number | Name-only member ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
emailrequired | string |
Returns 200 Success
/imported-members/{importedMemberId}Delete a name-only member
Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
importedMemberIdrequired | path | number | Name-only member ID |
Returns 200 Success
/imported-members/{importedMemberId}/linkLink a name-only member to a joined member
Assignments and comment authors move to that person. Workspace admins only.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
importedMemberIdrequired | path | number | Name-only member ID |
Body (JSON, required)
| Name | Type | Description |
|---|---|---|
userIdrequired | number | Member ID to link to |
Returns 200 Success
workspace
/workspace/settingsWorkspace settings
Returns 200 Success
/workspace/settingsChange workspace settings
Workspace admins only.
Body (JSON)
| Name | Type | Description |
|---|---|---|
boardCreationRole | string | Who can create boards |
currency | string | Currency (ISO 4217) |
timeStepMinutes | number | Timesheet step (minutes) |
Returns 200 Success
Conventions
- Responses are plain JSON, with no wrapper
- When something fails, {"error": "..."} comes back
- A token belongs to one workspace and cannot see another
- Times are ISO 8601 (for example 2026-09-30T09:00:00.000Z)