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).
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.
GET /api/itemsQuery params: search, category (tag), cursor, limit (max 100). Response: { items, nextCursor }. Pro plans also search inside saved page text.
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.
PATCH /api/items/:id{ "content": "Updated note", "tags": ["ideas"] }DELETE /api/items/:idPOST /api/items/importJSON { "format": "netscape"|"raindrop"|"pocket", "content": "…" } or multipart file upload. Respects free-plan remaining slots. Returns { imported, skipped, errors }.
GET /api/categories — returns { tags: [{ name, count }], total }.
GET /api/account/plan — plan, item count, limit, entitlementsGET /api/account/export?format=json|csv — download everythingGET/POST/DELETE /api/account/tokens — manage API tokens (session auth)Errors look like { "error": { "code": "…", "message": "…" } }. Common codes: UNAUTHORIZED, PAYMENT_REQUIRED (402 — free limit), RATE_LIMITED, VALIDATION_ERROR.
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