Service limits
Every cap that applies to a MyNotes account, in one place. The numbers on this page are pulled directly from the running configuration — they are the same values enforced by the application — and are also incorporated by reference into our Terms of Service (§15) and End-User License Agreement (Schedule A).
X-RateLimit-Limit and
X-RateLimit-Remaining headers so a script can pace itself
before it trips a 429. A 429 response always carries
Retry-After in seconds — please honour it.
1. Account
- Minimum age: 16 years.
- Password: 8–128 characters, must include at least one uppercase letter, one lowercase letter, one digit, and one special character (
!@#$%^&*()<>?"{}[]). - Profile name: up to 80 characters. Bio: up to 500 characters.
- Disposable / throwaway email domains are not accepted at signup.
2. Notes per account, by tier
Free and Paid use a single shared cap for both note formats. Dev and Dev-pro split the cap by format (rich-text vs plain-text) so a writer who fills their plain quota doesn't lose access to rich-text notes.
| Tier | Rich notes | Plain notes | Storage | API access | Active API tokens |
|---|---|---|---|---|---|
| Free | shared 10 | no per-account cap | no | 0 | |
| Paid | shared 1,000 | no per-account cap | no | 0 | |
| Dev | 1,000 | 10,000 | 15 GB | yes | 1 |
| Dev-pro | 1,000 | 30,000 | 30 GB | yes | 10 |
Deleting a note frees its slot — the cap counts active notes, not lifetime creations. A user whose subscription has lapsed enters read-only mode: existing notes remain readable and exportable forever, but new writes are blocked until they resubscribe.
3. Per-note size limits
- Title: up to 200 characters; control characters (CR/LF, NUL, etc.) are stripped on save.
- Rich-text body, plain-text projection: 1 MB on every tier.
- Rich-text body, raw HTML: 2 MB (defence against markup-inflation as a storage bypass).
-
Plain-text note body:
- Free / Paid: 1 MB per note.
- Dev: 1.5 MB per note.
- Dev-pro: 3 MB per note.
- Note format is immutable after creation — a rich note cannot become a plain note (or vice versa) without delete-and-recreate.
4. Per-note version history
- Up to 5 snapshots are kept per note. When a newer save lands beyond the cap, the oldest snapshot is permanently deleted.
- Capture is debounced. Saves within ~10 minutes of each other share a single snapshot, so a burst of autosaves doesn't burn through the 5-snapshot window inside one editing session.
- Append-only notes do not generate snapshots — appends are additive, not destructive, so there is nothing to roll back to.
- Snapshots are accessed via the History link on any editable note and can be restored with one click. The restore captures your current content as a fresh snapshot first, so it is itself reversible within the same 5-snapshot window.
5. Folders
- Up to 100 folders per account (one is seeded as "My First Folder" at signup).
- Folder name: up to 80 characters; folder names must be unique within an account (case-insensitive).
6. API (Dev and Dev-pro tiers)
Per-token, per-minute. Each request consumes one slot in the matching bucket; X-RateLimit-* headers on every successful response let clients pace themselves before they trip a 429.
| Bucket | Dev | Dev-pro | Counts |
|---|---|---|---|
| Reads | 600/min | 2,000/min | GET, HEAD on /api/v1/* |
| Writes | 60/min | 200/min | POST/PATCH/PUT/DELETE on /api/v1/* (excluding append + bulk) |
| Appends | 300/min | 1,000/min | POST /api/v1/notes/:id/append and the by-filename variant |
- API creates and updates are plain-text only; rich-text notes belong to the browser/Trix flow.
- Bulk endpoint (Dev-pro only): up to 50 notes per call. Counts as one event against the writes bucket regardless of the batch size.
- Pagination: 50 per page by default, up to 200 via
?limit=N. - Stream-addressed filename: up to 200 bytes; no slashes, no control or invisible characters.
- API tokens: default expiry of 90 days when no expiry is set; user-set expiry can be at most 1 year from now. Tokens revoked manually, or automatically when the account loses API access.
- Anonymous / bad-token requests on
/api/v1/*: 60/min/IP. - Request body: oversized writes (over 3 MB for API, 2 MB for browser) are rejected at the HTTP boundary before parsing.
7. Browser-surface rate limits
Designed for legitimate human pacing. Authenticated limits key off the user; anonymous limits key off the IP. 429 rate_limited responses include a Retry-After header so clients can back off cleanly.
- Sign-in: 10/min/IP, 5/20 min per email.
- Sign-up: 5/hour/IP.
- Password reset: 5/hour/IP, 5/hour per email.
- Confirmation resend: 5/hour/IP, 5/hour per email.
- Account email change: 3/day per account, 3/day per target email — protects unrelated mailboxes from being used as a confirmation-spam target.
- Other account updates (name / bio): 10/hour per account.
- Note saves / autosave: 30/min per account.
- Per-note PDF / DOCX / TXT downloads: 10/min per account.
- Full-account export: 2/hour per account; the archive is built in the background and the download link is emailed to you (see §7).
- Billing portal / plan-change: 5/min per account.
- Health probe (
/up/deep): 60/min/IP. - Webhook deliveries (
/webhooks/lemon_squeezy): 100/min/IP.
8. Full-account export
- Triggered from Options → Download all; archive is built off-request by a background worker.
- A one-time download link is emailed to the address on your account when the archive is ready (usually a few minutes).
- The link is valid for 24 hours from the moment the build completes; after that the file is removed from our servers and you'll need to request a fresh export.
- The link only works while signed in to your own account, so a forwarded email cannot be used by anyone else to download your notes.
- The archive contains
.txt,.docx, and.pdfrenderings of every rich-text note (or.txtonly in software-development mode).
9. Inbound webhooks
- Lemon Squeezy webhooks only; no public webhook surface for end users.
- HMAC-SHA256 signature verification on
X-Signature; unsigned or tampered payloads are rejected with 401 before parsing. - Payload cap: 1 MB. Real LS payloads are well under 10 KB; oversized requests are dropped at the HTTP boundary.
- Replays of an already-applied delivery are acknowledged with 200 but produce no side effects (signature uniqueness is enforced by a database index).
These limits exist to keep the service fast and affordable for everyone. If a legitimate workflow you have in mind doesn't fit — particularly on the API side — please get in touch; we'd rather know.