Skip to content

GetDocumentReadLogHistory API

Returns the complete read/view log history for a single specified user on a document. Each entry records one time the user opened or accessed a specific version of the document. This is the per-user variant of GetDocumentViewLog: instead of returning all users' access history for a document, it narrows results to the given UserID. Use this API to audit whether a specific person has read a particular document and when.

Endpoint

/srv.asmx/GetDocumentReadLogHistory

Methods

  • GET /srv.asmx/GetDocumentReadLogHistory?AuthenticationTicket=...&Path=...&UserID=...

  • POST /srv.asmx/GetDocumentReadLogHistory (form data)

  • SOAP Action: http://tempuri.org/GetDocumentReadLogHistory

Parameters

Parameter Type Required Description
AuthenticationTicket string Yes Authentication ticket obtained from AuthenticateUser.
Path string Yes Full infoRouter path to the document (e.g. /Finance/Reports/Q1-Report.pdf). The path must resolve to an existing document.
UserID int Yes Internal infoRouter user ID of the person whose view history to return. Obtain this value from GetUser, GetAllUsers, or similar user lookup APIs.

Response

Success Response

Returns a <response> element with success="true" containing a <ViewLog> element with zero or more <Version> child elements -" one per time the specified user accessed a version of the document. Entries span both the current view log and historical read log.

<response success="true" error="">

  <ViewLog>

    <Version

      Number="2000000"

      UserID="12"

      Viewer="John Smith"

      ViewDate="2024-06-15T10:30:00.000Z" />

    <Version

      Number="2000000"

      UserID="12"

      Viewer="John Smith"

      ViewDate="2024-06-10T08:45:00.000Z" />

    <Version

      Number="1000000"

      UserID="12"

      Viewer="John Smith"

      ViewDate="2024-05-01T09:15:00.000Z" />

  </ViewLog>

</response>

Version Element Attributes

Attribute Type Description
Number int External version number of the document version that was accessed. Version 1 = 1000000, Version 2 = 2000000, etc.
UserID int Internal user ID of the person who accessed the document (always the same as the UserID parameter).
Viewer string Full name of the user who accessed the document.
ViewDate string UTC date and time of the access event in ISO 8601 format (yyyy-MM-ddTHH:mm:ss.fffZ). Empty string if not recorded.

No Entries Response

When the specified user has never accessed the document, or the document has no view log for that user:

<response success="true" error="">

  <ViewLog />

</response>

Error Response

<response success="false" error="Document not found." />

Required Permissions

The calling user must have at least read access to the document AND must have the DocumentReadViewLog permission on the document. This permission is typically granted to document owners, domain managers, and system administrators. Regular read-only users cannot retrieve the view log unless explicitly granted the DocumentReadViewLog permission.


Example

GET Request

GET /srv.asmx/GetDocumentReadLogHistory

  ?AuthenticationTicket=3f2504e0-4f89-11d3-9a0c-0305e82c3301

  &Path=/Finance/Reports/Q1-2024-Report.pdf

  &UserID=12

HTTP/1.1

POST Request

POST /srv.asmx/GetDocumentReadLogHistory HTTP/1.1

Content-Type: application/x-www-form-urlencoded



AuthenticationTicket=3f2504e0-4f89-11d3-9a0c-0305e82c3301

&Path=/Finance/Reports/Q1-2024-Report.pdf

&UserID=12

SOAP Request

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

               xmlns:tns="http://tempuri.org/">

  <soap:Body>

    <tns:GetDocumentReadLogHistory>

      <tns:AuthenticationTicket>3f2504e0-4f89-11d3-9a0c-0305e82c3301</tns:AuthenticationTicket>

      <tns:Path>/Finance/Reports/Q1-2024-Report.pdf</tns:Path>

      <tns:UserID>12</tns:UserID>

    </tns:GetDocumentReadLogHistory>

  </soap:Body>

</soap:Envelope>

JavaScript

Every call answers XML with HTTP 200, success or not, so success is the thing to branch on and errorCode is the number to report.

async function call(action, params) {
  const response = await fetch(`/srv.asmx/${action}?${new URLSearchParams(params)}`);
  const root = new DOMParser()
    .parseFromString(await response.text(), 'text/xml')
    .documentElement;

  if (root.getAttribute('success') !== 'true') {
    throw new Error(`${root.getAttribute('errorCode')}: ${root.getAttribute('error')}`);
  }
  return root;
}

Who has read a document, version by version, under <ViewLog>. UserID of 0 means everybody.

const root = await call('GetDocumentReadLogHistory', {
  authenticationTicket: ticket,
  Path: '/Public/ApiTests/test-document.txt',
  UserID: 0
});

for (const version of root.querySelectorAll('Version')) {
  console.log(version.getAttribute('Number'), version.getAttribute('Viewer'), version.getAttribute('ViewDate'));
}

Notes

  • Single User Filter: Unlike GetDocumentViewLog which returns access history for all users, this API returns entries for one specific user only. The filter is applied after the full log is retrieved -" the permission check is the same as GetDocumentViewLog.

  • All Versions Included: Access events for every version of the document are returned, not just the current (published) version.

  • UserID Must Be Valid: The UserID must be the numeric internal ID of an existing infoRouter user. If the user has never accessed the document, an empty <ViewLog /> is returned (not an error).

  • ViewDate UTC: All ViewDate timestamps are returned in UTC ISO 8601 format. An empty string indicates that the access date was not recorded.

  • Version Number Format: The Number attribute uses the external version format where version numbers pack a major, a minor and a revision into one integer as major * 1000000 + minor * 1000 + revision, so the first version is 1000000 and the second is 1000001 - not 2000000, which would be major version 2.

  • Document Path Only: This API only accepts document paths. Passing a folder path returns a "Document not found" error.

  • How to Get UserID: Use GetUser, GetAllUsers, or GetAllUsers1 to look up a user's internal UserID by username.


  • GetDocumentViewLog - Get the full view/access log for a document for all users

  • GetUserViewLog - Get all documents read by a specific user

  • GetUserViewLog1 - Get all documents read by a specific user within a date range

  • GetUser - Look up a user's internal ID by username


Error Codes

The errorCode values this operation returns, checked against a running server:

errorCode When
4010 the ticket is expired or unknown
4030 the caller can see the document but may not read its log
4041 no document at that path - including a path the caller cannot see, so an anonymous caller gets this rather than 4030
Error Description
[900] Authentication failed Invalid or missing authentication ticket.
[901] Session expired or Invalid ticket The ticket has expired or does not exist.
Document not found. The specified Path does not resolve to an existing document.
Insufficient rights. The calling user does not have the DocumentReadViewLog permission on the document.
SystemError:... An unexpected server-side error occurred.