Workiz Jobs API

Work orders - the core scheduling and dispatch entity in Workiz.

OpenAPI Specification

workiz-jobs-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Workiz Jobs API
  description: 'The Workiz REST API lets home-service businesses read and write their field service data - jobs, leads, team members, time off, and payments - and receive outbound webhooks for new jobs and new leads. Workiz is field service management (FSM) software covering scheduling and dispatch, CRM, estimates and invoicing, payments, and communications.


    All calls are made to https://api.workiz.com/api/v1/ with the account API token embedded directly in the request path (https://api.workiz.com/api/v1/{api_token}/...). To obtain credentials, enable the Developer API add-on from the Workiz Feature Center / Marketplace and copy the API token (and secret) from Settings > Integrations. Responses are JSON, and HTTP status codes signal errors.


    Endpoint coverage is marked per operation with `x-endpoint-status`: `confirmed` operations are grounded in Workiz''s public developer docs and the community PHP/Python SDKs; `modeled` operations (some Lead writes, the Payments detail, and the webhook payloads) reflect capabilities exposed through Workiz''s UI and integration partners (Make, Pipedream) whose exact request/response shapes are gated behind the authenticated developer portal and are represented here as a best-effort model.'
  version: '1.0'
  contact:
    name: Workiz
    url: https://developer.workiz.com/
servers:
- url: https://api.workiz.com/api/v1/{api_token}
  description: Workiz REST API. The account API token is part of the base path.
  variables:
    api_token:
      default: YOUR_API_TOKEN
      description: The account API token from the Workiz Developer API add-on (Settings > Integrations). It is placed directly in the URL path; there is no Authorization header. A paired API secret is issued for signed requests where required.
tags:
- name: Jobs
  description: Work orders - the core scheduling and dispatch entity in Workiz.
paths:
  /job/all/:
    get:
      operationId: listJobs
      tags:
      - Jobs
      summary: List jobs
      description: Returns a paginated list of jobs. Supports filtering by open state and status, and offset-based pagination.
      x-endpoint-status: confirmed
      parameters:
      - name: records
        in: query
        required: false
        description: Number of records to return per page.
        schema:
          type: integer
          default: 100
      - name: offset
        in: query
        required: false
        description: Number of records to skip for pagination.
        schema:
          type: integer
          default: 0
      - name: only_open
        in: query
        required: false
        description: When true, return only open (not closed/cancelled) jobs.
        schema:
          type: boolean
      - name: start_date
        in: query
        required: false
        description: Filter jobs on or after this date (YYYY-MM-DD).
        schema:
          type: string
          format: date
      - name: status
        in: query
        required: false
        description: Filter jobs by status label (for example Scheduled, In Progress, Done).
        schema:
          type: string
      responses:
        '200':
          description: A list of jobs.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /job/get/{UUID}/:
    parameters:
    - $ref: '#/components/parameters/JobUUID'
    get:
      operationId: getJob
      tags:
      - Jobs
      summary: Get a job
      description: Retrieves a single job by its UUID.
      x-endpoint-status: confirmed
      responses:
        '200':
          description: The requested job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /job/create/:
    post:
      operationId: createJob
      tags:
      - Jobs
      summary: Create a job
      description: Creates a new job (work order) in the account.
      x-endpoint-status: confirmed
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JobInput'
      responses:
        '200':
          description: The created job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /job/update/:
    post:
      operationId: updateJob
      tags:
      - Jobs
      summary: Update a job
      description: Updates an existing job. The job UUID is supplied in the request body.
      x-endpoint-status: confirmed
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JobUpdateInput'
      responses:
        '200':
          description: The updated job.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /job/assign/:
    post:
      operationId: assignJob
      tags:
      - Jobs
      summary: Assign a user to a job
      description: Assigns a team member to an existing job.
      x-endpoint-status: confirmed
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JobAssignmentInput'
      responses:
        '200':
          description: Assignment result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /job/unassign/:
    post:
      operationId: unassignJob
      tags:
      - Jobs
      summary: Unassign a user from a job
      description: Removes a team member from an existing job.
      x-endpoint-status: confirmed
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JobAssignmentInput'
      responses:
        '200':
          description: Unassignment result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    LineItem:
      type: object
      properties:
        name:
          type: string
        quantity:
          type: number
        unitPrice:
          type: number
        taxable:
          type: boolean
    JobResponse:
      type: object
      properties:
        flag:
          type: boolean
        data:
          $ref: '#/components/schemas/Job'
    JobUpdateInput:
      allOf:
      - type: object
        required:
        - UUID
        properties:
          UUID:
            type: string
      - $ref: '#/components/schemas/JobInput'
    JobListResponse:
      type: object
      properties:
        flag:
          type: boolean
        data:
          type: array
          items:
            $ref: '#/components/schemas/Job'
        has_more:
          type: boolean
    Job:
      type: object
      description: A Workiz job (work order).
      properties:
        UUID:
          type: string
        SerialId:
          type: integer
        JobType:
          type: string
        JobSource:
          type: string
        JobDateTime:
          type: string
          format: date-time
        JobEndDateTime:
          type: string
          format: date-time
        Status:
          type: string
        SubStatus:
          type: string
        JobTotalPrice:
          type: number
        JobAmountDue:
          type: number
        ClientId:
          type: integer
        FirstName:
          type: string
        LastName:
          type: string
        Phone:
          type: string
        Email:
          type: string
        Address:
          type: string
        City:
          type: string
        State:
          type: string
        PostalCode:
          type: string
        Country:
          type: string
        Latitude:
          type: number
        Longitude:
          type: number
        Team:
          type: array
          items:
            type: string
          description: Names or IDs of assigned team members.
        CreatedDate:
          type: string
          format: date-time
    JobAssignmentInput:
      type: object
      required:
      - UUID
      - User
      properties:
        UUID:
          type: string
          description: The UUID of the job.
        User:
          type: string
          description: The user (team member) to assign or unassign.
    JobInput:
      type: object
      required:
      - JobType
      - JobDateTime
      properties:
        JobType:
          type: string
        JobSource:
          type: string
        JobDateTime:
          type: string
          format: date-time
        JobEndDateTime:
          type: string
          format: date-time
        Comments:
          type: string
        FirstName:
          type: string
        LastName:
          type: string
        Phone:
          type: string
        Email:
          type: string
        Address:
          type: string
        City:
          type: string
        State:
          type: string
        PostalCode:
          type: string
        LineItems:
          type: array
          items:
            $ref: '#/components/schemas/LineItem'
    Error:
      type: object
      properties:
        flag:
          type: boolean
          description: Workiz success flag; false on error.
        code:
          type: integer
        data:
          type: string
          description: Human-readable error message.
    GenericResponse:
      type: object
      properties:
        flag:
          type: boolean
          description: Success flag.
        data:
          type: object
          additionalProperties: true
  responses:
    Unauthorized:
      description: Missing or invalid API token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    JobUUID:
      name: UUID
      in: path
      required: true
      description: The UUID of the job.
      schema:
        type: string