Claves de API
Actualizar Permisos de Clave de API
Reemplazar el conjunto de permisos de una clave de API sin cambiar su secreto.
PUT /api/api-keys/:id/permissions
Reemplaza el conjunto completo de permisos de una clave de API perteneciente al usuario autenticado. La respuesta tiene la misma forma que un elemento de Listar Claves de API — plaintextKey nunca se incluye. El secreto no cambia: la misma x-api-key autentica con el conjunto nuevo en la siguiente solicitud. El conjunto nuevo debe ser un subconjunto de tus permisos vigentes, y api-key:manage no se puede asignar.
Auth: Requerida — permiso api-key:manage
Parámetros de Ruta
| Parámetro | Tipo | Descripción |
|---|---|---|
id | string | UUID de la clave de API a actualizar |
Cuerpo de la Solicitud
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
permissions | string[] | Sí | Nueva lista de nombres de permisos (mínimo 1, sin repetidos). Reemplaza el conjunto actual por completo |
Ejemplo
curl -X PUT https://api.reten.ai/api/api-keys/f47ac10b-58cc-4372-a567-0e02b2c3d479/permissions \
-H "Authorization: Bearer <token>" \
-H "x-tenant-id: <tenant-id>" \
-H "Content-Type: application/json" \
-d '{
"permissions": ["activity:view", "activity-result:submit"]
}'const keyId = "f47ac10b-58cc-4372-a567-0e02b2c3d479";
const response = await fetch(`https://api.reten.ai/api/api-keys/${keyId}/permissions`, {
method: "PUT",
headers: {
"Authorization": "Bearer <token>",
"x-tenant-id": "<tenant-id>",
"Content-Type": "application/json",
},
body: JSON.stringify({ permissions: ["activity:view", "activity-result:submit"] }),
});
const data = await response.json();import requests
key_id = "f47ac10b-58cc-4372-a567-0e02b2c3d479"
response = requests.put(
f"https://api.reten.ai/api/api-keys/{key_id}/permissions",
headers={
"Authorization": "Bearer <token>",
"x-tenant-id": "<tenant-id>",
},
json={"permissions": ["activity:view", "activity-result:submit"]},
)
data = response.json()Respuesta 200 OK
{
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"name": "CI/CD Pipeline Key",
"keyPrefix": "rtn_sk_a1b2c3d4",
"userId": "550e8400-e29b-41d4-a716-446655440000",
"tenantId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"projectId": "3f6c2b1a-8d4e-4f7a-9b2c-5e1d0a7f6c34",
"isActive": true,
"permissions": ["activity:view", "activity-result:submit"],
"expiresAt": "2026-12-31T23:59:59.000Z",
"lastUsedAt": "2026-02-26T16:45:00.000Z",
"createdAt": "2026-02-26T14:30:00.000Z",
"revokedAt": null
}Respuestas de Error
| Estado | Descripción |
|---|---|
400 | Error de validación — array de permisos vacío, permisos repetidos, un nombre de permiso fuera del catálogo, o un id que no es UUID |
400 | La clave de API ya fue revocada |
400 | Sin contexto de tenant activo |
401 | Token de autenticación faltante o inválido |
403 | La clave de API no pertenece al usuario autenticado o al tenant — You do not own this API key |
403 | El conjunto solicitado incluye un permiso que no tienes vigente — Cannot assign permissions you do not have: … |
403 | El conjunto solicitado incluye api-key:manage — Cannot assign api-key:manage to an API key |
404 | Clave de API no encontrada |