Workiz Payments API
Record a payment against a job by its UUID. Workiz tracks invoices, estimates, and payments against jobs; the public API surfaces adding a payment to a job, which advances the job toward a paid state.
Record a payment against a job by its UUID. Workiz tracks invoices, estimates, and payments against jobs; the public API surfaces adding a payment to a job, which advances the job toward a paid state.
openapi: 3.0.3
info:
title: Workiz 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.
- name: Leads
description: Prospective work that can be converted into jobs.
- name: Team
description: Users - technicians, dispatchers, and office staff.
- name: Time Off
description: Technician time-off records that affect availability.
- name: Payments
description: Payments recorded against a job.
- name: Webhooks
description: Outbound event notifications for new jobs and new leads.
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'
/job/addPayment/{UUID}/:
parameters:
- $ref: '#/components/parameters/JobUUID'
post:
operationId: addJobPayment
tags:
- Payments
summary: Add a payment to a job
description: >-
Records a payment against a job by its UUID. The confirmed public
operation is adding a payment; the payment body fields (amount, method,
date) are modeled from Workiz's invoicing and payments behavior.
x-endpoint-status: confirmed
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentInput'
responses:
'200':
description: The recorded payment.
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/lead/all/:
get:
operationId: listLeads
tags:
- Leads
summary: List leads
description: Returns a paginated list of leads. Supports 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
responses:
'200':
description: A list of leads.
content:
application/json:
schema:
$ref: '#/components/schemas/LeadListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/lead/get/{UUID}/:
parameters:
- $ref: '#/components/parameters/LeadUUID'
get:
operationId: getLead
tags:
- Leads
summary: Get a lead
description: Retrieves a single lead by its UUID.
x-endpoint-status: confirmed
responses:
'200':
description: The requested lead.
content:
application/json:
schema:
$ref: '#/components/schemas/LeadResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/lead/create/:
post:
operationId: createLead
tags:
- Leads
summary: Create a lead
description: >-
Creates a new lead. Exposed through Workiz integration partners; request
shape modeled here.
x-endpoint-status: modeled
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LeadInput'
responses:
'200':
description: The created lead.
content:
application/json:
schema:
$ref: '#/components/schemas/LeadResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/lead/update/:
post:
operationId: updateLead
tags:
- Leads
summary: Update a lead
description: >-
Updates an existing lead. Exposed through Workiz integration partners;
request shape modeled here.
x-endpoint-status: modeled
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LeadUpdateInput'
responses:
'200':
description: The updated lead.
content:
application/json:
schema:
$ref: '#/components/schemas/LeadResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/team/all/:
get:
operationId: listTeam
tags:
- Team
summary: List team members
description: Returns all team members (technicians, dispatchers, office users) in the account.
x-endpoint-status: confirmed
responses:
'200':
description: A list of team members.
content:
application/json:
schema:
$ref: '#/components/schemas/TeamListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/team/get/{USER_ID}/:
parameters:
- name: USER_ID
in: path
required: true
description: The user ID of the team member.
schema:
type: string
get:
operationId: getTeamMember
tags:
- Team
summary: Get a team member
description: Retrieves a single team member by user ID.
x-endpoint-status: confirmed
responses:
'200':
description: The requested team member.
content:
application/json:
schema:
$ref: '#/components/schemas/TeamMemberResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
/timeoff/get/:
get:
operationId: listTimeOff
tags:
- Time Off
summary: List time off
description: Returns time-off records for the account.
x-endpoint-status: confirmed
responses:
'200':
description: A list of time-off records.
content:
application/json:
schema:
$ref: '#/components/schemas/TimeOffListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
/timeoff/get/{USER_NAME}/:
parameters:
- name: USER_NAME
in: path
required: true
description: The user name whose time off to retrieve.
schema:
type: string
get:
operationId: getUserTimeOff
tags:
- Time Off
summary: Get time off for a user
description: Returns the time-off records for a specific user by name.
x-endpoint-status: confirmed
responses:
'200':
description: The user's time-off records.
content:
application/json:
schema:
$ref: '#/components/schemas/TimeOffListResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
components:
parameters:
JobUUID:
name: UUID
in: path
required: true
description: The UUID of the job.
schema:
type: string
LeadUUID:
name: UUID
in: path
required: true
description: The UUID of the lead.
schema:
type: string
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'
schemas:
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
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
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'
JobUpdateInput:
allOf:
- type: object
required:
- UUID
properties:
UUID:
type: string
- $ref: '#/components/schemas/JobInput'
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.
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'
JobListResponse:
type: object
properties:
flag:
type: boolean
data:
type: array
items:
$ref: '#/components/schemas/Job'
has_more:
type: boolean
Lead:
type: object
description: A Workiz lead (prospective work).
properties:
UUID:
type: string
SerialId:
type: integer
LeadType:
type: string
LeadSource:
type: string
Status:
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
CreatedDate:
type: string
format: date-time
LeadInput:
type: object
required:
- LeadType
properties:
LeadType:
type: string
LeadSource:
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
Comments:
type: string
LeadUpdateInput:
allOf:
- type: object
required:
- UUID
properties:
UUID:
type: string
Status:
type: string
enum:
- active
- lost
description: Mark the lead active or lost.
- $ref: '#/components/schemas/LeadInput'
LeadResponse:
type: object
properties:
flag:
type: boolean
data:
$ref: '#/components/schemas/Lead'
LeadListResponse:
type: object
properties:
flag:
type: boolean
data:
type: array
items:
$ref: '#/components/schemas/Lead'
has_more:
type: boolean
TeamMember:
type: object
properties:
id:
type: string
name:
type: string
email:
type: string
role:
type: string
active:
type: boolean
TeamMemberResponse:
type: object
properties:
flag:
type: boolean
data:
$ref: '#/components/schemas/TeamMember'
TeamListResponse:
type: object
properties:
flag:
type: boolean
data:
type: array
items:
$ref: '#/components/schemas/TeamMember'
TimeOff:
type: object
properties:
id:
type: string
user:
type: string
startDate:
type: string
format: date-time
endDate:
type: string
format: date-time
reason:
type: string
TimeOffListResponse:
type: object
properties:
flag:
type: boolean
data:
type: array
items:
$ref: '#/components/schemas/TimeOff'
PaymentInput:
type: object
description: >-
Payment recorded against a job. Modeled fields - Workiz confirms the
addPayment operation; the exact body is gated behind the developer portal.
required:
- amount
properties:
amount:
type: number
paymentMethod:
type: string
description: For example cash, credit_card, check.
date:
type: string
format: date
note:
type: string
PaymentResponse:
type: object
properties:
flag:
type: boolean
data:
type: object
properties:
paymentId:
type: string
jobUUID:
type: string
amount:
type: number