SDK Flutter · Android & iOS

Verificación de Identidad
100% On-Device

SDK de verificación de identidad diseñado para República Dominicana. Procesamiento biométrico completo en el dispositivo — ningún dato sensible abandona el teléfono de tu usuario.

Escaneando documento
Mantén la cédula dentro del marco

Todo lo que necesitas para KYC en un solo SDK

Integración en minutos. Un paquete Flutter, cero servicios cloud de terceros.

📄

Captura Inteligente de Documentos.

Guías visuales en tiempo real que asisten al usuario. Validación automática de enfoque, iluminación, reflejos y bordes. Detección de cédulas dominicanas con recorte y corrección de perspectiva.

🔍

OCR + MRZ On-Device

Extracción automática de número de cédula, nombre, fecha de nacimiento, sexo y fecha de expiración. Lectura de zona MRZ con validación de checksums ICAO 9303 y cross-check automático.

🧬

FaceNet Biométrico Local

Generación de embeddings faciales de 128/512 dimensiones directamente en el dispositivo. Comparación por cosine similarity con umbrales configurables. Cero datos biométricos en la nube.

👁️

Liveness Detection Activa

Prueba de vida con desafíos activos: parpadeo, rotación de cabeza, sonrisa. Anti-spoofing para detectar fotos impresas, pantallas y deepfakes. Stream de cámara optimizado a 60fps.

🏛️

Integración JCE

Módulo listo para conectar con la API de la Junta Central Electoral. Endpoints, tokens y timeouts configurables. Reintentos con backoff exponencial. El cliente provee su API Key.

📱

Preparado para NFC

Arquitectura modular con interfaces ISO 14443 definidas para futura lectura de chip NFC. Stubs de prueba incluidos. Sin refactorización al implementar — solo reemplazar el stub.

9 pasos. 8 en el dispositivo.

Solo la validación con la JCE requiere conexión a internet. Todo lo demás funciona offline.

1
Sesión
ID único
On-Device
2
Frente
Captura guiada
On-Device
3
Reverso
Captura + MRZ
On-Device
4
OCR
Datos extraídos
ML Local
5
MRZ
Checksums ✓
On-Device
6
Selfie
Liveness activa
ML Local
7
Match
FaceNet local
ML Local
8
JCE
API oficial
Red
9
Resultado
Veredicto final
On-Device

Integración en 12 líneas

Inicializa el SDK, procesa los documentos y obtén un veredicto — todo en código Dart limpio.

Flutter 3.x+
Android API 28+
iOS 16+
Kotlin / Swift
main.dart
final engine = KycEngine(
  config: KycSdkConfig(
    thermalConfig: ThermalConfig(),
    jceConfig: JceConfig(
      baseUrl: 'https://api.jce.gob.do/v1',
      apiKey: 'YOUR_KEY',
    ),
  ),
);

await engine.initialize();
final session = engine.startSession();

await engine.processDocumentFront(frontBytes);
await engine.processDocumentBack(backBytes);
await engine.processSelfie(selfieBytes);

final result = await engine.complete();
// result.verdict → approved | rejected | review

Activación por API Key + Modelos protegidos

El SDK valida tu licencia en cada inicio y al regresar del background. Los modelos de IA se descargan cifrados y llevan nombres propietarios para evitar plagio.

1

App inicia

El SDK envía tu API Key a nuestro servidor de licencias. Se valida el plan, verificaciones restantes y features habilitados.

2

Descarga de modelos

Si la licencia es válida, se descargan los modelos de IA cifrados con AES-256. Solo se almacenan en RAM — nunca en disco en claro.

3

App va a background y vuelve

Se re-valida automáticamente. Si fue revocada, el SDK se desactiva de inmediato.

Modo offline (grace period)

Si no hay conexión, el SDK funciona hasta 24h con la última validación exitosa. Después se desactiva hasta reconectar.

activación del SDK
// 1. Configurar licencia
final license = LicenseService(
  config: LicenseConfig(
    licenseServerUrl: 'https://api.veribitid.com',
    sdkApiKey: 'sk_live_aBcDeFgHiJkLmN...',
    gracePeriod: Duration(hours: 24),
    validateOnResume: true,
  ),
);

// 2. Validar al iniciar
final info = await license.validateLicense();
if (!info.isUsable) {
  // Licencia inválida — SDK bloqueado
  return;
}

