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}/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
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 |
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
Lists (cells)
/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
Gantt
/gantt/boards/{boardId}Gantt board overview
Get the lists of a Gantt board together with a flat list of its tasks
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
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)