Templates have a kind of incident or maintenance, an optional title_tpl and a body_tpl. Both accept {{component}}, {{components}}, {{page}}, {{title}} and {{eta}}. Monitor rules reference them by id. See the message templates guide.
List templates
/user/message_templatesNeeds the dashboard.read permission, or an API key with the matching scope.
Query parameters
workspace_idintegerrequired- The workspace to read from.
kindstringincidentormaintenance.
curl "https://api.statusbee.co/user/message_templates?workspace_id=5&kind=incident" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"rows": [
{
"id": 4,
"workspace_id": 5,
"org_id": 5,
"kind": "incident",
"name": "Automated outage",
"title_tpl": "{{component}} is unavailable",
"body_tpl": "Our monitoring detected a problem with {{component}}. We are investigating and will post an update within 30 minutes.",
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
}
]
}
}Create a template
/user/message_templatesNeeds the templates.manage permission, or an API key with the matching scope.
Body
workspace_idintegerrequiredkindstringrequiredincidentormaintenance.namestringrequired- Shown in pickers.
body_tplstringrequired- Markdown with variables.
title_tplstring- Up to 200 characters.
curl -X POST "https://api.statusbee.co/user/message_templates" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"workspace_id": 5,
"kind": "incident",
"name": "Automated outage",
"title_tpl": "{{component}} is unavailable",
"body_tpl": "Our monitoring detected a problem with {{component}}. We are investigating and will post an update within 30 minutes."
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 4,
"workspace_id": 5,
"org_id": 5,
"kind": "incident",
"name": "Automated outage",
"title_tpl": "{{component}} is unavailable",
"body_tpl": "Our monitoring detected a problem with {{component}}. We are investigating and will post an update within 30 minutes.",
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
}
}Render a template
/user/message_templates/:id/renderPreview with your own variable values. Unknown variables are left as typed.
Needs the dashboard.read permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Template id.
Body
varsobjectrequired{ component, components, page, title, eta }, any subset.
curl -X POST "https://api.statusbee.co/user/message_templates/4/render" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"vars": {
"component": "Checkout",
"page": "Acme Cloud"
}
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"title": "Checkout is unavailable",
"body": "Our monitoring detected a problem with Checkout. We are investigating and will post an update within 30 minutes."
}
}Update a template
/user/message_templates/:idNeeds the templates.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Template id.
Body
namestringtitle_tplstringbody_tplstring
curl -X PATCH "https://api.statusbee.co/user/message_templates/4" \
-H "Authorization: Bearer sb_live_…" \
-H "Content-Type: application/json" \
-d '{
"name": "Monitor-detected outage"
}'{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"id": 4,
"workspace_id": 5,
"org_id": 5,
"kind": "incident",
"name": "Monitor-detected outage",
"title_tpl": "{{component}} is unavailable",
"body_tpl": "Our monitoring detected a problem with {{component}}. We are investigating and will post an update within 30 minutes.",
"created_at": "2026-09-14T09:02:11.000Z",
"updated_at": "2026-09-14T09:02:11.000Z"
}
}Delete a template
/user/message_templates/:idNeeds the templates.manage permission, or an API key with the matching scope.
Path parameters
idintegerrequired- Template id.
curl -X DELETE "https://api.statusbee.co/user/message_templates/4" \
-H "Authorization: Bearer sb_live_…"{
"statusCode": 200,
"error": false,
"message": null,
"data": {
"deleted": 1
}
}