// 3. Descargar modelos cifrados
license.downloadProgressStream.listen((p) {
  print('${p.statusMessage}');
});
await license.downloadModels();

// 4. Re-validar al volver del background
await license.validateOnResume();

Modelos de IA con nombres propietarios

Los modelos se distribuyen con nombres ofuscados y cifrado AES-256-GCM. Internamente usan tecnología de vanguardia, pero están protegidos contra ingeniería inversa y reproducción no autorizada.

Modelo Público ID Función Protección
VR Core Encoder vr-core-enc-v3 Generación de embeddings faciales de 128/512 dimensiones AES-256 + SHA-256
LV Sentinel lv-sentinel-v2 Detección de vida activa y anti-spoofing AES-256 + SHA-256
FD Detect fd-detect-v4 Localización y detección facial en tiempo real AES-256 + SHA-256
DR Extractor dr-extract-v2 OCR optimizado para documentos dominicanos AES-256 + SHA-256
🔐

Cifrado en tránsito y en reposo

Los modelos viajan cifrados desde nuestro servidor. Se descifran solo en memoria RAM para ejecución. Nunca tocan el disco del dispositivo en formato legible.

🛡️

Binding por dispositivo

La licencia se vincula a un fingerprint único del dispositivo. Un API Key no puede reutilizarse en dispositivos no autorizados.

🔄

Revocación en tiempo real

Si se detecta uso no autorizado, la licencia se revoca desde el servidor. El SDK se desactiva completamente y limpia los modelos de memoria.

Tus usuarios merecen privacidad real

La diferencia entre "procesamos datos de forma segura" y "los datos nunca salen del teléfono".

Aspecto
Nuestro SDK
Soluciones Cloud
Procesamiento biométrico
100% en dispositivo
Servidores remotos
Imágenes faciales
Solo RAM, nunca persisten
Almacenadas en cloud
Embeddings FaceNet
Generados y descartados localmente
Transmitidos a API externa
OCR de documentos
On-device, sin transmisión
Imágenes enviadas a cloud
Datos PII en logs
Cero PII en logs
Riesgo de exposición
Limpieza de memoria
Zero-fill automático post-sesión
Retención según política
Cumplimiento Ley 172-13 RD
Diseñado para cumplimiento
Depende del proveedor

Documentación técnica completa

API limpia y predecible. Todo tipado, todo documentado.

KycEngine

ASYNCinitialize()

Carga los modelos ML (FaceNet, liveness). Llamar una vez antes de usar el engine.

SYNCstartSession() → KycSession

Inicia una nueva sesión de verificación con UUID único. Limpia sesión anterior si existe.

ASYNCprocessDocumentFront(Uint8List) → DocumentData

Procesa la imagen del frente de la cédula. Ejecuta OCR on-device y retorna datos extraídos con niveles de confianza por campo.

ASYNCprocessDocumentBack(Uint8List) → MrzData

Procesa el reverso de la cédula. Extrae y valida la zona MRZ con checksums ICAO 9303. Cross-check automático contra datos OCR.

ASYNCprocessSelfie(Uint8List, {LivenessChallenge, Stream?}) → BiometricScores

Captura selfie con liveness detection activa. Genera embeddings FaceNet on-device y compara contra la foto del documento.

ASYNCvalidateWithJce() → bool

Valida contra la API de la JCE (requiere JceConfig con API Key del cliente). Reintentos automáticos con backoff exponencial.

ASYNCcomplete() → KycResult

Genera resultado final con veredicto (APPROVED / REJECTED / REVIEW / ERROR), scores biométricos detallados y timestamps.

STREAMstateStream → Stream<KycEngineState>

Stream reactivo del estado del proceso. Emite status, mensaje descriptivo y progreso (0.0 - 1.0) para actualizar la UI.

LivenessCameraProcessor

ASYNCstartLivenessDetection({Stream, LivenessChallengeType, Duration})

Consume el stream de cámara y ejecuta liveness detection en tiempo real. Soporte completo para formatos nativos de Android e iOS.

Parámetro Tipo Descripción
cameraStream Stream<CameraFrame> Stream de frames raw del plugin de cámara
challengeType LivenessChallengeType blink, turnLeft, turnRight, smile, nod
timeout Duration Tiempo máximo para completar el desafío (default: 15s)
STREAManalysisStream → Stream<LivenessFrameAnalysis>

