Atlas CMS

Entries

Read published entry data from Atlas CMS through the Public API.

Entries

If a Content Type is the blueprint (schema), an Entry is the record (actual data). Every article, author, or piece of content you store is an entry of some content type.

Entry Lifecycle

Entries move through three states. Only Published entries are returned by the Public API by default.

StatusDescription
DraftBeing created or edited. Not visible on the Public API unless you use draft preview.
PublishedApproved and available to read via the Public API.
ArchivedRetired content. Hidden from the Public API, kept in the CMS.

Content editors manage these transitions from the Atlas dashboard. Draft preview allows your frontend to preview a draft entry before it goes live — see the Entry API Reference for the GET /public/preview endpoint.

Creating and publishing entries

Creating, editing, and publishing entries is done through the Atlas dashboard or via the Admin API (documented in a later phase).

Reading Entries

Fetch published entries from your frontend app using the Public API. Every request requires an X-API-Key header (see Authentication).

List entries (JavaScript)
const res = await fetch(
  'https://api.atlas.latellu.com/api/v1/public/entries?type=article',
  { headers: { 'X-API-Key': process.env.ATLAS_API_KEY } },
);

const { data, meta } = await res.json();
// data → array of entries
// meta → pagination info (total, page, limit, next_cursor)
Response — GET /public/entries?type=article
{
  "success": true,
  "message": "Success",
  "data": [
    {
      "slug": "getting-started-with-headless-cms",
      "status": "published",
      "data": {
        "title": "Getting Started with Headless CMS",
        "summary": "A beginner-friendly introduction to decoupled content management.",
        "cover_image": {
          "url": "https://cdn.atlas.latellu.com/blog/covers/headless-cms-intro.webp",
          "width": 1200,
          "height": 630
        },
        "author": {
          "slug": "arya-santoso",
          "data": { "name": "Arya Santoso" }
        },
        "published_at": "2026-05-10T08:00:00Z"
      }
    },
    {
      "slug": "api-driven-content-strategy",
      "status": "published",
      "data": {
        "title": "API-Driven Content Strategy for Modern Teams",
        "summary": "How leading companies structure their content for multi-channel delivery.",
        "published_at": "2026-05-03T08:00:00Z"
      }
    }
  ],
  "meta": {
    "total": 38,
    "page": 1,
    "limit": 10,
    "next_cursor": "eyJpZCI6IDEwfQ"
  }
}

Fetch a Single Entry

Get entry by slug (JavaScript)
const res = await fetch(
  'https://api.atlas.latellu.com/api/v1/public/entries/getting-started-with-headless-cms',
  { headers: { 'X-API-Key': process.env.ATLAS_API_KEY } },
);

const { data } = await res.json();
Response — GET /public/entries/getting-started-with-headless-cms
{
  "success": true,
  "data": {
    "slug": "getting-started-with-headless-cms",
    "status": "published",
    "data": {
      "title": "Getting Started with Headless CMS",
      "summary": "A beginner-friendly introduction to decoupled content management.",
      "cover_image": {
        "id": "0190d1a1-0000-7000-8000-000000000001",
        "url": "https://cdn.atlas.latellu.com/blog/covers/headless-cms-intro.webp",
        "alt": "Illustration of decoupled CMS architecture",
        "width": 1200,
        "height": 630,
        "mime_type": "image/webp"
      },
      "author": {
        "slug": "arya-santoso",
        "data": {
          "name": "Arya Santoso",
          "avatar": { "url": "https://cdn.atlas.latellu.com/avatars/arya.jpg" }
        }
      },
      "tags": ["headless", "cms", "tutorial"],
      "published_at": "2026-05-10T08:00:00Z"
    },
    "translations": {
      "id": {
        "data": {
          "title": "Memulai dengan Headless CMS",
          "summary": "Pengenalan ramah pemula untuk manajemen konten terpisah."
        }
      }
    }
  }
}

Response Shape

Each entry object follows this structure:

FieldTypeDescription
slugstringURL-safe unique identifier for the entry.
statusstringAlways "published" for Public API responses (unless using a preview key).
dataobjectField values for the default locale. Every field from the content type appears here.
translationsobjectPer-locale overrides keyed by locale code. Only localizable fields appear here.
  • data — field values for the default locale. Every field from the content type appears here.
  • translations.<locale>.data — field values overridden for that locale (only fields marked localizable). See Localization.

For pagination, filtering, and sorting parameters, see Pagination & Filtering.

What goes inside data?

Because every workspace defines its own content types, the keys of data (and translations.<locale>.data) differ per content type — the API reference cannot list them as fixed fields. Use the Schema Explorer below to fetch a content type's real fields and generate a matching example payload.

Schema Explorer

The token and workspace ID stay in this browser (saved to localStorage) and are sent only to the API base URL above.

Full Endpoint Reference

See the Entry API Reference for the complete parameter list for GET /public/entries, GET /public/entries/{slug}, and GET /public/preview.

On this page