Fresh Jots for developers
A notebook your code can write to. Give every script, cron job, deploy hook, and agent its own
append-only note — one curl per event, no setup,
no id to look up — then read all of them from your phone.
# First call creates the note "cron-jobs-prod". Every call after appends a line.
curl -X POST https://freshjots.com/api/v1/notes/by-filename/cron-jobs-prod/append \
-H "Authorization: Bearer $FRESHJOTS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"text":"backup ok 2026-06-02 03:00"}'
{"filename":"cron-jobs-prod","created":true,"byte_size":26,
"bytes_remaining":3145702,"storage_used":26,"storage_cap":16106127360,
"updated_at":"2026-06-02T03:00:01Z"}
The idea: the note is the channel
Most notes apps want you to file things into a hierarchy. Fresh Jots' Dev tier inverts that for the engineering use case: the note is the channel. Closer to "Slack channels for bots" than "fancy notes app" — a flat set of append-only streams your systems write to and you skim on your phone. A few examples of what people actually wire up:
claude-code— sublimate AI coding sessions via a slash command at the end of each runcron-jobs-prod— hourly cron one-liner with the resultpayments-product-X— point Stripe's webhook straight at the note's inbox; no handler to writefailed-deploys— GitHub Action on red writes a one-linerengineering-journal— shell aliasj "fixed the auth bug"agent-scratchpad— autonomous-agent working memory between runs
Prefer not to hand-roll curl?
There's a CLI, a JS package, and a Ruby gem — same endpoints, less boilerplate:
Homebrew tap
(Linux & macOS),
npm install freshjots
(freshjots-js, also PowerShell/no-install),
and gem "freshjots"
(rubygems).
What Fresh Jots is — and isn't
It's the place for the digest outputs of your jobs — successful payments one after another, errors, failed deploys, daily summaries, AI session transcripts — anything you'd actually want to read on your phone. Raw firehose server output? Pipe that into a log aggregator (Datadog, BetterStack). Fresh Jots is the everyday highlights layer above that, plus any note you'd like to write by hand. We won't pretend to be your log search; we're the thing you glance at over coffee.
Two patterns, both one request
Append-only for log-style streams (the example above);
standard CRUD for editable notes. Both authenticate with a
bearer token — export FRESHJOTS_TOKEN=mn_… once,
then reference $FRESHJOTS_TOKEN in every call.
(Leave the $ in — it's a shell variable, not part
of the token. Full auth notes in the docs.)
Standard CRUD note — POST to create, PATCH to edit, DELETE to remove:
curl -X POST https://freshjots.com/api/v1/notes \
-H "Authorization: Bearer $FRESHJOTS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"note":{"title":"Q4 plan","plain_body":"Top priorities..."}}'
Need to ship a batch? The bulk endpoint takes up to 50 notes in
one atomic request. Retrying a flaky write? Send an
Idempotency-Key header and the same call
replays the original response instead of double-writing.
Copy-paste examples for every endpoint →
Webhooks — both directions
The append-only note is a hub: events flow in from your other services, and back out to wherever you watch. Both directions are on the Dev and Team plans, no add-on.
Inbound — the webhook inbox. Give any append-only note its own inbox URL and point someone else's webhook straight at it — Stripe, GitHub, a monitoring tool, your POS, anything that can POST. Each event arrives sanitised into one clean, timestamped line in the note. No handler to write, no server to run: you paste the URL into their dashboard and events start landing.
POST https://freshjots.com/h/<inbox-token>
The token is the credential — no auth header — so treat the URL like a secret. Rotate it from the note's settings if it leaks and the old URL dies instantly. Payloads are buffered durably and retried, so a momentary blip never drops an event; anything that ultimately fails lands in a dead-letter view you can replay with one click.
Outbound — fan every append out. Set a
webhook_url on an append-only note and every
successful append POSTs a JSON payload to your endpoint, signed with HMAC-SHA256
(X-FreshJots-Signature) so you can verify
it came from us. Keep the signed generic envelope, or have Fresh Jots reshape the body for
Slack or Discord incoming
webhooks — so a note quietly mirrors itself into a channel as it fills.
A dead endpoint auto-disables after repeated failures (and says so on the settings page) so it never silently drains the queue; save the note to re-arm it.
Use it from Claude, Cursor, and any AI client
Fresh Jots speaks the
Model Context Protocol,
so your AI assistant can read and write your notes directly — no copy-paste. Ask it to
"append today's summary to ai-sessions.txt" or "what did I note about the deploy bug?"
and it calls the API for you. The star tool is append‑to‑note:
it appends to a note addressed by an exact filename and creates it on first write — the same logging
primitive as the curl above, driven by your agent.
Hosted — no install
Add https://freshjots.com/mcp as a connector in
claude.ai, Claude Desktop, or Cursor, authorize in your browser, and your notes show up as tools.
Reading is free for every account; agent writes (create, edit, organise) come with the
Personal plan ($24/yr), and Dev / Team add the token-driven REST
surface this page is about.
Local — for Claude Code or any stdio client
# remote, via Claude Code (OAuth in the browser on first use):
claude mcp add --transport http freshjots https://freshjots.com/mcp
# or the zero-dependency local server, with an API token:
FRESHJOTS_TOKEN=mn_… npx -y freshjots-mcp
Eleven tools cover the notebook — list, read, create, append, update, delete, and move notes, plus list / create / rename / delete folders — with the same plain-text, owner-scoped model as the REST API.
Dead-man's-switch — included, not an add-on
Set an expected interval on any append-only note. If a write doesn't land in time —
your cron died, the deploy hook stopped firing, the agent stalled — Fresh Jots emails you
(or your alert_email). It's the
"tell me when the thing stops happening" alert that's annoying to build yourself.
It's part of the developer (Dev) plan at no extra charge — not a paid add-on, not a metered upsell. The same $149/yr that gets you the API gets you the dead-man's-switch and the webhooks above. Set it from the note's settings or via the API; details in the watchdog docs — or read the full pitch on the dead-man's switch page.
Built like an API you'll trust
The endpoints are the easy part. These are the details that decide whether you'll actually point production at it:
Scoped bearer tokens
mn_… tokens, stored only as a hash and shown once. Mint them read-only, write-only, append-only, or pinned to a single note; 90-day default expiry, one year max.
Stable error envelope
Every error is {"error":{"code","message"}} with a documented, stable code — note_locked, cap_exceeded, rate_limited. Switch on the code, not the prose.
Idempotent writes
Send an Idempotency-Key on any write; for 24 hours a retry replays the original response (Idempotent-Replay: true) instead of writing twice.
Honest rate limits
Every response carries X-RateLimit-*; 429s carry Retry-After. Your own 4xx history is in a per-account API error log.
Bulk & pagination
Ship up to 50 notes in one all-or-nothing request, with per-note errors when something's off. List with limit/offset, X-Total-Count, and RFC 5988 Link headers.
Owner-scoped by construction
A token only ever sees its own notes; a wrong-owner id is a plain 404. Personal and team tokens can't reach across into each other's workspaces.
Backed up, and status-paged
Encrypted daily off-host Postgres backups, and a public status page — the full security posture is documented, not implied. Point production at it with eyes open.
What you get on Dev / Team
| Resource | Dev — $15/mo$149/yr | Team — $179/seat/yr (2-seat min) |
|---|---|---|
| Seats | 1 | 2 to 25 (per-seat billing) |
| Plain notes (team-wide) | 10,000 | 50,000 |
| Per-note plain size | 3 MB | 3 MB |
| Storage (team-wide) | 15 GB | 50 GB |
| Active API tokens (team-wide) | 3 | 30 |
| Reads / writes / appends per minute (per token) | 600 / 60 / 300 | 2,000 / 200 / 1,000 |
| Bulk endpoint (50 notes/req) | Yes | Yes |
| Dead-man's-switch alerts + outbound webhooks | Yes | Yes (team-wide routing + per-member ack) |
| Inbound webhook inbox (Slack/Discord out) | Yes | Yes |
| Shared notes + roles + audit log | — | Yes |
New accounts that pick code mode get a 14-day Dev API trial token — enough to wire up everything on this page before you pay a cent. Full caps and rate limits at /limits.
Wire your first script to a notebook in 5 minutes
10 notes free. No card, no trial clock — just sign up and write.