Public API
The public API is the boundary between the CMS and websites. Base path: /api/v1/public. It returns only published content and is edge cached and rate limited (300 requests per 60 seconds per IP).
| Method and path | Returns |
|---|---|
GET /{contentType} |
Published entries of a content type |
GET /{contentType}/{slug} |
One published entry |
GET /media/{id} |
Media metadata (alt text, type, dimensions) |
GET /media/{id}/file |
The file |
GET /global-variables |
Global variables map |
GET /settings/{module} |
Structured settings: general, contact, social, navigation, footer, seo |
GET /pages, GET /pages/by-route |
Published pages |
GET /route-patterns |
Content type route patterns |
POST /forms/{slug}/submissions |
Submit a form |
curl https://your-cms-api.example.com/api/v1/public/blog-post/hello-worldA draft or unknown slug returns 404 with the same response, so drafts are not discoverable.
Signed preview routes exist under /api/v1/public/preview/; see Live Preview. Auth routes are in Astro authentication.
The API serves a generated OpenAPI document at /api/v1/openapi.json and a reference UI at /api/v1/docs (Scalar). These are enabled by default. Set API_DOCS_ENABLED = "false" in [vars] to make both return 404.
The admin API under /api/v1/admin requires a CMS session and is not part of the public integration surface.