API de Sesiones de Firma
Crea, gestiona y rastrea sesiones de firma electrónica para preguntas de contrato.
La API de Sesiones de Firma te permite crear y gestionar programáticamente sesiones de firma para preguntas de contrato. Puedes crear sesiones, rastrear el progreso de firma, reenviar solicitudes, anular sesiones y descargar documentos firmados.
Todos los cuerpos de solicitud y respuesta utilizan nombres de campo en snake_case.
/api/v1/forms/:id/signing-sessionsGET/api/v1/forms/:id/signing-sessionsGET/api/v1/signing-sessions/:sessionIdPOST/api/v1/signing-sessions/:sessionId/voidPOST/api/v1/signing-sessions/:sessionId/resend/:slotNumberGET/api/v1/signing-sessions/:sessionId/documentsGET/api/v1/signing-sessions/:sessionId/documents/:docIdGET/api/v1/signing-sessions/:sessionId/auditGET/api/v1/s/:shortCodePOST/api/v1/s/:shortCode/verify-passwordCrear Sesión
/api/v1/forms/:id/signing-sessionsCrea una nueva sesión de firma para un formulario que contiene una o más preguntas de contrato. Devuelve la sesión con enlaces de firma únicos para cada slot de firmante.
Parámetros de Ruta
idstringEl ID del formulario
Cuerpo de Solicitud
signersarrayArreglo de configuraciones de firmantes, una por slot. Cada objeto puede incluir slot_number (entero), first_name (cadena), last_name (cadena) y email (cadena). Todos los campos excepto slot_number son opcionales.
signing_orderstring"sequential" o "any". Por defecto usa el orden de firma predeterminado de la pregunta.
expiry_daysintegerNúmero de días antes de que la sesión expire. Predeterminado: 30.
passwordstringContraseña para proteger los enlaces de firma.
hide_other_signersbooleanOculta los campos completados por otros firmantes. Predeterminado: false.
require_email_verificationbooleanExige verificación de correo antes de firmar. Predeterminado: false.
copy_modestring"ask", "always" o "disabled". Predeterminado: "ask".
notify_emailsarrayArreglo de direcciones de correo que recibirán notificaciones de estado.
notify_eventsarrayArreglo de tipos de evento: "each_signature", "all_complete", "decline", "expiry".
send_signing_emailsbooleanEnvía correos de solicitud de firma a los firmantes que tengan dirección de correo. Predeterminado: false.
custom_email_bodystringPlantilla de correo personalizada. Soporta variables: {slot_firstName}, {slot_lastName}, {slot_link}, {expiryDate}.
Respuesta
{
"id": "ses_abc123def456",
"form_id": "665a1b2c3d4e5f6a7b8c9d0e",
"status": "active",
"signing_order": "sequential",
"total_slots": 2,
"total_signed": 0,
"expires_at": "2026-04-25T00:00:00.000Z",
"hide_other_signers": false,
"copy_mode": "ask",
"signer_links": [
{
"slot_number": 1,
"slot_label": "Buyer",
"short_code": "xK9f2",
"signing_url": "https://nue.fm/s/xK9f2",
"first_name": "John",
"last_name": "Smith",
"email": "john@example.com",
"status": "pending"
},
{
"slot_number": 2,
"slot_label": "Seller",
"short_code": "mP3a7",
"signing_url": "https://nue.fm/s/mP3a7",
"first_name": null,
"last_name": null,
"email": null,
"status": "pending"
}
],
"created_at": "2026-03-26T10:00:00.000Z"
}
Ejemplos de Código
curl -X POST "https://api.nueform.io/api/v1/forms/FORM_ID/signing-sessions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signers": [
{"slot_number": 1, "first_name": "John", "last_name": "Smith", "email": "john@example.com"},
{"slot_number": 2, "first_name": "Jane", "last_name": "Doe"}
],
"signing_order": "sequential",
"expiry_days": 30,
"send_signing_emails": true
}'
Listar Sesiones
/api/v1/forms/:id/signing-sessionsDevuelve todas las sesiones de firma de un formulario.
Parámetros de Consulta
statusstringFiltra por estado: "active", "fully_signed", "declined", "voided", "expired".
pageintegerNúmero de página (predeterminado: 1)
per_pageintegerResultados por página (predeterminado: 20)
Respuesta
{
"sessions": [
{
"id": "ses_abc123def456",
"status": "active",
"total_slots": 2,
"total_signed": 1,
"signing_order": "sequential",
"expires_at": "2026-04-25T00:00:00.000Z",
"created_at": "2026-03-26T10:00:00.000Z"
}
],
"total": 5,
"page": 1,
"per_page": 20
}
Ejemplos de Código
curl -X GET "https://api.nueform.io/api/v1/forms/FORM_ID/signing-sessions?status=active" \
-H "Authorization: Bearer YOUR_API_KEY"
Obtener Sesión
/api/v1/signing-sessions/:sessionIdDevuelve una sola sesión de firma con todos los detalles, incluidos los enlaces de firmantes y sus estados.
Respuesta
Devuelve el mismo objeto de sesión que el endpoint de creación, con estados y marcas de tiempo actualizados para cada enlace de firmante.
Ejemplos de Código
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456" \
-H "Authorization: Bearer YOUR_API_KEY"
Anular Sesión
/api/v1/signing-sessions/:sessionId/voidAnula una sesión de firma activa. Todos los enlaces de firma pendientes quedan invalidados. Se notifica a las partes que ya firmaron y los PDF reciben la marca de agua "VOIDED".
Cuerpo de Solicitud
reasonstringMotivo de la anulación de la sesión.
Respuesta
{
"id": "ses_abc123def456",
"status": "voided",
"voided_at": "2026-03-27T15:30:00.000Z",
"void_reason": "Terms changed, new agreement required"
}
Ejemplos de Código
curl -X POST "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/void" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"reason": "Terms changed, new agreement required"}'
Reenviar Solicitud de Firma
/api/v1/signing-sessions/:sessionId/resend/:slotNumberReenvía el correo de solicitud de firma a un firmante específico. El firmante debe tener una dirección de correo configurada.
Respuesta
{
"success": true,
"sent_to": "john@example.com",
"slot_number": 1
}
Ejemplos de Código
curl -X POST "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/resend/1" \
-H "Authorization: Bearer YOUR_API_KEY"
Listar Documentos Firmados
/api/v1/signing-sessions/:sessionId/documentsDevuelve la lista de documentos firmados de una sesión completada. Cada documento corresponde a una pregunta de contrato del formulario.
Respuesta
{
"documents": [
{
"id": "doc_xyz789",
"question_id": "q_abc123",
"question_title": "Service Agreement",
"document_url": "https://storage.nueform.io/signed/doc_xyz789.pdf",
"document_hash": "sha256:a1b2c3d4e5f6...",
"generated_at": "2026-03-28T12:00:00.000Z"
}
]
}
Ejemplos de Código
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/documents" \
-H "Authorization: Bearer YOUR_API_KEY"
Obtener Documento Firmado
/api/v1/signing-sessions/:sessionId/documents/:docIdDescarga un documento firmado específico como archivo PDF.
Respuesta
Devuelve el archivo PDF con Content-Type: application/pdf.
Ejemplos de Código
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123/documents/doc_xyz789" \
-H "Authorization: Bearer YOUR_API_KEY" \
-o signed-document.pdf
Obtener Pista de Auditoría
/api/v1/signing-sessions/:sessionId/auditDevuelve la pista de auditoría completa de una sesión de firma, incluidos eventos de visualización, firmas, rechazos y eventos del sistema.
Respuesta
{
"entries": [
{
"id": "aud_001",
"action": "session_created",
"timestamp": "2026-03-26T10:00:00.000Z",
"actor_email": "owner@company.com",
"ip_address": "192.168.1.1",
"user_agent": "Chrome 120 / macOS"
},
{
"id": "aud_002",
"action": "document_viewed",
"slot_number": 1,
"actor_email": "john@example.com",
"timestamp": "2026-03-26T15:44:00.000Z",
"ip_address": "10.0.0.1",
"user_agent": "Chrome 120 / macOS"
},
{
"id": "aud_003",
"action": "signed",
"slot_number": 1,
"actor_name": "John Smith",
"actor_email": "john@example.com",
"timestamp": "2026-03-26T15:45:00.000Z",
"ip_address": "10.0.0.1",
"user_agent": "Chrome 120 / macOS"
}
]
}
Ejemplos de Código
curl -X GET "https://api.nueform.io/api/v1/signing-sessions/ses_abc123def456/audit" \
-H "Authorization: Bearer YOUR_API_KEY"
Resolver Código Corto
/api/v1/s/:shortCodeEndpoint público (no requiere autenticación). Resuelve un código corto de firma al contexto de formulario y sesión necesario para renderizar la experiencia de firma.
Respuesta
{
"form_id": "665a1b2c3d4e5f6a7b8c9d0e",
"session_id": "ses_abc123def456",
"slot_number": 1,
"slot_label": "Buyer",
"status": "pending",
"requires_password": true,
"requires_email_verification": false,
"signing_order": "sequential",
"is_turn": true
}
Ejemplos de Código
curl -X GET "https://api.nueform.io/api/v1/s/xK9f2"
Verificar Contraseña
/api/v1/s/:shortCode/verify-passwordEndpoint público. Verifica la contraseña de una sesión de firma protegida con contraseña. Devuelve un token de acceso temporal si es correcta.
Cuerpo de Solicitud
passwordstringLa contraseña de la sesión.
Respuesta
{
"success": true,
"access_token": "tmp_abc123..."
}
Respuesta de Error (401)
{
"error": "Invalid password"
}
Ejemplos de Código
curl -X POST "https://api.nueform.io/api/v1/s/xK9f2/verify-password" \
-H "Content-Type: application/json" \
-d '{"password": "mySecretPass123"}'