Back to documentation
Guide25 min
Company verification (KYB)
He verifies moral persons, identifies final beneficiaries and valid legal representatives according to LFPIORPI.
What includes verification KYB
Company information
- • RFC and fiscal status (SAT)
- • Act of association
- • Public Trade Registry
- • Tax office
Corporate structure
- • Shareholders and percentages
- • Final beneficiaries (UBO)
- • Legal representatives
- • Notary powers
Control lists
- • PEP (politically exposed)
- • Penalties OFAC
- • UN lists
- • Local black lists
Verification of persons
- • KYC of Legal Representatives
- • KYC of final beneficiaries
- • Validation of powers
- • Comparison of signatures
1. To create corporate monitoring
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. uploading documents
Reg up corporate documents for validation:
// 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. Check related persons
Initiates verification KYC and final beneficiaries:
// 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. Consult results
Webhook: kyb.complete
{
"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
}
}Risk levels
0-30Low: Recommended automatic approval
31-70Medium: Recommended manual review
71-100Stop: Due care required