/docs
Hosted API docs
Public, unmetered HTML generated from this OpenAPI document. Mnemo-owned; no third-party docs runtime.
Responses
200 API reference HTMLcurl
curl -sS -X GET '/api/v1/docs'
v2.9.3 · OpenAPI 3.0.3 · server /api/v1
Personal access token API for pages, databases, comments, whiteboards, search, capture, and history.
Auth: Authorization: Bearer mnemo_… (create under Settings → API & MCP). Write is the default scope; a read-only token stores read only. Optional resource grants (page subtrees and/or databases) are deny-closed when set.
Quota: Free workspaces share 100 successful REST + MCP calls per UTC month. Pro is unlimited. OpenAPI JSON, this docs UI, and GET /formulas are unmetered. Over quota returns 429 with code: MCP_QUOTA_EXCEEDED, resetsAt, and Retry-After until month end. Burst limits (before quota): 120 req/min per IP, 300 req/min per token.
MCP: the same capabilities are available at POST /api/mcp (Streamable HTTP). create_subpage is MCP-only (no REST twin).
Hosted docs: GET /api/v1/docs. Formula catalog: GET /api/v1/formulas.
Machine-readable spec: /api/v1/openapi.json. This page is generated from that document. No third-party docs runtime.
Settings → API & MCP. Resource grants, when set, deny anything outside the listed pages/databases.
Stored in this tab only (sessionStorage). Try-request sends it as Authorization: Bearer to this origin.
Unmetered discovery
/docs
Public, unmetered HTML generated from this OpenAPI document. Mnemo-owned; no third-party docs runtime.
200 API reference HTMLcurl -sS -X GET '/api/v1/docs'
/openapi.json
Public, unmetered. Agents should generate against this spec.
200 OpenAPI 3 JSONcurl -sS -X GET '/api/v1/openapi.json'
/formulas
Public, unmetered. Locked 1.9 function set used by formula columns.
200 Formula functionsfunctions required | array items object
|
|---|
curl -sS -X GET '/api/v1/formulas'
/pages
Workspace tree visible to the token (ACL- and grant-filtered). Row pages are not listed.
200 Page treepages required | array items PageTreeNodeobject
|
|---|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/pages
Optional bodyMarkdown (max 100,000 characters). Optional parentId (null = root). Page links: [[Title|pageId]], or a bare [[Title]], which links the page the token can read with that exact title (any case; the most recently updated wins; no match stays plain text). Callouts open with :::callout info or :::callout type=info and close with :::; kinds are info, success or tip, warning, danger, alert or error, and note, or a colour id (blue, green, yellow, red, purple).
CreatePageBodytitle | string |
|---|---|
parentId | string · nullable · null = workspace root |
bodyMarkdown | string · Initial page body (markdown, max 100,000 characters). Page links: `[[Title|pageId]]`, or a bare `[[Title]]`, which links the page the token can read with that exact title (any case; the most recently updated wins; no match stays plain text). Callouts open with `:::callout info` or `:::callout type=info` and close with `:::`; kinds are info, success or tip, warning, danger, alert or error, and note, or a colour id (blue, green, yellow, red, purple). |
templateId | string · A document template id from GET /templates. Not with bodyMarkdown. Embedded databases and boards the token is not granted are left out. |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/templates
The workspace's saved templates. A document template starts a page (POST /pages), a whiteboard template a board (POST /whiteboards), a database template a database (POST /databases). Saving a template stays in the app.
200 Templatestemplates required | array items object
|
|---|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/templates' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
200 Page including plaintext `body` and markdown `bodyMarkdown`Pageid required | string |
|---|---|
title required | string |
icon | string · nullable |
cover | string · nullable |
type required | string |
parentId | string · nullable |
updatedAt required | string · date-time |
createdAt required | string · date-time |
body required | string · Plaintext preview |
bodyMarkdown required | string · Markdown reconstructed from the live document (same format as File Export) |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}
Cover is not writable on this endpoint.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
UpdatePageBodytitle | string |
|---|---|
icon | string · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X PATCH '/api/v1/pages/{pageId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
children |
query | string · enum keep trash |
`keep` (default) promotes children to roots. `trash` archives the subtree. |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X DELETE '/api/v1/pages/{pageId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/content
content or alias text. Max 100,000 characters. Document pages only. Page links: [[Title|pageId]], or a bare [[Title]], which links the page the token can read with that exact title (any case; the most recently updated wins; no match stays plain text). Callouts open with :::callout info or :::callout type=info and close with :::; kinds are info, success or tip, warning, danger, alert or error, and note, or a colour id (blue, green, yellow, red, purple).
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
ContentBodycontent | string |
|---|---|
text | string · Alias for `content` |
200 Appendedok | boolean |
|---|---|
pageId | string |
appendedChars | integer |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/content' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/content
content or alias text. Max 100,000 characters. Document pages only. Page links: [[Title|pageId]], or a bare [[Title]], which links the page the token can read with that exact title (any case; the most recently updated wins; no match stays plain text). Callouts open with :::callout info or :::callout type=info and close with :::; kinds are info, success or tip, warning, danger, alert or error, and note, or a colour id (blue, green, yellow, red, purple).
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
ContentBodycontent | string |
|---|---|
text | string · Alias for `content` |
200 Replacedok | boolean |
|---|---|
pageId | string |
replacedChars | integer |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X PUT '/api/v1/pages/{pageId}/content' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/review
Verified pages (2.3). Pages the token can see that are due, changed since verified, or never verified with an interval set. Overdue first.
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/review' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/verification
Who last vouched for the page, when, the review interval, and the derived freshness.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
200 Verification statePageVerificationpageId required | string | ||||
|---|---|---|---|---|---|
freshness required | string · enum none verified changed due unverified · Derived: verified (stamped, unchanged, not due), changed (body written after the stamp), due (interval elapsed), unverified (interval set, never stamped), none (never opted in). | ||||
verifiedAt required | string · date-time · nullable | ||||
verifiedBy required | object · nullable · The person who owns the stamp. `name` is the stamp line: the token name when an agent verified, otherwise this person.
| ||||
stampName required | string · nullable · Token name when an agent verified. Null on a human stamp. | ||||
reviewIntervalDays required | integer · nullable · enum 30 90 180 365 null | ||||
bodyUpdatedAt required | string · date-time · nullable | ||||
reviewDueAt required | string · date-time · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}/verification' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/verification
Vouch for the page as the token's user (write scope, member role, page grant). Records the snapshot current at this moment. Optional note and interval.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
VerifyPageBodynote | string · Optional one-liner, e.g. "checked the pricing table" |
|---|---|
reviewIntervalDays | integer · nullable · enum 30 90 180 365 null · Also set the re-verify cadence in the same call. Omit to leave it. |
200 Verification state after the stampPageVerificationpageId required | string | ||||
|---|---|---|---|---|---|
freshness required | string · enum none verified changed due unverified · Derived: verified (stamped, unchanged, not due), changed (body written after the stamp), due (interval elapsed), unverified (interval set, never stamped), none (never opted in). | ||||
verifiedAt required | string · date-time · nullable | ||||
verifiedBy required | object · nullable · The person who owns the stamp. `name` is the stamp line: the token name when an agent verified, otherwise this person.
| ||||
stampName required | string · nullable · Token name when an agent verified. Null on a human stamp. | ||||
reviewIntervalDays required | integer · nullable · enum 30 90 180 365 null | ||||
bodyUpdatedAt required | string · date-time · nullable | ||||
reviewDueAt required | string · date-time · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/verification' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/verification
Set or clear the re-verify cadence without verifying.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
ReviewIntervalBodyreviewIntervalDays required | integer · nullable · enum 30 90 180 365 null · null opts the page out of review. |
|---|
200 Verification statePageVerificationpageId required | string | ||||
|---|---|---|---|---|---|
freshness required | string · enum none verified changed due unverified · Derived: verified (stamped, unchanged, not due), changed (body written after the stamp), due (interval elapsed), unverified (interval set, never stamped), none (never opted in). | ||||
verifiedAt required | string · date-time · nullable | ||||
verifiedBy required | object · nullable · The person who owns the stamp. `name` is the stamp line: the token name when an agent verified, otherwise this person.
| ||||
stampName required | string · nullable · Token name when an agent verified. Null on a human stamp. | ||||
reviewIntervalDays required | integer · nullable · enum 30 90 180 365 null | ||||
bodyUpdatedAt required | string · date-time · nullable | ||||
reviewDueAt required | string · date-time · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X PATCH '/api/v1/pages/{pageId}/verification' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/verification
Clear the stamp and the interval. The page reads as untracked again; past stamps stay in the log.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
200 Verification state, now untrackedPageVerificationpageId required | string | ||||
|---|---|---|---|---|---|
freshness required | string · enum none verified changed due unverified · Derived: verified (stamped, unchanged, not due), changed (body written after the stamp), due (interval elapsed), unverified (interval set, never stamped), none (never opted in). | ||||
verifiedAt required | string · date-time · nullable | ||||
verifiedBy required | object · nullable · The person who owns the stamp. `name` is the stamp line: the token name when an agent verified, otherwise this person.
| ||||
stampName required | string · nullable · Token name when an agent verified. Null on a human stamp. | ||||
reviewIntervalDays required | integer · nullable · enum 30 90 180 365 null | ||||
bodyUpdatedAt required | string · date-time · nullable | ||||
reviewDueAt required | string · date-time · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X DELETE '/api/v1/pages/{pageId}/verification' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/outline
Headings of a document in order, with levels and stable ids (read scope). Reads the stored document, so an edit a few seconds old may be missing. 400 for databases and whiteboards.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Document page id |
200 OutlinePageOutlinepageId required | string | ||||||
|---|---|---|---|---|---|---|---|
headings required | array items object
|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}/outline' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/sections/{headingId}
A heading and what follows it, up to the next heading of the same or a higher level, as Markdown (read scope). Take headingId from the page outline. This is the read a section embed makes. Reads the stored document, so an edit a few seconds old may be missing. 404 when the heading is no longer on the page.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Document page id |
headingId |
path | yes | string |
Stable heading id from the page outline |
200 SectionPageSectionpageId required | string | ||||||
|---|---|---|---|---|---|---|---|
heading required | object
| ||||||
bodyMarkdown required | string · The section as Markdown, heading line first. |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}/sections/{headingId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/tags
The tag catalog (read scope). Assigning a tag is a separate call.
200 Tagstags required | array items object |
|---|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/tags' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/tags
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
200 Page tagspageId | string |
|---|---|
tags | array |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}/tags' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/tags
Adds the named tags and leaves the rest. Write scope, member role, page grant.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
TagIdsBodytagIds required | array items string |
|---|
200 Page tags after the add429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/tags' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/tags
Replaces the page's tags with this list. Tags not in the list are removed.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
TagIdsBodytagIds required | array items string |
|---|
200 Page tags after the replace429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X PUT '/api/v1/pages/{pageId}/tags' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/tags/remove
Removes the named tags and leaves the rest.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
TagIdsBodytagIds required | array items string |
|---|
200 Page tags after the remove429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/tags/remove' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/duplicate
Copies the page next to the original as Copy of <title>: body, icon, cover, tags and access, and for a database its columns, views and rows. Read grant on the page and write grant on its parent; a limited token cannot copy a top-level page.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
201 The copyid | string |
|---|---|
title | string |
type | string |
parentId | string · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/duplicate' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/restore
Write scope and a write grant on the parent the page returns under; a top-level page needs a grant naming it. Restores one page: a page whose parent is still in the trash returns 400, and pages trashed with it stay there. Deleting forever stays in the app.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/restore' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/trash
Trashed pages this token could restore, newest first, up to 200. Database rows are not listed.
200 Trashed pagespages required | array items object
|
|---|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/trash' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/move
Write scope and a write grant on the page and on the destination. A limited token cannot move a page to the workspace root. Same-parent reorder does not write an activity row.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
MovePageBodyparentId | string · nullable · Null moves to the workspace root. A limited token cannot do that. |
|---|---|
position | oneOf integer string · enum append |
200 Movedid | string |
|---|---|
parentId | string · nullable |
position | integer |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/move' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/batch
One quota charge. Each item returns its own success or error. A failure does not roll back earlier items. Nested batch is rejected. ops: add_page_tags, remove_page_tags, set_page_tags, move_page, resolve_comment, unresolve_comment, delete_comment, update_page, restore_page, create_comment, add_whiteboard_shape, update_whiteboard_shape, delete_whiteboard_shape, create_database_view, update_database_view, delete_database_view, move_runbook_step, remove_runbook_step, verify_page.
BatchBodyoperations required | array items object
|
|---|
200 Per-item results429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/batch' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/activity
The change history, newest first (read scope): pages created, renamed, moved, trashed, restored, verified or unverified, bodies edited, and database rows added, each with when and by whom. Only pages the token's owner can open and the token is granted. Body edits are one entry per editor per quiet spell, not per keystroke. To poll, ask again with since set to the newest at you hold. Pass nextCursor back as cursor for the next page; a page can be empty and still carry a nextCursor, so follow the cursor until it is null.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
since |
query | string |
ISO 8601 time. Entries at or after it. | |
until |
query | string |
ISO 8601 time. Entries before it. | |
pageId |
query | string |
Only this page. | |
limit |
query | integer |
Page size, 1 to 200. Default 50. | |
cursor |
query | string |
`nextCursor` from the previous page. |
200 ActivityActivityListentries required | array items ActivityEntryobject
| ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
nextCursor required | string · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/activity' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/live
Server-sent events for a Bearer token. Each event is { pageId, kind, at } only. The same grant and page access as list activity apply. Titles and row bodies are not on this stream.
200 Text event stream429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/live' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/graph
Incoming and outgoing page links from one page, depth at most 2. Archived pages and pages the token cannot open are omitted.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
query | yes | string |
|
depth |
query | integer |
200 Graph429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/graph' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/search
Returns { results, rows, files }. results are pages (limit 20 with q, 12 without). rows are cell-value hits (empty when q is blank, limit 12). files are uploaded PDF, Word and text files whose name or text matches (limit 10), each with its page and a snippet; empty when q is blank or types / tags is set. types is comma-separated document|database|whiteboard (unknown values ignored). tags is comma-separated workspace tag ids (OR).
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
q |
query | string |
Search query. Empty still returns recent pages. | |
types |
query | string |
Comma-separated page types: document, database, whiteboard | |
tags |
query | string |
Comma-separated workspace tag ids (OR) |
200 Page results plus row and file hitsresults required | array items SearchHitobject
| ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
rows required | array items SearchRowHitobject
| ||||||||||||||
files required | array items SearchFileHitobject
|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/search' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
Text inside uploaded PDF, Word and text files
/pages/{pageId}/attachments
Read scope + page grant. text is ready, pending (not read yet), empty, unreadable, or not_text (images, spreadsheets, zips).
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
200 Filesattachments required | array items object
|
|---|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}/attachments' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/attachments/{attachmentId}/text
The text inside an uploaded PDF, Word (.docx) or text file, in windows. Read scope + grant on the file's page. A file not read yet is read on this call. Up to 200,000 characters per file are kept; scanned PDFs have none.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
attachmentId |
path | yes | string |
Attachment id |
offset |
query | integer |
Character to start at. Pass the last `nextOffset`. | |
limit |
query | integer |
Characters to return (default 20,000) |
200 File textid | string |
|---|---|
filename | string |
contentType | string |
pageId | string |
text | AttachmentTextStatestring · enum ready pending empty unreadable not_text |
content | string |
offset | integer |
nextOffset | integer · nullable |
totalChars | integer |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/attachments/{attachmentId}/text' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/databases
200 Databasesdatabases required | array |
|---|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/databases' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/databases
CreateDatabaseBodytitle | string |
|---|---|
parentId | string · nullable |
templateId | string · `blank`, a legacy starter name (maps to blank), or `tpl_…` |
201 Created databaseDatabaseCreatedid required | string |
|---|---|
pageId required | string |
title required | string |
templateId | string |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/databases' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/databases/{databaseId}/rows
databaseId may be the database id, the host page id, or a unique title. Results are always paged: limit defaults to 80 and is capped at 200. When nextCursor is not null, request again with cursor set to it (and the same filter, sortPropId and sortDir) for the next page; totalCount is the filtered total.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
filter |
query | string |
JSON FilterGroup | |
sortPropId |
query | string |
||
sortDir |
query | string · enum asc desc |
||
cursor |
query | string |
`nextCursor` from the previous page | |
limit |
query | integer |
Page size (default 80, max 200) |
200 Rows (computed lookup/rollup/formula filled)databaseId | string | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
pageId | string | ||||||||||||
properties | array items DatabasePropertyobject
| ||||||||||||
rows | array items DatabaseRowobject
| ||||||||||||
nextCursor | string · nullable | ||||||||||||
totalCount | integer |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/databases/{databaseId}/rows' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/databases/{databaseId}/rows
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
WriteRowBodytitle | string · Merged into the Name property |
|---|---|
properties | object · Property id or name → value |
notes | string · Plaintext notes on the row |
linkedPageId | string · nullable · Existing page, board, or database id |
201 Created rowDatabaseRowid | string |
|---|---|
databaseId | string |
pageId | string |
properties | object |
notes | string |
linkedPageId | string · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/databases/{databaseId}/rows' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/databases/{databaseId}/rows/{rowId}
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
rowId |
path | yes | string |
Row id |
WriteRowBodytitle | string · Merged into the Name property |
|---|---|
properties | object · Property id or name → value |
notes | string · Plaintext notes on the row |
linkedPageId | string · nullable · Existing page, board, or database id |
200 Updated rowDatabaseRowid | string |
|---|---|
databaseId | string |
pageId | string |
properties | object |
notes | string |
linkedPageId | string · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X PATCH '/api/v1/databases/{databaseId}/rows/{rowId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/databases/{databaseId}/rows/{rowId}
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
rowId |
path | yes | string |
Row id |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X DELETE '/api/v1/databases/{databaseId}/rows/{rowId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/databases/{databaseId}/properties
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
CreatePropertyBodyname required | string | ||||
|---|---|---|---|---|---|
type required | PropertyTypestring · enum text number select multi_select date checkbox relation formula person url email phone auto_id created_time last_edited_time | ||||
options | array items SelectOptionInputoneOf string object
| ||||
targetDatabaseId | string · Required when type is `relation` | ||||
expression | string · Required when type is `formula` |
201 Created property429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/databases/{databaseId}/properties' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/databases/{databaseId}/properties/{propertyId}
At least one of name or options.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
propertyId |
path | yes | string |
Property id |
UpdatePropertyBodyname | string | ||||
|---|---|---|---|---|---|
options | array · Replaces select / multi_select options. Existing names keep their ids, and their color unless a color is given. items SelectOptionInputoneOf string object
|
200 Updated propertyDatabasePropertyid | string | ||||||
|---|---|---|---|---|---|---|---|
name | string | ||||||
type | string | ||||||
options | array items SelectOptionobject
| ||||||
configJson | object |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X PATCH '/api/v1/databases/{databaseId}/properties/{propertyId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/databases/{databaseId}/properties/{propertyId}
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
propertyId |
path | yes | string |
Property id |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X DELETE '/api/v1/databases/{databaseId}/properties/{propertyId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/databases/{databaseId}/views
Saved views with their filter, sort and grouping, and which is the default. Read scope + grant.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
200 ViewsdatabaseId required | string | ||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
views required | array items DatabaseViewobject
|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/databases/{databaseId}/views' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/databases/{databaseId}/views
Write scope + write grant. viewType is required.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
DatabaseViewBodyname | string | ||||||||
|---|---|---|---|---|---|---|---|---|---|
viewType | string · enum table kanban gallery calendar chart | ||||||||
filter | object · FilterGroup, as in the rows `filter` query | ||||||||
sortPropId | string · nullable | ||||||||
sortDir | string · enum asc desc | ||||||||
boardPropertyId | string · nullable | ||||||||
groupByPropId | string · nullable | ||||||||
subGroupByPropId | string · nullable | ||||||||
datePropertyId | string · nullable | ||||||||
chart | DatabaseChartobject
| ||||||||
makeDefault | boolean · true makes this the view the database opens with |
201 Created viewDatabaseViewid required | string | ||||||||
|---|---|---|---|---|---|---|---|---|---|
name required | string | ||||||||
viewType required | string · enum table kanban gallery calendar chart | ||||||||
filter required | object · FilterGroup | ||||||||
sortPropId | string · nullable | ||||||||
sortDir | string · enum asc desc | ||||||||
boardPropertyId | string · nullable | ||||||||
groupByPropId | string · nullable | ||||||||
subGroupByPropId | string · nullable | ||||||||
datePropertyId | string · nullable | ||||||||
chart | DatabaseChartobject
| ||||||||
position | integer | ||||||||
isDefault required | boolean |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/databases/{databaseId}/views' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/databases/{databaseId}/views/{viewId}
Write scope + write grant. Fields left out keep their value. makeDefault: true makes it the default.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
viewId |
path | yes | string |
View id |
DatabaseViewBodyname | string | ||||||||
|---|---|---|---|---|---|---|---|---|---|
viewType | string · enum table kanban gallery calendar chart | ||||||||
filter | object · FilterGroup, as in the rows `filter` query | ||||||||
sortPropId | string · nullable | ||||||||
sortDir | string · enum asc desc | ||||||||
boardPropertyId | string · nullable | ||||||||
groupByPropId | string · nullable | ||||||||
subGroupByPropId | string · nullable | ||||||||
datePropertyId | string · nullable | ||||||||
chart | DatabaseChartobject
| ||||||||
makeDefault | boolean · true makes this the view the database opens with |
200 Updated viewDatabaseViewid required | string | ||||||||
|---|---|---|---|---|---|---|---|---|---|
name required | string | ||||||||
viewType required | string · enum table kanban gallery calendar chart | ||||||||
filter required | object · FilterGroup | ||||||||
sortPropId | string · nullable | ||||||||
sortDir | string · enum asc desc | ||||||||
boardPropertyId | string · nullable | ||||||||
groupByPropId | string · nullable | ||||||||
subGroupByPropId | string · nullable | ||||||||
datePropertyId | string · nullable | ||||||||
chart | DatabaseChartobject
| ||||||||
position | integer | ||||||||
isDefault required | boolean |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X PATCH '/api/v1/databases/{databaseId}/views/{viewId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/databases/{databaseId}/views/{viewId}
Rows are not touched. The last view cannot be deleted. Deleting the default makes the first remaining view the default.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
databaseId |
path | yes | string |
Database id, page id, or unique title |
viewId |
path | yes | string |
View id |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X DELETE '/api/v1/databases/{databaseId}/views/{viewId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/comments
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
200 Commentscomments required | array items Commentobject
|
|---|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}/comments' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/comments
Reply nesting is one level. API-created comments use authorName API.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
CreateCommentBodybody required | string |
|---|---|
parentId | string · nullable |
anchor | string · nullable |
201 Created commentCommentid required | string |
|---|---|
pageId required | string |
parentId | string · nullable |
authorId required | string |
authorName | string |
body required | string |
anchor | string · nullable |
resolvedAt | string · date-time · nullable |
createdAt required | string · date-time |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/comments' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/comments/{commentId}
Root comments only. The token owner must be the comment author, or an admin or owner.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
commentId |
path | yes | string |
Comment id |
ResolveCommentBodyresolved required | boolean |
|---|
200 CommentCommentid required | string |
|---|---|
pageId required | string |
parentId | string · nullable |
authorId required | string |
authorName | string |
body required | string |
anchor | string · nullable |
resolvedAt | string · date-time · nullable |
createdAt required | string · date-time |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X PATCH '/api/v1/pages/{pageId}/comments/{commentId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/comments/{commentId}
Only a comment written through the API by this token's owner. A thread with a reply from anyone else returns 409; resolve it instead.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
commentId |
path | yes | string |
Comment id |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X DELETE '/api/v1/pages/{pageId}/comments/{commentId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/whiteboards
Mints a whiteboard page. Optional parentId (null = root) and picker icon. Document pages stay on POST /pages.
CreateWhiteboardBodytitle | string |
|---|---|
parentId | string · nullable · null = workspace root |
icon | string · nullable · Known picker lucide:<id> (optional #color) or a single emoji |
templateId | string · A whiteboard template id from GET /templates. Images and page cards are left out. |
201 Created whiteboardWhiteboardCreatedid required | string |
|---|---|
title required | string |
type required | string · enum whiteboard |
icon | string · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/whiteboards' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/shapes
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Whiteboard page id |
200 ShapespageId | string |
|---|---|
shapes | array items Shapeobject · Whiteboard shape (rect, ellipse, diamond, triangle, text, arrow, ink, image, sticky, frame, page, …). A `page` shape is a card that links to another page: `pageId` must name a live page the token can read; the card's title, icon, and verification mark are looked up live, never stored. |
zOrder | array items string |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}/shapes' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/shapes
Body is the shape object, or { "shape": { … } }.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Whiteboard page id |
Shapeshape | Shapeobject · Whiteboard shape (rect, ellipse, diamond, triangle, text, arrow, ink, image, sticky, frame, page, …). A `page` shape is a card that links to another page: `pageId` must name a live page the token can read; the card's title, icon, and verification mark are looked up live, never stored. |
|---|
201 Created shapeok | boolean |
|---|---|
pageId | string |
shape | Shapeobject · Whiteboard shape (rect, ellipse, diamond, triangle, text, arrow, ink, image, sticky, frame, page, …). A `page` shape is a card that links to another page: `pageId` must name a live page the token can read; the card's title, icon, and verification mark are looked up live, never stored. |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/shapes' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/shapes/{shapeId}
Geometry and text on an existing shape. z is front or back. A missing id is 404 and does not create a shape.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Whiteboard page id |
shapeId |
path | yes | string |
Shape id |
200 Updated429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X PATCH '/api/v1/pages/{pageId}/shapes/{shapeId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/shapes/{shapeId}
Removes the shape from the board. Shapes have no trash.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Whiteboard page id |
shapeId |
path | yes | string |
Shape id |
200 Deleted429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X DELETE '/api/v1/pages/{pageId}/shapes/{shapeId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/capture/idea
Prepends a row on the workspace Ideas database (write). Restricted tokens may write an existing Ideas page they are granted; only unrestricted tokens may create it.
CaptureIdeaBodytitle required | string |
|---|---|
notes | string |
timeZone | string · IANA time zone for the Date stamp |
200 Captured ideaCaptureRowResultrowId required | string |
|---|---|
pageId required | string |
databaseId required | string |
created required | boolean |
restored required | boolean |
peekUrl required | string |
due | string · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/capture/idea' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/capture/task
Prepends a row on the workspace Tasks database (write). Restricted tokens may write an existing Tasks page they are granted; only unrestricted tokens may create it.
CaptureTaskBodytitle required | string |
|---|---|
due | string · nullable · YYYY-MM-DD |
timeZone | string |
200 Captured taskCaptureRowResultrowId required | string |
|---|---|
pageId required | string |
databaseId required | string |
created required | boolean |
restored required | boolean |
peekUrl required | string |
due | string · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/capture/task' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/capture/decision
Prepends a row on the workspace Decisions database, dated now with Status on Decided (write). Restricted tokens may write an existing Decisions page they are granted; only unrestricted tokens may create it.
CaptureDecisionBodytitle required | string |
|---|---|
notes | string |
timeZone | string · IANA time zone for the Date stamp |
200 Captured decisionCaptureRowResultrowId required | string |
|---|---|
pageId required | string |
databaseId required | string |
created required | boolean |
restored required | boolean |
peekUrl required | string |
due | string · nullable |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/capture/decision' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/capture/today
Opens the daily note for dailyDate or the caller timeZone day (write). Never midnight-spawns another day. Restricted tokens cannot create a missing daily note.
CaptureTodayBodydailyDate | string · YYYY-MM-DD. When omitted, uses timeZone (same as the UI). |
|---|---|
timeZone | string · IANA time zone when dailyDate is omitted |
200 Daily noteCaptureTodayResultid required | string | ||||||||
|---|---|---|---|---|---|---|---|---|---|
dailyDate required | string | ||||||||
created required | boolean | ||||||||
restored required | boolean | ||||||||
pageUrl required | string | ||||||||
tasks | array · Open tasks whose Due is this daily note. Omitted from view when the token cannot see Tasks. items object
|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/capture/today' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/pages/{pageId}/history
Viewers can list. API rows include actorName (token name at write).
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
200 SnapshotsPageHistoryListsnapshots required | array items object
| ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
matchesSnapshot required | boolean |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}/history' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/history/{snapshotId}/diff
Plaintext/markdown unified diff of live vs snapshot. Viewers can diff.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
snapshotId |
path | yes | string |
Snapshot id |
200 DiffPageHistoryDiffsnapshotId required | string |
|---|---|
createdAt required | string · date-time |
reason required | string |
actorName | string · nullable |
liveMarkdown required | string |
snapshotMarkdown required | string |
unifiedDiff required | string |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/pages/{pageId}/history/{snapshotId}/diff' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/pages/{pageId}/history/{snapshotId}/restore
Write + edit. Saves a before_restore snapshot first.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
pageId |
path | yes | string |
Page id |
snapshotId |
path | yes | string |
Snapshot id |
200 Restoredok required | boolean · enum true |
|---|---|
documentName required | string |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/pages/{pageId}/history/{snapshotId}/restore' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/runbooks
Runbooks (2.7) this token can open. Each step is a whole page or one section. Steps the token cannot open are omitted, titles included.
200 Runbooksrunbooks required | array items Runbookobject
|
|---|
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X GET '/api/v1/runbooks' \ -H 'Authorization: Bearer $MNEMO_TOKEN'
/runbooks
Write scope, member role. Optional parentId; a limited token must pass a write-granted parentId. Add steps with POST /runbooks/{id}/steps.
title | string |
|---|---|
parentId | string · nullable |
201 Created runbookid | string |
|---|---|
pageId | string |
title | string |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/runbooks' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/runbooks/{id}/steps/{stepId}
Write scope + write grant on the runbook. The page the step points at is not touched.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
id |
path | yes | string |
Runbook id |
stepId |
path | yes | string |
Step id |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X DELETE '/api/v1/runbooks/{id}/steps/{stepId}' \
-H 'Authorization: Bearer $MNEMO_TOKEN'
/runbooks/{id}/steps/{stepId}/move
One place earlier or later. A step already at that end stays put. Write scope + write grant on the runbook.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
id |
path | yes | string |
Runbook id |
stepId |
path | yes | string |
Step id |
direction required | string · enum earlier later |
|---|
200 Movedok | boolean · enum true |
|---|---|
id | string |
direction | string · enum earlier later |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/runbooks/{id}/steps/{stepId}/move' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
/runbooks/{id}/steps
Write scope, member role. Adds a whole page, or one section when headingId is set. A runbook cannot be a step of itself.
| Name | In | Required | Schema | Description |
|---|---|---|---|---|
id |
path | yes | string |
Runbook id |
AddRunbookStepBodypageId required | string |
|---|---|
headingId | string · Stable heading id from the page outline. Omit to add the whole page. |
201 Step addedRunbookStepCreatedid required | string |
|---|---|
runbookId required | string |
pageId required | string |
headingId | string · nullable |
position required | number |
429 Burst rate limit (IP 120/min or token 300/min) or Free monthly quota. `Retry-After` is seconds. Quota body includes `code: MCP_QUOTA_EXCEEDED`.QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
curl -sS -X POST '/api/v1/runbooks/{id}/steps' \
-H 'Authorization: Bearer $MNEMO_TOKEN' \
-H 'Content-Type: application/json' \
-d '{}'
JSON schemas from components.schemas.
ActivityEntryid required | string | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
at required | string · date-time | ||||||||||
kind required | string · enum created renamed moved archived restored verified verification_cleared body_edited row_added | ||||||||||
page required | object
| ||||||||||
actor required | object
| ||||||||||
detail required | object · Kind-specific facts: `from` / `to` titles for renamed; `fromParent` / `toParent`, `toTopLevel`, or `fromWorkspace` for moved (a parent the caller cannot open is null); `rowId` / `rowTitle` for row_added; `via` for body_edited when not typed (api, restore); `origin` for created when not made blank. |
{
"id": "",
"at": "2026-01-01T00:00:00.000Z",
"kind": "created",
"page": {
"id": "",
"title": "",
"icon": null,
"type": "",
"isArchived": false
},
"actor": {
"userId": null,
"name": null,
"agent": null
},
"detail": {}
}ActivityListentries required | array items ActivityEntryobject
| ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
nextCursor required | string · nullable |
{
"entries": [
{
"id": "",
"at": "2026-01-01T00:00:00.000Z",
"kind": "created",
"page": {
"id": "",
"title": "",
"icon": "",
"type": "",
"isArchived": ""
},
"actor": {
"userId": "",
"name": "",
"agent": ""
},
"detail": {}
}
],
"nextCursor": null
}AddRunbookStepBodypageId required | string |
|---|---|
headingId | string · Stable heading id from the page outline. Omit to add the whole page. |
{
"pageId": "",
"headingId": ""
}AttachmentTextStateready pending empty unreadable not_text"ready"
BatchBodyoperations required | array items object
|
|---|
{
"operations": [
{
"op": "",
"input": {}
}
]
}CaptureDecisionBodytitle required | string |
|---|---|
notes | string |
timeZone | string · IANA time zone for the Date stamp |
{
"title": "",
"notes": "",
"timeZone": ""
}CaptureIdeaBodytitle required | string |
|---|---|
notes | string |
timeZone | string · IANA time zone for the Date stamp |
{
"title": "",
"notes": "",
"timeZone": ""
}CaptureRowResultrowId required | string |
|---|---|
pageId required | string |
databaseId required | string |
created required | boolean |
restored required | boolean |
peekUrl required | string |
due | string · nullable |
{
"rowId": "",
"pageId": "",
"databaseId": "",
"created": false,
"restored": false,
"peekUrl": "",
"due": null
}CaptureTaskBodytitle required | string |
|---|---|
due | string · nullable · YYYY-MM-DD |
timeZone | string |
{
"title": "",
"due": null,
"timeZone": ""
}CaptureTodayBodydailyDate | string · YYYY-MM-DD. When omitted, uses timeZone (same as the UI). |
|---|---|
timeZone | string · IANA time zone when dailyDate is omitted |
{
"dailyDate": "",
"timeZone": ""
}CaptureTodayResultid required | string | ||||||||
|---|---|---|---|---|---|---|---|---|---|
dailyDate required | string | ||||||||
created required | boolean | ||||||||
restored required | boolean | ||||||||
pageUrl required | string | ||||||||
tasks | array · Open tasks whose Due is this daily note. Omitted from view when the token cannot see Tasks. items object
|
{
"id": "",
"dailyDate": "",
"created": false,
"restored": false,
"pageUrl": "",
"tasks": [
{
"rowId": "",
"title": "",
"due": "",
"peekUrl": ""
}
]
}Commentid required | string |
|---|---|
pageId required | string |
parentId | string · nullable |
authorId required | string |
authorName | string |
body required | string |
anchor | string · nullable |
resolvedAt | string · date-time · nullable |
createdAt required | string · date-time |
{
"id": "",
"pageId": "",
"parentId": null,
"authorId": "",
"authorName": "",
"body": "",
"anchor": null,
"resolvedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z"
}ContentBodycontent | string |
|---|---|
text | string · Alias for `content` |
{
"content": "",
"text": ""
}CreateCommentBodybody required | string |
|---|---|
parentId | string · nullable |
anchor | string · nullable |
{
"body": "",
"parentId": null,
"anchor": null
}CreateDatabaseBodytitle | string |
|---|---|
parentId | string · nullable |
templateId | string · `blank`, a legacy starter name (maps to blank), or `tpl_…` |
{
"title": "",
"parentId": null,
"templateId": ""
}CreatePageBodytitle | string |
|---|---|
parentId | string · nullable · null = workspace root |
bodyMarkdown | string · Initial page body (markdown, max 100,000 characters). Page links: `[[Title|pageId]]`, or a bare `[[Title]]`, which links the page the token can read with that exact title (any case; the most recently updated wins; no match stays plain text). Callouts open with `:::callout info` or `:::callout type=info` and close with `:::`; kinds are info, success or tip, warning, danger, alert or error, and note, or a colour id (blue, green, yellow, red, purple). |
templateId | string · A document template id from GET /templates. Not with bodyMarkdown. Embedded databases and boards the token is not granted are left out. |
{
"title": "",
"parentId": null,
"bodyMarkdown": "",
"templateId": ""
}CreatePropertyBodyname required | string | ||||
|---|---|---|---|---|---|
type required | PropertyTypestring · enum text number select multi_select date checkbox relation formula person url email phone auto_id created_time last_edited_time | ||||
options | array items SelectOptionInputoneOf string object
| ||||
targetDatabaseId | string · Required when type is `relation` | ||||
expression | string · Required when type is `formula` |
{
"name": "",
"type": "text",
"options": [
""
],
"targetDatabaseId": "",
"expression": ""
}CreateWhiteboardBodytitle | string |
|---|---|
parentId | string · nullable · null = workspace root |
icon | string · nullable · Known picker lucide:<id> (optional #color) or a single emoji |
templateId | string · A whiteboard template id from GET /templates. Images and page cards are left out. |
{
"title": "",
"parentId": null,
"icon": null,
"templateId": ""
}DatabaseChartkind required | string · enum bar pie |
|---|---|
categoryPropId | string · nullable · A select, status, multi_select, date or checkbox property |
valuePropId | string · nullable · A number property; required to sum |
aggregation | string · enum count sum |
{
"kind": "bar",
"categoryPropId": null,
"valuePropId": null,
"aggregation": "count"
}DatabaseCreatedid required | string |
|---|---|
pageId required | string |
title required | string |
templateId | string |
{
"id": "",
"pageId": "",
"title": "",
"templateId": ""
}DatabasePropertyid | string | ||||||
|---|---|---|---|---|---|---|---|
name | string | ||||||
type | string | ||||||
options | array items SelectOptionobject
| ||||||
configJson | object |
{
"id": "",
"name": "",
"type": "",
"options": [
{
"id": "",
"name": "",
"color": "gray"
}
],
"configJson": {}
}DatabaseRowid | string |
|---|---|
databaseId | string |
pageId | string |
properties | object |
notes | string |
linkedPageId | string · nullable |
{
"id": "",
"databaseId": "",
"pageId": "",
"properties": {},
"notes": "",
"linkedPageId": null
}DatabaseSummaryid required | string |
|---|---|
title required | string |
pageId required | string |
{
"id": "",
"title": "",
"pageId": ""
}DatabaseViewid required | string | ||||||||
|---|---|---|---|---|---|---|---|---|---|
name required | string | ||||||||
viewType required | string · enum table kanban gallery calendar chart | ||||||||
filter required | object · FilterGroup | ||||||||
sortPropId | string · nullable | ||||||||
sortDir | string · enum asc desc | ||||||||
boardPropertyId | string · nullable | ||||||||
groupByPropId | string · nullable | ||||||||
subGroupByPropId | string · nullable | ||||||||
datePropertyId | string · nullable | ||||||||
chart | DatabaseChartobject
| ||||||||
position | integer | ||||||||
isDefault required | boolean |
{
"id": "",
"name": "",
"viewType": "table",
"filter": {},
"sortPropId": null,
"sortDir": "asc",
"boardPropertyId": null,
"groupByPropId": null,
"subGroupByPropId": null,
"datePropertyId": null,
"chart": {
"kind": "bar",
"categoryPropId": null,
"valuePropId": null,
"aggregation": "count"
},
"position": 0,
"isDefault": false
}DatabaseViewBodyname | string | ||||||||
|---|---|---|---|---|---|---|---|---|---|
viewType | string · enum table kanban gallery calendar chart | ||||||||
filter | object · FilterGroup, as in the rows `filter` query | ||||||||
sortPropId | string · nullable | ||||||||
sortDir | string · enum asc desc | ||||||||
boardPropertyId | string · nullable | ||||||||
groupByPropId | string · nullable | ||||||||
subGroupByPropId | string · nullable | ||||||||
datePropertyId | string · nullable | ||||||||
chart | DatabaseChartobject
| ||||||||
makeDefault | boolean · true makes this the view the database opens with |
{
"name": "",
"viewType": "table",
"filter": {},
"sortPropId": null,
"sortDir": "asc",
"boardPropertyId": null,
"groupByPropId": null,
"subGroupByPropId": null,
"datePropertyId": null,
"chart": {
"kind": "bar",
"categoryPropId": null,
"valuePropId": null,
"aggregation": "count"
},
"makeDefault": false
}Errorerror required | string |
|---|
{
"error": ""
}MovePageBodyparentId | string · nullable · Null moves to the workspace root. A limited token cannot do that. |
|---|---|
position | oneOf integer string · enum append |
{
"parentId": null,
"position": 0
}OkIdok required | boolean · enum true |
|---|---|
id | string |
pageId | string |
databaseId | string |
{
"ok": true,
"id": "",
"pageId": "",
"databaseId": ""
}Pageid required | string |
|---|---|
title required | string |
icon | string · nullable |
cover | string · nullable |
type required | string |
parentId | string · nullable |
updatedAt required | string · date-time |
createdAt required | string · date-time |
body required | string · Plaintext preview |
bodyMarkdown required | string · Markdown reconstructed from the live document (same format as File Export) |
{
"id": "",
"title": "",
"icon": null,
"cover": null,
"type": "",
"parentId": null,
"updatedAt": "2026-01-01T00:00:00.000Z",
"createdAt": "2026-01-01T00:00:00.000Z",
"body": "",
"bodyMarkdown": ""
}PageCreatedid required | string |
|---|---|
title required | string |
{
"id": "",
"title": ""
}PageHistoryDiffsnapshotId required | string |
|---|---|
createdAt required | string · date-time |
reason required | string |
actorName | string · nullable |
liveMarkdown required | string |
snapshotMarkdown required | string |
unifiedDiff required | string |
{
"snapshotId": "",
"createdAt": "2026-01-01T00:00:00.000Z",
"reason": "",
"actorName": null,
"liveMarkdown": "",
"snapshotMarkdown": "",
"unifiedDiff": ""
}PageHistoryListsnapshots required | array items object
| ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
matchesSnapshot required | boolean |
{
"snapshots": [
{
"id": "",
"createdAt": "2026-01-01T00:00:00.000Z",
"reason": "",
"actorName": null,
"isCurrent": false
}
],
"matchesSnapshot": false
}PageOutlinepageId required | string | ||||||
|---|---|---|---|---|---|---|---|
headings required | array items object
|
{
"pageId": "",
"headings": [
{
"id": "",
"level": 0,
"text": ""
}
]
}PageSectionpageId required | string | ||||||
|---|---|---|---|---|---|---|---|
heading required | object
| ||||||
bodyMarkdown required | string · The section as Markdown, heading line first. |
{
"pageId": "",
"heading": {
"id": "",
"level": 0,
"text": ""
},
"bodyMarkdown": ""
}PageTreeNodeid required | string | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
title required | string | ||||||||||||||
icon | string · nullable | ||||||||||||||
parentId required | string · nullable | ||||||||||||||
type required | PageTypestring · enum document database whiteboard | ||||||||||||||
position required | number | ||||||||||||||
children required | array items PageTreeNodeobject
|
{
"id": "",
"title": "",
"icon": null,
"parentId": null,
"type": "document",
"position": 0,
"children": [
{
"id": "",
"title": "",
"icon": null,
"parentId": null,
"type": "",
"position": 0,
"children": [
""
]
}
]
}PageTypedocument database whiteboard"document"
PageUpdatedid required | string |
|---|---|
title required | string |
icon | string · nullable |
{
"id": "",
"title": "",
"icon": null
}PageVerificationpageId required | string | ||||
|---|---|---|---|---|---|
freshness required | string · enum none verified changed due unverified · Derived: verified (stamped, unchanged, not due), changed (body written after the stamp), due (interval elapsed), unverified (interval set, never stamped), none (never opted in). | ||||
verifiedAt required | string · date-time · nullable | ||||
verifiedBy required | object · nullable · The person who owns the stamp. `name` is the stamp line: the token name when an agent verified, otherwise this person.
| ||||
stampName required | string · nullable · Token name when an agent verified. Null on a human stamp. | ||||
reviewIntervalDays required | integer · nullable · enum 30 90 180 365 null | ||||
bodyUpdatedAt required | string · date-time · nullable | ||||
reviewDueAt required | string · date-time · nullable |
{
"pageId": "",
"freshness": "none",
"verifiedAt": "2026-01-01T00:00:00.000Z",
"verifiedBy": {
"id": "",
"name": ""
},
"stampName": null,
"reviewIntervalDays": 30,
"bodyUpdatedAt": "2026-01-01T00:00:00.000Z",
"reviewDueAt": "2026-01-01T00:00:00.000Z"
}PropertyTypetext number select multi_select date checkbox relation formula person url email phone auto_id created_time last_edited_time"text"
QuotaErrorerror required | string |
|---|---|
code required | string · enum MCP_QUOTA_EXCEEDED |
resetsAt | string · date-time · When the Free allowance starts again (00:00 UTC on the 1st) |
{
"error": "",
"code": "MCP_QUOTA_EXCEEDED",
"resetsAt": "2026-01-01T00:00:00.000Z"
}ResolveCommentBodyresolved required | boolean |
|---|
{
"resolved": false
}ReviewIntervalBodyreviewIntervalDays required | integer · nullable · enum 30 90 180 365 null · null opts the page out of review. |
|---|
{
"reviewIntervalDays": 30
}ReviewQueueEntry""
Runbookid required | string | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
pageId required | string · The runbook document. | ||||||||||||
title required | string | ||||||||||||
steps required | array · Steps this token can open. Hidden steps are omitted. items RunbookStepobject
|
{
"id": "",
"pageId": "",
"title": "",
"steps": [
{
"id": "",
"pageId": "",
"headingId": null,
"label": "",
"sourceTitle": null,
"position": 0
}
]
}RunbookStepid required | string |
|---|---|
pageId required | string |
headingId | string · nullable · Stable heading id when the step is one section. Null for a whole page. |
label required | string |
sourceTitle | string · nullable · The source page name, set on a section step. |
position required | number |
{
"id": "",
"pageId": "",
"headingId": null,
"label": "",
"sourceTitle": null,
"position": 0
}RunbookStepCreatedid required | string |
|---|---|
runbookId required | string |
pageId required | string |
headingId | string · nullable |
position required | number |
{
"id": "",
"runbookId": "",
"pageId": "",
"headingId": null,
"position": 0
}SearchFileHitid | string · Attachment id, for /attachments/{id}/text |
|---|---|
filename | string |
contentType | string |
pageId | string |
pageTitle | string |
snippet | string |
{
"id": "",
"filename": "",
"contentType": "",
"pageId": "",
"pageTitle": "",
"snippet": ""
}SearchHitid required | string |
|---|---|
title required | string |
icon | string · nullable |
type required | string |
parentId | string · nullable |
updatedAt | string · date-time |
{
"id": "",
"title": "",
"icon": null,
"type": "",
"parentId": null,
"updatedAt": "2026-01-01T00:00:00.000Z"
}SearchRowHitrowId required | string |
|---|---|
databaseId required | string |
pageId required | string |
databaseTitle | string |
rowTitle | string |
snippet | string |
icon | string · nullable |
{
"rowId": "",
"databaseId": "",
"pageId": "",
"databaseTitle": "",
"rowTitle": "",
"snippet": "",
"icon": null
}SelectOptionid | string |
|---|---|
name | string |
color | string · enum gray blue green orange red purple yellow |
{
"id": "",
"name": "",
"color": "gray"
}SelectOptionInputname required | string |
|---|---|
color | string · enum gray blue green orange red purple yellow |
""
Shape{}Tagid required | string |
|---|---|
name required | string |
color required | string |
{
"id": "",
"name": "",
"color": ""
}TagIdsBodytagIds required | array items string |
|---|
{
"tagIds": [
""
]
}UpdatePageBodytitle | string |
|---|---|
icon | string · nullable |
{
"title": "",
"icon": null
}UpdatePropertyBodyname | string | ||||
|---|---|---|---|---|---|
options | array · Replaces select / multi_select options. Existing names keep their ids, and their color unless a color is given. items SelectOptionInputoneOf string object
|
{
"name": "",
"options": [
""
]
}VerifyPageBodynote | string · Optional one-liner, e.g. "checked the pricing table" |
|---|---|
reviewIntervalDays | integer · nullable · enum 30 90 180 365 null · Also set the re-verify cadence in the same call. Omit to leave it. |
{
"note": "",
"reviewIntervalDays": 30
}WhiteboardCreatedid required | string |
|---|---|
title required | string |
type required | string · enum whiteboard |
icon | string · nullable |
{
"id": "",
"title": "",
"type": "whiteboard",
"icon": null
}WriteRowBodytitle | string · Merged into the Name property |
|---|---|
properties | object · Property id or name → value |
notes | string · Plaintext notes on the row |
linkedPageId | string · nullable · Existing page, board, or database id |
{
"title": "",
"properties": {},
"notes": "",
"linkedPageId": null
}