REST endpoints for equipment in ServFlo: 20 operations with parameters, request and response fields, permissions and curl examples.
Base URL: https://app.servflo.ai/api. Every call needs Authorization: Bearer sfk_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.
GET /organizations/{organizationId}/customers/{customerId}/sites
The original API's sites: the properties the customer currently occupies. Read-only. Prefer GET /properties?customerId=… for the full property records.
One of RESIDENTIAL, COMMERCIAL, MULTI_FAMILY, INDUSTRIAL.
contactName
string or null
Who to ask for on site.
contactPhone
string or null
contactEmail
string or null
timezone
string
IANA timezone of the property.
accessInstructions
string or null
safetyNotes
string or null
gateCode
string or null
petsOnSite
boolean
petNotes
string or null
yearBuilt
integer or null
squareFeet
integer or null
tags
array of string
latitude
number or null
longitude
number or null
geocodeSource
string or null
Where the coordinates came from: GEOCODER (the address), GEOCODER_STREET / GEOCODER_AREA (approximate: only its street or town is on the map; visit safety then searches the ZIP), MANUAL (pinned by hand).
geocodedAt
string (date-time) or null
taxRate
number or null
Tax rate in percent for work here; null = the business default.
customFields
any
Custom field values by key (definitions: GET /custom-fields).
One of RESIDENTIAL, COMMERCIAL, MULTI_FAMILY, INDUSTRIAL.
contactName
string or null
Who to ask for on site.
contactPhone
string or null
contactEmail
string or null
timezone
string
IANA timezone of the property.
accessInstructions
string or null
safetyNotes
string or null
gateCode
string or null
petsOnSite
boolean
petNotes
string or null
yearBuilt
integer or null
squareFeet
integer or null
tags
array of string
latitude
number or null
longitude
number or null
geocodeSource
string or null
Where the coordinates came from: GEOCODER (the address), GEOCODER_STREET / GEOCODER_AREA (approximate: only its street or town is on the map; visit safety then searches the ZIP), MANUAL (pinned by hand).
geocodedAt
string (date-time) or null
taxRate
number or null
Tax rate in percent for work here; null = the business default.
customFields
any
Custom field values by key (definitions: GET /custom-fields).
One of RESIDENTIAL, COMMERCIAL, MULTI_FAMILY, INDUSTRIAL.
contactName
string or null
Who to ask for on site.
contactPhone
string or null
contactEmail
string or null
timezone
string
IANA timezone of the property.
accessInstructions
string or null
safetyNotes
string or null
gateCode
string or null
petsOnSite
boolean
petNotes
string or null
yearBuilt
integer or null
squareFeet
integer or null
tags
array of string
latitude
number or null
longitude
number or null
geocodeSource
string or null
Where the coordinates came from: GEOCODER (the address), GEOCODER_STREET / GEOCODER_AREA (approximate: only its street or town is on the map; visit safety then searches the ZIP), MANUAL (pinned by hand).
geocodedAt
string (date-time) or null
taxRate
number or null
Tax rate in percent for work here; null = the business default.
customFields
any
Custom field values by key (definitions: GET /custom-fields).
GET /organizations/{organizationId}/customers/{customerId}/assets
The customer's own equipment (customer-owned: vehicles, boats …) and the equipment at the properties they currently occupy, filtered by text (name, serial, make, model), type, ownership and status, paged with a total. Read-only.
Free-text search over the list's names, numbers and contact details. Up to 200 characters.
equipmentTypeId
query
string
No
Only this equipment type.
ownership
query
enum
No
Who owns it: PROPERTY (stays with the property when it changes hands; propertyId required) or CUSTOMER (a car, a boat: linkable to that customer's jobs at any address; propertyId optional, where it is kept). Unset: CUSTOMER when customerId is given or the type is customer-owned and a customer is known, else PROPERTY. One of PROPERTY, CUSTOMER.
status
query
enum
No
One of IN_SERVICE, OUT_OF_SERVICE, RETIRED.
limit
query
integer
No
Page size, 1–200. Default 50.
offset
query
integer
No
Rows to skip; the answer's total counts every match. Default 0.
POST /organizations/{organizationId}/customers/{customerId}/assets
Registers equipment for the customer: customer-owned (ownership CUSTOMER, e.g. a car; propertyId optional, where it is kept) or at one of the customer's current properties (ownership PROPERTY, propertyId or siteId required). Type from equipmentTypeId (GET /equipment-types), else matched from the name; its required custom fields must be given. Serial numbers are unique per property and per owning customer (409). Written to the equipment history. Returns the equipment.
Permission
properties.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
The property it belongs to (property-owned) or is kept at (customer-owned; null clears it).
siteId
string or null
No
The original API's name for propertyId.
ownership
enum
No
Who owns it: PROPERTY (stays with the property when it changes hands; propertyId required) or CUSTOMER (a car, a boat: linkable to that customer's jobs at any address; propertyId optional, where it is kept). Unset: CUSTOMER when customerId is given or the type is customer-owned and a customer is known, else PROPERTY. One of PROPERTY, CUSTOMER.
equipmentTypeId
string or null
No
Its equipment type (GET /equipment-types). Unset on create: matched from the name, else Other.
name
string
Yes
Up to 500 characters.
serialNumber
string or null
No
Serial number or VIN; unique per property and per owning customer; blank = not recorded. Up to 500 characters.
manufacturer
string or null
No
Up to 500 characters.
model
string or null
No
Up to 500 characters.
status
enum
No
One of IN_SERVICE, OUT_OF_SERVICE, RETIRED.
installationDate
empty string or string or null
No
commissioningDate
empty string or string or null
No
warrantyStart
empty string or string or null
No
warrantyEnd
empty string or string or null
No
notes
string or null
No
Up to 5000 characters.
equipmentType
enum or null
No
Lifespan key for the replacement outlook; unset: the equipment type's, else read from the name. One of AC, HEAT_PUMP, FURNACE, BOILER, MINI_SPLIT, AIR_HANDLER, PACKAGE_UNIT, WATER_HEATER, TANKLESS_WATER_HEATER, THERMOSTAT, HUMIDIFIER, AIR_PURIFIER, WATER_SOFTENER, SUMP_PUMP, WELL_PUMP, SEPTIC_PUMP, BACKFLOW_PREVENTER, ELECTRICAL_PANEL, GENERATOR, EV_CHARGER, GARAGE_DOOR_OPENER, POOL_PUMP, POOL_HEATER, REFRIGERATION, ICE_MACHINE, OTHER.
installYear
integer or null
No
The install year when only the year is known (data plate); installationDate wins when set. 1900–2100.
expectedLifespanYears
integer or null
No
This unit's expected lifespan in years, overriding the organization's lifespan table. 1–100.
refrigerantType
string or null
No
e.g. R-22, R-410A, R-454B. R-22 raises the replacement likelihood. Up to 50 characters.
condition
enum or null
No
Condition as last assessed. One of GOOD, FAIR, POOR, FAILED.
customFields
object
No
Values of the fields for every type and of its own type's (GET /custom-fields?entity=EQUIPMENT&equipmentTypeId=…). Required ones are checked on create and when the type changes.
Every piece of equipment in the business (a technician: only that of their jobs), with type, property and owner, filtered by text (name, serial, make, model), type, ownership and status, paged with a total. Read-only.
Free-text search over the list's names, numbers and contact details. Up to 200 characters.
equipmentTypeId
query
string
No
Only this equipment type.
ownership
query
enum
No
Who owns it: PROPERTY (stays with the property when it changes hands; propertyId required) or CUSTOMER (a car, a boat: linkable to that customer's jobs at any address; propertyId optional, where it is kept). Unset: CUSTOMER when customerId is given or the type is customer-owned and a customer is known, else PROPERTY. One of PROPERTY, CUSTOMER.
status
query
enum
No
One of IN_SERVICE, OUT_OF_SERVICE, RETIRED.
limit
query
integer
No
Page size, 1–200. Default 50.
offset
query
integer
No
Rows to skip; the answer's total counts every match. Default 0.
GET /organizations/{organizationId}/properties/{propertyId}/assets
Equipment registered at the property (its own, and customers' equipment kept there), filtered by text, type, ownership and status, paged with a total. Read-only. 404 for an unknown property.
Free-text search over the list's names, numbers and contact details. Up to 200 characters.
equipmentTypeId
query
string
No
Only this equipment type.
ownership
query
enum
No
Who owns it: PROPERTY (stays with the property when it changes hands; propertyId required) or CUSTOMER (a car, a boat: linkable to that customer's jobs at any address; propertyId optional, where it is kept). Unset: CUSTOMER when customerId is given or the type is customer-owned and a customer is known, else PROPERTY. One of PROPERTY, CUSTOMER.
status
query
enum
No
One of IN_SERVICE, OUT_OF_SERVICE, RETIRED.
limit
query
integer
No
Page size, 1–200. Default 50.
offset
query
integer
No
Rows to skip; the answer's total counts every match. Default 0.
POST /organizations/{organizationId}/properties/{propertyId}/assets
Registers equipment at the property: owned by the property, or, with customerId (ownership CUSTOMER), a customer's own equipment kept there. Type from equipmentTypeId, else matched from the name. Serial numbers are unique per property and per owning customer (409). Written to the equipment history. Returns the equipment.
Permission
properties.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
The owning customer for customer-owned equipment (on an update, null makes it property-owned).
ownership
enum
No
Who owns it: PROPERTY (stays with the property when it changes hands; propertyId required) or CUSTOMER (a car, a boat: linkable to that customer's jobs at any address; propertyId optional, where it is kept). Unset: CUSTOMER when customerId is given or the type is customer-owned and a customer is known, else PROPERTY. One of PROPERTY, CUSTOMER.
equipmentTypeId
string or null
No
Its equipment type (GET /equipment-types). Unset on create: matched from the name, else Other.
name
string
Yes
Up to 500 characters.
serialNumber
string or null
No
Serial number or VIN; unique per property and per owning customer; blank = not recorded. Up to 500 characters.
manufacturer
string or null
No
Up to 500 characters.
model
string or null
No
Up to 500 characters.
status
enum
No
One of IN_SERVICE, OUT_OF_SERVICE, RETIRED.
installationDate
empty string or string or null
No
commissioningDate
empty string or string or null
No
warrantyStart
empty string or string or null
No
warrantyEnd
empty string or string or null
No
notes
string or null
No
Up to 5000 characters.
equipmentType
enum or null
No
Lifespan key for the replacement outlook; unset: the equipment type's, else read from the name. One of AC, HEAT_PUMP, FURNACE, BOILER, MINI_SPLIT, AIR_HANDLER, PACKAGE_UNIT, WATER_HEATER, TANKLESS_WATER_HEATER, THERMOSTAT, HUMIDIFIER, AIR_PURIFIER, WATER_SOFTENER, SUMP_PUMP, WELL_PUMP, SEPTIC_PUMP, BACKFLOW_PREVENTER, ELECTRICAL_PANEL, GENERATOR, EV_CHARGER, GARAGE_DOOR_OPENER, POOL_PUMP, POOL_HEATER, REFRIGERATION, ICE_MACHINE, OTHER.
installYear
integer or null
No
The install year when only the year is known (data plate); installationDate wins when set. 1900–2100.
expectedLifespanYears
integer or null
No
This unit's expected lifespan in years, overriding the organization's lifespan table. 1–100.
refrigerantType
string or null
No
e.g. R-22, R-410A, R-454B. R-22 raises the replacement likelihood. Up to 50 characters.
condition
enum or null
No
Condition as last assessed. One of GOOD, FAIR, POOR, FAILED.
customFields
object
No
Values of the fields for every type and of its own type's (GET /custom-fields?entity=EQUIPMENT&equipmentTypeId=…). Required ones are checked on create and when the type changes.
GET /organizations/{organizationId}/customers/{customerId}/assets/options
Id, name, type and ownership of the equipment a job for this customer may link (not retired): their own equipment, linkable at any address, and the equipment at their current properties. For the job form's picker. Read-only.
GET /organizations/{organizationId}/assets/{assetId}
One piece of equipment with its type, its property (if any) and the customer it belongs to (the owning customer, else the property's current primary customer). Read-only.
The property it belongs to (property-owned) or is kept at (customer-owned); null = a customer's, kept nowhere in particular.
customerId
string or null
Set = customer-owned (a car, a boat): it goes wherever that customer's jobs are.
ownership
enum
Who owns it: the property (stays on a transfer) or the customer. One of PROPERTY, CUSTOMER.
equipmentTypeId
string or null
Its equipment type.
type
object or null
type.id
string
type.name
string
type.icon
string
type.customerOwned
boolean
type.builtInFields
array of string
type.builtInLabels
any
type.archived
boolean
name
string
serialNumber
string
Serial number or VIN; "" when not recorded. Unique per property and per owning customer.
manufacturer
string or null
model
string or null
status
enum
RETIRED equipment is kept for history instead of being deleted. One of IN_SERVICE, OUT_OF_SERVICE, RETIRED.
installationDate
string or null
YYYY-MM-DD
commissioningDate
string or null
YYYY-MM-DD
warrantyStart
string or null
YYYY-MM-DD
warrantyEnd
string or null
YYYY-MM-DD
notes
string or null
equipmentType
string or null
Customer 360 lifespan key (AC, FURNACE …).
installYear
integer or null
expectedLifespanYears
integer or null
refrigerantType
string or null
condition
enum or null
One of GOOD, FAIR, POOR, FAILED.
customFields
any
Custom field values by key (definitions: GET /custom-fields?entity=EQUIPMENT).
createdAt
string (date-time)
updatedAt
string (date-time)
property
object or null
property.id
string
Property id.
property.organizationId
string
property.name
string or null
property.address
string or null
property.address2
string or null
property.city
string or null
property.state
string or null
property.zip
string or null
property.country
string or null
property.propertyType
enum
One of RESIDENTIAL, COMMERCIAL, MULTI_FAMILY, INDUSTRIAL.
property.contactName
string or null
Who to ask for on site.
property.contactPhone
string or null
property.contactEmail
string or null
property.timezone
string
IANA timezone of the property.
property.accessInstructions
string or null
property.safetyNotes
string or null
property.gateCode
string or null
property.petsOnSite
boolean
property.petNotes
string or null
property.yearBuilt
integer or null
property.squareFeet
integer or null
property.tags
array of string
property.latitude
number or null
property.longitude
number or null
property.geocodeSource
string or null
Where the coordinates came from: GEOCODER (the address), GEOCODER_STREET / GEOCODER_AREA (approximate: only its street or town is on the map; visit safety then searches the ZIP), MANUAL (pinned by hand).
property.geocodedAt
string (date-time) or null
property.taxRate
number or null
Tax rate in percent for work here; null = the business default.
property.customFields
any
Custom field values by key (definitions: GET /custom-fields).
property.createdAt
string (date-time)
property.updatedAt
string (date-time)
customer
object or null
The owner: the owning customer, else the property's current primary customer; null when vacant.
customer.id
string
customer.name
string
site
object or null
The property again, under the original API's name.
site.id
string
Property id.
site.organizationId
string
site.name
string or null
site.address
string or null
site.address2
string or null
site.city
string or null
site.state
string or null
site.zip
string or null
site.country
string or null
site.propertyType
enum
One of RESIDENTIAL, COMMERCIAL, MULTI_FAMILY, INDUSTRIAL.
site.contactName
string or null
Who to ask for on site.
site.contactPhone
string or null
site.contactEmail
string or null
site.timezone
string
IANA timezone of the property.
site.accessInstructions
string or null
site.safetyNotes
string or null
site.gateCode
string or null
site.petsOnSite
boolean
site.petNotes
string or null
site.yearBuilt
integer or null
site.squareFeet
integer or null
site.tags
array of string
site.latitude
number or null
site.longitude
number or null
site.geocodeSource
string or null
Where the coordinates came from: GEOCODER (the address), GEOCODER_STREET / GEOCODER_AREA (approximate: only its street or town is on the map; visit safety then searches the ZIP), MANUAL (pinned by hand).
site.geocodedAt
string (date-time) or null
site.taxRate
number or null
Tax rate in percent for work here; null = the business default.
site.customFields
any
Custom field values by key (definitions: GET /custom-fields).
Changes the fields sent. Moving it to another property, changing its owner (ownership / customerId), its type and its status (RETIRED instead of deleting) are recorded in the equipment history. Custom field values merge into the saved ones; a new type's required fields are checked. Returns the equipment.
Permission
properties.write (Owner, Admin, Dispatcher)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
The property it belongs to (property-owned) or is kept at (customer-owned; null clears it).
siteId
string or null
No
The original API's name for propertyId.
customerId
string or null
No
The owning customer for customer-owned equipment (on an update, null makes it property-owned).
ownership
enum
No
Who owns it: PROPERTY (stays with the property when it changes hands; propertyId required) or CUSTOMER (a car, a boat: linkable to that customer's jobs at any address; propertyId optional, where it is kept). Unset: CUSTOMER when customerId is given or the type is customer-owned and a customer is known, else PROPERTY. One of PROPERTY, CUSTOMER.
equipmentTypeId
string or null
No
Its equipment type (GET /equipment-types). Unset on create: matched from the name, else Other.
name
string
No
Up to 500 characters.
serialNumber
string or null
No
Serial number or VIN; unique per property and per owning customer; blank = not recorded. Up to 500 characters.
manufacturer
string or null
No
Up to 500 characters.
model
string or null
No
Up to 500 characters.
status
enum
No
One of IN_SERVICE, OUT_OF_SERVICE, RETIRED.
installationDate
empty string or string or null
No
commissioningDate
empty string or string or null
No
warrantyStart
empty string or string or null
No
warrantyEnd
empty string or string or null
No
notes
string or null
No
Up to 5000 characters.
equipmentType
enum or null
No
Lifespan key for the replacement outlook; unset: the equipment type's, else read from the name. One of AC, HEAT_PUMP, FURNACE, BOILER, MINI_SPLIT, AIR_HANDLER, PACKAGE_UNIT, WATER_HEATER, TANKLESS_WATER_HEATER, THERMOSTAT, HUMIDIFIER, AIR_PURIFIER, WATER_SOFTENER, SUMP_PUMP, WELL_PUMP, SEPTIC_PUMP, BACKFLOW_PREVENTER, ELECTRICAL_PANEL, GENERATOR, EV_CHARGER, GARAGE_DOOR_OPENER, POOL_PUMP, POOL_HEATER, REFRIGERATION, ICE_MACHINE, OTHER.
installYear
integer or null
No
The install year when only the year is known (data plate); installationDate wins when set. 1900–2100.
expectedLifespanYears
integer or null
No
This unit's expected lifespan in years, overriding the organization's lifespan table. 1–100.
refrigerantType
string or null
No
e.g. R-22, R-410A, R-454B. R-22 raises the replacement likelihood. Up to 50 characters.
condition
enum or null
No
Condition as last assessed. One of GOOD, FAIR, POOR, FAILED.
customFields
object
No
Values of the fields for every type and of its own type's (GET /custom-fields?entity=EQUIPMENT&equipmentTypeId=…). Required ones are checked on create and when the type changes.
The property it belongs to (property-owned) or is kept at (customer-owned); null = a customer's, kept nowhere in particular.
customerId
string or null
Set = customer-owned (a car, a boat): it goes wherever that customer's jobs are.
ownership
enum
Who owns it: the property (stays on a transfer) or the customer. One of PROPERTY, CUSTOMER.
equipmentTypeId
string or null
Its equipment type.
type
object or null
type.id
string
type.name
string
type.icon
string
type.customerOwned
boolean
type.builtInFields
array of string
type.builtInLabels
any
type.archived
boolean
name
string
serialNumber
string
Serial number or VIN; "" when not recorded. Unique per property and per owning customer.
manufacturer
string or null
model
string or null
status
enum
RETIRED equipment is kept for history instead of being deleted. One of IN_SERVICE, OUT_OF_SERVICE, RETIRED.
installationDate
string or null
YYYY-MM-DD
commissioningDate
string or null
YYYY-MM-DD
warrantyStart
string or null
YYYY-MM-DD
warrantyEnd
string or null
YYYY-MM-DD
notes
string or null
equipmentType
string or null
Customer 360 lifespan key (AC, FURNACE …).
installYear
integer or null
expectedLifespanYears
integer or null
refrigerantType
string or null
condition
enum or null
One of GOOD, FAIR, POOR, FAILED.
customFields
any
Custom field values by key (definitions: GET /custom-fields?entity=EQUIPMENT).
createdAt
string (date-time)
updatedAt
string (date-time)
property
object or null
property.id
string
Property id.
property.organizationId
string
property.name
string or null
property.address
string or null
property.address2
string or null
property.city
string or null
property.state
string or null
property.zip
string or null
property.country
string or null
property.propertyType
enum
One of RESIDENTIAL, COMMERCIAL, MULTI_FAMILY, INDUSTRIAL.
property.contactName
string or null
Who to ask for on site.
property.contactPhone
string or null
property.contactEmail
string or null
property.timezone
string
IANA timezone of the property.
property.accessInstructions
string or null
property.safetyNotes
string or null
property.gateCode
string or null
property.petsOnSite
boolean
property.petNotes
string or null
property.yearBuilt
integer or null
property.squareFeet
integer or null
property.tags
array of string
property.latitude
number or null
property.longitude
number or null
property.geocodeSource
string or null
Where the coordinates came from: GEOCODER (the address), GEOCODER_STREET / GEOCODER_AREA (approximate: only its street or town is on the map; visit safety then searches the ZIP), MANUAL (pinned by hand).
property.geocodedAt
string (date-time) or null
property.taxRate
number or null
Tax rate in percent for work here; null = the business default.
property.customFields
any
Custom field values by key (definitions: GET /custom-fields).
property.createdAt
string (date-time)
property.updatedAt
string (date-time)
customer
object or null
The owner: the owning customer, else the property's current primary customer; null when vacant.
GET /organizations/{organizationId}/assets/{assetId}/photos
Before, after, general and issue photos taken on the jobs linked to this equipment, newest first (up to 60), each with its job and 10-minute view and download URLs. Read-only. A technician gets 404 for equipment they have no job on.
GET /organizations/{organizationId}/equipment-types
The business's kinds of equipment (seeded once from its trade, e.g. Furnace / Air conditioner for HVAC, Car / Boat for detailing), each with its icon, built-in columns, default ownership and its own custom fields; archived ones with includeArchived. Needed before registering equipment (equipmentTypeId). Read-only.
POST /organizations/{organizationId}/equipment-types
Adds a kind of equipment (e.g. Generator, Jet ski). Add its own fields after with POST /custom-fields (entity EQUIPMENT, equipmentTypeId). Returns the type.
Permission
settings.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
Icon shown beside the type. One of wrench, fan, flame, snowflake, thermometer, droplet, droplets, waves, zap, plug, battery, sun, car, truck, bus, ship, bike, caravan, home, door, bug, tree, sprout, sparkles, spray, lock, refrigerator, washing-machine, box, cog.
customerOwned
boolean
No
New equipment of this type belongs to the customer (vehicles, boats).
builtInFields
array of enum
No
Built-in columns shown for the type (the rest are hidden): serialNumber, manufacturer, model, installationDate, warranty, condition, refrigerantType, lifespan. Up to 8 items.
builtInLabels
object
No
Own labels for built-in columns, e.g. { "serialNumber": "VIN", "manufacturer": "Make" }.
lifespanKey
enum or null
No
Customer 360 lifespan key new equipment of this type gets (AC, FURNACE …). One of AC, HEAT_PUMP, FURNACE, BOILER, MINI_SPLIT, AIR_HANDLER, PACKAGE_UNIT, WATER_HEATER, TANKLESS_WATER_HEATER, THERMOSTAT, HUMIDIFIER, AIR_PURIFIER, WATER_SOFTENER, SUMP_PUMP, WELL_PUMP, SEPTIC_PUMP, BACKFLOW_PREVENTER, ELECTRICAL_PANEL, GENERATOR, EV_CHARGER, GARAGE_DOOR_OPENER, POOL_PUMP, POOL_HEATER, REFRIGERATION, ICE_MACHINE, OTHER.
Icon shown beside the type. One of wrench, fan, flame, snowflake, thermometer, droplet, droplets, waves, zap, plug, battery, sun, car, truck, bus, ship, bike, caravan, home, door, bug, tree, sprout, sparkles, spray, lock, refrigerator, washing-machine, box, cog.
customerOwned
boolean
No
builtInFields
array of enum
No
Built-in columns shown for the type (the rest are hidden): serialNumber, manufacturer, model, installationDate, warranty, condition, refrigerantType, lifespan. Up to 8 items.
builtInLabels
object
No
Own labels for built-in columns, e.g. { "serialNumber": "VIN", "manufacturer": "Make" }.
lifespanKey
enum or null
No
Customer 360 lifespan key new equipment of this type gets (AC, FURNACE …). One of AC, HEAT_PUMP, FURNACE, BOILER, MINI_SPLIT, AIR_HANDLER, PACKAGE_UNIT, WATER_HEATER, TANKLESS_WATER_HEATER, THERMOSTAT, HUMIDIFIER, AIR_PURIFIER, WATER_SOFTENER, SUMP_PUMP, WELL_PUMP, SEPTIC_PUMP, BACKFLOW_PREVENTER, ELECTRICAL_PANEL, GENERATOR, EV_CHARGER, GARAGE_DOOR_OPENER, POOL_PUMP, POOL_HEATER, REFRIGERATION, ICE_MACHINE, OTHER.
POST /organizations/{organizationId}/equipment-types/presets
Adds the preset types (with their fields) of a trade the business does not have yet, e.g. pool-spa for a plumber who also services pools. Presets already added, renamed or archived are left alone. Returns how many were added and every type.
Permission
settings.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
GET /organizations/{organizationId}/equipment-labels
The business's word for equipment, singular and plural (e.g. Vehicle / Vehicles for a detailer, Unit / Units for HVAC): the owner's own when set, else the trade's default. Use it when talking to the business about its equipment. Read-only.
Sets the word used for equipment across the app, the portal and emails (singular and plural, 1–40 characters each); null goes back to the trade's default. Returns the wording in use.
Permission
settings.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.