
# Reemplazar las conexiones de una aplicación

`PUT /v1/applications/{application_id}/connections` · permisos `applications:write` y `connections:write`

Reemplaza en un solo paso la lista completa de conexiones habilitadas en la aplicación. El orden de `connection_ids` es el orden de los botones en la página de inicio de sesión alojada; una lista vacía deshabilita todas las conexiones. Cada conexión debe existir en el mismo entorno: una conexión de otro entorno se trata como una que no existe (`422` en `/connection_ids`) y no se escribe nada. Enviar la lista que la aplicación ya tiene no cambia nada y conserva la versión. El cambio se registra en el log de auditoría de gestión como `application.updated` y se publica como el evento `application_changed`; eliminar una conexión surte efecto en el siguiente inicio de sesión.

## Solicitud

**Cabeceras**: `If-Match: "<version>"` (opcional). Con `If-Match`, la lista solo se escribe si la aplicación sigue en esa versión (`412` en caso contrario); sin él, la lista se escribe sea cual sea la versión. Envíe una cabecera `Idempotency-Key` para que los reintentos sean seguros.

| Parámetro | En | Obligatorio | Descripción |
|---|---|---|---|
| `application_id` | path | sí | ID de la aplicación, con prefijo `app_`. |

**Cuerpo**

| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `connection_ids` | array de string | sí | IDs de conexión (`conn_…`), únicos, como máximo 100, en orden de botones. |

## Respuesta

`200 OK` con la aplicación y su nuevo `ETag`.

## Errores

Cada error es un cuerpo `application/problem+json` con un `code` estable.

| HTTP | `code` | Cuándo |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | El cuerpo no es JSON válido o tiene un campo desconocido. |
| 401 | `unauthenticated` | La clave de API falta, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La clave no tiene `applications:write` o `connections:write`. |
| 404 | `not_found` | La aplicación no existe en este entorno (o el ID está mal formado). |
| 412 | `precondition_failed` | La versión en `If-Match` está desactualizada. |
| 422 | `validation_failed` | `connection_ids` falta, tiene más de 100 elementos, un ID mal formado o repetido, o una conexión que no está en este entorno. |
| 429 | `rate_limited` | Se superó el límite de frecuencia; respete `Retry-After`. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; reintente más tarde. |

## Ejemplo

```bash
curl -X PUT https://api.eu.keenauth.com/v1/applications/app_6f8d0cjgbmf0gtn2rg6pscp3cg/connections \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"connection_ids":["conn_01h455vb4pex5vsknk084sn02q"]}'
```

CLI: `keenauth applications put-connections app_6f8d0cjgbmf0gtn2rg6pscp3cg --connection-ids conn_01h455vb4pex5vsknk084sn02q` (para deshabilitar todas las conexiones, envíe `{"connection_ids":[]}` con `--data -`)
