Blog

Cómo generar documentos personalizados con Templates y Variables en AllSign

Cómo generar documentos personalizados con Templates y Variables en AllSign Tienes un contrato que envías a 50 clientes al mes. Cada vez cambias el nombre, RFC, monto y fecha a mano. Lo copias, lo pegas, lo revisas, lo vuelves a revisar. ¿Y si pudieras subir ese contrato una sola vez y generar las 50 versiones personalizadas con un API call cada una? Eso son los Templates de AllSign. Cómo funciona (en 30 segundos) DOCX con variables {{ }} │ ▼ POST /v2/templates

A
AllSign Admin
· 5 min de lectura
Compartir

Cómo generar documentos personalizados con Templates y Variables en AllSign

Tienes un contrato que envías a 50 clientes al mes. Cada vez cambias el nombre, RFC, monto y fecha a mano. Lo copias, lo pegas, lo revisas, lo vuelves a revisar.

¿Y si pudieras subir ese contrato una sola vez y generar las 50 versiones personalizadas con un API call cada una?

Eso son los Templates de AllSign.


Cómo funciona (en 30 segundos)

  DOCX con variables {{ }}
         │
         ▼
  POST /v2/templates        ← subes el archivo una vez
         │
         ▼
  AllSign detecta variables  ← automático, no configuras nada
         │
         ▼
  POST /v2/documents         ← creas documentos con datos reales
         │
         ▼
  PDF generado + firmantes listos

Un template se sube una vez. Se usa mil veces.


Paso 1 — Prepara tu DOCX

Abre Word. Escribe tu contrato normal. Donde irían datos variables, usa doble llave:

La empresa {{ arrendador__nombre }}, con RFC {{ arrendador__rfc }},
con domicilio en {{ arrendador__domicilio }}, arrienda el inmueble
ubicado en {{ direccion_inmueble }} al C. {{ arrendatario__nombre }},
con RFC {{ arrendatario__rfc }}, por un monto mensual de
${{ monto_renta }} MXN, con vigencia de {{ vigencia_meses }} meses.

Firmado en {{ ciudad_firma }} el {{ fecha_firma }}.

La convención que hace la magia

El doble guion bajo (__) separa el rol del campo:

Variable en el DOCX Rol detectado Campo
arrendador__nombre Arrendador Nombre
arrendador__rfc Arrendador RFC
arrendatario__nombre Arrendatario Nombre
monto_renta (general) Monto Renta
fecha_firma (general) Fecha Firma

¿Por qué importa? Porque AllSign agrupa automáticamente las variables por rol. En el dashboard, cada firmante ve solo las variables que le corresponden. Y si tienes contactos en el CRM, se auto-llenan.

Las variables sin __ son generales del documento — no pertenecen a ningún firmante.

Inferencia automática de tipos

AllSign también infiere el tipo de input a partir del nombre:

Palabra en el nombre Tipo de input
fecha, nacimiento, vencimiento Date picker
monto, precio, salario, renta Input numérico con formato moneda
direccion, domicilio, descripcion Textarea multi-línea
numero, cantidad, plazo Input numérico
Cualquier otro Input de texto

No configuras nada. Solo nombra bien tus variables.


Paso 2 — Sube el Template

Un solo curl. Solo mandas el archivo y un nombre — AllSign hace el resto:

curl -X POST https://api.allsign.io/v2/templates/ \
  -H "Authorization: Bearer allsign_live_sk_TU_API_KEY" \
  -F "file=@./contrato_arrendamiento.docx" \
  -F "name=Contrato de arrendamiento" \
  -F "tags=legal,renta" \
  -F "category=contratos"

AllSign analiza el DOCX, detecta todas las {{ variables }} y te devuelve su configuración completa — tipos, labels y roles inferidos automáticamente:

Response (201):

