LiveNote API
Automate your notes: create pages from scripts, keep a backup in sync, pipe form submissions into a shared doc. One REST surface, JSON everywhere, authenticated with a personal API key from Settings → API keys.
Authentication
Send your key in the Authorization header (Bearer) or X-API-Key. Keys are tied to your account — they see and change only your notes — and can be revoked at any time from Settings.
curl https://livenote.in/api/v1/me \ -H "Authorization: Bearer lnk_YOUR_KEY"
Endpoints
| Method | Path | Purpose |
|---|---|---|
| GET | /api/v1/me | Key and account info |
| GET | /api/v1/notes | List your notes (?limit, ?offset) |
| POST | /api/v1/notes | Create a note |
| GET | /api/v1/notes/{slug} | Read a note (incl. content) |
| PUT | /api/v1/notes/{slug} | Update a note |
| DELETE | /api/v1/notes/{slug} | Move a note to trash |
Create a note
curl -X POST https://livenote.in/api/v1/notes \
-H "Authorization: Bearer lnk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Deploy checklist","content":"- freeze the tag\n- run migrations","mode":"MARKDOWN"}'Returns 201 with the note’s slug and public url. Modes: RICH (HTML), MARKDOWN, PLAIN, CODE (+ language).
Update a note (optimistic locking)
curl -X PUT https://livenote.in/api/v1/notes/deploy-checklist \
-H "Authorization: Bearer lnk_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"content":"- freeze the tag\n- run migrations\n- smoke test","version":1}'Send the version you last read. If it’s stale you get 409 with the current serverVersion — re-read, merge, retry. Nothing is ever silently overwritten.
List & read
curl "https://livenote.in/api/v1/notes?limit=20&offset=0" \ -H "Authorization: Bearer lnk_YOUR_KEY" curl https://livenote.in/api/v1/notes/deploy-checklist \ -H "Authorization: Bearer lnk_YOUR_KEY"
Delete a note
curl -X DELETE https://livenote.in/api/v1/notes/deploy-checklist \ -H "Authorization: Bearer lnk_YOUR_KEY"
The note moves to trash (restorable for 30 days in the dashboard, then purged) — the API never destroys instantly.
Rate limits & errors
120 requests per minute per key. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset; when you hit the cap you get 429 with a Retry-After header.
| Status | Meaning |
|---|---|
| 401 | Missing, invalid or revoked API key |
| 403 | The note exists but isn't yours |
| 404 | No such note (trashed notes read as 404) |
| 409 | Slug already taken, or stale version (body has serverVersion) |
| 422 | Invalid input — the error message says what |
| 429 | Rate limit exceeded — back off until Retry-After |
Errors are always JSON: {"error": "…"}. Success responses are JSON objects with stable keys — fields may be added over time, never removed within v1.