CMS

CMS overview

Field types, value formats, and the schema rules behind the CMS collection and entry endpoints.

The CMS API manages the same collections and entries you see under CMS in the dashboard, so a backend service, automation, or data pipeline can keep them up to date.

A collection is a schema: a named set of fields. An entry is one record in a collection, with values keyed by field ID.

Field types

Field typeJSON value
textString
numberFinite number
booleanBoolean
dateDate string in YYYY-MM-DD format
timestampISO 8601 timestamp with an offset, such as 2026-08-10T09:30:00Z
urlAbsolute URL string
selectThe value of one active option
assetAsset object
groupObject keyed by the group's sub-field IDs

Set repeated to true on a field to store an ordered array of that type instead of a single value:

{
  "authors": [
    { "name": "Ada Lovelace", "profile_url": "https://example.com/authors/ada" },
    { "name": "Grace Hopper", "profile_url": "https://example.com/authors/grace" }
  ]
}

Asset values

An asset value is an object. assetId, url, and type are required, and type must be image or video. Upload a file with the files endpoint to get one.

{
  "assetId": "stored-asset-id",
  "url": "https://example.com/image.jpg",
  "type": "image",
  "source": "storage",
  "name": "Hero image",
  "alt": "Product dashboard",
  "thumbnail": "https://example.com/image-thumbnail.jpg",
  "width": 1600,
  "height": 900
}

source is optional and may be pexels, unsplash, storage, or vimeo.

Field IDs

SuperFunnel generates field IDs from field labels and normalizes them to lowercase identifiers such as published_at. When an identifier is already in use, a numeric suffix is added to make it unique.

You cannot choose a field ID

Field IDs are derived from labels, and a request that tries to supply one is rejected with 400. Read the generated IDs from the collection object after creating it, and key your entry values by those.

Once a field exists, its ID, its type, its repeated setting, and the sub-fields of a group cannot be changed. Only the label, the required flag, and the options of a select field can be updated.

Schema history

Collections keep deleted fields and select options with a status of deleted, so existing entries retain the schema they were written against. Only fields and options with status: "active" accept new values.

A collection must always keep at least one active field, and can hold between 1 and 50 fields. Group fields support one level of sub-fields — a sub-field cannot itself be a group, and cannot be repeated.

Validation is strict

Entry values are checked against the active schema on every write. Unknown field IDs and values of the wrong type return 400 rather than being ignored.