{
  "id": "c8dcfe72-f07a-46f4-8d79-54d75685c66f",
  "name": "Contrato de arrendamiento",
  "originalFilename": "contrato_arrendamiento.docx",
  "fileType": "docx",
  "variables": [
    "arrendador__domicilio",
    "arrendador__nombre",
    "arrendador__rfc",
    "arrendatario__nombre",
    "arrendatario__rfc",
    "ciudad_firma",
    "direccion_inmueble",
    "fecha_firma",
    "monto_renta",
    "vigencia_meses"
  ],
  "variableConfig": [
    {
      "name": "arrendador__domicilio",
      "label": "Domicilio",
      "type": "textarea",
      "required": true,
      "role": "Arrendador"
    },
    {
      "name": "arrendador__nombre",
      "label": "Nombre",
      "type": "text",
      "required": true,
      "role": "Arrendador"
    },
    {
      "name": "arrendador__rfc",
      "label": "Rfc",
      "type": "text",
      "required": true,
      "role": "Arrendador"
    },
    {
      "name": "arrendatario__nombre",
      "label": "Nombre",
      "type": "text",
      "required": true,
      "role": "Arrendatario"
    },
    {
      "name": "arrendatario__rfc",
      "label": "Rfc",
      "type": "text",
      "required": true,
      "role": "Arrendatario"
    },
    {
      "name": "monto_renta",
      "label": "Monto Renta",
      "type": "currency",
      "required": true,
      "role": null
    },
    {
      "name": "fecha_firma",
      "label": "Fecha Firma",
      "type": "date",
      "required": true,
      "role": null
    }
  ],
  "tags": ["legal", "renta"],
  "category": "contratos",
  "aiEditable": true,
  "createdAt": "2026-04-13T19:15:51Z"
}

Subiste un .docx con texto plano y AllSign te devolvió un variableConfig completo. No configuraste nada. Mira cómo arrendador__domicilio se infirió como textarea y fecha_firma como date — todo por el nombre.

Guarda el id — lo necesitas para el siguiente paso.


Paso 3 — Crea un documento con datos reales

Ahora usas ese template para generar un documento personalizado. Envías el templateId, los valores de las variables y los firmantes:

curl -X POST "https://api.allsign.io/v2/documents?mode=async" \
  -H "Authorization: Bearer allsign_live_sk_TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "c8dcfe72-f07a-46f4-8d79-54d75685c66f",
    "templateValues": {
      "arrendador__nombre": "María López García",
      "arrendador__rfc": "LOPM800101ABC",
      "arrendador__domicilio": "Av. Reforma 250, Col. Juárez, CDMX",
      "arrendatario__nombre": "Juan Pérez Hernández",
      "arrendatario__rfc": "PEHJ900515XYZ",
      "direccion_inmueble": "Calle Durango 45, Col. Roma, CDMX",
      "monto_renta": "15,000.00",
      "vigencia_meses": "12",
      "ciudad_firma": "Ciudad de México",
      "fecha_firma": "13 de abril de 2026"
    },
    "participants": [
      {"name": "María López García", "email": "maria@tuempresa.com"},
      {"name": "Juan Pérez Hernández", "email": "juan@cliente.com"}
    ]
  }'

¿Qué pasa internamente?

  1. AllSign toma el DOCX original
  2. Sustituye cada {{ variable }} por el valor que enviaste
  3. Genera el PDF final
  4. Crea el documento con los firmantes asignados

Como la generación del PDF toma unos segundos, el modo async te devuelve de inmediato un workflowId y una URL para seguir el progreso:

Response (202):

{
  "status": "processing",
  "workflowId": "doc-create-715d9e01-5abd-4e65-bbaf-9be67f9512ca",
  "progressUrl": "/v2/documents/workflows/doc-create-715d9e01-.../progress"
}

Consulta el progreso

curl https://api.allsign.io/v2/documents/workflows/WORKFLOW_ID/status \
  -H "Authorization: Bearer allsign_live_sk_TU_API_KEY"

El response te da progreso en tiempo real:

{
  "status": "processing",
  "step": "relations",
  "progress": 65,
  "message": "Configurando acceso...",
  "documentId": "c2095713-0586-4bed-866a-c326c4b182a5",
  "creditsConsumed": null,
  "error": null
}

Haz polling cada 2-3 segundos. Cuando status sea completed y progress sea 100, tu documento está listo:

