Mnemo REST API

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.

Authentication

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.

Docs

Unmetered discovery

GET /docs

Hosted API docs

Public, unmetered HTML generated from this OpenAPI document. Mnemo-owned; no third-party docs runtime.

Responses

200 API reference HTML
no JSON body

curl

curl -sS -X GET '/api/v1/docs'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /openapi.json

This OpenAPI document

Public, unmetered. Agents should generate against this spec.

Responses

200 OpenAPI 3 JSON
object

curl

curl -sS -X GET '/api/v1/openapi.json'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /formulas

Formula function catalog

Public, unmetered. Locked 1.9 function set used by formula columns.

Responses

200 Formula functions
object
functions required
array
items
object
name
string
arity
object
min
integer
max
integer
summary
string
example
string

curl

curl -sS -X GET '/api/v1/formulas'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.

Pages

GET /pages

List pages

Workspace tree visible to the token (ACL- and grant-filtered). Row pages are not listed.

Responses

200 Page tree
object
pages required
array
items PageTreeNode
object
id required
string
title required
string
icon
string · nullable
parentId required
string · nullable
type requiredPageType
position required
number
children required
array
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages

Create page

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).

Request body

CreatePageBody
object
title
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.

Responses

201 Created page
PageCreated
object
id required
string
title required
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /templates

List workspace 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.

Responses

200 Templates
object
templates required
array
items
object
id
string
name
string
description
string
kind
string · enum document whiteboard database
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/templates' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /pages/{pageId}

Get page

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Responses

200 Page including plaintext `body` and markdown `bodyMarkdown`
Page
object
id 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)
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
PATCH /pages/{pageId}

Update page title/icon

Cover is not writable on this endpoint.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

UpdatePageBody
object · Title and/or icon. Cover is not writable on this endpoint.
title
string
icon
string · nullable

Responses

200 Updated page
PageUpdated
object
id required
string
title required
string
icon
string · nullable
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X PATCH '/api/v1/pages/{pageId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
DELETE /pages/{pageId}

Archive page

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id
children query
string · enum keep trash
`keep` (default) promotes children to roots. `trash` archives the subtree.

Responses

200 Archived
OkId
object
ok required
boolean · enum true
id
string
pageId
string
databaseId
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X DELETE '/api/v1/pages/{pageId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/content

Append markdown

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).

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

ContentBody
object
content
string
text
string · Alias for `content`

Responses

200 Appended
object
ok
boolean
pageId
string
appendedChars
integer
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/content' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
PUT /pages/{pageId}/content

Replace markdown

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).

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

ContentBody
object
content
string
text
string · Alias for `content`

Responses

200 Replaced
object
ok
boolean
pageId
string
replacedChars
integer
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X PUT '/api/v1/pages/{pageId}/content' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /pages/review

Pages that need 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.

Responses

200 Review queue
object
pages required
array
items ReviewQueueEntryobject
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/review' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /pages/{pageId}/verification

Verification state

Who last vouched for the page, when, the review interval, and the derived freshness.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Responses

200 Verification state
PageVerification
object
pageId 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.
id
string
name
string
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
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}/verification' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/verification

Verify page

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.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

VerifyPageBody
object
note
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.

Responses

200 Verification state after the stamp
PageVerification
object
pageId 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.
id
string
name
string
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
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/verification' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
PATCH /pages/{pageId}/verification

Set review interval

Set or clear the re-verify cadence without verifying.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

ReviewIntervalBody
object
reviewIntervalDays required
integer · nullable · enum 30 90 180 365 null · null opts the page out of review.

Responses

200 Verification state
PageVerification
object
pageId 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.
id
string
name
string
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
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X PATCH '/api/v1/pages/{pageId}/verification' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
DELETE /pages/{pageId}/verification

Stop verifying

Clear the stamp and the interval. The page reads as untracked again; past stamps stay in the log.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Responses

200 Verification state, now untracked
PageVerification
object
pageId 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.
id
string
name
string
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
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X DELETE '/api/v1/pages/{pageId}/verification' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /pages/{pageId}/outline

Document 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.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Document page id

Responses

200 Outline
PageOutline
object
pageId required
string
headings required
array
items
object
id required
string · Stable heading id. Survives edits to the heading's text and level; a paragraph turned into a heading gets a new one.
level required
integer
text required
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}/outline' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /pages/{pageId}/sections/{headingId}

One section of a document

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.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Document page id
headingId path yes
string
Stable heading id from the page outline

