
# Publicar una plantilla de correo

`POST /v1/email-templates/{family}/{locale}:publish` · permiso `email-templates:write` · plan Startup y superiores

Vuelve a validar un borrador y lo publica. La versión publicada anterior se archiva y el registro de auditoría de gestión `email_template.published` se escribe en la misma transacción. Los correos enviados a partir de ese momento usan la nueva versión.

Publicar la versión que ya está publicada no cambia nada y la devuelve de nuevo, por lo que los reintentos son seguros. Un borrador más antiguo que la versión publicada, o una versión archivada, devuelve `409`; use [revertir](rollback.md) para volver a una versión archivada.

## Parámetros de ruta

| Parámetro | Descripción |
|---|---|
| `family` | Familia de correo, por ejemplo `verify_email` o `email_otp` (consulte [Listar plantillas de correo](list.md)). |
| `locale` | Etiqueta de idioma, por ejemplo `en` o `de`. |

## Solicitud

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `version` | integer | sí | La versión borrador que se va a publicar (1 o mayor). |

## Respuesta

`200 OK` con la versión publicada (`status: published`).

## Errores

| HTTP | code | Cuándo |
|---|---|---|
| 400 | `unknown_field` | El cuerpo tiene un campo desconocido o no es un objeto JSON. |
| 404 | `not_found` | La familia o el idioma no existe, o la versión no existe. |
| 403 | `plan_feature_unavailable` | El plan del entorno no incluye plantillas de correo personalizadas (Startup y superiores; `required_plan` indica cuál). |
| 409 | `conflict` | La versión está archivada o es más antigua que la versión publicada. |
| 422 | `validation_failed` | Falta `version` o es menor que 1, o el borrador ya no supera la validación. |
| 401 | `unauthenticated` | La credencial falta, no es válida o ha sido revocada. |
| 403 | `insufficient_permissions` | La credencial no tiene el permiso requerido. |
| 429 | `rate_limited` | Se superó el límite de frecuencia; reintente después del periodo indicado en `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; reintente después del periodo indicado en `Retry-After`. |

## Ejemplo

```bash
curl -X POST https://api.eu.keenauth.com/v1/email-templates/verify_email/en:publish \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"version":3}'
```

CLI: `keenauth email-templates publish verify_email en --version 3`
