Documents
Un documento representa un archivo listo para firma electrónica con biometría, anti-deepfake y NOM-151. En la API v3 un solo endpoint (POST /v3/documents) crea el documento a partir de una plantilla o de un PDF subido en base64 — tú eliges la fuente con el campo source.
Todas las respuestas usan camelCase en el wire, ids opacos con prefijo (doc_, tmpl_, fld_, sgr_, evt_) y livemode para distinguir entorno live de test. Los errores siguen problem+json (RFC 9457) con un campo code en UPPER_SNAKE. Las listas paginan por cursor (startingAfter / endingBefore + hasMore) y las respuestas traen headers RateLimit-*.
Si el documento nace de una plantilla PDF con formulario, sus campos viven en GET …/fields: quién los llena (role, signerId), qué valor tienen, si el emisor los prellenó y bloqueó (values/readOnly al crear, filledBy: "owner") y quién puso cada valor (filledBy, filledAt). Guía: Formularios PDF.
Los ejemplos usan $ALLSIGN_API_KEY. Defínela una vez con tu key de sandbox: export ALLSIGN_API_KEY="allsign_test_sk_…" (en PowerShell: $env:ALLSIGN_API_KEY="allsign_test_sk_…").
El objeto Document
Atributos
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
idstring requeridoID del documento (
doc_…). -
objectstring, siempre "document"Siempre
"document". -
namestring requeridoNombre visible del documento.
-
statusenum requeridoEstado del ciclo de vida:
draft,collecting_data,awaiting_signatures,correcting,processing,completed,expired,voided,error.Valores:
draftcollecting_dataawaiting_signaturescorrectingprocessingcompletedexpiredvoidederror -
documentTypestring requeridoToken opaco del tipo de documento.
-
signerCountinteger requeridoNúmero total de firmantes.
-
signedCountinteger requeridoCuántos firmantes ya firmaron.
-
ownerIdstring requeridoDueño del documento (
usr_…). -
orgIdstring puede ser nullOrganización del documento (
org_…). -
folderIdstring puede ser nullCarpeta que contiene el documento (
fld_…). Esnullsi el documento no está en ninguna carpeta que esta credencial pueda abrir conGET /v3/folders/{id}. -
expiresAtstring (fecha-hora ISO 8601) puede ser nullFecha límite de firma (ISO 8601).
-
signingOrderenumparallelosequential(firmantes por etapas conroutingOrder). Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo.Valores:
parallelsequential -
currentStageinteger puede ser nullEtapa activa en un documento
sequentialmientras espera firmas;nullen paralelo o al terminar. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo. -
expirationRemindersarray de integer puede ser nullHoras antes del vencimiento en las que se envían recordatorios.
-
templateIdstring puede ser nullPlantilla de la que nació el documento (
tmpl_…), onull. -
templateVersionIdstring puede ser nullVersión de esa plantilla cuyo layout se aplicó (
tv_…), onull. -
parentDocumentIdstring puede ser nullDocumento del que este es un anexo (
doc_…).nullsi es un documento raíz. VerPOST /documents/{id}/annexesyGET /documents/{id}/family. -
createdAtstring (fecha-hora ISO 8601) requeridoFecha de creación (ISO 8601).
-
updatedAtstring (fecha-hora ISO 8601) requeridoÚltima actualización (ISO 8601).
List documents
GET /documents
Lista tus documentos con paginación por cursor y filtros. Para la página siguiente manda el nextCursor de la respuesta como startingAfter; para la anterior, el previousCursor como endingBefore. Los cursores son opacos: el id de un documento no sirve como cursor (400 INVALID_CURSOR).
Parámetros
-
limitinteger queryResultados por página (1–100, default
20). -
startingAfterstring queryCursor opaco: el
nextCursorde la página anterior. Devuelve la página que sigue. -
endingBeforestring queryCursor opaco: el
previousCursorde la página actual. Devuelve la página anterior. -
statusenum queryFiltra por estado:
draft,collecting_data,awaiting_signatures,correcting,processing,completed,expired,voided.Valores:
draftcollecting_dataawaiting_signaturescorrectingprocessingcompletedexpiredvoidederror -
status[not]array de enum queryStatuses to hide. Repeat the parameter to hide several, e.g.
?status[not]=voided&status[not]=expired. Omit to return every status. Documents with no signature state are never hidden. Mutually exclusive withstatus. -
sortenum queryOrden. Solo
createdAt/updatedAt, ascendente o descendente con el prefijo-. Valores:createdAt,-createdAt,updatedAt,-updatedAt(default-createdAt). Otro valor es un422 VALIDATION_ERROR.Valores:
createdAt-createdAtupdatedAt-updatedAt -
scopeenum queryAlcance:
owner(default),org,tenant,accessible.Valores:
ownerorgtenantaccessible -
folderIdstring queryFiltra por carpeta (
fld_…). -
templateIdstring queryKeep only documents created from this template (
tmpl_…). -
searchstring queryBúsqueda por texto libre en el nombre (1–255 caracteres).
-
createdAt[gte]string (fecha-hora ISO 8601) querySolo documentos creados en o después de esta fecha (ISO 8601).
-
createdAt[lte]string (fecha-hora ISO 8601) querySolo documentos creados en o antes de esta fecha (ISO 8601).
-
includeTotalboolean querySi es
true, la respuesta incluyetotalCount. Defaultfalse(más rápido). -
includeFiledDocumentsboolean queryWhen false, hides documents the caller has filed into one of their own folders. The auto-created inbox folder does not count as filing. Ignored when
folderIdselects a folder. -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Sobre de paginación por cursor (object: "list") con objetos Document.
Ver los 7 atributos de la respuesta
-
objectstring, siempre "list"Siempre
"list". -
dataarray de objetos requeridoArreglo de objetos Document.
Ver 20 atributos hijos
-
data[].livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
data[].idstring requeridoID del documento (
doc_…). -
data[].objectstring, siempre "document"Siempre
"document". -
data[].namestring requeridoNombre visible del documento.
-
data[].statusenum requeridoEstado del ciclo de vida:
draft,collecting_data,awaiting_signatures,correcting,processing,completed,expired,voided,error.Valores:
draftcollecting_dataawaiting_signaturescorrectingprocessingcompletedexpiredvoidederror -
data[].documentTypestring requeridoToken opaco del tipo de documento.
-
data[].signerCountinteger requeridoNúmero total de firmantes.
-
data[].signedCountinteger requeridoCuántos firmantes ya firmaron.
-
data[].ownerIdstring requeridoDueño del documento (
usr_…). -
data[].orgIdstring puede ser nullOrganización del documento (
org_…). -
data[].folderIdstring puede ser nullCarpeta que contiene el documento (
fld_…). Esnullsi el documento no está en ninguna carpeta que esta credencial pueda abrir conGET /v3/folders/{id}. -
data[].expiresAtstring (fecha-hora ISO 8601) puede ser nullFecha límite de firma (ISO 8601).
-
data[].signingOrderenumparallelosequential(firmantes por etapas conroutingOrder). Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo.Valores:
parallelsequential -
data[].currentStageinteger puede ser nullEtapa activa en un documento
sequentialmientras espera firmas;nullen paralelo o al terminar. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo. -
data[].expirationRemindersarray de integer puede ser nullHoras antes del vencimiento en las que se envían recordatorios.
-
data[].templateIdstring puede ser nullPlantilla de la que nació el documento (
tmpl_…), onull. -
data[].templateVersionIdstring puede ser nullVersión de esa plantilla cuyo layout se aplicó (
tv_…), onull. -
data[].parentDocumentIdstring puede ser nullDocumento del que este es un anexo (
doc_…).nullsi es un documento raíz. VerPOST /documents/{id}/annexesyGET /documents/{id}/family. -
data[].createdAtstring (fecha-hora ISO 8601) requeridoFecha de creación (ISO 8601).
-
data[].updatedAtstring (fecha-hora ISO 8601) requeridoÚltima actualización (ISO 8601).
-
-
hasMoreboolean requeridotruesi hay más resultados después de esta página. -
nextCursorstring puede ser nullCursor para la siguiente página (pásalo como
startingAfter). -
previousCursorstring puede ser nullCursor para la página anterior (pásalo como
endingBefore). -
limitinteger requeridoEl límite aplicado a esta página.
-
totalCountinteger puede ser nullTotal de coincidencias. Solo se llena cuando pides
includeTotal=true.
Get aggregate statistics
GET /documents/stats
Conteos agregados en el mismo scope que GET /documents. Sin rango de fechas, usa los últimos 365 días por default; recentCount siempre son los últimos 7 días dentro de esa ventana, no de todo el histórico. No es un objeto recurso (sin livemode) — es un resumen, como List documents pero contado en vez de listado.
Parámetros
-
scopeenum queryAlcance:
owner(default),org,tenant,accessible.Valores:
ownerorgtenantaccessible -
createdAt[gte]string (fecha-hora ISO 8601) querySolo cuenta documentos creados en o después de esta fecha (ISO 8601).
-
createdAt[lte]string (fecha-hora ISO 8601) querySolo cuenta documentos creados en o antes de esta fecha (ISO 8601).
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Los 5 conteos agregados.
Ver los 6 atributos de la respuesta
-
totalDocumentsinteger requeridoTotal de documentos en el scope pedido.
-
totalCompletedinteger requeridoDocumentos con flujo de firma completado.
-
totalPendinginteger requeridoDocumentos en
awaiting_signaturesocollecting_data. No cuenta borradores, anulados ni expirados. -
totalConfiguringinteger requeridoDocumentos en configuración, antes de enviarse.
-
totalErrorinteger requeridoDocumentos cuyo estado de firma es
error— algo falló procesándolos después de enviarse. No están incluidos entotalPending. -
recentCountinteger requeridoDocumentos creados en los últimos 7 días.
Create document
POST /documents
Crea un documento a partir de una plantilla (source: "template") o de un archivo subido en base64 (source: "file") — nunca ambos. El campo source es un discriminador explícito; si lo omites, se infiere de cuál de templateId / file mandaste, pero cuando lo incluyes debe coincidir con el campo presente. Efectos en entorno live: consume 1 o más créditos, arranca un workflow de Temporal y sube el archivo a S3. Con una key test el documento es livemode: false y no factura. Cada firmante toma un rol de la plantilla con roleName y hereda sus campos; values prellena campos del formulario PDF por nombre y readOnly lista los que el firmante no puede cambiar (guía Formularios PDF). signingOrder: "sequential" + routingOrder por firmante invita por etapas.
Parámetros
-
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
sourceenum puede ser nullDiscriminador:
template,fileocompound. Opcional (se infiere), pero si lo mandas debe concordar con el campo presente.Valores:
templatefilecompound -
templateIdstring puede ser nullID de una plantilla existente (
tmpl_…). Requerido cuandosourceestemplate. -
templateValuesobjeto (llave → valor) puede ser nullMapa de valores para las variables de la plantilla, con llaves naturales del negocio (ej.
nombre_completo). Nunca se camelizan. -
valuesobjeto (llave → valor) puede ser nullPrellenado de campos del formulario PDF por nombre de campo, para cualquier rol. Los
valuesde cada firmante tienen prioridad sobre estos. -
readOnlyarray de string puede ser nullNombres de campos prellenados que ningún firmante puede cambiar.
-
fileobjeto puede ser nullArchivo inline cuando
sourceesfile. Mutuamente exclusivo contemplateId/documents.Ver 3 atributos hijos
-
file.contentstring requeridoContenido del archivo codificado en Base64. Máximo 10 MB decodificados.
-
file.fileTypestringTipo de archivo. Default
pdf. -
file.namestring puede ser nullNombre del archivo (ej.
contrato.pdf). Se valida contra path traversal.
-
-
documentsarray de objetos puede ser nullExpediente compound: 1..N piezas (archivo o plantilla). Mutuamente exclusivo con el
file/templateIdde un solo origen. Mismo cerebro quePOST /v2/documents/condocuments[].Ver 7 atributos hijos
-
documents[].fileobjeto puede ser nullArchivo inline (PDF/DOCX en base64). Mutuamente exclusivo con
templateId.Ver 3 atributos hijos
-
documents[].file.contentstring requeridoContenido del archivo codificado en Base64. Máximo 10 MB decodificados.
-
documents[].file.fileTypestringTipo de archivo. Default
pdf. -
documents[].file.namestring puede ser nullNombre del archivo (ej.
contrato.pdf). Se valida contra path traversal.
-
-
documents[].templateIdstring puede ser nullID de plantilla (
tmpl_…). Mutuamente exclusivo confile. -
documents[].templateValuesobjeto (llave → valor) puede ser nullValores owner-fixed para variables de este item (llaves naturales, no camelCase).
-
documents[].namestring puede ser nullNombre visible de esta pieza dentro del expediente.
-
documents[].kindenumRol de la pieza:
main,attachmentocover.Valores:
mainattachmentcover -
documents[].positioninteger puede ser nullOrden 1-based de concatenación. Si se omite, se asigna 1..N por índice.
-
documents[].dedupeScopeenumdocumentcomparte variables entre piezas;pdflas aísla a este item.Valores:
documentpdf
-
-
fieldsarray de objetos puede ser nullCampos de firma a colocar al crear (
anchorStringoposition). Cadaemail/phonedebe coincidir con unsigners[]. En compound usadocumentPdfPositionpara anclar a una pieza.Ver 10 atributos hijos
-
fields[].emailstring puede ser nullCorreo del firmante (debe coincidir con un
signers[].email). -
fields[].phonestring puede ser nullWhatsApp del firmante (debe coincidir con un
signers[].phone). -
fields[].pageNumberinteger puede ser nullPágina 1-based. En anclas, acota la búsqueda a esa página.
-
fields[].documentPdfPositioninteger puede ser nullCompound: posición 1-based del PDF de
documents[]al que pertenece este campo. -
fields[].anchorStringstring puede ser nullTexto ancla en el PDF. Mutuamente exclusivo con
position. -
fields[].anchorHorizontalAlignmentenumAlineación horizontal sobre el ancla. Ignorado en modo coordenadas.
Valores:
leftcenterright -
fields[].anchorVerticalAlignmentenumAlineación vertical sobre el ancla. Ignorado en modo coordenadas.
Valores:
topcenterbottom -
fields[].positionobjeto puede ser nullCoordenadas {x,y} en puntos PDF. Mutuamente exclusivo con
anchorString.Ver 2 atributos hijos
-
fields[].position.xnumber requerido -
fields[].position.ynumber requerido
-
-
fields[].heightnumberAlto del campo en puntos. El ancho es 2×.
-
fields[].includeInAllPagesbooleanSolo modo coordenadas: repetir el campo en todas las páginas.
-
-
sendInvitationsbooleanSi es true, dispara invitaciones al crear (equivale a v2
config.sendInvitations). FuerzastartAtStep=3. -
startAtStepintegerPaso inicial: 1=borrador, 2=campos, 3=esperando firmas (cobra al crear).
-
folderIdstring puede ser nullCarpeta destino (
fld_…). -
ownerEmailstring puede ser nullDueño del documento (email de un user del tenant). Equivale a v2
permissions.ownerEmail. -
namestring puede ser nullNombre visible del documento. Si se omite, se deriva de la plantilla o del archivo.
-
signersarray de objetos puede ser nullFirmantes a adjuntar al crear el documento.
Ver 10 atributos hijos
-
signers[].emailstring puede ser nullCorreo del firmante. Manda
emailophone, no los dos: cada firmante recibe su invitación por un solo canal (422VALIDATION_ERRORsi llegan ambos). -
signers[].phonestring puede ser nullTeléfono del firmante (para invitación por WhatsApp). Excluye a
email: un firmante lleva un solo canal. -
signers[].namestring puede ser nullNombre del firmante.
-
signers[].roleNamestring puede ser nullRol semántico del firmante (ej.
proveedor), usado para auto-asignar variables de plantilla marcadas con ese rol. Opcional — si se omite, las variables deben asignarse manualmente. -
signers[].valuesobjeto (llave → valor) puede ser nullPrellenado de campos del formulario PDF por nombre de campo (texto o casilla). Sólo aplica a plantillas PDF con campos; las llaves nunca se camelizan.
-
signers[].readOnlyarray de string puede ser nullNombres de campos prellenados que el firmante no puede cambiar.
-
signers[].routingOrderinteger puede ser nullEtapa de firma (1 = primera). Firmantes con el mismo número firman en paralelo. Solo aplica con
signingOrder: "sequential". ConsigningOrder: "sequential"es obligatorio en todos los firmantes: si le falta a alguno, la creación se rechaza con 422VALIDATION_ERRORdiciendo en cuál falta, en vez de repartir etapas por su cuenta. Dentro del producto un firmante sin número cuenta como etapa 1, pero la API v3 no asume ese default: unsequentiala medio numerar sería un documento que firma todo el mundo a la vez sin decirlo. Después de crear, la etapa se cambia conPATCH /v3/documents/{documentId}/signers/{signerId}. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo. -
signers[].kindenumsigner(default) firma.carbon_copyes un observador: nunca firma ni recibe campos, solo los avisos deeventsy, concapability: notify_and_view, un enlace de solo lectura. Un observador necesitaemaily no llevaroleName,routingOrder,valuesnireadOnly. Después de crear se administran con/v3/documents/{documentId}/observers.Valores:
signercarbon_copy -
signers[].capabilityenum puede ser nullSolo observadores:
notify(default) onotify_and_view.Valores:
notifynotify_and_view -
signers[].eventsarray de string puede ser nullSolo observadores: avisos que recibe.
document.completed(default),document.expired,document.voided.
-
-
signatureValidationobjeto puede ser nullNivel de validez legal (autógrafa/NOM-151/FEA/biometría/videofirma). Por default: solo autógrafa.
Ver 6 atributos hijos
-
signatureValidation.autografabooleanFirma autógrafa (trazo en pantalla).
-
signatureValidation.nom151booleanConstancia de conservación NOM-151.
-
signatureValidation.feabooleanFirma Electrónica Avanzada (FEA/e.firma SAT).
-
signatureValidation.biometricSignaturebooleanVerificación biométrica (selfie vs. identificación, anti-deepfake).
-
signatureValidation.idScanbooleanEscaneo de identificación oficial (INE, pasaporte).
-
signatureValidation.videofirmabooleanGraba video del firmante durante el proceso de firma.
-
-
expiresAtstring (fecha-hora ISO 8601) puede ser nullFecha límite de firma (ISO 8601).
-
modeenum puede ser nullPasa
draftpara crear el documento sin cobrar ni enviar invitaciones (fuerzastartAtStep=1). Si se omite, se conserva el comportamiento actual.Valores:
draft -
signingOrderenum puede ser nullparallel(default): todos los firmantes reciben su invitación a la vez.sequential: cada firmante traeroutingOrdery solo la etapa activa puede firmar; la siguiente se invita cuando la anterior termina.sequentialexigeroutingOrderen cada firmante (422VALIDATION_ERRORsi falta alguno) yparallelno lo admite en ninguno. El modo no se puede cambiar después; las etapas sí, conPATCH /v3/documents/{documentId}/signers/{signerId}. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo.Valores:
parallelsequential
Devuelve
201 Documento creado (mismo shape que Retrieve document). — el objeto Document
Retrieve document
GET /documents/{document_id}
Consulta un documento por su id. folderId es la carpeta (fld_…) donde está el documento, y es null si no está en una carpeta que tu key pueda abrir con GET /v3/folders/{id}.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
expandstring queryLista separada por comas de sub-recursos a expandir en línea. Si se omite, la respuesta trae solo los campos del propio documento.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 El objeto Document. — el objeto Document
Update document
PATCH /documents/{document_id}
Merge-patch parcial: solo se modifican los campos que envías. Los únicos campos mutables son name y folderId. folderId: "fld_…" mueve el documento a esa carpeta; folderId: null lo saca de su carpeta. Enviar cualquier otro campo (status, ownerId, id, createdAt, …) se rechaza al parsear con 422 VALIDATION_ERROR nombrando el campo ofensor — así se protege un campo inmutable.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
namestring puede ser nullNuevo nombre visible del documento.
-
folderIdstring puede ser nullMover a otra carpeta (
fld_…), onullpara sacarlo de la carpeta.
Devuelve
200 El objeto Document actualizado. — el objeto Document
Send document
POST /documents/{document_id}/send
Cobra los créditos, avanza el estado del documento y despacha las invitaciones de firma (email o WhatsApp vía Temporal) a los firmantes que adjuntaste al crearlo. recipients es opcional y solo sirve para invitar a algunos de esos firmantes, nombrándolos por su email o su phone: no agrega personas. Si alguno no es firmante del documento, la respuesta es 422 RECIPIENT_NOT_SIGNER y no se cobra ni se invita a nadie.
Idempotency-Key es obligatoria: repetir con la misma llave devuelve la respuesta original sin cobrar ni invitar otra vez. Un send nuevo sobre un documento que ya está en firma no vuelve a cobrar y solo invita a quien no tiene una invitación vigente (y, en orden secuencial, a quien ya le toca); para insistirle a quien ya la tiene usa Remind signer (uno cada 4 horas). Un documento anulado o expirado responde 409 DOCUMENT_NOT_SENDABLE.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
recipientsarray de objetos puede ser nullFirmantes del documento a quienes invitar, por su correo o su teléfono. Cada uno tiene que ser un firmante ya adjunto: si alguno no lo es, la respuesta es 422
RECIPIENT_NOT_SIGNERy no se cobra ni se invita a nadie. Si se omite, se usan los firmantes ya adjuntos que siguen pendientes de firma. En un documento encollecting_dataoawaiting_signatures, repetirsendsolo invita a quien no tiene una liga vigente (sin revocar ni vencida); para recordarle a quien ya la tiene usaremindSigner. Encorrecting,sendvuelve a invitar a todos los pendientes.Ver 3 atributos hijos
-
recipients[].emailstring puede ser nullCorreo del destinatario.
-
recipients[].phonestring puede ser nullTeléfono del destinatario (invitación por WhatsApp).
-
recipients[].namestring puede ser nullNombre del destinatario.
-
Devuelve
200 El Document; su status avanza (típicamente a awaiting_signatures). — el objeto Document
Void document
POST /documents/{document_id}/void
Anula (invalida) un documento. No es un DELETE: la retención NOM-151 conserva el registro, por eso anular es una operación explícita que deja el documento en voided. Puedes incluir una reason opcional. Una anulación legítima puede cancelar cero firmas — el resultado se decide por el status, no por cuántas firmas se cancelaron.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
reasonstring puede ser nullMotivo de la anulación (queda en la bitácora del documento).
Devuelve
200 El Document; su status queda en voided. — el objeto Document
List signers
GET /documents/{document_id}/signers
Lista los firmantes de un documento. Es una colección acotada (no paginada por cursor).
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Colección acotada (object: "list", hasMore siempre false) con los firmantes.
Ver los 6 atributos de la respuesta
-
objectstring, siempre "list"Siempre
"list". -
dataarray de objetos requeridoArreglo de firmantes del documento.
Ver 11 atributos hijos
-
data[].livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
data[].idstring requeridoID del firmante (
sgr_…). -
data[].objectstring, siempre "signer"Siempre
"signer". -
data[].documentIdstring requeridoDocumento al que pertenece (
doc_…). -
data[].emailstring puede ser nullCorreo del firmante.
-
data[].phonestring puede ser nullTeléfono del firmante.
-
data[].namestring puede ser nullNombre del firmante.
-
data[].statusenum requeridoEstado por firmante:
pending,sent,signed,cancelled,waiting_turn.Valores:
pendingsentsignedcancelledwaiting_turn -
data[].signedAtstring (fecha-hora ISO 8601) puede ser nullMomento de la firma (ISO 8601), o
nullsi aún no firma. -
data[].routingOrderinteger puede ser nullEtapa de firma en un documento
sequential;nullen paralelo. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo. -
data[].deliveryobjeto puede ser nullEntrega de la última invitación vigente (no revocada).
nullsi no hay nada rastreado: invitaciones por correo sin rebote, anteriores al seguimiento, o un firmante recién reasignado.Ver 5 atributos hijos
-
data[].delivery.channelenum requeridoCanal de la última invitación:
whatsappoemail.Valores:
whatsappemail -
data[].delivery.statusenum requeridoEstado de entrega según el proveedor:
sent,delivered,readofailed. En correo solo se informafailed(rebote).Valores:
sentdeliveredreadfailed -
data[].delivery.reasonenum puede ser nullPor qué falló, en un catálogo estable de AllSign:
provider_payment_issue,undeliverable,bounceduother.nullsi no falló.Valores:
provider_payment_issueundeliverablebouncedother -
data[].delivery.providerCodeinteger puede ser nullCódigo de error original del proveedor (p. ej. de WhatsApp), o
null. -
data[].delivery.updatedAtstring (fecha-hora ISO 8601) requeridoMomento del último cambio de estado (ISO 8601).
-
-
-
hasMorebooleanSiempre
falseen esta colección acotada. -
nextCursornullSiempre
null— esta colección no pagina. -
previousCursornullSiempre
null— esta colección no pagina. -
limitnullSiempre
null— sin parámetrolimiten este endpoint.
Change a signer's stage
PATCH /documents/{document_id}/signers/{signer_id}
Mueve a un firmante de etapa en un documento sequential, sin tocar su identidad ni sus campos: mismo sgr_…, mismo contacto, mismos campos colocados — sólo cambia cuándo le toca firmar.
La etapa activa es la más baja que todavía tiene firmantes pendientes, y se recalcula en el momento: adelantar a alguien a la etapa activa lo invita de inmediato, y sacar de la etapa activa al último pendiente cierra esa etapa e invita a la siguiente. Por eso la respuesta trae el status ya recalculado (waiting_turn si quedó detrás de la etapa activa).
Se rechaza con 409 en tres casos, cada uno con su reason: el firmante ya firmó y su etapa es historia (already_signed); el documento firma en paralelo (document_not_sequential — signingOrder no se puede cambiar después de crear); o ese firmante no tiene un rol propio al que colgarle la etapa y cuenta siempre como etapa 1 (signer_without_role, que se resuelve volviendo a crear el documento con todos los firmantes numerados).
Disponible sólo si el orden de firma está habilitado en el entorno; si no, sobre un documento en paralelo responde 403 SEQUENTIAL_NOT_AVAILABLE en vez del 409 document_not_sequential.
Para cambiar a la persona detrás del lugar, usa POST /v3/documents/{documentId}/signers/{signerId}/reassign.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
signer_idstring ruta requeridoID del firmante (
sgr_…). -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
routingOrderinteger requeridoNueva etapa de firma del firmante (1 = primera). Los firmantes que comparten número firman a la vez; la siguiente etapa se invita sola cuando la anterior termina de firmar, así que mover a alguien puede abrir o cerrar una etapa al instante. Sólo aplica a documentos creados con
signingOrder: "sequential"(en unoparallella petición se rechaza con 409, o con 403SEQUENTIAL_NOT_AVAILABLEsi el orden de firma no está habilitado en el entorno), y sólo mientras ese firmante no haya firmado (409 si ya firmó). El número es obligatorio: la v3 no acepta "quitarle" la etapa a un firmante. Dentro del producto un firmante sin número cuenta como etapa 1, pero en esta API el orden siempre va escrito.
Devuelve
200 El firmante con su etapa nueva y su status ya recalculado (waiting_turn si quedó detrás de la etapa activa).
Ver los 11 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
idstring requeridoID del firmante (
sgr_…). -
objectstring, siempre "signer"Siempre
"signer". -
documentIdstring requeridoDocumento al que pertenece (
doc_…). -
emailstring puede ser nullCorreo del firmante.
-
phonestring puede ser nullTeléfono del firmante.
-
namestring puede ser nullNombre del firmante.
-
statusenum requeridoEstado por firmante:
pending,sent,signed,cancelled,waiting_turn.Valores:
pendingsentsignedcancelledwaiting_turn -
signedAtstring (fecha-hora ISO 8601) puede ser nullMomento de la firma (ISO 8601), o
nullsi aún no firma. -
routingOrderinteger puede ser nullEtapa de firma en un documento
sequential;nullen paralelo. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo. -
deliveryobjeto puede ser nullEntrega de la última invitación vigente (no revocada).
nullsi no hay nada rastreado: invitaciones por correo sin rebote, anteriores al seguimiento, o un firmante recién reasignado.Ver 5 atributos hijos
-
delivery.channelenum requeridoCanal de la última invitación:
whatsappoemail.Valores:
whatsappemail -
delivery.statusenum requeridoEstado de entrega según el proveedor:
sent,delivered,readofailed. En correo solo se informafailed(rebote).Valores:
sentdeliveredreadfailed -
delivery.reasonenum puede ser nullPor qué falló, en un catálogo estable de AllSign:
provider_payment_issue,undeliverable,bounceduother.nullsi no falló.Valores:
provider_payment_issueundeliverablebouncedother -
delivery.providerCodeinteger puede ser nullCódigo de error original del proveedor (p. ej. de WhatsApp), o
null. -
delivery.updatedAtstring (fecha-hora ISO 8601) requeridoMomento del último cambio de estado (ISO 8601).
-
List document fields
GET /documents/{document_id}/fields
El estado de cada campo del formulario de un documento: role y signerId (quién debe llenarlo), value (texto o casilla), readOnly (prellenado que el firmante no puede cambiar), status (pending hasta que su firmante firma), y la procedencia del valor: filledBy (owner si lo puso el emisor por API o desde el panel, signer si lo puso el firmante dueño) y filledAt. Es la llamada para volcar lo capturado a tu sistema cuando el documento se completa.
Parámetros
-
document_idstring ruta requerido -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Colección acotada con todos los campos del documento y unassignedCount.
Ver los 6 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "list"Siempre
"list". -
documentIdstring requeridoEl documento dueño de los campos (
doc_…). -
dataarray de objetos requeridoCampos del documento.
Ver 22 atributos hijos
-
data[].idstring requeridoID del campo (
fie_…). -
data[].objectstring, siempre "document_field"Siempre
"document_field". -
data[].namestring requeridoNombre del campo (igual al widget del PDF).
-
data[].typeenum requeridoTipo de campo.
Valores:
textdatecheckboxradioselectsignatureinitialsstamp -
data[].rolestring puede ser nullRol dueño, o
nullsi nadie lo ha reclamado. -
data[].signerIdstring puede ser nullFirmante (
sgr_…) que lo llena, si el rol ya tiene firmante. -
data[].requiredbooleanSi debe llenarse antes de firmar.
-
data[].labelstring puede ser nullEtiqueta que ve el firmante.
-
data[].optionsarray de string puede ser nullOpciones de
select/radio. -
data[].groupstring puede ser nullGrupo de exclusión mutua.
-
data[].sourceenum puede ser nullDe dónde nació el campo.
Valores:
acroformdrawntemplate -
data[].readOnlybooleanPrellenado por el emisor y bloqueado para el firmante.
-
data[].fixedWidthbooleanAncho fijo: si el texto no cabe, el campo no se alarga y se encoge la letra (mínimo 6 pt).
-
data[].placeholderstring puede ser nullTexto de ejemplo que ve el firmante en el campo vacío, o
nullsi no tiene. -
data[].maxLengthinteger puede ser nullCuántos caracteres admite el campo, o
nullsi no tiene límite. -
data[].pageinteger requeridoPágina 1-based.
-
data[].rectobjeto requeridoRectángulo en % del papel.
Ver 4 atributos hijos
-
data[].rect.xnumber requeridoX izquierdo, porcentaje del ancho de la página.
-
data[].rect.ynumber requeridoY superior, porcentaje del alto de la página.
-
data[].rect.widthnumber requeridoAncho en porcentaje de la página.
-
data[].rect.heightnumber requeridoAlto en porcentaje de la página.
-
-
data[].positionintegerPosición del PDF dentro del documento (compuestos).
-
data[].statusenum requeridopendinghasta que su firmante firma.Valores:
pendingsigned -
data[].valueobjeto requeridoValor actual del campo.
Ver 2 atributos hijos
-
data[].value.textstring puede ser nullValor de texto / fecha (
YYYY-MM-DD) / opción elegida. -
data[].value.checkedboolean puede ser nullEstado de una casilla.
-
-
data[].filledByenum puede ser nullQuién puso el valor:
owner(el emisor, por API o dashboard) osigner(el firmante dueño, versignerId).nullsi nadie lo ha llenado.Valores:
ownersigner -
data[].filledAtstring (fecha-hora ISO 8601) puede ser nullCuándo se puso el valor (ISO 8601);
nullsi nadie lo ha llenado.
-
-
unassignedCountinteger requeridoCuántos campos no tienen rol todavía.
-
hasMorebooleanSiempre
falseen esta colección acotada.
Create document field
POST /documents/{document_id}/fields
Agrega un campo a un documento que todavía no se envía. Igual que en plantillas: type, page, rect (en % del papel), role (se crea si no existe), required, label, options, group. Puedes mandar tu propio id (fie_…) para crearlo de forma idempotente, o aliasOf para que comparta valor con otro campo del mismo nombre.
Parámetros
-
document_idstring ruta requerido -
Idempotency-Keystring headerClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
idstring puede ser nullID (
fie_…) elegido por el cliente para crear de forma idempotente; si falta, lo asigna AllSign. -
typeenum requeridoTipo de campo.
Valores:
textdatecheckboxradioselectsignatureinitialsstamp -
pageinteger requeridoPágina 1-based dentro del PDF elegido.
-
rectobjeto requeridoRectángulo en % del papel.
Ver 4 atributos hijos
-
rect.xnumber requeridoX izquierdo, porcentaje del ancho de la página.
-
rect.ynumber requeridoY superior, porcentaje del alto de la página.
-
rect.widthnumber requeridoAncho en porcentaje de la página.
-
rect.heightnumber requeridoAlto en porcentaje de la página.
-
-
documentPdfIdstring puede ser nullEl PDF del documento que recibe el campo (compuestos). Forma preferida: es estable aunque el documento se reordene. Requerido si el documento tiene más de un PDF y no mandas
position. -
positioninteger puede ser nullAlias heredado de
documentPdfId: posición 1-based del PDF dentro del documento. Frágil — cambia si el documento se reordena. UsadocumentPdfIdcuando puedas. -
namestring puede ser nullNombre del campo; se genera si falta.
-
aliasOfstring puede ser nullNombre de un campo existente: este hueco comparte su valor.
-
rolestring puede ser nullRol dueño (se crea si no existe).
-
signerstring puede ser nullFirmante dueño (
sgr_…). El campo hereda el rol de ese firmante; no lo combines conrole. -
requiredbooleanSi es obligatorio.
-
labelstring puede ser nullEtiqueta para el firmante.
-
optionsarray de string puede ser nullOpciones de
select/radio. -
groupstring puede ser nullGrupo de exclusión mutua.
-
fixedWidthboolean puede ser nullAncho fijo: si el texto no cabe, el campo no se alarga y se encoge la letra (mínimo 6 pt).
-
placeholderstring puede ser nullTexto de ejemplo que ve el firmante en el campo vacío. Solo campos de texto; en fecha, casilla y firma se ignora.
-
maxLengthinteger puede ser nullCuántos caracteres admite el campo (1 a 500). Solo campos de texto; en fecha, casilla y firma se ignora.
Devuelve
201 El campo creado.
Ver los 22 atributos de la respuesta
-
idstring requeridoID del campo (
fie_…). -
objectstring, siempre "document_field"Siempre
"document_field". -
namestring requeridoNombre del campo (igual al widget del PDF).
-
typeenum requeridoTipo de campo.
Valores:
textdatecheckboxradioselectsignatureinitialsstamp -
rolestring puede ser nullRol dueño, o
nullsi nadie lo ha reclamado. -
signerIdstring puede ser nullFirmante (
sgr_…) que lo llena, si el rol ya tiene firmante. -
requiredbooleanSi debe llenarse antes de firmar.
-
labelstring puede ser nullEtiqueta que ve el firmante.
-
optionsarray de string puede ser nullOpciones de
select/radio. -
groupstring puede ser nullGrupo de exclusión mutua.
-
sourceenum puede ser nullDe dónde nació el campo.
Valores:
acroformdrawntemplate -
readOnlybooleanPrellenado por el emisor y bloqueado para el firmante.
-
fixedWidthbooleanAncho fijo: si el texto no cabe, el campo no se alarga y se encoge la letra (mínimo 6 pt).
-
placeholderstring puede ser nullTexto de ejemplo que ve el firmante en el campo vacío, o
nullsi no tiene. -
maxLengthinteger puede ser nullCuántos caracteres admite el campo, o
nullsi no tiene límite. -
pageinteger requeridoPágina 1-based.
-
rectobjeto requeridoRectángulo en % del papel.
Ver 4 atributos hijos
-
rect.xnumber requeridoX izquierdo, porcentaje del ancho de la página.
-
rect.ynumber requeridoY superior, porcentaje del alto de la página.
-
rect.widthnumber requeridoAncho en porcentaje de la página.
-
rect.heightnumber requeridoAlto en porcentaje de la página.
-
-
positionintegerPosición del PDF dentro del documento (compuestos).
-
statusenum requeridopendinghasta que su firmante firma.Valores:
pendingsigned -
valueobjeto requeridoValor actual del campo.
Ver 2 atributos hijos
-
value.textstring puede ser nullValor de texto / fecha (
YYYY-MM-DD) / opción elegida. -
value.checkedboolean puede ser nullEstado de una casilla.
-
-
filledByenum puede ser nullQuién puso el valor:
owner(el emisor, por API o dashboard) osigner(el firmante dueño, versignerId).nullsi nadie lo ha llenado.Valores:
ownersigner -
filledAtstring (fecha-hora ISO 8601) puede ser nullCuándo se puso el valor (ISO 8601);
nullsi nadie lo ha llenado.
Update document field
PATCH /documents/{document_id}/fields/{field_id}
Mueve, renombra, reasigna o configura un campo — y prellena: value (texto, fecha YYYY-MM-DD o true/false para casillas) deja el valor puesto por el emisor (filledBy: "owner"); readOnly: true lo bloquea para que el firmante lo vea pero no lo cambie. Un campo ya firmado no se puede tocar: responde 409 FIELD_CONFLICT.
Parámetros
-
document_idstring ruta requerido -
field_idstring ruta requerido -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
namestring puede ser nullNuevo nombre (renombra sus huecos hermanos).
-
pageinteger puede ser nullNueva página 1-based.
-
rectobjeto puede ser nullNuevo rectángulo.
Ver 4 atributos hijos
-
rect.xnumber requeridoX izquierdo, porcentaje del ancho de la página.
-
rect.ynumber requeridoY superior, porcentaje del alto de la página.
-
rect.widthnumber requeridoAncho en porcentaje de la página.
-
rect.heightnumber requeridoAlto en porcentaje de la página.
-
-
rolestring puede ser nullNuevo rol (
nulllo deja sin rol). -
signerstring puede ser nullNuevo firmante dueño (
sgr_…); el campo hereda su rol.nulllo deja sin dueño. No lo combines conrole. -
requiredboolean puede ser nullSi es obligatorio.
-
labelstring puede ser nullEtiqueta para el firmante.
-
optionsarray de string puede ser nullOpciones.
-
groupstring puede ser nullGrupo.
-
valuestring o boolean puede ser nullPrellenar (texto o casilla).
-
readOnlyboolean puede ser nullBloquear el valor prellenado para el firmante.
-
fixedWidthboolean puede ser nullAncho fijo (
true) o que el campo se alargue con el texto (false). -
placeholderstring puede ser nullTexto de ejemplo, solo en campos de texto; se comparte con los huecos del mismo nombre. Vacío o
nulllo quita. -
maxLengthinteger puede ser nullCuántos caracteres admite (1 a 500), solo en campos de texto; se comparte con los huecos del mismo nombre.
nullquita el límite. Un valor ya guardado más largo no se recorta.
Devuelve
200 El campo ya actualizado, con value, filledBy y filledAt.
Ver los 22 atributos de la respuesta
-
idstring requeridoID del campo (
fie_…). -
objectstring, siempre "document_field"Siempre
"document_field". -
namestring requeridoNombre del campo (igual al widget del PDF).
-
typeenum requeridoTipo de campo.
Valores:
textdatecheckboxradioselectsignatureinitialsstamp -
rolestring puede ser nullRol dueño, o
nullsi nadie lo ha reclamado. -
signerIdstring puede ser nullFirmante (
sgr_…) que lo llena, si el rol ya tiene firmante. -
requiredbooleanSi debe llenarse antes de firmar.
-
labelstring puede ser nullEtiqueta que ve el firmante.
-
optionsarray de string puede ser nullOpciones de
select/radio. -
groupstring puede ser nullGrupo de exclusión mutua.
-
sourceenum puede ser nullDe dónde nació el campo.
Valores:
acroformdrawntemplate -
readOnlybooleanPrellenado por el emisor y bloqueado para el firmante.
-
fixedWidthbooleanAncho fijo: si el texto no cabe, el campo no se alarga y se encoge la letra (mínimo 6 pt).
-
placeholderstring puede ser nullTexto de ejemplo que ve el firmante en el campo vacío, o
nullsi no tiene. -
maxLengthinteger puede ser nullCuántos caracteres admite el campo, o
nullsi no tiene límite. -
pageinteger requeridoPágina 1-based.
-
rectobjeto requeridoRectángulo en % del papel.
Ver 4 atributos hijos
-
rect.xnumber requeridoX izquierdo, porcentaje del ancho de la página.
-
rect.ynumber requeridoY superior, porcentaje del alto de la página.
-
rect.widthnumber requeridoAncho en porcentaje de la página.
-
rect.heightnumber requeridoAlto en porcentaje de la página.
-
-
positionintegerPosición del PDF dentro del documento (compuestos).
-
statusenum requeridopendinghasta que su firmante firma.Valores:
pendingsigned -
valueobjeto requeridoValor actual del campo.
Ver 2 atributos hijos
-
value.textstring puede ser nullValor de texto / fecha (
YYYY-MM-DD) / opción elegida. -
value.checkedboolean puede ser nullEstado de una casilla.
-
-
filledByenum puede ser nullQuién puso el valor:
owner(el emisor, por API o dashboard) osigner(el firmante dueño, versignerId).nullsi nadie lo ha llenado.Valores:
ownersigner -
filledAtstring (fecha-hora ISO 8601) puede ser nullCuándo se puso el valor (ISO 8601);
nullsi nadie lo ha llenado.
Delete document field
DELETE /documents/{document_id}/fields/{field_id}
Quita un campo del documento. Un campo ya firmado no se puede borrar (409 FIELD_CONFLICT).
Parámetros
-
document_idstring ruta requerido -
field_idstring ruta requerido -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
204 Campo eliminado.
Assign fields to a role
POST /documents/{document_id}/fields:assign-role
Asigna varios campos a un rol de una sola vez (o role: null para dejarlos sin rol). Si el rol ya tiene firmante, los campos pasan a ese firmante en el mismo paso. Un campo ya firmado responde 409.
Parámetros
-
document_idstring ruta requerido -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
fieldIdsarray de string requeridoCampos (
fie_…) a reasignar. -
rolestring puede ser nullRol destino;
nulllos deja sin rol. -
signerstring puede ser nullFirmante destino (
sgr_…); los campos heredan su rol. Mandaroleosigner, no ambos.
Devuelve
200 Cuántos campos cambiaron y cómo quedaron.
Ver los 5 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "document_fields_assignment" -
documentIdstring requeridoEl documento (
doc_…). -
updatedinteger requeridoCuántos campos cambiaron de rol.
-
dataarray de objetos requeridoLos campos ya reasignados.
Ver 22 atributos hijos
-
data[].idstring requeridoID del campo (
fie_…). -
data[].objectstring, siempre "document_field"Siempre
"document_field". -
data[].namestring requeridoNombre del campo (igual al widget del PDF).
-
data[].typeenum requeridoTipo de campo.
Valores:
textdatecheckboxradioselectsignatureinitialsstamp -
data[].rolestring puede ser nullRol dueño, o
nullsi nadie lo ha reclamado. -
data[].signerIdstring puede ser nullFirmante (
sgr_…) que lo llena, si el rol ya tiene firmante. -
data[].requiredbooleanSi debe llenarse antes de firmar.
-
data[].labelstring puede ser nullEtiqueta que ve el firmante.
-
data[].optionsarray de string puede ser nullOpciones de
select/radio. -
data[].groupstring puede ser nullGrupo de exclusión mutua.
-
data[].sourceenum puede ser nullDe dónde nació el campo.
Valores:
acroformdrawntemplate -
data[].readOnlybooleanPrellenado por el emisor y bloqueado para el firmante.
-
data[].fixedWidthbooleanAncho fijo: si el texto no cabe, el campo no se alarga y se encoge la letra (mínimo 6 pt).
-
data[].placeholderstring puede ser nullTexto de ejemplo que ve el firmante en el campo vacío, o
nullsi no tiene. -
data[].maxLengthinteger puede ser nullCuántos caracteres admite el campo, o
nullsi no tiene límite. -
data[].pageinteger requeridoPágina 1-based.
-
data[].rectobjeto requeridoRectángulo en % del papel.
Ver 4 atributos hijos
-
data[].rect.xnumber requeridoX izquierdo, porcentaje del ancho de la página.
-
data[].rect.ynumber requeridoY superior, porcentaje del alto de la página.
-
data[].rect.widthnumber requeridoAncho en porcentaje de la página.
-
data[].rect.heightnumber requeridoAlto en porcentaje de la página.
-
-
data[].positionintegerPosición del PDF dentro del documento (compuestos).
-
data[].statusenum requeridopendinghasta que su firmante firma.Valores:
pendingsigned -
data[].valueobjeto requeridoValor actual del campo.
Ver 2 atributos hijos
-
data[].value.textstring puede ser nullValor de texto / fecha (
YYYY-MM-DD) / opción elegida. -
data[].value.checkedboolean puede ser nullEstado de una casilla.
-
-
data[].filledByenum puede ser nullQuién puso el valor:
owner(el emisor, por API o dashboard) osigner(el firmante dueño, versignerId).nullsi nadie lo ha llenado.Valores:
ownersigner -
data[].filledAtstring (fecha-hora ISO 8601) puede ser nullCuándo se puso el valor (ISO 8601);
nullsi nadie lo ha llenado.
-
List document roles
GET /documents/{document_id}/roles
Los roles del documento, en orden, con cuántos campos le pertenecen a cada uno (fieldCount) y quién lo ocupa (signerId, o null si nadie lo ha tomado). En un documento sequential cada rol trae su etapa (stage); en paralelo, null. El id (rol_…) es estable aunque renombres el rol, y es el que usa DELETE /documents/{id}/roles/{roleId}.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Los roles del documento.
Ver los 5 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "list"Siempre
"list". -
documentIdstring requeridoEl documento dueño de los roles (
doc_…). -
dataarray de objetos requeridoRoles del documento, en orden.
Ver 7 atributos hijos
-
data[].objectstring, siempre "document_role"Siempre
"document_role". -
data[].idstring requeridoId del rol (
rol_…), estable aunque lo renombres. -
data[].namestring requeridoNombre del rol, tal como lo traen los campos en su
role. -
data[].kindstringPapel del participante (token opaco):
signer,witness,notary,carbon_copy,approveroin_person_signer. -
data[].stageinteger puede ser nullEtapa de firma (1 = primera).
nullen orden paralelo. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo. -
data[].fieldCountinteger requeridoCuántos campos del documento le pertenecen.
-
data[].signerIdstring puede ser nullFirmante que lo ocupa (
sgr_…), onullsi nadie lo ha tomado.
-
-
hasMorebooleanSiempre
falseen esta colección acotada.
Delete a document role
DELETE /documents/{document_id}/roles/{role_id}
Borra un rol que nadie ocupa. Sus campos y variables no se borran: quedan sin rol, y la respuesta los lista en unassignedFields y unassignedVariables para que los asignes antes de enviar a firmar. Si el rol ya tiene firmante responde 409 ROLE_OCCUPIED: quita primero al firmante y luego el rol.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
role_idstring ruta requeridoID del rol (
rol_…), tal como lo devuelveGET /documents/{id}/roles. -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 El rol borrado, con los campos y variables que quedaron sin rol.
Ver los 7 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "document_role"Siempre
"document_role". -
idstring requeridoId del rol borrado (
rol_…). -
namestring requeridoNombre que tenía el rol.
-
deletedstring, siempre "true"Siempre
true. -
unassignedFieldsinteger requeridoCampos que quedaron sin rol; asígnalos antes de enviar a firmar.
-
unassignedVariablesinteger requeridoVariables que quedaron sin rol.
Import signing fields from a document
POST /documents/{document_id}/fields:from-document
Copia las cajas de firma (posiciones por rol) de otro documento ya firmado a este documento. Sirve para repetir un layout sin plantilla de por medio. Solo viaja la geometría, convertida a la hoja de este documento; ningún valor del documento origen.
Parámetros
-
document_idstring ruta requerido -
Idempotency-Keystring headerClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
documentIdstring puede ser nullDocumento (
doc_…) del que se copian los campos de firma. -
consolidatebooleanSi es
true, consolida campos de documentos comparables al documento destino (mismo origen/plantilla, mismo archivo o mismo hash) en vez de copiar uno solo.
Devuelve
200 Los campos del documento después de la copia.
Ver los 7 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "document_signing_fields_import"Siempre
"document_signing_fields_import". -
documentIdstring requeridoEl documento destino (
doc_…). -
matchedCountinteger requeridoCampos que encajaron al calcular la disposición.
-
totalCountinteger requeridoCampos considerados.
-
unmatchedarray de objetosCampos que no encajaron, con su rol/tipo/página.
Ver 3 atributos hijos
-
unmatched[].roleNamestring requeridoRol del campo que no encajó.
-
unmatched[].kindstring requeridoTipo del campo que no encajó.
-
unmatched[].pageinteger requeridoPágina 1-based del campo que no encajó.
-
-
fieldsarray de objetosCampos de firma creados en el documento destino (nuevos; los ya existentes no se repiten).
Ver 5 atributos hijos
-
fields[].idstring requeridoID del campo de firma creado (
fie_…). -
fields[].roleNamestring requeridoRol al que pertenece el campo.
-
fields[].kindstring requeridoTipo de campo:
signature,initials,name,dateovobo. -
fields[].pageinteger requeridoPágina 1-based.
-
fields[].rectobjeto requeridoRectángulo del campo, en % del papel.
Ver 4 atributos hijos
-
fields[].rect.xnumber requeridoX izquierdo, porcentaje del ancho de la página.
-
fields[].rect.ynumber requeridoY superior, porcentaje del alto de la página.
-
fields[].rect.widthnumber requeridoAncho en porcentaje de la página.
-
fields[].rect.heightnumber requeridoAlto en porcentaje de la página.
-
-
Download document file
GET /documents/{document_id}/file
El PDF del documento antes de enviarlo: con format=form conserva los widgets vivos con lo prellenado (para que el emisor lo revise en Acrobat); con format=flat lo hornea con los valores actuales. Después de la firma, el PDF con validez legal es la evidencia (GET /documents/{id}/evidence).
Parámetros
-
document_idstring ruta requerido -
formatenum queryform(default) conserva los widgets;flatlos hornea con lo prellenado.Valores:
formflat -
positioninteger queryPosición del PDF dentro de un expediente compuesto (default 1).
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 El PDF (application/pdf, Content-Disposition: attachment).
Get document values
GET /documents/{document_id}/values
Los valores de las variables {{ }} de un documento creado desde una plantilla DOCX: los templateValues con los que se creó y lo que llenaste después con PATCH …/values. Todas las variables las llena el remitente. Para los campos del formulario PDF, que sí llena el firmante, usa GET …/fields.
Parámetros
-
document_idstring ruta requerido -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Mapa nombre → valor con quién lo llenó.
Ver los 4 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "document_values"Siempre
"document_values". -
documentIdstring requeridoEl documento (
doc_…). -
dataarray de objetosValores actuales del documento.
Ver 2 atributos hijos
-
data[].namestring requeridoNombre de la variable — llave natural de
templateValues, nunca camelizada. -
data[].valuestring puede ser nullValor actual, o
nullsi aún no se llena.
-
Update document values
PATCH /documents/{document_id}/values
Escribe valores de variables {{ }} en un documento que todavía no se envía (draft) y regenera su PDF. Todas las variables las llena el remitente; los valores propuestos al firmante (proposals) se retiraron. Una vez enviado, los valores quedan fijos: responde 409 DOCUMENT_CONFLICT y no cambia nada — excepto en collecting_data (variables obligatorias ligadas a un rol de un documento anterior a este cambio, que los firmantes todavía están llenando): ahí solo acepta variables de un firmante (las del dueño responden 409 con lockedVariables), y cuando ya están todas el documento pasa a firma. Solo variables; los campos del formulario PDF se prellenan con PATCH …/fields/{id} o con values al crear.
Parámetros
-
document_idstring ruta requerido -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
valuesobjeto (llave → valor)Mapa nombre→valor a fusionar. Las llaves son los
namede las variables y conservan su forma natural (nombre_completo): nunca se camelizan. Un valor de un dato conslotsse escribe en todos los huecos.
Devuelve
200 Los valores ya mezclados.
Ver los 4 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "document_values"Siempre
"document_values". -
documentIdstring requeridoEl documento (
doc_…). -
dataarray de objetosValores actuales del documento.
Ver 2 atributos hijos
-
data[].namestring requeridoNombre de la variable — llave natural de
templateValues, nunca camelizada. -
data[].valuestring puede ser nullValor actual, o
nullsi aún no se llena.
-
Save the document as a template version
POST /documents/{document_id}/save-to-template
Guarda el documento tal como está —campos, roles, variables, orden de firma y ajustes— como una versión nueva de la plantilla.
Con templateId se agrega una versión a esa plantilla (created: false); sin él se crea una plantilla nueva a partir del documento (created: true). Las personas se guardan sólo con rememberSigners: true: sin eso el layout conserva los roles («Parte 1», «Parte 2»…) pero no quién los ocupó. Los valores que llenó el DUEÑO se guardan sólo con rememberFieldValues: true; lo que llenó un firmante nunca se guarda, tenga este flag el valor que tenga. Un documento con al menos una firma responde 409 DOCUMENT_ALREADY_SIGNED.
formView (fill o edit) es la vista con la que abrirá el formulario de los documentos que nazcan de la versión, y queda en layout.settings.formView. Si se omite, la versión hereda la de la última versión con layout de la plantilla.
El documento queda ligado a la plantilla y a la versión guardada, así que GET /documents/{id} ya responde con templateId y templateVersionId.
Parámetros
-
document_idstring ruta requeridoID del documento a guardar (
doc_…). -
Idempotency-Keystring headerClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
templateIdstring puede ser nullPlantilla a la que se guarda una versión nueva (
tmpl_…). Si se omite, se crea una plantilla nueva a partir del documento. -
namestring puede ser nullNombre de la plantilla nueva. Si se omite, se toma el del documento.
-
rememberSignersbooleanSi es
true, el layout guarda a las personas que hoy tienen cada rol para que el siguiente documento nazca con ellas. -
rememberFieldValuesbooleanSi es
true, la plantilla guarda los valores que el DUEÑO llenó (campos y variables) como default para el siguiente documento. Nunca guarda lo que llenó un firmante, tenga este flag el valor que tenga. -
formViewenum puede ser nullVista del formulario que guarda la versión en
layout.settings.formView:fill(Llenar) oedit(Editar campos). Si se omite o esnull, la versión hereda la de la última versión con layout de la plantilla; si no hay de dónde heredar, quedanully el formulario abre enedit.Valores:
filledit
Devuelve
201 La plantilla y la versión guardada, con created para saber si la plantilla es nueva.
Ver los 5 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "template_snapshot"Siempre
"template_snapshot". -
templateobjeto requeridoLa plantilla destino.
Ver 2 atributos hijos
-
template.idstring requeridoLa plantilla (
tmpl_…). -
template.namestring requeridoNombre de la plantilla.
-
-
versionobjeto requeridoLa versión que se acaba de guardar.
Ver 2 atributos hijos
-
version.idstring requeridoLa versión guardada (
tv_…). -
version.versionNumberinteger requeridoNúmero de versión guardada.
-
-
createdboolean requeridotruesi la plantilla se creó en esta llamada;falsesi ya existía.
List events
GET /documents/{document_id}/events
Lista la bitácora de eventos de un documento (creación, envío, firmas, etc.), paginada por cursor. type es un token del catálogo de eventos con namespace punteado recurso.enPasado (ej. document.created).
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
limitinteger queryResultados por página (1–100, default
20). -
startingAfterstring queryCursor: eventos después de este
id(evt_…). -
endingBeforestring queryCursor: eventos antes de este
id(evt_…). -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Sobre de paginación por cursor con la bitácora de eventos del documento.
Ver los 6 atributos de la respuesta
-
objectstring, siempre "list"Siempre
"list". -
dataarray de objetos requeridoArreglo de eventos del documento, más recientes primero.
Ver 11 atributos hijos
-
data[].livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
data[].idstring requeridoID del evento (
evt_…). -
data[].objectstring, siempre "event"Siempre
"event". -
data[].typestring requeridoTipo de evento (ej.
document.created,signer.signed). -
data[].documentIdstring requeridoDocumento asociado (
doc_…). -
data[].successboolean requeridoSi el evento fue exitoso.
-
data[].messagestring puede ser nullMensaje legible del evento.
-
data[].actorTypestring puede ser nullTipo de actor que originó el evento.
-
data[].signatureIdstring puede ser nullFirma asociada (
sgr_…), si aplica. -
data[].dataobjeto (llave → valor)Payload del evento. Solo las llaves de primer nivel se camelizan; los datos anidados quedan intactos.
-
data[].createdAtstring (fecha-hora ISO 8601) requeridoMomento del evento (ISO 8601).
-
-
hasMoreboolean requeridotruesi hay más eventos después de esta página. -
nextCursorstring puede ser nullCursor para la siguiente página (pásalo como
startingAfter). -
previousCursorstring puede ser nullCursor para la página anterior (pásalo como
endingBefore). -
limitinteger requeridoEl límite aplicado a esta página.
Get evidence bundle
GET /documents/{document_id}/evidence
Los 2 archivos de respaldo de un documento: el PDF sellado con todas las firmas (evidencePdf) y la constancia de conservación NOM-151 (nom151, null si el documento no es livemode). Ambos son null hasta que todos los firmantes completan — el workflow de Temporal que los genera termina unos segundos después de la última firma, así que haz poll de available en vez de asumir que ya existen justo al completarse el flujo.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 El bundle de evidencia — available indica si ya están listos los archivos.
Ver los 8 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
documentIdstring requeridoID del documento (
doc_…). -
availableboolean requeridotrueuna vez que todos los firmantes completaron. -
evidencePdfobjeto puede ser nullPDF sellado con todas las firmas y la bitácora de auditoría.
Ver 2 atributos hijos
-
evidencePdf.urlstring requeridoURL firmada para descargar el archivo (vigente 24 horas).
-
evidencePdf.sha256string puede ser nullHash SHA-256 del archivo, si ya se calculó.
-
-
nom151objeto puede ser nullConstancia de conservación NOM-151 (timestamp + cadena de hash).
nullsi el documento no eslivemode.Ver 2 atributos hijos
-
nom151.urlstring requeridoURL firmada para descargar el archivo (vigente 24 horas).
-
nom151.sha256string puede ser nullHash SHA-256 del archivo, si ya se calculó.
-
-
reasonenum puede ser nullPor qué
availablees false:document_not_signed(falta firma; no sirve poll-ear),evidence_generating(todos firmaron, el PDF se está armando; sí poll-ea),presigned_url_failed(el archivo existe pero no se pudo firmar la URL; reintenta).Valores:
document_not_signedevidence_generatingpresigned_url_failed -
signedCountintegerCuántos firmantes ya firmaron.
-
totalSignersintegerFirmantes del documento (incluye pendientes).
Attach an annex
POST /documents/{document_id}/annexes
Crea un documento nuevo —un anexo— colgado de un documento que ya firmaron todos. El cuerpo es el mismo de POST /documents (archivo o plantilla, firmantes, campos…) y el anexo tiene su propio ciclo de firma; el original no se toca. La respuesta es el anexo, con parentDocumentId apuntando al original.
Solo se anexa al documento raíz: anexar a un anexo responde 409 ANNEX_OF_ANNEX_NOT_ALLOWED, y un documento al que todavía le faltan firmas, 409 DOCUMENT_NOT_FULLY_SIGNED. Idempotency-Key obligatoria: un reintento con la misma llave devuelve el mismo anexo en vez de crear otro. Para ver el original con todos sus anexos usa GET /documents/{id}/family.
Parámetros
-
document_idstring ruta requeridoID del documento original, ya firmado por todos (
doc_…). -
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
sourceenum puede ser nullDiscriminador:
template,fileocompound. Opcional (se infiere), pero si lo mandas debe concordar con el campo presente.Valores:
templatefilecompound -
templateIdstring puede ser nullID de una plantilla existente (
tmpl_…). Requerido cuandosourceestemplate. -
templateValuesobjeto (llave → valor) puede ser nullMapa de valores para las variables de la plantilla, con llaves naturales del negocio (ej.
nombre_completo). Nunca se camelizan. -
valuesobjeto (llave → valor) puede ser nullPrellenado de campos del formulario PDF por nombre de campo, para cualquier rol. Los
valuesde cada firmante tienen prioridad sobre estos. -
readOnlyarray de string puede ser nullNombres de campos prellenados que ningún firmante puede cambiar.
-
fileobjeto puede ser nullArchivo inline cuando
sourceesfile. Mutuamente exclusivo contemplateId/documents.Ver 3 atributos hijos
-
file.contentstring requeridoContenido del archivo codificado en Base64. Máximo 10 MB decodificados.
-
file.fileTypestringTipo de archivo. Default
pdf. -
file.namestring puede ser nullNombre del archivo (ej.
contrato.pdf). Se valida contra path traversal.
-
-
documentsarray de objetos puede ser nullExpediente compound: 1..N piezas (archivo o plantilla). Mutuamente exclusivo con el
file/templateIdde un solo origen. Mismo cerebro quePOST /v2/documents/condocuments[].Ver 7 atributos hijos
-
documents[].fileobjeto puede ser nullArchivo inline (PDF/DOCX en base64). Mutuamente exclusivo con
templateId.Ver 3 atributos hijos
-
documents[].file.contentstring requeridoContenido del archivo codificado en Base64. Máximo 10 MB decodificados.
-
documents[].file.fileTypestringTipo de archivo. Default
pdf. -
documents[].file.namestring puede ser nullNombre del archivo (ej.
contrato.pdf). Se valida contra path traversal.
-
-
documents[].templateIdstring puede ser nullID de plantilla (
tmpl_…). Mutuamente exclusivo confile. -
documents[].templateValuesobjeto (llave → valor) puede ser nullValores owner-fixed para variables de este item (llaves naturales, no camelCase).
-
documents[].namestring puede ser nullNombre visible de esta pieza dentro del expediente.
-
documents[].kindenumRol de la pieza:
main,attachmentocover.Valores:
mainattachmentcover -
documents[].positioninteger puede ser nullOrden 1-based de concatenación. Si se omite, se asigna 1..N por índice.
-
documents[].dedupeScopeenumdocumentcomparte variables entre piezas;pdflas aísla a este item.Valores:
documentpdf
-
-
fieldsarray de objetos puede ser nullCampos de firma a colocar al crear (
anchorStringoposition). Cadaemail/phonedebe coincidir con unsigners[]. En compound usadocumentPdfPositionpara anclar a una pieza.Ver 10 atributos hijos
-
fields[].emailstring puede ser nullCorreo del firmante (debe coincidir con un
signers[].email). -
fields[].phonestring puede ser nullWhatsApp del firmante (debe coincidir con un
signers[].phone). -
fields[].pageNumberinteger puede ser nullPágina 1-based. En anclas, acota la búsqueda a esa página.
-
fields[].documentPdfPositioninteger puede ser nullCompound: posición 1-based del PDF de
documents[]al que pertenece este campo. -
fields[].anchorStringstring puede ser nullTexto ancla en el PDF. Mutuamente exclusivo con
position. -
fields[].anchorHorizontalAlignmentenumAlineación horizontal sobre el ancla. Ignorado en modo coordenadas.
Valores:
leftcenterright -
fields[].anchorVerticalAlignmentenumAlineación vertical sobre el ancla. Ignorado en modo coordenadas.
Valores:
topcenterbottom -
fields[].positionobjeto puede ser nullCoordenadas {x,y} en puntos PDF. Mutuamente exclusivo con
anchorString.Ver 2 atributos hijos
-
fields[].position.xnumber requerido -
fields[].position.ynumber requerido
-
-
fields[].heightnumberAlto del campo en puntos. El ancho es 2×.
-
fields[].includeInAllPagesbooleanSolo modo coordenadas: repetir el campo en todas las páginas.
-
-
sendInvitationsbooleanSi es true, dispara invitaciones al crear (equivale a v2
config.sendInvitations). FuerzastartAtStep=3. -
startAtStepintegerPaso inicial: 1=borrador, 2=campos, 3=esperando firmas (cobra al crear).
-
folderIdstring puede ser nullCarpeta destino (
fld_…). -
ownerEmailstring puede ser nullDueño del documento (email de un user del tenant). Equivale a v2
permissions.ownerEmail. -
namestring puede ser nullNombre visible del documento. Si se omite, se deriva de la plantilla o del archivo.
-
signersarray de objetos puede ser nullFirmantes a adjuntar al crear el documento.
Ver 10 atributos hijos
-
signers[].emailstring puede ser nullCorreo del firmante. Manda
emailophone, no los dos: cada firmante recibe su invitación por un solo canal (422VALIDATION_ERRORsi llegan ambos). -
signers[].phonestring puede ser nullTeléfono del firmante (para invitación por WhatsApp). Excluye a
email: un firmante lleva un solo canal. -
signers[].namestring puede ser nullNombre del firmante.
-
signers[].roleNamestring puede ser nullRol semántico del firmante (ej.
proveedor), usado para auto-asignar variables de plantilla marcadas con ese rol. Opcional — si se omite, las variables deben asignarse manualmente. -
signers[].valuesobjeto (llave → valor) puede ser nullPrellenado de campos del formulario PDF por nombre de campo (texto o casilla). Sólo aplica a plantillas PDF con campos; las llaves nunca se camelizan.
-
signers[].readOnlyarray de string puede ser nullNombres de campos prellenados que el firmante no puede cambiar.
-
signers[].routingOrderinteger puede ser nullEtapa de firma (1 = primera). Firmantes con el mismo número firman en paralelo. Solo aplica con
signingOrder: "sequential". ConsigningOrder: "sequential"es obligatorio en todos los firmantes: si le falta a alguno, la creación se rechaza con 422VALIDATION_ERRORdiciendo en cuál falta, en vez de repartir etapas por su cuenta. Dentro del producto un firmante sin número cuenta como etapa 1, pero la API v3 no asume ese default: unsequentiala medio numerar sería un documento que firma todo el mundo a la vez sin decirlo. Después de crear, la etapa se cambia conPATCH /v3/documents/{documentId}/signers/{signerId}. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo. -
signers[].kindenumsigner(default) firma.carbon_copyes un observador: nunca firma ni recibe campos, solo los avisos deeventsy, concapability: notify_and_view, un enlace de solo lectura. Un observador necesitaemaily no llevaroleName,routingOrder,valuesnireadOnly. Después de crear se administran con/v3/documents/{documentId}/observers.Valores:
signercarbon_copy -
signers[].capabilityenum puede ser nullSolo observadores:
notify(default) onotify_and_view.Valores:
notifynotify_and_view -
signers[].eventsarray de string puede ser nullSolo observadores: avisos que recibe.
document.completed(default),document.expired,document.voided.
-
-
signatureValidationobjeto puede ser nullNivel de validez legal (autógrafa/NOM-151/FEA/biometría/videofirma). Por default: solo autógrafa.
Ver 6 atributos hijos
-
signatureValidation.autografabooleanFirma autógrafa (trazo en pantalla).
-
signatureValidation.nom151booleanConstancia de conservación NOM-151.
-
signatureValidation.feabooleanFirma Electrónica Avanzada (FEA/e.firma SAT).
-
signatureValidation.biometricSignaturebooleanVerificación biométrica (selfie vs. identificación, anti-deepfake).
-
signatureValidation.idScanbooleanEscaneo de identificación oficial (INE, pasaporte).
-
signatureValidation.videofirmabooleanGraba video del firmante durante el proceso de firma.
-
-
expiresAtstring (fecha-hora ISO 8601) puede ser nullFecha límite de firma (ISO 8601).
-
modeenum puede ser nullPasa
draftpara crear el documento sin cobrar ni enviar invitaciones (fuerzastartAtStep=1). Si se omite, se conserva el comportamiento actual.Valores:
draft -
signingOrderenum puede ser nullparallel(default): todos los firmantes reciben su invitación a la vez.sequential: cada firmante traeroutingOrdery solo la etapa activa puede firmar; la siguiente se invita cuando la anterior termina.sequentialexigeroutingOrderen cada firmante (422VALIDATION_ERRORsi falta alguno) yparallelno lo admite en ninguno. El modo no se puede cambiar después; las etapas sí, conPATCH /v3/documents/{documentId}/signers/{signerId}. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo.Valores:
parallelsequential
Devuelve
201 El anexo creado (mismo shape que Retrieve document), con parentDocumentId. — el objeto Document
Get a document's family
GET /documents/{document_id}/family
El documento original y todos sus anexos, en orden de creación. Puedes pedirla con el id de cualquier miembro: rootId siempre es el original. Cada miembro trae su status, si es original o annex (kind) y de quién es anexo (parentDocumentId).
Parámetros
-
document_idstring ruta requeridoID de cualquier documento de la familia (
doc_…). -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 El original y sus anexos.
Ver los 4 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "document_family"Siempre
"document_family". -
rootIdstring requeridoEl documento original de la familia (
doc_…). -
dataarray de objetos requeridoEl original y todos sus anexos, en orden cronológico ascendente.
Ver 5 atributos hijos
-
data[].idstring requeridoID del documento (
doc_…). -
data[].statusenum requeridoEstado del ciclo de vida de este documento.
Valores:
draftcollecting_dataawaiting_signaturescorrectingprocessingcompletedexpiredvoidederror -
data[].kindenum requeridooriginal(sin padre) oannex(tieneparentDocumentId).Valores:
originalannex -
data[].parentDocumentIdstring puede ser nullDocumento del que este es anexo (
doc_…), onullsi es el original. -
data[].createdAtstring (fecha-hora ISO 8601) requeridoFecha de creación (ISO 8601).
-
Remind signer
POST /documents/{document_id}/signers/{signer_id}/remind
Reenvía la invitación (email o WhatsApp, según cómo se agregó el firmante) a UN firmante que todavía no completa. Exige Idempotency-Key: un reintento de red con la misma llave devuelve la primera respuesta y no manda un segundo correo. Además hay un freno de un recordatorio cada 4 horas por firmante. La respuesta 200 trae nextAllowedAt: guárdala y no vuelvas a recordar antes de esa hora. Si lo haces, la respuesta es 429 RATE_LIMITED con la hora solo dentro de detail y sin Retry-After, así que no la reintentes con backoff.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
signer_idstring ruta requeridoID del firmante a recordar (
sgr_…). -
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Confirmación del recordatorio — incluye nextAllowedAt.
Ver los 6 atributos de la respuesta
-
documentIdstring requeridoID del documento (
doc_…). -
signerIdstring requeridoID del firmante recordado (
sgr_…). -
sentAtstring (fecha-hora ISO 8601) requeridoCuándo se procesó el recordatorio.
-
nextAllowedAtstring (fecha-hora ISO 8601) requeridoAntes de esta fecha, un nuevo recordatorio a este firmante responde 429.
-
channelstring requeridoCanal de entrega:
emailowhatsapp. -
deliveredboolean requeridotruesi el envío tuvo éxito.falseno falla la petición — el remitente puede reintentar.
Remind all pending signers
POST /documents/{document_id}/signers/remind-all
Reenvía el recordatorio a TODOS los firmantes pendientes del documento de una sola llamada — la versión masiva de POST .../remind.
Cada firmante conserva su propio enfriamiento de 4h y su propio turno de orden de firma: uno en cooldown, o que todavía no le toca, nunca bloquea a los demás — aparece en results[] con su propio status (sent | failed | rate_limited | skipped) en vez de fallar toda la petición.
Solo falla como un todo si el DOCUMENTO no existe (404) o está en un estado terminal (409, reason: document_terminal) — ahí no hay nada que recordarle a nadie.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Un resultado por firmante pendiente en results[], cada uno con su status (sent, failed, rate_limited o skipped); sentCount cuenta solo los recordatorios que sí salieron.
Ver los 3 atributos de la respuesta
-
documentIdstring requeridoID del documento (
doc_…). -
sentCountinteger requeridoCuántos firmantes SÍ recibieron el recordatorio.
-
resultsarray de objetos requeridoVer 7 atributos hijos
-
results[].signerIdstring requeridoID del firmante (
sgr_…). -
results[].signerNamestring puede ser nullNombre para mostrar del firmante, si se conoce.
-
results[].statusstring requeridosent|failed|rate_limited|skipped. -
results[].deliveredbooleantruesi el envío tuvo éxito (solo aplica cuando status=sent). -
results[].channelstring puede ser nullCanal de entrega, cuando status=sent.
-
results[].nextAllowedAtstring (fecha-hora ISO 8601) puede ser nullCuándo se puede volver a recordar a este firmante.
-
results[].detailstring puede ser nullMotivo legible cuando status != sent.
-
Reassign signer
POST /documents/{document_id}/signers/{signer_id}/reassign
Cambia a la persona detrás de un firmante sin perder su lugar: el sgr_… es el mismo, sus campos y su etapa en el orden de firma sobreviven, y su rol conserva nombre y cajas. Manda exactamente uno de email o phone (correo → WhatsApp y de regreso están soportados, una llamada a la vez). Lo que el firmante anterior había capturado se descarta — sus campos vuelven a vacío, su verificación de identidad no se hereda y sus ligas vivas se revocan; lo que prellenó el emisor se conserva. Si ya había capturado algo, la API exige confirm: true (409 INVALID_STATE_TRANSITION con reason: "confirmation_required" si falta). Si el documento ya está enviado y es el turno de ese firmante, la invitación sale sola al nuevo contacto; al anterior no se le avisa. Un firmante que ya firmó no se puede reasignar (409). Idempotency-Key obligatorio: un reintento con la misma llave devuelve la misma respuesta sin volver a mover nada.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
signer_idstring ruta requeridoID del firmante a reasignar (
sgr_…). Es el que se conserva. -
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
emailstring puede ser nullNuevo correo del firmante.
-
phonestring puede ser nullNuevo teléfono (E.164) del firmante.
-
namestring puede ser nullNombre a mostrar mientras no haya IDV.
-
reasonstring puede ser nullMotivo — queda en el historial del documento.
-
confirmbooleanEl firmante anterior ya capturó algo (campos, verificación de identidad). Pásalo en
truepara confirmar que se descarta.
Devuelve
200 El firmante ya con la persona nueva: mismo id, email/phone/name nuevos, status reinicia a pending o sent según si la invitación salió.
Ver los 11 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
idstring requeridoID del firmante (
sgr_…). -
objectstring, siempre "signer"Siempre
"signer". -
documentIdstring requeridoDocumento al que pertenece (
doc_…). -
emailstring puede ser nullCorreo del firmante.
-
phonestring puede ser nullTeléfono del firmante.
-
namestring puede ser nullNombre del firmante.
-
statusenum requeridoEstado por firmante:
pending,sent,signed,cancelled,waiting_turn.Valores:
pendingsentsignedcancelledwaiting_turn -
signedAtstring (fecha-hora ISO 8601) puede ser nullMomento de la firma (ISO 8601), o
nullsi aún no firma. -
routingOrderinteger puede ser nullEtapa de firma en un documento
sequential;nullen paralelo. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo. -
deliveryobjeto puede ser nullEntrega de la última invitación vigente (no revocada).
nullsi no hay nada rastreado: invitaciones por correo sin rebote, anteriores al seguimiento, o un firmante recién reasignado.Ver 5 atributos hijos
-
delivery.channelenum requeridoCanal de la última invitación:
whatsappoemail.Valores:
whatsappemail -
delivery.statusenum requeridoEstado de entrega según el proveedor:
sent,delivered,readofailed. En correo solo se informafailed(rebote).Valores:
sentdeliveredreadfailed -
delivery.reasonenum puede ser nullPor qué falló, en un catálogo estable de AllSign:
provider_payment_issue,undeliverable,bounceduother.nullsi no falló.Valores:
provider_payment_issueundeliverablebouncedother -
delivery.providerCodeinteger puede ser nullCódigo de error original del proveedor (p. ej. de WhatsApp), o
null. -
delivery.updatedAtstring (fecha-hora ISO 8601) requeridoMomento del último cambio de estado (ISO 8601).
-
Sign as a signer (sandbox only)
POST /sandbox/signers/{signer_id}/sign
Firma por un firmante en sandbox, como si hubiera abierto su liga: estampa su firma en sus cajas y lo deja signed. Responde 200 en el momento, con el firmante ya firmado; si era el último, en la misma llamada el documento queda completed con su PDF de evidencia (en sandbox, con una constancia NOM-151 simulada, sin validez legal). Emite los mismos webhooks que una firma real: signer.signed y, si era el último, document.completed.
Úsalo con signer-pending@sandbox.allsign.io, que nunca firma solo y no recibe correo, para recorrer a tu ritmo el ciclo real: awaiting_signatures → signer.signed → completed (ver Entornos).
Solo existe en sandbox. Con una key live responde 409 ENVIRONMENT_MISMATCH y no cambia nada: en producción cada firmante firma con su propia liga.
409 INVALID_STATE_TRANSITION cuando el estado lo impide, con reason: never_invited (el documento todavía no se envía), document_terminal (ya terminó, se anuló, venció o está en corrección), signer_terminal (ese firmante ya firmó o fue cancelado) o variables_pending (faltan variables requeridas de su rol). En un documento sequential, 409 NOT_YOUR_TURN si su etapa todavía no abre. Un signerId que no existe, de otra organización o de otro entorno responde 404 SIGNER_NOT_FOUND.
Idempotency-Key es opcional. Si la mandas, un reintento con la misma llave te devuelve la respuesta original (con Idempotency-Replayed: true) en vez del 409 que daría volver a firmar a alguien que ya firmó.
Parámetros
-
signer_idstring ruta requeridoID del firmante (
sgr_…), el que devuelveGET /documents/{documentId}/signers. -
Idempotency-Keystring headerClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 El firmante ya firmado (status: "signed"). Si era el último, el documento ya está completed.
Ver los 11 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
idstring requeridoID del firmante (
sgr_…). -
objectstring, siempre "signer"Siempre
"signer". -
documentIdstring requeridoDocumento al que pertenece (
doc_…). -
emailstring puede ser nullCorreo del firmante.
-
phonestring puede ser nullTeléfono del firmante.
-
namestring puede ser nullNombre del firmante.
-
statusenum requeridoEstado por firmante:
pending,sent,signed,cancelled,waiting_turn.Valores:
pendingsentsignedcancelledwaiting_turn -
signedAtstring (fecha-hora ISO 8601) puede ser nullMomento de la firma (ISO 8601), o
nullsi aún no firma. -
routingOrderinteger puede ser nullEtapa de firma en un documento
sequential;nullen paralelo. Disponible sólo si el orden de firma está habilitado en el entorno; si no, pedirsequentialresponde 403SEQUENTIAL_NOT_AVAILABLEy todo documento firma en paralelo. -
deliveryobjeto puede ser nullEntrega de la última invitación vigente (no revocada).
nullsi no hay nada rastreado: invitaciones por correo sin rebote, anteriores al seguimiento, o un firmante recién reasignado.Ver 5 atributos hijos
-
delivery.channelenum requeridoCanal de la última invitación:
whatsappoemail.Valores:
whatsappemail -
delivery.statusenum requeridoEstado de entrega según el proveedor:
sent,delivered,readofailed. En correo solo se informafailed(rebote).Valores:
sentdeliveredreadfailed -
delivery.reasonenum puede ser nullPor qué falló, en un catálogo estable de AllSign:
provider_payment_issue,undeliverable,bounceduother.nullsi no falló.Valores:
provider_payment_issueundeliverablebouncedother -
delivery.providerCodeinteger puede ser nullCódigo de error original del proveedor (p. ej. de WhatsApp), o
null. -
delivery.updatedAtstring (fecha-hora ISO 8601) requeridoMomento del último cambio de estado (ISO 8601).
-
List document observers
GET /documents/{document_id}/observers
Lista quién observa el documento: los observadores agregados a este documento (origin: "document", con su id rol_…) y los de la organización, que observan todos los documentos (origin: "organization", id: null y locked: true; esos se quitan desde Ajustes → Observadores, no por documento). Un observador nunca firma: recibe los avisos que eligió en events y, con capability: "notify_and_view", un enlace de solo lectura. status vale pending_verification mientras el correo de un observador de organización no confirme la regla. Es una colección acotada: hasMore siempre es false.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 Lista (object: "list") con documentId y los observadores en data.
Ver los 5 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "list"Siempre
"list". -
documentIdstring requeridoEl documento (
doc_…). -
dataarray de objetos requeridoObservadores del documento y de la organización.
Ver 10 atributos hijos
-
data[].objectstring, siempre "document_observer"Siempre
"document_observer". -
data[].idstring puede ser nullId del observador (
rol_…).nullen los de la organización: esos se quitan desde Ajustes → Observadores, no por documento. -
data[].originenum requeridodocumentsi se agregó a este documento,organizationsi observa todos.Valores:
documentorganization -
data[].emailstring puede ser nullCorreo del observador.
-
data[].namestring puede ser nullNombre del observador.
-
data[].capabilityenum requeridonotify: solo avisos.notify_and_view: avisos y un enlace de solo lectura.Valores:
notifynotify_and_view -
data[].eventsarray de string requeridoAvisos que recibe:
document.completed(default),document.expiredydocument.voided. -
data[].lockedboolean requeridotruecuando viene de la organización y no se puede quitar aquí. -
data[].statusstringactive, opending_verificationsi el correo aún no confirma la regla global. -
data[].createdAtstring (fecha-hora ISO 8601) puede ser nullCuándo se agregó.
-
-
hasMorebooleanSiempre
falseen esta colección acotada.
Add document observer
POST /documents/{document_id}/observers
Agrega a alguien que nunca firma y solo recibe avisos del documento. Manda email (obligatorio) y, si quieres, name, capability —notify (default, solo avisos) o notify_and_view (avisos y un enlace de solo lectura)— y events, los avisos que recibe (default ["document.completed"]).
Es idempotente por correo: si ese correo ya observa el documento, se actualizan sus ajustes y la respuesta trae created: false; pasar de notify_and_view a notify revoca sus enlaces de solo lectura. Un observador nuevo recibe un correo de aviso, y los webhooks suscritos reciben document.observer_added cuando se agrega o cambian sus ajustes.
Un firmante del documento no puede ser también observador (409 OBSERVER_IS_SIGNER) y un documento anulado ya no acepta observadores (409 DOCUMENT_CONFLICT). Requiere la función document-observers activa en tu cuenta; sin ella responde 403 FEATURE_NOT_AVAILABLE y no cambia nada.
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
emailstring requeridoCorreo del observador. Un firmante no puede observar.
-
namestring puede ser nullNombre del observador.
-
capabilityenumnotify(default) onotify_and_view(avisos y enlace de solo lectura).Valores:
notifynotify_and_view -
eventsarray de string puede ser nullAvisos que recibe:
document.completed(default),document.expiredydocument.voided.
Devuelve
201 Siempre 201: el observador agregado o actualizado en observer, y created en false si ese correo ya observaba y solo cambiaron sus ajustes.
Ver los 3 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
observerobjeto requeridoEl observador agregado o actualizado.
Ver 10 atributos hijos
-
observer.objectstring, siempre "document_observer"Siempre
"document_observer". -
observer.idstring puede ser nullId del observador (
rol_…).nullen los de la organización: esos se quitan desde Ajustes → Observadores, no por documento. -
observer.originenum requeridodocumentsi se agregó a este documento,organizationsi observa todos.Valores:
documentorganization -
observer.emailstring puede ser nullCorreo del observador.
-
observer.namestring puede ser nullNombre del observador.
-
observer.capabilityenum requeridonotify: solo avisos.notify_and_view: avisos y un enlace de solo lectura.Valores:
notifynotify_and_view -
observer.eventsarray de string requeridoAvisos que recibe:
document.completed(default),document.expiredydocument.voided. -
observer.lockedboolean requeridotruecuando viene de la organización y no se puede quitar aquí. -
observer.statusstringactive, opending_verificationsi el correo aún no confirma la regla global. -
observer.createdAtstring (fecha-hora ISO 8601) puede ser nullCuándo se agregó.
-
-
createdboolean requeridofalsesi ya observaba y solo se actualizaron sus ajustes.
Remove document observer
DELETE /documents/{document_id}/observers/{observer_id}
Quita un observador agregado a este documento y revoca sus enlaces de solo lectura; los webhooks suscritos reciben document.observer_removed. Solo quita observadores de documento: los de la organización (origin: "organization") no tienen id y se quitan desde Ajustes → Observadores. Requiere la función document-observers activa en tu cuenta (403 FEATURE_NOT_AVAILABLE).
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
observer_idstring ruta requeridoID del observador (
rol_…): elidque devuelven la lista o el alta. -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 object: "document_observer", el id quitado y deleted: true.
Ver los 4 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
objectstring, siempre "document_observer"Siempre
"document_observer". -
idstring requeridoId del observador quitado (
rol_…). -
deletedstring, siempre "true"Siempre
true.
Transfer document owner
POST /documents/{document_id}/transfer-owner
Pasa el documento a otro miembro del mismo espacio de trabajo, nunca a otro espacio. Lo puede hacer el dueño actual o un owner/admin del espacio; cualquier otro recibe 403 PERMISSION_DENIED. Manda exactamente uno de ownerUserId (usr_…) u ownerEmail.
Firmas, evidencia, constancias NOM-151 y quién creó el documento no cambian. La bitácora gana un evento document.owner_transferred (con tu reason, si la mandas) y los webhooks suscritos reciben el mismo evento. Con keepPreviousOwnerAccess (default true) el dueño anterior conserva acceso de lectura; en false lo pierde.
Si el documento pertenece a una cadena, manda transferChain: true (409 DOCUMENT_CONFLICT si falta): se traspasa la cadena completa y documentIds dice cuáles cambiaron. Idempotency-Key obligatoria. Repetir el traspaso hacia quien ya es dueño responde transferred: false, igual que reintentar con la misma llave. Requiere la función document-owner-transfer activa en tu cuenta (403 FEATURE_NOT_AVAILABLE).
Parámetros
-
document_idstring ruta requeridoID del documento (
doc_…). -
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
ownerUserIdstring puede ser nullNuevo dueño (
usr_…). Debe ser miembro del espacio del documento. -
ownerEmailstring puede ser nullNuevo dueño por correo. Alternativa a
ownerUserId; manda solo uno. -
keepPreviousOwnerAccessbooleanSi es
true, el dueño anterior conserva acceso de lectura. Si esfalse, pierde el acceso. -
transferChainbooleanObligatorio en
truesi el documento pertenece a una cadena: se traspasa la cadena completa. -
reasonstring puede ser nullMotivo del traspaso. Queda en la bitácora del documento y en el webhook
document.owner_transferred.
Devuelve
200 documentId, ownerId y previousOwnerId (usr_…), transferred y documentIds, los documentos que cambiaron de dueño.
Ver los 5 atributos de la respuesta
-
documentIdstring requeridoDocumento pedido (
doc_…). -
ownerIdstring requeridoDueño después del traspaso (
usr_…). -
previousOwnerIdstring requeridoDueño antes del traspaso (
usr_…). -
transferredboolean requeridofalsesi el documento ya era de ese dueño o la mismaIdempotency-Keyya lo había traspasado. -
documentIdsarray de stringDocumentos que cambiaron de dueño: el pedido y, con
transferChain, el resto de su cadena.
Transfer documents owner
POST /documents/transfer-owner
Traspasa varios documentos al miembro toUserId (usr_…) del mismo espacio, en una sola llamada síncrona de hasta 500 documentos. Manda exactamente uno de documentIds (máximo 500) o fromUserId, que toma todos los documentos de ese dueño en el espacio y en el entorno de tu API key. Si fromUserId tiene más de 500, responde 422 VALIDATION_ERROR y no mueve nada: pártelos en tandas con documentIds.
Éxito parcial por diseño: un documento que no existe, de otro espacio o entorno, que no puedes administrar o de una cadena sin transferChains: true falla solo su elemento (items[].status: "error" con el motivo en error). Un 200 no significa que todo se movió: revisa items[] y los contadores.
Todos los documentos traspasados comparten el mismo batchId en su bitácora y en su webhook document.owner_transferred. keepPreviousOwnerAccess y reason funcionan igual que en el traspaso de uno. Idempotency-Key obligatoria. Requiere la función document-owner-transfer activa en tu cuenta (403 FEATURE_NOT_AVAILABLE).
Parámetros
-
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
fromUserIdstring puede ser nullTraspasa todos los documentos de este dueño (
usr_…) en el espacio. Alternativa adocumentIds. -
documentIdsarray de string puede ser nullDocumentos a traspasar (
doc_…, máximo 500 por petición). Alternativa afromUserId. -
toUserIdstring requeridoNuevo dueño (
usr_…). Debe ser miembro del espacio. -
keepPreviousOwnerAccessbooleanSi es
false, cada dueño anterior pierde el acceso a lo traspasado. -
transferChainsbooleanPermite traspasar documentos de cadenas (con la cadena completa). Sin él, esos documentos fallan.
-
reasonstring puede ser nullMotivo del traspaso. Queda en la bitácora del documento y en el webhook
document.owner_transferred.
Devuelve
200 batchId, totalCount, transferredCount, unchangedCount, errorCount e items[], con status transferred, unchanged o error por documento.
Ver los 6 atributos de la respuesta
-
batchIdstring requeridoIdentificador del lote; viaja como
batchIden la bitácora y en cada webhook. -
totalCountinteger requeridoDocumentos considerados.
-
transferredCountinteger requeridoCuántos cambiaron de dueño.
-
unchangedCountinteger requeridoCuántos ya eran del nuevo dueño.
-
errorCountinteger requeridoCuántos no se pudieron traspasar.
-
itemsarray de objetos requeridoResultado por documento.
Ver 3 atributos hijos
-
items[].documentIdstring requeridoEl id tal como se pidió.
-
items[].statusenum requeridoOpen enum: clients MUST tolerate values not in this list.
Valores:
transferredunchangederror -
items[].errorstring puede ser nullMotivo si
statuseserror.
-
Bulk delete documents
DELETE /documents/bulk
Elimina hasta 100 documentos en una sola petición. Éxito parcial por diseño (igual que v2): un id mal formado, un id de otro tenant, o un documento en un estado no eliminable (ya firmado o en progreso) falla SOLO ese elemento — nunca todo el lote. Revisa items[].status por cada id, nunca asumas éxito total por un 200.
Parámetros
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
documentIdsarray de string requeridoIDs de los documentos a eliminar (
doc_…, máximo 100 por petición).
Devuelve
200 Resultado por elemento (totalCount/successCount/errorCount/items[]) — mismo vocabulario que Create bulk send.
Ver los 4 atributos de la respuesta
-
totalCountinteger requeridoDocumentos pedidos.
-
successCountinteger requeridoCuántos se eliminaron.
-
errorCountinteger requeridoCuántos no se pudieron eliminar.
-
itemsarray de objetos requeridoResultado por documento, en el orden pedido.
Ver 3 atributos hijos
-
items[].documentIdstring requeridoEl id tal como se envió en la petición.
-
items[].statusenum requeridoPer-document outcome. Open enum — same vocabulary shape as BulkSendItemStatus on purpose: bulk-delete and bulk-send speak one vocabulary for "result per item of a bulk op". Open enum: clients MUST tolerate values not in this list.
Valores:
deletederror -
items[].errorstring puede ser nullMotivo si
statuseserror(id inválido, no encontrado, no eliminable).
-
Create bulk send
POST /documents/bulk-sends
Sube un PDF una sola vez y crea N documentos independientes, uno por destinatario, cada uno con su propio enlace de firma. Asíncrono: valida todo de forma síncrona (créditos, tamaño de archivo, forma del body; un correo de destinatario inválido es 422 VALIDATION_ERROR y no se crea ni se cobra nada) y agenda el trabajo pesado — la respuesta es un 202 con el lote en processing y cada items[].status en pending. Haz poll de GET /documents/bulk-sends/{id} (Get bulk send) hasta que status cambie a completed o partialError.
Cada documento del lote nace con una caja de firma para su destinatario, las mismas cajas automáticas que pone Create document cuando recibe signers sin fields. Costo: cada documento creado se cobra lo mismo que enviarlo por separado con POST /documents/{id}/send (los créditos de su signatureValidation en tu plan), aunque mandes sendInvites: false; no es 1 crédito por documento. El saldo de todo el lote se revisa antes de agendar (402 INSUFFICIENT_CREDITS).
Idempotency-Key es obligatorio: un reintento con la misma key devuelve el MISMO 202 + el mismo id de lote (Idempotency-Replayed: true) en vez de agendar el trabajo dos veces — nunca cobra créditos ni invita dos veces por un retry.
Parámetros
-
Idempotency-Keystring header requeridoClave única (UUID v4) que vuelve idempotente el POST: un reintento con la misma clave repite la respuesta original en lugar de volver a crear, cobrar o notificar.
-
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Cuerpo de la petición
-
namestring requeridoNombre del documento (aparece en el email de invitación de cada destinatario).
-
fileobjeto requeridoEl PDF a enviar — el mismo archivo para todos los destinatarios.
Ver 3 atributos hijos
-
file.contentstring requeridoContenido del archivo codificado en Base64. Máximo 10 MB decodificados.
-
file.fileTypestringTipo de archivo. Default
pdf. -
file.namestring puede ser nullNombre del archivo (ej.
contrato.pdf). Se valida contra path traversal.
-
-
recipientsarray de objetos requeridoDestinatarios; cada uno recibe su propio documento y enlace de firma. Máximo 200.
Ver 3 atributos hijos
-
recipients[].emailstring requeridoCorreo del destinatario.
-
recipients[].namestring puede ser nullNombre del destinatario (opcional).
-
recipients[].rolestring puede ser nullNombre del rol del documento al que se enlaza este destinatario. Sin él, el firmante estrena un rol propio y no hereda los campos del rol de la plantilla.
-
-
signatureValidationobjeto puede ser nullNivel de validez legal, aplicado a cada documento del lote.
Ver 6 atributos hijos
-
signatureValidation.autografabooleanFirma autógrafa (trazo en pantalla).
-
signatureValidation.nom151booleanConstancia de conservación NOM-151.
-
signatureValidation.feabooleanFirma Electrónica Avanzada (FEA/e.firma SAT).
-
signatureValidation.biometricSignaturebooleanVerificación biométrica (selfie vs. identificación, anti-deepfake).
-
signatureValidation.idScanbooleanEscaneo de identificación oficial (INE, pasaporte).
-
signatureValidation.videofirmabooleanGraba video del firmante durante el proceso de firma.
-
-
sendInvitesbooleanSi es
false, crea los documentos sin despachar la invitación de firma todavía.
Devuelve
202 El lote agendado — header Location apunta a Get bulk send; status: "processing", cada item pending.
Ver los 7 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
idstring requeridoID del lote de envío (
bat_…). -
statusenum requeridoBatch-level outcome.
createBulkSendis asynchronous: it returnsprocessingimmediately and the client pollsgetBulkSenduntilcompletedorpartialError. Open enum (x-extensible-enum) — a tolerant reader must not hard-fail on a value it doesn't recognise. Open enum: clients MUST tolerate values not in this list.Valores:
processingcompletedpartial_error -
totalCountinteger requeridoDestinatarios pedidos.
-
successCountinteger requeridoDocumentos creados exitosamente.
-
errorCountinteger requeridoDestinatarios que fallaron — ver
items[].error. -
itemsarray de objetos requeridoResultado por destinatario, en el orden pedido.
Ver 4 atributos hijos
-
items[].recipientEmailstring requeridoEl correo tal como se envió en la petición.
-
items[].documentIdstring puede ser nullID del documento creado (
doc_…).nullsi este destinatario falló. -
items[].statusenum requeridoPer-recipient outcome. Open enum — see BulkSendStatus. Open enum: clients MUST tolerate values not in this list.
Valores:
pendingsentcreatederror -
items[].errorstring puede ser nullMotivo si
statuseserror.
-
Get bulk send
GET /documents/bulk-sends/{batch_id}
Consulta el resultado de un createBulkSend asíncrono. Usa el MISMO objeto que la respuesta 202 original — status empieza en processing (todos los items pending) y se asienta en completed o partialError una vez que cada destinatario fue intentado.
Parámetros
-
batch_idstring ruta requeridoID del lote (
bat_…), del headerLocationde Create bulk send. -
AllSign-Versionenum headerFecha del contrato contra la que quieres resolver la petición. Si la omites se sirve la versión vigente; una fecha desconocida responde 400
UNSUPPORTED_API_VERSION.Valores:
2026-07-11
Devuelve
200 El lote — status/items[] reflejan el progreso más reciente.
Ver los 7 atributos de la respuesta
-
livemodeboolean requeridotrueen entornolive,falseentest/dev(marca de agua, sin validez legal). -
idstring requeridoID del lote de envío (
bat_…). -
statusenum requeridoBatch-level outcome.
createBulkSendis asynchronous: it returnsprocessingimmediately and the client pollsgetBulkSenduntilcompletedorpartialError. Open enum (x-extensible-enum) — a tolerant reader must not hard-fail on a value it doesn't recognise. Open enum: clients MUST tolerate values not in this list.Valores:
processingcompletedpartial_error -
totalCountinteger requeridoDestinatarios pedidos.
-
successCountinteger requeridoDocumentos creados exitosamente.
-
errorCountinteger requeridoDestinatarios que fallaron — ver
items[].error. -
itemsarray de objetos requeridoResultado por destinatario, en el orden pedido.
Ver 4 atributos hijos
-
items[].recipientEmailstring requeridoEl correo tal como se envió en la petición.
-
items[].documentIdstring puede ser nullID del documento creado (
doc_…).nullsi este destinatario falló. -
items[].statusenum requeridoPer-recipient outcome. Open enum — see BulkSendStatus. Open enum: clients MUST tolerate values not in this list.
Valores:
pendingsentcreatederror -
items[].errorstring puede ser nullMotivo si
statuseserror.
-