Go Scribi

The API

Board columns and cards

A board is cards in columns. Cards carry a description, an assignee, a due date and an estimate; columns carry a WIP limit and which one finishes.

Every call here carries Authorization: Bearer <key> and answers JSON. What is true of every call, and what every refusal means.

GET /api/v1/w/:workspace_id/notes/:note_id/columns

A board's columns, with their cards nested inside them.

needs
read on the thing it touches
answers
columns, each with cards.
refusals
unauthorized, not_found
Parameters for GET /api/v1/w/:workspace_id/notes/:note_id/columns
Parameter In Type Description
text query boolean
An example
curl -X GET https://goscribi.com/api/v1/w/1077/notes/963/columns \
  -H "Authorization: Bearer $GO_SCRIBI_KEY"

Answers 200:

{
  "columns": [
    {
      "id": 322,
      "name": "Todo",
      "position": 1,
      "wip_limit": null,
      "finishes": false,
      "cards": [
        {
          "id": 138,
          "content": "Survey the dock",
          "note": null,
          "assignee": null,
          "due_on": null,
          "estimate": null,
          "colour": null,
          "archived_at": null,
          "completed_at": null,
          "repeats": null,
          "position": 1
        }
      ]
    }
  ]
}

POST /api/v1/w/:workspace_id/notes/:note_id/columns

Add a column.

needs
write on the thing it touches
answers
**201**, and the whole note.
refusals
unauthorized, not_found, forbidden, read_only_key, workspace_locked, invalid
Parameters for POST /api/v1/w/:workspace_id/notes/:note_id/columns
Parameter In Type Description
name required body string
after_id body integer
colour body string
wip_limit body integer More than nought.
finishes body boolean The column that means done. Setting it clears it on every other.
An example
curl -X POST https://goscribi.com/api/v1/w/1046/notes/892/columns \
  -H "Authorization: Bearer $GO_SCRIBI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Blocked"
}'

Answers 201:

{
  "note": {
    "id": 892,
    "title": "Work",
    "type": "board",
    "folder": null,
    "diary_date": null,
    "subject": null,
    "created_at": "2026-09-23T00:30:16Z",
    "updated_at": "2026-09-23T00:30:16Z",
    "lock_version": 1,
    "url": "https://goscribi.com/w/1046/notes/892"
  },
  "columns": [
    {
      "id": 332,
      "name": "Blocked",
      "position": 1,
      "wip_limit": null,
      "finishes": false,
      "cards": []
    }
  ]
}

PATCH PUT /api/v1/w/:workspace_id/notes/:note_id/columns/:id

Rename a column, move it, or change what it means.

needs
write on the thing it touches
answers
The whole note.
refusals
unauthorized, not_found, forbidden, read_only_key, workspace_locked, invalid
Parameters for PATCH /api/v1/w/:workspace_id/notes/:note_id/columns/:id
Parameter In Type Description
name body string
colour body string
wip_limit body integer
finishes body boolean
position body integer
An example
curl -X PATCH https://goscribi.com/api/v1/w/1075/notes/1062/columns/345 \
  -H "Authorization: Bearer $GO_SCRIBI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Doing",
  "wip_limit": 3,
  "finishes": true
}'

Answers 200:

{
  "note": {
    "id": 1062,
    "title": "Work",
    "type": "board",
    "folder": null,
    "diary_date": null,
    "subject": null,
    "created_at": "2026-09-23T00:30:16Z",
    "updated_at": "2026-09-23T00:30:16Z",
    "lock_version": 1,
    "url": "https://goscribi.com/w/1075/notes/1062"
  },
  "columns": [
    {
      "id": 345,
      "name": "Doing",
      "position": 1,
      "wip_limit": 3,
      "finishes": true,
      "cards": []
    }
  ]
}

DELETE /api/v1/w/:workspace_id/notes/:note_id/columns/:id

Remove an empty column.

