← All action domains

CMS

14 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.

Audit SEO

cms.audit_seoread

Audit every CMS entry on a website for missing or oversized search metadata, missing social images, thin content, long slugs, and published no-index mistakes. This read-only check changes nothing.

Parameters

FieldTypeRequiredDescription
funnel_idstring (uuid)requiredWebsite whose CMS content should be audited.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.audit_seo \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "funnel_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_audit_seo at https://app.chirply.io/api/mcp, same bearer token, same input.

Create blog

cms.create_blogwriteadmin only

Create an SEO-ready Blog collection and a draft visual article template inside an existing website. Publish the template with the website before publishing articles. This publishes nothing and sends nothing externally.

Parameters

FieldTypeRequiredDescription
funnel_idstring (uuid)requiredWebsite that will own the blog and its visual article template.
namestringoptionalEditor-facing name for the blog. Default: "Blog"
pathstringoptionalPublic URL prefix used before every article slug. Default: "blog"

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.create_blog \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "funnel_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_create_blog at https://app.chirply.io/api/mcp, same bearer token, same input.

Create collection

cms.create_collectionwriteadmin only

Create a structured content collection for one website. Its entries remain drafts until individually published; nothing becomes public from this action.

Parameters

FieldTypeRequiredDescription
funnel_idstring (uuid)requiredWebsite that owns this collection.
namestringrequiredEditor-facing collection name, such as Blog posts or Team members.
slugstringoptionalStable internal collection slug; generated from name when omitted.
pathstringoptionalPublic URL prefix, such as blog; generated from name when omitted.
descriptionstringoptionalWhat editors should store in this collection.
fieldsobject[]requiredStructured fields available to entries and {{cms.key}} page bindings.
fields[].keystringrequiredPermanent machine key used in {{cms.key}} bindings.
fields[].labelstringrequiredHuman label shown to content editors.
fields[].type"text" | "richtext" | "number" | "boolean" | "date" | "image" | … 1 morerequiredEditor and validation type for this field.
fields[].requiredbooleanoptionalWhether publishing requires a value. Default: false
fields[].helpstringoptionalShort instruction shown beside the field.
template_page_idstring (uuid) (or null)optionalPublished visual page used to render every entry, or null until one is designed.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.create_collection \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "funnel_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "name": "Example",
    "fields": [
      {
        "key": "example",
        "label": "example",
        "type": "text"
      }
    ]
  }'
Test with your API key

Over MCP the same operation is the tool cms_create_collection at https://app.chirply.io/api/mcp, same bearer token, same input.

Create entry

cms.create_entrywriteadmin only

Create a CMS entry as a private draft. Structured values are validated against the collection schema and nothing becomes public until Publish entry is run.

Parameters

FieldTypeRequiredDescription
collection_idstring (uuid)requiredCollection that defines this entry's fields and public URL.
titlestringrequiredEntry title used by editors and as the default SEO title.
slugstringoptionalPublic URL slug; generated from title when omitted.
excerptstringoptionalShort summary for listings and default meta description.
datamap of string → objectrequiredField values keyed by the collection's permanent field keys.
seomap of string → objectoptionalSEO overrides: title, description, canonical, ogImage, noIndex, and schemaType.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.create_entry \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "collection_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "title": "Example",
    "data": {}
  }'
Test with your API key

Over MCP the same operation is the tool cms_create_entry at https://app.chirply.io/api/mcp, same bearer token, same input.

Delete collection

cms.delete_collectionwriteconfirmadmin only

PERMANENTLY delete a collection and every draft and published entry inside it. All of its public entry URLs stop resolving immediately. This cannot be undone.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredCollection and all entries to permanently delete.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.delete_collection \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_delete_collection at https://app.chirply.io/api/mcp, same bearer token, same input.

Delete entry

cms.delete_entrywriteconfirmadmin only

PERMANENTLY delete a CMS entry, including its working draft and published snapshot. Its public URL stops resolving immediately and this cannot be undone.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredEntry to permanently delete.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.delete_entry \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_delete_entry at https://app.chirply.io/api/mcp, same bearer token, same input.

Import WordPress posts

cms.import_wordpresswriteconfirmadmin only

Fetch up to 100 posts from a public WordPress REST API and add them as private drafts in an existing collection. Existing entries with the same slug are preserved; this publishes nothing. THIS MAKES AN OUTBOUND REQUEST FROM CHIRPLY'S SERVERS to whatever address is given, so everything in the URL — host, path, query string — is disclosed to whoever operates it, and whatever it answers with is stored in this account. That is why it asks for confirmation.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
collection_idstring (uuid)requiredDestination collection for imported drafts.
source_urlstring (uri)requiredPublic home URL of the WordPress website to import. Chirply's servers fetch this address directly.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.import_wordpress \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "collection_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "source_url": "https://example.com"
  }'
