
# Revertir una plantilla de correo

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

Vuelve a validar el contenido de una versión publicada anteriormente (ahora archivada) y la publica como nueva versión, con `source_version` definido como la versión a la que se revierte. El historial no se reescribe. El registro de auditoría `email_template.rolled_back` se escribe en la misma transacción.

Una versión que nunca se publicó, o la que está publicada en este momento, devuelve `409`.

## 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 archivada que se va a volver a publicar (1 o mayor). |

## Respuesta

`200 OK` con la nueva versión publicada.

```json
{
  "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
}
```

## 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 nunca se publicó, o es la que está publicada. |
| 422 | `validation_failed` | Falta `version` o es menor que 1, o el contenido 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: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`
