
# Definir reemplazos de textos

`PUT /v1/branding/texts/{screen}/{locale}` · permiso `branding:write`

Escribe los reemplazos de textos de una pantalla y un idioma; las claves del cuerpo se añaden o reemplazan, y las demás claves se conservan. Solo se pueden reemplazar las claves del catálogo integrado, y un valor debe conservar los `{{ placeholders }}` del texto del catálogo. Se rechazan los caracteres de control y los caracteres de control bidireccionales. Los textos de seguridad no pueden reemplazarse: la pantalla de consentimiento, la confirmación de dispositivo y de cierre de sesión, la advertencia del código de recuperación y el banner de vista previa. Surte efecto al publicar.

## Solicitud

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `screen` | ruta | sí | Pantalla de la página alojada (p. ej., `login`, `authorize`). |
| `locale` | ruta | sí | Idioma compatible (p. ej., `en`, `tr`). |
| `application_id` | query | no | Ámbito de la aplicación (`app_…`). Sin él ni `org_id`, se usa el ámbito del entorno. |
| `org_id` | query | no | Ámbito de la organización (`org_…`). No puede combinarse con `application_id`. |
| `texts` | objeto | sí | Clave → valor, de 1 a 500 claves, cada valor de 1 a 1000 caracteres. |

## Respuesta

`200 OK` con todos los reemplazos del ámbito, la pantalla y el idioma.

```json
{"screen": "login", "locale": "tr", "texts": {"title": "Hoş geldiniz"}}
```

## Errores

| HTTP | code | Cuándo |
|---|---|---|
| 400 | `unknown_field` | El cuerpo tiene un campo desconocido o no es un objeto JSON. |
| 404 | `not_found` | El `application_id` o el `org_id` tienen un formato incorrecto, o la aplicación no existe en este entorno. |
| 422 | `validation_failed` | `texts` falta o está vacío, una clave es desconocida (`unknown_text_key`), falta un marcador de posición (`placeholder_mismatch`), el idioma no es compatible o un valor no es válido; `pointer` es `/texts/<key>`. Se enviaron `application_id` y `org_id` a la vez (`mutually_exclusive`), o se repitió uno de ellos (`repeated`). |
| 401 | `unauthenticated` | La credencial falta, no es válida o está 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 PUT "https://api.eu.keenauth.com/v1/branding/texts/login/tr" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"texts":{"title":"Hoş geldiniz"}}'
```