Test with your API key

Over MCP the same operation is the tool cms_import_wordpress at https://app.chirply.io/api/mcp, same bearer token, same input.

List collections

cms.list_collectionsread

List the structured content collections owned by a website, including each collection's field schema, public path, and visual template page.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
funnel_idstring (uuid)requiredWebsite whose collections should be returned.
status"active" | "archived"optionalOptionally filter by collection status.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.list_collections \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "funnel_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_list_collections at https://app.chirply.io/api/mcp, same bearer token, same input.

List entries

cms.list_entriesread

List draft, scheduled, published, or archived entries in a collection with their structured data and SEO settings.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalMax rows to return (1–100). Default: 25
offsetintegeroptionalRows to skip. Default: 0
collection_idstring (uuid)requiredCollection whose entries should be returned.
status"draft" | "scheduled" | "published" | "archived"optionalOptionally filter by publishing state.
searchstringoptionalCase-insensitive title or slug search.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.list_entries \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "collection_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_list_entries at https://app.chirply.io/api/mcp, same bearer token, same input.

Publish entry

cms.publish_entrywriteconfirmadmin only

Publish the current draft data and SEO as a public snapshot. Real visitors can immediately open the entry at the collection path on the website; the collection must have a published visual template page.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredDraft entry to publish publicly.
expected_updated_atstringoptionalExact updated_at of the saved draft reviewed for publication; rejects concurrent changes.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.publish_entry \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_publish_entry at https://app.chirply.io/api/mcp, same bearer token, same input.

Schedule entry

cms.schedule_entrywriteconfirmadmin only

Freeze the current saved draft and SEO as a public snapshot that automatically becomes available at the specified future time. Real visitors can open it after that time; later draft edits do not change the scheduled snapshot.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredSaved CMS entry to schedule.
publish_atstring (date-time)requiredFuture UTC date and time when the frozen snapshot becomes public.
expected_updated_atstringoptionalExact updated_at of the saved draft reviewed for scheduling; rejects concurrent changes.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.schedule_entry \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "publish_at": "2026-09-17T15:00:00Z"
  }'
Test with your API key

Over MCP the same operation is the tool cms_schedule_entry at https://app.chirply.io/api/mcp, same bearer token, same input.

Unpublish entry

cms.unpublish_entrywriteconfirmadmin only

Take a published CMS entry offline immediately while preserving its working draft and last published snapshot for later republishing.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredPublished entry to take offline.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.unpublish_entry \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_unpublish_entry at https://app.chirply.io/api/mcp, same bearer token, same input.

Save collection

cms.update_collectionwriteconfirmadmin only

Update a collection's name, URL prefix, field schema, status, or visual template page. Changing fields does not delete stored entry data; published entry URLs may change when path changes.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredCollection to update.
namestringoptionalNew editor-facing collection name.
pathstringoptionalNew public URL prefix.
descriptionstring (or null)optionalNew editor guidance, or null to clear it.
fieldsobject[]optionalComplete replacement field schema.
fields[].keystringrequiredPermanent machine key used in {{cms.key}} bindings.
fields[].labelstringrequiredHuman label shown to content editors.
fields[].type"text" | "richtext" | "number" | "boolean" | "date" | "image" | … 1 morerequiredEditor and validation type for this field.
fields[].requiredbooleanoptionalWhether publishing requires a value. Default: false
fields[].helpstringoptionalShort instruction shown beside the field.
template_page_idstring (uuid) (or null)optionalVisual template page, or null to detach it.
status"active" | "archived"optionalActive collections resolve publicly; archived collections do not.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.update_collection \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_update_collection at https://app.chirply.io/api/mcp, same bearer token, same input.

Save entry

cms.update_entrywriteadmin only

Save an entry's working draft, slug, excerpt, or SEO settings. Published visitors continue seeing the previous published snapshot until Publish entry is run again.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredEntry to update.
expected_updated_atstringoptionalExact updated_at returned by the last read; a changed entry is rejected instead of overwriting another editor.
titlestringoptionalNew entry title.
slugstringoptionalNew public URL slug after the next publish.
excerptstring (or null)optionalNew listing excerpt, or null to clear it.
datamap of string → objectoptionalComplete replacement draft field data.
seomap of string → objectoptionalComplete replacement draft SEO settings.

Example

curl -X POST https://app.chirply.io/api/v1/actions/cms.update_entry \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool cms_update_entry at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=cms — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.