Go Scribi

The API

History and undo

Every write leaves a version. These read them, read what the note SAID at one of them, and take back a change.

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/versions

What has changed on a note, newest first.

needs
read on the thing it touches
answers
current, versions, can_undo, can_redo, and the paging fields.
refusals
unauthorized, not_found
Parameters for GET /api/v1/w/:workspace_id/notes/:note_id/versions
Parameter In Type Description
page query integer Defaults to 1.
per_page query integer Fifty by default, a hundred at most.

A version's number IS the note's lock_version at that moment — one integer answers both which version and am I writing to what I read.

An outline's changes are described in sentences, because a line count of a ticked box says nothing.

An example
curl -X GET https://goscribi.com/api/v1/w/10783/notes/11464/versions \
  -H "Authorization: Bearer $GO_SCRIBI_KEY"

Answers 200:

{
  "current": 1,
  "versions": [
    {
      "number": 1,
      "title": "Leases",
      "at": "2026-09-16T01:10:30Z",
      "by": {
        "id": 10594,
        "name": "somebody@example.org",
        "kind": "person"
      },
      "added": 1,
      "removed": 1,
      "describes": null,
      "undoes": null,
      "redoes": null,
      "opening": false
    },
    {
      "number": 0,
      "title": "Leases",
      "at": "2026-09-16T01:10:30Z",
      "by": {
        "id": 10594,
        "name": "somebody@example.org",
        "kind": "person"
      },
      "added": 1,
      "removed": 0,
      "describes": null,
      "undoes": null,
      "redoes": null,
      "opening": false
    }
  ],
  "can_undo": false,
  "can_redo": false,
  "page": 1,
  "per_page": 50,
  "total": 2,
  "pages": 1
}

GET /api/v1/w/:workspace_id/notes/:note_id/versions/:number

What the note SAID at one version.

needs
read on the thing it touches
answers
The version, plus body for a Markdown note, or outline and the rows, cards or nodes it had then — built from the snapshot, not from what exists now.
refusals
unauthorized, not_found
Parameters for GET /api/v1/w/:workspace_id/notes/:note_id/versions/:number
Parameter In Type Description
text query boolean

This is where an orphaned comment's written_about points.

An example
curl -X GET https://goscribi.comhttps://goscribi.com/api/v1/w/11074/notes/11147/versions/0 \
  -H "Authorization: Bearer $GO_SCRIBI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "text": "true"
}'

Answers 200:

{
  "number": 0,
  "title": "Leases",
  "at": "2026-09-16T01:10:29Z",
  "by": {
    "id": 10875,
    "name": "somebody@example.org",
    "kind": "person"
  },
  "added": 1,
  "removed": 0,
  "describes": null,
  "undoes": null,
  "redoes": null,
  "opening": false,
  "body": "The **ferry terminal** closes at six.",
  "text": "The ferry terminal closes at six.\n"
}

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

Take back your own last change to a note.

needs
write on the thing it touches
answers
The whole note with changed: true and a sentence — or changed: false and a sentence, which is an answer rather than an error.
refusals
unauthorized, not_found, forbidden, read_only_key, workspace_locked

Only your own, and a key is its owner. An undo is itself a version, so it can be undone.

An example
curl -X POST https://goscribi.com/api/v1/w/11112/notes/10428/undo \
  -H "Authorization: Bearer $GO_SCRIBI_KEY"

Answers 200:

{
  "changed": false,
  "message": "There is nothing of yours left to undo on this note."
}

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

Put back what you just undid.

needs
write on the thing it touches
answers
The same two shapes as undo.
refusals
unauthorized, not_found, forbidden, read_only_key, workspace_locked
An example
curl -X POST https://goscribi.com/api/v1/w/11053/notes/12954/redo \
  -H "Authorization: Bearer $GO_SCRIBI_KEY"

Answers 200:

{
  "note": {
    "id": 12954,
    "title": "Leases",
    "type": "markdown",
    "folder": {
      "id": 3327,
      "name": "Survey"
    },
    "diary_date": null,
    "subject": null,
    "created_at": "2026-09-16T01:10:30Z",
    "updated_at": "2026-09-16T01:10:30Z",
    "lock_version": 3,
    "url": "https://goscribi.com/w/11053/notes/12954"
  },
  "body": "A program wrote this.",
  "changed": true,
  "said": "the last change"
}