SNotesSNotes Docs
REST API

Notes API

Full reference for creating, fetching, updating, pinning, archiving, and managing notes.

The Notes API provides full lifecycle control over your personal notes.


Note Schema

{
  "id": "7b79da93-ca77-4cf0-9dc4-14227363b965",
  "noteType": "text",
  "title": "Project Roadmap 2026",
  "content": "## Goals\n- Launch SNotes Public API\n- Expand MCP tools",
  "color": "#fef08a",
  "isPinned": false,
  "archived": false,
  "trashedAt": null,
  "hasPassword": false,
  "permission": "owner",
  "checkboxes": [],
  "categories": [
    {
      "id": "e4587563-7182-4df3-a16a-a2fcda00a293",
      "name": "Work",
      "color": "#93c5fd"
    }
  ],
  "media": [],
  "reminder": null,
  "createdAt": "2026-08-18T10:00:00Z",
  "updatedAt": "2026-08-18T10:35:00Z"
}

Fields

FieldTypeDescription
idUUIDUnique identifier for the note.
noteTypestringEither "text" (regular note) or "checklist" (task list with checkboxes).
titlestringNote title (max 255 chars). Defaults to empty string.
contentstringMarkdown text content for text notes. Must be empty for checklist notes.
colorstring | nullHex background color (e.g. "#fef08a"), or null for default.
isPinnedbooleanWhether the note is pinned to the top of the grid.
archivedbooleanWhether the note is moved to the archive.
trashedAtstring | nullISO 8601 timestamp when moved to trash (soft-delete), or null.
checkboxesarrayList of checkbox items for checklist notes.
categoriesarrayList of collections the note belongs to.
mediaarrayAttached media metadata (images, audio transcripts).
reminderobject | nullOptional scheduled reminder configuration.
createdAtstringISO 8601 timestamp of creation.
updatedAtstringISO 8601 timestamp of last modification.

1. List Active Notes

Returns paginated active notes (excluding archived and trashed notes), sorted according to your custom order and pinned state.

GET /v1/public/notes/

Query Parameters

ParameterTypeDefaultDescription
limitinteger20Number of notes to return (max 100).
offsetinteger0Number of notes to skip.

Example Request

curl -X GET "https://api.snotes.io/v1/public/notes/?limit=10" \
  -H "Authorization: Bearer sn_live_xxxxxxxxxxxxxxxxxxxxxxxx"

2. Create Note

Create a new text or checklist note.

POST /v1/public/notes/

Request Body

FieldTypeRequiredDescription
titlestringNoTitle of the note (max 255 chars).
contentstringNoBody text in markdown format. Leave empty for checklist.
noteTypestringNo"text" (default) or "checklist".
colorstringNo7-character hex color code (e.g. "#fed7aa").
isPinnedbooleanNoDefaults to false.

Example Request

curl -X POST "https://api.snotes.io/v1/public/notes/" \
  -H "Authorization: Bearer sn_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Grocery List",
    "noteType": "checklist",
    "color": "#fef08a"
  }'

3. Retrieve Note

Fetch a single note by its UUID.

GET /v1/public/notes/{note_id}/

Example Request

curl -X GET "https://api.snotes.io/v1/public/notes/7b79da93-ca77-4cf0-9dc4-14227363b965/" \
  -H "Authorization: Bearer sn_live_xxxxxxxxxxxxxxxxxxxxxxxx"

4. Update Note

Partially update an existing note's title, body, color, or pin status.

PATCH /v1/public/notes/{note_id}/

Request Body

FieldTypeDescription
titlestringNew title for the note.
contentstringNew body markdown. (Cannot be set on checklist notes).
colorstring | nullHex color code or null to reset.
isPinnedbooleanPin or unpin note.
expectedUpdatedAtstringOptional. ISO 8601 timestamp for optimistic concurrency control.

Optimistic Concurrency Control: By supplying expectedUpdatedAt, the server will verify that no other client has modified the note since you last fetched it. If the note was modified elsewhere, the server responds with 409 Conflict.

Example Request

curl -X PATCH "https://api.snotes.io/v1/public/notes/7b79da93-ca77-4cf0-9dc4-14227363b965/" \
  -H "Authorization: Bearer sn_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Updated Title",
    "content": "New markdown body text."
  }'

5. Delete Note (Permanent)

Permanently destroys the note and all attached checklist rows and media. This operation skips the trash and cannot be undone.

DELETE /v1/public/notes/{note_id}/

Response: 204 No Content

For ordinary user actions, prefer moving notes to trash with POST /v1/public/notes/{note_id}/trash/ so they can be recovered.


6. Pin / Unpin Note

Pins a note to the top of your list, or unpins it.

POST /v1/public/notes/{note_id}/pin/

Request Body

FieldTypeDescription
isPinnedbooleantrue to pin, false to unpin. Omit field to toggle state.

7. Archive / Unarchive Note

Moves a note to the archive or restores it back to active notes. Archiving automatically unpins the note.

POST /v1/public/notes/{note_id}/archive/

Request Body

FieldTypeDescription
archivedbooleantrue to archive, false to unarchive. Omit field to toggle state.

8. Move Note to Trash (Soft Delete)

Moves a note to the trash. Trashed notes are excluded from active list and archive views, but can be restored with restore/.

POST /v1/public/notes/{note_id}/trash/

9. Restore Note from Trash

Restores a trashed note back to the top of your active notes list.

POST /v1/public/notes/{note_id}/restore/

10. List Archived Notes

Returns paginated notes that have been archived.

GET /v1/public/notes/archive/

11. List Trashed Notes

Returns paginated notes currently in the trash, ordered by most recently trashed first.

GET /v1/public/notes/trash/

12. Empty Trash

Permanently and irrevocably deletes all notes currently in the trash.

DELETE /v1/public/notes/trash/

Response

{
  "deleted": 5
}

On this page