Responses

200 Section
PageSection
object
pageId required
string
heading required
object
id required
string
level required
integer
text required
string
bodyMarkdown required
string · The section as Markdown, heading line first.
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}/sections/{headingId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /tags

List workspace tags

The tag catalog (read scope). Assigning a tag is a separate call.

Responses

200 Tags
object
tags required
array
items object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/tags' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /pages/{pageId}/tags

List tags on a page

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Responses

200 Page tags
object
pageId
string
tags
array
items Tag
object
id required
string
name required
string
color required
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}/tags' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/tags

Add tags to a page

Adds the named tags and leaves the rest. Write scope, member role, page grant.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

TagIdsBody
object
tagIds required
array
items
string

Responses

200 Page tags after the add
object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/tags' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
PUT /pages/{pageId}/tags

Replace tags on a page

Replaces the page's tags with this list. Tags not in the list are removed.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

TagIdsBody
object
tagIds required
array
items
string

Responses

200 Page tags after the replace
object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X PUT '/api/v1/pages/{pageId}/tags' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/tags/remove

Remove tags from a page

Removes the named tags and leaves the rest.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

TagIdsBody
object
tagIds required
array
items
string

Responses

200 Page tags after the remove
object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/tags/remove' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/duplicate

Duplicate a page

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.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Responses

201 The copy
object
id
string
title
string
type
string
parentId
string · nullable
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/duplicate' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/restore

Restore a page from the trash

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.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Responses

200 Restored
OkId
object
ok required
boolean · enum true
id
string
pageId
string
databaseId
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/restore' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /trash

List the trash

Trashed pages this token could restore, newest first, up to 200. Database rows are not listed.

Responses

200 Trashed pages
object
pages required
array
items
object
id
string
title
string
icon
string · nullable
type
string
parentId
string · nullable
updatedAt
string · date-time
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/trash' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/move

Move or reorder a page

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.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

MovePageBody
object
parentId
string · nullable · Null moves to the workspace root. A limited token cannot do that.
position
oneOf
integer
string · enum append

Responses

200 Moved
object
id
string
parentId
string · nullable
position
integer
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/move' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /batch

Run up to 20 operations

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.

Request body

BatchBody
object
operations required
array
items
object
op required
string
input
object

Responses

200 Per-item results
object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/batch' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /activity

What changed in the workspace

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.

Parameters

NameInRequiredSchemaDescription
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.

Responses

200 Activity
ActivityList
object
entries required
array
items ActivityEntry
object
id 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
id required
string
title required
string
icon
string · nullable
type required
string
isArchived required
boolean
actor required
object
userId required
string · nullable
name required
string · nullable
agent required
string · nullable · The token's name when an agent made the change.
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.
nextCursor required
string · nullable
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/activity' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /live

Subscribe to page activity

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.

Responses

200 Text event stream
no JSON body
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/live' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /graph

Page link neighbors

Incoming and outgoing page links from one page, depth at most 2. Archived pages and pages the token cannot open are omitted.

Parameters

NameInRequiredSchemaDescription
pageId query yes
string
depth query
integer

Responses

200 Graph
object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/graph' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.

Attachments

Text inside uploaded PDF, Word and text files

GET /pages/{pageId}/attachments

List a page's files

Read scope + page grant. text is ready, pending (not read yet), empty, unreadable, or not_text (images, spreadsheets, zips).

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Responses

200 Files
object
attachments required
array
items
object
id
string
filename
string
contentType
string
sizeBytes
integer
text AttachmentTextState
string · enum ready pending empty unreadable not_text
createdAt
string · date-time
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}/attachments' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /attachments/{attachmentId}/text

Read a file's 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.

Parameters

NameInRequiredSchemaDescription
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)

Responses

200 File text
object
id
string
filename
string
contentType
string
pageId
string
text AttachmentTextState
string · enum ready pending empty unreadable not_text
content
string
offset
integer
nextOffset
integer · nullable
totalChars
integer
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/attachments/{attachmentId}/text' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.

Databases

GET /databases

List databases

Responses

200 Databases
object
databases required
array
items DatabaseSummary
object
id required
string
title required
string
pageId required
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/databases' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /databases

Create database

Request body

CreateDatabaseBody
object
title
string
parentId
string · nullable
templateId
string · `blank`, a legacy starter name (maps to blank), or `tpl_…`

Responses

201 Created database
DatabaseCreated
object
id required
string
pageId required
string
title required
string
templateId
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/databases' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /databases/{databaseId}/rows

