Saltar al contenido principal

Consultar la trazabilidad de un proceso

GET /document/roadmap

Este servicio devuelve la trazabilidad completa de un proceso de firma: quién lo creó, quiénes participan en él y qué ocurrió en cada momento. Es el servicio que usas para auditar un proceso, para reconstruir su historia ante una reclamación o para alimentar un tablero de seguimiento.

La respuesta trae los datos del proceso, la lista de participantes y un registro de actividad ordenado cronológicamente de forma ascendente, del evento más antiguo al más reciente. No tiene paginación ni filtros: se devuelve el proceso completo en una sola llamada.

Qué cubre esta página

Esta página documenta la trazabilidad del proceso: los eventos de notificación, recordatorio, lectura, firma, aprobación, rechazo, cancelación y reactivación. Para consultar el estado actual del proceso y de cada participante usa GET /document, y para leer los mensajes concretos de una conversación de WhatsApp usa GET /whatsapp/records.


Autenticación

Incluye tu llave publica en el encabezado Authorization.

Authorization: puk_xxx...

Parámetros de consulta

NombreTipoRequeridoDescripción
codeStringRequeridoCódigo del proceso del que quieres la trazabilidad. De 9 o 10 caracteres.

code acepta el código de un contrato (9 caracteres) o de un documento (10 caracteres); es el mismo valor que devuelve GET /document en el campo code.

El proceso debe ser de tu compañía

La consulta está limitada a la compañía dueña de la llave pública. Un código que no existe y un código que pertenece a otra compañía devuelven el mismo error, DOCUMENT_NOT_FOUND.


🧪 Ejemplos de uso

tip

Puedes copiar cualquiera de los ejemplos según el lenguaje de tu preferencia.

🔹 Obtener la trazabilidad de un proceso

curl --location 'https://api.auco.ai/v1.5/ext/document/roadmap?code=CODEDOCUM' \
--header 'Authorization: puk_tuClavePublica'

📥 Ejemplos de respuesta

🔹 Proceso firmado por WhatsApp

{
"name": "Contrato de servicios",
"documentCode": "CODEDOCUM",
"createdAt": "2026-06-26T21:48:42.755Z",
"author": {
"name": "Ana Gómez",
"email": "example@auco.ai"
},
"participants": [
{
"id": "01",
"name": "Juan Pérez",
"role": "SIGNER",
"phone": "+573001234567"
}
],
"activityLog": [
{
"action": "NOTIFICATION_SIGN",
"platform": "WHATSAPP",
"participant": "01",
"timestamp": "2026-06-26T21:48:44.307Z",
"by": "+573001234567"
},
{
"action": "PARTICIPANT_READ",
"platform": "WHATSAPP",
"participant": "01",
"timestamp": "2026-06-26T21:49:47.523Z",
"by": "+573001234567"
},
{
"action": "PARTICIPANT_SIGN",
"platform": "WHATSAPP",
"participant": "01",
"timestamp": "2026-06-26T21:50:10.940Z",
"by": "+573001234567"
}
]
}

🔸 Proceso con varios participantes, un rechazo y una cancelación

{
"name": "Contrato de servicios",
"documentCode": "CODEDOCUM",
"createdAt": "2026-02-10T14:02:11.418Z",
"author": {
"name": "Ana Gómez",
"email": "example@auco.ai"
},
"participants": [
{
"id": "01",
"name": "Juan Pérez",
"role": "SIGNER",
"email": "juan.perez@example.com",
"phone": "+573001234567",
"location": {
"lat": 4.6533326179999995,
"lng": -74.05834928765297,
"street": "Calle 98 15-17, 110221 Bogotá, Colombia"
},
"ipAddress": "190.24.10.55 Bogotá, Bogota D.C., Colombia"
},
{
"id": "02",
"name": "María Rueda",
"role": "APPROVER",
"email": "maria.rueda@example.com"
},
{
"name": "Auditoría Interna",
"role": "READER",
"email": "auditoria@example.com"
}
],
"activityLog": [
{
"action": "NOTIFICATION_SIGN",
"platform": "EMAIL",
"participant": "01",
"timestamp": "2026-02-10T14:02:13.902Z",
"by": "juan.perez@example.com"
},
{
"action": "PARTICIPANT_READ",
"platform": "EMAIL",
"participant": "01",
"timestamp": "2026-02-10T15:31:08.114Z",
"by": "juan.perez@example.com",
"ip": "190.24.10.55"
},
{
"action": "PARTICIPANT_SIGN",
"platform": "EMAIL",
"participant": "01",
"timestamp": "2026-02-10T15:33:44.660Z",
"by": "juan.perez@example.com",
"ip": "190.24.10.55"
},
{
"action": "NOTIFICATION_APPROVER",
"platform": "EMAIL",
"participant": "02",
"timestamp": "2026-02-10T15:33:47.201Z",
"by": "maria.rueda@example.com"
},
{
"action": "REMINDER_APPROVE",
"platform": "EMAIL",
"participant": "02",
"timestamp": "2026-02-11T15:33:47.318Z",
"by": "maria.rueda@example.com"
},
{
"action": "PARTICIPANT_REJECT",
"platform": "EMAIL",
"participant": "02",
"timestamp": "2026-02-11T16:10:29.775Z",
"by": "maria.rueda@example.com",
"message": "El anexo 2 no corresponde al servicio contratado."
},
{
"action": "CANCEL_SIGN",
"platform": "ARCHIVE",
"participant": "ARCHIVE",
"timestamp": "2026-02-11T16:44:02.031Z",
"by": "example@auco.ai"
}
]
}

