Plataforma DANAsign – Guía de uso de la API REST para firma de documentos
DANAsign es una plataforma de firma digital de documentos desarrollada por DANAconnect, que permite crear plantillas de firma electrónica o digital y realizar envíos masivos o de persona a persona.
Incluye endpoints REST para integraciones seguras y automatizadas, orientadas a flujos de documentos, gestión de contactos y procesos de firma.
Esta guía documenta los principales endpoints REST, junto con ejemplos de uso, encabezados, cuerpos de solicitud y posibles respuestas.
1. Generar el API Token desde la interfaz de la plataforma DANAsign
Antes de realizar peticiones a la API, debe generarse un API Token en la interfaz administrativa de DANAsign. Este token se empleará para autenticar todas las solicitudes provenientes de integraciones externas.
Pasos para generar un token en la plataforma DANAsign
- Inicie sesión en DANAsign utilizando un usuario con rol Administrador.
- En el menú lateral, seleccione Configuración > API Tokens.
- Haga clic en Crear nuevo token.
- Asigne un nombre descriptivo, por ejemplo:
Integración CRM. - Seleccione los permisos o scopes requeridos:
contacts:write— creación y actualización de contactos.documents:write— creación de documentos.documents:read— lectura y consulta de documentos.
- Guarde el token y copie el valor generado.
- Incluya el token en los encabezados de las peticiones API.

