Skip to content

GetDomainMembers1 API

Returns a list of users and user groups who are members of the specified domain/library, with control over sort order and the level of detail returned for each user.

Endpoint

/srv.asmx/GetDomainMembers1

Methods

  • GET /srv.asmx/GetDomainMembers1?authenticationTicket=...&domainName=...&sortBy=...&sortAscending=...&detailMode=...
  • POST /srv.asmx/GetDomainMembers1 (form data)
  • SOAP Action: http://tempuri.org/GetDomainMembers1

Parameters

Parameter Type Required Description
authenticationTicket string Yes Authentication ticket obtained from AuthenticateUser.
domainName string Yes Name of the domain/library whose members to retrieve.
sortBy int Yes Sort field for the user list. Valid values: 0 = default, 1 = USERNAME, 2 = FIRSTNAME_LASTNAME, 3 = LASTNAME_FIRSTNAME, 4 = EMAIL, 5 = STATUS, 6 = AUTHENTICATION_SOURCE, 7 = Library, 8 = UserType.
sortAscending bool Yes Sort direction. true = ascending (A-'Z), false = descending (Z-'A).
detailMode bool Yes If true, returns full user details including domain, logon dates, authentication source, and preferences. If false, returns only basic fields (name, email, enabled status).

Response

Success Response (detailMode=true)

<response success="true" error="">
  <users>
    <User exists="true" UserID="101" FirstName="John" LastName="Doe"
          Email="jdoe@example.com" Enabled="TRUE" UserName="jdoe"
          Domain="Finance" LastLogonDate="2024-01-15T10:30:00"
          LastPasswordChangeDate="2023-06-01T08:00:00"
          AuthenticationAuthority="Native" ReadOnlyUser="FALSE">
      <Preferences>
        <Language>en-US</Language>
        <DefaultPortal />
        <ShowArchives>FALSE</ShowArchives>
        <ShowHiddens>FALSE</ShowHiddens>
        <NotificationType>None</NotificationType>
        <NotificationTypeId>0</NotificationTypeId>
        <EmailType>0</EmailType>
        <AttachDocumentToEmail>FALSE</AttachDocumentToEmail>
      </Preferences>
    </User>
  </users>
  <usergroups>
    <usergroup GroupID="55" GroupName="AccountingTeam" DomainID="123"
               DomainName="Finance" public="True" />
  </usergroups>
</response>

Success Response (detailMode=false)

<response success="true" error="">
  <users>
    <User exists="true" UserID="101" FirstName="John" LastName="Doe"
          Email="jdoe@example.com" Enabled="TRUE" UserName="jdoe" />
  </users>
  <usergroups>
    <usergroup GroupID="55" GroupName="AccountingTeam" DomainID="123"
               DomainName="Finance" public="True" />
  </usergroups>
</response>

Error Response

<response success="false" error="[ErrorCode] Error message" />

Required Permissions

Any authenticated user can call this API. Anonymous (unauthenticated) users are rejected.


Example

GET Request (sorted by last name, descending, full details)

GET /srv.asmx/GetDomainMembers1
  ?authenticationTicket=3f2504e0-4f89-11d3-9a0c-0305e82c3301
  &domainName=Finance
  &sortBy=3
  &sortAscending=false
  &detailMode=true
HTTP/1.1

POST Request

POST /srv.asmx/GetDomainMembers1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded

authenticationTicket=3f2504e0-4f89-11d3-9a0c-0305e82c3301
&domainName=Finance
&sortBy=2
&sortAscending=true
&detailMode=false

SOAP Request

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
               xmlns:tns="http://tempuri.org/">
  <soap:Body>
    <tns:GetDomainMembers1>
      <tns:authenticationTicket>3f2504e0-4f89-11d3-9a0c-0305e82c3301</tns:authenticationTicket>
      <tns:domainName>Finance</tns:domainName>
      <tns:sortBy>2</tns:sortBy>
      <tns:sortAscending>true</tns:sortAscending>
      <tns:detailMode>true</tns:detailMode>
    </tns:GetDomainMembers1>
  </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;
}

GetDomainMembers with sorting, and a switch for how much is written about each member.

const root = await call('GetDomainMembers1', {
  authenticationTicket: ticket,
  domainName: 'Finance',
  sortBy: 0,
  sortAscending: true,
  detailMode: false          // names and ids only
});

detailMode never changes which members come back, only how much of each is written.

Notes

  • Sorting applies only to the <users> list; user groups are returned unsorted.
  • The sortBy=0 value uses the system default sort order.
  • detailMode=false is faster and reduces response size -" use it when only names or IDs are needed.
  • This is an enhanced version of GetDomainMembers which always returns full detail with default sort.
  • The <users> list contains only individually-added members. Use GetDomainUsers1 to include users who are members through group membership.


Error Codes

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

errorCode When
4010 the ticket is expired or unknown, or there is no ticket at all
4041 no library by that name - including one the caller cannot see
HTTP 400 a required string parameter was empty; refused by model binding, so there is no error document
Error Description
[900] Authentication failed Invalid or missing authentication ticket.
[901] Session expired or Invalid ticket The ticket has expired or does not exist.
[2730] Insufficient rights. Anonymous users cannot perform this action. The calling user is not authenticated.
[115] Domain not found The specified domainName does not exist.
SystemError:... An unexpected server-side error occurred.