Service Fusion MCP by usefulapi
Read Service Fusion customers, jobs, estimates, invoices and schedule; create customers and jobs.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (8)
- LOWin servicefusion_list_customer_equipment
- LOWin servicefusion_get_customer_equipment
- LOWin servicefusion_list_calendar_tasks
- LOWin servicefusion_get_calendar_task
- LOWin servicefusion_list_tech_departments
- LOWin servicefusion_list_job_categories
- LOWin servicefusion_list_job_statuses
- LOWin servicefusion_list_payment_types
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"service-fusion": {
"url": "https://service-fusion.usefulapi.io/mcp"
}
}
}Remote-Endpunkte
https://service-fusion.usefulapi.io/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (26)
🟢servicefusion_get_me
The Service Fusion user the API credentials belong to: id, name and email. Use it to check the connection. GET /me.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_customers(name, contact_first_name, contact_last_name, address, city, ...)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Customer name (partial match)."
},
"contact_first_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Contact first name (partial match)."
},
"contact_last_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Contact last name (partial match)."
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Street address (partial match)."
},
"city": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "City (exact match)."
},
"postal_code": {
"description": "Postal/ZIP code (exact match).",
"type": "string",
"pattern": "^[A-Za-z0-9 -]{2,12}$"
},
"phone": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Phone (partial match)."
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Email (exact match)."
},
"tags": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Tags, comma-separated (exact match)."
},
"last_serviced_from": {
"description": "Last serviced on or after this date, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"last_serviced_to": {
"description": "Last serviced on or before this date, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"expand": {
"description": "Extra data to include: contacts, contacts.phones, contacts.emails, locations, custom_fields.",
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"enum": [
"contacts",
"contacts.phones",
"contacts.emails",
"locations",
"custom_fields"
]
}
},
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_get_customer(customer_id, expand, fields)
One customer by id, optionally with contacts, phones, emails, locations and custom fields. GET /customers/{id}.
Eingabe-Schema
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service Fusion customer id."
},
"expand": {
"description": "Extra data to include: contacts, contacts.phones, contacts.emails, locations, custom_fields.",
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"enum": [
"contacts",
"contacts.phones",
"contacts.emails",
"locations",
"custom_fields"
]
}
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_customer_equipment(customer_id, expand, sort, fields, page, ...)
List the equipment on file for a customer (type, make, model, serial number, warranty and install dates). GET /customers/{id}/equipment.
Eingabe-Schema
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service Fusion customer id."
},
"expand": {
"description": "Extra data to include: custom_fields.",
"maxItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"custom_fields"
]
}
},
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_get_customer_equipment(customer_id, equipment_id, expand, fields)
One piece of equipment of a customer. GET /customers/{customer_id}/equipment/{equipment_id}.
Eingabe-Schema
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service Fusion customer id."
},
"equipment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Equipment id (from servicefusion_list_customer_equipment)."
},
"expand": {
"description": "Extra data to include: custom_fields.",
"maxItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"custom_fields"
]
}
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
}
},
"required": [
"customer_id",
"equipment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_jobs(status, number, po_number, invoice_number, customer_name, ...)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Job status names, comma-separated (exact match; see servicefusion_list_job_statuses)."
},
"number": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Job number (partial match)."
},
"po_number": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "PO number (partial match)."
},
"invoice_number": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Invoice number (partial match)."
},
"customer_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Customer name (partial match)."
},
"parent_customer_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Parent customer name (partial match)."
},
"contact_first_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Contact first name (partial match)."
},
"contact_last_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Contact last name (partial match)."
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Street address (partial match)."
},
"city": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "City (exact match)."
},
"zip_code": {
"description": "Postal/ZIP code (exact match).",
"type": "string",
"pattern": "^[A-Za-z0-9 -]{2,12}$"
},
"phone": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Phone (partial match)."
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Email (exact match)."
},
"category": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Job categories, comma-separated (exact match)."
},
"source": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Sources, comma-separated (exact match)."
},
"start_date_from": {
"description": "Job start date on or after, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"start_date_to": {
"description": "Job start date on or before, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"end_date_from": {
"description": "Job end date on or after, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"end_date_to": {
"description": "Job end date on or before, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"updated_from": {
"description": "Updated at or after (RFC 3339 date-time with timezone).",
"type": "string"
},
"updated_to": {
"description": "Updated at or before (RFC 3339 date-time with timezone).",
"type": "string"
},
"closed_from": {
"description": "Closed at or after (RFC 3339 date-time with timezone).",
"type": "string"
},
"closed_to": {
"description": "Closed at or before (RFC 3339 date-time with timezone).",
"type": "string"
},
"expand": {
"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.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"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"
]
}
},
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_get_job(job_id, expand, fields)
One job by id, optionally with technicians, line items, labor, expenses, payments, invoices, notes, visits and more. GET /jobs/{id}.
Eingabe-Schema
{
"type": "object",
"properties": {
"job_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service Fusion job id."
},
"expand": {
"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.",
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"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"
]
}
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_estimates(status, number, po_number, customer_name, parent_customer_name, ...)
List estimates (quotes). Filter by status, number, PO number, customer, contact, address, phone, email, category, source and start/end/requested dates. GET /estimates.
Eingabe-Schema
{
"type": "object",
"properties": {
"status": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Estimate status names, comma-separated (exact match)."
},
"number": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Estimate number (partial match)."
},
"po_number": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "PO number (partial match)."
},
"customer_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Customer name (partial match)."
},
"parent_customer_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Parent customer name (partial match)."
},
"contact_first_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Contact first name (partial match)."
},
"contact_last_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Contact last name (partial match)."
},
"address": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Street address (partial match)."
},
"city": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "City (exact match)."
},
"zip_code": {
"description": "Postal/ZIP code (exact match).",
"type": "string",
"pattern": "^[A-Za-z0-9 -]{2,12}$"
},
"phone": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Phone (partial match)."
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Email (exact match)."
},
"category": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Categories, comma-separated (exact match)."
},
"source": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Sources, comma-separated (exact match)."
},
"start_date_from": {
"description": "Start date on or after, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"start_date_to": {
"description": "Start date on or before, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"end_date_from": {
"description": "End date on or after, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"end_date_to": {
"description": "End date on or before, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"requested_from": {
"description": "Requested at or after (RFC 3339 date-time with timezone).",
"type": "string"
},
"requested_to": {
"description": "Requested at or before (RFC 3339 date-time with timezone).",
"type": "string"
},
"expand": {
"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.",
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"enum": [
"agents",
"custom_fields",
"pictures",
"documents",
"equipment",
"equipment.custom_fields",
"techs_assigned",
"tasks",
"notes",
"products",
"services",
"other_charges",
"payments",
"signatures",
"printable_work_order",
"tags"
]
}
},
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_get_estimate(estimate_id, expand, fields)
One estimate by id, optionally with line items, technicians, notes, tags and more. GET /estimates/{id}.
Eingabe-Schema
{
"type": "object",
"properties": {
"estimate_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service Fusion estimate id."
},
"expand": {
"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.",
"maxItems": 16,
"type": "array",
"items": {
"type": "string",
"enum": [
"agents",
"custom_fields",
"pictures",
"documents",
"equipment",
"equipment.custom_fields",
"techs_assigned",
"tasks",
"notes",
"products",
"services",
"other_charges",
"payments",
"signatures",
"printable_work_order",
"tags"
]
}
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
}
},
"required": [
"estimate_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_invoices(sort, fields, page, per_page)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_get_invoice(invoice_id, fields)
One invoice by id. GET /invoices/{id}.
Eingabe-Schema
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service Fusion invoice id."
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_calendar_tasks(start_date, end_date, user_ids, expand, sort, ...)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"start_date": {
"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.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"end_date": {
"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.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"user_ids": {
"description": "Only tasks assigned to these user (technician) ids.",
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"expand": {
"description": "Extra data to include: repeat.",
"maxItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"repeat"
]
}
},
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_get_calendar_task(calendar_task_id, expand, fields)
One calendar task by id. GET /calendar-tasks/{id}.
Eingabe-Schema
{
"type": "object",
"properties": {
"calendar_task_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Calendar task id."
},
"expand": {
"description": "Extra data to include: repeat.",
"maxItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"repeat"
]
}
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
}
},
"required": [
"calendar_task_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_get_availability(start_date, end_date, scope, start_time, end_time, ...)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"start_date": {
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
"description": "First day (inclusive), yyyy-mm-dd."
},
"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."
},
"scope": {
"description": "Individual technician slots, crew slots, or both (the API default is techs; pass all to include crews).",
"type": "string",
"enum": [
"techs",
"crews",
"all"
]
},
"start_time": {
"description": "Only slots starting at or after this time of day, HH:MM.",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"end_time": {
"description": "Only slots ending at or before this time of day, HH:MM.",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"tech_ids": {
"description": "Only these technician ids.",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"crew_ids": {
"description": "Only these crew ids.",
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"departments": {
"description": "Technician departments (any may match).",
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Department name (case-insensitive partial match)."
}
},
"experience_levels": {
"description": "Experience levels 0-10 (any may match).",
"minItems": 1,
"maxItems": 11,
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 10
}
},
"min_duration": {
"description": "Minimum slot length in minutes.",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"max_duration": {
"description": "Maximum slot length in minutes.",
"type": "integer",
"minimum": 1,
"maximum": 100000
},
"sort": {
"description": "Sort by date and/or duration, e.g. date,-duration (API default: date).",
"type": "string",
"pattern": "^-?(date|duration)(,-?(date|duration))*$"
},
"ignore_work_schedule": {
"description": "Ignore each technician's work schedule; only the time window limits the slots.",
"type": "boolean"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Slots per page, 1-100.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_techs(first_name, last_name, email, nickname_on_workorder, nickname_on_dispatch, ...)
List technicians and sales reps (name, contact details, department, title, color, field-worker and sales-rep flags). GET /techs.
Eingabe-Schema
{
"type": "object",
"properties": {
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "First name (partial match)."
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Last name (partial match)."
},
"email": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Email (partial match)."
},
"nickname_on_workorder": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Nickname on work orders (partial match)."
},
"nickname_on_dispatch": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Nickname on the dispatch board (partial match)."
},
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_get_tech(tech_id, fields)
One technician by id. GET /techs/{id}.
Eingabe-Schema
{
"type": "object",
"properties": {
"tech_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service Fusion technician id."
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
}
},
"required": [
"tech_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_tech_departments
The technician department names configured in the account (useful for availability filters). GET /techs/departments.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_crews(expand, sort, fields, page, per_page)
List crews (named groups of technicians), optionally with their members. GET /crews.
Eingabe-Schema
{
"type": "object",
"properties": {
"expand": {
"description": "Extra data to include: techs.",
"maxItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"techs"
]
}
},
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_get_crew(crew_id, expand, fields)
One crew by id, optionally with its technicians. GET /crews/{id}.
Eingabe-Schema
{
"type": "object",
"properties": {
"crew_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Service Fusion crew id."
},
"expand": {
"description": "Extra data to include: techs.",
"maxItems": 1,
"type": "array",
"items": {
"type": "string",
"enum": [
"techs"
]
}
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
}
},
"required": [
"crew_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_job_categories(sort, fields, page, per_page)
The job category names to use when creating or filtering jobs. GET /job-categories.
Eingabe-Schema
{
"type": "object",
"properties": {
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_job_statuses(sort, fields, page, per_page)
The job status names (code, name, custom flag, category) to use when creating or filtering jobs. GET /job-statuses.
Eingabe-Schema
{
"type": "object",
"properties": {
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_payment_types(sort, fields, page, per_page)
The payment types configured in the account. GET /payment-types.
Eingabe-Schema
{
"type": "object",
"properties": {
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢servicefusion_list_sources(sort, fields, page, per_page)
The lead/referral sources (short and long names) to use when creating or filtering jobs and estimates. GET /sources.
Eingabe-Schema
{
"type": "object",
"properties": {
"sort": {
"description": "Sort fields, comma-separated; a leading - sorts descending (for example -updated_at,customer_name).",
"type": "string",
"maxLength": 300,
"pattern": "^-?[a-z][a-z0-9_]*(,-?[a-z][a-z0-9_]*)*$"
},
"fields": {
"description": "Only return these fields, comma-separated (for example id,customer_name). Default: all.",
"type": "string",
"maxLength": 500,
"pattern": "^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"per_page": {
"description": "Results per page, 1-50 (default 10).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 50
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴servicefusion_create_customer(customer_name, parent_customer, account_number, private_notes, public_notes, ...)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"customer_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Customer (company or person) name."
},
"parent_customer": {
"description": "Name of an existing parent customer.",
"type": "string",
"maxLength": 200
},
"account_number": {
"type": "string",
"maxLength": 100
},
"private_notes": {
"description": "Internal notes.",
"type": "string",
"maxLength": 5000
},
"public_notes": {
"description": "Notes shown on customer-facing documents.",
"type": "string",
"maxLength": 5000
},
"credit_rating": {
"type": "string",
"enum": [
"A+",
"A",
"B+",
"B",
"C+",
"C",
"U"
]
},
"labor_charge_type": {
"type": "string",
"enum": [
"flat",
"hourly"
]
},
"labor_charge_default_rate": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"is_bill_for_drive_time": {
"type": "boolean"
},
"is_vip": {
"type": "boolean"
},
"referral_source": {
"type": "string",
"maxLength": 200
},
"agent": {
"description": "Sales agent name.",
"type": "string",
"maxLength": 200
},
"discount": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"discount_type": {
"type": "string",
"enum": [
"$",
"%"
]
},
"payment_type": {
"type": "string",
"maxLength": 100
},
"payment_terms": {
"type": "string",
"maxLength": 100
},
"assigned_contract": {
"type": "string",
"maxLength": 200
},
"industry": {
"type": "string",
"maxLength": 200
},
"is_taxable": {
"type": "boolean"
},
"tax_item_name": {
"type": "string",
"maxLength": 200
},
"contacts": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"fname": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"lname": {
"type": "string",
"minLength": 1,
"maxLength": 100
},
"prefix": {
"type": "string",
"maxLength": 20
},
"suffix": {
"type": "string",
"maxLength": 20
},
"contact_type": {
"description": "For example Billing.",
"type": "string",
"maxLength": 100
},
"job_title": {
"type": "string",
"maxLength": 100
},
"department": {
"type": "string",
"maxLength": 100
},
"is_primary": {
"type": "boolean"
},
"phones": {
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"phone": {
"type": "string",
"pattern": "^[0-9]{3}-[0-9]{3}-[0-9]{4}$"
},
"ext": {
"type": "integer",
"minimum": 0,
"maximum": 99999
},
"type": {
"type": "string",
"enum": [
"Mobile",
"Home",
"Work",
"Other"
]
}
},
"required": [
"phone"
]
}
},
"emails": {
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"minLength": 3,
"maxLength": 200
},
"class": {
"type": "string",
"enum": [
"Personal",
"Business",
"Other"
]
},
"types_accepted": {
"type": "string",
"pattern": "^(CONF|STATUS|PMT|INV)(,(CONF|STATUS|PMT|INV))*$"
}
},
"required": [
"email"
]
}
}
},
"required": [
"fname",
"lname"
]
}
},
"locations": {
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"street_1": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"street_2": {
"type": "string",
"maxLength": 200
},
"city": {
"type": "string",
"maxLength": 100
},
"state_prov": {
"type": "string",
"maxLength": 100
},
"postal_code": {
"type": "string",
"maxLength": 20
},
"country": {
"type": "string",
"maxLength": 100
},
"nickname": {
"type": "string",
"maxLength": 200
},
"gate_instructions": {
"type": "string",
"maxLength": 1000
},
"location_type": {
"type": "string",
"maxLength": 100
},
"is_primary": {
"type": "boolean"
},
"is_gated": {
"type": "boolean"
},
"is_bill_to": {
"type": "boolean"
},
"customer_contact": {
"description": "Name of the contact for this location.",
"type": "string",
"maxLength": 200
}
},
"required": [
"street_1"
]
}
},
"custom_fields": {
"description": "Custom fields: [{name, value}] with names as configured in Service Fusion.",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"value": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"required": [
"name",
"value"
]
}
}
},
"required": [
"customer_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴servicefusion_create_job(description, tech_notes, duration, time_frame_promised_start, time_frame_promised_end, ...)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"description": {
"description": "Job/estimate description (max 500 characters).",
"type": "string",
"maxLength": 500
},
"tech_notes": {
"description": "Notes for the technician.",
"type": "string",
"maxLength": 5000
},
"duration": {
"description": "Duration in seconds, 0-86400 (3600 = 1 hour).",
"type": "integer",
"minimum": 0,
"maximum": 86400
},
"time_frame_promised_start": {
"description": "Promised arrival window start, HH:MM.",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"time_frame_promised_end": {
"description": "Promised arrival window end, HH:MM.",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"start_date": {
"description": "Start date, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"customer_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Customer name exactly as in Service Fusion (see servicefusion_list_customers); an unknown name is created as a new customer."
},
"status": {
"description": "Status name (see servicefusion_list_job_statuses).",
"type": "string",
"maxLength": 100
},
"contact_first_name": {
"type": "string",
"maxLength": 100
},
"contact_last_name": {
"type": "string",
"maxLength": 100
},
"street_1": {
"type": "string",
"maxLength": 200
},
"street_2": {
"type": "string",
"maxLength": 200
},
"city": {
"type": "string",
"maxLength": 100
},
"state_prov": {
"type": "string",
"maxLength": 100
},
"postal_code": {
"type": "string",
"maxLength": 20
},
"location_name": {
"type": "string",
"maxLength": 200
},
"is_gated": {
"type": "boolean"
},
"gate_instructions": {
"type": "string",
"maxLength": 1000
},
"category": {
"description": "Job category name (see servicefusion_list_job_categories).",
"type": "string",
"maxLength": 200
},
"source": {
"description": "Lead source name (see servicefusion_list_sources).",
"type": "string",
"maxLength": 200
},
"project": {
"type": "string",
"maxLength": 200
},
"phase": {
"type": "string",
"maxLength": 200
},
"po_number": {
"type": "string",
"maxLength": 100
},
"contract": {
"type": "string",
"maxLength": 200
},
"note_to_customer": {
"type": "string",
"maxLength": 2000
},
"custom_fields": {
"description": "Custom fields: [{name, value}] with names as configured in Service Fusion.",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"value": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"required": [
"name",
"value"
]
}
},
"techs_assigned": {
"description": "Technicians to assign: [{id}] or [{first_name, last_name}].",
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"first_name": {
"type": "string",
"maxLength": 100
},
"last_name": {
"type": "string",
"maxLength": 100
}
}
}
},
"tasks": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"is_completed": {
"type": "boolean"
}
},
"required": [
"description"
]
}
},
"notes": {
"description": "Internal notes: [{notes}].",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"notes": {
"type": "string",
"minLength": 1,
"maxLength": 5000
}
},
"required": [
"notes"
]
}
},
"products": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"product": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The product name as in your Service Fusion price list."
},
"name": {
"type": "string",
"maxLength": 200
},
"description": {
"type": "string",
"maxLength": 2000
},
"multiplier": {
"description": "Quantity.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rate": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"cost": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"is_show_rate_items": {
"type": "boolean"
},
"tax": {
"type": "string",
"maxLength": 100
}
},
"required": [
"product"
]
}
},
"services": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"service": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The service name as in your Service Fusion price list."
},
"name": {
"type": "string",
"maxLength": 200
},
"description": {
"type": "string",
"maxLength": 2000
},
"multiplier": {
"description": "Quantity.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rate": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"cost": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"is_show_rate_items": {
"type": "boolean"
},
"tax": {
"type": "string",
"maxLength": 100
}
},
"required": [
"service"
]
}
},
"other_charges": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"other_charge": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"name": {
"type": "string",
"maxLength": 200
},
"rate": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"is_percentage": {
"type": "boolean"
}
},
"required": [
"other_charge"
]
}
},
"check_number": {
"type": "string",
"maxLength": 100
},
"priority": {
"type": "string",
"enum": [
"Low",
"Normal",
"High"
]
},
"completion_notes": {
"type": "string",
"maxLength": 5000
},
"end_date": {
"description": "End date, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"payment_type": {
"type": "string",
"maxLength": 100
},
"customer_payment_terms": {
"type": "string",
"maxLength": 100
},
"called_in_by": {
"type": "string",
"maxLength": 200
},
"is_requires_follow_up": {
"type": "boolean"
}
},
"required": [
"customer_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴servicefusion_create_estimate(description, tech_notes, duration, time_frame_promised_start, time_frame_promised_end, ...)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"description": {
"description": "Job/estimate description (max 500 characters).",
"type": "string",
"maxLength": 500
},
"tech_notes": {
"description": "Notes for the technician.",
"type": "string",
"maxLength": 5000
},
"duration": {
"description": "Duration in seconds, 0-86400 (3600 = 1 hour).",
"type": "integer",
"minimum": 0,
"maximum": 86400
},
"time_frame_promised_start": {
"description": "Promised arrival window start, HH:MM.",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"time_frame_promised_end": {
"description": "Promised arrival window end, HH:MM.",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"start_date": {
"description": "Start date, yyyy-mm-dd.",
"type": "string",
"pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
},
"customer_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Customer name exactly as in Service Fusion (see servicefusion_list_customers); an unknown name is created as a new customer."
},
"status": {
"description": "Status name (see servicefusion_list_job_statuses).",
"type": "string",
"maxLength": 100
},
"contact_first_name": {
"type": "string",
"maxLength": 100
},
"contact_last_name": {
"type": "string",
"maxLength": 100
},
"street_1": {
"type": "string",
"maxLength": 200
},
"street_2": {
"type": "string",
"maxLength": 200
},
"city": {
"type": "string",
"maxLength": 100
},
"state_prov": {
"type": "string",
"maxLength": 100
},
"postal_code": {
"type": "string",
"maxLength": 20
},
"location_name": {
"type": "string",
"maxLength": 200
},
"is_gated": {
"type": "boolean"
},
"gate_instructions": {
"type": "string",
"maxLength": 1000
},
"category": {
"description": "Job category name (see servicefusion_list_job_categories).",
"type": "string",
"maxLength": 200
},
"source": {
"description": "Lead source name (see servicefusion_list_sources).",
"type": "string",
"maxLength": 200
},
"project": {
"type": "string",
"maxLength": 200
},
"phase": {
"type": "string",
"maxLength": 200
},
"po_number": {
"type": "string",
"maxLength": 100
},
"contract": {
"type": "string",
"maxLength": 200
},
"note_to_customer": {
"type": "string",
"maxLength": 2000
},
"custom_fields": {
"description": "Custom fields: [{name, value}] with names as configured in Service Fusion.",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"value": {
"anyOf": [
{
"type": "string",
"maxLength": 2000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
},
"required": [
"name",
"value"
]
}
},
"techs_assigned": {
"description": "Technicians to assign: [{id}] or [{first_name, last_name}].",
"maxItems": 20,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"first_name": {
"type": "string",
"maxLength": 100
},
"last_name": {
"type": "string",
"maxLength": 100
}
}
}
},
"tasks": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"is_completed": {
"type": "boolean"
}
},
"required": [
"description"
]
}
},
"notes": {
"description": "Internal notes: [{notes}].",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"notes": {
"type": "string",
"minLength": 1,
"maxLength": 5000
}
},
"required": [
"notes"
]
}
},
"products": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"product": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The product name as in your Service Fusion price list."
},
"name": {
"type": "string",
"maxLength": 200
},
"description": {
"type": "string",
"maxLength": 2000
},
"multiplier": {
"description": "Quantity.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rate": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"cost": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"is_show_rate_items": {
"type": "boolean"
},
"tax": {
"type": "string",
"maxLength": 100
}
},
"required": [
"product"
]
}
},
"services": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"service": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The service name as in your Service Fusion price list."
},
"name": {
"type": "string",
"maxLength": 200
},
"description": {
"type": "string",
"maxLength": 2000
},
"multiplier": {
"description": "Quantity.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"rate": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"cost": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"is_show_rate_items": {
"type": "boolean"
},
"tax": {
"type": "string",
"maxLength": 100
}
},
"required": [
"service"
]
}
},
"other_charges": {
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"other_charge": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"name": {
"type": "string",
"maxLength": 200
},
"rate": {
"type": "number",
"minimum": 0,
"maximum": 10000000
},
"is_percentage": {
"type": "boolean"
}
},
"required": [
"other_charge"
]
}
},
"opportunity_rating": {
"description": "Opportunity rating, 0-5.",
"type": "integer",
"minimum": 0,
"maximum": 5
},
"opportunity_owner": {
"description": "Name of the opportunity owner.",
"type": "string",
"maxLength": 200
},
"tags": {
"description": "Tags: [{tag}].",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"tag": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"required": [
"tag"
]
}
}
},
"required": [
"customer_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Nachweis