Everything is typed, idempotent, paginated, and documented. The interesting part of your app should be your app, not glue code against a CMS.
Sign up, get a space + an environment. You're given an API key with read scope for your default environment.
Use the studio or POST a schema to /api/cms/content-types. Validation is enforced at write time.
Use the generated TS client or hit the GraphQL endpoint directly. Same data, two surfaces.
Every endpoint accepts the same Bearer-token auth, uses cursor pagination, and returns ISO-8601 timestamps. The mental model carries across.
# Semantic search across an asset collection
curl -X POST \
https://api.smartcms.ai/api/cms/spaces/$SPACE/asset-collections/$CID/search \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"refund window","limit":5}'TypeScript is first-class. Other languages cover the read API and embeddings.
First-class. Generated client per environment.
Read API + embeddings. Lightweight client.
Read API. Useful for backends and worker jobs.
OpenAPI 3.1 spec at /openapi.json on every environment.