When to use this endpoint

Use Customers_getCustomersLogList to reproduce the CRM2 Customer activity view. It retains each raw change row and adds display-oriented date, time, label, and update text.

Use Customers_getChangesList when a consumer needs the raw newest-first records without presentation fields.

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
custIDInteger stringYesCustomer ID. It must convert to an integer greater than zero. The capitalization differs from cust_id used by Customers_getChangesList.

Example request

$history = FM_api('Customers_getCustomersLogList', [
	'custID' => '1088',
]);

Example response

[
  {
    "cdate": "1774517400",
    "userName": "Alex User",
    "changes": "[\"Old name\",\"Northwind Cork\",0]",
    "label": "name",
    "customer_id": "1088",
    "newDate": "MAR 26, 2026",
    "newTime": "09:30 AM",
    "updatedData": "Updated from Old name to Northwind Cork",
    "formattedLabel": "Name"
  }
]

userName can be null. updatedData is added only when changes decodes to an array; the original encoded changes value is always retained.

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: Customer ID"}custID is absent.
{"error":"missing or invalid parameter: custID"}The present value converts to less than 1.
[]No audit rows match that customer ID.

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

Behaviour and edge cases

  • Rows are ordered by cdate ascending, oldest first. Equal timestamps have no explicit secondary order.
  • newDate and newTime are formatted with the PHP process timezone, not explicitly with the tenant timezone setting.
  • For labels type and department, old and new numeric values are replaced by matching current names when possible. Missing matches become the literal UNKNOWN. Other labels use the two decoded values directly.
  • formattedLabel replaces underscores with spaces and uppercases the first character. This is display formatting, not a stable translated field name.
  • The endpoint does not check the customer’s active/deleted state and has no date filter, pagination, or limit. It also loads every customer type and department to format the response.

See it in Fieldmotion

CRM1

A production-source search found no CRM1 caller for Customers_getCustomersLogList.

CRM2

Open a Customer and choose its Activity history view. The widgetHistoryCustomer widget calls Customers_getCustomersLogList; filter Network requests by the function name.

Related endpoints