Skip to main content

Retrieve the Traceability of a Process

GET /document/roadmap

This service returns the full traceability of a signature process: who created it, who takes part in it, and what happened at every point in time. It is the service you use to audit a process, to reconstruct its history in response to a claim, or to feed a tracking dashboard.

The response contains the process data, the list of participants, and an activity log sorted in ascending chronological order, from the oldest event to the most recent one. It has no pagination and no filters: the whole process is returned in a single call.

What this page covers

This page documents the traceability of the process: notification, reminder, read, signature, approval, rejection, cancellation, and reactivation events. To query the current status of the process and of each participant, use GET /document; to read the individual messages of a WhatsApp conversation, use GET /whatsapp/records.


Authentication

Include your public key in the Authorization header.

Authorization: puk_xxx...

Query Parameters

NameTypeRequiredDescription
codeStringRequiredCode of the process you want the traceability of. Either 9 or 10 characters.

code accepts the code of a contract (9 characters) or of a document (10 characters); it is the same value GET /document returns in the code field.

The process must belong to your company

The query is limited to the company that owns the public key. A code that does not exist and a code that belongs to another company return the same error, DOCUMENT_NOT_FOUND.


🧪 Usage Examples

tip

You can copy any of the examples depending on your preferred language.

🔹 Retrieve the traceability of a process

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

📥 Response Examples

🔹 Process signed over WhatsApp

{
"name": "Service Agreement",
"documentCode": "CODEDOCUM",
"createdAt": "2026-06-26T21:48:42.755Z",
"author": {
"name": "Sarah Miller",
"email": "example@auco.ai"
},
"participants": [
{
"id": "01",
"name": "John Smith",
"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"
}
]
}

🔸 Process with several participants, a rejection, and a cancellation

{
"name": "Service Agreement",
"documentCode": "CODEDOCUM",
"createdAt": "2026-02-10T14:02:11.418Z",
"author": {
"name": "Sarah Miller",
"email": "example@auco.ai"
},
"participants": [
{
"id": "01",
"name": "John Smith",
"role": "SIGNER",
"email": "john@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": "Emily Clark",
"role": "APPROVER",
"email": "emily@example.com"
},
{
"name": "Internal Audit",
"role": "READER",
"email": "audit@example.com"
}
],
"activityLog": [
{
"action": "NOTIFICATION_SIGN",
"platform": "EMAIL",
"participant": "01",
"timestamp": "2026-02-10T14:02:13.902Z",
"by": "john@example.com"
},
{
"action": "PARTICIPANT_READ",
"platform": "EMAIL",
"participant": "01",
"timestamp": "2026-02-10T15:31:08.114Z",
"by": "john@example.com",
"ip": "190.24.10.55"
},
{
"action": "PARTICIPANT_SIGN",
"platform": "EMAIL",
"participant": "01",
"timestamp": "2026-02-10T15:33:44.660Z",
"by": "john@example.com",
"ip": "190.24.10.55"
},
{
"action": "NOTIFICATION_APPROVER",
"platform": "EMAIL",
"participant": "02",
"timestamp": "2026-02-10T15:33:47.201Z",
"by": "emily@example.com"
},
{
"action": "REMINDER_APPROVE",
"platform": "EMAIL",
"participant": "02",
"timestamp": "2026-02-11T15:33:47.318Z",
"by": "emily@example.com"
},
{
"action": "PARTICIPANT_REJECT",
"platform": "EMAIL",
"participant": "02",
"timestamp": "2026-02-11T16:10:29.775Z",
"by": "emily@example.com",
"message": "Exhibit 2 does not match the contracted service."
},
{
"action": "CANCEL_SIGN",
"platform": "ARCHIVE",
"participant": "ARCHIVE",
"timestamp": "2026-02-11T16:44:02.031Z",
"by": "example@auco.ai"
}
]
}

🔸 Process created without notifying

A process created with notification: false exists and has participants, but has not generated any event yet: activityLog comes back empty.

{
"name": "Service Agreement",
"documentCode": "CODEDOCUM",
"createdAt": "2026-02-10T14:02:11.418Z",
"author": {
"name": "Sarah Miller",
"email": "example@auco.ai"
},
"participants": [
{
"id": "01",
"name": "John Smith",
"role": "SIGNER",
"email": "john@example.com"
}
],
"activityLog": []
}

📋 Response Fields

