/v1/brands/{brand_id}/email-templates Create an email template
Save an email template for campaigns and sequence steps. Placeholders filled per contact: {{first_name}}, {{name}}, {{email}}, {{company}}, {{brand_name}}, and from the cited page a contact was added with {{page_url}}, {{page_title}}, {{role}}. Requires the editor role and the brand owner on Pro.
Path parameters
-
Brand UUID.
Query parameters
-
Preview the call without executing it. Runs auth, scope, eligibility and body validation, then returns
200with adry_runobject reporting the request-unit and credit cost plus a non-consuming quota snapshot. Nothing is debited, reserved, dispatched or mutated. An invalid body still returns422.default: false
Header parameters
-
Required with an API key, else
400 idempotency_key_required: a new value per operation (a UUID works). A retry with the same key and body within 24 hours replays the first response instead of running again. Ignored withdry_run=true.
Request body
application/json required-
HTML body. Placeholders filled per contact:
{{first_name}},{{name}},{{email}},{{company}},{{brand_name}}, and from the cited page a contact was added with{{page_url}},{{page_title}},{{role}}. -
Name.
-
Subject line. Placeholders filled per contact:
{{first_name}},{{name}},{{email}},{{company}},{{brand_name}}, and from the cited page a contact was added with{{page_url}},{{page_title}},{{role}}. -
request_backlink,request_inclusion,build_relationship,follow_uporpitch. - body_text string (nullable) nullable
Plain-text body.
- is_default boolean
Make it the default template of its type.
Example payload
{
"body": "<p>Hi {{first_name}}, I read {{page_url}} and thought the Allbirds Tree Runner fits it.</p>",
"is_default": false,
"name": "Best running shoes pitch",
"subject": "{{first_name}}, a shoe for {{page_title}}",
"template_type": "request_inclusion"
}Responses
-
HTML body. Placeholders filled per contact:
{{first_name}},{{name}},{{email}},{{company}},{{brand_name}}, and from the cited page a contact was added with{{page_url}},{{page_title}},{{role}}. -
Owning brand id.
-
Template id.
-
The default template of its type.
-
Name.
-
Subject line. Placeholders filled per contact:
{{first_name}},{{name}},{{email}},{{company}},{{brand_name}}, and from the cited page a contact was added with{{page_url}},{{page_title}},{{role}}. -
What the email asks for:
request_backlink,request_inclusion,build_relationship,follow_uporpitch. - body_text string (nullable) nullable
Plain-text body.
- created_at string (nullable) nullable
When the template was created.
- object string
- updated_at string (nullable) nullable
Last change.
- variables array of string
Placeholders the template uses.
Example response
{
"body": "<p>Hi {{first_name}}, I read {{page_url}} and thought the Allbirds Tree Runner fits it.</p>",
"body_text": "Hi {{first_name}}, I read {{page_url}} and thought the Allbirds Tree Runner fits it.",
"brand_id": "3f9c7e8a-1b6a-4d8e-92cf-7d9c8b1e2a04",
"created_at": "2026-09-20T10:00:00+00:00",
"id": "2b3c4d5e-6f70-4a1b-8c2d-3e4f5a6b7c8d",
"is_default": false,
"name": "Best running shoes pitch",
"object": "email_template",
"subject": "{{first_name}}, a shoe for {{page_title}}",
"template_type": "request_inclusion",
"updated_at": "2026-09-20T10:00:00+00:00",
"variables": [
"first_name",
"page_title",
"page_url"
]
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "validation_error",
"message": "Request validation failed"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "unauthorized",
"message": "Missing or invalid credentials"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "forbidden",
"message": "You do not have permission to access this resource"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "not_found",
"message": "Resource not found"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "conflict",
"message": "Resource conflict"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "body_validation_error",
"message": "Request body did not match the expected schema"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "rate_limit_exceeded",
"message": "Per-minute rate limit exceeded"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "internal_error",
"message": "An unexpected error occurred"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}-
Show fields
-
Stable machine-readable error code from the catalog.
-
Human-readable description suitable for logging.
- details object
Optional, code-specific context (e.g.
errorsarray forvalidation_error,retry_afterforservice_unavailable). Shape depends onerror.code; treat as opaque otherwise.Show fields
Empty object (no properties).
-
- request_id string
Server-generated correlation id for the request. Mirrors the
X-Correlation-IDresponse header. Include this when contacting support.
Example response
{
"error": {
"code": "service_unavailable",
"message": "Service temporarily unavailable, please retry"
},
"request_id": "9f6c4e8a-1d3b-4c8b-9f1e-7a3b1c2d3e4f"
}