urllib from the standard
library, so there is nothing to compile.
Install
Initialize
x-api-key header on every request. There is no header
parameter, by design.
Make a request
Resource methods are named after the route. Read operations that take filters pass them as a singlequery dict:
res.data is the endpoint’s response model — a generated dataclass, so fields
are attributes rather than string keys:
Method names follow the route segments as generated, including the ones that
read as verbs and methods together —
idReactionPOST, engagementSettingsPUT.
The API reference lists every operation under its route.Write operations
mainTitle, content and category are required to create; author
defaults to the authenticated user. update takes the whole document in its
body, so id is a field of that body rather than a separate argument.
The document comes back under a key of its own, so a single entity is
res.data.article / res.data.author / res.data.form, never the model
directly.
Error handling
By default a failed call comes back as a return value:Timeouts
timeout_ms applies to every request. There is no separate connect/read split, and no
per-request override — set it on the client:
Escaping the resource wrapper
cms.raw is the underlying client, so an endpoint the resources do not cover is
still reachable. request returns the decoded envelope as-is; request_typed
hydrates data into the model you name:
Resources
article, author, category, subcategory, form, formSubmission, language,
report, ai, raw.
The client also exposes these as
cms.raw.<name> (plural: articles, authors,
categories, subcategories, forms, form_submissions, languages, reports,
ai). Use the CMS facade unless you need a method the facade does not wrap.All operations
Browse the API reference for the full endpoint list.

