When to use this endpoint

Check a proposed assignee/start/duration against open jobs, including those already in progress, before saving a schedule.

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
userNative object {id,type}YesNative object containing a positive integer id and a nonnegative integer type. Numeric strings are accepted. Pass the same typed assignee used by job assignment.
jobTimeInteger stringYesPositive integer Unix timestamp in seconds. Numeric integer strings are accepted; malformed, zero and negative values are rejected.
hourNumber/stringYesFinite positive duration in continuous hours. Seconds use floor(hour*3600) and must be at least one; durations overflowing the integer interval are rejected.
excludeIDInteger stringNoExclude this physical job ID when checking an edit; converted to integer.

Example request

$overlap = FM_api('Job_isScheduleOverlap', ['user' => ['id' => '201', 'type' => '0'], 'jobTime' => '1791795600', 'hour' => '1.5', 'excludeID' => '1042']);

Example response

{"ok":1,"id":1088,"jobTime":"1791797400","hour":2}

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: user"}user is missing, not a native object or has invalid/missing inner id/type.
{"error":"missing or invalid parameter: jobTime"}The start is absent or not a positive integer timestamp.
{"error":"missing or invalid parameter: hour"}The duration is absent, malformed, non-finite, shorter than one second or overflows the interval.
{"error":"could not read job schedule"}The candidate query fails.

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

Behaviour and edge cases

  • Both conflict and no-conflict responses contain ok=1. Conflict adds integer id, the stored jobTime (normally a string) and floating-point hour for the conflicting job. No conflict is simply {ok:1}.
  • Candidates are active, is_complete=0, and match both user_id and user_type. The query selects intervals intersecting the requested interval without filtering starts by the current clock, so already-started open jobs can conflict.
  • Candidates sort by meeting_time_e and then physical job ID; the first overlapping candidate is returned. There is no pagination or all-conflicts list.
  • Intervals overlap when each starts before the other ends; touching endpoints do not overlap. Existing nonpositive-duration intervals are ignored. This uses continuous durations, not work-day splitting, breaks, travel, user availability or tenant scheduling settings.
  • The check does not reserve the slot or enforce a write constraint. Failed candidate reads return an explicit error.

See it in Fieldmotion

CRM1

No direct CRM1 caller was found in the reviewed source. Use this focused API request when the full job editor payload is unnecessary.

CRM2

Create/edit a job’s assignee or time, or move it on Jobs Timeline. lib/jobEdit.js and pageJobsTimeline.js call this route. The UI can show a warning or block based on its own userAssignedSelect preference; the API itself only reports the first conflict.

Related endpoints