> ## Documentation Index
> Fetch the complete documentation index at: https://docs.suprlogs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# API Reference

> SuprLogs integration API — health check and read-only changelog data for custom UIs

## Purpose

The **documented** API is for teams that want **SuprLogs to own changelog data** (generation, storage, publishing) while **building their own sites or tools** on top of it. The reference intentionally stays small:

* **`GET /health`** — Liveness for monitors and deployments.
* **`GET /v1/projects`** — All projects you can access, each with **published** changelog entries (authenticated via API key; optional `entries_limit` query).
* **`GET /v1/changelog/{slug}`** — Public. List published entries for a project by slug (paginated with `limit` and `offset`).
* **`GET /v1/changelog/{slug}/entries/{id}`** — Public. Fetch a single published entry by ID.

Other HTTP routes may exist for the dashboard and product features; they are **not** part of this contract and can change without being listed here.

## Base URL

| Environment | Base URL                   |
| ----------- | -------------------------- |
| Production  | `https://api.suprlogs.com` |
| Local       | `http://localhost:4704`    |

## Authentication

* **API keys** (recommended for integrations): create them in **Dashboard → Settings → API Keys**, then send:
  * `Authorization: Bearer <your-api-key>`, or
  * `X-API-KEY: <your-api-key>`
* **`GET /v1/projects`** may also accept `X-Clerk-User-Id` for **personal** (user-owned) projects only; prefer API keys for anything automated.
* Missing or invalid credentials return **`401 Unauthorized`**.
* Key **creation, rotation, and scope** are done in the dashboard only — this reference does not document key-management HTTP routes.

## Response format

* Success responses are JSON.
* **`GET /v1/projects`** returns `{ "projects": [...], "meta": { ... } }` with published entries nested per project.
* **`GET /v1/changelog/{slug}`** returns `{ "project": {...}, "entries": [...], "meta": { ... } }`.
* **`GET /v1/changelog/{slug}/entries/{id}`** returns `{ "entry": {...} }`.
* Errors use JSON with an `error` string (and sometimes `details`).
* Typical codes: **`200`**, **`401`** (projects endpoint), **`404`** (changelog endpoints), **`500`**.

## Endpoints

The **Endpoints** sidebar is generated from `openapi.json` via `pnpm generate:openapi`. Only the supported integration paths above are included in that spec; the generator filters the full route annotations to match this intent.
