PingDirectory API Reference

List All Entries

GET {{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100

To retrieve a list of entries under a subtree of an entry, use the {{dn}}/subtree endpoint. This endpoint requires the searchScope parameter. The supported search scopes are:

  • baseObject

    Returns only the object directly described by the base DN.

  • singleLevel

    Returns only the entries that are immediate children of the base entry.

  • wholeSubtree

    Returns the base entry and all of its descendants.

  • subordinateSubtree

    Returns the descendants of the base entry, but not the base entry itself.

All list requests are paged. The limit parameter specifies the page size. However, the page size can be smaller than requested, either because the server has a configured maximum page size or because you have reached the last page and there are not enough entries to fill the page.

The next link enables navigation forward from the current page to the next page. The directory service does not support a previous link to move backward from the current page.

The size value on the returned object shows the actual number of entries returned in the request.

The sample shows the GET /directory/v1/{{dn}}/subtree+ operation to return the base entry and all of its descendants.

The searchScope parameter value is encoded in the cursor parameter in the next link URL. The search scope does not need to be provided on subsequent requests. This endpoint also accepts the includeAttributes and excludeAttributes query parameters. For more information about these query parameters, refer to Get an entry.

Headers

Authorization      Bearer {{accessToken}}

Example Request

  • cURL

  • C#

  • Go

  • HTTP

  • Java

  • jQuery

  • NodeJS

  • Python

  • PHP

  • Ruby

  • Swift

curl --location --globoff '{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100' \
--header 'Authorization: Bearer {{accessToken}}'
var options = new RestClientOptions("{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Get);
request.AddHeader("Authorization", "Bearer {{accessToken}}");
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main

import (
  "fmt"
  "net/http"
  "io"
)

func main() {

  url := "{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100"
  method := "GET"

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, nil)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Authorization", "Bearer {{accessToken}}")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := io.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
GET /directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100 HTTP/1.1
Host: {{apiPath}}
Authorization: Bearer {{accessToken}}
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100")
  .method("GET", body)
  .addHeader("Authorization", "Bearer {{accessToken}}")
  .build();
Response response = client.newCall(request).execute();
var settings = {
  "url": "{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100",
  "method": "GET",
  "timeout": 0,
  "headers": {
    "Authorization": "Bearer {{accessToken}}"
  },
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
var request = require('request');
var options = {
  'method': 'GET',
  'url': '{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100',
  'headers': {
    'Authorization': 'Bearer {{accessToken}}'
  }
};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
import requests

url = "{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100"

payload = {}
headers = {
  'Authorization': 'Bearer {{accessToken}}'
}

response = requests.request("GET", url, headers=headers, data=payload)

print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100');
$request->setMethod(HTTP_Request2::METHOD_GET);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'Authorization' => 'Bearer {{accessToken}}'
));
try {
  $response = $request->send();
  if ($response->getStatus() == 200) {
    echo $response->getBody();
  }
  else {
    echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
    $response->getReasonPhrase();
  }
}
catch(HTTP_Request2_Exception $e) {
  echo 'Error: ' . $e->getMessage();
}
require "uri"
require "net/http"

url = URI("{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer {{accessToken}}"

response = http.request(request)
puts response.read_body
var request = URLRequest(url: URL(string: "{{apiPath}}/directory/v1/{{dn}}/subtree?searchScope=wholeSubtree&limit=100")!,timeoutInterval: Double.infinity)
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")

request.httpMethod = "GET"

let task = URLSession.shared.dataTask(with: request) { data, response, error in
  guard let data = data else {
    print(String(describing: error))
    return
  }
  print(String(data: data, encoding: .utf8)!)
}

task.resume()

Example Response

200 OK

{
  "size": 100,
  "_embedded": {
    "entries": [
      {
        "_dn": "uid=lindajones,ou=people,dc=example,dc=com",
        "objectClass": [ "top", "person", "organizationalPerson", "inetOrgPerson" ],
        "uid": ["lindajones"],
        "cn": ["Linda Jones"],
        "sn": ["Jones"],
        "_links": {
          "schemas": [
            {
              "href": "https://ds.example.com/directory/v1/schemas/inetOrgPerson"
            }
          ],
          "self": {
            "href": "https://ds.example.com/directory/v1/uid=lindajones,ou=people,dc=example,dc=com"
          }
        }
      },

      ... 99 more entries ...

    ]
  },
  "_links": {
    "self": {
      "href": "https://ds.example.com/directory/v1/ou=people,dc=example,dc=com/subtree?searchScope=wholeSubtree&limit=100"
    },
    "next": {
      "href": "https://ds.example.com/directory/v1/ou=people,dc=example,dc=com/subtree?limit=100&cursor=eyJjb29raWUiOiJ1c2VyMTAiLCJmaWx0ZXIiOiIiLCJzY29wZSI6Indob2xlU3VidHJlZSJ9"
    }
  }
}