Service Types
Define and manage categories of services
Overview
Service Types define the categories of work your organization performs. They provide default pricing, billing configuration, and integrate with QuickBooks for accounting. Types are classified using boolean flags such as isServiceType, isAppointmentType, isProjectType, and isServiceCall rather than a single category field. The display field holds the human-readable name, and isInactive indicates whether the type is disabled (note the inverted logic compared to an isActive flag).
List Service Types
Retrieve service types using cursor-based pagination. Use the selector argument to pass filters and search criteria.
query InfiniteTypes(
$selector: TypesSelector
$sort: Sort
$first: Int!
$after: String
) {
infiniteTypes(
selector: $selector
sort: $sort
first: $first
after: $after
) {
edges {
node {
id
display
desc
defaultPrice
isServiceType
isAppointmentType
isProjectType
isServiceCall
isInactive
isTaxable
isBilledHourly
quickbooksId
}
cursor
}
pageInfo {
hasNextPage
endCursor
}
}
}
# Variables
{
"first": 50,
"selector": {
"filters": {
"isInactive": { "eq": false },
"isServiceType": { "eq": true }
},
"search": "cleaning"
}
}Response:
{
"data": {
"infiniteTypes": {
"edges": [
{
"node": {
"id": "type_001",
"display": "Weekly Pool Cleaning",
"desc": "Standard weekly pool maintenance including skimming, brushing, and chemical testing",
"defaultPrice": 75.00,
"isServiceType": true,
"isAppointmentType": false,
"isProjectType": false,
"isServiceCall": false,
"isInactive": false,
"isTaxable": false,
"isBilledHourly": false,
"quickbooksId": "QB-ITEM-001"
},
"cursor": "eyJpZCI6InR5cGVfMDAxIn0="
},
{
"node": {
"id": "type_002",
"display": "Chemical Balance",
"desc": "Test and adjust pool chemical levels",
"defaultPrice": 50.00,
"isServiceType": true,
"isAppointmentType": false,
"isProjectType": false,
"isServiceCall": false,
"isInactive": false,
"isTaxable": false,
"isBilledHourly": false,
"quickbooksId": "QB-ITEM-002"
},
"cursor": "eyJpZCI6InR5cGVfMDAyIn0="
}
],
"pageInfo": {
"hasNextPage": true,
"endCursor": "eyJpZCI6InR5cGVfMDAyIn0="
}
}
}
}Filtering Options
The TypesSelector accepts a filters object and an optional search string (max 600 characters). Available filters on TypeFilters:
id- StringFilterisInactive- BooleanFilterisServiceType- BooleanFilterisAppointmentType- BooleanFilterisProjectType- BooleanFilterisServiceCall- BooleanFilterisTaxable- BooleanFilterisBilledHourly- BooleanFilterisQuotableServiceType- BooleanFiltercreatedAt- DateTimeFilterupdatedAt- DateTimeFilter
Create Service Type
Create a new service type.
mutation CreateType($data: CreateTypeInput!) {
createType(data: $data) {
id
display
desc
defaultPrice
isServiceType
isAppointmentType
isInactive
isTaxable
createdAt
}
}
# Variables
{
"data": {
"display": "Filter Replacement",
"desc": "Replace pool filter cartridge or media",
"defaultPrice": 150.00,
"isServiceType": true,
"isAppointmentType": false,
"isProjectType": false,
"isServiceCall": false,
"isTaxable": true,
"isBilledHourly": false
}
}Response:
{
"data": {
"createType": {
"id": "type_010",
"display": "Filter Replacement",
"desc": "Replace pool filter cartridge or media",
"defaultPrice": 150.00,
"isServiceType": true,
"isAppointmentType": false,
"isInactive": false,
"isTaxable": true,
"createdAt": "2024-01-20T09:00:00Z"
}
}
}Update Service Type
Update an existing service type.
mutation UpdateType($id: ID!, $data: UpdateTypeInput!) {
updateType(id: $id, data: $data) {
id
display
desc
defaultPrice
isInactive
updatedAt
}
}
# Variables
{
"id": "type_001",
"data": {
"defaultPrice": 80.00,
"desc": "Updated weekly maintenance service"
}
}Response:
{
"data": {
"updateType": {
"id": "type_001",
"display": "Weekly Pool Cleaning",
"desc": "Updated weekly maintenance service",
"defaultPrice": 80.00,
"isInactive": false,
"updatedAt": "2024-01-20T10:00:00Z"
}
}
}Bulk & Export Operations
Exporting or bulk-editing many service types at once is handled asynchronously through the Bulk Operations API. These jobs run in the background and report progress you can poll. See the Bulk Operations guide for the full workflow.
Field Reference
| Field | Type | Description |
|---|---|---|
id | ID! | Unique identifier |
display | String(nullable) | Display name / human-readable name for the type |
desc | String(nullable) | Type description |
defaultPrice | Number(nullable) | Default price for this type |
isAppointmentType | Boolean(nullable) | Whether this type is used for appointments |
isQuotableServiceType | Boolean(nullable) | Whether this type can be quoted |
isServiceType | Boolean(nullable) | Whether this is a service type |
isProjectType | Boolean(nullable) | Whether this is a project type |
isServiceCall | Boolean(nullable) | Whether this is a service call type |
includesServiceCallFee | Boolean(nullable) | Whether the service call fee is included |
isTaxable | Boolean(nullable) | Whether this type is taxable |
isBilledHourly | Boolean(nullable) | Whether this type is billed hourly |
isInactive | Boolean(nullable) | Whether the type is inactive (true = inactive) |
quickbooksId | String(nullable) | QuickBooks item ID |
minimumBillableHours | Number(nullable) | Minimum billable hours |
intervalToRoundUp | Number(nullable) | Interval to round up billable time |
billedForTotalManHours | Boolean(nullable) | Whether billed for total man-hours |
deleted | Boolean(nullable) | Soft delete flag |
createdAt | Date! | Creation timestamp |
updatedAt | Date! | Last update timestamp |
deletedAt | Date(nullable) | Deletion timestamp |
appointmentDefaults | [TypeAppointmentDefaultEntity](nullable) | Default settings for appointments of this type |
projectDefaults | [TypeProjectDefaultEntity](nullable) | Default settings for projects of this type |
customServiceReport | CustomServiceReportEntity(nullable) | Custom service report configuration |