Customers
Format customer activity history
/a/Customers_getCustomersLogList
Format one customer’s audit rows for the CRM2 activity timeline.
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
| Parameter | Type | Required | Description |
|---|---|---|---|
custID | Integer string | Yes | Customer 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
| Response | Condition |
|---|---|
{"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
cdateascending, oldest first. Equal timestamps have no explicit secondary order. newDateandnewTimeare formatted with the PHP process timezone, not explicitly with the tenanttimezonesetting.- For labels
typeanddepartment, old and new numeric values are replaced by matching current names when possible. Missing matches become the literalUNKNOWN. Other labels use the two decoded values directly. formattedLabelreplaces 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
Customers_getChangesListreturns raw audit rows in the opposite order.Customer_getChangesDTserves a paged legacy table.Customer_exportChangesexports customer audit history.