List database 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.

Parameters

NameInRequiredSchemaDescription
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)

Responses

200 Rows (computed lookup/rollup/formula filled)
object
databaseId
string
pageId
string
properties
array
items DatabaseProperty
object
id
string
name
string
type
string
options
array
configJson
object
rows
array
items DatabaseRow
object
id
string
databaseId
string
pageId
string
properties
object
notes
string
linkedPageId
string · nullable
nextCursor
string · nullable
totalCount
integer
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/databases/{databaseId}/rows' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /databases/{databaseId}/rows

Create database row

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title

Request body

WriteRowBody
object
title
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

Responses

201 Created row
DatabaseRow
object
id
string
databaseId
string
pageId
string
properties
object
notes
string
linkedPageId
string · nullable
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/databases/{databaseId}/rows' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
PATCH /databases/{databaseId}/rows/{rowId}

Update database row

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title
rowId path yes
string
Row id

Request body

WriteRowBody
object
title
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

Responses

200 Updated row
DatabaseRow
object
id
string
databaseId
string
pageId
string
properties
object
notes
string
linkedPageId
string · nullable
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X PATCH '/api/v1/databases/{databaseId}/rows/{rowId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
DELETE /databases/{databaseId}/rows/{rowId}

Delete database row

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title
rowId path yes
string
Row id

Responses

200 Deleted
OkId
object
ok required
boolean · enum true
id
string
pageId
string
databaseId
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X DELETE '/api/v1/databases/{databaseId}/rows/{rowId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /databases/{databaseId}/properties

Create database property

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title

Request body

CreatePropertyBody
object
name required
string
type requiredPropertyType
string · enum text number select multi_select date checkbox relation formula person url email phone auto_id created_time last_edited_time
options
array
items SelectOptionInput
oneOf
string
object
name required
string
color
string · enum gray blue green orange red purple yellow
targetDatabaseId
string · Required when type is `relation`
expression
string · Required when type is `formula`

Responses

201 Created property
object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/databases/{databaseId}/properties' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
PATCH /databases/{databaseId}/properties/{propertyId}

Update database property

At least one of name or options.

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title
propertyId path yes
string
Property id

Request body

UpdatePropertyBody
object
name
string
options
array · Replaces select / multi_select options. Existing names keep their ids, and their color unless a color is given.
items SelectOptionInput
oneOf
string
object
name required
string
color
string · enum gray blue green orange red purple yellow

Responses

200 Updated property
DatabaseProperty
object
id
string
name
string
type
string
options
array
items SelectOption
object
id
string
name
string
color
string · enum gray blue green orange red purple yellow
configJson
object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X PATCH '/api/v1/databases/{databaseId}/properties/{propertyId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
DELETE /databases/{databaseId}/properties/{propertyId}

Delete database property

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title
propertyId path yes
string
Property id

Responses

200 Deleted
OkId
object
ok required
boolean · enum true
id
string
pageId
string
databaseId
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X DELETE '/api/v1/databases/{databaseId}/properties/{propertyId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /databases/{databaseId}/views

List database views

Saved views with their filter, sort and grouping, and which is the default. Read scope + grant.

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title

Responses

200 Views
object
databaseId required
string
views required
array
items DatabaseView
object
id 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 DatabaseChart
position
integer
isDefault required
boolean
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/databases/{databaseId}/views' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /databases/{databaseId}/views

Create database view

Write scope + write grant. viewType is required.

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title

Request body

DatabaseViewBody
object · Property ids come from list_database_rows. A kanban's board property must be a select, a calendar's date property a date, and table grouping a select, multi_select or checkbox. Pass null to clear a field.
name
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 DatabaseChart
object
kind 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
makeDefault
boolean · true makes this the view the database opens with

Responses

201 Created view
DatabaseView
object
id 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 DatabaseChart
object
kind 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
position
integer
isDefault required
boolean
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/databases/{databaseId}/views' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
PATCH /databases/{databaseId}/views/{viewId}

Update database view

Write scope + write grant. Fields left out keep their value. makeDefault: true makes it the default.

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title
viewId path yes
string
View id

Request body

DatabaseViewBody
object · Property ids come from list_database_rows. A kanban's board property must be a select, a calendar's date property a date, and table grouping a select, multi_select or checkbox. Pass null to clear a field.
name
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 DatabaseChart
object
kind 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
makeDefault
boolean · true makes this the view the database opens with

Responses

