← SnapsNote

SnapsNote API

Personal REST API — available on every plan

Authenticate with a personal API token from Settings. Send it as a Bearer header. Tokens start with sn_. Base URL: your SnapsNote origin (e.g. https://snapsnote.app).

Authentication

Authorization: Bearer sn_…

Create and revoke tokens in Settings → API tokens. The raw token is shown only once at creation. CORS is enabled for Bearer requests so browser extensions and scripts can call the API.

Generate an API token

Items

List — GET /api/items

Query params: search, category (tag), cursor, limit (max 100). Response: { items, nextCursor }. Pro plans also search inside saved page text.

Create — POST /api/items

{
  "content": "https://example.com",
  "tags": ["recipes"],
  "type": "url"
}

content is required (URL, note, or both). Free plans are limited to 200 saves. Response includes needsPreview when a link preview can be backfilled.

Update — PATCH /api/items/:id

{ "content": "Updated note", "tags": ["ideas"] }

Delete — DELETE /api/items/:id

Import — POST /api/items/import

JSON { "format": "netscape"|"raindrop"|"pocket", "content": "…" } or multipart file upload. Respects free-plan remaining slots. Returns { imported, skipped, errors }.

Categories / tags

GET /api/categories — returns { tags: [{ name, count }], total }.

Account

  • GET /api/account/plan — plan, item count, limit, entitlements
  • GET /api/account/export?format=json|csv — download everything
  • GET/POST/DELETE /api/account/tokens — manage API tokens (session auth)

Errors

Errors look like { "error": { "code": "…", "message": "…" } }. Common codes: UNAUTHORIZED, PAYMENT_REQUIRED (402 — free limit), RATE_LIMITED, VALIDATION_ERROR.

Example

curl -X POST https://snapsnote.app/api/items \
  -H "Authorization: Bearer sn_…" \
  -H "Content-Type: application/json" \
  -d '{"content":"https://example.com","tags":["read-later"]}'

Questions: support@snapsnote.app