Templates
Handlebars and Markdown templates, and rendering one without sending.
Guides: Templates.
| Method | Path | Operation | Scope |
|---|---|---|---|
GET | /v1/templates | List templates | read |
POST | /v1/templates | Create a template | write |
GET | /v1/templates/{templateId} | Get a template | read |
PATCH | /v1/templates/{templateId} | Update a template | write |
DELETE | /v1/templates/{templateId} | Delete a template | write |
POST | /v1/template-renders | Render a template without sending | read |
Runs in your browser against api.workwae.com with the key you enter. Use a read-only key, limited to a test account if you can.
Newest first, without their content (GET /v1/templates/{templateId} has it). accountId lists those bound to that account; usableBy those the account may send with (the tenant's shared ones and its own); name the ones of that exact name, one per scope; query those whose name contains it, ignoring case.
Required scope: read.
limit?integer1 <= value <= 20050cursor?string1 <= length <= 512accountId?stringuuidusableBy?stringuuidname?stringlength <= 255query?stringlength <= 255OK
application/json- response
items*array<>nextCursor*|nullcurl -X GET 'https://api.workwae.com/v1/templates'{ "items": [ { "id": "c4e6a8b0-1d3f-4a5c-8e7b-9d1f3a5c7e9b", "accountId": "6f1c2a4e-8b3d-4e5f-9a7b-1c2d3e4f5a6b", "name": "string", "description": "Production", "source": "handlebars", "externalRef": "user_42", "createdAt": "2026-05-04T09:30:00.000Z", "updatedAt": "2026-05-04T09:30:00.000Z" } ], "nextCursor": "eyJ0eG5pZCI6IjQyIiwiaWQiOjEwMDF9"}Runs against the live API with the key you enter: this change really happens. Use a key limited to a test account.
Every field is checked to compile as Handlebars.
Required scope: write.
application/json- body
accountId?stringuuidname*string1 <= length <= 255description?stringlength <= 1000subject?stringlength <= 2000html?stringlength <= 1000000text?stringlength <= 1000000previewText?stringlength <= 2000format?TemplateFormat"html""html""markdown"source?TemplateSource"handlebars""handlebars""react-email"externalRef?stringlength <= 255OK
application/json- response
id*stringuuidaccountId*|nullname*stringdescription*string|nullsource*TemplateSource"handlebars""react-email"externalRef*string|nullcreatedAt*stringdate-timeupdatedAt*stringdate-timesubject*|nullhtml*|nulltext*|nullpreviewText*|nullformat*TemplateFormat"html""markdown"curl -X POST 'https://api.workwae.com/v1/templates' \ -H 'Content-Type: application/json' \ -d '{ "name": "string"}'{ "id": "c4e6a8b0-1d3f-4a5c-8e7b-9d1f3a5c7e9b", "accountId": "6f1c2a4e-8b3d-4e5f-9a7b-1c2d3e4f5a6b", "name": "string", "description": "Production", "source": "handlebars", "externalRef": "user_42", "createdAt": "2026-05-04T09:30:00.000Z", "updatedAt": "2026-05-04T09:30:00.000Z", "subject": "Quarterly report", "html": "string", "text": "string", "previewText": "string", "format": "html"}Runs in your browser against api.workwae.com with the key you enter. Use a read-only key, limited to a test account if you can.
Required scope: read.
templateId*stringuuidOK
application/json- response
id*stringuuidaccountId*|nullname*stringdescription*string|nullsource*TemplateSource"handlebars""react-email"externalRef*string|nullcreatedAt*stringdate-timeupdatedAt*stringdate-timesubject*|nullhtml*|nulltext*|nullpreviewText*|nullformat*TemplateFormat"html""markdown"curl -X GET 'https://api.workwae.com/v1/templates/c0e1bf1f-c03b-4b05-acbf-794066d1e730'{ "id": "c4e6a8b0-1d3f-4a5c-8e7b-9d1f3a5c7e9b", "accountId": "6f1c2a4e-8b3d-4e5f-9a7b-1c2d3e4f5a6b", "name": "string", "description": "Production", "source": "handlebars", "externalRef": "user_42", "createdAt": "2026-05-04T09:30:00.000Z", "updatedAt": "2026-05-04T09:30:00.000Z", "subject": "Quarterly report", "html": "string", "text": "string", "previewText": "string", "format": "html"}Runs against the live API with the key you enter: this change really happens. Use a key limited to a test account.
Only the fields given change; queued sends keep what they were rendered with.
Required scope: write.
templateId*stringuuidapplication/json- body
name?string1 <= length <= 255description?|nullsubject?|nullhtml?|nulltext?|nullpreviewText?|nullformat?TemplateFormat"html""markdown"source?TemplateSource"handlebars""react-email"externalRef?|nullOK
application/json- response
id*stringuuidaccountId*|nullname*stringdescription*string|nullsource*TemplateSource"handlebars""react-email"externalRef*string|nullcreatedAt*stringdate-timeupdatedAt*stringdate-timesubject*|nullhtml*|nulltext*|nullpreviewText*|nullformat*TemplateFormat"html""markdown"curl -X PATCH 'https://api.workwae.com/v1/templates/c0e1bf1f-c03b-4b05-acbf-794066d1e730' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "c4e6a8b0-1d3f-4a5c-8e7b-9d1f3a5c7e9b", "accountId": "6f1c2a4e-8b3d-4e5f-9a7b-1c2d3e4f5a6b", "name": "string", "description": "Production", "source": "handlebars", "externalRef": "user_42", "createdAt": "2026-05-04T09:30:00.000Z", "updatedAt": "2026-05-04T09:30:00.000Z", "subject": "Quarterly report", "html": "string", "text": "string", "previewText": "string", "format": "html"}Runs against the live API with the key you enter: this change really happens. Use a key limited to a test account.
Queued sends keep their rendered content.
Required scope: write.
templateId*stringuuidOK
application/json- response
curl -X DELETE 'https://api.workwae.com/v1/templates/c0e1bf1f-c03b-4b05-acbf-794066d1e730'nullRuns against the live API with the key you enter: this change really happens. Use a key limited to a test account.
Renders a stored template (templateId) or inline fields with params, as a send would. account.email and account.name come from accountId, else from the template's own account, else render empty.
Required scope: read.
application/json- body
templateId?stringuuidaccountId?stringuuidsubject?stringlength <= 2000html?stringlength <= 1000000text?stringlength <= 1000000previewText?stringlength <= 2000format?TemplateFormat"html""markdown"params?{}OK
application/json- response
subject*string|nullhtml*string|nulltext*string|nullpreviewText*string|nullcurl -X POST 'https://api.workwae.com/v1/template-renders' \ -H 'Content-Type: application/json' \ -d '{}'{ "subject": "Quarterly report", "html": "string", "text": "string", "previewText": "string"}