Skip to content
Talk to our solutions team

Usage

GET /contentapp/list apps visible to the tenant
POST /app/:app/contenttype define a type
GET /app/:app/contenttype/:id fetch a type
GET /app/:app/type/:type list entries of a type
GET /app/:app/type/:type/:id one entry

A content type declares its fields and their validation. Entries are validated against the type on write, so malformed content fails at authoring time rather than rendering time — which is the main reason to model content rather than store free-form JSON.

POST /app/:app/graphql

Each content app exposes a GraphQL endpoint derived from its content types. This is usually the right surface for a front end: one request fetches a page’s entries and their referenced entries, instead of a REST waterfall that gets slower the richer your content model gets.

Use REST for authoring tools and back-office work, where you are operating on one entry at a time and want the simpler surface. Use GraphQL for delivery.

Assets are managed per content store and can be attached to a field on an entry:

GET /contentstore/list stores available
GET /store/:store/list browse a store
POST /store/:store/folder create a folder
POST /store/:store/asset upload
GET /store/:store/asset/id/:id fetch metadata
POST /app/:app/type/:type/:id/asset/id/:id/upload attach to an entry field
GET /app/:app/type/:type/:id/asset/:field/download/id/:id

Separating stores from apps means the same asset library can back several content apps without duplicating files — and it makes asset retention a storage decision rather than a content one.

POST /app/:app/template
GET /app/:app/template/id/:id

Templates are reusable content structures — a standard page layout, a recurring block — so editors compose from known-good shapes instead of rebuilding structure per entry.

  • Operations — pre-auth access, storage and monitoring