Templates
Los endpoints de Templates te permiten subir archivos .docx (o .pdf) reutilizables que contienen variables tipo Jinja2 ({{ nombre_cliente }}). AllSign detecta automáticamente esas variables, infiere su tipo, y las deja listas para que las uses al crear documentos individuales o chains (paquetes multi-documento).
Los templates son la fuente del flujo "documento desde plantilla" y son obligatorios cuando creas un Chain — cada documento del chain referencia un templateId.
Subir template
Sube un archivo .docx o .pdf y crea un nuevo template. El backend:
- Valida que el archivo sea un DOCX o PDF válido (máx. 50 MB).
- Auto-detecta todas las variables
{{ ... }}en el documento (solo DOCX). - Infiere el tipo de cada variable (text, date, currency, etc.) a partir del nombre.
- Almacena el archivo original en S3 para reutilizarlo.
- Retorna la lista de variables detectadas con metadata.
El request es multipart/form-data, no JSON.
Form fields
- Name
file- Type
- file
- Description
Archivo
.docxo.pdf. Tamaño máximo: 50 MB. Solo se aceptan estas dos extensiones.
- Name
name- Type
- string
- Description
Nombre visible del template (1–255 caracteres).
- Name
description- Type
- string
- Description
Descripción opcional.
- Name
tags- Type
- string
- Description
Tags separados por coma. Ejemplo:
legal,nda,ventas.
- Name
category- Type
- string
- Description
Categoría libre para organizar templates.
- Name
aiEditable- Type
- boolean
- Description
Si
true(default), el template puede editarse con el endpoint de AI edit.
Response — 201 Created
Response (201)
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Contrato de arrendamiento",
"description": null,
"originalFilename": "contrato_arrendamiento.docx",
"fileType": "docx",
"variables": ["nombre_arrendador", "nombre_arrendatario", "monto_renta"],
"variableConfig": [
{ "name": "nombre_arrendador", "label": "Nombre Arrendador", "type": "text", "required": true, "role": "Arrendador" },
{ "name": "nombre_arrendatario", "label": "Nombre Arrendatario", "type": "text", "required": true, "role": "Arrendatario" },
{ "name": "monto_renta", "label": "Monto Renta", "type": "currency", "required": true, "role": null }
],
"tags": ["legal", "renta"],
"category": "contratos",
"aiEditable": true,
"createdAt": "2026-04-07T20:00:00Z"
}
curl — subir template
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"
Errores
| Status | Cuándo ocurre |
|---|---|
400 Bad Request | Extensión no soportada, archivo vacío, o > 50 MB |
401 Unauthorized | API key inválida o sin scope document_write |
Listar templates
Devuelve todos los templates activos del usuario u organización autenticados. Soporta filtros por tipo de archivo, tags, categoría y búsqueda de texto.
Query parameters
- Name
fileType- Type
- string
- Description
Filtra por
docxopdf.
- Name
tags- Type
- string
- Description
Tags separados por coma. Coincide si el template tiene al menos uno de los tags listados.
- Name
category- Type
- string
- Description
Filtra por categoría exacta.
- Name
q- Type
- string
- Description
Búsqueda de texto sobre nombre y descripción.
Response — 200 OK
Response (200)
{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Contrato de arrendamiento",
"fileType": "docx",
"tags": ["legal", "renta"],
"category": "contratos",
"usageCount": 12,
"lastUsedAt": "2026-04-05T15:30:00Z",
"createdAt": "2026-03-01T10:00:00Z"
}
],
"total": 1
}
Obtener template
Devuelve el detalle completo de un template, incluyendo variables, variableConfig, testDataSets y metadata de uso.
Path parameters
- Name
id- Type
- string
- Description
UUID del template.
Response — 200 OK
Response (200)
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Contrato de arrendamiento",
"description": null,
"originalFilename": "contrato_arrendamiento.docx",
"fileType": "docx",
"variables": ["nombre_arrendador", "nombre_arrendatario", "monto_renta"],
"variableConfig": [
{ "name": "nombre_arrendador", "label": "Nombre Arrendador", "type": "text", "required": true, "role": "Arrendador" }
],
"tags": ["legal", "renta"],
"category": "contratos",
"aiEditable": true,
"usageCount": 12,
"lastUsedAt": "2026-04-05T15:30:00Z",
"currentVersion": 1,
"testDataSets": [],
"createdAt": "2026-03-01T10:00:00Z",
"updatedAt": "2026-03-01T10:00:00Z"
}
Para obtener únicamente la lista de variables (sin el resto del detalle), usa GET /v2/templates/{id}/variables.
Errores
| Status | Cuándo ocurre |
|---|---|
404 Not Found | El template no existe o no pertenece al caller |
Inferencia de roles
Al subir un template DOCX, AllSign analiza los nombres de las variables para inferir automáticamente un rol de firmante por cada variable. Esto permite agrupar variables por rol en el dashboard y habilitar el auto-llenado desde contactos del CRM.
La inferencia usa tanto prefijos como sufijos del nombre de la variable:
| Variable | Rol inferido | Tipo de match |
|---|---|---|
arrendador_nombre | Arrendador | Prefijo |
nombre_cliente | Cliente | Sufijo |
rfc_prestador | Prestador | Sufijo |
empleador_direccion | Empleador | Prefijo |
monto_renta | null | Sin rol (variable general) |
Roles soportados
Arrendador, Arrendatario, Comprador, Vendedor, Empleado, Empleador, Cliente, Prestador, Proveedor, Testigo, Apoderado, Representante, Fiador, Avalista, Acreedor, Deudor, Mandante, Mandatario, Socio, Garante.
El campo role en variableConfig es null cuando la variable no corresponde a ningún rol reconocido. Estas variables se consideran "generales" del documento (ej. monto_renta, fecha_contrato).
Auto-llenado con contactos
Cuando un template tiene variables con roles inferidos, el dashboard permite seleccionar un contacto del CRM para cada rol. Las variables se auto-llenan usando los customFields del contacto seleccionado, comparando por nombre exacto de variable.
Por ejemplo, si el contacto tiene customFields: { "arrendador_nombre": "Juan Pérez" }, la variable arrendador_nombre se llena automáticamente al seleccionar ese contacto para el rol "Arrendador".
Los customFields se persisten automáticamente cada vez que un firmante llena variables en un Chain, creando un ciclo de enriquecimiento progresivo.
Recomputar roles
Re-ejecuta la inferencia de roles sobre el variableConfig de un template existente. Esto es necesario para templates que se subieron antes de que la detección de roles estuviera habilitada.
Path parameters
- Name
id- Type
- string
- Description
UUID del template.
Response — 200 OK
Response (200)
{
"updated": 1,
"variableConfig": [
{ "name": "nombre_arrendador", "label": "Nombre Arrendador", "type": "text", "required": true, "role": "Arrendador" },
{ "name": "monto_renta", "label": "Monto Renta", "type": "currency", "required": true, "role": null }
]
}
curl
curl -X POST https://api.allsign.io/v2/templates/550e8400-e29b-41d4-a716-446655440000/recompute-roles \
-H "Authorization: Bearer ALLSIGN_LIVE_SK"
El dashboard ejecuta este endpoint automáticamente al abrir un template que no tiene roles inferidos.
Backfill de roles
Re-ejecuta la inferencia de roles sobre todos los templates activos del tenant. Operación masiva para migrar templates existentes.
Response — 200 OK
Response (200)
{
"updated": 15
}
curl
curl -X POST https://api.allsign.io/v2/templates/backfill-roles \
-H "Authorization: Bearer ALLSIGN_LIVE_SK"
Actualizar template
Actualiza la metadata editable de un template: nombre, descripción, tags, categoría, flag aiEditable y variableConfig. No reemplaza el archivo subido — para eso usa POST /v2/templates/{id}/duplicate y vuelve a subir.
Request body
- Name
name- Type
- string
- Description
Nuevo nombre visible.
- Name
description- Type
- string
- Description
Nueva descripción.
- Name
tags- Type
- array
- Description
Lista de tags (reemplaza la existente).
- Name
category- Type
- string
- Description
Nueva categoría.
- Name
aiEditable- Type
- boolean
- Description
Habilita o deshabilita la edición con AI.
- Name
variableConfig- Type
- array
- Description
Configuración por variable. Cada item incluye
name,label,type,required, opcionalmentedefaultValue, yrole(inferido automáticamente al subir, puede sernullpara variables generales).
Response — 200 OK
Devuelve el mismo payload que GET /v2/templates/{id}.
Errores
| Status | Cuándo ocurre |
|---|---|
403 Forbidden | El caller no es propietario del template |
404 Not Found | El template no existe |
Eliminar template
Elimina un template. Por defecto realiza un soft-delete (marca el template inactivo y conserva el archivo en S3 para auditoría). Pasa ?hard=true para eliminar de forma permanente la fila y el objeto S3.
La eliminación se rechaza con 409 Conflict si el template está en uso por documentos o chains activos. Archiva o completa esos primero.
Path parameters
- Name
id- Type
- string
- Description
UUID del template.
Query parameters
- Name
hard- Type
- boolean
- Description
Si es
true, elimina permanentemente la fila y el objeto S3. Default:false.
Response — 200 OK
Response (200)
{
"success": true,
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Contrato de arrendamiento",
"message": "Template 'Contrato de arrendamiento' archived.",
"softDelete": true,
"s3Deleted": false,
"inUseBy": {
"documents": 0,
"chains": 0
}
}
Errores
| Status | Cuándo ocurre |
|---|---|
403 Forbidden | El caller no es propietario del template |
404 Not Found | El template no existe |
409 Conflict | El template está en uso por documentos o chains. La respuesta incluye inUseBy.documents y inUseBy.chains |
Response (409) — Template en uso
{
"detail": {
"code": "TEMPLATE_IN_USE",
"message": "Template is referenced by 2 active document(s) and 1 active chain(s).",
"inUseBy": {
"documents": 2,
"chains": 1
}
}
}

