Get an email template
GET /v1/email-templates/{family}/{locale} · permission email-templates:read
Returns one version of a template slot (a family and a locale): the newest version by default, the published one with ?version=published, or a given number with ?version=N. The ETag header is the slot's newest version; send it as If-Match when you save a draft.
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. |
Query parameters
| Parameter | Description |
|---|---|
version |
published, or a version number (1 or more). Omit it for the newest version. |
Response
200 OK with ETag: "3"
{
"family": "verify_email",
"locale": "en",
"version": 3,
"status": "draft",
"subject": "Confirm your email for {{ application.name }}",
"html": "<p>Hi,</p><p><a href=\"{{ link }}\">Confirm your email</a></p>",
"text_body": "Confirm your email: {{ link }}",
"from_name": null,
"source_version": null,
"created_at": "2026-10-19T09:00:00Z",
"published_at": null,
"latest_version": 3,
"published_version": 2
}
Errors
| HTTP | code | When |
|---|---|---|
| 404 | not_found |
The family or locale is unknown, the slot has no versions, published was asked and nothing is published, or the version does not exist. |
| 422 | validation_failed |
version is neither published nor a positive number. |
| 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 "https://api.eu.keenauth.com/v1/email-templates/verify_email/en?version=published" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
CLI: keenauth email-templates get verify_email en --version published