{
  "status": "completed",
  "step": "complete",
  "progress": 100,
  "message": "¡Documento listo!",
  "documentId": "c2095713-0586-4bed-866a-c326c4b182a5",
  "creditsConsumed": 0,
  "error": null
}

El documentId es lo que usas de aquí en adelante.


Paso 4 — Envía a firmar

Un solo call que envía las invitaciones por correo y activa el flujo de firma:

curl -X POST https://api.allsign.io/v2/documents/DOCUMENT_ID/invite-bulk \
  -H "Authorization: Bearer allsign_live_sk_TU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "participants": [
      {"name": "María López García", "email": "maria@tuempresa.com"},
      {"name": "Juan Pérez Hernández", "email": "juan@cliente.com"}
    ],
    "config": {
      "invitedByEmail": "tu@tuempresa.com",
      "invitedByName": "Tu Empresa"
    }
  }'

Response (200):

{
  "success": true,
  "message": "Processed 2 invitations via Temporal. Sent: 2, Failed: 0",
  "sentCount": 2,
  "failedCount": 0,
  "details": [
    {
      "participant": "maria@tuempresa.com",
      "success": true
    },
    {
      "participant": "juan@cliente.com",
      "success": true
    }
  ]
}

Cada firmante recibe un correo con un link seguro. Abren, revisan el documento y firman.

invite-bulk activa el flujo de firma internamente — no necesitas llamar a start-signing por separado.


Paso 5 — Consulta el estado

curl https://api.allsign.io/v2/documents/DOCUMENT_ID \
  -H "Authorization: Bearer allsign_live_sk_TU_API_KEY"

El estado del documento vive dentro de signersData:

{
  "id": "c2095713-0586-4bed-866a-c326c4b182a5",
  "name": "Contrato de arrendamiento.pdf",
  "signersData": {
    "status": "ESPERANDO_FIRMAS",
    "signatures": [
      {
        "status": "WAITING FOR SIGNATURE",
        "signer": {
          "email": "maria@tuempresa.com"
        }
      },
      {
        "status": "WAITING FOR SIGNATURE",
        "signer": {
          "email": "juan@cliente.com"
        }
      }
    ]
  }
}
signersData.status Qué significa
RECOLECTANDO_FIRMANTES Creado, configurando firmantes
ESPERANDO_FIRMAS Invitaciones enviadas, esperando
COMPLETADO Todos firmaron
ANULADO Cancelado
EXPIRADO Expiró sin completarse

El flujo completo en un vistazo

1. Prepara tu DOCX con {{ variables }}
2. POST /v2/templates                           ← sube una vez
3. POST /v2/documents?mode=async                 ← genera con datos reales
4. GET  /v2/documents/workflows/{id}/status      ← espera el PDF
5. POST /v2/documents/{id}/invite-bulk           ← envía a firmar
6. GET  /v2/documents/{id}                       ← consulta el estado

Del paso 2 en adelante, todo es automatizable. Un cron, un webhook, una integración con tu CRM — lo que necesites.


Tres cosas que hacen la diferencia

1. La convención rol__campo es tu mejor amiga

No es solo una convención de nombres — es lo que habilita el auto-agrupamiento por firmante, el auto-llenado desde contactos del CRM, y la asignación automática de variables en chains multi-documento.

2. Reutiliza, no dupliques

Un template se sube una vez y genera miles de documentos. Si necesitas una versión diferente del contrato, sube un template nuevo — no modifiques el existente que ya tiene documentos generados.

3. Webhooks para cerrar el loop

Configura un webhook en el evento document.completed para recibir una notificación cuando todos firmen. Así puedes disparar tu lógica post-firma automáticamente: actualizar tu CRM, enviar una confirmación, archivar el documento.


Importa los endpoints en Postman

Tenemos una especificación OpenAPI con los 71 endpoints públicos documentados, lista para importar:

https://developers.allsign.io/openapi-public.json

En Postman: Import → Upload Files → selecciona el JSON. Configura baseUrl como https://api.allsign.io/v2 y agrega tu API key como Bearer token.


Recursos

¿Listo para empezar con AllSign?

Firma electrónica avanzada con validez legal. Empieza en minutos.