FieldTypeDescription
nameStringName of the process, as it was defined when the process was created.
documentCodeStringCode of the queried process. It matches the code you sent.
createdAtStringDate and time the process was created, in ISO 8601 format and UTC.
authorObjectOptional. User of your company who created the process. It does not appear if the creator no longer exists as a user.
author.nameStringName of the process creator.
author.emailStringOptional. Email address of the process creator.
participantsArray<Object>People involved in the process: signers, approvers, and viewers. Comes back empty ([]) if the process has no participants.
participants[].idStringOptional. Identifier of the participant within the process. It is the value activityLog[].participant points to. Viewers do not include it, and neither do participants with no recorded activity yet.
participants[].nameStringOptional. Name of the participant.
participants[].roleStringRole of the participant in the process. See Roles.
participants[].emailStringOptional. Email address of the participant.
participants[].phoneStringOptional. Participant's phone number in international format, with country code and the + sign.
participants[].locationObjectOptional. Location recorded for the participant during the process. It only appears if Auco captured it.
participants[].location.latNumberLatitude, in decimal degrees.
participants[].location.lngNumberLongitude, in decimal degrees.
participants[].location.streetStringApproximate address derived from the coordinates.
participants[].ipAddressStringOptional. Free-form text with the IP address recorded for the participant. It may arrive in several formats: the IP alone, or the IP followed by the approximate location derived from it. Do not parse it as a clean IP address.
activityLogArray<Object>Events of the process, sorted in ascending chronological order: the first element is the oldest one. Comes back empty ([]) if there is no activity.
activityLog[].actionStringEvent that took place. See Actions.
activityLog[].platformStringChannel through which the event took place. See Platforms.
activityLog[].participantStringid of the participant the event belongs to, or the special value ARCHIVE when the event belongs to the process and not to a person.
activityLog[].timestampStringDate and time of the event, in ISO 8601 format and UTC.
activityLog[].byStringOptional. Identifier the action was performed with or delivered to: the email address when platform is EMAIL, and the phone number when it is WHATSAPP.
activityLog[].ipStringOptional. IP address the event was recorded from. It only appears when Auco received it.
activityLog[].messageStringOptional. Text associated with the event, for example the reason the participant wrote when rejecting.
Optional fields only arrive when there is data

author, id, name, email, phone, location, ipAddress, by, ip, and message are omitted from the response when there is no value: they do not arrive as null or as an empty string. Your integration should check whether the key exists before reading it, instead of assuming the object always has the same shape.

participant is not always a person

activityLog[].participant is usually the id of an element of participants[], but events that affect the whole process arrive with participant: "ARCHIVE". That value does not cross-reference participants[].id: if you try to resolve it against the participant list you will not find a match. See Process-level events.


📖 Traceability Dictionary

The three columns you interpret for every event are action (what happened), platform (through which channel), and participant (to whom). These tables list the values Auco emits today.

The catalog is not closed

Values of action, platform, and role that are not in these tables may show up: the catalog grows with the product. Do not build your integration assuming the list is closed. Treat an unknown value as an event you cannot classify yet — display it as is, log it — instead of discarding it or letting your processing fail.

Actions (activityLog[].action)

Notifications sent by Auco

actionMeaning
NOTIFICATION_SIGNInvitation to Sign Sent
NOTIFICATION_APPROVERInvitation to Approve Sent
NOTIFICATION_FINISHCompletion Notification Sent
NOTIFICATION_FAILED_SIGNSign Invitation Failed

Reminders

actionMeaning
REMINDER_SIGNSignature Reminder Sent
REMINDER_APPROVEApproval Reminder Sent
REMINDER_UPLOADUpload Reminder
REMINDER_PAYMENTPayment Reminder

Reminders may come from the automatic schedule of the process or from a manual send with POST /document/reminder.

Participant actions

actionMeaning
PARTICIPANT_READDocument Viewed
PARTICIPANT_SIGNDocument Signed
PARTICIPANT_APPROVEDocument Approved
PARTICIPANT_REJECTDocument Rejected
READ_PARTICIPANTDocument Viewed
READ_PARTICIPANT is equivalent to PARTICIPANT_READ

Some processes record the read event as READ_PARTICIPANT. It means exactly the same as PARTICIPANT_READ: the participant opened the document. If you classify events by their action value, treat both as the same event.

Changes to the process

actionMeaning
UPDATE_SIGNERParticipant Updated
UPDATE_SIGNSignature Updated
CANCEL_SIGNProcess Cancelled
REACTIVATION_SIGNProcess Reactivated

Roles (participants[].role)

ValueMeaningDescription
SIGNERSignerMust sign the document. It is the default role.
APPROVERApproverMust approve or reject the document, without signing it.
READERViewerReceives the document to review it; does not sign or approve.

The role is defined when the process is created and returned as is, so you may also find values specific to your integration.

Platforms (activityLog[].platform)

ValueDescription
EMAILThe event took place over email.
WHATSAPPThe event took place over WhatsApp.
ARCHIVEThe event was performed from the Auco web archive, not from a channel to a participant.

When platform is WHATSAPP you can get the detail of the conversation — the messages and their delivery statuses — with GET /whatsapp/records.

Process-level events (participant: "ARCHIVE")

Some events do not belong to a participant but to the process as a whole: a cancellation performed from the Auco web archive, for example. Those events arrive with participant: "ARCHIVE", and their by field identifies the user of your company who performed the action, not a signer.

Treat them as process-level events: do not try to resolve ARCHIVE against participants[].id, because there will never be a match.


⚠️ Error Responses

CodeDescription
400Validation error on the code parameter (missing, or its length is not between 9 and 10 characters), or process not found (DOCUMENT_NOT_FOUND).
401Invalid or missing authentication

DOCUMENT_NOT_FOUND is returned when the process does not exist or when it does not belong to the company of the public key you are querying with.