---
title: "List jobs"
method: GET
path: "/v1/jobs"
tags: ["Jobs"]
---

# List jobs

`GET /v1/jobs`

## Request

- Base URL: `https://api.workwing.io`
- URL: `https://api.workwing.io/v1/jobs`
- Auth: HTTP bearer

List jobs with advanced filtering. Supported operators:

- `?status=eq.T_PENDING` - Filter by exact match
- `?priority=in.(T_HIGH,T_URGENT)` - Filter by multiple values
- `?created_at=gte.2024-01-01` - Date range filters
- `?select=id,status,customer:customers(name)` - Field selection with joins
- `?order=created_at.desc` - Sorting
- `?limit=25&offset=50` - Pagination

Projects and their jobs:

- `?project_id={uuid}` - the jobs of one project
- `?kind=T_PROJECT` - projects only; `?kind=T_STANDARD` excludes them

Both accept a bare value or a PostgREST operator. Unless you pass your own `select`, each row carries `project_id` (the project it belongs to) alongside `kind`.

## Query parameters

- `select` string
- `order` string
- `limit` integer
- `offset` integer
- `project_id` string
- `kind` string

## Response `200`

Array of jobs

- object: Array of jobs
  - `data` object[]
    - `id` string, uuid
    - `brand_id` string, uuid
    - `customer_id` string, uuid
    - `location_id` string, uuid, nullable: The customer location the job is at
    - `template_id` string, uuid, nullable: Null on a project created without a sign-off job type
    - `created_by_user_id` string, uuid
    - `resource_group_id` string, uuid, nullable
    - `parent_job_id` string, uuid, nullable: The same value as `project_id`, under its column name.
    - `job_schedule_id` string, uuid, nullable: The recurring schedule that generated this job, if any.
    - `scheduled_instance_date` string, date, nullable: For a job generated by a recurring schedule, the occurrence date it was generated for.
    - `source_observation_id` string, uuid, nullable: The field observation this job was raised from, if any.
    - `job_number` string, nullable: Human-readable job identifier
    - `title` string, nullable: Optional name for the job, shown instead of its number
    - `status` 'T_PENDING' | 'T_SCHEDULED' | 'T_ASSIGNED' | 'T_IN_PROGRESS' | 'T_ON_HOLD' | 'T_INCOMPLETE' | 'T_REBOOK' | 'T_COMPLETED' | 'T_CANCELLED' | 'T_FAILED'
    - `status_notes` string, nullable: Free-text note recorded with the latest status change
    - `status_reason_code` 'T_REASON_CUSTOMER_NOT_AVAILABLE' | 'T_REASON_ACCESS_DENIED' | 'T_REASON_WRONG_EQUIPMENT' | 'T_REASON_SAFETY_CONCERN' | 'T_REASON_ALREADY_COMPLETED' | 'T_REASON_INCORRECT_ADDRESS' | 'null', nullable: Preset reason recorded with the latest status change. Null when none was picked.
    - `priority` 'T_LOW' | 'T_NORMAL' | 'T_HIGH' | 'T_URGENT' | 'null', nullable
    - `source` 'T_WEB' | 'T_API' | 'T_IMPORT': Where the job was created: in the app, through the API, or by a CSV import.
    - `notes` string, nullable
    - `scheduled_start` string, date-time, nullable
    - `scheduled_end` string, date-time, nullable
    - `is_schedule_locked` boolean: Whether the schedule is pinned. Not writable over the API: a job is locked and unlocked in the app by someone allowed to reschedule locked jobs. On a locked job, an API key that changes scheduled_start or scheduled_end is refused with E_DB_1111.
    - `route_sequence` integer, nullable: Position in the assigned resource's route for the day
    - `started_at` string, date-time, nullable
    - `completed_at` string, date-time, nullable
    - `completion_locked` boolean: Whether the completed job is locked against further edits
    - `sla_response_due_at` string, date-time, nullable
    - `sla_resolution_due_at` string, date-time, nullable
    - `operator_form_data` object, nullable: Operator-captured form data (JSON object)
    - `resource_form_data` object, nullable: Resource-captured form data (JSON object)
    - `operator_form_snapshot` object, nullable: The job type's operator form as it stood when the job was created.
    - `resource_form_snapshot` object, nullable: The job type's resource form as it stood when the job was created.
    - `resource_form_progress` object, nullable: Where the resource has got to in a multi-step form.
    - `integration_responses` object, nullable: Responses recorded by integrations that ran on the job.
    - `external_references` object[]: References to this job in external systems (at most 20)
      - `provider` string, required
      - `type` string, required
      - `ref` string, required
      - `url` string, uri
    - `tracking_id` string: The id in the job's customer tracking link.
    - `verification_code` string, nullable: Code the customer reads to the resource on arrival, when the brand enables verification
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable
    - `kind` 'T_STANDARD' | 'T_PROJECT': `T_PROJECT` owns a pool of jobs; `T_STANDARD` is an ordinary job, which is also what each job in a project is.
    - `project_id` string, uuid, nullable: The project this job belongs to, if any.
    - `child_count` integer: Jobs attached to this job when it is a project.
    - `child_completed_count` integer: Attached jobs in a completed state.
  - `meta` object
    - `request_id` string
    - `timestamp` string, date-time

## Other responses

- `401`: Default Response
- `429`: Default Response

---

[API](https://skmtc.dev/workwing/apis/workwing-api.md) · [All operations](https://skmtc.dev/workwing/apis/workwing-api/llms.txt) · [OpenAPI document](https://skmtc.dev/workwing/apis/workwing-api/revisions/54bb14368a35?raw)
