Launchly Docs

REST API

Programmatically list and create changelog entries, or generate them from commits with AI.

The REST API lets you manage entries from your own tooling — CI pipelines, release scripts, internal dashboards. Requires a Pro plan or higher.

Authentication

Create an API key in your project's Settings → API keys. Send it as a Bearer token:

Authorization: Bearer <your-api-key>

Base URL: https://launchly.dev

Error responses: 401 unauthorized (bad/missing key), 402 upgrade_required (plan doesn't include API), 400 invalid (validation, with details).

List entries

GET /api/v1/entries
curl https://launchly.dev/api/v1/entries \
  -H "Authorization: Bearer $LAUNCHLY_KEY"
{
  "entries": [
    { "id": "…", "title": "v2.1", "slug": "v2-1", "category": "feature",
      "version": "2.1.0", "status": "published", "publishedAt": "2026-05-31T10:00:00.000Z" }
  ]
}

Create an entry

POST /api/v1/entries
FieldTypeNotes
titlestring (1–200)required
bodystringrequired, Markdown
categoryfeature | improvement | fix | announcementdefault feature
versionstring (≤40)optional
visibilityexternal | internaldefault external
publishbooleandefault false (create as draft)
curl -X POST https://launchly.dev/api/v1/entries \
  -H "Authorization: Bearer $LAUNCHLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Scheduling",
    "body": "You can now schedule releases.\n\n- Pick a future date\n- Auto-publishes",
    "category": "feature",
    "version": "2.1.0",
    "publish": true
  }'
{ "entry": { "id": "…", "slug": "scheduling", "status": "published" } }

When publish: true, the release is dispatched to the widget, feeds, email subscribers, and connected channels (respecting visibility).

Generate from commits (AI)

POST /api/v1/entries/generate

Turns a list of commit messages into a drafted entry.

FieldTypeNotes
commitsstring[] (1–500)required
versionstring (≤40)optional
categoryenumoptional
visibilityexternal | internaldefault external
publishbooleandefault false
curl -X POST https://launchly.dev/api/v1/entries/generate \
  -H "Authorization: Bearer $LAUNCHLY_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "commits": ["feat: add scheduling", "fix: tz bug"], "version": "2.1.0" }'
{ "entry": { "id": "…", "slug": "…", "title": "…", "status": "draft" }, "draft": { } }

Errors: 503 ai_unavailable, 402 quota_exceeded (AI draft limit), 502 generation_failed.

Public endpoints (no key)

These are CORS-enabled and require no authentication:

EndpointPurpose
GET /api/widget/{slug}Widget JSON — published entries
POST /api/subscribeSubscribe an email (double opt-in)
POST /api/reactionsToggle an emoji reaction on an entry
POST /api/analyticsRecord a view/click event

Public endpoints are rate-limited per IP/anon-id (e.g. subscribe 8/10 min, reactions 30/min, analytics 60/min).

On this page