Service Fusion MCP by usefulapi

Read Service Fusion customers, jobs, estimates, invoices and schedule; create customers and jobs.

我該用這個嗎

品質與安全性

A
說明品質
98%
結構描述完整度
89%
命名品質
74%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

發現項目(8)

  • LOWTool 'servicefusion_list_customer_equipment' name length outside 3-30 range在 servicefusion_list_customer_equipment 中
  • LOWTool 'servicefusion_get_customer_equipment' name length outside 3-30 range在 servicefusion_get_customer_equipment 中
  • LOWTool 'servicefusion_list_calendar_tasks' name length outside 3-30 range在 servicefusion_list_calendar_tasks 中
  • LOWTool 'servicefusion_get_calendar_task' name length outside 3-30 range在 servicefusion_get_calendar_task 中
  • LOWTool 'servicefusion_list_tech_departments' name length outside 3-30 range在 servicefusion_list_tech_departments 中
  • LOWTool 'servicefusion_list_job_categories' name length outside 3-30 range在 servicefusion_list_job_categories 中
  • LOWTool 'servicefusion_list_job_statuses' name length outside 3-30 range在 servicefusion_list_job_statuses 中
  • LOWTool 'servicefusion_list_payment_types' name length outside 3-30 range在 servicefusion_list_payment_types 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~12,324Token(工具定義)
~4.5 KB典型回應大小
顯著的注意力影響(128k 上下文的 9.63%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "service-fusion": {
      "url": "https://service-fusion.usefulapi.io/mcp"
    }
  }
}

遠端端點

https://service-fusion.usefulapi.io/mcpstreamable-http

它能做什麼

工具清單

工具(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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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}.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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}.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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}.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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}.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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}.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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}.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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}.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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}.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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.

輸入結構描述

{
  "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"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本26 個工具