API

Build on your notepads

A REST API for reading and writing your notepads.
Handy for scripts, agents, and integrations.

Authentication

Every request is authenticated with a personal access token, sent as a bearer token. Generate one from Account → API Tokens while logged in - the plaintext token is shown once, so store it somewhere safe.

Authorization: Bearer <your-token>

Tokens are scoped to two abilities: notepads:read and notepads:write. Every token created from your account gets both. The API only ever reads or writes notepads the token's owning user actually owns - not notepads shared with them by someone else.

Base URL

https://rnote.org/api/v1

Rate limits

Requests are limited to 60 per minute per token. If you go over, you'll get a 429 Too Many Requests response.

Endpoints

GET /api/v1/notepads

List your notepads.

Requires ability: notepads:read

Example request

curl https://rnote.org/api/v1/notepads \
  -H "Authorization: Bearer <your-token>"

Example response

{
  "status": "success",
  "notepads": [
    {
      "uid": "8f2c1a3e-...",
      "title": "Groceries",
      "type": 1,
      "color": "#0d42dd",
      "updated_at": "2026-07-29T09:12:03+00:00"
    }
  ]
}
GET /api/v1/notepads/{uid}

Fetch a single notepad, including its content.

Requires ability: notepads:read

Example request

curl https://rnote.org/api/v1/notepads/8f2c1a3e-... \
  -H "Authorization: Bearer <your-token>"

Example response

{
  "status": "success",
  "uid": "8f2c1a3e-...",
  "title": "Groceries",
  "content": "- Milk\n- Eggs\n- Bread",
  "type": 1,
  "markdown_view": 1,
  "color": "#0d42dd",
  "archived": false,
  "order": 1,
  "updated_at": "2026-07-29T09:12:03+00:00"
}

Not found

// 404
{
  "status": "error",
  "message": "Notepad not found"
}
POST /api/v1/notepads

Create a new notepad.

Requires ability: notepads:write

Parameters

NameTypeRequiredNotes
titlestring, max 255NoDefaults to a generated name like "New 3".
typeintegerNo1 = plain text, 2 = Markdown, 3 = rich text (HTML). Defaults to 1.
contentstringNoDefaults to empty. For type 3, this is HTML and is sanitized on save (a safe subset of formatting tags is kept; scripts, styles, images and event handlers are stripped).

Example request

curl https://rnote.org/api/v1/notepads \
  -X POST \
  -H "Authorization: Bearer <your-token>" \
  -H "Content-Type: application/json" \
  -d '{"title": "Trip planning", "type": 2, "content": "# Trip\n\n- [ ] Book flights"}'

Example response

// 201
{
  "status": "success",
  "uid": "3b91d0c4-...",
  "title": "Trip planning",
  "type": 2,
  "color": "#0d42dd"
}
PATCH /api/v1/notepads/{uid}/content

Replace or append to a notepad's content.

Requires ability: notepads:write

Parameters

NameTypeRequiredNotes
contentstringYesNew content, or text to append. For rich-text (type 3) notepads this is HTML and is sanitized on save.
appendbooleanNoWhen true, adds to the end of the existing content instead of replacing it. Defaults to false.

Example request

curl https://rnote.org/api/v1/notepads/3b91d0c4-.../content \
  -X PATCH \
  -H "Authorization: Bearer <your-token>" \
  -H "Content-Type: application/json" \
  -d '{"content": "\n- [ ] Pack sunscreen", "append": true}'

Example response

{
  "status": "success",
  "uid": "3b91d0c4-...",
  "content": "# Trip\n\n- [ ] Book flights\n- [ ] Pack sunscreen",
  "updated_at": "2026-07-29T09:14:51+00:00"
}

Errors

Errors always have a JSON body with "status": "error".

StatusMeaning
401Missing or invalid token.
403Token doesn't have the required ability.
404Notepad not found, or not owned by the token's user.
422Validation failed - the response includes an errors object.
429Rate limit exceeded.

Ready to connect something?

Create your account, generate a token, and start reading and writing notepads.