Service Fusion MCP by usefulapi

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

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
98%
Integridad del esquema
89%
Calidad de los nombres
74%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (8)

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

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~12,324Tokens (definiciones de herramientas)
~4.5 KBTamaño de respuesta típico
Impacto significativo en la atención (9.63% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

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

Puntos de conexión remotos

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

Qué puede hacer

Inventario de herramientas

Herramientas (26)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢servicefusion_get_me

The Service Fusion user the API credentials belong to: id, name and email. Use it to check the connection. GET /me.

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Esquema de entrada

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

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada26 herramientas