When to use this endpoint

Read object history with user names, display timestamps and old/new summaries for the CRM2 form-history widget.

Authentication and permissions

Authenticate with signed API-key fields or a logged-in CRM session. These calls use the authenticated account’s data; the handler has no additional job-page, department, assignee or client-admin permission check unless stated below.

Parameters

ParameterTypeRequiredDescription
objIDString/integer stringYesRequired by presence only; compared as supplied to log.obj_id. This is not named id and is not validated as positive.
typeNameStringYesTrimmed, nonblank exact history type. The endpoint accepts types other than job; callers must choose the intended object family.
typeName2StringNoExact subtype. Omitted means all subtypes; blank explicitly selects the blank subtype.
descriptionStringNoSubstring LIKE filter; % and _ retain SQL wildcard meaning.

Example request

$history = FM_api('Job_formLogGet', ['objID' => '1042', 'typeName' => 'job', 'typeName2' => 'field_27']);

Example response

[]

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: Object ID"}objID is absent; message casing differs from the parameter name.
{"error":"missing or invalid parameter: typeName"}typeName is missing or whitespace-only.
falseThe query fails; empty matching history normally returns [].

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

Behaviour and edge cases

  • Returns id, cdate, type_name, type_name2, description, user_id, meta, obj_id and joined user name, plus newDate, newTime, userIP and formDescription. meta remains encoded JSON.
  • newDate is uppercase PHP-server-time MMM DD, YYYY; newTime is h:mm AM/PM. These strings do not use the account timezone/time-format preference. cdate remains the original Unix seconds value.
  • userIP uses decoded meta.user_ip or N/A. A nonempty metadata array produces an old/new summary: arrays are comma-joined, booleans become true/false, and absent values become blank. Truthiness checks mean numeric zero is not rendered consistently as a nonempty change.
  • Empty/invalid metadata yields N/A presentation fields. Deeply nested old/new arrays are not recursively formatted.
  • No job existence/deletion check, date window, ORDER BY or pagination is applied. The shared widget’s date filtering/sorting is client-side, not server paging. No mutation occurs.

See it in Fieldmotion

CRM1

No direct CRM1 caller was found. CRM1’s field-history dialog uses Job_logGet with id/type instead.

CRM2

Open a job Form field’s History of Changes button. pageJobForm.js opens widgetHistoryForm, which sends objID, typeName=job and typeName2=field_. Inspect the initial unpaginated request, not the widget’s local date controls.

Related endpoints