Changelog API
Publish release notes from code, a CLI, or an AI coding agent. Entries are Markdown, can be scheduled, and are served on a hosted page at launch.nordva.dev/log/<your-slug> or on your own domain.
What exists today
- Entries are Markdown with a title, category and optional scheduled publish time. Scheduled entries go live on a one-minute cron.
- Every project gets a hosted public changelog page. Builder projects can serve it from a custom domain with managed TLS.
- Readers can subscribe by email; new published entries are delivered as email notifications with one-click unsubscribe.
- A public JSON feed exists per project, and a script-tag widget renders the changelog inside your own site.
- The MCP server exposes publishing, listing and archiving as tools, so Claude Code or Cursor can ship notes at the end of a session.
- Entries can carry a cover image, images in the text, a button and custom labels. Images are links to files you host: nothing is uploaded, and every surface loads them lazily with no referrer.
- An entry can be public, for signed-in users only, or (Builder) for a segment of people matched on their contact details and consents. Only public entries reach the hosted page, the feeds and subscriber email.
- Readers react with a small set of reactions you choose, one per person per entry. Signed-in users keep read state across devices with the same signed user id as the notification bell.
- One entry at a time can be announced as a modal, banner or toast, shown once per person, on Indie and up.
- Each entry shows views and reactions; from Indie also readers, button clicks and feedback sent from it. On Builder, readers are compared with non-readers for upgrades and first payments in the 14 days after publishing: what went together, not proof of cause.
- npx nordva changelog, or the MCP tool draft_changelog_from_commits, turns your commit messages into a draft entry. It never publishes.
Endpoints
| POST | /v1/changelog/entries | Create or schedule an entry |
| GET | /v1/changelog/entries | List entries |
| PATCH | /v1/changelog/entries/{id} | Update a draft or scheduled entry |
| DELETE | /v1/changelog/entries/{id} | Archive an entry |
| GET | /v1/changelog/entries/{id}/stats | Views, readers, reactions, clicks, feedback |
| POST | /v1/changelog/drafts | Draft an entry from commit messages |
| POST | /v1/changelog/labels | Create a label |
| POST | /v1/changelog/subscribers | Subscribe an email address |
| GET | /v1/changelog/widget/entries | The widget's list for one reader |
| GET | /public/changelog/{slug} | Public feed, no auth |
Full reference with request and response schemas: docs.nordva.dev. Every response uses the same envelope and stable error codes.
MCP tools
The same operations are available to Claude Code, Claude Desktop and Cursor through the Nordva MCP server at mcp.nordva.dev:
publish_changelog_entrylist_changelog_entriesarchive_changelog_entrydraft_changelog_from_commitsget_changelog_entry_statscreate_changelog_labelregister_custom_domainget_custom_domain_status
Arguments, example prompts and client setup →
Questions
- Can I publish from CI?
- Yes. POST /v1/changelog/entries with a secret key. Requests accept an Idempotency-Key header, so a retried pipeline step will not create a duplicate entry.
- Do readers need an account?
- No. The hosted page and the JSON feed are public. Subscribing only requires an email address, confirmed by a one-click link.
- Can I use my own domain?
- On the Builder plan. Point a CNAME at widget.nordva.dev and register the hostname; certificates are issued automatically.