Atlas CMS
API Reference

Entry

GET
/api/v1/public/entries

Returns a paginated list of published entries for a given content type. Production API keys return only published entries; preview keys also include draft and scheduled entries. Supports offset and cursor-based pagination, locale-aware field values, and sparse field selection via dot notation. When locale is provided, each entry's data is resolved server-side for that locale (per-field fallback to the default locale) and carries a per-item is_fallback flag; meta.locale_requested echoes the requested locale.

Authorization

ApiKeyAuth
X-API-Key<token>

API key from the Atlas dashboard (Settings → API Keys).

In: header

Query Parameters

type*string

Content type slug (e.g. article, product)

locale?string

Resolve each entry's data to this locale (e.g. id, fr). Localizable fields without a translation fall back to the workspace default locale.

fields?string

Comma-separated field names to include in data. Supports dot notation for relations (e.g. title,slug,author.name).

page?integer

Page number (ignored when cursor is provided)

limit?integer

Results per page — default 10, max 100.

sort?string

Sort field and direction separated by a colon (e.g. created_at:desc, title:asc).

cursor?string

Opaque cursor from meta.next_cursor in a previous response. When provided, page is ignored.

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/public/entries?type=string"
{  "message": "Success",  "success": true,  "data": [    {      "content_type_id": "0190d1a1-0000-7000-8000-000000000002",      "created_at": "2024-01-01T00:00:00Z",      "created_by": 1,      "data": "{}",      "id": "0190d1a1-0000-7000-8000-000000000001",      "is_fallback": true,      "position": 0,      "publish_at": "2026-01-20T09:00:00Z",      "published_at": "2026-01-15T10:30:00Z",      "slug": "hello-world",      "status": "draft",      "translations": [        {          "created_at": "2024-01-01T00:00:00Z",          "data": "{}",          "entry_id": "0190d1a1-0000-7000-8000-000000000001",          "id": 1,          "locale": "en",          "updated_at": "2024-01-01T00:00:00Z"        }      ],      "updated_at": "2024-01-01T00:00:00Z",      "updated_by": 1,      "workspace_id": "0190d1a1-0000-7000-8000-000000000099"    }  ],  "meta": {    "current_page": 1,    "locale_requested": "en",    "next_cursor": "",    "page_size": 10,    "total_data": 42,    "total_pages": 5  }}
{  "code": "VALIDATION_FAILED",  "data": null,  "errors": null,  "message": "Validation failed",  "meta": null,  "success": false,  "traceId": "req_a1b2c3d4"}
{  "code": "VALIDATION_FAILED",  "data": null,  "errors": null,  "message": "Validation failed",  "meta": null,  "success": false,  "traceId": "req_a1b2c3d4"}
GET
/api/v1/public/entries/{entrySlug}

Returns a single published entry identified by its slug. Relation fields are automatically resolved one level deep. When locale is provided, data is resolved server-side for that locale (per-field fallback to the default locale); locale_requested echoes it and is_fallback is true when that locale had no translation.

Authorization

ApiKeyAuth
X-API-Key<token>

API key from the Atlas dashboard (Settings → API Keys).

In: header

Path Parameters

entry_slug*string

Unique slug of the entry

Query Parameters

locale?string

Resolve data to this locale (e.g. id, fr). Localizable fields without a translation fall back to the workspace default locale.

fields?string

Comma-separated field names to include in data. Supports dot notation for relations (e.g. title,slug,author.name).

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/public/entries/{entrySlug}"
{  "message": "Success",  "meta": null,  "success": true,  "data": {    "entry": {      "content_type_id": "0190d1a1-0000-7000-8000-000000000002",      "created_at": "2024-01-01T00:00:00Z",      "created_by": 1,      "data": "{}",      "id": "0190d1a1-0000-7000-8000-000000000001",      "position": 0,      "publish_at": "2026-01-20T09:00:00Z",      "published_at": "2026-01-15T10:30:00Z",      "slug": "hello-world",      "status": "draft",      "translations": [        {          "created_at": "2024-01-01T00:00:00Z",          "data": "{}",          "entry_id": "0190d1a1-0000-7000-8000-000000000001",          "id": 1,          "locale": "en",          "updated_at": "2024-01-01T00:00:00Z"        }      ],      "updated_at": "2024-01-01T00:00:00Z",      "updated_by": 1,      "workspace_id": "0190d1a1-0000-7000-8000-000000000099"    },    "is_fallback": true,    "locale_requested": "string"  }}
{  "code": "VALIDATION_FAILED",  "data": null,  "errors": null,  "message": "Validation failed",  "meta": null,  "success": false,  "traceId": "req_a1b2c3d4"}
{  "code": "VALIDATION_FAILED",  "data": null,  "errors": null,  "message": "Validation failed",  "meta": null,  "success": false,  "traceId": "req_a1b2c3d4"}
{  "code": "VALIDATION_FAILED",  "data": null,  "errors": null,  "message": "Validation failed",  "meta": null,  "success": false,  "traceId": "req_a1b2c3d4"}
GET
/api/v1/public/preview

Returns an entry regardless of its publish status using a time-limited preview token. Tokens are generated from the Atlas dashboard ("Get Preview Link") and expire after 48 hours. Use this endpoint to let stakeholders preview unpublished content on your frontend without requiring them to log in.

Authorization

ApiKeyAuth
X-API-Key<token>

API key from the Atlas dashboard (Settings → API Keys).

In: header

Query Parameters

token*string

Signed JWT preview token obtained from the Atlas dashboard. Expires after 48 hours.

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/public/preview?token=string"
{  "message": "Success",  "meta": null,  "success": true,  "data": {    "entry": {      "content_type_id": "0190d1a1-0000-7000-8000-000000000002",      "created_at": "2024-01-01T00:00:00Z",      "created_by": 1,      "data": "{}",      "id": "0190d1a1-0000-7000-8000-000000000001",      "position": 0,      "publish_at": "2026-01-20T09:00:00Z",      "published_at": "2026-01-15T10:30:00Z",      "slug": "hello-world",      "status": "draft",      "translations": [        {          "created_at": "2024-01-01T00:00:00Z",          "data": "{}",          "entry_id": "0190d1a1-0000-7000-8000-000000000001",          "id": 1,          "locale": "en",          "updated_at": "2024-01-01T00:00:00Z"        }      ],      "updated_at": "2024-01-01T00:00:00Z",      "updated_by": 1,      "workspace_id": "0190d1a1-0000-7000-8000-000000000099"    },    "translations": [      {        "created_at": "2024-01-01T00:00:00Z",        "data": "{}",        "entry_id": "0190d1a1-0000-7000-8000-000000000001",        "id": 1,        "locale": "en",        "updated_at": "2024-01-01T00:00:00Z"      }    ]  }}
{  "code": "VALIDATION_FAILED",  "data": null,  "errors": null,  "message": "Validation failed",  "meta": null,  "success": false,  "traceId": "req_a1b2c3d4"}
{  "code": "VALIDATION_FAILED",  "data": null,  "errors": null,  "message": "Validation failed",  "meta": null,  "success": false,  "traceId": "req_a1b2c3d4"}