200 Updated view
DatabaseView
object
id 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 DatabaseChart
object
kind 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
position
integer
isDefault required
boolean
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X PATCH '/api/v1/databases/{databaseId}/views/{viewId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
DELETE /databases/{databaseId}/views/{viewId}

Delete database view

Rows are not touched. The last view cannot be deleted. Deleting the default makes the first remaining view the default.

Parameters

NameInRequiredSchemaDescription
databaseId path yes
string
Database id, page id, or unique title
viewId path yes
string
View id

Responses

200 Deleted
OkId
object
ok required
boolean · enum true
id
string
pageId
string
databaseId
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X DELETE '/api/v1/databases/{databaseId}/views/{viewId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.

Comments

GET /pages/{pageId}/comments

List comments

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Responses

200 Comments
object
comments required
array
items Comment
object
id 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
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}/comments' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/comments

Create comment

Reply nesting is one level. API-created comments use authorName API.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Request body

CreateCommentBody
object
body required
string
parentId
string · nullable
anchor
string · nullable

Responses

201 Created comment
Comment
object
id 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
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/comments' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
PATCH /pages/{pageId}/comments/{commentId}

Resolve or reopen a comment

Root comments only. The token owner must be the comment author, or an admin or owner.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id
commentId path yes
string
Comment id

Request body

ResolveCommentBody
object
resolved required
boolean

Responses

200 Comment
Comment
object
id 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
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X PATCH '/api/v1/pages/{pageId}/comments/{commentId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
DELETE /pages/{pageId}/comments/{commentId}

Delete an API comment

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.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id
commentId path yes
string
Comment id

Responses

200 Deleted
OkId
object
ok required
boolean · enum true
id
string
pageId
string
databaseId
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X DELETE '/api/v1/pages/{pageId}/comments/{commentId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.

Whiteboards

POST /whiteboards

Create whiteboard

Mints a whiteboard page. Optional parentId (null = root) and picker icon. Document pages stay on POST /pages.

Request body

CreateWhiteboardBody
object
title
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.

Responses

201 Created whiteboard
WhiteboardCreated
object
id required
string
title required
string
type required
string · enum whiteboard
icon
string · nullable
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/whiteboards' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /pages/{pageId}/shapes

List whiteboard shapes

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Whiteboard page id

Responses

200 Shapes
object
pageId
string
shapes
array
items Shape
object · 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
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Whiteboard not found
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}/shapes' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/shapes

Add whiteboard shape

Body is the shape object, or { "shape": { … } }.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Whiteboard page id

Request body

oneOf
Shape
object · 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.
object
shape Shape
object · 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.

Responses

201 Created shape
object
ok
boolean
pageId
string
shape Shape
object · 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.
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/shapes' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
PATCH /pages/{pageId}/shapes/{shapeId}

Update a whiteboard shape

Geometry and text on an existing shape. z is front or back. A missing id is 404 and does not create a shape.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Whiteboard page id
shapeId path yes
string
Shape id

Request body

object

Responses

200 Updated
object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X PATCH '/api/v1/pages/{pageId}/shapes/{shapeId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
DELETE /pages/{pageId}/shapes/{shapeId}

Delete a whiteboard shape

Removes the shape from the board. Shapes have no trash.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Whiteboard page id
shapeId path yes
string
Shape id

Responses

200 Deleted
object
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X DELETE '/api/v1/pages/{pageId}/shapes/{shapeId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.

Capture

POST /capture/idea

Capture an 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.

Request body

CaptureIdeaBody
object
title required
string
notes
string
timeZone
string · IANA time zone for the Date stamp

Responses

200 Captured idea
CaptureRowResult
object
rowId required
string
pageId required
string
databaseId required
string
created required
boolean
restored required
boolean
peekUrl required
string
due
string · nullable
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/capture/idea' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /capture/task

Capture a 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.

Request body

CaptureTaskBody
object
title required
string
due
string · nullable · YYYY-MM-DD
timeZone
string

Responses

200 Captured task
CaptureRowResult
object
rowId required
string
pageId required
string
databaseId required
string
created required
boolean
restored required
boolean
peekUrl required
string
due
string · nullable
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/capture/task' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /capture/decision

Capture a 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.

Request body

CaptureDecisionBody
object
title required
string
notes
string
timeZone
string · IANA time zone for the Date stamp

Responses

200 Captured decision
CaptureRowResult
object
rowId required
string
pageId required
string
databaseId required
string
created required
boolean
restored required
boolean
peekUrl required
string
due
string · nullable
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/capture/decision' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /capture/today

