ReleasePad API v2
A small, predictable REST API for reading your changelog posts, widget configuration, and view analytics. Everything speaks JSON, every response has the same envelope, and you can hit the public read endpoints with nothing but a product token.
https://pro.releasepad.io/api/v2
Introduction
The ReleasePad API lets you read the same data that powers our in-app widget and public changelog page, so you can build a fully custom changelog UI, feed release notes into another surface, or wire your own analytics. It's a plain JSON REST API — no SDK required.
Base URL
https://pro.releasepad.io/api/v2
Format
JSON request & response bodies over HTTPS
Versioning
Path-based. This page documents v2.
Authentication
The v2 API is authenticated with a single credential: your product's public token. There's no header, key exchange, or OAuth flow to set up — you pass the token in the URL and you're done.
Every product has a public token that is safe to expose in client-side code (it's what the widget uses).
Pass it as the {token} path segment. It grants access to that
product's published posts, public widget settings, and view tracking — nothing else. Find it in
your product's Settings → API page.
Response format
The core API follows the JSend
convention. Every response carries a top-level status so you can branch on
one field before touching the payload.
"success"
Request worked. The payload is under data.
"fail"
Invalid input. Details are under data.
"error"
Something broke server-side. See message.
{
"status": "success",
"data": {
"posts": [ ... ]
}
}
Errors
Standard HTTP status codes are used alongside the JSend body. The most common ones:
| Code | Meaning |
|---|---|
| 200 | Success. |
| 404 | Unknown product token or post ID. |
| 500 | Unexpected server error. |
Pagination
Only List posts is paginated. It returns
50 posts per page. Pass ?page=N (1-indexed, default
1) to page through results. The response includes the total count and the total
number of pages so you know when to stop.
Posts
Read your published release notes.
/api/v2/products/{token}/posts
List posts
Public token
Returns a paginated list of a product's published posts, newest first. Each post includes both its raw
delta (Editor.js JSON) and a pre-rendered html
field, so you can drop it straight into a page or render it yourself.
Parameters
| Name | In | Description |
|---|---|---|
| token * | path | Your product's public token. |
| page | query | Page number, 1-indexed. Default 1. 50 posts per page. |
| user_metadata | query | An external user identifier. When supplied, private posts targeted at that user are included too. |
| preview | query | Set to true to include drafts (returns cache-control: no-store). For previewing unpublished work. |
curl "https://pro.releasepad.io/api/v2/products/SFMyNTY.g2gDYQ9uBgBK3Xj2kwFiAAFRgA.p7Zs4mT6yZ1cB9dF3hA5sK8jN0qW2eR7Q3jK5X8vN2/posts?page=1"
{
"status": "success",
"data": {
"posts": [
{
"id": 482,
"name": "Dark mode is finally here",
"blurb": "Toggle dark mode from any screen.",
"delta": "{\"blocks\":[{\"type\":\"paragraph\", ... }]}",
"html": "<p>Toggle dark mode from any screen.</p>",
"published_at": "2026-06-28T14:03:00Z",
"views": 1284,
"category": "New",
"category_bg_color": "#dcfce7",
"draft": false,
"created_at": "2026-06-28T13:55:00Z"
}
],
"count": 37,
"pages": 1,
"category_id": null
}
}
/api/v2/products/{token}/posts/{id}
Get a post
Public token
Returns a single published post by ID. Responds 404 if the post is a
draft, archived, or doesn't belong to the product. Unlike the list endpoint, the single-post payload does not
include a pre-rendered html field — render the delta yourself.
Parameters
| Name | In | Description |
|---|---|---|
| token * | path | Your product's public token. |
| id * | path | The post ID. |
curl "https://pro.releasepad.io/api/v2/products/SFMyNTY.g2gDYQ9uBgBK3Xj2kwFiAAFRgA.p7Zs4mT6yZ1cB9dF3hA5sK8jN0qW2eR7Q3jK5X8vN2/posts/482"
{
"status": "success",
"data": {
"id": 482,
"title": "Dark mode is finally here",
"blurb": "Toggle dark mode from any screen.",
"delta": "{\"blocks\":[{\"type\":\"paragraph\", ... }]}",
"published_at": "2026-06-28T14:03:00Z",
"views": 1284,
"category": "New",
"category_bg_color": "#dcfce7",
"draft": false,
"created_at": "2026-06-28T13:55:00Z",
"product_id": 20
}
}
Widget
The configuration that renders the embeddable widget.
/api/v2/products/{token}/widget
Get widget config
Public token
Returns the display configuration for a product's widget — brand color, title, dark-mode preference, custom
CSS, font, and the count of new posts. Calling this endpoint also registers the widget as "installed" for the
product; pass a timestamp query param to opt out of that side effect
(useful for previews and cache-busting reloads).
Parameters
| Name | In | Description |
|---|---|---|
| token * | path | Your product's public token. |
| timestamp | query | Any value. When present, the call is not counted as a widget installation. |
curl "https://pro.releasepad.io/api/v2/products/SFMyNTY.g2gDYQ9uBgBK3Xj2kwFiAAFRgA.p7Zs4mT6yZ1cB9dF3hA5sK8jN0qW2eR7Q3jK5X8vN2/widget"
{
"status": "success",
"data": {
"color": "#0070c7",
"title": "What's new",
"dark_mode": false,
"new_posts": 37,
"product_uri": "acme-app",
"custom_css": "",
"font": "Inter"
}
}
Analytics
Record views when you render the changelog yourself.
/api/v2/products/{token}/changelog/view
Track a changelog view
Public tokenRecords a page view for a product's public changelog. Call this once when your custom changelog surface loads so view analytics stay accurate. The client IP is captured server-side.
Parameters
| Name | In | Description |
|---|---|---|
| token * | path | Your product's public token. |
curl -X POST "https://pro.releasepad.io/api/v2/products/SFMyNTY.g2gDYQ9uBgBK3Xj2kwFiAAFRgA.p7Zs4mT6yZ1cB9dF3hA5sK8jN0qW2eR7Q3jK5X8vN2/changelog/view"
{
"status": "success",
"data": "ok"
}
/api/v2/products/{token}/posts/{id}/view
Track a post view
Public token
Marks a single post as viewed and increments its view counter. Optionally attribute the view to one of your
users with user_metadata. Responds 404 if the post is not a
published post belonging to the product.
Parameters
| Name | In | Description |
|---|---|---|
| token * | path | Your product's public token. |
| id * | path | The post ID being viewed. |
| user_metadata | body | Optional external user identifier recorded with the view. |
curl -X POST "https://pro.releasepad.io/api/v2/products/SFMyNTY.g2gDYQ9uBgBK3Xj2kwFiAAFRgA.p7Zs4mT6yZ1cB9dF3hA5sK8jN0qW2eR7Q3jK5X8vN2/posts/482/view" \
-H "Content-Type: application/json" \
-d '{"user_metadata": "user_9f2c"}'
{
"status": "success",
"data": "ok"
}
Built and maintained by the ReleasePad team · Last updated
Building something with the API?
Tell us what you're building — we're happy to help, and we take endpoint requests seriously.
Contact the team