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


POST/v2/templates

Subir template

Sube un archivo .docx o .pdf y crea un nuevo template. El backend:

  1. Valida que el archivo sea un DOCX o PDF válido (máx. 50 MB).
  2. Auto-detecta todas las variables {{ ... }} en el documento (solo DOCX).
  3. Infiere el tipo de cada variable (text, date, currency, etc.) a partir del nombre.
  4. Almacena el archivo original en S3 para reutilizarlo.
  5. Retorna la lista de variables detectadas con metadata.

El request es multipart/form-data, no JSON.

Form fields

  • Name
    file
    Type
    file
    Description

    Archivo .docx o .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

StatusCuándo ocurre
400 Bad RequestExtensión no soportada, archivo vacío, o > 50 MB
401 UnauthorizedAPI key inválida o sin scope document_write

GET/v2/templates

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 docx o pdf.

  • 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
}

GET/v2/templates/{id}

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

Errores

StatusCuándo ocurre
404 Not FoundEl 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:

VariableRol inferidoTipo de match
arrendador_nombreArrendadorPrefijo
nombre_clienteClienteSufijo
rfc_prestadorPrestadorSufijo
empleador_direccionEmpleadorPrefijo
monto_rentanullSin 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.

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.


POST/v2/templates/{id}/recompute-roles

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"

POST/v2/templates/backfill-roles

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"

PATCH/v2/templates/{id}

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, opcionalmente defaultValue, y role (inferido automáticamente al subir, puede ser null para variables generales).

Response — 200 OK

Devuelve el mismo payload que GET /v2/templates/{id}.

Errores

StatusCuándo ocurre
403 ForbiddenEl caller no es propietario del template
404 Not FoundEl template no existe

DELETE/v2/templates/{id}

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

StatusCuándo ocurre
403 ForbiddenEl caller no es propietario del template
404 Not FoundEl template no existe
409 ConflictEl 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
    }
  }
}

Was this page helpful?