Read Service Fusion customers, jobs, estimates, invoices and schedule; create customers and jobs.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
WRITE: create a customer in Service Fusion, optionally with contacts (phones, emails) and service locations. It is visible to the whole team and cannot be deleted through this API; creating the same name twice makes two customers, so search with servicefusion_list_customers first. POST /customers.
Customer (company or person) name.
Sales agent name.
Notes shown on customer-facing documents.
Custom fields: [{name, value}] with names as configured in Service Fusion.
Internal notes.
Name of an existing parent customer.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
WRITE: create a customer in Service Fusion, optionally with contacts (phones, emails) and service locations. It is visible to the whole team and cannot be deleted through this API; creating the same name twice makes two customers, so search with servicefusion_list_customers first. POST /customers.
| Argument | Type | Description |
|---|---|---|
| agent | string | Sales agent name. |
| is_vip | boolean | |
| contacts | array | |
| discount | number | |
| industry | string | |
| locations | array | |
| is_taxable | boolean | |
| payment_type | string | |
| public_notes | string | Notes shown on customer-facing documents. |
| credit_rating | string | |
| custom_fields | array | Custom fields: [{name, value}] with names as configured in Service Fusion. |
| customer_name* | string | Customer (company or person) name. |
| discount_type | string | |
| payment_terms | string | |
| private_notes | string | Internal notes. |
| tax_item_name | string | |
| account_number | string | |
| parent_customer | string | Name of an existing parent customer. |
| referral_source | string | |
| assigned_contract | string | |
| labor_charge_type | string | |
| is_bill_for_drive_time | boolean | |
| labor_charge_default_rate | number |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_name"
],
"properties": {
"agent": {
"type": "string",
"maxLength": 200,
"description": "Sales agent name."
},
"is_vip": {
"type": "boolean"
},
"contacts": {
"type": "array",
"items": {
"type": "object",
"required": [
"fname",
"lname"
],
"properties": {
"fname": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"lname": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"emails": {
"type": "array",
"items": {
"type": "object",
"required": [
"email"
],
"properties": {
"class": {
"enum": [
"Personal",
"Business",
"Other"
],
"type": "string"
},
"email": {
"type": "string",
"maxLength": 200,
"minLength": 3
},
"types_accepted": {
"type": "string",
"pattern": "^(CONF|STATUS|PMT|INV)(,(CONF|STATUS|PMT|INV))*$"
}
}
},
"maxItems": 10
},
"phones": {
"type": "array",
"items": {
"type": "object",
"required": [
"phone"
],
"properties": {
"ext": {
"type": "integer",
"maximum": 99999,
"minimum": 0
},
"type": {
"enum": [
"Mobile",
"Home",
"Work",
"Other"
],
"type": "string"
},
"phone": {
"type": "string",
"pattern": "^[0-9]{3}-[0-9]{3}-[0-9]{4}$"
}
}
},
"maxItems": 10
},
"prefix": {
"type": "string",
"maxLength": 20
},
"suffix": {
"type": "string",
"maxLength": 20
},
"job_title": {
"type": "string",
"maxLength": 100
},
"department": {
"type": "string",
"maxLength": 100
},
"is_primary": {
"type": "boolean"
},
"contact_type": {
"type": "string",
"maxLength": 100,
"description": "For example Billing."
}
}
},
"maxItems": 20
},
"discount": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"industry": {
"type": "string",
"maxLength": 200
},
"locations": {
"type": "array",
"items": {
"type": "object",
"required": [
"street_1"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"country": {
"type": "string",
"maxLength": 100
},
"is_gated": {
"type": "boolean"
},
"nickname": {
"type": "string",
"maxLength": 200
},
"street_1": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"street_2": {
"type": "string",
"maxLength": 200
},
"is_bill_to": {
"type": "boolean"
},
"is_primary": {
"type": "boolean"
},
"state_prov": {
"type": "string",
"maxLength": 100
},
"postal_code": {
"type": "string",
"maxLength": 20
},
"location_type": {
"type": "string",
"maxLength": 100
},
"customer_contact": {
"type": "string",
"maxLength": 200,
"description": "Name of the contact for this location."
},
"gate_instructions": {
"type": "string",
"maxLength": 1000
}
}
},
"maxItems": 20
},
"is_taxable": {
"type": "boolean"
},
"payment_type": {
"type": "string",
"maxLength": 100
},
"public_notes": {
"type": "string",
"maxLength": 5000,
"description": "Notes shown on customer-facing documents."
},
"credit_rating": {
"enum": [
"A+",
"A",
"B+",
"B",
"C+",
"C",
"U"
],
"type": "string"
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"value": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
}
},
"maxItems": 50,
"description": "Custom fields: [{name, value}] with names as configured in Service Fusion."
},
"customer_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Customer (company or person) name."
},
"discount_type": {
"enum": [
"$",
"%"
],
"type": "string"
},
"payment_terms": {
"type": "string",
"maxLength": 100
},
"private_notes": {
"type": "string",
"maxLength": 5000,
"description": "Internal notes."
},
"tax_item_name": {
"type": "string",
"maxLength": 200
},
"account_number": {
"type": "string",
"maxLength": 100
},
"parent_customer": {
"type": "string",
"maxLength": 200,
"description": "Name of an existing parent customer."
},
"referral_source": {
"type": "string",
"maxLength": 200
},
"assigned_contract": {
"type": "string",
"maxLength": 200
},
"labor_charge_type": {
"enum": [
"flat",
"hourly"
],
"type": "string"
},
"is_bill_for_drive_time": {
"type": "boolean"
},
"labor_charge_default_rate": {
"type": "number",
"maximum": 10000000,
"minimum": 0
}
}
}WRITE: create an estimate (quote) for a customer, optionally with address, category, source, technicians, tasks, notes, products, services, other charges and tags. It cannot be deleted through this API; creating twice makes two estimates. POST /estimates.
| Argument | Type | Description |
|---|---|---|
| city | string | |
| tags | array | Tags: [{tag}]. |
| notes | array | Internal notes: [{notes}]. |
| phase | string | |
| tasks | array | |
| source | string | Lead source name (see servicefusion_list_sources). |
| status | string | Status name (see servicefusion_list_job_statuses). |
| project | string | |
| category | string | Job category name (see servicefusion_list_job_categories). |
| contract | string |
WRITE: create a job (work order) for a customer, optionally with address, category, source, assigned technicians, tasks, notes, products, services and other charges. It appears on the team's schedule and cannot be deleted through this API; creating twice makes two jobs. Look up category, source and status names with the list tools first. POST /jobs.
| Argument | Type | Description |
|---|---|---|
| city | string | |
| notes | array | Internal notes: [{notes}]. |
| phase | string | |
| tasks | array | |
| source | string | Lead source name (see servicefusion_list_sources). |
| status | string | Status name (see servicefusion_list_job_statuses). |
| project | string | |
| category | string | Job category name (see servicefusion_list_job_categories). |
| contract | string | |
Open time slots for technicians and/or crews over up to 8 days (end_date at most 7 days after start_date). Filter by technician, crew, department, experience level and slot length. GET /availability.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort by date and/or duration, e.g. date,-duration (API default: date). |
| scope | string | Individual technician slots, crew slots, or both (the API default is techs; pass all to include crews). |
| crew_ids | array | Only these crew ids. |
| end_date* | string | Last day (inclusive), yyyy-mm-dd; at most 7 days after start_date. |
| end_time | string | Only slots ending at or before this time of day, HH:MM. |
| per_page | integer | Slots per page, 1-100. |
| tech_ids | array | Only these technician ids. |
One calendar task by id. GET /calendar-tasks/{id}.
| Argument | Type | Description |
|---|---|---|
| expand | array | Extra data to include: repeat. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| calendar_task_id* | integer | Calendar task id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"calendar_task_id"
],
"properties": {
"expand": {
"type": "array",
"items": {
"enum": [
"repeat"
],
"type": "string"
},
"maxItems": 1,
"description": "Extra data to include: repeat."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"calendar_task_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Calendar task id.",
"exclusiveMinimum": 0
}
}
}One crew by id, optionally with its technicians. GET /crews/{id}.
| Argument | Type | Description |
|---|---|---|
| expand | array | Extra data to include: techs. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| crew_id* | integer | Service Fusion crew id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"crew_id"
],
"properties": {
"expand": {
"type": "array",
"items": {
"enum": [
"techs"
],
"type": "string"
},
"maxItems": 1,
"description": "Extra data to include: techs."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"crew_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Service Fusion crew id.",
"exclusiveMinimum": 0
}
}
}One customer by id, optionally with contacts, phones, emails, locations and custom fields. GET /customers/{id}.
| Argument | Type | Description |
|---|---|---|
| expand | array | Extra data to include: contacts, contacts.phones, contacts.emails, locations, custom_fields. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| customer_id* | integer | Service Fusion customer id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_id"
],
"properties": {
"expand": {
"type": "array",
"items": {
"enum": [
"contacts",
"contacts.phones",
"contacts.emails",
"locations",
"custom_fields"
],
"type": "string"
},
"maxItems": 5,
"description": "Extra data to include: contacts, contacts.phones, contacts.emails, locations, custom_fields."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"customer_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Service Fusion customer id.",
"exclusiveMinimum": 0
}
}
}One piece of equipment of a customer. GET /customers/{customer_id}/equipment/{equipment_id}.
| Argument | Type | Description |
|---|---|---|
| expand | array | Extra data to include: custom_fields. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| customer_id* | integer | Service Fusion customer id. |
| equipment_id* | integer | Equipment id (from servicefusion_list_customer_equipment). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_id",
"equipment_id"
],
"properties": {
"expand": {
"type": "array",
"items": {
"enum": [
"custom_fields"
],
"type": "string"
},
"maxItems": 1,
"description": "Extra data to include: custom_fields."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"customer_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Service Fusion customer id.",
"exclusiveMinimum": 0
},
"equipment_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Equipment id (from servicefusion_list_customer_equipment).",
"exclusiveMinimum": 0
}
}
}One estimate by id, optionally with line items, technicians, notes, tags and more. GET /estimates/{id}.
| Argument | Type | Description |
|---|---|---|
| expand | array | Extra data to include: agents, custom_fields, pictures, documents, equipment, equipment.custom_fields, techs_assigned, tasks, notes, products, services, other_charges, payments, signatures, printable_work_order, tags. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| estimate_id* | integer | Service Fusion estimate id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"estimate_id"
],
"properties": {
"expand": {
"type": "array",
"items": {
"enum": [
"agents",
"custom_fields",
"pictures",
"documents",
"equipment",
"equipment.custom_fields",
"techs_assigned",
"tasks",
"notes",
"products",
"services",
"other_charges",
"payments",
"signatures",
"printable_work_order",
"tags"
],
"type": "string"
},
"maxItems": 16,
"description": "Extra data to include: agents, custom_fields, pictures, documents, equipment, equipment.custom_fields, techs_assigned, tasks, notes, products, services, other_charges, payments, signatures, printable_work_order, tags."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"estimate_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Service Fusion estimate id.",
"exclusiveMinimum": 0
}
}
}One invoice by id. GET /invoices/{id}.
| Argument | Type | Description |
|---|---|---|
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| invoice_id* | integer | Service Fusion invoice id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"invoice_id"
],
"properties": {
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"invoice_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Service Fusion invoice id.",
"exclusiveMinimum": 0
}
}
}One job by id, optionally with technicians, line items, labor, expenses, payments, invoices, notes, visits and more. GET /jobs/{id}.
| Argument | Type | Description |
|---|---|---|
| expand | array | Extra data to include: agents, custom_fields, pictures, documents, equipment, equipment.custom_fields, techs_assigned, tasks, notes, products, services, other_charges, labor_charges, expenses, payments, invoices, signatures, printable_work_order, visits, visits.techs_assigned. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| job_id* | integer | Service Fusion job id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"job_id"
],
"properties": {
"expand": {
"type": "array",
"items": {
"enum": [
"agents",
"custom_fields",
"pictures",
"documents",
"equipment",
"equipment.custom_fields",
"techs_assigned",
"tasks",
"notes",
"products",
"services",
"other_charges",
"labor_charges",
"expenses",
"payments",
"invoices",
"signatures",
"printable_work_order",
"visits",
"visits.techs_assigned"
],
"type": "string"
},
"maxItems": 20,
"description": "Extra data to include: agents, custom_fields, pictures, documents, equipment, equipment.custom_fields, techs_assigned, tasks, notes, products, services, other_charges, labor_charges, expenses, payments, invoices, signatures, printable_work_order, visits, visits.techs_assigned."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"job_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Service Fusion job id.",
"exclusiveMinimum": 0
}
}
}The Service Fusion user the API credentials belong to: id, name and email. Use it to check the connection. GET /me.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}One technician by id. GET /techs/{id}.
| Argument | Type | Description |
|---|---|---|
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| tech_id* | integer | Service Fusion technician id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"tech_id"
],
"properties": {
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"tech_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Service Fusion technician id.",
"exclusiveMinimum": 0
}
}
}List calendar tasks (appointments and to-dos on the schedule) for one day (start_date or end_date alone), a date range (both) and/or given users. A task is returned when it overlaps the range. GET /calendar-tasks.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| expand | array | Extra data to include: repeat. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| end_date | string | Range end, yyyy-mm-dd. Give BOTH start_date and end_date for a range; with only one of them the API returns tasks on that single day. |
| per_page | integer | Results per page, 1-50 (default 10). |
| user_ids | array | Only tasks assigned to these user (technician) ids. |
| start_date | string | Range start, yyyy-mm-dd. Give BOTH start_date and end_date for a range; with only one of them the API returns tasks on that single day. |
List crews (named groups of technicians), optionally with their members. GET /crews.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| expand | array | Extra data to include: techs. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| per_page | integer | Results per page, 1-50 (default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"expand": {
"type": "array",
"items": {
"enum": [
"techs"
],
"type": "string"
},
"maxItems": 1,
"description": "Extra data to include: techs."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
}
}
}List the equipment on file for a customer (type, make, model, serial number, warranty and install dates). GET /customers/{id}/equipment.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| expand | array | Extra data to include: custom_fields. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| per_page | integer | Results per page, 1-50 (default 10). |
| customer_id* | integer | Service Fusion customer id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"expand": {
"type": "array",
"items": {
"enum": [
"custom_fields"
],
"type": "string"
},
"maxItems": 1,
"description": "Extra data to include: custom_fields."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
},
"customer_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Service Fusion customer id.",
"exclusiveMinimum": 0
}
}
}List customers (newest id order unless sorted). Filter by name, contact, address, city, postal code, phone, email, tags or last-serviced date. Add expand=contacts,locations,custom_fields to include them. GET /customers.
| Argument | Type | Description |
|---|---|---|
| city | string | City (exact match). |
| name | string | Customer name (partial match). |
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| tags | string | Tags, comma-separated (exact match). |
| string | Email (exact match). | |
| phone | string | Phone (partial match). |
| expand | array | Extra data to include: contacts, contacts.phones, contacts.emails, locations, custom_fields. |
| fields | string |
List estimates (quotes). Filter by status, number, PO number, customer, contact, address, phone, email, category, source and start/end/requested dates. GET /estimates.
| Argument | Type | Description |
|---|---|---|
| city | string | City (exact match). |
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| string | Email (exact match). | |
| phone | string | Phone (partial match). |
| expand | array | Extra data to include: agents, custom_fields, pictures, documents, equipment, equipment.custom_fields, techs_assigned, tasks, notes, products, services, other_charges, payments, signatures, printable_work_order, tags. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| number | string | Estimate number (partial match). |
List invoices with number, total, paid flag, dates and the customer. The API has no invoice filters: sort and page instead (for example sort=-date). GET /invoices.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| per_page | integer | Results per page, 1-50 (default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
}
}
}The job category names to use when creating or filtering jobs. GET /job-categories.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| per_page | integer | Results per page, 1-50 (default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
}
}
}The job status names (code, name, custom flag, category) to use when creating or filtering jobs. GET /job-statuses.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| per_page | integer | Results per page, 1-50 (default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
}
}
}List jobs (work orders). Filter by status, number, PO or invoice number, customer, contact, address, phone, email, category, source and start/end/updated/closed dates. Add expand (techs_assigned, services, products, payments, invoices, visits, notes, ...) for detail. GET /jobs.
| Argument | Type | Description |
|---|---|---|
| city | string | City (exact match). |
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| string | Email (exact match). | |
| phone | string | Phone (partial match). |
| expand | array | Extra data to include: agents, custom_fields, pictures, documents, equipment, equipment.custom_fields, techs_assigned, tasks, notes, products, services, other_charges, labor_charges, expenses, payments, invoices, signatures, printable_work_order, visits, visits.techs_assigned. |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| number |
The payment types configured in the account. GET /payment-types.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| per_page | integer | Results per page, 1-50 (default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
}
}
}The lead/referral sources (short and long names) to use when creating or filtering jobs and estimates. GET /sources.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| per_page | integer | Results per page, 1-50 (default 10). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
}
}
}The technician department names configured in the account (useful for availability filters). GET /techs/departments.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List technicians and sales reps (name, contact details, department, title, color, field-worker and sales-rep flags). GET /techs.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, from 1 (default 1). Pass the previous reply's next_page. |
| sort | string | Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name). |
| string | Email (partial match). | |
| fields | string | Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| per_page | integer | Results per page, 1-50 (default 10). |
| last_name | string | Last name (partial match). |
| first_name | string | First name (partial match). |
| nickname_on_dispatch | string | Nickname on the dispatch board (partial match). |
| nickname_on_workorder | string |
| duration | integer | Duration in seconds, 0-86400 (3600 = 1 hour). |
| is_gated | boolean |
| products | array |
| services | array |
| street_1 | string |
| street_2 | string |
| po_number | string |
| start_date | string | Start date, yyyy-mm-dd. |
| state_prov | string |
| tech_notes | string | Notes for the technician. |
| description | string | Job/estimate description (max 500 characters). |
| postal_code | string |
| custom_fields | array | Custom fields: [{name, value}] with names as configured in Service Fusion. |
| customer_name* | string | Customer name exactly as in Service Fusion (see servicefusion_list_customers); an unknown name is created as a new customer. |
| location_name | string |
| other_charges | array |
| techs_assigned | array | Technicians to assign: [{id}] or [{first_name, last_name}]. |
| note_to_customer | string |
| contact_last_name | string |
| gate_instructions | string |
| opportunity_owner | string | Name of the opportunity owner. |
| contact_first_name | string |
| opportunity_rating | integer | Opportunity rating, 0-5. |
| time_frame_promised_end | string | Promised arrival window end, HH:MM. |
| time_frame_promised_start | string | Promised arrival window start, HH:MM. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_name"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"tags": {
"type": "array",
"items": {
"type": "object",
"required": [
"tag"
],
"properties": {
"tag": {
"type": "string",
"maxLength": 100,
"minLength": 1
}
}
},
"maxItems": 50,
"description": "Tags: [{tag}]."
},
"notes": {
"type": "array",
"items": {
"type": "object",
"required": [
"notes"
],
"properties": {
"notes": {
"type": "string",
"maxLength": 5000,
"minLength": 1
}
}
},
"maxItems": 50,
"description": "Internal notes: [{notes}]."
},
"phase": {
"type": "string",
"maxLength": 200
},
"tasks": {
"type": "array",
"items": {
"type": "object",
"required": [
"description"
],
"properties": {
"description": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"is_completed": {
"type": "boolean"
}
}
},
"maxItems": 50
},
"source": {
"type": "string",
"maxLength": 200,
"description": "Lead source name (see servicefusion_list_sources)."
},
"status": {
"type": "string",
"maxLength": 100,
"description": "Status name (see servicefusion_list_job_statuses)."
},
"project": {
"type": "string",
"maxLength": 200
},
"category": {
"type": "string",
"maxLength": 200,
"description": "Job category name (see servicefusion_list_job_categories)."
},
"contract": {
"type": "string",
"maxLength": 200
},
"duration": {
"type": "integer",
"maximum": 86400,
"minimum": 0,
"description": "Duration in seconds, 0-86400 (3600 = 1 hour)."
},
"is_gated": {
"type": "boolean"
},
"products": {
"type": "array",
"items": {
"type": "object",
"required": [
"product"
],
"properties": {
"tax": {
"type": "string",
"maxLength": 100
},
"cost": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"name": {
"type": "string",
"maxLength": 200
},
"rate": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"product": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The product name as in your Service Fusion price list."
},
"multiplier": {
"type": "integer",
"maximum": 100000,
"description": "Quantity.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 2000
},
"is_show_rate_items": {
"type": "boolean"
}
}
},
"maxItems": 100
},
"services": {
"type": "array",
"items": {
"type": "object",
"required": [
"service"
],
"properties": {
"tax": {
"type": "string",
"maxLength": 100
},
"cost": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"name": {
"type": "string",
"maxLength": 200
},
"rate": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"service": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The service name as in your Service Fusion price list."
},
"multiplier": {
"type": "integer",
"maximum": 100000,
"description": "Quantity.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 2000
},
"is_show_rate_items": {
"type": "boolean"
}
}
},
"maxItems": 100
},
"street_1": {
"type": "string",
"maxLength": 200
},
"street_2": {
"type": "string",
"maxLength": 200
},
"po_number": {
"type": "string",
"maxLength": 100
},
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Start date, yyyy-mm-dd."
},
"state_prov": {
"type": "string",
"maxLength": 100
},
"tech_notes": {
"type": "string",
"maxLength": 5000,
"description": "Notes for the technician."
},
"description": {
"type": "string",
"maxLength": 500,
"description": "Job/estimate description (max 500 characters)."
},
"postal_code": {
"type": "string",
"maxLength": 20
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"value": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
}
},
"maxItems": 50,
"description": "Custom fields: [{name, value}] with names as configured in Service Fusion."
},
"customer_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Customer name exactly as in Service Fusion (see servicefusion_list_customers); an unknown name is created as a new customer."
},
"location_name": {
"type": "string",
"maxLength": 200
},
"other_charges": {
"type": "array",
"items": {
"type": "object",
"required": [
"other_charge"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200
},
"rate": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"other_charge": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"is_percentage": {
"type": "boolean"
}
}
},
"maxItems": 50
},
"techs_assigned": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"last_name": {
"type": "string",
"maxLength": 100
},
"first_name": {
"type": "string",
"maxLength": 100
}
}
},
"maxItems": 20,
"description": "Technicians to assign: [{id}] or [{first_name, last_name}]."
},
"note_to_customer": {
"type": "string",
"maxLength": 2000
},
"contact_last_name": {
"type": "string",
"maxLength": 100
},
"gate_instructions": {
"type": "string",
"maxLength": 1000
},
"opportunity_owner": {
"type": "string",
"maxLength": 200,
"description": "Name of the opportunity owner."
},
"contact_first_name": {
"type": "string",
"maxLength": 100
},
"opportunity_rating": {
"type": "integer",
"maximum": 5,
"minimum": 0,
"description": "Opportunity rating, 0-5."
},
"time_frame_promised_end": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Promised arrival window end, HH:MM."
},
"time_frame_promised_start": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Promised arrival window start, HH:MM."
}
}
}| duration |
| integer |
| Duration in seconds, 0-86400 (3600 = 1 hour). |
| end_date | string | End date, yyyy-mm-dd. |
| is_gated | boolean |
| priority | string |
| products | array |
| services | array |
| street_1 | string |
| street_2 | string |
| po_number | string |
| start_date | string | Start date, yyyy-mm-dd. |
| state_prov | string |
| tech_notes | string | Notes for the technician. |
| description | string | Job/estimate description (max 500 characters). |
| postal_code | string |
| called_in_by | string |
| check_number | string |
| payment_type | string |
| custom_fields | array | Custom fields: [{name, value}] with names as configured in Service Fusion. |
| customer_name* | string | Customer name exactly as in Service Fusion (see servicefusion_list_customers); an unknown name is created as a new customer. |
| location_name | string |
| other_charges | array |
| techs_assigned | array | Technicians to assign: [{id}] or [{first_name, last_name}]. |
| completion_notes | string |
| note_to_customer | string |
| contact_last_name | string |
| gate_instructions | string |
| contact_first_name | string |
| is_requires_follow_up | boolean |
| customer_payment_terms | string |
| time_frame_promised_end | string | Promised arrival window end, HH:MM. |
| time_frame_promised_start | string | Promised arrival window start, HH:MM. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"customer_name"
],
"properties": {
"city": {
"type": "string",
"maxLength": 100
},
"notes": {
"type": "array",
"items": {
"type": "object",
"required": [
"notes"
],
"properties": {
"notes": {
"type": "string",
"maxLength": 5000,
"minLength": 1
}
}
},
"maxItems": 50,
"description": "Internal notes: [{notes}]."
},
"phase": {
"type": "string",
"maxLength": 200
},
"tasks": {
"type": "array",
"items": {
"type": "object",
"required": [
"description"
],
"properties": {
"description": {
"type": "string",
"maxLength": 500,
"minLength": 1
},
"is_completed": {
"type": "boolean"
}
}
},
"maxItems": 50
},
"source": {
"type": "string",
"maxLength": 200,
"description": "Lead source name (see servicefusion_list_sources)."
},
"status": {
"type": "string",
"maxLength": 100,
"description": "Status name (see servicefusion_list_job_statuses)."
},
"project": {
"type": "string",
"maxLength": 200
},
"category": {
"type": "string",
"maxLength": 200,
"description": "Job category name (see servicefusion_list_job_categories)."
},
"contract": {
"type": "string",
"maxLength": 200
},
"duration": {
"type": "integer",
"maximum": 86400,
"minimum": 0,
"description": "Duration in seconds, 0-86400 (3600 = 1 hour)."
},
"end_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "End date, yyyy-mm-dd."
},
"is_gated": {
"type": "boolean"
},
"priority": {
"enum": [
"Low",
"Normal",
"High"
],
"type": "string"
},
"products": {
"type": "array",
"items": {
"type": "object",
"required": [
"product"
],
"properties": {
"tax": {
"type": "string",
"maxLength": 100
},
"cost": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"name": {
"type": "string",
"maxLength": 200
},
"rate": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"product": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The product name as in your Service Fusion price list."
},
"multiplier": {
"type": "integer",
"maximum": 100000,
"description": "Quantity.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 2000
},
"is_show_rate_items": {
"type": "boolean"
}
}
},
"maxItems": 100
},
"services": {
"type": "array",
"items": {
"type": "object",
"required": [
"service"
],
"properties": {
"tax": {
"type": "string",
"maxLength": 100
},
"cost": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"name": {
"type": "string",
"maxLength": 200
},
"rate": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"service": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The service name as in your Service Fusion price list."
},
"multiplier": {
"type": "integer",
"maximum": 100000,
"description": "Quantity.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 2000
},
"is_show_rate_items": {
"type": "boolean"
}
}
},
"maxItems": 100
},
"street_1": {
"type": "string",
"maxLength": 200
},
"street_2": {
"type": "string",
"maxLength": 200
},
"po_number": {
"type": "string",
"maxLength": 100
},
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Start date, yyyy-mm-dd."
},
"state_prov": {
"type": "string",
"maxLength": 100
},
"tech_notes": {
"type": "string",
"maxLength": 5000,
"description": "Notes for the technician."
},
"description": {
"type": "string",
"maxLength": 500,
"description": "Job/estimate description (max 500 characters)."
},
"postal_code": {
"type": "string",
"maxLength": 20
},
"called_in_by": {
"type": "string",
"maxLength": 200
},
"check_number": {
"type": "string",
"maxLength": 100
},
"payment_type": {
"type": "string",
"maxLength": 100
},
"custom_fields": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"value": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
}
},
"maxItems": 50,
"description": "Custom fields: [{name, value}] with names as configured in Service Fusion."
},
"customer_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Customer name exactly as in Service Fusion (see servicefusion_list_customers); an unknown name is created as a new customer."
},
"location_name": {
"type": "string",
"maxLength": 200
},
"other_charges": {
"type": "array",
"items": {
"type": "object",
"required": [
"other_charge"
],
"properties": {
"name": {
"type": "string",
"maxLength": 200
},
"rate": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"other_charge": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"is_percentage": {
"type": "boolean"
}
}
},
"maxItems": 50
},
"techs_assigned": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"last_name": {
"type": "string",
"maxLength": 100
},
"first_name": {
"type": "string",
"maxLength": 100
}
}
},
"maxItems": 20,
"description": "Technicians to assign: [{id}] or [{first_name, last_name}]."
},
"completion_notes": {
"type": "string",
"maxLength": 5000
},
"note_to_customer": {
"type": "string",
"maxLength": 2000
},
"contact_last_name": {
"type": "string",
"maxLength": 100
},
"gate_instructions": {
"type": "string",
"maxLength": 1000
},
"contact_first_name": {
"type": "string",
"maxLength": 100
},
"is_requires_follow_up": {
"type": "boolean"
},
"customer_payment_terms": {
"type": "string",
"maxLength": 100
},
"time_frame_promised_end": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Promised arrival window end, HH:MM."
},
"time_frame_promised_start": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Promised arrival window start, HH:MM."
}
}
}| start_date* |
| string |
| First day (inclusive), yyyy-mm-dd. |
| start_time | string | Only slots starting at or after this time of day, HH:MM. |
| departments | array | Technician departments (any may match). |
| max_duration | integer | Maximum slot length in minutes. |
| min_duration | integer | Minimum slot length in minutes. |
| experience_levels | array | Experience levels 0-10 (any may match). |
| ignore_work_schedule | boolean | Ignore each technician's work schedule; only the time window limits the slots. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"start_date",
"end_date"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?(date|duration)(,-?(date|duration))*$",
"description": "Sort by date and/or duration, e.g. date,-duration (API default: date)."
},
"scope": {
"enum": [
"techs",
"crews",
"all"
],
"type": "string",
"description": "Individual technician slots, crew slots, or both (the API default is techs; pass all to include crews)."
},
"crew_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100,
"minItems": 1,
"description": "Only these crew ids."
},
"end_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Last day (inclusive), yyyy-mm-dd; at most 7 days after start_date."
},
"end_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Only slots ending at or before this time of day, HH:MM."
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Slots per page, 1-100.",
"exclusiveMinimum": 0
},
"tech_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 100,
"minItems": 1,
"description": "Only these technician ids."
},
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "First day (inclusive), yyyy-mm-dd."
},
"start_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Only slots starting at or after this time of day, HH:MM."
},
"departments": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Department name (case-insensitive partial match)."
},
"maxItems": 20,
"minItems": 1,
"description": "Technician departments (any may match)."
},
"max_duration": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Maximum slot length in minutes."
},
"min_duration": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Minimum slot length in minutes."
},
"experience_levels": {
"type": "array",
"items": {
"type": "integer",
"maximum": 10,
"minimum": 0
},
"maxItems": 11,
"minItems": 1,
"description": "Experience levels 0-10 (any may match)."
},
"ignore_work_schedule": {
"type": "boolean",
"description": "Ignore each technician's work schedule; only the time window limits the slots."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"expand": {
"type": "array",
"items": {
"enum": [
"repeat"
],
"type": "string"
},
"maxItems": 1,
"description": "Extra data to include: repeat."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"end_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Range end, yyyy-mm-dd. Give BOTH start_date and end_date for a range; with only one of them the API returns tasks on that single day."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
},
"user_ids": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"maxItems": 50,
"minItems": 1,
"description": "Only tasks assigned to these user (technician) ids."
},
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Range start, yyyy-mm-dd. Give BOTH start_date and end_date for a range; with only one of them the API returns tasks on that single day."
}
}
}| Only return these fields, comma-separated (for example id,customer_name). Default: all. |
| address | string | Street address (partial match). |
| per_page | integer | Results per page, 1-50 (default 10). |
| postal_code | string | Postal/ZIP code (exact match). |
| last_serviced_to | string | Last serviced on or before this date, yyyy-mm-dd. |
| contact_last_name | string | Contact last name (partial match). |
| contact_first_name | string | Contact first name (partial match). |
| last_serviced_from | string | Last serviced on or after this date, yyyy-mm-dd. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"city": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "City (exact match)."
},
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Customer name (partial match)."
},
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"tags": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Tags, comma-separated (exact match)."
},
"email": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Email (exact match)."
},
"phone": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Phone (partial match)."
},
"expand": {
"type": "array",
"items": {
"enum": [
"contacts",
"contacts.phones",
"contacts.emails",
"locations",
"custom_fields"
],
"type": "string"
},
"maxItems": 5,
"description": "Extra data to include: contacts, contacts.phones, contacts.emails, locations, custom_fields."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"address": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Street address (partial match)."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
},
"postal_code": {
"type": "string",
"pattern": "^[A-Za-z0-9 -]{2,12}$",
"description": "Postal/ZIP code (exact match)."
},
"last_serviced_to": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Last serviced on or before this date, yyyy-mm-dd."
},
"contact_last_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Contact last name (partial match)."
},
"contact_first_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Contact first name (partial match)."
},
"last_serviced_from": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Last serviced on or after this date, yyyy-mm-dd."
}
}
}| source |
| string |
| Sources, comma-separated (exact match). |
| status | string | Estimate status names, comma-separated (exact match). |
| address | string | Street address (partial match). |
| category | string | Categories, comma-separated (exact match). |
| per_page | integer | Results per page, 1-50 (default 10). |
| zip_code | string | Postal/ZIP code (exact match). |
| po_number | string | PO number (partial match). |
| end_date_to | string | End date on or before, yyyy-mm-dd. |
| requested_to | string | Requested at or before (RFC 3339 date-time with timezone). |
| customer_name | string | Customer name (partial match). |
| end_date_from | string | End date on or after, yyyy-mm-dd. |
| start_date_to | string | Start date on or before, yyyy-mm-dd. |
| requested_from | string | Requested at or after (RFC 3339 date-time with timezone). |
| start_date_from | string | Start date on or after, yyyy-mm-dd. |
| contact_last_name | string | Contact last name (partial match). |
| contact_first_name | string | Contact first name (partial match). |
| parent_customer_name | string | Parent customer name (partial match). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"city": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "City (exact match)."
},
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"email": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Email (exact match)."
},
"phone": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Phone (partial match)."
},
"expand": {
"type": "array",
"items": {
"enum": [
"agents",
"custom_fields",
"pictures",
"documents",
"equipment",
"equipment.custom_fields",
"techs_assigned",
"tasks",
"notes",
"products",
"services",
"other_charges",
"payments",
"signatures",
"printable_work_order",
"tags"
],
"type": "string"
},
"maxItems": 16,
"description": "Extra data to include: agents, custom_fields, pictures, documents, equipment, equipment.custom_fields, techs_assigned, tasks, notes, products, services, other_charges, payments, signatures, printable_work_order, tags."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"number": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Estimate number (partial match)."
},
"source": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Sources, comma-separated (exact match)."
},
"status": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Estimate status names, comma-separated (exact match)."
},
"address": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Street address (partial match)."
},
"category": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Categories, comma-separated (exact match)."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
},
"zip_code": {
"type": "string",
"pattern": "^[A-Za-z0-9 -]{2,12}$",
"description": "Postal/ZIP code (exact match)."
},
"po_number": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "PO number (partial match)."
},
"end_date_to": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "End date on or before, yyyy-mm-dd."
},
"requested_to": {
"type": "string",
"description": "Requested at or before (RFC 3339 date-time with timezone)."
},
"customer_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Customer name (partial match)."
},
"end_date_from": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "End date on or after, yyyy-mm-dd."
},
"start_date_to": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Start date on or before, yyyy-mm-dd."
},
"requested_from": {
"type": "string",
"description": "Requested at or after (RFC 3339 date-time with timezone)."
},
"start_date_from": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Start date on or after, yyyy-mm-dd."
},
"contact_last_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Contact last name (partial match)."
},
"contact_first_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Contact first name (partial match)."
},
"parent_customer_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Parent customer name (partial match)."
}
}
}| string |
| Job number (partial match). |
| source | string | Sources, comma-separated (exact match). |
| status | string | Job status names, comma-separated (exact match; see servicefusion_list_job_statuses). |
| address | string | Street address (partial match). |
| category | string | Job categories, comma-separated (exact match). |
| per_page | integer | Results per page, 1-50 (default 10). |
| zip_code | string | Postal/ZIP code (exact match). |
| closed_to | string | Closed at or before (RFC 3339 date-time with timezone). |
| po_number | string | PO number (partial match). |
| updated_to | string | Updated at or before (RFC 3339 date-time with timezone). |
| closed_from | string | Closed at or after (RFC 3339 date-time with timezone). |
| end_date_to | string | Job end date on or before, yyyy-mm-dd. |
| updated_from | string | Updated at or after (RFC 3339 date-time with timezone). |
| customer_name | string | Customer name (partial match). |
| end_date_from | string | Job end date on or after, yyyy-mm-dd. |
| start_date_to | string | Job start date on or before, yyyy-mm-dd. |
| invoice_number | string | Invoice number (partial match). |
| start_date_from | string | Job start date on or after, yyyy-mm-dd. |
| contact_last_name | string | Contact last name (partial match). |
| contact_first_name | string | Contact first name (partial match). |
| parent_customer_name | string | Parent customer name (partial match). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"city": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "City (exact match)."
},
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"email": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Email (exact match)."
},
"phone": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Phone (partial match)."
},
"expand": {
"type": "array",
"items": {
"enum": [
"agents",
"custom_fields",
"pictures",
"documents",
"equipment",
"equipment.custom_fields",
"techs_assigned",
"tasks",
"notes",
"products",
"services",
"other_charges",
"labor_charges",
"expenses",
"payments",
"invoices",
"signatures",
"printable_work_order",
"visits",
"visits.techs_assigned"
],
"type": "string"
},
"maxItems": 20,
"description": "Extra data to include: agents, custom_fields, pictures, documents, equipment, equipment.custom_fields, techs_assigned, tasks, notes, products, services, other_charges, labor_charges, expenses, payments, invoices, signatures, printable_work_order, visits, visits.techs_assigned."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"number": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Job number (partial match)."
},
"source": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Sources, comma-separated (exact match)."
},
"status": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Job status names, comma-separated (exact match; see servicefusion_list_job_statuses)."
},
"address": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Street address (partial match)."
},
"category": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Job categories, comma-separated (exact match)."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
},
"zip_code": {
"type": "string",
"pattern": "^[A-Za-z0-9 -]{2,12}$",
"description": "Postal/ZIP code (exact match)."
},
"closed_to": {
"type": "string",
"description": "Closed at or before (RFC 3339 date-time with timezone)."
},
"po_number": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "PO number (partial match)."
},
"updated_to": {
"type": "string",
"description": "Updated at or before (RFC 3339 date-time with timezone)."
},
"closed_from": {
"type": "string",
"description": "Closed at or after (RFC 3339 date-time with timezone)."
},
"end_date_to": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Job end date on or before, yyyy-mm-dd."
},
"updated_from": {
"type": "string",
"description": "Updated at or after (RFC 3339 date-time with timezone)."
},
"customer_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Customer name (partial match)."
},
"end_date_from": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Job end date on or after, yyyy-mm-dd."
},
"start_date_to": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Job start date on or before, yyyy-mm-dd."
},
"invoice_number": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Invoice number (partial match)."
},
"start_date_from": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "Job start date on or after, yyyy-mm-dd."
},
"contact_last_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Contact last name (partial match)."
},
"contact_first_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Contact first name (partial match)."
},
"parent_customer_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Parent customer name (partial match)."
}
}
}| Nickname on work orders (partial match). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"exclusiveMinimum": 0
},
"sort": {
"type": "string",
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$",
"maxLength": 300,
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name)."
},
"email": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Email (partial match)."
},
"fields": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$",
"maxLength": 500,
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all."
},
"per_page": {
"type": "integer",
"maximum": 50,
"description": "Results per page, 1-50 (default 10).",
"exclusiveMinimum": 0
},
"last_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Last name (partial match)."
},
"first_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "First name (partial match)."
},
"nickname_on_dispatch": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Nickname on the dispatch board (partial match)."
},
"nickname_on_workorder": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Nickname on work orders (partial match)."
}
}
}