import { ConductoroneSDKTypescript } from "conductorone-sdk-typescript";
const conductoroneSDKTypescript = new ConductoroneSDKTypescript({
security: {
bearerAuth: "<YOUR_BEARER_TOKEN_HERE>",
oauth: "<YOUR_OAUTH_HERE>",
},
});
async function run() {
const result = await conductoroneSDKTypescript.appEntitlementSearch.searchGraph();
console.log(result);
}
run();curl --request POST \
--url https://{tenantDomain}.conductor.one/api/v1/search/graph \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"appId": "<string>",
"appIds": [
"<string>"
],
"entitlementIds": [
"<string>"
],
"entitlementNameQuery": "<string>",
"maxDepth": 123,
"maxFanOut": 123,
"pageSize": 123,
"pageToken": "<string>",
"resourceId": "<string>",
"resourceIds": [
"<string>"
],
"resourceNameQuery": "<string>",
"resourceTypeIds": [
"<string>"
],
"userId": "<string>"
}
'import requests
url = "https://{tenantDomain}.conductor.one/api/v1/search/graph"
payload = {
"appId": "<string>",
"appIds": ["<string>"],
"entitlementIds": ["<string>"],
"entitlementNameQuery": "<string>",
"maxDepth": 123,
"maxFanOut": 123,
"pageSize": 123,
"pageToken": "<string>",
"resourceId": "<string>",
"resourceIds": ["<string>"],
"resourceNameQuery": "<string>",
"resourceTypeIds": ["<string>"],
"userId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
appId: '<string>',
appIds: ['<string>'],
entitlementIds: ['<string>'],
entitlementNameQuery: '<string>',
maxDepth: 123,
maxFanOut: 123,
pageSize: 123,
pageToken: '<string>',
resourceId: '<string>',
resourceIds: ['<string>'],
resourceNameQuery: '<string>',
resourceTypeIds: ['<string>'],
userId: '<string>'
})
};
fetch('https://{tenantDomain}.conductor.one/api/v1/search/graph', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenantDomain}.conductor.one/api/v1/search/graph",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'appId' => '<string>',
'appIds' => [
'<string>'
],
'entitlementIds' => [
'<string>'
],
'entitlementNameQuery' => '<string>',
'maxDepth' => 123,
'maxFanOut' => 123,
'pageSize' => 123,
'pageToken' => '<string>',
'resourceId' => '<string>',
'resourceIds' => [
'<string>'
],
'resourceNameQuery' => '<string>',
'resourceTypeIds' => [
'<string>'
],
'userId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{tenantDomain}.conductor.one/api/v1/search/graph"
payload := strings.NewReader("{\n \"appId\": \"<string>\",\n \"appIds\": [\n \"<string>\"\n ],\n \"entitlementIds\": [\n \"<string>\"\n ],\n \"entitlementNameQuery\": \"<string>\",\n \"maxDepth\": 123,\n \"maxFanOut\": 123,\n \"pageSize\": 123,\n \"pageToken\": \"<string>\",\n \"resourceId\": \"<string>\",\n \"resourceIds\": [\n \"<string>\"\n ],\n \"resourceNameQuery\": \"<string>\",\n \"resourceTypeIds\": [\n \"<string>\"\n ],\n \"userId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{tenantDomain}.conductor.one/api/v1/search/graph")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"appId\": \"<string>\",\n \"appIds\": [\n \"<string>\"\n ],\n \"entitlementIds\": [\n \"<string>\"\n ],\n \"entitlementNameQuery\": \"<string>\",\n \"maxDepth\": 123,\n \"maxFanOut\": 123,\n \"pageSize\": 123,\n \"pageToken\": \"<string>\",\n \"resourceId\": \"<string>\",\n \"resourceIds\": [\n \"<string>\"\n ],\n \"resourceNameQuery\": \"<string>\",\n \"resourceTypeIds\": [\n \"<string>\"\n ],\n \"userId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenantDomain}.conductor.one/api/v1/search/graph")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"appId\": \"<string>\",\n \"appIds\": [\n \"<string>\"\n ],\n \"entitlementIds\": [\n \"<string>\"\n ],\n \"entitlementNameQuery\": \"<string>\",\n \"maxDepth\": 123,\n \"maxFanOut\": 123,\n \"pageSize\": 123,\n \"pageToken\": \"<string>\",\n \"resourceId\": \"<string>\",\n \"resourceIds\": [\n \"<string>\"\n ],\n \"resourceNameQuery\": \"<string>\",\n \"resourceTypeIds\": [\n \"<string>\"\n ],\n \"userId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"edges": [
{
"hiddenChildren": 123,
"isTruncated": true,
"sourceId": "<string>",
"targetId": "<string>"
}
],
"hasMore": true,
"nodes": [
{
"appId": "<string>",
"displayName": "<string>",
"id": "<string>",
"resourceTypeId": "<string>"
}
],
"pageToken": "<string>",
"pathsReturned": 123,
"truncatedNodeIds": [
"<string>"
]
}Search Graph
SearchGraph performs a server-side BFS traversal and returns a bounded, filtered subgraph. Exactly one of user_id, app_id, or resource_id must be set.
import { ConductoroneSDKTypescript } from "conductorone-sdk-typescript";
const conductoroneSDKTypescript = new ConductoroneSDKTypescript({
security: {
bearerAuth: "<YOUR_BEARER_TOKEN_HERE>",
oauth: "<YOUR_OAUTH_HERE>",
},
});
async function run() {
const result = await conductoroneSDKTypescript.appEntitlementSearch.searchGraph();
console.log(result);
}
run();curl --request POST \
--url https://{tenantDomain}.conductor.one/api/v1/search/graph \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"appId": "<string>",
"appIds": [
"<string>"
],
"entitlementIds": [
"<string>"
],
"entitlementNameQuery": "<string>",
"maxDepth": 123,
"maxFanOut": 123,
"pageSize": 123,
"pageToken": "<string>",
"resourceId": "<string>",
"resourceIds": [
"<string>"
],
"resourceNameQuery": "<string>",
"resourceTypeIds": [
"<string>"
],
"userId": "<string>"
}
'import requests
url = "https://{tenantDomain}.conductor.one/api/v1/search/graph"
payload = {
"appId": "<string>",
"appIds": ["<string>"],
"entitlementIds": ["<string>"],
"entitlementNameQuery": "<string>",
"maxDepth": 123,
"maxFanOut": 123,
"pageSize": 123,
"pageToken": "<string>",
"resourceId": "<string>",
"resourceIds": ["<string>"],
"resourceNameQuery": "<string>",
"resourceTypeIds": ["<string>"],
"userId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
appId: '<string>',
appIds: ['<string>'],
entitlementIds: ['<string>'],
entitlementNameQuery: '<string>',
maxDepth: 123,
maxFanOut: 123,
pageSize: 123,
pageToken: '<string>',
resourceId: '<string>',
resourceIds: ['<string>'],
resourceNameQuery: '<string>',
resourceTypeIds: ['<string>'],
userId: '<string>'
})
};
fetch('https://{tenantDomain}.conductor.one/api/v1/search/graph', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenantDomain}.conductor.one/api/v1/search/graph",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'appId' => '<string>',
'appIds' => [
'<string>'
],
'entitlementIds' => [
'<string>'
],
'entitlementNameQuery' => '<string>',
'maxDepth' => 123,
'maxFanOut' => 123,
'pageSize' => 123,
'pageToken' => '<string>',
'resourceId' => '<string>',
'resourceIds' => [
'<string>'
],
'resourceNameQuery' => '<string>',
'resourceTypeIds' => [
'<string>'
],
'userId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{tenantDomain}.conductor.one/api/v1/search/graph"
payload := strings.NewReader("{\n \"appId\": \"<string>\",\n \"appIds\": [\n \"<string>\"\n ],\n \"entitlementIds\": [\n \"<string>\"\n ],\n \"entitlementNameQuery\": \"<string>\",\n \"maxDepth\": 123,\n \"maxFanOut\": 123,\n \"pageSize\": 123,\n \"pageToken\": \"<string>\",\n \"resourceId\": \"<string>\",\n \"resourceIds\": [\n \"<string>\"\n ],\n \"resourceNameQuery\": \"<string>\",\n \"resourceTypeIds\": [\n \"<string>\"\n ],\n \"userId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{tenantDomain}.conductor.one/api/v1/search/graph")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"appId\": \"<string>\",\n \"appIds\": [\n \"<string>\"\n ],\n \"entitlementIds\": [\n \"<string>\"\n ],\n \"entitlementNameQuery\": \"<string>\",\n \"maxDepth\": 123,\n \"maxFanOut\": 123,\n \"pageSize\": 123,\n \"pageToken\": \"<string>\",\n \"resourceId\": \"<string>\",\n \"resourceIds\": [\n \"<string>\"\n ],\n \"resourceNameQuery\": \"<string>\",\n \"resourceTypeIds\": [\n \"<string>\"\n ],\n \"userId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenantDomain}.conductor.one/api/v1/search/graph")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"appId\": \"<string>\",\n \"appIds\": [\n \"<string>\"\n ],\n \"entitlementIds\": [\n \"<string>\"\n ],\n \"entitlementNameQuery\": \"<string>\",\n \"maxDepth\": 123,\n \"maxFanOut\": 123,\n \"pageSize\": 123,\n \"pageToken\": \"<string>\",\n \"resourceId\": \"<string>\",\n \"resourceIds\": [\n \"<string>\"\n ],\n \"resourceNameQuery\": \"<string>\",\n \"resourceTypeIds\": [\n \"<string>\"\n ],\n \"userId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"edges": [
{
"hiddenChildren": 123,
"isTruncated": true,
"sourceId": "<string>",
"targetId": "<string>"
}
],
"hasMore": true,
"nodes": [
{
"appId": "<string>",
"displayName": "<string>",
"id": "<string>",
"resourceTypeId": "<string>"
}
],
"pageToken": "<string>",
"pathsReturned": 123,
"truncatedNodeIds": [
"<string>"
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
This API uses OAuth2 with the Client Credential flow. Client Credentials must be sent in the BODY, not the headers. For an example of how to implement this, refer to the c1TokenSource.Token() function.
Body
SearchGraph request. Builds a filtered access graph starting from a root entity. Exactly one of user_id, app_id, or resource_id must be set. Server validates this constraint and returns InvalidArgument if violated.
The appId field.
Filters — all optional, applied at every traversal hop
The entitlementIds field.
The entitlementNameQuery field.
Traversal controls
The maxFanOut field.
The pageSize field.
The pageToken field.
The resourceId field.
The resourceIds field.
The resourceNameQuery field.
The resourceTypeIds field.
Root entity — exactly one must be set
Response
SearchGraph response. Contains a subgraph of nodes and edges.
SearchGraph response. Contains a subgraph of nodes and edges.
The edges field.
Show child attributes
Show child attributes
The hasMore field.
The nodes field.
Show child attributes
Show child attributes
The pageToken field.
The pathsReturned field.
The truncatedNodeIds field.
Was this page helpful?