Guide 07

Using the API

The OpenAPI 3.1 spec is public. ChatGPT and Claude connect by simply signing in.

The API is not something bolted onto Pinateca afterwards. It is the same door the screen uses, opened outward. The spec is published as OpenAPI 3.1, so handing that URL to an AI or an automation tool is enough for it to work out how to call it.

https://pinateca.com/api/openapi.json

Issue a token

Tokens are issued from API tokens in the workspace settings. Issuing and revoking are the only places we ask for your password again. A token is shown once, right after it is issued, so copy it then.

The API token screen
API tokens. Give one a name and an expiry when you issue it. The last time it was used is recorded, so tokens nobody uses are easy to spot.
  1. Only the owner can issue oneTokens belong to a workspace, and carry the same rights as an admin.
  2. They can expireFor a short lived integration, set an expiry. A token that has passed it stops working on its own.
  3. They can be revoked at any timeIf you think one has leaked, turn it off on the spot.

Making a request

The base is https://pinateca.com/api. Put your token in the Authorization header.

curl https://pinateca.com/api/boards \
  -H "Authorization: Bearer kbn_xxxxxxxxxxxx"

To add a card:

curl https://pinateca.com/api/cards \
  -H "Authorization: Bearer kbn_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"listId": 123, "title": "Send the quote"}'

Responses are plain JSON with no wrapper, so you can use them as they are. When something fails, the reason comes back. {"error": "..."}

What it covers

The exact shape of every endpoint, what it takes and what it returns, is in the API reference. That page is generated from the spec itself, so it never drifts from the real endpoints.

ObjectWhat you can do
BoardsList, read one with its lists and cards, create, update, archive, reorder
CardsCreate, read, update, delete, reorder, and move between lists
Lists (cells)Update the name and the attached information
Grid and timetableRead the columns and rows
Gantt chartRead tasks, update their spans, reorder them
Custom fieldsCreate and delete fields, read every value on a board, set the value on a card

Using it from an AI

ChatGPT and Claude connect when you enter the Pinateca address, sign in, and allow access. There is no token to create or paste.

  1. ChatGPTTurn on developer mode in settings. When you create an app, enter https://pinateca.com/mcp as the MCP server URL and choose OAuth for authentication. Developer mode is available on paid plans (Plus, Pro, Business, and others).
  2. Claude (claude.ai and Claude Desktop)In the connector settings, add https://pinateca.com/mcp as a custom connector.
  3. Claude CodeAdd it with claude mcp add --transport http pinateca https://pinateca.com/mcp, then sign in from /mcp.
  4. Allow it in PinatecaWhichever AI you connect from, the Pinateca sign-in page opens. Sign in, choose the workspace to connect, and press Allow. That is all.
The page that opens when you connect from an AI
The page that opens when you connect from an AI

An AI connected this way can only do what you can do. Boards you cannot see stay hidden from it, and it cannot touch billing or create tokens. Each connected AI is listed by name under API tokens in your workspace settings, so revoke it there when you want to stop it.

Either way you get the board list and its contents, creating, updating, moving, and deleting cards, renaming lists, reading and writing custom fields, and Gantt tasks. Asking for the cards due this week, or turning the decisions in your meeting notes into cards, works as asked.

Connecting with a token

Where a sign-in page is not possible, use a token created in your workspace settings.

  1. ChatGPT (GPTs)Load https://pinateca.com/api/openapi.json into Actions, set authentication to API Key (Bearer), and paste the token.
  2. MCP running locallyOne line: claude mcp add pinateca -e PINATECA_TOKEN=kbn_xxx -- npx -y pinateca-mcp. For Claude Desktop, write the same thing in the config file.
A token is a key to everything in the workspace.When you hand one to an outside service, give it an expiry and revoke it once it is no longer used. The last time each token was used is on screen, which is where forgotten ones show up.

Receiving events (webhooks)

As well as you calling us, Pinateca can call you. A card moved, a comment added, an assignee changed: we POST to the URL you give us the moment it happens. Nothing polls on a timer, so it is fast and there are no wasted requests.

Endpoints are registered under Webhooks in the workspace settings, where you choose which events you want. They can be registered through the API as well.

curl https://pinateca.com/api/webhooks \
  -H "Authorization: Bearer kbn_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/hook", "events": ["card.create", "card.move"]}'

What arrives looks like this:

{
  "id": 1234,
  "event": "card.create",
  "occurredAt": "2026-09-02T11:20:00.000Z",
  "workspace": { "slug": "acme", "name": "Acme Inc." },
  "boardId": 12,
  "actor": { "memberId": 3, "name": "Hina Sato" },
  "data": { "id": 987, "title": "Send the quote", "listName": "To do", "dueDate": null }
}

Checking it is genuine

When you create an endpoint, a key starting with whsec_ is shown once. We sign the body with that key and put the result in the X-Pinateca-Signature header, so doing the same calculation on your side rejects anything somebody else sends.

const expected =
  'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
if (req.headers['x-pinateca-signature'] !== expected) return res.status(401).end();

When delivery fails

We retry after 30 seconds, 2 minutes, 10 minutes, 1 hour, and 6 hours. After that we give up, but the delivery record stays in the settings screen so you can see what came back and when. An endpoint that keeps failing is switched off automatically.

Subscriptions created from the automation tool's side (REST Hooks, as Zapier uses) are supported too. The exact shape is in the API reference.

Using it from n8n

There is a dedicated node for the automation tool n8n. Enter n8n-nodes-pinateca under Settings → Community nodes and you get actions for creating and updating cards, plus a trigger that fires the moment a card moves. It runs on the webhooks above, so n8n registers and removes the subscription itself.

Zapier and Pabbly Connect are in review, and Make is on the way. See integrations for where each one stands.