API Reference: Content Templates
Reusable content templates that power outgoing messages, canned responses, and document generation. List, retrieve, create, copy, and assign document templates to collections.
Overview
A Content Template is a reusable piece of content that can be rendered against a record. The same template can power outgoing messages (transactional emails / SMS), canned responses inside the conversation inbox, and document generation tied to a specific Collection. Document-format templates are authored in Document Studio and store their canonical document design on the ContentTemplate row. The Content Templates API lets you list, manage, preview, check readiness for, inspect usage of, copy, and assign templates to collections.
Templates support merge tags from the target record's fields ({{First Name}}, {{Order Total}}, etc.). The actual rendering happens at send / generate time using the latest record data.
Outgoing-message, canned-response, and broad library endpoints require the TEAM_ADMIN_CONTENT_TEMPLATE_LIBRARY feature permission. Document-format templates require collection data-feature permission on the target collection and scope: DOCUMENT_TEMPLATES_TEAM for team templates or DOCUMENT_TEMPLATES_PERSONAL for personal templates. View level allows reading and generating documents; edit level allows creating, updating, archiving, copying, and assigning templates.
These document-template permissions are data-scoped Feature Permissions: the team enables the feature, but roles receive access inside Collection permissions rather than in the role-wide Feature Permissions list.
Endpoints
| Method | Path | Purpose |
|---|---|---|
GET | /v1/content-templates | List all content templates for the team. |
GET | /v1/content-templates/{contentTemplateSimplyId} | Get a single template. |
POST | /v1/content-templates | Create a new template. |
PATCH | /v1/content-templates/{contentTemplateSimplyId} | Update template metadata and sanitized document design/settings. |
DELETE | /v1/content-templates/{contentTemplateSimplyId} | Archive a template (soft delete). |
GET | /v1/content-templates/{contentTemplateSimplyId}/readiness | Return Document Studio readiness issues for a document template. |
POST | /v1/content-templates/{contentTemplateSimplyId}/preview-render | Render a non-persisted merged document preview for a selected record. |
GET | /v1/content-templates/{contentTemplateSimplyId}/usage | Return assigned collection, wrappers, signing profiles, and recent generated-document usage events. |
GET | /v1/content-templates/collection/{dataCollectionSimplyId} | List document templates assigned to a specific collection or inherited from its ancestors. |
POST | /v1/content-templates/{contentTemplateSimplyId}/copy | Copy a document template to team or personal scope for one collection. |
POST | /v1/content-templates/collection/{dataCollectionSimplyId}/link | Assign or reassign a document template to one collection so its records and descendants can render it. |
DELETE | /v1/content-templates/collection/{dataCollectionSimplyId}/link/{contentTemplateSimplyId} | Rejected for document templates because every document template must keep exactly one collection assignment. |
Usage Types
Each template surfaces in one or more contexts based on its wrappers and, for document templates, its assigned collection. OUTGOING_MESSAGE and CANNED_RESPONSE can be assigned at creation; STANDALONE is derived when a template has no outgoing-message or canned-response wrapper and is only valid as a list filter.
| Type | Where It Appears |
|---|---|
OUTGOING_MESSAGE | Backs an outgoing-message template sent via the Messages API or by automations. |
CANNED_RESPONSE | Inserted by team users from the conversation reply composer (typed via slash command). |
STANDALONE | Authored but not yet linked to any consumer; available for manual rendering / document generation. |
List Templates
curl -s "https://api.simply360.app/v1/content-templates?limit=25&search=welcome" \
-H "Authorization: Bearer $S360_API_KEY"
Query Parameters
| Parameter | Type | Description |
|---|---|---|
limit | integer | Page size (default 25, max 100). |
offset | integer | Skip count for pagination. |
search | string | Free-text match against name and text content. |
usageType | string | Filter by OUTGOING_MESSAGE, CANNED_RESPONSE, or STANDALONE. |
sort | string | createdAt_DESC (default), createdAt_ASC, or name_ASC. |
includeArchived | boolean | Include archived templates in the result. Default false. |
List entries include contentTemplateSimplyId, localized name / description objects, textContent, hasDesign, hasDocumentSettings, derived usageTypes, and timestamps.
Get a Template
The detail response adds the document fields: designJson, designHTML, and documentSettings.
curl -s "https://api.simply360.app/v1/content-templates/CTPL-1234-ABCD" \
-H "Authorization: Bearer $S360_API_KEY"
Document Studio Readiness, Preview, and Usage
Document-format templates can be checked before signing workflows use them. Readiness returns blocking, warning, and info issues. Blocking issues are enforced when a document-backed signing request is created.
# Readiness
curl -s "https://api.simply360.app/v1/content-templates/CTPL-1234-ABCD/readiness" \
-H "Authorization: Bearer $S360_API_KEY"
# Non-persisted merged preview for a record
curl -s -X POST "https://api.simply360.app/v1/content-templates/CTPL-1234-ABCD/preview-render" \
-H "Authorization: Bearer $S360_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "dataRecordSimplyId": "DREC-5678-EFGH", "previewRoleKey": "client" }'
# Usage read model
curl -s "https://api.simply360.app/v1/content-templates/CTPL-1234-ABCD/usage" \
-H "Authorization: Bearer $S360_API_KEY"
The preview response returns the merged html (plus separate bodyHtml, headerHtml, and footerHtml) for the selected record without creating any files. The usage read model reports only queryable platform relationships: assigned collection and active membership counts, document-format outgoing-message wrappers, signing profiles attached through those wrappers, and recent generated-document events recorded by the usage ledger.
Create a Template
Outgoing-message and canned-response creation takes name, textContent, and a non-empty usageTypes array (OUTGOING_MESSAGE and/or CANNED_RESPONSE), plus optional description and — when OUTGOING_MESSAGE is included — an optional deliveryMethod (EMAIL default, or SMS) for the outgoing-message wrapper it creates.
curl -s -X POST "https://api.simply360.app/v1/content-templates" \
-H "Authorization: Bearer $S360_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Welcome Email",
"description": "Sent to new members after signup",
"textContent": "Hi {{First Name}},\nThanks for joining.\n",
"usageTypes": ["OUTGOING_MESSAGE"],
"deliveryMethod": "EMAIL"
}'
Fields
name— Internal label, shown in pickers and admin lists. String or localized object ({"en": "..."}).description— Optional description. String or localized object.textContent— The template's text content, with merge tags.usageTypes— Required non-empty array:OUTGOING_MESSAGE,CANNED_RESPONSE, or both.deliveryMethod—EMAIL(default) orSMS; applies to the outgoing-message wrapper.
Document-template creation supplies documentSettings and exactly one collection assignment. When usageTypes is omitted, document templates default to STANDALONE.
curl -s -X POST "https://api.simply360.app/v1/content-templates" \
-H "Authorization: Bearer $S360_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Receipt PDF",
"description": "Generated for donation records",
"textContent": "Thank you, {{First Name}}.",
"documentSettings": { "pageSize": "letter", "orientation": "portrait" },
"dataCollectionSimplyId": "COLL-1234-ABCD",
"templateScope": "TEAM"
}'
documentSettings— Required before saving document design or assigning a document template to a collection.dataCollectionSimplyId— Required collection assignment for document templates. The template is also usable from child collections.templateScope—TEAMorPERSONAL. Personal templates are owned by the current Team User unless a Team Admin suppliesownerTeamUserLinkSimplyId.ownerTeamUserLinkSimplyId— Optional Team Admin-only owner override when creating or copying personal templates for another user.
Update a Template
PATCH accepts any subset of name, description, textContent, designJson, designHtml, and documentSettings. Document design saves are sanitized server-side, and documentSettings must exist (or be supplied in the same request) before designJson / designHtml are accepted.
curl -s -X PATCH "https://api.simply360.app/v1/content-templates/CTPL-1234-ABCD" \
-H "Authorization: Bearer $S360_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "textContent": "Hi {{First Name}},\nWelcome aboard!\n" }'
Assigning and Copying a Document Template
Document templates are scoped to exactly one collection — for example, a "Receipt PDF" template that only makes sense for records in the Donations collection. Assigning exposes the template in that collection and its child collections for manual rendering and makes their records available to preview-render.
# Link a template to a collection
curl -s -X POST "https://api.simply360.app/v1/content-templates/collection/COLL-1234-ABCD/link" \
-H "Authorization: Bearer $S360_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "contentTemplateSimplyId": "CTPL-5678-EFGH" }'
# List templates assigned to or inherited by that collection
curl -s "https://api.simply360.app/v1/content-templates/collection/COLL-1234-ABCD" \
-H "Authorization: Bearer $S360_API_KEY"
# Copy a team template into the current user's personal scope
curl -s -X POST "https://api.simply360.app/v1/content-templates/CTPL-5678-EFGH/copy" \
-H "Authorization: Bearer $S360_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "dataCollectionSimplyId": "COLL-1234-ABCD", "templateScope": "PERSONAL" }'
The assignment endpoint returns the new dataCollectionSimplyId. The DELETE link endpoint returns a validation error for document templates because unassigned document templates are no longer valid.
Archiving
The DELETE endpoint archives the template rather than hard-deleting it — consumers (automations, message sends, document jobs) that already reference the template continue to work, but the template no longer appears in pickers for new content. Pass includeArchived=true on the list endpoint to see archived ones.
Usage Notes
- Merge tags resolve from the recipient record's fields at send/render time. Missing fields render as empty strings.
- The TypeScript SDK exposes Content Templates through
s360.contentTemplates:list,get,create,update,archive,copy,readiness,previewRender,usage,listForCollection,linkToCollection, andunlinkFromCollection. For document templates,unlinkFromCollectionis retained only for endpoint compatibility and is expected to fail validation. - Use the Messages API when you want to send a template; this API only manages the templates themselves.
- Ask Simply exposes proposal-first tools to list, create, update, assign, copy, and archive document templates in plain language when the actor has the matching collection data-feature permission. Those tools manage template configuration only; billable document-generation usage is created when a document is rendered/generated from a record.