Getting Started
From zero to content served over the API, step by step.
1. Create your account
Sign up at your workspace's signup page (locally: http://localhost:3000/signup)
with a company name and work email, then confirm the verification email. You can
also use Continue with Google / GitHub — a personal workspace is created
automatically on first sign-in.
2. Create a space
A space holds one project's content: its content model, entries, media,
locales, and API keys. The onboarding wizard creates your first space; more can
be added from the space switcher. Every space starts with a master
environment.
3. Model your first content type
Go to Content model → Add content type and define fields:
title— Text, localized, requiredslug— Slug (auto-generates from the display field)body— Rich texthero_image— Media
Mark a field as the display field so entries have readable titles. Add
reference / reference_many fields to compose assemblies (e.g. a
landing_page that references hero and card blocks).
4. Create and publish an entry
Under Content → Add entry, pick your content type and write. The right-hand
panel shows the live preview; switch locale tabs to translate, or use
AI translate to prefill. When ready, move the entry through the workflow:
draft → in review → published.
5. Create an API key
Under Settings → API keys, create a Delivery key. Copy the one-time
token — it looks like cms_del_… and is only shown once. Delivery keys see
published content; Preview keys (cms_pre_…) also see drafts.
6. Fetch it
With curl:
curl "http://localhost:8000/spaces/<spaceId>/environments/master/delivery/entries?content_type=article" \
-H "Authorization: Bearer cms_del_..."
Or with the SDK:
import { createClient } from '@ondros/sdk';
const client = createClient({
host: 'http://localhost:8000',
spaceId: '<spaceId>',
environment: 'master',
accessToken: process.env.CMS_DELIVERY_TOKEN!,
});
const { entry } = await client.getEntryBySlug({
contentType: 'article',
slug: 'hello-world',
include: 2,
});
includeresolves linked entries/assets up to 3 levels deep, so assembly pages arrive with their nested blocks in one request.
Next steps
- Understand the data model in Core Concepts
- Explore the full SDK Reference
- Keep your builds in sync with Webhooks