メールテンプレートの下書きを保存
PUT /v1/email-templates/{family}/{locale} · 権限 email-templates:write · Startup プラン以上
内容を新しい下書きバージョンとして保存します。下書きを公開するまで、公開済みのバージョンは変わりません。
If-Match は必須で、読み取った最新バージョンを指定します(取得またはバージョン一覧の ETag)。まだバージョンがないスロットには If-Match: "0" を送信してください。* は空のスロットには一致しません。一致しない場合は 412 が返されます。
保存する前に、内容は実際の送信と同じチェックを通過する必要があります:
- サンプルデータを使って Liquid サンドボックスでレンダリングできること。
- HTML のタグの対応が正しいこと。
- ファミリーのコードまたはリンク(一覧の
requiresを参照)が、HTML とプレーンテキスト本文の両方に含まれること。 - リンクはプラットフォームのホストのみを指すこと。
- サイズ制限に従うこと。
スロットは公開済みのバージョンに加えて最大 50 件のバージョンを保持します。それより古い下書きは削除されます。
パスパラメーター
| パラメーター | 説明 |
|---|---|
family |
メールファミリー。例: verify_email または email_otp(メールテンプレートを一覧表示を参照)。 |
locale |
ロケールタグ。例: en または de。 |
リクエスト
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
subject |
string | はい | Liquid、プレーンテキスト、1〜200 文字、改行なし。 |
html |
string | はい | Liquid の HTML 断片、最大 256 KiB。レイアウトはプラットフォームが追加します。 |
text_body |
string | はい | Liquid のプレーンテキスト本文、最大 64 KiB。 |
from_name |
string | いいえ | 送信者の表示名、最大 64 文字、改行なし。空または省略時はアプリケーション名または環境名を使用します。 |
レスポンス
200 OK。新しい下書きと、そのバージョンに設定された ETag を返します。
{
"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
}
エラー
| HTTP | code | 発生条件 |
|---|---|---|
| 400 | unknown_field |
本文に未知のフィールドがあるか、JSON オブジェクトではありません。 |
| 404 | not_found |
ファミリーまたはロケールが不明、またはバージョンが存在しません。 |
| 403 | plan_feature_unavailable |
環境のプランにカスタムメールテンプレートが含まれていません(Startup 以上。必要なプランは required_plan に示されます)。 |
| 412 | precondition_failed |
If-Match が最新バージョンではない(その間に別のユーザーが保存した)、または空のスロットに * を指定しました。 |
| 413 | payload_too_large |
本文が 2 MiB を超えています。 |
| 428 | precondition_required |
If-Match がありません。 |
| 422 | validation_failed |
内容が検証に失敗しました。errors[] に各フィールド(/subject、/html、/text_body、/from_name、/family)と規則が示されます。 |
| 422 | template_forbidden_construct |
テンプレートがサンドボックス外の Liquid 構文を使用しています(例: {% include %})。errors[] にフィールドが示されます。 |
| 401 | unauthenticated |
資格情報がない、無効、または取り消されています。 |
| 403 | insufficient_permissions |
資格情報に必要な権限がありません。 |
| 429 | rate_limited |
レート制限を超えました。Retry-After の期間が過ぎてから再試行してください。 |
| 503 | service_unavailable |
依存先が一時的に利用できません。Retry-After の期間が過ぎてから再試行してください。 |
errors[] に含まれる検証規則は、required、too_long、invalid、unbalanced_html、missing_code、missing_link、missing_code_or_link、template_render_failed、template_too_large、family_not_available です。
例
curl -X PUT https://api.eu.keenauth.com/v1/email-templates/verify_email/en \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H 'If-Match: "2"' \
-d '{"subject":"Confirm your email for {{ application.name }}","html":"<p><a href=\"{{ link }}\">Confirm your email</a></p>","text_body":"Confirm your email: {{ link }}"}'
CLI: keenauth email-templates put verify_email en --if-match '"2"' --data @template.json