Launchly Docs

Embed Widget

Fetch your published changelog as public JSON and render it anywhere.

Every project exposes a public, CORS-enabled JSON endpoint with its latest published entries. Use it to build a widget, a "What's new" modal, or any custom surface — no API key required.

Endpoint

GET https://launchly.dev/api/widget/{slug}
  • Auth: none. CORS open (Access-Control-Allow-Origin: *).
  • Cache: public, s-maxage=60, stale-while-revalidate=300.
  • Returns the last 20 published entries.

Response

{
  "project": {
    "name": "Acme",
    "slug": "acme",
    "settings": { "accent": "#d7ff4f", "position": "bottom-right", "theme": "dark" },
    "branding": true
  },
  "entries": [
    {
      "id": "06879e3f-...",
      "title": "v2.1 — Scheduling",
      "version": "2.1.0",
      "category": "feature",
      "publishedAt": "2026-05-31T10:00:00.000Z",
      "html": "<p>Sanitized release body…</p>",
      "reactions": { "👍": 4, "🎉": 1 }
    }
  ]
}
  • project.settings only exposes the whitelisted display keys accent, position, theme.
  • project.branding is true on Free plans (show "Powered by Launchly"), false on paid plans.
  • html is sanitized server-side by Launchly.

Example

const res = await fetch("https://launchly.dev/api/widget/acme");
const { project, entries } = await res.json();

const html = entries
  .map((e) => `<article><h3>${e.title}</h3>${e.html}</article>`)
  .join("");
document.querySelector("#changelog").innerHTML = html;

Building in React? Use @launchly/react instead — it wraps this endpoint with hooks, a render-prop component, and an SSR fetch helper.

On this page