Skip to content

Documentation Overview

Choose a guide from the library.

A fresh start.
A clear path.

From your first content type to the next release. Find the guide for what you're doing.

Find your starting point
Generate your content types
npx --no-install lemonade types generate \
--target development \
--out src/cms-models.ts

Use the local SDK package and a configured target.

CLI setup and type generation

Connect your application

Choose your stack. Lemonade stays independent of it.

Create something worth publishing

The essentials of a content team's day.

Tour the studio

One source. Your choice of API.

Same published content. Same permissions. Different ways to ask.

Make the schema part of your workflow.

Generate TypeScript, Python or C# models. Regenerate after a change and check for drift in CI.

SDK & CLI workflow

Make it work for your team

Understand the controls around your content.

Website impact reviewSee how a saved revision affects your consuming website.

Your first project, step by step.

Prefer a guided start? Follow one content type from the studio to your first API response.

Understand the pieces

A content type is a structure: its fields define what an editor can enter. The display name is for people; the API identifier (such as content_item) is the stable name your app queries.

An entry is one record of that type. A workspace contains your types, entries, media and delivery keys. The API calls its workspace identifier projectId or project_id; these refer to the same UUID.

Saving creates a draft. Publishing creates a snapshot for delivery. Editing a published entry leaves its public snapshot unchanged until you publish again.

Set up your first content

1. Open the studio and choose a workspace. Owners and Developers define content types; Editors manage entries and media.

2. Create the sample type below, or use one of your own. Change every content_item and field identifier in the examples to match your actual schema.

3. Add an entry, save it, and publish it. For a first test, fill title and position. Leave related and image empty, or publish those dependencies first.

4. Open API Access as the Owner. Generate keys if needed and copy the public value with its copy control and store the one-time secret securely when generated. Prefer individually scoped application tokens for each consuming app. Developers and Editors should request the appropriate key from their Owner.

5. Copy your workspace UUID and CMS base URL. The URL must be reachable from the device/server running your app; localhost always means that device itself.

The sample schema

This is an illustrative schema, not content already installed in your workspace. Guides never create types or entries automatically. Use the field keys exactly as shown when following these examples.

Create Content items with API identifier content_item. Title: text, required; position: number; publication_date: date; summary: text with translation enabled; related: single reference to content_item; image: image. Enable English and Spanish in Workspace settings to follow locale examples. All other fields are optional.

Dates are ISO strings (2026-10-15), UTC date/time values use an offset such as Z, colors are hex strings, choices use stable string values, and Markdown is source text. Text, long text, Markdown and rich text can be localized.

Content type definition · illustrative
{
  "fields": [
    {
      "key": "title",
      "label": "Title",
      "required": true,
      "type": "text"
    },
    {
      "key": "position",
      "label": "Position",
      "required": false,
      "type": "number"
    },
    {
      "key": "publication_date",
      "label": "Publication date",
      "required": false,
      "type": "date"
    },
    {
      "key": "summary",
      "label": "Summary",
      "localized": true,
      "required": false,
      "type": "text"
    },
    {
      "key": "related",
      "label": "Related item",
      "required": false,
      "target": "content_item",
      "type": "reference"
    },
    {
      "key": "image",
      "label": "Image",
      "required": false,
      "type": "image"
    }
  ],
  "key": "content_item",
  "name": "Content items"
}

Use the right key

A public pk_ key reads published content from a browser or server. Anyone who has it can read that workspace’s published content. Frontend environment variables are public configuration.

A secret sk_ key can read previews. Keep it in server-owned code and private runtime configuration. Your own application must authorize users before serving draft content.

Studio login cookies do not authorize delivery APIs. Every external request needs an Authorization: Bearer header. Key rotation invalidates the previous pair; update all consuming apps after rotating.

Replace YOUR_CMS_HOST, YOUR_WORKSPACE_UUID, YOUR_PUBLIC_KEY and ENTRY_UUID before running examples. Find an entry ID in a collection response. Example values and responses are synthetic, never pulled from a signed-in workspace.

Choose how to connect

JavaScript SDK — recommended for JavaScript/TypeScript apps. It wraps REST, checks options, converts top-level response metadata to camelCase, and supports generated types. It works across frameworks.

REST — straightforward HTTP GET requests and JSON. Use from any language.

GraphQL — request precise fields and traverse references using a schema generated from your content types. The studio Explorer helps build queries.

JSON-RPC — POST named content.list and content.get operations with request IDs. Uses the same publication and workspace rules.

Make a first request

Publish a sample entry, replace the placeholders, and run this in a terminal. An empty data array is a successful request with no matching published entries. Continue with your chosen guide for response details, item reads and pagination.

Terminal · published collection
curl --get 'https://YOUR_CMS_HOST/api/v1/projects/YOUR_WORKSPACE_UUID/content/content_item' \
  -H 'Authorization: Bearer YOUR_PUBLIC_KEY' \
  --data-urlencode 'limit=5' \
  --data-urlencode 'locale=en'
Need a hand? Check troubleshooting. Documentation describes the locally verified pilot; production qualification remains in progress.