Reference · GET /v1/jobs
List jobs
List jobs
Returns the jobs you can see, newest-updated first. Use filters to narrow the result; use the cursor to page through it. Filter names match the response field names.
Request
curl -H "Authorization: Bearer fi_pk_…" \ "https://<host>/v1/jobs?updated_at_from=2026-06-01T00:00:00Z&page_size=50"
Response
{
"jobs": [
{
"id": "21172159",
"number": "16",
"series_number": 16,
"is_primary": true,
"title": "Annual service",
"status": { "id": "68392", "name": "Tentative", "state": "pending" },
"start_time": "2026-07-01T09:00:00+10:00",
"end_time": "2026-07-01T11:00:00+10:00",
"customer": { "id": "245715", "name": "Acme" },
"site": { "id": "3065756", "address": "Unit 3/24 Brand Dr…" },
"notes": "",
"custom_fields": { "scope_of_work": "Install" }
}
],
"next_cursor": "gt/2634823"
}Fields
idstring
Fetch a single job by its FieldInsight ID. Returns it in the `jobs` array if it belongs to your account, otherwise an empty list. Example: `?id=21172159`.
stateopen | closed | all
Filter by open/closed (your operator configures which statuses count as each). IMPORTANT — open and closed behave differently: `open` returns ALL currently-open jobs and is NOT paginated; `closed` returns only the MOST-RECENT closed jobs (not the full history) and is not paginated — to find an older closed job use id/external_id/site/date filters instead; `all` (or omit) is the normal paginated listing. Requires open/closed statuses configured (else 422), and cannot be combined with `status`.
statusstring
Filter to a single FieldInsight status by ID — fetch the list of valid IDs from /v1/job-statuses. Example: `?status=68392` to return only jobs currently marked "Tentative". Mutually exclusive with `state`.
sitestring
Filter to a single FieldInsight site by ID (from /v1/sites). Example: `?site=3065756`.
projectstring
Filter to a single FieldInsight project by ID (from /v1/projects). Example: `?project=1052232`.
external_idstring
Filter by the external reference you set on a job. Example: `?external_id=WO-4471`.
updated_at_fromISO 8601 UTC
Returns only jobs updated at or after this time. Pair with your last poll timestamp for incremental sync — saves you re-pulling unchanged jobs. Example: `?updated_at_from=2026-06-03T00:00:00Z`.
updated_at_toISO 8601 UTC
Upper bound — strictly less than. Combine with updated_at_from for a closed window. Example: a nightly run covers `updated_at_from=<yesterday>` to `updated_at_to=<today>`.
start_time_fromISO 8601
Returns only jobs scheduled at or after this time. Use for "what’s on this week" or schedule-window views. Example: `?start_time_from=2026-07-01T00:00:00+10:00&start_time_to=2026-07-08T00:00:00+10:00`.
start_time_toISO 8601
Upper bound on scheduled start — strictly less than.
numberstring
Exact match on the human-readable job number. Quote this number when contacting us about a specific job — it’s the fastest way for us to find it. Example: `?number=16`.
series_numberinteger
Returns the primary job plus every revisit that belongs to it. Use when you need the full visit history for a recurring job. Example: `?series_number=16` returns visit 1 (primary) and any follow-up visits.
page_size1–100
Default 25. Use 100 for bulk syncs to halve your request count; smaller values are fine for interactive UIs.
cursorstring
Pass the `next_cursor` value from the previous response to fetch the next page. Omit on the first call. Not used with `state=open|closed` (those return a single bounded result with `next_cursor: null`).
Errors
400 invalid-query401 unauthorized403 no-scope422 state-not-configured422 invalid-query (state + status together)422 invalid-request429 rate-limited502 schema-drift502 upstream-scope-violation
next_cursor is null when there's no further page — and is always null for state=open|closed, which return a single bounded result rather than a paginated list.