When to use this endpoint

Use Customers_getDetails only for legacy CRM1 selectors that need the fixed address/contact projection and parent_name.

For integrations, prefer Customers_getById: it supports field selection and excludes soft-deleted records.

Authentication and permissions

The request must authenticate with signed API-key fields or a logged-in CRM session. The handler performs no additional page or role-permission check.

The lookup and any write use the authenticated tenant; an ID from another tenant cannot be addressed through this call.

Parameters

ParameterTypeRequiredDescription
idsJSON array or arrayYesLocal customer IDs. A string is JSON-decoded; each resulting value is converted to an integer. Outsourced customer tokens therefore become 0 and are not supported.

Example request

$customers = FM_api('Customers_getDetails', [
	'ids' => json_encode(['1042', '1088']),
]);

Example response

[
  {
    "id": "1088",
    "name": "Northwind Cork",
    "notes": "",
    "account_number": "NW-1088",
    "email": "cork@example.test",
    "last_update": "2026-09-24 09:46:02",
    "industry": "Facilities",
    "street_address1": "14 Harbour Road",
    "street_address2": "",
    "town": "Cork",
    "county": "Cork",
    "postcode": "T12 A3BC",
    "landline": "+353215550100",
    "mobile": "+353875550100",
    "contact_name": "Sam Example",
    "parent_id": "1001",
    "parent_name": "Northwind Group"
  }
]

The stored last_edited column is renamed last_update. parent_name is always added and is an empty string when no current parent name is found.

Errors and unusual responses

ResponseCondition
{"error":"not logged in"}No authenticated tenant context is available. Invalid signed credentials can be rejected by the dispatcher before the handler runs.
{"error":"missing or invalid parameter: ids"}ids is absent.
{"error":"ids is not an array"}A string does not decode to an array.
[]No numeric ID matches a row.

Legacy application errors may be returned with HTTP 200. Check the decoded response for error, not only the HTTP status.

Behaviour and edge cases

  • Inactive customers are included. Missing IDs are silently omitted, duplicate IDs collapse at query level, and no request-order guarantee is established.
  • Parent names are fetched one customer at a time. A missing or blank parent produces parent_name: "".
  • The field set is fixed and stored structured fields are not included.
  • There is no pagination or explicit batch limit.

See it in Fieldmotion

CRM1

CRM1 uses Customers_getDetails in customer, customer-or-asset, target, location, and asset-edit selectors, and to show details for the Customers page’s name filter. Open one of those pickers and filter Network requests by the function name.

CRM2

A production-source search found no direct CRM2 caller. CRM2 uses Customer_getRequestedDetails and its mapped table APIs for comparable lookups.

Related endpoints