Inyo

Autenticación

La API de KYC utiliza el grant de client-credentials de OAuth 2.0 (RFC 6749 §4.4). Su backend intercambia un client_id y un client_secret por un token Bearer de corta duración, y luego presenta ese token en cada llamada a /v1/*.

Las credenciales son exclusivamente del lado del servidor. Nunca envíe un client_secret — ni un token de acceso — a un navegador o aplicación móvil. Sus clientes interactúan con el widget, nunca con la API.


Solicitar un Token

Endpoint: POST /oauth/token
Content-Type: application/x-www-form-urlencoded

curl --request POST \
  --url https://{FQDN}/oauth/token \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data grant_type=client_credentials \
  --data client_id=$KYC_CLIENT_ID \
  --data client_secret=$KYC_CLIENT_SECRET

Las credenciales también pueden enviarse como autenticación HTTP Basic (client_secret_basic) en lugar de en el cuerpo:

curl --request POST \
  --url https://{FQDN}/oauth/token \
  --user "$KYC_CLIENT_ID:$KYC_CLIENT_SECRET" \
  --data grant_type=client_credentials

Respuesta:

{
  "access_token": "eyJhbGciOiJSUzI1NiIs…",
  "token_type": "Bearer",
  "expires_in": 3600,
  "scope": "sessions verifications"
}

grant_type debe ser client_credentials — es el único grant que este endpoint admite.


Scopes

Cada endpoint requiere un scope específico. Los tokens se emiten con los scopes otorgados a su cliente; solicite un conjunto más restringido con un parámetro opcional scope cuando un componente de su sistema solo necesite uno de ellos.

ScopeOtorga acceso a
sessionsPOST /v1/sessions, GET /v1/sessions/{session_id}
verificationsPOST /v1/verifications
--data scope=sessions

Solicitar un scope desconocido se rechaza en lugar de ignorarse silenciosamente. Un token que carece del scope que un endpoint requiere devuelve 403, no 401 — el token es válido, simplemente no está autorizado para esa llamada.


Uso del Token

Presente el token como credencial Bearer:

curl --request POST \
  --url https://{FQDN}/v1/sessions \
  --header "Authorization: Bearer $ACCESS_TOKEN" \
  --header 'Content-Type: application/json' \
  --data '{"user_ref": "user-123"}'

El validador de formato de número de documento es la única excepciónPOST /v1/validators/document-number es una verificación de formato sin estado y no necesita token.


Vida Útil y Renovación del Token

Los tokens son JWT firmados con RS256 y expiran — expires_in le indica cuándo, en segundos. Almacene el token en caché y renuévelo antes de que expire; no solicite un token nuevo por cada llamada a la API, y no codifique un token de forma fija en ningún lugar.

Un cliente robusto:

  1. Almacena el token en memoria junto con su marca de tiempo de expiración.
  2. Lo renueva cuando la vida útil restante cae por debajo de un pequeño margen (30-60 segundos).
  3. Reintenta una vez ante un 401, por si el token expiró entre la verificación y la llamada.

Respuestas de Error

Los errores del endpoint de tokens siguen la RFC 6749 §5.2 — un código error con una error_description legible:

EstadoerrorCausa
400unsupported_grant_typegrant_type estaba ausente o no era client_credentials
400invalid_scopeEl scope solicitado contiene un valor desconocido
401invalid_clientCredenciales de cliente faltantes, desconocidas o incorrectas. La respuesta incluye un desafío WWW-Authenticate: Basic
{
  "error": "invalid_client",
  "error_description": "Missing client credentials"
}

Errores en llamadas a /v1/*:

EstadoCausaCómo corregirlo
401Falta el encabezado Authorization: BearerEnvíe el encabezado; obtenga un token en POST /oauth/token
401Token expiradoRenueve el token y reintente
401Token inválido o no verificableConfirme que está usando el token textualmente y contra el entorno correspondiente
403El token es válido pero carece del scope del endpointSolicite un token que incluya el scope requerido

La respuesta 403 incluye WWW-Authenticate: Bearer error="insufficient_scope" indicando el scope que se requería.


Aislamiento de Entornos

Sandbox y producción emiten credenciales separadas, y cada token es válido únicamente en el entorno que lo emitió. Las sesiones están estrictamente limitadas al tenant que las creó: un token nunca puede leer la sesión de otro tenant, y una solicitud por una devuelve 404.


Rotación de su Secreto

Los secretos de cliente son rotados por Inyo a solicitud — contacte a su representante de Inyo en lugar de intentar la rotación a través de la API. Rote de inmediato si un secreto pudo haber sido expuesto.


Próximos Pasos