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.

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 como fixed_variables (el admin la predefine).
  • Flujo por participante: Verificacion de identidad (opcional) -> Llenado de variables -> Revision -> Firma.

POST/v2/onboarding/digital

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 source es "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_scan o passport_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

POST
/v2/onboarding/digital
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"
}

GET/v2/onboarding/digital/{id}

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

StatusDescripcion
pendingInvitacion enviada, aun no abre el link
verifying_identityCompletando pasos de verificacion de ID
identity_verifiedIdentidad verificada, aun no llena variables
filling_variablesLlenando variables en el formulario
variables_submittedVariables completadas, listo para firmar
signingEn proceso de firma
completedFirmo exitosamente
expiredToken expirado sin completar

Status del onboarding

StatusDescripcion
pendingCreado, ningun participante ha iniciado
in_progressAl menos un participante ha iniciado
awaiting_signaturesTodos completaron variables, esperando firmas
completedTodos firmaron, documento generado
expiredExpiro sin completar

POST/v2/onboarding/digital/{id}/variables

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

POST
/v2/onboarding/digital/{id}/variables
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"
}

GET/v2/onboarding/digital/{id}/preview

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
}

POST/v2/onboarding/digital/{id}/complete

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."
}

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')

Was this page helpful?