API Reference

Programmatically manage your changelog entries, projects, and subscribers.

API access requires a Pro plan. Create a token in Settings

Authentication

All API requests require a Bearer token in the Authorization header. Create tokens in Settings → API Tokens.

bash
curl https://app.itslive.dev/api/v1/projects \
  -H "Authorization: Bearer itslive_your_token_here"

Base URL: https://app.itslive.dev/api/v1

Projects

GET/projects

List all your projects.

Example request

bash
curl https://app.itslive.dev/api/v1/projects \
  -H "Authorization: Bearer itslive_..."

Response

json
{
  "projects": [
    {
      "id": "uuid",
      "name": "My App",
      "slug": "my-app",
      "github_repo": "user/repo",
      "plan": "pro",
      "custom_domain": null,
      "created_at": "2026-03-28T..."
    }
  ]
}

Entries

GET/projects/:id/entries

List changelog entries for a project. Returns entries sorted by creation date (newest first).

Query parameters

NameTypeDescription
limitintegerMax entries to return (1-100, default 50)
offsetintegerNumber of entries to skip (default 0)
publishedbooleanFilter by published status ("true" or "false")

Example request

bash
curl "https://app.itslive.dev/api/v1/projects/PROJECT_ID/entries?published=true&limit=10" \
  -H "Authorization: Bearer itslive_..."

Response

json
{
  "entries": [
    {
      "id": "uuid",
      "title": "Dark mode support",
      "summary": "You can now switch to dark mode...",
      "tags": ["Feature"],
      "cover_image": null,
      "pr_number": 42,
      "pr_url": "https://github.com/...",
      "pr_author": "username",
      "is_published": true,
      "published_at": "2026-03-28T...",
      "created_at": "2026-03-28T..."
    }
  ],
  "pagination": { "limit": 50, "offset": 0, "total": null }
}
POST/projects/:id/entries

Create a new changelog entry.

Request body

FieldTypeDescription
titlerequiredstringEntry title (1-200 chars)
summaryrequiredstringEntry content in Markdown (1-5000 chars)
tagsstring[]Tag names (e.g. ["Feature", "Fix"])
cover_imagestring|nullURL to cover image
is_publishedbooleanPublish immediately (default true)
published_atstring|nullISO 8601 datetime for publish date

Example request

bash
curl -X POST https://app.itslive.dev/api/v1/projects/PROJECT_ID/entries \
  -H "Authorization: Bearer itslive_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Dark mode support",
    "summary": "You can now switch to **dark mode** from settings.",
    "tags": ["Feature"],
    "is_published": true
  }'

Response

json
{
  "entry": {
    "id": "uuid",
    "title": "Dark mode support",
    "summary": "You can now switch to dark mode...",
    "tags": ["Feature"],
    "is_published": true,
    "published_at": "2026-03-28T...",
    "created_at": "2026-03-28T..."
  }
}
GET/entries/:id

Get a single changelog entry by ID.

Example request

bash
curl https://app.itslive.dev/api/v1/entries/ENTRY_ID \
  -H "Authorization: Bearer itslive_..."

Response

json
{
  "entry": {
    "id": "uuid",
    "title": "Dark mode support",
    "summary": "...",
    "tags": ["Feature"],
    "cover_image": null,
    "is_published": true,
    "published_at": "2026-03-28T...",
    "created_at": "2026-03-28T..."
  }
}
PATCH/entries/:id

Update a changelog entry. Only include fields you want to change.

Request body

FieldTypeDescription
titlestringUpdated title
summarystringUpdated content (Markdown)
tagsstring[]Updated tags
cover_imagestring|nullUpdated cover image URL
is_publishedbooleanPublish or unpublish
published_atstring|nullOverride publish date

Example request

bash
curl -X PATCH https://app.itslive.dev/api/v1/entries/ENTRY_ID \
  -H "Authorization: Bearer itslive_..." \
  -H "Content-Type: application/json" \
  -d '{"title": "Updated title", "is_published": true}'

Response

json
{
  "entry": {
    "id": "uuid",
    "title": "Updated title",
    ...
  }
}
DELETE/entries/:id

Permanently delete a changelog entry.

Example request

bash
curl -X DELETE https://app.itslive.dev/api/v1/entries/ENTRY_ID \
  -H "Authorization: Bearer itslive_..."

Response

json
{
  "ok": true
}

Subscribers

GET/projects/:id/subscribers

List email subscribers for a project.

Query parameters

NameTypeDescription
limitintegerMax results (1-100, default 50)
offsetintegerNumber to skip (default 0)
confirmedbooleanFilter by confirmation status ("true" or "false")

Example request

bash
curl "https://app.itslive.dev/api/v1/projects/PROJECT_ID/subscribers?confirmed=true" \
  -H "Authorization: Bearer itslive_..."

Response

json
{
  "subscribers": [
    {
      "id": "uuid",
      "email": "user@example.com",
      "confirmed": true,
      "created_at": "2026-03-28T..."
    }
  ],
  "pagination": { "limit": 50, "offset": 0, "total": 42 }
}

Errors

The API returns standard HTTP status codes and a JSON body with an error message.

CodeMeaning
200Success
201Created
400Bad request — invalid parameters or body
401Unauthorized — missing or invalid token
403Forbidden — requires Pro plan
404Not found — resource doesn't exist or you don't own it
500Server error
json
{
  "error": "Invalid or revoked token"
}

Rate limits

The API is rate limited to 100 requests per minuteper token. If you exceed this limit, you'll receive a 429 response.