Reten Docs
Claves de API

Crear Clave de API

Generar una nueva clave de API con permisos de alcance para acceso programático.

POST /api/api-keys

Crea una nueva clave de API para el usuario autenticado en el tenant activo. La clave en texto plano se devuelve solo una vez en la respuesta — guárdala de forma segura.

Auth: Requerida — permiso MANAGE_API_KEYS

Cuerpo de la Solicitud

CampoTipoRequeridoDescripción
namestringEtiqueta legible para la clave (máximo 255 caracteres)
permissionsstring[]Lista de nombres de permisos a conceder (mínimo 1). Debe ser un subconjunto de los propios permisos del creador
expiresAtstringNoFecha de expiración en formato ISO 8601. La clave es rechazada automáticamente después de esta fecha

Ejemplo

curl -X POST https://api.reten.ai/api/api-keys \
  -H "Authorization: Bearer <token>" \
  -H "x-tenant-id: <tenant-id>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "CI/CD Pipeline Key",
    "permissions": ["manage_commerces", "view_activities"],
    "expiresAt": "2026-12-31T23:59:59Z"
  }'
const response = await fetch("https://api.reten.ai/api/api-keys", {
  method: "POST",
  headers: {
    "Authorization": "Bearer <token>",
    "x-tenant-id": "<tenant-id>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "CI/CD Pipeline Key",
    permissions: ["manage_commerces", "view_activities"],
    expiresAt: "2026-12-31T23:59:59Z",
  }),
});
const data = await response.json();
const plaintextKey = data.plaintextKey; // Store securely — returned only once
import requests

response = requests.post(
    "https://api.reten.ai/api/api-keys",
    headers={
        "Authorization": "Bearer <token>",
        "x-tenant-id": "<tenant-id>",
    },
    json={
        "name": "CI/CD Pipeline Key",
        "permissions": ["manage_commerces", "view_activities"],
        "expiresAt": "2026-12-31T23:59:59Z",
    },
)
data = response.json()
plaintext_key = data["plaintextKey"]  # Store securely — returned only once

Respuesta 201 Created

{
  "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "name": "CI/CD Pipeline Key",
  "keyPrefix": "rtn_sk_a1b2c3d4",
  "plaintextKey": "rtn_sk_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8",
  "userId": "550e8400-e29b-41d4-a716-446655440000",
  "tenantId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
  "isActive": true,
  "permissions": ["manage_commerces", "view_activities"],
  "expiresAt": "2026-12-31T23:59:59.000Z",
  "lastUsedAt": null,
  "createdAt": "2026-02-26T14:30:00.000Z",
  "revokedAt": null
}

El campo plaintextKey solo se incluye en la respuesta de creación. No puede recuperarse nuevamente — si se pierde, revoca la clave y crea una nueva.

Respuestas de Error

EstadoDescripción
400Error de validación — campos faltantes, array de permisos vacío, o nombres de permisos inválidos
401Token de autenticación faltante o inválido
403Los permisos solicitados no son un subconjunto de los propios permisos del creador