Quickstart do SDK de KYC Hospedado
Implemente a verificação de identidade em 5 minutos com os pacotes oficiais @noviuz/kyc-server e @noviuz/kyc-js.
Este guia ensina a integrar a verificação de identidade (KYC) em 5 minutos utilizando os pacotes oficiais mantidos pela Noviuz: @noviuz/kyc-server no backend e @noviuz/kyc-js no navegador.
Procurando a API pública da Conta Nexiuz? Para integrar cobranças PIX, extratos, contas e saques via API REST direta com assinatura HMAC, consulte o Quickstart da API Nexiuz. A API Nexiuz não requer SDK proprietário.
Como funciona a arquitetura
A verificação ocorre na superfície hospedada e segura da Noviuz, garantindo conformidade com a LGPD e isolando dados biométricos e documentais:
Seu Backend Navegador do Cliente Noviuz KYC
│ │ │
│ 1. mintSession(customerType) │ │
├──────────────────────────────────┼─────────────────────────────►│
│ recebe sessionId │ │
│◄─────────────────────────────────┼──────────────────────────────┤
│ │ │
│ 2. envia sessionId │ │
├─────────────────────────────────►│ │
│ │ 3. NoviuzKyc.open(sessionId) │
│ ├─────────────────────────────►│
│ │ coleta identidade/selfie │
│ │ notifica onSuccess / UI │
│ │◄─────────────────────────────┤
│ 4. getResult(sessionId) │ │
├──────────────────────────────────┼─────────────────────────────►│
│ retorna status oficial + euid │ │
│◄─────────────────────────────────┼──────────────────────────────┤1. Instale os pacotes oficiais do SDK
Instale cada pacote estritamente no ambiente onde ele deve ser executado:
# No seu serviço de backend (Node.js / Edge)
npm install @noviuz/kyc-server
# Na sua aplicação frontend (React, Next.js, Vue, Vite, etc.)
npm install @noviuz/kyc-jsAtenção: @noviuz/kyc-server utiliza a credencial confidencial e nunca deve ser importado em código que roda no navegador ou empacotado no bundle client-side.
2. Crie a sessão no servidor (Backend)
No seu backend confidencial, inicialize o cliente de sessão com sua chave secreta Bearer provisionada pela Noviuz (NOVIUZ_KYC_SECRET_KEY) e gere uma sessão vinculada à tentativa do seu usuário:
import { createSessionClient } from '@noviuz/kyc-server/bearer';
const kyc = createSessionClient({
baseUrl: process.env.NOVIUZ_KYC_API_BASE ?? 'https://api.noviuz.com',
secretKey: process.env.NOVIUZ_KYC_SECRET_KEY!,
});
/**
* Endpoint do seu backend autenticado chamado pelo seu frontend.
*/
export async function handleStartVerification(userId: string, attemptId: string) {
// Idempotência estável: repetir com o mesmo ID retorna a mesma sessão
const idempotencyKey = `kyc:${userId}:${attemptId}`;
const session = await kyc.mintSession(
{
customerType: 'individual', // 'individual' (PF) ou 'business' (PJ)
},
{
idempotencyKey,
}
);
// Retorne apenas o sessionId para o frontend
return { sessionId: session.sessionId };
}idempotencyKey: Chave de 16 a 255 caracteres ASCII. Garante que retries da mesma tentativa não gerem sessões duplicadas ou cobranças redundantes.customerType: Define a esteira de verificação (individualpara pessoa física;businesspara pessoa jurídica).
3. Abra o fluxo no navegador (Frontend)
Na sua aplicação web, chame NoviuzKyc.open após o usuário acionar a verificação (ex: clique de botão). Nunca invoque durante Server-Side Rendering (SSR).
import React, { useState } from 'react';
import { NoviuzKyc } from '@noviuz/kyc-js';
export function VerificationButton({ userId }: { userId: string }) {
const [loading, setLoading] = useState(false);
const startKyc = async () => {
setLoading(true);
try {
// 1. Solicita a sessão à rota autenticada do SEU backend
const res = await fetch('/api/kyc/start-session', { method: 'POST' });
const { sessionId } = await res.json();
// 2. Abre a modal hospedada oficial da Noviuz
NoviuzKyc.open({
sessionId,
onSuccess: ({ sessionId }) => {
// Notificação visual de conclusão pelo usuário
console.log('Fluxo visual concluído pelo cliente:', sessionId);
notifyBackendToReconcile(sessionId);
},
onReview: ({ sessionId }) => {
console.log('Submetido para análise manual:', sessionId);
notifyBackendToReconcile(sessionId);
},
onError: (error) => {
console.error('Erro na experiência de verificação:', error.code, error.message);
},
});
} finally {
setLoading(false);
}
};
return (
<button onClick={startKyc} disabled={loading}>
{loading ? 'Iniciando...' : 'Verificar Identidade'}
</button>
);
}Callbacks de UI ≠ Autorização: Os eventos onSuccess e onReview do navegador são eventos de interface para atualizar o estado visual da tela. A decisão final de liberar recursos deve ser tomada exclusivamente após a consulta do resultado autoritativo pelo seu servidor.
4. Consulte o resultado oficial no servidor (Reconciliação)
Após a conclusão informada pelo cliente (ou via webhook/polling), seu backend deve consultar o endpoint de resultado e tomar as decisões de produto:
import { createSessionClient } from '@noviuz/kyc-server/bearer';
const kyc = createSessionClient({
baseUrl: process.env.NOVIUZ_KYC_API_BASE ?? 'https://api.noviuz.com',
secretKey: process.env.NOVIUZ_KYC_SECRET_KEY!,
});
export async function reconcileVerification(sessionId: string) {
try {
const result = await kyc.getResult(sessionId);
switch (result.status) {
case 'approved':
// Verificação aprovada com sucesso!
// result.euid contém o identificador patrimonial único gerado
console.log(`✅ Usuário aprovado com EUID: ${result.euid}`);
await activateUserAccount({ sessionId, euid: result.euid });
return { status: 'approved', euid: result.euid };
case 'under_review':
// Encaminhado para a mesa de compliance (análise humana)
console.log(`⏳ Em análise manual: ${sessionId}`);
await markUserUnderReview({ sessionId });
return { status: 'under_review' };
case 'rejected':
case 'cancelled':
case 'expired':
// Reprovado, cancelado pelo usuário ou sessão expirada (410)
console.log(`❌ Verificação não concluída: ${result.status}`);
await markUserFailed({ sessionId, status: result.status });
return { status: result.status };
}
} catch (error: any) {
if (error.status === 409) {
// 409 NOT_TERMINAL: O usuário ainda está completando etapas
console.log('Sessão ainda em andamento. Aguarde antes de reconsultar.');
return { status: 'in_progress' };
}
throw error;
}
}409 NOT_TERMINAL: Indica que a sessão ainda não atingiu um estado final. Aguarde alguns segundos com recuo exponencial antes de tentar novamente.result.euid: O Entity Unique Identifier emitido pela Noviuz após corroborar a identidade cadastral e biométrica da Entidade.
Boas práticas essenciais
- Segredos protegidos: A variável
NOVIUZ_KYC_SECRET_KEYtem permissão de emissão e auditoria. Mantenha-a exclusivamente em variáveis de ambiente confidenciais do servidor. - Fail-closed em compliance: O estado
under_reviewnunca deve conceder permissões automáticas de usuário aprovado. Trate-o de forma segregada até o fechamento da análise. - Ambiente de Testes (Sandbox): No ambiente de homologação/sandbox, as esteiras de teste respondem diretamente para permitir testes ponta a ponta sem a necessidade de documentos ou biometria de pessoas reais. Em produção, a verificação viva é obrigatória e rigorosa.
Próximos passos
Guia Detalhado do SDK de KYC
Consulte todas as opções de configuração visual, temas, branding, CSP e suporte a chave publicável.
Quickstart da API Nexiuz
Aprenda a integrar contas correntes digitais, cobranças PIX e saques bancários.
Repositório do SDK no GitHub
Explore o código-fonte, schemas e documentação dos pacotes no repositório oficial.