# Create template

Create a reusable event template blueprint.

Source: https://statusdashboard.com/docs/api/event-management/templates/create

`POST /app/templates`

Creates an org-scoped event template. Requires the `templates` feature. Soft limit `limits.templates` is enforced — returns `403` when at capacity.

***

## Request
See [API Basics](/docs/api) for required headers.

### Request body
Discriminated by `eventType`. All types require `name`, `title`, and `description`.

| Field                   | Type    | Required | Description                                                                                     |
| ----------------------- | ------- | -------- | ----------------------------------------------------------------------------------------------- |
| `name`                  | string  | Yes      | Template list name. 1–100 characters. &#x2A;*Not unique.**                                      |
| `eventType`             | string  | Yes      | `"incident"`, `"maintenance"`, or `"informational"`. Immutable after create.                    |
| `title`                 | string  | Yes      | Default event title. Max 250 characters.                                                        |
| `description`           | string  | Yes      | Rich text body. Max 5,000 characters.                                                           |
| `coordinator`           | object  | No       | Same shape as [event coordinator](/docs/api/event-management/events/create#coordinator-fields). |
| `notifications`         | boolean | No       | Default `true`.                                                                                 |
| `segmentNotification`   | object  | No       | Requires `segments` feature when provided.                                                      |
| `attributes`            | array   | No       | Custom attributes. Subject to `limits.attributes` when present.                                 |
| `impactAnalysis`        | string  | No       | Incident and maintenance only. Max 5,000 characters.                                            |
| `maintenanceAutomation` | object  | No       | Maintenance only. Relative automation config (no absolute times).                               |

**Rejected with `400` if present:** `affectedComponents`, `statusLabel`, `initialTimelineMessage`, `publish`, `startTime`, `endTime`.

***

## Sample request
```bash
curl -X POST https://api.statusdashboard.com/app/templates \
  -H "Authorization: Bearer bcf847abf5c6:def456" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "API outage playbook",
    "eventType": "incident",
    "title": "API service disruption",
    "description": "<p>We are investigating elevated error rates.</p>",
    "notifications": true
  }'
```

## Sample response
**Status: `201 Created`**

```json
{
  "template": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "name": "API outage playbook",
    "eventType": "incident",
    "title": "API service disruption",
    "description": "<p>We are investigating elevated error rates.</p>",
    "notifications": true,
    "createdAt": "2026-06-01T12:00:00.000Z",
    "updatedAt": "2026-06-01T12:00:00.000Z"
  }
}
```

***

## Applying a template
Templates are applied **client-side** when creating events. Fetch the template, map playbook fields onto the event create form, then `POST /app/events` with instance fields (components, status, timeline message, times, publish). See [Using a template](/docs/events/templates#using-a-template).

***

## Error responses
| Status | When                                                                         |
| ------ | ---------------------------------------------------------------------------- |
| `400`  | Validation failure or rejected instance-only fields in the body.             |
| `403`  | Templates feature not enabled, insufficient role, or template quota reached. |
