Jobber is an award-winning business management platform for small home service businesses. Unlike spreadsheets or pen and paper, Jobber keeps track of everything in one place and automates day-to-day operations, so small businesses can provide 5-star service at scale. Jobber’s 200,000+ Home Service Pros have served over 12 million households in more than 47 countries.
Jobber's API gives developers the ability to access and modify data on users' accounts via GraphQL. You will be able to develop, ship, and monetize your own apps on top of Jobber's platform.
This section provides a high-level overview of the components in Jobber's API. Our list of field names is always changing. For the most up-to-date schema, please follow our Getting Started steps and view everything in GraphiQL.
Clients are the customers who pay for services on Jobber's platform - they belong to the Jobber account / service provider. Most other objects are linked to a client.
type Client {
id: EncodedId! # The unique identifier
balance: Float! # The client's current balance
billingAddress: ClientAddress # The billing address of the client
clientProperties: PropertyConnection! # The properties belonging to the client which are serviced by the service provider
companyName: String # The name of the business
customFields: [CustomFieldUnion!]! # The custom fields set for this object
defaultEmails: [String!]! # The email address stored from previous communications
emails: [Email!]! # The email addresses belonging to the client
firstName: String! # The first name of the client
invoices: InvoiceConnection! # The invoices associated with the client
isArchivable: Boolean! # Is the client archivable
isArchived: Boolean! # Is the client archived
isCompany: Boolean! # Does the client represent a business
isLead: Boolean! # Is the client a prospective lead for the service provider
jobberWebUri: String! # The URI for the given record in Jobber Online
jobs: JobConnection! # The jobs associated with the client
lastName: String! # The last name of the client
name: String! # The primary name of the client
noteAttachments: ClientNoteFileConnection! # The note files attached to the client
notes: ClientNoteConnection! # The notes attached to the client
phones: [ClientPhoneNumber!]! # The phone numbers belonging to the client
quotes: QuoteConnection! # The quotes associated with the client
requests: RequestConnection! # The requests associated with the client
secondaryName: String # The secondary name of the client
tags: TagConnection! # The custom tags added to the client
title: String # The title of the client
workObjects: WorkObjectUnionConnection # The client's requests, quotes, jobs, and invoices sorted descending by modified date
createdAt: ISO8601DateTime! # The time the client was created
updatedAt: ISO8601DateTime! # The last time the client was updated
}
Forms which a client can fill to request work to be done.
type Request {
id: EncodedId! # The unique identifier
assessment: Assessment # The assessment associated with the work request
client: Client! # The client associated with the work request
companyName: String # The company name provided in the work request
contactName: String # The primary contact of the client requesting work
email: String # The contact email provided in the work request
jobberWebUri: String! # The URI for the given record in Jobber Online
jobs: JobConnection! # The jobs associated with the specific work request
noteAttachments: RequestNoteFileConnection! # The note files attached to the request
notes: RequestNoteUnionConnection! # The notes attached to the request
phone: String # The contact phone provided in the work request
property: Property # The property associated with the work request
quotes: QuoteConnection! # The quotes associated with the work request
referringClient: Client # The client that referred this work request, if this work request was referred
requestStatus: RequestStatusTypeEnum! # The status of the work request
source: String! # The source of the work request
title: String # The title of the work request
createdAt: ISO8601DateTime! # The time the work request was created
updatedAt: ISO8601DateTime! # The last time the work request was changed in a way that is meaningful to the Service Provider
}
A scheduled event where work will take place (i.e. lawn service every Friday at 3pm).
type Job {
id: EncodedId! # The unique identifier
arrivalWindow: ArrivalWindow # The time window during which the SP can arrive at the job
billingType: BillingStrategy! # Invoicing strategy selected for the job
bookingConfirmationSentAt: ISO8601DateTime # The time when booking confirmation for the job was sent
client: Client! # The client on the job
customFields: [CustomFieldUnion!]! # The custom fields set for this object
defaultVisitTitle: String! # The default title for new visits
expenses: ExpenseConnection! # Expenses associated with the job
instructions: String # The instructions on a job
invoices: InvoiceConnection! # The invoices associated with the job
invoiceSchedule: InvoiceSchedule! # Schedule of invoices
jobberWebUri: String! # The URI for the given record in Jobber Online
jobCosting: JobCosting # The job costing fields representing the profitability of the job
jobNumber: Integer! # The number of the job
jobStatus: JobStatusTypeEnum! # The status of the job
jobType: JobTypeTypeEnum! # The type of job
lineItems: JobLineItemConnection! # The line items associated with the job
noteAttachments: JobNoteFileConnection! # The note files attached to the job
notes: JobNoteUnionConnection! # The notes attached to the job
paymentRecords: PaymentRecordConnection! # The payment records applied to this job's invoices
property: Property # The property associated with the job
quote: Quote # When applicable, the quote associated with the job
request: Request # When applicable, the request associated with the job
source: Source! # The originating source of the job
timesheetEntries: TimeSheetEntryConnection! # A list of all timesheet entries for this job
title: String # The scheduling information of the job
total: Float! # The total chargeable amount of the job
visits: VisitConnection! # The scheduled or unscheduled visits to the customer's property to complete the work associated with the job
visitsInfo: VisitsInfo! # Information about jobs visits
visitSchedule: VisitSchedule! # Schedule of visits
willClientBeAutomaticallyCharged: Boolean # The setting for automatic invoice charges
completedAt: ISO8601DateTime # The completion date of the job
createdAt: ISO8601DateTime! # The time the job was created
endAt: ISO8601DateTime # End date of the job
startAt: ISO8601DateTime # Start date of the job
updatedAt: ISO8601DateTime! # The last time the job was changed in a way that is meaningful to the Service Provider
}
A cost estimate which service providers sent to their clients before any work is done.
type Quote {
id: EncodedId! # The unique identifier
amounts: QuoteAmounts! # All amounts related to the quote
client: Client # The client the quote was made for
customFields: [CustomFieldUnion!]! # The custom fields set for this object
depositRecords: PaymentRecordConnection! # The deposit records applied to the quote
jobberWebUri: String! # The URI for the given record in Jobber Online
jobs: JobConnection # Job IDs converted from this quote
lineItems: QuoteLineItemConnection! # The line items associated with the quote
message: String # The message to the client
noteAttachments: QuoteNoteFileConnection! # The note files attached to the quote
notes: QuoteNoteUnionConnection! # The notes attached to the quote
previewUrl: String! # The URL of the quote preview in client hub
property: Property # The property the quote was made for
quoteNumber: String! # A non-unique number assigned to the quote by a Service Provider
quoteStatus: QuoteStatusTypeEnum! # The current status the quote
request: Request # The request associated with the quote
title: String # The description of the quote
unallocatedDepositRecords: PaymentRecordConnection! # The deposit records that haven't been applied to an invoice and are not refunded
clientHubViewedAt: ISO8601DateTime # Time the quote was viewed at in Client Hub
createdAt: ISO8601DateTime! # The time the quote was created
transitionedAt: ISO8601DateTime! # Time the quote transitioned to its current status
updatedAt: ISO8601DateTime! # The last time the quote was changed in a way that is meaningful to the Service Provider
}
A receipt detailing the work done as well as the cost of the service provided.
type Invoice {
id: EncodedId! # The unique identifier
amounts: InvoiceAmounts # All amounts related to the invoice
billingAddress: InvoiceBillingAddress # The billing address associated with the invoice
billingIsSameAsPropertyAddress: Boolean # Returns whether the billing address is the same as the property address
client: Client # The client the invoice is for
customFields: [CustomFieldUnion!]! # The custom fields set for this object
invoiceNumber: String! # The invoice number
invoiceNet: Int # Number of whole days after the issue_date that payment is due
invoiceStatus: InvoiceStatusTypeEnum! # The status of the invoice
jobberWebUri: String! # The URI for the given record in Jobber Online
jobs: JobConnection! # The jobs related to the invoice
lineItems: InvoiceLineItemConnection! # The line items on the invoice
linkedCommunications: MessageInterfaceConnection! # All messages related to this work object
message: String # The message on the invoice
noteAttachments: InvoiceNoteUnionConnection! # The note files attached to the invoice
notes: InvoiceNoteUnionConnection! # The notes attached to the invoice
paymentRecords: PaymentRecordConnection! # The payment records applied to the invoice
properties: PropertyConnection! # The properties related to the invoice
subject: String! # The subject of the invoice
taxCalculationMethod: String! # The tax calculation method on the invoice
taxRate: TaxRate # The tax rate information on the invoice
visits: VisitConnection! # The visits associated with the invoice
createdAt: ISO8601DateTime! # The date the invoice was created on
dateViewedInClientHub: ISO8601DateTime # The date the invoice was viewed in client hub
dueDate: ISO8601DateTime # The date the invoice is due on
issuedDate: ISO8601DateTime # The date the invoice was issued on
receivedDate: ISO8601DateTime # The date the invoice was received on
updatedAt: ISO8601DateTime! # The last time the invoice was changed in a way that is meaningful to the Service Provider
}
The Jobber account used for business operations by a Service Provider.
type Account {
id: EncodedId! # The unique identifier
features: [AccountFeature!] # A list of features
industry: Industry # Industry associated with the account
name: String! # The name of the company
phone: String # The phone number of the account
createdAt: ISO8601DateTime! # The date the account was created
}
An assessment represents each time a Service Provider goes to a client property to assess and plan for future work.
type Assessment {
id: EncodedId! # The unique identifier
allDay: Boolean! # Indicates whether the scheduled item is for a full day
assignedUsers: UserConnection # Users assigned to the scheduled item
client: Client! # The client for the assessment
createdBy: User # The user that created this scheduled item
duration: Int # Minute duration between start and end time
instructions: String # The instructions for the assessment
isComplete: Boolean! # Whether the assessment has been completed
isDefaultTitle: Boolean! # Indicates whether the title is the default
overrideOrder: Int # An override for ordering anytime and unscheduled items
property: Property # The property for the assessment
request: Request! # The parent request associated with this assessment
title: String # The title of the scheduled item
endAt: ISO8601DateTime # End date and time of the scheduled item. An unscheduled visit has both startAt and endAt being null
startAt: ISO8601DateTime # Start date and time of the scheduled item. An unscheduled visit has both startAt and endAt being null
}
An expense incurred by a Service Provider.
type Expense {
id: EncodedId! # The unique identifier
date: ISO8601DateTime! # When the expense was incurred
description: String # The description of the expense
enteredBy: User # The user who filled out the expense
linkedJob: Job # The associated Job
paidBy: User # The user who paid the expense
reimbursableTo: User # The user receiving the reimbursed expense amount
title: String! # The title of the expense
total: Float # Total cost of the expense
createdAt: ISO8601DateTime! # When the expense was created
updatedAt: ISO8601DateTime! # When the expense was updated
}
The collection of attributes that represent a product or service.
type ProductOrService {
id: EncodedId! # The unique identifier
category: ProductsAndServicesCategory! # The item's category
defaultUnitCost: Float! # A product or service has a default price
description: String # The description of product or service
durationMinutes: Minutes # The duration of the service in minutes
internalUnitCost: Float # A product or service has a default internal unit cost
markup: Float # A product or service has a default markup
name: String! # The name of the product or service
onlineBookingEnabled: Boolean # Whether the service is enabled on the booking page
onlineBookingSortOrder: Int # Sort order of the service on the booking page
taxable: Boolean # A product or service can be taxable or non-taxable
visible: Boolean # A 'visible' product or service will show up as an autocomplete suggestion on quotes/jobs/invoice line items
}
The recorded time of a Jobber user.
type TimeSheetEntry {
id: EncodedId! # The unique identifier
approved: Boolean! # Indicates whether the time sheet entry is approved
approvedBy: User # User that approved this time sheet entry
client: Client # The client associated with the job linked to the time sheet entry
finalDuration: Seconds! # Duration of a stopped time sheet entry (resolves to 0 for ticking entries)
job: Job # Job linked to the timer
label: String # Label on the time sheet entry
labourRate: Float # Labour rate associated with this time sheet entry
note: String # Note attached
paidBy: User # User that marked this time sheet entry as paid
ticking: Boolean! # Flag indicating whether the timer is actively running or not
user: User # User the time sheet entry belongs to
visit: Visit # Visit linked to the time sheet entry
visitDurationTotal: Int! # Total duration in seconds the user worked on the related visit
createdAt: ISO8601DateTime! # The time the time sheet was created
endAt: ISO8601DateTime # Date and time the time sheet entry was completed (resolves to nil for time sheets without a time range)
startAt: ISO8601DateTime! # Date and time the time sheet entry was started
updatedAt: ISO8601DateTime! # The last time the time sheet was updated
}
Properties are locations owned by Service Consumers where Service Providers provide service for.
type Property {
id: EncodedId! # The unique identifier
address: PropertyAddress! # The address of the property
client: Client # The client associated with the property
customFields: [CustomFieldUnion!]! # The custom fields set for this object
isBillingAddress: Boolean # Whether the property is a billing address
jobberWebUri: String! # The URI for the given record in Jobber Online
jobs: JobConnection! # The jobs associated with the property
quotes: QuoteConnection! # The quotes associated with the property
requests: RequestConnection! # The requests associated with the property
routingOrder: Int # The routing order of the property
taxRate: TaxRate # The tax rate of the property
}
A user belongs to an account and generally completes work for clients.
type User {
id: EncodedId! # The unique identifier
account: Account # The parent account for the user
address: UserAddress # The address of the user
apps: ApplicationConnection! # List of apps user has connected
customFields: [CustomFieldUnion!]! # The custom fields set for this object
email: UserEmail! # The email address of the user
firstDayOfTheWeek: UserFirstDayOfTheWeekEnum! # The first day of the week of the user's account
franchiseTokenLastFour: String # Returns the last four characters of the franchise access token for the user if one exists
isAccountAdmin: Boolean! # Is the user an administrator on their account
isAccountOwner: Boolean! # Is the user the owner of their account
isCurrentUser: Boolean! # Is this the authenticated user querying
name: Name! # The name of the user
phone: UserPhone # The phone of the user
status: UserStatusEnum! # The status of the user
timezone: Timezone # The timezone of the user's account
lastLoginAt: ISO8601DateTime # The date the user logged in last
}
A visit that represents each time a Service Provider goes to a client property to complete work.
type Visit {
id: EncodedId! # The unique identifier
actionsUponComplete: [VisitActionUponComplete!]! # The actions available after completing the visit
allDay: Boolean! # Indicates whether the scheduled item is for a full day
arrivalWindow: ArrivalWindow # The time window during which the SP can arrive at the visit
assignedUsers: UserConnection # Users assigned to the scheduled item
client: Client! # The Client for the visit
createdBy: User # The user that created this scheduled item
duration: Int # Minute duration between start and end time
instructions: String # The instructions for the visit
invoice: Invoice # The invoice for the visit
isComplete: Boolean! # Whether the visit has been completed
isDefaultTitle: Boolean! # Indicates whether the title is the default
isLastScheduledVisit: Boolean! # Whether the visit is the last visit for the associated job
job: Job! # The Job the visit is associated with
lineItems: JobLineItemConnection! # A list of all non-zero quantity line items for the visit
notes: JobNoteUnionConnection # The notes attached to the associated job
overrideOrder: Int # An override for ordering anytime and unscheduled items
property: Property! # The property for the visit
timeSheetEntries: TimeSheetEntryConnection # A list of all timesheet entries for this visit
title: String # The title of the scheduled item
visitStatus: VisitStatusTypeEnum! # The status of the visit
completedAt: ISO8601DateTime # The time that the visit was completed
createdAt: ISO8601DateTime! # The time that the visit was created
endAt: ISO8601DateTime # End date and time of the scheduled item. An unscheduled visit has both startAt and endAt being null
startAt: ISO8601DateTime # Start date and time of the scheduled item. An unscheduled visit has both startAt and endAt being null
}
Reach out to our API support team at: [email protected].