When to use this endpoint

Compare incomplete Jobs with due-soon and overdue subsets within a scheduled-date cohort. Select the matching saved Reports dashboard chart or table, choose a bounded range, and use the returned series to render that report.

res[0] is incomplete count/value, res[1] is due soon and res[2] is overdue. Dates label scheduled periods, not due-date periods.

Authentication and permissions

Authenticate with signed API-key fields or a logged-in CRM session. The handler requires login and account reporting feature bit 8192. No separate Reports, Jobs, Tasks or finance page-permission check is added by the handler.

The dispatcher rejects this legacy Report route for configured TeamAccess record scope, including assigned-only/parent-manager access and applicable department hierarchy scope. It returns an explicit scope error rather than a silently filtered chart.

Allowed requests read the authenticated tenant. Entity selections are report filters or label controls, not authorization; the handler does not add customer account-manager ownership filtering.

Parameters

ParameterTypeRequiredDescription
daysFromInteger stringYesInclusive first date: relative day offset from current PHP time by default, or Unix seconds with durationType=1. Must be an integer; malformed/blank values are rejected. ISO strings are not parsed as dates.
daysToInteger stringYesInclusive last date, in the same mode as daysFrom. Expanded to 23:59:59 in the account timezone; no reversed-range validation.
durationTypeInteger stringNoDefault 0. Exactly 1 uses Unix seconds; other values convert integer day offsets through strtotime. Use 0/1; numeric values are validated before report SQL.
frequencyInteger stringNoDefault 0 monthly, 1 weekly, 2 quarterly, 3 yearly. Controls helper axis and grouping, using ISO week-year for weekly periods. Unsupported values are rejected.
userTypeInteger stringYes0 summary, 1 users, 2 customers, 3 asset-axis labels. User grouping is created_by for Invoices and assigned user_id for Jobs. Type 3 uses the same customer-key grouping as type 2 rather than an actual asset relationship.
userNative array of ID strings or ["All"]NoDefaults to ["All"]; a supplied empty list is rejected. Summary ignores the selection; individual axes include selected IDs by name. Pass a native array, not an encoded JSON string.
displayTypeInteger stringYes0 count; 1 linked Job value. Other values fall back to count. Monetary aggregates are integer-converted; this is not a precise ledger export.
jobTypeNonempty native array of numeric ID stringsYesJob type IDs to include. No server-side All expansion. The dashboards resolve All to actual JobTypes_list IDs before sending; empty or malformed lists are rejected.

Example request

$report = FM_api('Report_getJobsDue', [
	'daysFrom'=>'1768003200',
	'daysTo'=>'1768003200',
	'durationType'=>'1',
	'userType'=>'0',
	'frequency'=>'0',
	'displayType'=>'0',
	'user'=>['All'],
	'jobType'=>['1'],
]);

Example response

{
  "res": [
    [
      0
    ],
    [
      0
    ],
    [
      0
    ]
  ],
  "xLabels": [
    "Jan 2026"
  ],
  "xLabels1": []
}

Representative empty-cohort result from the real handler with a January 2026 summary axis. The request timestamp is 2026-01-10 00:00:00 UTC and expands to account-local day boundaries.

res[0] is incomplete count/value, res[1] is due soon and res[2] is overdue. Dates label scheduled periods, not due-date periods.

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":"This legacy report does not support your configured record scope. Use the scoped Contracts reports or table exports."}The dispatcher detects configured TeamAccess record scope before the handler.
{"error":"no permission to access api"}Account reporting feature bit 8192 is absent.
{"error":"missing parameter: daysFrom"}The named parameter is omitted or null. Present blank/malformed controls return an invalid-parameter error instead; list controls must be native arrays.
{"error":"missing parameter: daysTo"}The named parameter is omitted or null. Present blank/malformed controls return an invalid-parameter error instead; list controls must be native arrays.
{"error":"missing parameter: userType"}The named parameter is omitted or null. Present blank/malformed controls return an invalid-parameter error instead; list controls must be native arrays.
{"error":"missing parameter: displayType"}The named parameter is omitted or null. Present blank/malformed controls return an invalid-parameter error instead; list controls must be native arrays.
{"error":"missing parameter: jobType"}The named parameter is omitted or null. Present blank/malformed controls return an invalid-parameter error instead; list controls must be native arrays.
{"error":"invalid parameter: daysFrom"}A supplied numeric/list control is malformed, a list contains unsupported tokens, or frequency/userType/date selectors are outside 0–3. The message names the invalid control; validation precedes chart queries.

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

