Contacts API
The Contacts API provides programmatic access to manage Active Directory (AD) contact records. The ADManager Plus API offers endpoints to create, update, list, and delete contacts using structured requests with support for filtering, sorting, and pagination. Contact entries typically store information about people or external entities without logon permissions, and the API enables them to be maintained efficiently for address lists, mail routing, and directory organization.
List AD Contacts
This endpoint retrieves AD contact objects. You can refine results using filters, sorting, and pagination, and select only the fields you need. It is useful for generating reports, integrating contacts into other systems, or keeping external directories synchronized.
Scope : Read contact action, All contacts management actions
Delegated role : All Contacts Report
Query Parameters
Example: domain1.com,domain2.com
eg: (FIRST_NAME eq John) and (LAST_NAME eq Doe)
eg: FIRST_NAME,-LAST_NAME
Headers
headers_data = Map();
headers_data.put("Accept", "application/json");
headers_data.put("X-Module", "External API");
headers_data.put("X-Date-Time-Format", "SOME_STRING_VALUE");
headers_data.put("Authorization", "REPLACE_KEY_VALUE");
response = invokeUrl
[
url: "http://admanagerplus:8080/api/v2/contacts?domains=domain1.com"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://admanagerplus:8080/api/v2/contacts?domains=domain1.com")
.get()
.addHeader("Accept", "application/json")
.addHeader("X-Module", "External API")
.addHeader("X-Date-Time-Format", "SOME_STRING_VALUE")
.addHeader("Authorization", "REPLACE_KEY_VALUE")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
Accept: 'application/json',
'X-Module': 'External API',
'X-Date-Time-Format': 'SOME_STRING_VALUE',
Authorization: 'REPLACE_KEY_VALUE'
}
};
fetch('http://admanagerplus:8080/api/v2/contacts?domains=domain1.com', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPConnection("admanagerplus:8080")
headers = {
'Accept': "application/json",
'X-Module': "External API",
'X-Date-Time-Format': "SOME_STRING_VALUE",
'Authorization': "REPLACE_KEY_VALUE"
}
conn.request("GET", "/api/v2/contacts?domains=domain1.com", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("http");
const options = {
"method": "GET",
"hostname": "admanagerplus",
"port": "8080",
"path": "/api/v2/contacts?domains=domain1.com",
"headers": {
"Accept": "application/json",
"X-Module": "External API",
"X-Date-Time-Format": "SOME_STRING_VALUE",
"Authorization": "REPLACE_KEY_VALUE"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
curl --request GET \
--url 'http://admanagerplus:8080/api/v2/contacts?domains=domain1.com' \
--header 'Accept: application/json' \
--header 'Authorization: REPLACE_KEY_VALUE' \
--header 'X-Date-Time-Format: SOME_STRING_VALUE' \
--header 'X-Module: External API'
Create AD Contacts
This endpoint creates new AD contact objects. You can use default or custom templates to standardize attributes such as organizational details, contact information, and Exchange settings. It is commonly used when adding external entities to address books or bulk-creating contacts.
Scope : Create contact action, All contacts management actions
Delegated role : Create Bulk Contacts
Arguments
Query Parameters
eg: domain1.com
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "REPLACE_KEY_VALUE");
response = invokeUrl
[
url: "http://admanagerplus:8080/api/v2/contacts?domain=domain1.com"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("http://admanagerplus:8080/api/v2/contacts?domain=domain1.com")
.post(body)
.addHeader("Authorization", "REPLACE_KEY_VALUE")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'POST',
headers: {Authorization: 'REPLACE_KEY_VALUE', 'content-type': 'application/json'},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('http://admanagerplus:8080/api/v2/contacts?domain=domain1.com', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPConnection("admanagerplus:8080")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "REPLACE_KEY_VALUE",
'content-type': "application/json"
}
conn.request("POST", "/api/v2/contacts?domain=domain1.com", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("http");
const options = {
"method": "POST",
"hostname": "admanagerplus",
"port": "8080",
"path": "/api/v2/contacts?domain=domain1.com",
"headers": {
"Authorization": "REPLACE_KEY_VALUE",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
curl --request POST \
--url 'http://admanagerplus:8080/api/v2/contacts?domain=domain1.com' \
--header 'Authorization: REPLACE_KEY_VALUE' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"template": {
"template_name": "Contact Creation Template"
},
"data": [
{
"attributes": {
"displayName": "APIContact1",
"name": "APIContact1",
"memberOf": "Test Group3;Test Group4",
"co": "India",
"exchange": {
"msExchAdminGroup": "/o=Contact/ou=Exchange Administrative Group (FY0IB0HF2LPDLT)",
"targetAddress": "APIContact1",
"mailNickname": "APIContact1"
},
"manager": "Manager 1"
}
},
{
"attributes": {
"displayName": "APIContact2",
"name": "APIContact2",
"description": "API",
"OUName": "OU=Contacts,DC=xcross,DC=com",
"memberOf": "Test Group3;Test Group4",
"manager": "Manager 1"
}
}
]
}
Update AD contacts
This endpoint updates existing AD contacts with the specified payload. You can modify personal details, organizational attributes, Exchange settings, and membership. It is typically used for keeping contact records up to date or applying changes across multiple contacts.
Scope : Modify contacts action, All contacts management actions
Delegated role : Modify Bulk Contact, Bulk Contact Modification
Arguments
Query Parameters
eg: domain1.com
eg: (FIRST_NAME eq John) and (LAST_NAME eq Doe)
eg: FIRST_NAME,-LAST_NAME
Headers
parameters_data='{"data":{"attributes":{"name":"UpdatedContact1","OUName":"OU=Contacts,DC=test,DC=com","description":"Updated description for the contact","memberOf":"Updated Group1;Updated Group2","managedBy":"Updated Manager","extensionAttribute1":"Updated Attribute"}}}';
headers_data = Map();
headers_data.put("Accept", "application/json");
headers_data.put("X-Module", "External API");
headers_data.put("Authorization", "REPLACE_KEY_VALUE");
response = invokeUrl
[
url: "http://admanagerplus:8080/api/v2/contacts?domain=domain1.com"
type: PATCH
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"data\":{\"attributes\":{\"name\":\"UpdatedContact1\",\"OUName\":\"OU=Contacts,DC=test,DC=com\",\"description\":\"Updated description for the contact\",\"memberOf\":\"Updated Group1;Updated Group2\",\"managedBy\":\"Updated Manager\",\"extensionAttribute1\":\"Updated Attribute\"}}}");
Request request = new Request.Builder()
.url("http://admanagerplus:8080/api/v2/contacts?domain=domain1.com")
.patch(body)
.addHeader("Accept", "application/json")
.addHeader("X-Module", "External API")
.addHeader("Authorization", "REPLACE_KEY_VALUE")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PATCH',
headers: {
Accept: 'application/json',
'X-Module': 'External API',
Authorization: 'REPLACE_KEY_VALUE',
'content-type': 'application/json'
},
body: '{"data":{"attributes":{"name":"UpdatedContact1","OUName":"OU=Contacts,DC=test,DC=com","description":"Updated description for the contact","memberOf":"Updated Group1;Updated Group2","managedBy":"Updated Manager","extensionAttribute1":"Updated Attribute"}}}'
};
fetch('http://admanagerplus:8080/api/v2/contacts?domain=domain1.com', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPConnection("admanagerplus:8080")
payload = "{\"data\":{\"attributes\":{\"name\":\"UpdatedContact1\",\"OUName\":\"OU=Contacts,DC=test,DC=com\",\"description\":\"Updated description for the contact\",\"memberOf\":\"Updated Group1;Updated Group2\",\"managedBy\":\"Updated Manager\",\"extensionAttribute1\":\"Updated Attribute\"}}}"
headers = {
'Accept': "application/json",
'X-Module': "External API",
'Authorization': "REPLACE_KEY_VALUE",
'content-type': "application/json"
}
conn.request("PATCH", "/api/v2/contacts?domain=domain1.com", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("http");
const options = {
"method": "PATCH",
"hostname": "admanagerplus",
"port": "8080",
"path": "/api/v2/contacts?domain=domain1.com",
"headers": {
"Accept": "application/json",
"X-Module": "External API",
"Authorization": "REPLACE_KEY_VALUE",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({
data: {
attributes: {
name: 'UpdatedContact1',
OUName: 'OU=Contacts,DC=test,DC=com',
description: 'Updated description for the contact',
memberOf: 'Updated Group1;Updated Group2',
managedBy: 'Updated Manager',
extensionAttribute1: 'Updated Attribute'
}
}
}));
req.end();
curl --request PATCH \
--url 'http://admanagerplus:8080/api/v2/contacts?domain=domain1.com' \
--header 'Accept: application/json' \
--header 'Authorization: REPLACE_KEY_VALUE' \
--header 'X-Module: External API' \
--header 'content-type: application/json' \
--data '{"data":{"attributes":{"name":"UpdatedContact1","OUName":"OU=Contacts,DC=test,DC=com","description":"Updated description for the contact","memberOf":"Updated Group1;Updated Group2","managedBy":"Updated Manager","extensionAttribute1":"Updated Attribute"}}}'
{
"data": {
"attributes": {
"name": "UpdatedContact1",
"OUName": "OU=Contacts,DC=test,DC=com",
"description": "Updated description for the contact",
"memberOf": "Updated Group1;Updated Group2",
"managedBy": "Updated Manager",
"extensionAttribute1": "Updated Attribute"
}
}
}
Delete AD contacts
This endpoint deletes AD contacts that match the specified filters. Deletion removes the object from the directory permanently, making it unavailable for address lists or mail distribution. It is often used for cleaning up unused or outdated contacts.
Scope : Delete contact action, All contacts management actions
Delegated role : Delete Contacts
Query Parameters
eg: domain1.com
eg: (FIRST_NAME eq John) and (LAST_NAME eq Doe)
eg: FIRST_NAME,-LAST_NAME
Headers
headers_data = Map();
headers_data.put("Accept", "application/json");
headers_data.put("X-Module", "External API");
headers_data.put("Authorization", "REPLACE_KEY_VALUE");
response = invokeUrl
[
url: "http://admanagerplus:8080/api/v2/contacts?domain=domain1.com"
type: DELETE
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("http://admanagerplus:8080/api/v2/contacts?domain=domain1.com")
.delete(null)
.addHeader("Accept", "application/json")
.addHeader("X-Module", "External API")
.addHeader("Authorization", "REPLACE_KEY_VALUE")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'DELETE',
headers: {
Accept: 'application/json',
'X-Module': 'External API',
Authorization: 'REPLACE_KEY_VALUE'
}
};
fetch('http://admanagerplus:8080/api/v2/contacts?domain=domain1.com', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPConnection("admanagerplus:8080")
headers = {
'Accept': "application/json",
'X-Module': "External API",
'Authorization': "REPLACE_KEY_VALUE"
}
conn.request("DELETE", "/api/v2/contacts?domain=domain1.com", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("http");
const options = {
"method": "DELETE",
"hostname": "admanagerplus",
"port": "8080",
"path": "/api/v2/contacts?domain=domain1.com",
"headers": {
"Accept": "application/json",
"X-Module": "External API",
"Authorization": "REPLACE_KEY_VALUE"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
curl --request DELETE \
--url 'http://admanagerplus:8080/api/v2/contacts?domain=domain1.com' \
--header 'Accept: application/json' \
--header 'Authorization: REPLACE_KEY_VALUE' \
--header 'X-Module: External API'