🔸 Proceso creado sin notificar

Un proceso creado con notification: false existe y tiene participantes, pero todavía no ha generado eventos: activityLog llega vacío.

{
"name": "Contrato de servicios",
"documentCode": "CODEDOCUM",
"createdAt": "2026-02-10T14:02:11.418Z",
"author": {
"name": "Ana Gómez",
"email": "example@auco.ai"
},
"participants": [
{
"id": "01",
"name": "Juan Pérez",
"role": "SIGNER",
"email": "juan.perez@example.com"
}
],
"activityLog": []
}

📋 Campos de la respuesta

CampoTipoDescripción
nameStringNombre del proceso, tal como se definió al crearlo.
documentCodeStringCódigo del proceso consultado. Coincide con el code que enviaste.
createdAtStringFecha y hora de creación del proceso, en formato ISO 8601 y zona UTC.
authorObjectOpcional. Usuario de tu compañía que creó el proceso. No aparece si el creador ya no existe como usuario.
author.nameStringNombre del creador del proceso.
author.emailStringOpcional. Correo electrónico del creador del proceso.
participantsArray<Object>Personas involucradas en el proceso: firmantes, aprobadores y observadores. Llega vacío ([]) si el proceso no tiene participantes.
participants[].idStringOpcional. Identificador del participante dentro del proceso. Es el valor al que apunta activityLog[].participant. Los observadores no lo traen, y tampoco los participantes que todavía no tienen actividad registrada.
participants[].nameStringOpcional. Nombre del participante.
participants[].roleStringRol del participante en el proceso. Ver Roles.
participants[].emailStringOpcional. Correo electrónico del participante.
participants[].phoneStringOpcional. Teléfono del participante en formato internacional, con indicativo de país y el signo +.
participants[].locationObjectOpcional. Ubicación registrada del participante durante el proceso. Solo aparece si Auco la capturó.
participants[].location.latNumberLatitud, en grados decimales.
participants[].location.lngNumberLongitud, en grados decimales.
participants[].location.streetStringDirección aproximada derivada de las coordenadas.
participants[].ipAddressStringOpcional. Texto libre con la dirección IP registrada del participante. Puede llegar en varios formatos: solo la IP, o la IP acompañada de la ubicación aproximada derivada de ella. No lo interpretes como una IP limpia.
activityLogArray<Object>Eventos del proceso, ordenados cronológicamente de forma ascendente: el primer elemento es el más antiguo. Llega vacío ([]) si el proceso no tiene actividad.
activityLog[].actionStringEvento ocurrido. Ver Acciones.
activityLog[].platformStringCanal por el que ocurrió el evento. Ver Plataformas.
activityLog[].participantStringid del participante al que corresponde el evento, o el valor especial ARCHIVE cuando el evento es del proceso y no de una persona.
activityLog[].timestampStringFecha y hora del evento, en formato ISO 8601 y zona UTC.
activityLog[].byStringOpcional. Identificador con el que se ejecutó o recibió la acción: el correo electrónico cuando platform es EMAIL y el teléfono cuando es WHATSAPP.
activityLog[].ipStringOpcional. Dirección IP desde la que se registró el evento. Solo aparece cuando Auco la recibió.
activityLog[].messageStringOpcional. Texto asociado al evento, por ejemplo el motivo que el participante escribió al rechazar.
Los campos opcionales solo llegan cuando hay dato

