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
| 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
bodyfor a Markdown note, oroutlineand the rows, cards or nodes it had then — built from the snapshot, not from what exists now. - refusals
- unauthorized, not_found
| 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: trueand a sentence — orchanged: falseand 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"
}