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¶
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:
Error Response¶
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
GetDocumentViewLogwhich 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 asGetDocumentViewLog. -
All Versions Included: Access events for every version of the document are returned, not just the current (published) version.
-
UserID Must Be Valid: The
UserIDmust 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
ViewDatetimestamps are returned in UTC ISO 8601 format. An empty string indicates that the access date was not recorded. -
Version Number Format: The
Numberattribute uses the external version format where version numbers pack a major, a minor and a revision into one integer asmajor * 1000000 + minor * 1000 + revision, so the first version is1000000and the second is1000001- not2000000, 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, orGetAllUsers1to look up a user's internalUserIDby username.
Related APIs¶
-
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. |