Correction
Los endpoints de Correction te permiten modificar documentos que ya fueron enviados para firma, siguiendo reglas de edición estilo DocuSign. Puedes anular documentos, agregar nuevos firmantes, o eliminar firmantes que aún no hayan firmado.
Antes de modificar un documento activo (add/remove signer), debes llamar a Enter correction mode para bloquear el documento para edición. Una vez terminado, llama a Exit correction mode para reactivar el flujo de firma. Usa Correction Context primero para verificar qué operaciones están permitidas.
Correction context
Consulta qué operaciones de edición se pueden realizar sobre un documento activo. Las reglas dependen de cuántos firmantes ya han firmado.
Aunque es una operación de lectura, este endpoint requiere el scope document:write (igual que el resto de los endpoints de Correction). Una API key que solo tenga document:read recibe 403 INSUFFICIENT_SCOPE.
Path parameters
- Name
document_id- Type
- string
- Description
ID del documento (UUID).
Request
curl "https://api.allsign.io/v2/documents/DOC_UUID/correction-context" \
-H "Authorization: Bearer ALLSIGN_LIVE_SK"
Response (200)
{
"signingStatus": "some_signed",
"canAddSigner": true,
"isLocked": false,
"signers": [
{
"signature_id": "sig-uuid-1",
"signer_id": "user-uuid-1",
"status": "SIGNED",
"can_remove": false,
"can_edit_fields": false,
"is_signed": true
},
{
"signature_id": "sig-uuid-2",
"signer_id": "user-uuid-2",
"status": "WAITING FOR SIGNATURE",
"can_remove": true,
"can_edit_fields": true,
"is_signed": false
}
]
}
Los campos de nivel superior (signingStatus, canAddSigner, isLocked) vienen en camelCase, pero los objetos dentro de signers[] vienen en snake_case (signature_id, signer_id, can_remove, …). Usa signature_id para DELETE /signers/{signature_id} y PATCH /signers/{signature_id}. Los valores de status llevan espacios: "EMAIL NOT SENT", "WAITING FOR SIGNATURE", "SIGNED".
isLocked: true indica que el documento no puede ser modificado (ej. todos ya firmaron o el documento fue anulado).
Enter correction mode
Bloquea el documento para edición. Debe llamarse antes de agregar o eliminar firmantes en un documento activo. Mientras el documento está en modo corrección, los firmantes no pueden avanzar en el flujo de firma.
curl -X POST "https://api.allsign.io/v2/documents/DOC_UUID/enter-correction" \
-H "Authorization: Bearer ALLSIGN_LIVE_SK"
Response (200)
{
"success": true,
"message": "Document entered correction mode"
}
Exit correction mode
Libera el bloqueo de corrección y reactiva el flujo de firma. Debe llamarse después de terminar todas las modificaciones (add/remove signer).
curl -X POST "https://api.allsign.io/v2/documents/DOC_UUID/exit-correction" \
-H "Authorization: Bearer ALLSIGN_LIVE_SK"
Response (200)
{
"success": true,
"message": "Document exited correction mode"
}
Void document
Anula un documento, cancelando todas las firmas pendientes. Las firmas ya completadas se conservan en el historial de auditoría.
Path parameters
- Name
document_id- Type
- string
- Description
ID del documento (UUID).
Request body
- Name
reason- Type
- string
- Description
Razón de la anulación (para auditoría).
Request
curl -X POST "https://api.allsign.io/v2/documents/DOC_UUID/void" \
-H "Authorization: Bearer ALLSIGN_LIVE_SK" \
-H "Content-Type: application/json" \
-d '{"reason": "Se detectó un error en el contrato"}'
Response (200)
{
"success": true,
"message": "Documento anulado. 2 firma(s) pendiente(s) cancelada(s)."
}
Error — already completed (400)
{
"error": {
"code": "E1600",
"type": "bad_request",
"message": "Cannot void a fully signed document."
}
}
Error — already voided (400)
{
"error": {
"code": "E1600",
"type": "bad_request",
"message": "Document is already voided or expired."
}
}
Add signer
Agrega un nuevo firmante a un documento activo. El endpoint encuentra o crea al usuario dentro del tenant, otorga acceso al documento y crea el registro de firma.
Path parameters
- Name
document_id- Type
- string
- Description
ID del documento (UUID).
Request body
- Name
signerEmail- Type
- string
- Description
Email del nuevo firmante. Se valida automáticamente (formato + entregabilidad). Requerido si no se proporciona
signerPhone.
- Name
signerPhone- Type
- string
- Description
Teléfono del firmante en formato E.164 (para firmantes solo WhatsApp). Requerido si no se proporciona
signerEmail.
- Name
signerName- Type
- string
- Description
Nombre para mostrar del firmante.
- Name
invitedByEmail- Type
- string
- Description
Email del usuario que agrega al firmante. Opcional — por defecto es el dueño de la API key.
- Name
roleName- Type
- string
- Description
Nombre del rol a asignar al firmante (ej.
"Arrendador"). Si existe un rol orphan con ese nombre, lo reclama. Si no existe, lo crea. Máximo 255 caracteres.
Request
curl -X POST "https://api.allsign.io/v2/documents/DOC_UUID/add-signer" \
-H "Authorization: Bearer ALLSIGN_LIVE_SK" \
-H "Content-Type: application/json" \
-d '{"signerEmail": "nuevo-firmante@empresa.com"}'
Response (200) — Éxito
{
"success": true,
"message": "Firmante nuevo-firmante@empresa.com agregado correctamente."
}
Response (200) — Duplicado
{
"success": false,
"message": "El firmante ya está en la lista de firmantes."
}
Error — invalid email (422)
{
"error": {
"code": "E1200",
"type": "validation_error",
"message": "Invalid email format: 'bad-email'. Expected format: user@example.com",
"field": "signer_email"
}
}
Remove signer
Elimina un firmante de un documento activo. Solo se puede eliminar firmantes que aún no han firmado.
Path parameters
- Name
document_id- Type
- string
- Description
ID del documento (UUID).
- Name
signature_id- Type
- string
- Description
ID de la firma a eliminar (UUID). Obtenerlo del correction context o del campo
signersData.
curl -X DELETE "https://api.allsign.io/v2/documents/DOC_UUID/signers/SIG_UUID" \
-H "Authorization: Bearer ALLSIGN_LIVE_SK"
Response (200)
{
"success": true,
"detail": "Firmante eliminado correctamente"
}
Error — already signed (400)
{
"error": {
"code": "E1700",
"type": "bad_request",
"message": "No se puede quitar un firmante que ya firmó.",
"error": "already_signed"
}
}
Patch signer
Asigna o cambia el rol de un firmante existente en un documento. Si existe un orphan role con el nombre indicado, lo reclama en lugar de crear uno duplicado.
Soporta firmantes por email y firmantes solo WhatsApp (sin email).
Path parameters
- Name
document_id- Type
- string
- Description
ID del documento (UUID).
- Name
signature_id- Type
- string
- Description
ID de la firma del firmante a actualizar (UUID). Obtenerlo del correction context.
Request body
- Name
roleName- Type
- string
- Description
Nombre del rol a asignar (ej.
"Arrendador"). Máximo 255 caracteres. Si existe un orphan role con ese nombre, se reclama; si no, se crea uno nuevo. Opcional: si lo omites (o mandasnull), el rol del firmante se deja intacto (200conroleId: null).
Request
curl -X PATCH "https://api.allsign.io/v2/documents/DOC_UUID/signers/SIG_UUID" \
-H "Authorization: Bearer ALLSIGN_LIVE_SK" \
-H "Content-Type: application/json" \
-d '{"roleName": "Arrendador"}'
Response (200) — Rol asignado
{
"success": true,
"roleId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"roleName": "Arrendador",
"roleContactEmail": "arrendador@empresa.com"
}
Response (200) — Firmante WhatsApp-only (sin email)
{
"success": true,
"roleId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"roleName": "Proveedor",
"roleContactEmail": null
}
Error — sin identificador (400)
{
"error": {
"code": "E1700",
"type": "bad_request",
"message": "Cannot update role: signer has no email or phone identifier."
}
}
roleContactEmail es null para firmantes WhatsApp-only. El rol se busca y reclama via signerUserId en lugar de email.