Behaviour and edge cases

  • Filters active Jobs by meeting_time_e within inclusive account-local day bounds converted to Unix seconds, and requires is_complete=0 plus a selected type_id.
  • Due soon additionally requires due_date between today and the date today + the configured amber-day window, inclusive. The account key is appointment-amber-days. It is used as a relative date expression without a dedicated numeric validation/default.
  • Overdue requires due_date < today. These subsets use the real current day rather than the end of the selected scheduled-date cohort. SQL null due dates do not match; legacy zero dates can behave differently.
  • User grouping uses assigned user_id; customer and asset-axis modes both group customer_id. Complete/cancelled Jobs and other types are excluded, regardless of generic status controls.
  • legend and status do not change these fixed subsets. The UI’s legend selection controls presentation; displayType selects count versus the linked-value calculation below.
  • Linked Job value is computed once per Job: sum the net values of distinct type-3 linked Invoice IDs; if that sum is null, sum distinct type-2 linked Quote IDs; if null, use guarded meta.job_value, otherwise zero. Equal-valued documents remain separate contributions; duplicate links do not multiply values. An explicit zero sum stops fallback. No new deleted-finance filter or direct-link relationship is introduced, and current Job price_net is not used.
  • There is no pagination, checkpoint or result-size limit. Keep the date range and entity selection bounded. Aggregated values are numeric chart cells, not database scalar strings or object rows.
  • The helper orders periods first, then entities by name; one entity collapses xLabels to period text with empty xLabels1. Temporary users with non-null meta.is_tmp are excluded from user-axis lookups, but inactive/deleted label entities are not generally excluded. Unmatched entity/date keys are silently dropped.
  • PHP date conversion uses the account timezone (missing/null defaults to Europe/Dublin, blank means UTC). SQL date/Unix conversion uses its database session timezone; these handlers do not force cross-layer alignment.
  • Weekly axes enumerate real Mondays and use ISO week-year keys consistently with SQL. Week 53 and ranges crossing a calendar-year boundary are included; display labels are Week NN YYYY using the ISO year.
  • For scheduled Unix boundaries, Core_timeLocalToEpoch uses UTC when the timezone setting is blank/missing, while the chart timezone helper uses Europe/Dublin when missing. Configure a valid account timezone to avoid that fallback mismatch.
  • Numeric controls and native selector lists are validated through Report_validateChartRequest before SQL. JSON-encoded list strings, nested/object-keyed arrays, unsafe ID values and undocumented tokens are rejected. The existing login, reporting-feature and TeamAccess entry policies remain unchanged.
  • No direct caller for this endpoint was found in the mobile app or its m-service intermediary.

Side effects

  • Reads tenant data only; no business-record, audit, notification or schema writes occur. The chart restores its temporary PHP timezone on normal return paths.

See it in Fieldmotion

CRM1

Open Reports dashboard, add or preview Due/Overdue Jobs, choose filters and inspect Network for Report_getJobsDue. pageReportDashboard.js constructs the endpoint dynamically from the saved api value. Generic legends can control presentation without changing the backend cohort; compare the actual request with this page’s parameter contract.

CRM2

Open Reports dashboard, add or preview Due/Overdue Jobs, choose filters and inspect Network for Report_getJobsDue. lib/displayReport.js / pageReportDashboardDetails.js constructs the endpoint dynamically from the saved api value. Generic legends can control presentation without changing the backend cohort; compare the actual request with this page’s parameter contract.

Related endpoints