Autenticación con API Key

Referencia tecnica del endpoint Autenticación con API Key.

Descripcion

Las API keys de empresa permiten autenticar requests directamente contra la API sin necesidad de hacer login previo ni gestionar tokens JWT con expiración.

Cada key está asociada a una empresa específica. No requiere idEmpresa en el body — el sistema lo deriva automáticamente de la key.

Formas de enviar la API key

El middleware acepta la key en dos headers alternativos. Usar cualquiera de los dos es equivalente:

Opción 1: X-API-Key (recomendada)

X-API-Key: bt_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Opción 2: Authorization Bearer

Authorization: Bearer bt_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

El sistema detecta automáticamente que es una API key y no un JWT porque la clave empieza con bt_live_ o bt_test_.

Prefijos de clave

PrefijoAmbiente
bt_live_Producción
bt_test_Sandbox / testing

Producción y Sandbox son ambientes independientes: no comparten datos, empresas ni CFEs.

Cómo obtener una API key

Desde la interfaz web

  1. Ingresar a Mi cuenta → API
  2. En la sección API keys de empresa, hacer clic en Nueva API key
  3. Asignar un nombre descriptivo (ej. Integrador POS principal)
  4. Guardar la clave completa inmediatamente — no vuelve a mostrarse

Desde la API (requiere JWT)

curl -X POST '$BASE/api/v1/apikeys' \
  -H 'Authorization: Bearer <JWT>' \
  -H 'Content-Type: application/json' \
  -d '{
    "nombre": "Integrador POS principal",
    "descripcion": "Canal de emision productivo"
  }'

La respuesta incluye el campo ApiKey con la clave completa. Guardarla en ese momento — el sistema almacena solo el hash.

Ver: Crear API key

idEmpresa con API key

Cuando se usa una API key, no es necesario enviar idEmpresa en el body de los endpoints que lo aceptan. La empresa se resuelve automáticamente desde la key.

Si se envía igualmente, debe coincidir con la empresa de la key. Enviar una empresa diferente resulta en HTTP 403.

Rate limiting

Cada API key puede tener límites configurados de requests por minuto y por hora. Cuando se supera el límite:

Ver: Configurar rate limit

Errores de autenticación

HTTPCausa
401Key inválida, revocada o no encontrada
403Key válida pero sin acceso al recurso solicitado
429Límite de rate limit superado

Comparación con JWT

AspectoJWTAPI Key
ObtenciónPOST /api/auth/login + renovar cada 6 horasCrear una vez, usar indefinidamente
HeaderAuthorization: Bearer <token>X-API-Key: bt_live_... o Authorization: Bearer bt_live_...
EmpresaRequiere idEmpresa en el body o en sesiónDerivada automáticamente de la key
Expiración6 horas (renovable con refresh token)No expira (hasta revocación)
RevocaciónPOST /api/auth/revokePOST /api/v1/apikeys/{id}/revocar
Rate limitSin límite por defectoConfigurable por key
Recomendado paraUsuarios interactivosIntegraciones automatizadas