How to Retrieve a Client's Address from CRM
Scope:
crmWho can execute the method: users with administrative access to the CRM section
If you are developing integrations for Bitrix24 using AI tools (Codex, Claude Code, Cursor), connect the MCP server so that the assistant can utilize the official REST documentation.
A client's address can be stored in Bitrix:
- in a custom field of type "address" for any CRM entity. To retrieve the address from the field, call the get or list method for the desired entity type.
- in the requisites of contacts, companies, and leads. Within the requisites, multiple addresses can be stored in a single field
Address, specifying their types. A single client may have multiple requisites recorded.
To obtain a client's address from the requisites, you need to execute two methods sequentially:
1. Retrieving Requisites Associated with a Contact
Obtaining the requisite ID is a necessary step, as the address is not directly linked to a contact or company. The address is associated with the requisite entity.
To retrieve the requisites, we use the crm.requisite.list method with the following filter:
- in
ENTITY_TYPE_ID, specify the value3— the identifier for contact type. For company type, use the identifier4. - in
ENTITY_ID— the ID of the contact, in this example2429. You can obtain the ID using the crm.contact.list method with a filter based on any known contact field. To get the company ID, use crm.company.list. If you need to find the contact or company ID by phone number or email, refer to the tutorial “Finding Duplicates by Phone Number”.
How to Use Examples in Documentation
BX24.callMethod(
"crm.requisite.list",
{
filter: {
"ENTITY_TYPE_ID": "3",
"ENTITY_ID": "2429",
},
select: [
"ID",
"ENTITY_TYPE_ID",
"ENTITY_ID",
],
},
);
require_once('crest.php');
$result = CRest::call(
'crm.requisite.list',
[
'filter' => [
'ENTITY_TYPE_ID' => '3',
'ENTITY_ID' => '2429',
],
'select' => [
'ID',
'ENTITY_TYPE_ID',
'ENTITY_ID',
],
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
We obtained the requisite ID 361 — a parameter necessary for the next request.
Array
(
[result] => Array
(
[0] => Array
(
[ID] => 361
[ENTITY_TYPE_ID] => 3
[ENTITY_ID] => 2429
)
)
[total] => 1
)
2. Retrieving the Address
To obtain the address, we use the crm.address.list method with the following filter:
- in
ENTITY_TYPE_ID, specify the value8— the identifier for requisite type - in
ENTITY_ID— the requisite ID obtained from the previous request, in this example361 - in
TYPE_ID— the address type, if you need to retrieve a specific one. For example, the delivery address type is11, and the legal address type is6.
BX24.callMethod(
"crm.address.list",
{
filter: {
"ENTITY_TYPE_ID": 8,
"ENTITY_ID": 361,
"TYPE_ID": 11,
},
},
);
require_once('crest.php');
$result = CRest::call(
'crm.address.list',
[
'filter' => [
'ENTITY_TYPE_ID' => 8,
'ENTITY_ID' => 361,
'TYPE_ID' => 11,
],
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
We received the delivery address data for the contact.
Array
(
[result] => Array
(
[0] => Array
(
[TYPE_ID] => 11
[ENTITY_TYPE_ID] => 8
[ENTITY_ID] => 361
[ADDRESS_1] => Pomegranate Lane, 10 c1
[ADDRESS_2] =>
[CITY] => New York
[POSTAL_CODE] => 10001
[REGION] => Manhattan
[PROVINCE] => New York
[COUNTRY] => USA
[COUNTRY_CODE] =>
[LOC_ADDR_ID] => 571
[ANCHOR_TYPE_ID] => 3
[ANCHOR_ID] => 2429
)
)
[total] => 1
)
Code Example
var contactId = "your_contact_ID_here"; // Replace with the actual contact ID
// Method to retrieve the requisite ID
BX24.callMethod(
"crm.requisite.list",
{
filter: {
"ENTITY_TYPE_ID": 3,
"ENTITY_ID": contactId
},
select: ["ID"]
},
function(requisiteResult) {
if (requisiteResult.error()) {
console.error(requisiteResult.error());
} else {
var requisites = requisiteResult.data();
if (requisites.length > 0) {
var requisiteId = requisites[0].ID;
console.log("Requisite ID:", requisiteId);
// Method to retrieve the address
BX24.callMethod(
"crm.address.list",
{
filter: {
"ENTITY_TYPE_ID": 8,
"ENTITY_ID": requisiteId,
"TYPE_ID": 11
}
},
function(addressResult) {
if (addressResult.error()) {
console.error(addressResult.error());
} else {
var addresses = addressResult.data();
if (addresses.length > 0) {
// Create a table to display addresses
var table = [];
addresses.forEach(function(address) {
table.push({
"Address": address.ADDRESS_1 || "Not specified",
"City": address.CITY || "Not specified",
"Postal Code": address.POSTAL_CODE || "Not specified",
"Country": address.COUNTRY || "Not specified"
});
});
console.table(table);
} else {
console.log("Delivery address not found.");
}
}
}
);
} else {
console.log("Requisite not found.");
}
}
}
);
require_once('crest.php');
$contactId = 'your_contact_ID_here'; // Replace with the actual contact ID
// Method to retrieve the requisite ID
$requisiteResult = CRest::call(
'crm.requisite.list',
[
'filter' => [
'ENTITY_TYPE_ID' => 3,
'ENTITY_ID' => $contactId
],
'select' => ['ID']
]
);
if (isset($requisiteResult['error'])) {
echo 'Error: ' . $requisiteResult['error_description'];
} else {
$requisites = $requisiteResult['result'];
if (count($requisites) > 0) {
$requisiteId = $requisites[0]['ID'];
echo 'Requisite ID: ' . $requisiteId . PHP_EOL;
// Method to retrieve the address
$addressResult = CRest::call(
'crm.address.list',
[
'filter' => [
'ENTITY_TYPE_ID' => 8,
'ENTITY_ID' => $requisiteId,
'TYPE_ID' => 11
]
]
);
if (isset($addressResult['error'])) {
echo 'Error: ' . $addressResult['error_description'];
} else {
$addresses = $addressResult['result'];
if (count($addresses) > 0) {
// Create a table to display addresses
echo '<table border="1">';
echo '<tr><th>Address</th><th>City</th><th>Postal Code</th><th>Country</th></tr>';
foreach ($addresses as $address) {
echo '<tr>';
echo '<td>' . ($address['ADDRESS_1'] ?? 'Not specified') . '</td>';
echo '<td>' . ($address['CITY'] ?? 'Not specified') . '</td>';
echo '<td>' . ($address['POSTAL_CODE'] ?? 'Not specified') . '</td>';
echo '<td>' . ($address['COUNTRY'] ?? 'Not specified') . '</td>';
echo '</tr>';
}
echo '</table>';
} else {
echo 'Delivery address not found.';
}
}
} else {
echo 'Requisite not found.';
}
}