2. Autenticación
La autenticación puede realizarse directamente mediante el token de API, sin necesidad de credenciales de usuario, o bien creando sesiones temporales desde dicho token.
2.1 Crear sesión desde un API Token
Crea una sesión de usuario utilizando un token de API válido.
Endpoint
POST {CLIENT_SERVER_URL}/api/tokens/session
Header: x-danassign-api-key: <API_TOKEN>
Respuesta exitosa
{
"sessionToken": "r:...",
"userId": "...",
"scopes": ["contacts:write", ...],
"token": { ... }
}
2.2 Consultar el token actual
Permite verificar la validez y permisos asociados al token activo.
Endpoint
GET {CLIENT_SERVER_URL}/api/tokens/whoami
Header: x-danassign-api-key: <API_TOKEN>
Respuesta
Devuelve información del usuario autenticado y los permisos asociados a su token.
3. Gestión de Contactos
Los endpoints de contactos permiten registrar y mantener información de los firmantes.
Se requiere el permiso contacts:write en el API Token o un X-Parse-Session-Token válido.
3.1 Crear un contacto individual
Crea un nuevo contacto dentro de la base de datos de DANAsign.
Endpoint
POST {CLIENT_SERVER_URL}/api/1.0/contacts
Encabezados
Content-Type: application/json
x-api-token: <API_TOKEN>
Cuerpo de la solicitud
{
"name": "Laura Test",
"email": "laura@example.com",
"phone": "555-1234"
}
Campos requeridos
Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
name | string | Sí | Nombre del contacto. |
string | Sí | Dirección de correo electrónico. | |
phone | string | No | Número telefónico del contacto. |
Respuesta (201 Created)
{
"data": {
"objectId": "...",
"Name": "Laura Test",
"Email": "laura@example.com"
}
}
3.2 Carga masiva de contactos
Permite registrar múltiples contactos en una única petición.
Endpoint
POST {CLIENT_SERVER_URL}/api/1.0/contacts/batch
Encabezados
Content-Type: application/json
x-api-token: <API_TOKEN>
Cuerpo de la solicitud
{
"contacts": [
{ "Name": "Ana Lote", "Email": "ana.lote@example.com" },
{ "Name": "Luis Lote", "Email": "luis.lote@example.com", "Phone": "555-0002" }
]
}
Campos requeridos dentro de “contacts”
Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
Name | string | Sí | Nombre completo del contacto. |
string | Sí | Correo electrónico válido. | |
Phone | string | No | Teléfono de contacto. |
Respuesta
{ "data": { "success": 2, "failed": 0 } }
3.3 Listar contactos
Permite recuperar los contactos creados por el usuario autenticado. Este endpoint admite paginación y búsqueda parcial por nombre o correo electrónico.
Endpoint
GET {CLIENT_SERVER_URL}/api/1.0/contacts?limit=20&skip=0&search=ana
Encabezados
x-api-token: <API_TOKEN>
Parámetros de consulta
Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
limit | integer | No | Número máximo de resultados por página. Rango permitido: 1–100. Valor por defecto: 20. |
skip | integer | No | Desplazamiento inicial para la paginación. Valor por defecto: 0. |
search | string | No | Cadena de texto para búsqueda parcial por nombre o correo electrónico. No distingue mayúsculas/minúsculas. |
Ejemplo de solicitud
curl "http://localhost:8080/api/1.0/contacts?limit=20&skip=0&search=ana" \
-H "x-api-token: TU_TOKEN"
Respuesta exitosa
{
"data": [
{
"objectId": "mKJ82GH1",
"Name": "Ana López",
"Email": "ana.lopez@example.com",
"Phone": "555-1234",
"createdAt": "2025-03-10T12:34:56.789Z",
"updatedAt": "2025-03-11T09:15:00.000Z"
}
],
"pagination": {
"limit": 20,
"skip": 0,
"total": 1,
"hasMore": false
}
}
Códigos de respuesta
Código | Descripción |
|---|---|
200 | Solicitud exitosa. Devuelve lista de contactos. |
400 | Parámetros inválidos (por ejemplo, |
403 | Permiso insuficiente ( |
405 | Token inválido o ausente. |
4. Gestión de Documentos (/api/1.0)
Los endpoints de documentos permiten crear, listar y consultar documentos de firma.
Se requiere un token con permisos documents:read y/o documents:write.
4.1 Listar documentos por estado
Obtiene una lista de documentos filtrados por su estado actual.
Endpoint
GET {CLIENT_SERVER_URL}/api/1.0/documentlist/{status}?limit=20&skip=0
Header: x-api-token: <API_TOKEN>
Parámetros disponibles
Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
status | string | Sí | Estado de los documentos. Valores posibles: |
limit | integer | No | Límite de resultados (por defecto 20). |
skip | integer | No | Desplazamiento para paginación. |
Respuesta
[
{
"documentId": "...",
"title": "Contrato X",
"status": "completed",
"createdAt": "2025-03-10T12:34:56.789Z",
"updatedAt": "2025-03-12T08:15:00.000Z"
}
]
4.2 Crear un documento desde un archivo PDF
Crea un documento para firma a partir de un archivo PDF codificado en Base64.
Endpoint
POST {CLIENT_SERVER_URL}/api/1.0/createdocument
Encabezados
Content-Type: application/json
x-api-token: <API_TOKEN>
Requisitos
- Permiso
documents:writeen el token. - Archivo PDF codificado en Base64.
- Al menos un firmante con su rol y posición definidos.
Cuerpo de ejemplo
{
"file": "<PDF_EN_BASE64>",
"filename": "contrato.pdf",
"title": "Contrato de Servicios",
"signers": [
{ "role": "Role 1", "name": "Ana Perez", "email": "ana@example.com" },
{ "role": "Role 2", "name": "Juan Gomez", "email": "juang@example.com" }
],
"placeholders": [
{
"role": "Role 1",
"widgets": [
{ "type": "signature", "page": 1, "x": 320, "y": 560, "w": 140, "h": 35 }
]
},
{
"role": "Role 2",
"widgets": [
{ "type": "signature", "page": 1, "x": 350, "y": 590, "w": 170, "h": 40 }
]
}
],
"prefill": [
{
"type": "textbox",
"page": 1,
"x": 150,
"y": 150,
"w": 200,
"h": 20,
"options": { "name": "Empresa responsable", "response": "ACME S.A." }
}
],
"settings": {
"sendInOrder": true,
"automaticReminders": false,
"remindOnceInEvery": 5,
"timeToCompleteDays": 15,
"requestSubject": "Firma requerida: {{document_title}}",
"requestBody": "Hola {{receiver_name}}, revisa y firma {{document_title}}.",
"bcc": [{ "email": "legal@example.com", "name": "Equipo Legal" }]
},
"metadata": {
"externalId": "DOC-2025-001",
"tags": ["ventas", "NDA"]
}
}
Campos requeridos
Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
file | string (Base64) | Sí | PDF codificado. |
filename | string | Sí | Nombre del archivo. |
title | string | Sí | Título del documento. |
signers | array | Sí | Lista de firmantes, cada uno con |
placeholders | array | Sí | Coordenadas y widgets de firma. |
Respuesta exitosa
{
"documentId": "lHqHh3zQ9X",
"status": "sent",
"sentAt": "2025-03-18T08:25:33.123Z",
"expiresAt": "2025-03-28T08:25:33.123Z"
}
Códigos de error
Código | Descripción |
|---|---|
400 | Validación incorrecta: archivo vacío o datos incompletos. |
403 | Permisos insuficientes ( |
404 | Contacto no encontrado o inválido. |
405 | Token inválido o ausente. |
4.3 Crear un documento desde una plantilla existente
Permite generar un documento a partir de una plantilla configurada previamente en la plataforma.
Endpoint
POST {CLIENT_SERVER_URL}/api/1.0/createdocument/<TEMPLATE_ID>
Encabezados
Content-Type: application/json
x-api-token: <API_TOKEN>
Ejemplo de cuerpo
{
"signers": [
{ "role": "Cliente", "name": "Ana Pérez", "email": "ana@example.com" },
{ "role": "Vendedor", "name": "Ventas", "email": "ventas@example.com" }
],
"defaults": [
{ "name": "email", "default": "ana@example.com" },
{ "name": "date", "default": "2025-12-31" }
],
"prefill": [
{ "name": "textbox", "response": "Prefill de ejemplo" }
],
"metadata": {
"externalId": "TPL-2025-002",
"tags": ["contratos"]
}
}
Respuesta
{
"documentId": "...",
"templateId": "<TEMPLATE_ID>",
"title": "Contrato Plantilla",
"status": "draft",
"createdAt": "...",
"updatedAt": "..."
}
5. Recuperar plantillas disponibles
Endpoint
GET {CLIENT_SERVER_URL}/api/1.0/templates
Header: x-api-token: <API_TOKEN>
Parámetros de consulta
Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
limit | integer | No | Cantidad de resultados por página (1–100, por defecto 20). |
skip | integer | No | Offset o desplazamiento inicial. |
search | string | No | Filtro por nombre parcial de plantilla. |
Ejemplo (cURL)
curl "http://localhost:8080/api/1.0/templates?limit=20&skip=0&search=contrato" \
-H "x-api-token: TU_TOKEN"
Respuesta
{
"data": [
{
"objectId": "K8uV4NgY1z",
"Name": "Contrato estándar",
"Description": "Plantilla base para clientes nuevos",
"SignatureType": ["draw"],
"SendinOrder": true,
"AutomaticReminders": false,
"TimeToCompleteDays": 15,
"RemindOnceInEvery": 5,
"updatedAt": "2025-03-10T12:34:56.789Z",
"createdAt": "2025-01-05T10:00:00.000Z"
}
],
"pagination": {
"limit": 20,
"skip": 0,
"total": 1,
"hasMore": false
}
}
5.1 Obtener detalles de una plantilla
Recupera la información completa de una plantilla específica, incluyendo firmantes, placeholders y configuraciones de envío.
Endpoint
GET {CLIENT_SERVER_URL}/api/1.0/template/<TEMPLATE_ID>
Encabezados
x-api-token: <API_TOKEN>
Parámetros de ruta
Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
TEMPLATE_ID | string | Sí | Identificador único de la plantilla a consultar. |
Ejemplo de solicitud
curl "http://localhost:8080/api/1.0/template/K8uV4NgY1z" \
-H "x-api-token: TU_TOKEN"
Respuesta exitosa
{
"data": {
"objectId": "K8uV4NgY1z",
"Name": "Contrato estándar",
"Description": "Plantilla base para clientes nuevos",
"SignatureType": ["draw"],
"SendinOrder": true,
"AutomaticReminders": false,
"TimeToCompleteDays": 15,
"RemindOnceInEvery": 5,
"IsEnableOTP": false,
"AllowModifications": false,
"NotifyOnSignatures": false,
"RedirectUrl": null,
"Placeholders": [...],
"Signers": [...],
"Bcc": [...],
"ExtUserPtr": { ... },
"updatedAt": "2025-03-10T12:34:56.789Z",
"createdAt": "2025-01-05T10:00:00.000Z"
}
}
Códigos de respuesta
Código | Descripción |
|---|---|
200 | Solicitud exitosa. Devuelve los datos completos de la plantilla. |
400 | Parámetros inválidos o falta |
403 | Usuario sin acceso a la plantilla. |
404 | Plantilla no encontrada. |
405 | Token inválido o ausente. |
6. Errores comunes
Código | Descripción |
|---|---|
400 | Parámetros inválidos o estructura incorrecta. |
403 | Permiso insuficiente según el token. |
405 | Token ausente o inválido. |
500 | Error interno inesperado. |
7. Consideraciones finales
- Los encabezados válidos son
x-api-tokenox-danassign-api-key, según el endpoint. - Las sesiones Parse usan
X-Parse-Session-Token. - La versión actual de las rutas REST es 1.0.
- Los
sessionTokenno expiran automáticamente; se invalidan al revocar el token o cerrar sesión.
Actualizado el: 06/11/2025
¡Gracias!
