Roll back an email template
POST /v1/email-templates/{family}/{locale}:rollback · permission email-templates:write · Startup plan and above
Validates the content of an earlier published (now archived) version again and publishes it as a new version, with source_version set to the version you rolled back to. History is not rewritten. The audit record email_template.rolled_back is written in the same transaction.
A version that was never published, or the one that is published now, returns 409.
Path parameters
| Parameter | Description |
|---|---|
family |
Email family, for example verify_email or email_otp (see List email templates). |
locale |
Locale tag, for example en or de. |
Request
| Field | Type | Required | Description |
|---|---|---|---|
version |
integer | yes | The archived version to republish (1 or more). |
Response
200 OK with the new published version.
{
"family": "verify_email",
"locale": "en",
"version": 4,
"status": "published",
"subject": "Confirm your email for {{ application.name }}",
"html": "<p><a href=\"{{ link }}\">Confirm your email</a></p>",
"text_body": "Confirm your email: {{ link }}",
"from_name": null,
"source_version": 1,
"created_at": "2026-10-19T10:00:00Z",
"published_at": "2026-10-19T10:00:00Z",
"latest_version": 4,
"published_version": 4
}
Errors
| HTTP | code | When |
|---|---|---|
| 400 | unknown_field |
The body has an unknown field or is not a JSON object. |
| 404 | not_found |
The family or locale is unknown, or the version does not exist. |
| 403 | plan_feature_unavailable |
The environment's plan does not include custom email templates (Startup and above; required_plan says which). |
| 409 | conflict |
The version was never published, or is the published one. |
| 422 | validation_failed |
version is missing or less than 1, or the content no longer passes validation. |
| 401 | unauthenticated |
The credential is missing, invalid or revoked. |
| 403 | insufficient_permissions |
The credential lacks the required permission. |
| 429 | rate_limited |
The rate limit was exceeded; retry after the Retry-After period. |
| 503 | service_unavailable |
A dependency is temporarily unavailable; retry after the Retry-After period. |
Example
curl -X POST https://api.eu.keenauth.com/v1/email-templates/verify_email/en:rollback \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"version":1}'
CLI: keenauth email-templates rollback verify_email en --version 1 --yes