Resultado de análisis por frame: detección facial, head pose, anti-spoofing, parpadeo, sonrisa.

CameraFrameConverter

ASYNCtoRgba(CameraFrame) → Uint8List

Convierte cualquier formato de cámara nativo a RGBA. Soporta YUV NV21 (Android), NV12 (iOS), BGRA8888 (iOS), JPEG.

ASYNCtoGrayscale(CameraFrame) → Uint8List

Conversión rápida a escala de grises. Para YUV, extrae directamente el plano Y — ideal para detección facial rápida.

ASYNCtoMlInput(CameraFrame, {targetWidth, targetHeight}) → Uint8List

Pipeline completo: convierte, rota, y redimensiona a las dimensiones exactas del modelo ML.

Formato Plataforma Planos Rendimiento
yuv420_nv21 Android Y + VU interleaved Rápido (nativo Android)
yuv420_nv12 iOS / Android Y + UV interleaved Rápido (nativo iOS)
bgra8888 iOS BGRA single plane Medio (4 bytes/px)
jpeg Ambas Comprimido Lento (decode)

LicenseService

ASYNCvalidateLicense() → LicenseInfo

Valida la API Key contra el servidor de licencias. Debe llamarse al iniciar la app.

ASYNCvalidateOnResume() → LicenseInfo

Re-valida la licencia al regresar del background. Diseñado para WidgetsBindingObserver.

ASYNCdownloadModels() → bool

Descarga los 4 modelos de IA cifrados. Solo funciona con licencia activa.

STREAMlicenseStream → Stream<LicenseInfo>

Stream reactivo del estado de licencia. Emite cambios cuando la licencia se valida, expira o revoca.

STREAMdownloadProgressStream → Stream<ModelDownloadProgress>

Progreso en tiempo real de la descarga de modelos. Ideal para mostrar barra de progreso al usuario.

Estado Significado SDK Operativo
active Licencia válida y verificada
gracePeriod Sin conexión, pero validada previamente (hasta 24h)
expired Licencia expirada — requiere renovación No
revoked Revocada por uso no autorizado No
invalid API Key incorrecta o malformada No
offline Sin conexión y sin validación previa No

Configuración

configuración completa
KycSdkConfig(
  // Térmica — controla calor del dispositivo
  thermalConfig: ThermalConfig(
    maxImageQuality: ImageQualityLevel.medium,
    processingStrategy: ProcessingStrategy.adaptive,
    frameProcessingIntervalMs: 100,
    maxAnalysisFps: 10,
    enableThermalThrottling: true,
    maxImageSizeBytes: 2 * 1024 * 1024,
  ),

  // Biométrica — umbrales de aceptación
  biometricThresholds: BiometricThresholds(
    faceMatchThreshold: 0.6,
    livenessThreshold: 0.85,
    faceQualityThreshold: 0.7,
  ),

  // JCE — opcional, requiere API Key del cliente
  jceConfig: JceConfig(
    baseUrl: 'https://api.jce.gob.do/v1',
    apiKey: 'CLIENT_API_KEY',
    timeout: Duration(seconds: 30),
    maxRetries: 3,
  ),

  // General
  locale: 'es',
  detectRootedDevice: true,
)

Planes que crecen contigo

Sin costos ocultos. Solo pagas por verificaciones completadas exitosamente.

Starter
$400 /mes
Hasta 500 verificaciones
  • SDK Flutter completo
  • OCR + MRZ + Biometría
  • Integración JCE incluida
  • UI customizable (básica)
  • Soporte email (48h)
  • $1.00 por excedente
Comenzar
Enterprise
Custom
Más 10,000 verificaciones
  • Todo de Business
  • White Label completo
  • Flujo de verificación personalizado
  • Soporte dedicado (4h SLA)
  • Gerente de cuenta
  • Excedente según negociación
Contactar

Pay As You Go

Sin compromiso mensual. $1.10 USD por verificación completa.

Tarifa mínima: $49/mes. Solo verificaciones exitosas.

¿Listo para integrar verificación segura en tu app?

Agenda una demo técnica y recibe acceso sandbox en 24 horas.

Solicitar Demo Técnica

Santo Domingo, República Dominicana · contacto@empresa.com