Open or create 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.

Request body

CaptureTodayBody
object
dailyDate
string · YYYY-MM-DD. When omitted, uses timeZone (same as the UI).
timeZone
string · IANA time zone when dailyDate is omitted

Responses

200 Daily note
CaptureTodayResult
object
id 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
rowId required
string
title required
string
due required
string
peekUrl required
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/capture/today' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.

History

GET /pages/{pageId}/history

List page history

Viewers can list. API rows include actorName (token name at write).

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id

Responses

200 Snapshots
PageHistoryList
object
snapshots required
array
items
object
id required
string
createdAt required
string · date-time
reason required
string
actorName
string · nullable
isCurrent required
boolean
matchesSnapshot required
boolean
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}/history' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
GET /pages/{pageId}/history/{snapshotId}/diff

Diff a snapshot against live

Plaintext/markdown unified diff of live vs snapshot. Viewers can diff.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id
snapshotId path yes
string
Snapshot id

Responses

200 Diff
PageHistoryDiff
object
snapshotId required
string
createdAt required
string · date-time
reason required
string
actorName
string · nullable
liveMarkdown required
string
snapshotMarkdown required
string
unifiedDiff required
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/pages/{pageId}/history/{snapshotId}/diff' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /pages/{pageId}/history/{snapshotId}/restore

Restore a snapshot

Write + edit. Saves a before_restore snapshot first.

Parameters

NameInRequiredSchemaDescription
pageId path yes
string
Page id
snapshotId path yes
string
Snapshot id

Responses

200 Restored
object
ok required
boolean · enum true
documentName required
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/pages/{pageId}/history/{snapshotId}/restore' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.

Runbooks

GET /runbooks

List 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.

Responses

200 Runbooks
object
runbooks required
array
items Runbook
object
id required
string
pageId required
string · The runbook document.
title required
string
steps required
array · Steps this token can open. Hidden steps are omitted.
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X GET '/api/v1/runbooks' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /runbooks

Create a runbook

Write scope, member role. Optional parentId; a limited token must pass a write-granted parentId. Add steps with POST /runbooks/{id}/steps.

Request body

object
title
string
parentId
string · nullable

Responses

201 Created runbook
object
id
string
pageId
string
title
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/runbooks' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
DELETE /runbooks/{id}/steps/{stepId}

Remove a runbook step

Write scope + write grant on the runbook. The page the step points at is not touched.

Parameters

NameInRequiredSchemaDescription
id path yes
string
Runbook id
stepId path yes
string
Step id

Responses

200 Removed
OkId
object
ok required
boolean · enum true
id
string
pageId
string
databaseId
string
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X DELETE '/api/v1/runbooks/{id}/steps/{stepId}' \
  -H 'Authorization: Bearer $MNEMO_TOKEN'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /runbooks/{id}/steps/{stepId}/move

Move a runbook step

One place earlier or later. A step already at that end stays put. Write scope + write grant on the runbook.

Parameters

NameInRequiredSchemaDescription
id path yes
string
Runbook id
stepId path yes
string
Step id

Request body

object
direction required
string · enum earlier later

Responses

200 Moved
object
ok
boolean · enum true
id
string
direction
string · enum earlier later
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/runbooks/{id}/steps/{stepId}/move' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.
POST /runbooks/{id}/steps

Add a page to a runbook

Write scope, member role. Adds a whole page, or one section when headingId is set. A runbook cannot be a step of itself.

Parameters

NameInRequiredSchemaDescription
id path yes
string
Runbook id

Request body

AddRunbookStepBody
object
pageId required
string
headingId
string · Stable heading id from the page outline. Omit to add the whole page.

Responses