author, id, name, email, phone, location, ipAddress, by, ip y message se omiten de la respuesta cuando no hay valor: no llegan en null ni como cadena vacía. Tu integración debe comprobar la existencia de la clave antes de leerla, en lugar de asumir que el objeto siempre trae la misma forma.

participant no siempre es una persona

activityLog[].participant normalmente es el id de un elemento de participants[], pero los eventos que afectan al proceso completo llegan con participant: "ARCHIVE". Ese valor no cruza con participants[].id: si intentas resolverlo contra la lista de participantes no encontrarás coincidencia. Ver Eventos del proceso.


📖 Diccionario de trazabilidad

Las tres columnas que interpretas de cada evento son action (qué pasó), platform (por dónde) y participant (a quién). Estas tablas recogen los valores que Auco emite hoy.

El catálogo no está cerrado

Pueden aparecer valores de action, platform y role que no estén en estas tablas: el catálogo crece con el producto. No construyas tu integración asumiendo que la lista es cerrada. Trata un valor desconocido como un evento que aún no sabes clasificar —muéstralo tal cual, regístralo— en lugar de descartarlo o de hacer fallar el procesamiento.

Acciones (activityLog[].action)

Notificaciones enviadas por Auco

actionSignificado
NOTIFICATION_SIGNInvitación a firmar enviada
NOTIFICATION_APPROVERInvitación a aprobar enviada
NOTIFICATION_FINISHNotificación de finalización enviada
NOTIFICATION_FAILED_SIGNInvitación a firmar fallida

Recordatorios

actionSignificado
REMINDER_SIGNRecordatorio de firma enviado
REMINDER_APPROVERecordatorio de aprobación enviado
REMINDER_UPLOADRecordatorio de carga
REMINDER_PAYMENTRecordatorio de pago

Los recordatorios pueden venir de la programación automática del proceso o de un envío manual con POST /document/reminder.

Acciones del participante

actionSignificado
PARTICIPANT_READDocumento visto
PARTICIPANT_SIGNDocumento firmado
PARTICIPANT_APPROVEDocumento aprobado
PARTICIPANT_REJECTDocumento rechazado
READ_PARTICIPANTDocumento visto
READ_PARTICIPANT es equivalente a PARTICIPANT_READ

Algunos procesos registran el evento de lectura como READ_PARTICIPANT. Significa exactamente lo mismo que PARTICIPANT_READ: el participante abrió el documento. Si clasificas eventos por su valor de action, trata los dos como el mismo evento.

Cambios en el proceso

actionSignificado
UPDATE_SIGNERParticipante actualizado
UPDATE_SIGNFirma actualizada
CANCEL_SIGNProceso cancelado
REACTIVATION_SIGNProceso reactivado

Roles (participants[].role)

ValorSignificadoDescripción
SIGNERFirmanteDebe firmar el documento. Es el rol por defecto.
APPROVERAprobadorDebe aprobar o rechazar el documento, sin firmarlo.
READERObservadorRecibe el documento para consultarlo; no firma ni aprueba.

El rol se define al crear el proceso y se devuelve tal cual, así que también puedes encontrar valores propios de tu integración.

Plataformas (activityLog[].platform)

ValorDescripción
EMAILEl evento ocurrió por correo electrónico.
WHATSAPPEl evento ocurrió por WhatsApp.
ARCHIVEEl evento se ejecutó desde el archivo web de Auco, no desde un canal al participante.

Cuando platform es WHATSAPP puedes obtener el detalle de la conversación —los mensajes y sus estados de entrega— con GET /whatsapp/records.

Eventos del proceso (participant: "ARCHIVE")

Algunos eventos no pertenecen a un participante sino al proceso completo: por ejemplo, una cancelación hecha desde el archivo web de Auco. Esos eventos llegan con participant: "ARCHIVE" y su campo by identifica al usuario de tu compañía que ejecutó la acción, no a un firmante.

Trátalos como eventos a nivel de proceso: no intentes resolver ARCHIVE contra participants[].id, porque nunca habrá coincidencia.


⚠️ Respuestas de error

CódigoDescripción
400Error de validación del parámetro code (falta, o su longitud no está entre 9 y 10 caracteres), o proceso no encontrado (DOCUMENT_NOT_FOUND).
401Autenticación inválida o ausente

DOCUMENT_NOT_FOUND se devuelve cuando el proceso no existe o cuando no pertenece a la compañía de la llave pública con la que consultas.