Onboarding Digital
El endpoint de Onboarding Digital te permite crear flujos de onboarding completos que combinan plantilla de documento, asignación de variables por rol, verificación de identidad (KYC) y firma electrónica en un solo request.
A diferencia del Onboarding KYC que solo verifica identidad, el Onboarding Digital orquesta todo el ciclo de vida del documento: desde que el admin selecciona una plantilla y asigna variables a cada participante, hasta que todos firman y se genera el documento final.
Cada participante recibe su propia URL con un token unico. Al abrirla, ve un split-view donde llena sus variables asignadas y observa el documento actualizarse en tiempo real. Las variables marcadas como "idv" se extraen automaticamente del escaneo de identificacion.
Conceptos clave
- Participante: Una persona con un rol en el documento (ej: "Arrendador", "Arrendatario"). Cada uno recibe su propio flujo de onboarding.
- Variable source: Quien llena cada variable —
"signer"(el participante la escribe),"idv"(se extrae de su ID), o se define comofixed_variables(el admin la predefine). - Flujo por participante: Verificacion de identidad (opcional) -> Llenado de variables -> Revision -> Firma.
Crear onboarding digital
Crea un onboarding digital con todos sus participantes, variables y configuracion. Genera un token y URL unica por participante. Opcionalmente envia invitaciones por email.
Requiere API Key con scope document:write.
Request body
- Name
template_id- Type
- string
- Description
UUID de la plantilla DOCX a usar como base del documento. La plantilla debe tener variables
{'{{ }}'}detectadas.
- Name
participants- Type
- array
- Description
Lista de participantes con su rol, contacto y variables asignadas. Minimo 1 participante.
- Name
participants[].role- Type
- string
- Description
Nombre del rol del participante en el documento (ej:
"Arrendador","Prestador").
- Name
participants[].contact- Type
- object
- Description
Datos de contacto del participante.
- Name
participants[].contact.email- Type
- string
- Description
Email del participante. Se usa para la invitacion y para vincular con contactos existentes.
- Name
participants[].contact.name- Type
- string
- Description
Nombre del participante (para personalizar la invitacion).
- Name
participants[].contact.phone- Type
- string
- Description
Telefono del participante (para invitacion por WhatsApp).
- Name
participants[].variables- Type
- array
- Description
Variables de la plantilla asignadas a este participante.
- Name
participants[].variables[].name- Type
- string
- Description
Nombre de la variable en la plantilla (ej:
"nombre_arrendador"). Debe coincidir con un{'{{ variable }}'}en el DOCX.
- Name
participants[].variables[].source- Type
- string
- Description
Origen del valor:
"signer"(el participante lo escribe en el formulario) o"idv"(se extrae automaticamente del escaneo de ID).
- Name
participants[].variables[].idv_field- Type
- string
- Description
Campo de la identificacion a extraer. Requerido cuando
sourcees"idv". Valores:"full_name","curp","rfc","date_of_birth","address","document_number".
- Name
fixed_variables- Type
- object
- Description
Variables con valores fijos predefinidos por el admin. Clave = nombre de variable, valor = string. Estas no se muestran en el formulario del participante.
- Name
verification- Type
- object
- Description
Configuracion de verificacion de identidad. Aplica a todos los participantes.
- Name
verification.id_scan- Type
- boolean
- Description
Escaneo de INE (frente y reverso). Default:
true.
- Name
verification.passport_scan- Type
- boolean
- Description
Escaneo de pasaporte (alternativa a INE). Exclusivo con
id_scan. Default:false.
- Name
verification.document_scan- Type
- boolean
- Description
Clasificacion y validacion del documento con IA (GPT-4o). Default:
true.
- Name
verification.selfie- Type
- boolean
- Description
Captura de selfie para comparacion facial. Requiere
id_scanopassport_scan. Default:false.
- Name
verification.biometric_match- Type
- boolean
- Description
Comparacion biometrica IA (ArcFace) entre selfie e ID. Requiere
selfie. Default:false.
- Name
verification.liveness_detection- Type
- boolean
- Description
Deteccion de vida en la selfie. Requiere
selfie. Default:false.
- Name
verification.deep_fake_shield- Type
- boolean
- Description
Deteccion de identidades sinteticas (deepfakes). Requiere
selfie. Default:false.
- Name
verification.anti_spoof- Type
- boolean
- Description
Deteccion de ataques de presentacion (fotos de pantalla). Requiere
selfie. Default:false.
- Name
verification.otp_phone- Type
- boolean
- Description
Verificacion por codigo SMS o WhatsApp. Default:
true.
- Name
verification.name_confirm- Type
- boolean
- Description
El participante escribe su nombre legal para confirmar. Default:
false.
- Name
verification.video_firma- Type
- boolean
- Description
Grabacion de video con declaracion verbal. Default:
false.
- Name
signing- Type
- object
- Description
Configuracion de firma electronica.
- Name
signing.method- Type
- string
- Description
Metodo de firma:
"autografa"(firma dibujada),"fea"(e.firma SAT), o"both"(el firmante elige).
- Name
signing.biometric_capture- Type
- boolean
- Description
Foto de evidencia biometrica al momento de firmar. Default:
false.
- Name
send_invitations- Type
- boolean
- Description
Enviar invitaciones por email automaticamente al crear. Default:
true.
- Name
expires_in_hours- Type
- integer
- Description
Tiempo de expiracion en horas. Default:
72.
- Name
callback_url- Type
- string
- Description
URL para webhook cuando el onboarding se completa. Recibiras el evento
onboarding.digital.completed.
- Name
redirect_url- Type
- string
- Description
URL a la que se redirige al participante despues de firmar.
Request
curl -X POST "https://api.allsign.io/v2/onboarding/digital" \
-H "Authorization: Bearer ALLSIGN_LIVE_SK" \
-H "Content-Type: application/json" \
-d '{
"template_id": "TEMPLATE_UUID",
"participants": [
{
"role": "Arrendador",
"contact": {
"email": "juan@example.com",
"name": "Juan Pérez",
"phone": "+525512345678"
},
"variables": [
{ "name": "nombre_arrendador", "source": "idv", "idv_field": "full_name" },
{ "name": "rfc_arrendador", "source": "idv", "idv_field": "rfc" },
{ "name": "domicilio_arrendador", "source": "signer" }
]
},
{
"role": "Arrendatario",
"contact": {
"email": "maria@example.com",
"name": "María García"
},
"variables": [
{ "name": "nombre_arrendatario", "source": "idv", "idv_field": "full_name" },
{ "name": "rfc_arrendatario", "source": "signer" },
{ "name": "curp_arrendatario", "source": "idv", "idv_field": "curp" },
{ "name": "domicilio_arrendatario", "source": "signer" }
]
}
],
"fixed_variables": {
"domicilio_inmueble": "Av. Reforma 123, Col. Juárez, CDMX",
"monto_renta": "15000",
"deposito": "30000",
"fecha_inicio": "2026-05-01",
"duracion_meses": "12"
},
"verification": {
"id_scan": true,
"document_scan": true,
"selfie": true,
"biometric_match": true,
"otp_phone": true
},
"signing": {
"method": "autografa",
"biometric_capture": true
},
"send_invitations": true,
"expires_in_hours": 72
}'
Response
Response (201)
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "pending",
"template": {
"id": "TEMPLATE_UUID",
"name": "Contrato de Arrendamiento"
},
"participants": [
{
"id": "p-001",
"role": "Arrendador",
"email": "juan@example.com",
"name": "Juan Pérez",
"token": "tok_abc123def456",
"url": "https://app.allsign.io/onboarding/tok_abc123def456",
"status": "pending",
"variables_count": 3,
"variables_source": { "idv": 2, "signer": 1 }
},
{
"id": "p-002",
"role": "Arrendatario",
"email": "maria@example.com",
"name": "María García",
"token": "tok_ghi789jkl012",
"url": "https://app.allsign.io/onboarding/tok_ghi789jkl012",
"status": "pending",
"variables_count": 4,
"variables_source": { "idv": 2, "signer": 2 }
}
],
"fixed_variables_count": 5,
"total_variables": 12,
"document_id": null,
"verification_summary": {
"id_scan": true,
"selfie": true,
"biometric_match": true,
"otp_phone": true
},
"signing_method": "autografa",
"expires_at": "2026-04-06T12:00:00Z",
"created_at": "2026-04-03T12:00:00Z"
}
El campo document_id es null al crear. El documento final se genera automaticamente cuando todos los participantes completan sus variables y firman. En ese momento, document_id se actualiza y se dispara el webhook onboarding.digital.completed.
Cada participante tiene su propia URL y token. El orden del flujo por participante es: Verificacion de identidad (si configurado) -> Llenado de variables (split-view con preview del documento) -> Revision -> Firma electronica. Los participantes pueden completar sus flujos en paralelo e independientemente.
Consultar estado
Obtiene el estado actual del onboarding digital, incluyendo el progreso de cada participante. Requiere API Key con scope document:read.
Path parameters
- Name
id- Type
- string
- Description
UUID del onboarding digital.
Response (200)
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "in_progress",
"template": {
"id": "TEMPLATE_UUID",
"name": "Contrato de Arrendamiento"
},
"participants": [
{
"id": "p-001",
"role": "Arrendador",
"email": "juan@example.com",
"status": "variables_submitted",
"identity_verified": true,
"variables_filled": 3,
"variables_total": 3,
"signed": false,
"completed_at": null
},
{
"id": "p-002",
"role": "Arrendatario",
"email": "maria@example.com",
"status": "verifying_identity",
"identity_verified": false,
"variables_filled": 0,
"variables_total": 4,
"signed": false,
"completed_at": null
}
],
"document_id": null,
"created_at": "2026-04-03T12:00:00Z"
}
Status del participante
| Status | Descripcion |
|---|---|
pending | Invitacion enviada, aun no abre el link |
verifying_identity | Completando pasos de verificacion de ID |
identity_verified | Identidad verificada, aun no llena variables |
filling_variables | Llenando variables en el formulario |
variables_submitted | Variables completadas, listo para firmar |
signing | En proceso de firma |
completed | Firmo exitosamente |
expired | Token expirado sin completar |
Status del onboarding
| Status | Descripcion |
|---|---|
pending | Creado, ningun participante ha iniciado |
in_progress | Al menos un participante ha iniciado |
awaiting_signatures | Todos completaron variables, esperando firmas |
completed | Todos firmaron, documento generado |
expired | Expiro sin completar |
Actualizar variables
El participante envia los valores de sus variables asignadas. Este endpoint es publico — usa el token del participante para autenticacion.
Cada vez que se envian variables, se genera un preview actualizado del documento y se emite un evento SSE preview_updated para actualizar la vista en tiempo real.
Request body
- Name
token- Type
- string
- Description
Token del participante.
- Name
variables- Type
- object
- Description
Diccionario de variables con sus valores. Clave = nombre de la variable, valor = string.
- Name
partial- Type
- boolean
- Description
Si es
true, se guardan las variables sin validar que esten todas completas. Util para auto-guardado parcial. Default:false.
Request
curl -X POST "https://api.allsign.io/v2/onboarding/digital/ONBOARDING_ID/variables" \
-H "Content-Type: application/json" \
-d '{
"token": "tok_abc123def456",
"variables": {
"domicilio_arrendador": "Av. Insurgentes Sur 1234, Col. Del Valle, CDMX",
"rfc_arrendador": "PERJ850101XX1"
},
"partial": true
}'
Response (200)
{
"success": true,
"variables_filled": 3,
"variables_total": 3,
"all_complete": true,
"preview_url": "https://api.allsign.io/v2/onboarding/digital/ONBOARDING_ID/preview?token=tok_abc123def456"
}
El frontend del participante recibe un evento SSE preview_updated cada vez que se envian variables (parciales o completas). Esto permite que el split-view actualice el documento en tiempo real mientras el participante escribe.
Preview del documento
Genera un PDF preview con las variables llenadas hasta el momento. Las variables pendientes se muestran como placeholders resaltados en amarillo. Este endpoint es publico — usa el token del participante.
Query parameters
- Name
token- Type
- string
- Description
Token del participante.
- Name
format- Type
- string
- Description
Formato de respuesta:
"pdf"(binary) o"url"(URL pre-firmada de S3). Default:"url".
Response (200) — format=url
{
"preview_url": "https://s3.amazonaws.com/...preview.pdf?X-Amz-Signature=...",
"variables_filled": 8,
"variables_total": 12,
"expires_in": 3600
}
La URL del preview expira en 1 hora. El frontend debe solicitar una nueva URL al recibir el evento SSE preview_updated.
Completar participante
Marca al participante como listo para firmar. Valida que todas sus variables esten completas. Si es el ultimo participante en completar, dispara la generacion del documento final y el flujo de firma.
Request body
- Name
token- Type
- string
- Description
Token del participante.
Response (200)
{
"success": true,
"participant_status": "variables_submitted",
"all_participants_ready": false,
"next_step": "awaiting_other_participants",
"message": "Tus datos han sido registrados. Serás notificado cuando todos los participantes completen su información para proceder a la firma."
}
Response (200) — ultimo participante
{
"success": true,
"participant_status": "variables_submitted",
"all_participants_ready": true,
"next_step": "signing",
"document_id": "DOC_UUID",
"signing_url": "https://app.allsign.io/sign/SIGN_TOKEN",
"message": "Todos los participantes completaron sus datos. El documento ha sido generado. Procede a firmar."
}
Cuando all_participants_ready es true, el backend: (1) fusiona todas las variables (fixed + signer + IDV), (2) renderiza el template Jinja2 con los valores finales, (3) convierte a PDF, (4) crea el documento en la base de datos, (5) inicializa los signature states para cada participante. Todo esto se ejecuta como un Temporal workflow con reintentos automaticos.
Webhooks
AllSign envia webhooks a tu callback_url en los siguientes eventos:
onboarding.digital.created
Se dispara cuando se crea el onboarding digital.
Webhook payload
{
"event": "onboarding.digital.created",
"onboarding_id": "uuid",
"template_name": "Contrato de Arrendamiento",
"participants_count": 2,
"created_at": "2026-04-03T12:00:00Z"
}
participant.identity_verified
Se dispara cuando un participante completa la verificacion de identidad.
Webhook payload
{
"event": "participant.identity_verified",
"onboarding_id": "uuid",
"participant_id": "p-001",
"role": "Arrendador",
"email": "juan@example.com",
"extracted_data": {
"full_name": "Juan Carlos Pérez López",
"curp": "PELJ850101HDFRPN09",
"document_type": "ine"
},
"verified_at": "2026-04-03T14:30:00Z"
}
participant.variables_submitted
Se dispara cuando un participante completa todas sus variables.
Webhook payload
{
"event": "participant.variables_submitted",
"onboarding_id": "uuid",
"participant_id": "p-001",
"role": "Arrendador",
"variables_count": 3,
"submitted_at": "2026-04-03T15:00:00Z"
}
participant.signed
Se dispara cuando un participante firma el documento.
Webhook payload
{
"event": "participant.signed",
"onboarding_id": "uuid",
"participant_id": "p-001",
"role": "Arrendador",
"signing_method": "autografa",
"signed_at": "2026-04-03T16:00:00Z"
}
onboarding.digital.completed
Se dispara cuando todos los participantes firman y el documento final se genera.
Webhook payload
{
"event": "onboarding.digital.completed",
"onboarding_id": "uuid",
"document_id": "DOC_UUID",
"template_name": "Contrato de Arrendamiento",
"participants": [
{
"role": "Arrendador",
"email": "juan@example.com",
"signed_at": "2026-04-03T16:00:00Z"
},
{
"role": "Arrendatario",
"email": "maria@example.com",
"signed_at": "2026-04-03T17:30:00Z"
}
],
"completed_at": "2026-04-03T17:30:00Z"
}
Flujo completo
El flujo de Onboarding Digital orquesta multiples participantes de forma independiente y paralela:
ADMIN (tu sistema)
│
├── POST /v2/onboarding/digital
│ (template + participantes + verificacion + firma)
│
├── Sistema crea tokens unicos por participante
│ y envia invitaciones por email
│
└── Cada participante recibe su URL unica
PARTICIPANTE A (Arrendador) PARTICIPANTE B (Arrendatario)
│ │
├── Abre URL ├── Abre URL
│ │
├── Verificacion de identidad ├── Verificacion de identidad
│ ├── Escaneo de INE │ ├── Escaneo de INE
│ ├── Selfie biometrica │ ├── Selfie biometrica
│ └── OTP por SMS │ └── OTP por SMS
│ │
├── Llenado de variables ├── Llenado de variables
│ (split-view: form + preview) │ (split-view: form + preview)
│ Variables IDV se pre-llenan │ Variables IDV se pre-llenan
│ │
├── Revision del documento ├── Revision del documento
│ │
└── Firma electronica └── Firma electronica
│
▼
Todos firmaron?
│
├── Si: Temporal workflow genera PDF final
│ -> documento creado
│ -> webhook onboarding.digital.completed
│
└── No: Espera participantes pendientes
-> dashboard muestra progreso en tiempo real
Ejemplo: Polling del estado del onboarding
JavaScript — Monitorear progreso
const pollOnboarding = async (onboardingId) => {
while (true) {
const response = await fetch(
`https://api.allsign.io/v2/onboarding/digital/${onboardingId}`,
{ headers: { Authorization: 'Bearer ALLSIGN_LIVE_SK' } }
)
const data = await response.json()
console.log(`Status: ${data.status}`)
data.participants.forEach((p) => {
console.log(` ${p.role}: ${p.status} (${p.variables_filled}/${p.variables_total} vars)`)
})
if (data.status === 'completed') {
console.log('Documento generado:', data.document_id)
return data
}
await new Promise((r) => setTimeout(r, 5000))
}
}
await pollOnboarding('ONBOARDING_ID')
Para monitoreo en tiempo real sin polling, usa el endpoint SSE GET /v2/sse/stream?token=SSE_TOKEN que emite eventos conforme los participantes avanzan en su flujo.