needs
write on the thing it touches
answers
The whole note.
refusals
unauthorized, not_found, forbidden, read_only_key, workspace_locked, column_not_empty

Nothing is cascaded: a column holding cards is refused, with how many.

An example
curl -X DELETE https://goscribi.com/api/v1/w/11120/notes/10437/columns/3984 \
  -H "Authorization: Bearer $GO_SCRIBI_KEY"

Answers 200:

{
  "note": {
    "id": 10437,
    "title": "Work",
    "type": "board",
    "folder": null,
    "diary_date": null,
    "subject": null,
    "created_at": "2026-09-16T01:10:31Z",
    "updated_at": "2026-09-16T01:10:31Z",
    "lock_version": 2,
    "url": "https://goscribi.com/w/11120/notes/10437"
  },
  "columns": []
}

GET /api/v1/w/:workspace_id/notes/:note_id/cards

Every card on a board, flat, each saying which column it is in.

needs
read on the thing it touches
answers
cards, each with its column_id.
refusals
unauthorized, not_found
Parameters for GET /api/v1/w/:workspace_id/notes/:note_id/cards
Parameter In Type Description
archived query string Only the exact string no leaves archived cards out.
text query boolean

Archived cards come back by default — a board's archive is where finished work goes, not where deleted work goes.

An example
curl -X GET https://goscribi.com/api/v1/w/1079/notes/944/cards \
  -H "Authorization: Bearer $GO_SCRIBI_KEY"

Answers 200:

{
  "cards": [
    {
      "id": 162,
      "content": "Live one",
      "note": null,
      "assignee": null,
      "due_on": null,
      "estimate": null,
      "colour": null,
      "archived_at": null,
      "completed_at": null,
      "repeats": null,
      "position": 1,
      "column_id": 401
    },
    {
      "id": 163,
      "content": "Old one",
      "note": null,
      "assignee": null,
      "due_on": null,
      "estimate": null,
      "colour": null,
      "archived_at": "2026-09-23T00:30:16Z",
      "completed_at": null,
      "repeats": null,
      "position": 1,
      "column_id": 401
    }
  ]
}

POST /api/v1/w/:workspace_id/notes/:note_id/cards

Add a card to a column.

needs
write on the thing it touches
answers
**201**, and the whole note.
refusals
unauthorized, not_found, forbidden, read_only_key, workspace_locked, invalid
Parameters for POST /api/v1/w/:workspace_id/notes/:note_id/cards
Parameter In Type Description
column_id required body integer A column of this board. One from another board is a 404.
content body string The card's own line.
annotation body string Its description, in Markdown.
colour body string One of the six the interface offers.
assignee_id body integer A member of this workspace. Anybody else is a 404, not a quiet miss.
due_on body date YYYY-MM-DD.
estimate body integer Nought to 9,999, or null.
after_id body integer
position body integer
An example
curl -X POST https://goscribi.com/api/v1/w/1076/notes/1064/cards \
  -H "Authorization: Bearer $GO_SCRIBI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "column_id": 346,
  "content": "Survey the dock"
}'

Answers 201:

{
  "note": {
    "id": 1064,
    "title": "Work",
    "type": "board",
    "folder": null,
    "diary_date": null,
    "subject": null,
    "created_at": "2026-09-23T00:30:16Z",
    "updated_at": "2026-09-23T00:30:16Z",
    "lock_version": 2,
    "url": "https://goscribi.com/w/1076/notes/1064"
  },
  "columns": [
    {
      "id": 346,
      "name": "To do",
      "position": 1,
      "wip_limit": null,
      "finishes": false,
      "cards": [
        {
          "id": 145,
          "content": "Survey the dock",
          "note": null,
          "assignee": null,
          "due_on": null,
          "estimate": null,
          "colour": null,
          "archived_at": null,
          "completed_at": null,
          "repeats": null,
          "position": 1
        }
      ]
    },
    {
      "id": 347,
      "name": "Doing",
      "position": 2,
      "wip_limit": null,
      "finishes": false,
      "cards": []
    },
    {
      "id": 348,
      "name": "Done",
      "position": 3,
      "wip_limit": null,
      "finishes": true,
      "cards": []
    }
  ]
}