201 Step added
RunbookStepCreated
object
id required
string
runbookId required
string
pageId required
string
headingId
string · nullable
position required
number
Error responses (5)
400 Validation failed
Error
object
error required
string
401 Missing, invalid, or expired Bearer token
Error
object
error required
string
403 Missing scope, not a member, or grant denied
Error
object
error required
string
404 Resource not found (ACL-masked as 404)
Error
object
error 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`.
oneOf
Error
object
error required
string
QuotaError
object
error 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

curl -sS -X POST '/api/v1/runbooks/{id}/steps' \
  -H 'Authorization: Bearer $MNEMO_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{}'
Try request
Response will appear here. Requests stay on this origin. The token is not sent anywhere else.

Models

JSON schemas from components.schemas.

ActivityEntry

object
id 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
id required
string
title required
string
icon
string · nullable
type required
string
isArchived required
boolean
actor required
object
userId required
string · nullable
name required
string · nullable
agent required
string · nullable · The token's name when an agent made the change.
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.
Example
{
  "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": {}
}

ActivityList

object
entries required
array
items ActivityEntry
object
id 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
id required
string
title required
string
icon
string · nullable
type required
string
isArchived required
boolean
actor required
object
userId required
string · nullable
name required
string · nullable
agent required
string · nullable · The token's name when an agent made the change.
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.
nextCursor required
string · nullable
Example
{
  "entries": [
    {
      "id": "",
      "at": "2026-01-01T00:00:00.000Z",
      "kind": "created",
      "page": {
        "id": "",
        "title": "",
        "icon": "",
        "type": "",
        "isArchived": ""
      },
      "actor": {
        "userId": "",
        "name": "",
        "agent": ""
      },
      "detail": {}
    }
  ],
  "nextCursor": null
}

AddRunbookStepBody

object
pageId required
string
headingId
string · Stable heading id from the page outline. Omit to add the whole page.
Example
{
  "pageId": "",
  "headingId": ""
}

AttachmentTextState

string · enum ready pending empty unreadable not_text
Example
"ready"

BatchBody

object
operations required
array
items
object
op required
string
input
object
Example
{
  "operations": [
    {
      "op": "",
      "input": {}
    }
  ]
}

CaptureDecisionBody

object
title required
string
notes
string
timeZone
string · IANA time zone for the Date stamp
Example
{
  "title": "",
  "notes": "",
  "timeZone": ""
}

CaptureIdeaBody

object
title required
string
notes
string
timeZone
string · IANA time zone for the Date stamp
Example
{
  "title": "",
  "notes": "",
  "timeZone": ""
}

CaptureRowResult

object
rowId required
string
pageId required
string
databaseId required
string
created required
boolean
restored required
boolean
peekUrl required
string
due
string · nullable
Example
{
  "rowId": "",
  "pageId": "",
  "databaseId": "",
  "created": false,
  "restored": false,
  "peekUrl": "",
  "due": null
}

CaptureTaskBody

object
title required
string
due
string · nullable · YYYY-MM-DD
timeZone
string
Example
{
  "title": "",
  "due": null,
  "timeZone": ""
}

CaptureTodayBody

object
dailyDate
string · YYYY-MM-DD. When omitted, uses timeZone (same as the UI).
timeZone
string · IANA time zone when dailyDate is omitted
Example
{
  "dailyDate": "",
  "timeZone": ""
}

CaptureTodayResult

object
id 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
rowId required
string
title required
string
due required
string
peekUrl required
string
Example
{
  "id": "",
  "dailyDate": "",
  "created": false,
  "restored": false,
  "pageUrl": "",
  "tasks": [
    {
      "rowId": "",
      "title": "",
      "due": "",
      "peekUrl": ""
    }
  ]
}

Comment

object
id 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
Example
{
  "id": "",
  "pageId": "",
  "parentId": null,
  "authorId": "",
  "authorName": "",
  "body": "",
  "anchor": null,
  "resolvedAt": "2026-01-01T00:00:00.000Z",
  "createdAt": "2026-01-01T00:00:00.000Z"
}

ContentBody

object
content
string
text
string · Alias for `content`
Example
{
  "content": "",
  "text": ""
}

CreateCommentBody

object
body required
string
parentId
string · nullable
anchor
string · nullable
Example
{
  "body": "",
  "parentId": null,
  "anchor": null
}

CreateDatabaseBody

object
title
string
parentId
string · nullable
templateId
string · `blank`, a legacy starter name (maps to blank), or `tpl_…`
Example
{
  "title": "",
  "parentId": null,
  "templateId": ""
}

CreatePageBody

object
title
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.
Example
{
  "title": "",
  "parentId": null,
  "bodyMarkdown": "",
  "templateId": ""
}

CreatePropertyBody

object
name required
string
type requiredPropertyType
string · enum text number select multi_select date checkbox relation formula person url email phone auto_id created_time last_edited_time
options
array
items SelectOptionInput
oneOf
string
object
name required
string
color
string · enum gray blue green orange red purple yellow
targetDatabaseId
string · Required when type is `relation`
expression
string · Required when type is `formula`
Example
{
  "name": "",
  "type": "text",
  "options": [
    ""
  ],
  "targetDatabaseId": "",
  "expression": ""
}

CreateWhiteboardBody

object
title
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.
Example
{
  "title": "",
  "parentId": null,
  "icon": null,
  "templateId": ""
}

DatabaseChart

object
kind 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
Example
{
  "kind": "bar",
  "categoryPropId": null,
  "valuePropId": null,
  "aggregation": "count"
}

DatabaseCreated

object
id required
string
pageId required
string
title required
string
templateId
string
Example
{
  "id": "",
  "pageId": "",
  "title": "",
  "templateId": ""
}

DatabaseProperty

object
id
string
name
string
type
string
options
array
items SelectOption
object
id
string
name
string
color
string · enum gray blue green orange red purple yellow
configJson
object
Example
{
  "id": "",
  "name": "",
  "type": "",
  "options": [
    {
      "id": "",
      "name": "",
      "color": "gray"
    }
  ],
  "configJson": {}
}

DatabaseRow

object
id
string
databaseId
string
pageId
string
properties
object
notes
string
linkedPageId
string · nullable
Example
{
  "id": "",
  "databaseId": "",
  "pageId": "",
  "properties": {},
  "notes": "",
  "linkedPageId": null
}

DatabaseSummary

object
id required
string
title required
string
pageId required
string
Example
{
  "id": "",
  "title": "",
  "pageId": ""
}

DatabaseView

object
id 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 DatabaseChart
object
kind 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
position
integer
isDefault required
boolean
Example
{
  "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
}

DatabaseViewBody

object · Property ids come from list_database_rows. A kanban's board property must be a select, a calendar's date property a date, and table grouping a select, multi_select or checkbox. Pass null to clear a field.
name
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 DatabaseChart
object
kind 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
makeDefault
boolean · true makes this the view the database opens with
Example
{
  "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
}

Error

object
error required
string
Example
{
  "error": ""
}

MovePageBody

object
parentId
string · nullable · Null moves to the workspace root. A limited token cannot do that.
position
oneOf
integer
string · enum append
Example
{
  "parentId": null,
  "position": 0
}

OkId

object
ok required
boolean · enum true
id
string
pageId
string
databaseId
string
Example
{
  "ok": true,
  "id": "",
  "pageId": "",
  "databaseId": ""
}

Page

object
id 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)
Example
{
  "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": ""
}

PageCreated

object
id required
string
title required
string
Example
{
  "id": "",
  "title": ""
}

PageHistoryDiff

object
snapshotId required
string
createdAt required
string · date-time
reason required
string
actorName
string · nullable
liveMarkdown required
string
snapshotMarkdown required
string
unifiedDiff required
string
Example
{
  "snapshotId": "",
  "createdAt": "2026-01-01T00:00:00.000Z",
  "reason": "",
  "actorName": null,
  "liveMarkdown": "",
  "snapshotMarkdown": "",
  "unifiedDiff": ""
}

PageHistoryList

object
snapshots required
array
items
object
id required
string
createdAt required
string · date-time
reason required
string
actorName
string · nullable
isCurrent required
boolean
matchesSnapshot required
boolean
Example
{
  "snapshots": [
    {
      "id": "",
      "createdAt": "2026-01-01T00:00:00.000Z",
      "reason": "",
      "actorName": null,
      "isCurrent": false
    }
  ],
  "matchesSnapshot": false
}

PageOutline

object
pageId required
string
headings required
array
items
object
id required
string · Stable heading id. Survives edits to the heading's text and level; a paragraph turned into a heading gets a new one.
level required
integer
text required
string
Example
{
  "pageId": "",
  "headings": [
    {
      "id": "",
      "level": 0,
      "text": ""
    }
  ]
}

PageSection

object
pageId required
string
heading required
object
id required
string
level required
integer
text required
string
bodyMarkdown required
string · The section as Markdown, heading line first.
Example
{
  "pageId": "",
  "heading": {
    "id": "",
    "level": 0,
    "text": ""
  },
  "bodyMarkdown": ""
}

PageTreeNode

object
id required
string
title required
string
icon
string · nullable
parentId required
string · nullable
type requiredPageType
string · enum document database whiteboard
position required
number
children required
array
items PageTreeNode
object
id required
string
title required
string
icon
string · nullable
parentId required
string · nullable
type requiredPageType
position required
number
children required
array
Example
{
  "id": "",
  "title": "",
  "icon": null,
  "parentId": null,
  "type": "document",
  "position": 0,
  "children": [
    {
      "id": "",
      "title": "",
      "icon": null,
      "parentId": null,
      "type": "",
      "position": 0,
      "children": [
        ""
      ]
    }
  ]
}

PageType

string · enum document database whiteboard
Example
"document"

PageUpdated

object
id required
string
title required
string
icon
string · nullable
Example
{
  "id": "",
  "title": "",
  "icon": null
}

PageVerification

object
pageId 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.
id
string
name
string
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
Example
{
  "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"
}

PropertyType

string · enum text number select multi_select date checkbox relation formula person url email phone auto_id created_time last_edited_time
Example
"text"

QuotaError

object
error 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)
Example
{
  "error": "",
  "code": "MCP_QUOTA_EXCEEDED",
  "resetsAt": "2026-01-01T00:00:00.000Z"
}

ResolveCommentBody

object
resolved required
boolean
Example
{
  "resolved": false
}

ReviewIntervalBody

object
reviewIntervalDays required
integer · nullable · enum 30 90 180 365 null · null opts the page out of review.
Example
{
  "reviewIntervalDays": 30
}

ReviewQueueEntry

object
Example
""

Runbook

object
id required
string
pageId required
string · The runbook document.
title required
string
steps required
array · Steps this token can open. Hidden steps are omitted.
items RunbookStep
object
id 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
Example
{
  "id": "",
  "pageId": "",
  "title": "",
  "steps": [
    {
      "id": "",
      "pageId": "",
      "headingId": null,
      "label": "",
      "sourceTitle": null,
      "position": 0
    }
  ]
}

RunbookStep

object
id 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
Example
{
  "id": "",
  "pageId": "",
  "headingId": null,
  "label": "",
  "sourceTitle": null,
  "position": 0
}

RunbookStepCreated

object
id required
string
runbookId required
string
pageId required
string
headingId
string · nullable
position required
number
Example
{
  "id": "",
  "runbookId": "",
  "pageId": "",
  "headingId": null,
  "position": 0
}

SearchFileHit

object
id
string · Attachment id, for /attachments/{id}/text
filename
string
contentType
string
pageId
string
pageTitle
string
snippet
string
Example
{
  "id": "",
  "filename": "",
  "contentType": "",
  "pageId": "",
  "pageTitle": "",
  "snippet": ""
}

SearchHit

object
id required
string
title required
string
icon
string · nullable
type required
string
parentId
string · nullable
updatedAt
string · date-time
Example
{
  "id": "",
  "title": "",
  "icon": null,
  "type": "",
  "parentId": null,
  "updatedAt": "2026-01-01T00:00:00.000Z"
}

SearchRowHit

object
rowId required
string
databaseId required
string
pageId required
string
databaseTitle
string
rowTitle
string
snippet
string
icon
string · nullable
Example
{
  "rowId": "",
  "databaseId": "",
  "pageId": "",
  "databaseTitle": "",
  "rowTitle": "",
  "snippet": "",
  "icon": null
}

SelectOption

object
id
string
name
string
color
string · enum gray blue green orange red purple yellow
Example
{
  "id": "",
  "name": "",
  "color": "gray"
}

SelectOptionInput

oneOf
string
object
name required
string
color
string · enum gray blue green orange red purple yellow
Example
""

Shape

object · 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.
Example
{}

Tag

object
id required
string
name required
string
color required
string
Example
{
  "id": "",
  "name": "",
  "color": ""
}

TagIdsBody

object
tagIds required
array
items
string
Example
{
  "tagIds": [
    ""
  ]
}

UpdatePageBody

object · Title and/or icon. Cover is not writable on this endpoint.
title
string
icon
string · nullable
Example
{
  "title": "",
  "icon": null
}

UpdatePropertyBody

object
name
string
options
array · Replaces select / multi_select options. Existing names keep their ids, and their color unless a color is given.
items SelectOptionInput
oneOf
string
object
name required
string
color
string · enum gray blue green orange red purple yellow
Example
{
  "name": "",
  "options": [
    ""
  ]
}

VerifyPageBody

object
note
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.
Example
{
  "note": "",
  "reviewIntervalDays": 30
}

WhiteboardCreated

object
id required
string
title required
string
type required
string · enum whiteboard
icon
string · nullable
Example
{
  "id": "",
  "title": "",
  "type": "whiteboard",
  "icon": null
}

WriteRowBody

object
title
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
Example
{
  "title": "",
  "properties": {},
  "notes": "",
  "linkedPageId": null
}