Skip to content
ES

Autenticación

This content is not available in your language yet.

Zentto KYC tiene dos esquemas de autenticación según quién consume la API:

EsquemaPara quiénMecanismo
API keyIntegraciones (apps / empresas), server-to-serverHeader X-API-Key: zkyc_...
Cookies + CSRFOperadores humanos en el dashboardJWT en cookies httpOnly + CSRF double-submit

Las integraciones siempre usan API key. El esquema de cookies es exclusivo del dashboard de operadores y no se usa para integrar la API en tu backend.

Cada empresa (tenant) genera una o más API keys con prefijo zkyc_. Se envían en el header X-API-Key en cada request:

POST /v1/sessions
Host: kyc.zentto.net
X-API-Key: zkyc_a1b2c3d4e5f6...
Content-Type: application/json

Con el SDK basta configurar apiKey en el constructor; el cliente añade el header automáticamente:

import { ZenttoKyc } from "@zentto/kyc-sdk";
const kyc = new ZenttoKyc({ apiKey: process.env.KYC_API_KEY });

La creación requiere un usuario con rol operador. Se puede hacer desde el dashboard o por API:

POST /v1/keys
X-API-Key: zkyc_<operador>
Content-Type: application/json
{ "name": "backend-produccion" }
{
"ok": true,
"key": "zkyc_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4",
"meta": {
"id": 7,
"key_prefix": "zkyc_a1b2c3",
"name": "backend-produccion",
"created_at": "2026-06-21T10:00:00.000Z"
}
}
CampoDescripción
keyAPI key completa. Se muestra una sola vez — guárdala de inmediato.
meta.key_prefixPrefijo visible (los primeros 12 caracteres) para identificarla luego.

El body acepta userId (opcional, para emitir la key a otro usuario) y name (opcional, etiqueta; default "default").

GET /v1/keys
X-API-Key: zkyc_...
{
"ok": true,
"keys": [
{
"id": 7,
"key_prefix": "zkyc_a1b2c3",
"name": "backend-produccion",
"is_active": true,
"rate_limit_per_day": null,
"created_at": "2026-06-21T10:00:00.000Z",
"last_used_at": "2026-06-21T11:30:00.000Z"
}
]
}

Las keys nunca se devuelven completas en el listado; solo su prefijo.

DELETE /v1/keys/7
X-API-Key: zkyc_...
{ "ok": true }

La revocación marca la key como inactiva (is_active = false). Para rotar: crea una nueva key, despliega el nuevo valor en tu backend y luego revoca la anterior.

Con el SDK:

await kyc.keys.create({ name: "backend-produccion" });
await kyc.keys.list();
await kyc.keys.revoke("7");

El dashboard autentica a humanos con JWT en cookies httpOnly, no para integraciones. Se documenta aquí por completitud.

CookieUso
zkyc_accessAccess token JWT (httpOnly)
zkyc_refreshRefresh token JWT (httpOnly)
zkyc_csrfToken CSRF (legible por el front, double-submit)

En las mutaciones se envía el token CSRF también como header x-csrf-token (patrón double-submit).

MétodoRutaDescripción
GET/v1/auth/csrfObtiene el token CSRF
POST/v1/auth/loginLogin { email, password } → setea cookies
POST/v1/auth/refreshRota la sesión leyendo la cookie refresh
GET/v1/auth/mePerfil del operador autenticado
POST/v1/auth/logoutRevoca sesiones y limpia cookies
POST /v1/auth/login
Content-Type: application/json
{ "email": "operador@empresa.com", "password": "••••••••" }
{
"user": { "id": 1, "email": "operador@empresa.com", "role": "operator" }
}

Desde un cliente browser, el SDK opera con cookies si se instancia con withCredentials: true (y sin apiKey):

const kyc = new ZenttoKyc({ withCredentials: true });
  • No expongas la API key en el frontend. Úsala solo server-to-server desde tu backend. Si el navegador necesita interactuar, hazlo a través de tu propio backend o con el esquema de cookies del dashboard.
  • Una key por entorno/servicio (backend-produccion, backend-staging), para poder revocar de forma granular.
  • Rota periódicamente: crea la nueva, despliega, revoca la vieja. La revocación es inmediata.
  • Guarda la key en un secreto/variable de entorno; nunca en el repositorio.