Volver a documentación
Guía25 min
Verificación empresarial (KYB)
Verifica personas morales, identifica beneficiarios finales y valida representantes legales conforme a LFPIORPI.
Qué incluye la verificación KYB
Datos de la empresa
- • RFC y situación fiscal (SAT)
- • Acta constitutiva
- • Registro Público de Comercio
- • Domicilio fiscal
Estructura corporativa
- • Accionistas y porcentajes
- • Beneficiarios finales (UBO)
- • Representantes legales
- • Poderes notariales
Listas de control
- • PEP (Personas Políticamente Expuestas)
- • Sanciones OFAC
- • Listas ONU
- • Listas negras locales
Verificación de personas
- • KYC de representantes legales
- • KYC de beneficiarios finales
- • Validación de poderes
- • Comparación de firmas
1. Crear verificación empresarial
POST /v1/kyb/verifications
const kybSession = await jaak.kyb.create({
// Datos básicos de la empresa
company: {
rfc: 'ABC123456XYZ',
legalName: 'Empresa Ejemplo SA de CV',
tradeName: 'Ejemplo Corp', // Nombre comercial (opcional)
incorporationDate: '2020-01-15'
},
// Qué verificar
checks: {
// Validaciones fiscales
sat: {
enabled: true,
validateRfc: true,
getFiscalStatus: true,
getConstancia: true
},
// Registro Público de Comercio
rpc: {
enabled: true,
validateIncorporation: true
},
// Estructura accionaria
ownership: {
enabled: true,
identifyUbo: true, // Beneficiarios finales
uboThreshold: 25 // Porcentaje mínimo para UBO
},
// Listas de control
watchlists: {
enabled: true,
pep: true,
ofac: true,
un: true,
localBlacklists: true
},
// KYC de personas relacionadas
relatedPersons: {
enabled: true,
verifyLegalReps: true, // Representantes legales
verifyUbos: true, // Beneficiarios finales
verificationConfig: {
documentTypes: ['ine'],
livenessCheck: true,
faceMatch: true
}
}
},
// Documentos a solicitar
requiredDocuments: [
'acta_constitutiva',
'poder_notarial',
'comprobante_domicilio',
'constancia_fiscal'
],
metadata: {
applicationId: 'app_123',
source: 'onboarding'
},
webhookUrl: 'https://tuapp.com/webhooks/kyb'
});2. Subir documentos
Sube los documentos corporativos para su validación:
// Subir acta constitutiva
await jaak.kyb.uploadDocument(kybSession.id, {
type: 'acta_constitutiva',
file: fs.readFileSync('./acta_constitutiva.pdf'),
mimeType: 'application/pdf'
});
// Subir poder notarial
await jaak.kyb.uploadDocument(kybSession.id, {
type: 'poder_notarial',
file: fs.readFileSync('./poder_notarial.pdf'),
mimeType: 'application/pdf',
metadata: {
notaryNumber: '123',
notaryName: 'Lic. Juan Notario',
date: '2023-06-15'
}
});
// Verificar estado de documentos
const docs = await jaak.kyb.getDocuments(kybSession.id);
console.log(docs);3. Verificar personas relacionadas
Inicia la verificación KYC de representantes legales y beneficiarios finales:
// Agregar representante legal
const legalRep = await jaak.kyb.addPerson(kybSession.id, {
role: 'legal_representative',
name: 'Juan Pérez García',
email: 'juan@empresa.com',
phone: '+525512345678',
position: 'Apoderado General',
// Referencia al poder notarial
powerOfAttorneyRef: 'poder_notarial_001'
});
// Agregar beneficiario final
const ubo = await jaak.kyb.addPerson(kybSession.id, {
role: 'ubo', // Ultimate Beneficial Owner
name: 'María García López',
email: 'maria@email.com',
ownershipPercentage: 51,
isDirectOwner: true
});
// Enviar invitaciones para KYC
await jaak.kyb.sendVerificationInvites(kybSession.id);
// O obtener URLs manualmente
const persons = await jaak.kyb.getPersons(kybSession.id);
persons.forEach(person => {
console.log(`${person.name}: ${person.verificationUrl}`);
});4. Consultar resultados
Webhook: kyb.completed
{
"event": "kyb.completed",
"data": {
"sessionId": "kyb_abc123",
"status": "approved", // approved, rejected, pending_review
"company": {
"rfc": "ABC123456XYZ",
"legalName": "Empresa Ejemplo SA de CV",
"fiscalStatus": "active",
"incorporationDate": "2020-01-15",
"registeredAddress": "Av. Reforma 123, CDMX"
},
"satValidation": {
"status": "valid",
"regime": "General de Ley Personas Morales",
"obligations": ["ISR", "IVA"],
"constanciaUrl": "https://evidence.jaak.ai/sat_xxx.pdf"
},
"ownership": {
"shareholders": [
{ "name": "María García López", "percentage": 51, "isUbo": true },
{ "name": "Pedro Sánchez", "percentage": 30, "isUbo": true },
{ "name": "Inversiones XYZ SA", "percentage": 19, "isUbo": false }
],
"ubosIdentified": 2
},
"watchlists": {
"pep": { "matches": 0 },
"ofac": { "matches": 0 },
"un": { "matches": 0 },
"localBlacklists": { "matches": 0 }
},
"persons": [
{
"name": "Juan Pérez García",
"role": "legal_representative",
"kycStatus": "approved",
"verificationId": "ver_123"
},
{
"name": "María García López",
"role": "ubo",
"kycStatus": "approved",
"verificationId": "ver_456"
}
],
"riskScore": 15, // 0-100
"riskLevel": "low" // low, medium, high
}
}Niveles de riesgo
0-30Bajo: Aprobación automática recomendada
31-70Medio: Revisión manual recomendada
71-100Alto: Due diligence reforzado obligatorio