PATCH PUT /api/v1/w/:workspace_id/notes/:note_id/cards/:id

Change a card, move it to another column, or archive it.

needs
write on the thing it touches
answers
The whole note.
refusals
unauthorized, not_found, forbidden, read_only_key, workspace_locked, invalid
Parameters for PATCH /api/v1/w/:workspace_id/notes/:note_id/cards/:id
Parameter In Type Description
content body string The card's own line.
annotation body string Its description, in Markdown.
colour body string One of the six the interface offers.
assignee_id body integer A member of this workspace. Anybody else is a 404, not a quiet miss.
due_on body date YYYY-MM-DD.
estimate body integer Nought to 9,999, or null.
column_id body integer Moves it, and records who moved it.
position body integer
archived body boolean Archiving keeps its column, so it can come back.

Moving a card into the column that finishes stamps it completed.

An example
curl -X PATCH https://goscribi.com/api/v1/w/1076/notes/1064/cards/145 \
  -H "Authorization: Bearer $GO_SCRIBI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "column_id": 347,
  "position": 0,
  "assignee_id": 1072,
  "estimate": 3
}'

Answers 200:

{
  "note": {
    "id": 1064,
    "title": "Work",
    "type": "board",
    "folder": null,
    "diary_date": null,
    "subject": null,
    "created_at": "2026-09-23T00:30:16Z",
    "updated_at": "2026-09-23T00:30:16Z",
    "lock_version": 3,
    "url": "https://goscribi.com/w/1076/notes/1064"
  },
  "columns": [
    {
      "id": 346,
      "name": "To do",
      "position": 1,
      "wip_limit": null,
      "finishes": false,
      "cards": []
    },
    {
      "id": 347,
      "name": "Doing",
      "position": 2,
      "wip_limit": null,
      "finishes": false,
      "cards": [
        {
          "id": 145,
          "content": "Survey the dock",
          "note": null,
          "assignee": {
            "id": 1072,
            "name": "somebody@example.org",
            "kind": "person"
          },
          "due_on": null,
          "estimate": 3,
          "colour": null,
          "archived_at": null,
          "completed_at": null,
          "repeats": null,
          "position": 1
        }
      ]
    },
    {
      "id": 348,
      "name": "Done",
      "position": 3,
      "wip_limit": null,
      "finishes": true,
      "cards": []
    }
  ]
}

DELETE /api/v1/w/:workspace_id/notes/:note_id/cards/:id

Remove a card.

needs
write on the thing it touches
answers
The whole note.
refusals
unauthorized, not_found, forbidden, read_only_key, workspace_locked
An example
curl -X DELETE https://goscribi.com/api/v1/w/1076/notes/1064/cards/145 \
  -H "Authorization: Bearer $GO_SCRIBI_KEY"

Answers 200:

{
  "note": {
    "id": 1064,
    "title": "Work",
    "type": "board",
    "folder": null,
    "diary_date": null,
    "subject": null,
    "created_at": "2026-09-23T00:30:16Z",
    "updated_at": "2026-09-23T00:30:16Z",
    "lock_version": 5,
    "url": "https://goscribi.com/w/1076/notes/1064"
  },
  "columns": [
    {
      "id": 346,
      "name": "To do",
      "position": 1,
      "wip_limit": null,
      "finishes": false,
      "cards": []
    },
    {
      "id": 347,
      "name": "Doing",
      "position": 2,
      "wip_limit": null,
      "finishes": false,
      "cards": []
    },
    {
      "id": 348,
      "name": "Done",
      "position": 3,
      "wip_limit": null,
      "finishes": true,
      "cards": []
    }
  ]
}