Server definition
- Hash
- sha256:3e2d3dba58d64398796bc1b62fa3e1aaf865b172d40036a9b21431c445cc6293
- What it is
- What a remote MCP server returned when asked what it offers: 20 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "WRITE: add a note to a customer. Set `public` to true to make it visible to the customer. Kickserv: POST /{account}/customers/{customer_number}/notes.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"customer_number": {
"description": "Customer number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"note": {
"description": "Note text.",
"maxLength": 20000,
"minLength": 1,
"type": "string"
},
"public": {
"description": "True to make the note public (customer-visible).",
"type": "boolean"
}
},
"required": [
"customer_number",
"note"
],
"type": "object"
},
"name": "kickserv_add_customer_note",
"outputSchema": null
},
{
"description": "WRITE: add a charge (line item — a product, service or part) to a job. This changes the job's estimate/invoice total; it does NOT charge the customer's card. Pick `item_id` from kickserv_list_items. Kickserv: POST /{account}/jobs/{job_number}/job_charges.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"description": {
"description": "Line-item description.",
"maxLength": 1000,
"type": "string"
},
"details": {
"description": "Line-item details.",
"maxLength": 5000,
"type": "string"
},
"discount": {
"description": "Discount.",
"maximum": 10000000,
"minimum": 0,
"type": "number"
},
"item_id": {
"description": "Item `id` from kickserv_list_items.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"job_charge_type_id": {
"description": "Job charge type id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"job_number": {
"description": "Job number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"price_per_unit": {
"description": "Unit price.",
"maximum": 10000000,
"minimum": 0,
"type": "number"
},
"quantity": {
"description": "Quantity.",
"maximum": 1000000,
"minimum": 0,
"type": "number"
}
},
"required": [
"job_number",
"job_charge_type_id"
],
"type": "object"
},
"name": "kickserv_add_job_charge",
"outputSchema": null
},
{
"description": "WRITE: add a note to a job. Set `public` to true to make it visible to the customer. Kickserv: POST /{account}/jobs/{job_number}/notes.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"job_number": {
"description": "Job number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"note": {
"description": "Note text.",
"maxLength": 20000,
"minLength": 1,
"type": "string"
},
"public": {
"description": "True to make the note public (customer-visible).",
"type": "boolean"
}
},
"required": [
"job_number",
"note"
],
"type": "object"
},
"name": "kickserv_add_job_note",
"outputSchema": null
},
{
"description": "WRITE: create a new customer. Kickserv assigns the customer number. Kickserv: POST /{account}/customers.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"account_number": {
"description": "Your own account number for the customer.",
"maxLength": 64,
"type": "string"
},
"alt_contact": {
"description": "Alternate contact name.",
"maxLength": 255,
"type": "string"
},
"alt_phone_number": {
"description": "Alternate phone number.",
"maxLength": 64,
"type": "string"
},
"billing_address": {
"description": "Billing address (where invoices go), line 1.",
"maxLength": 255,
"type": "string"
},
"billing_address_2": {
"description": "Billing address line 2.",
"maxLength": 255,
"type": "string"
},
"billing_city": {
"description": "Billing city.",
"maxLength": 128,
"type": "string"
},
"billing_country": {
"description": "Billing country.",
"maxLength": 64,
"type": "string"
},
"billing_state": {
"description": "Billing state.",
"maxLength": 64,
"type": "string"
},
"billing_zip_code": {
"description": "Billing ZIP/postal code.",
"maxLength": 32,
"type": "string"
},
"company": {
"description": "True if the customer is a company rather than a person.",
"type": "boolean"
},
"company_name": {
"description": "Company name.",
"maxLength": 255,
"type": "string"
},
"contact": {
"description": "Primary contact name.",
"maxLength": 255,
"type": "string"
},
"customer_source_id": {
"description": "Customer source (lead source) id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"customer_type_id": {
"description": "Customer type id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"email_address": {
"description": "Email address.",
"format": "email",
"maxLength": 255,
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"fax": {
"description": "Fax number.",
"maxLength": 64,
"type": "string"
},
"first_name": {
"description": "Contact first name.",
"maxLength": 255,
"type": "string"
},
"is_active": {
"description": "False to mark the customer inactive (reversible).",
"type": "boolean"
},
"last_name": {
"description": "Contact last name.",
"maxLength": 255,
"type": "string"
},
"mobile": {
"description": "Mobile number.",
"maxLength": 64,
"type": "string"
},
"name": {
"description": "Customer name (required).",
"maxLength": 255,
"minLength": 1,
"type": "string"
},
"notify_via_email": {
"description": "Send the customer email notifications.",
"type": "boolean"
},
"notify_via_sms": {
"description": "Send the customer SMS notifications.",
"type": "boolean"
},
"phone_number": {
"description": "Phone number.",
"maxLength": 64,
"type": "string"
},
"service_address": {
"description": "Service address (where the work happens), line 1.",
"maxLength": 255,
"type": "string"
},
"service_address_2": {
"description": "Service address line 2.",
"maxLength": 255,
"type": "string"
},
"service_city": {
"description": "Service city.",
"maxLength": 128,
"type": "string"
},
"service_country": {
"description": "Service country (2-letter code).",
"maxLength": 64,
"type": "string"
},
"service_state": {
"description": "Service state (2-letter abbreviation in the US).",
"maxLength": 64,
"type": "string"
},
"service_zip_code": {
"description": "Service ZIP/postal code.",
"maxLength": 32,
"type": "string"
},
"special_instructions": {
"description": "Special instructions shown to technicians.",
"maxLength": 5000,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "kickserv_create_customer",
"outputSchema": null
},
{
"description": "WRITE: create a job (work order) for a customer. `customer_id` is the customer's internal `id` (from kickserv_get_customer), not the customer number; `job_type_id` is the job category. Set `estimate` to create it as an estimate. Kickserv: POST /{account}/jobs.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"customer_id": {
"description": "The customer's internal `id` (NOT the customer_number).",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"description": {
"description": "Job description / work to be done.",
"maxLength": 10000,
"type": "string"
},
"duration": {
"description": "Job duration.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"employee_ids": {
"description": "Employee `id`s (from kickserv_list_employees) to assign. Replaces the current assignment.",
"items": {
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"maxItems": 50,
"type": "array"
},
"ends_at": {
"description": "When the job ends. A date/time string Kickserv can parse, e.g. `2026-10-02 09:30` or `10/2/2026 09:30am`.",
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"estimate": {
"description": "True to create the job as an estimate.",
"type": "boolean"
},
"job_type_id": {
"description": "Job category (job type) id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"name": {
"description": "Job name/title.",
"maxLength": 255,
"type": "string"
},
"po_number": {
"description": "Customer purchase-order number.",
"maxLength": 64,
"type": "string"
},
"scheduled_on": {
"description": "When the job is scheduled. A date/time string Kickserv can parse, e.g. `2026-10-02 09:30` or `10/2/2026 09:30am`.",
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"customer_id",
"job_type_id"
],
"type": "object"
},
"name": "kickserv_create_job",
"outputSchema": null
},
{
"description": "WRITE: create a task (appointment / to-do) on a job and optionally assign employees. `job_id` is the job's internal `id` (from kickserv_get_job), not the job number. Kickserv: POST /{account}/tasks.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"customer_id": {
"description": "The customer's internal `id`.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"description": {
"description": "Task description.",
"maxLength": 10000,
"type": "string"
},
"duration": {
"description": "Task duration.",
"maximum": 100000,
"minimum": 0,
"type": "integer"
},
"employee_ids": {
"description": "Employee `id`s (from kickserv_list_employees) to assign. Replaces the current assignment.",
"items": {
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"maxItems": 50,
"type": "array"
},
"ends_at": {
"description": "When the task ends. A date/time string Kickserv can parse, e.g. `2026-10-02 09:30` or `10/2/2026 09:30am`.",
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"job_id": {
"description": "The job's internal `id` (NOT the job_number).",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"name": {
"description": "Task name.",
"maxLength": 255,
"minLength": 1,
"type": "string"
},
"scheduled_at": {
"description": "When the task is scheduled. A date/time string Kickserv can parse, e.g. `2026-10-02 09:30` or `10/2/2026 09:30am`.",
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"task_type_id": {
"description": "Task type id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"job_id",
"name",
"task_type_id"
],
"type": "object"
},
"name": "kickserv_create_task",
"outputSchema": null
},
{
"description": "Fetch one customer by customer number, optionally with related contacts, jobs, tasks and notes. The result's `id` is what job/task create calls need as `customer_id`. Kickserv: GET /{account}/customers/{customer_number}.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"customer_number": {
"description": "Customer number (as shown in Kickserv).",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"include": {
"description": "Related data to embed: contacts, jobs, tasks, notes, tax_entity, custom_field_assignments.",
"items": {
"enum": [
"contacts",
"jobs",
"tasks",
"notes",
"tax_entity",
"custom_field_assignments"
],
"type": "string"
},
"type": "array"
}
},
"required": [
"customer_number"
],
"type": "object"
},
"name": "kickserv_get_customer",
"outputSchema": null
},
{
"description": "Fetch one job by job number, optionally with its customer, assigned employees, job charges (line items), time entries and notes. Kickserv: GET /{account}/jobs/{job_number}.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"include": {
"description": "Related data to embed: customer, employees, job_charges, time_entries, notes, job_type, job_status, tax_entity, custom_field_assignments.",
"items": {
"enum": [
"customer",
"employees",
"job_charges",
"time_entries",
"notes",
"job_type",
"job_status",
"tax_entity",
"custom_field_assignments"
],
"type": "string"
},
"type": "array"
},
"job_number": {
"description": "Job number (as shown in Kickserv).",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"job_number"
],
"type": "object"
},
"name": "kickserv_get_job",
"outputSchema": null
},
{
"description": "Fetch one task (appointment / to-do attached to a job) by id. Kickserv: GET /{account}/tasks/{task_id}.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"task_id": {
"description": "Task id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"task_id"
],
"type": "object"
},
"name": "kickserv_get_task",
"outputSchema": null
},
{
"description": "List the jobs for one customer, 30 per page. Kickserv: GET /{account}/customers/{customer_number}/jobs.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"customer_number": {
"description": "Customer number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"include": {
"description": "Related data to embed: customer, employees, job_charges, time_entries, notes, job_type, job_status, tax_entity, custom_field_assignments.",
"items": {
"enum": [
"customer",
"employees",
"job_charges",
"time_entries",
"notes",
"job_type",
"job_status",
"tax_entity",
"custom_field_assignments"
],
"type": "string"
},
"type": "array"
},
"only": {
"description": "Comma-separated list of columns to return, e.g. `customer_number,name`. Kickserv recommends this: it makes responses much smaller and faster.",
"pattern": "^[a-z0-9_]+(,[a-z0-9_]+)*$",
"type": "string"
},
"page": {
"description": "Page number (Kickserv returns 30 records per page). Omit for page 1.",
"maximum": 10000,
"minimum": 1,
"type": "integer"
}
},
"required": [
"customer_number"
],
"type": "object"
},
"name": "kickserv_list_customer_jobs",
"outputSchema": null
},
{
"description": "List the notes on one customer. Kickserv: GET /{account}/customers/{customer_number}/notes.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"customer_number": {
"description": "Customer number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"customer_number"
],
"type": "object"
},
"name": "kickserv_list_customer_notes",
"outputSchema": null
},
{
"description": "List or search customers, 30 per page. Every filter is an exact match on that field. Use `only` to keep the response small. Kickserv: GET /{account}/customers.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"billing_city": {
"description": "Billing city.",
"maxLength": 128,
"type": "string"
},
"billing_state": {
"description": "Billing state.",
"maxLength": 64,
"type": "string"
},
"customer_number": {
"description": "Customer number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"email_address": {
"description": "Exact email address.",
"maxLength": 255,
"type": "string"
},
"include": {
"description": "Related data to embed: contacts, jobs, tasks, notes, tax_entity, custom_field_assignments.",
"items": {
"enum": [
"contacts",
"jobs",
"tasks",
"notes",
"tax_entity",
"custom_field_assignments"
],
"type": "string"
},
"type": "array"
},
"name": {
"description": "Exact customer name.",
"maxLength": 255,
"type": "string"
},
"only": {
"description": "Comma-separated list of columns to return, e.g. `customer_number,name`. Kickserv recommends this: it makes responses much smaller and faster.",
"pattern": "^[a-z0-9_]+(,[a-z0-9_]+)*$",
"type": "string"
},
"page": {
"description": "Page number (Kickserv returns 30 records per page). Omit for page 1.",
"maximum": 10000,
"minimum": 1,
"type": "integer"
},
"phone_number": {
"description": "Exact phone number, e.g. 800-555-1212.",
"maxLength": 64,
"type": "string"
},
"service_city": {
"description": "Service city.",
"maxLength": 128,
"type": "string"
},
"service_state": {
"description": "Service state (2-letter abbreviation).",
"maxLength": 64,
"type": "string"
},
"service_zip_code": {
"description": "Service ZIP (full zip+4 if the record has one).",
"maxLength": 32,
"type": "string"
}
},
"type": "object"
},
"name": "kickserv_list_customers",
"outputSchema": null
},
{
"description": "List all employees (technicians and office staff), active and inactive. Use their `id` for job/task assignment and time entries, and `employee_number` to filter jobs. Kickserv: GET /{account}/employees.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "kickserv_list_employees",
"outputSchema": null
},
{
"description": "List products/services (the price list used for job charges), 30 per page. Active items only by default. Kickserv: GET /{account}/items.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"name": {
"description": "Filter by item name.",
"maxLength": 255,
"type": "string"
},
"page": {
"description": "Page number (Kickserv returns 30 records per page). Omit for page 1.",
"maximum": 10000,
"minimum": 1,
"type": "integer"
},
"which": {
"description": "Which items to return: active (default), inactive, or all.",
"enum": [
"active",
"inactive",
"all"
],
"type": "string"
}
},
"type": "object"
},
"name": "kickserv_list_items",
"outputSchema": null
},
{
"description": "List the notes on one job. Kickserv: GET /{account}/jobs/{job_number}/notes.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"job_number": {
"description": "Job number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"job_number"
],
"type": "object"
},
"name": "kickserv_list_job_notes",
"outputSchema": null
},
{
"description": "List the time entries (hours logged by technicians) on one job. Kickserv: GET /{account}/jobs/{job_number}/time_entries.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"job_number": {
"description": "Job number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"job_number"
],
"type": "object"
},
"name": "kickserv_list_job_time_entries",
"outputSchema": null
},
{
"description": "List jobs (work orders, estimates, invoices), 30 per page, filterable by schedule window, status, assigned employee, category (job type) or job status. Kickserv: GET /{account}/jobs.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"employee_number": {
"description": "Only jobs assigned to this employee number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"include": {
"description": "Related data to embed: customer, employees, job_charges, time_entries, notes, job_type, job_status, tax_entity, custom_field_assignments.",
"items": {
"enum": [
"customer",
"employees",
"job_charges",
"time_entries",
"notes",
"job_type",
"job_status",
"tax_entity",
"custom_field_assignments"
],
"type": "string"
},
"type": "array"
},
"job_status_id": {
"description": "Only jobs with this custom job status id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"job_type_id": {
"description": "Only jobs in this category (job type id).",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"only": {
"description": "Comma-separated list of columns to return, e.g. `customer_number,name`. Kickserv recommends this: it makes responses much smaller and faster.",
"pattern": "^[a-z0-9_]+(,[a-z0-9_]+)*$",
"type": "string"
},
"page": {
"description": "Page number (Kickserv returns 30 records per page). Omit for page 1.",
"maximum": 10000,
"minimum": 1,
"type": "integer"
},
"scheduled": {
"description": "Scheduled-date window, e.g. today or this_week.",
"enum": [
"today",
"tomorrow",
"yesterday",
"this_week",
"next_week",
"last_week",
"this_month",
"next_month",
"last_month",
"this_year",
"last_year"
],
"type": "string"
},
"status": {
"description": "Job status.",
"enum": [
"unscheduled",
"scheduled",
"in_progress",
"on_hold",
"canceled",
"complete"
],
"type": "string"
}
},
"type": "object"
},
"name": "kickserv_list_jobs",
"outputSchema": null
},
{
"description": "WRITE: log hours worked by an employee on a job. `employee_id` is the employee's `id` from kickserv_list_employees. Kickserv: POST /{account}/jobs/{job_number}/time_entries.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"billable": {
"description": "Whether the time is billable.",
"type": "boolean"
},
"employee_id": {
"description": "The employee's `id`.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"ended_on": {
"description": "When the work ended. A date/time string Kickserv can parse, e.g. `2026-10-02 09:30` or `10/2/2026 09:30am`.",
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"job_number": {
"description": "Job number.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"mileage": {
"description": "Mileage driven.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"note": {
"description": "Note about the work.",
"maxLength": 5000,
"type": "string"
},
"number_of_hours": {
"description": "Hours worked, e.g. 1.25.",
"exclusiveMinimum": 0,
"maximum": 1000,
"type": "number"
},
"started_on": {
"description": "When the work started, e.g. `2026-10-02 13:00` or `10/02/2026 01:00pm`.",
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"time_entry_type_id": {
"description": "Time entry type id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
}
},
"required": [
"job_number",
"employee_id",
"started_on",
"number_of_hours"
],
"type": "object"
},
"name": "kickserv_log_time_entry",
"outputSchema": null
},
{
"description": "WRITE: update fields on an existing customer. Only the fields you pass change. Balances, credit limit and custom fields are not settable here. Kickserv: PATCH /{account}/customers/{customer_number}.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"account_number": {
"description": "Your own account number for the customer.",
"maxLength": 64,
"type": "string"
},
"alt_contact": {
"description": "Alternate contact name.",
"maxLength": 255,
"type": "string"
},
"alt_phone_number": {
"description": "Alternate phone number.",
"maxLength": 64,
"type": "string"
},
"billing_address": {
"description": "Billing address (where invoices go), line 1.",
"maxLength": 255,
"type": "string"
},
"billing_address_2": {
"description": "Billing address line 2.",
"maxLength": 255,
"type": "string"
},
"billing_city": {
"description": "Billing city.",
"maxLength": 128,
"type": "string"
},
"billing_country": {
"description": "Billing country.",
"maxLength": 64,
"type": "string"
},
"billing_state": {
"description": "Billing state.",
"maxLength": 64,
"type": "string"
},
"billing_zip_code": {
"description": "Billing ZIP/postal code.",
"maxLength": 32,
"type": "string"
},
"company": {
"description": "True if the customer is a company rather than a person.",
"type": "boolean"
},
"company_name": {
"description": "Company name.",
"maxLength": 255,
"type": "string"
},
"contact": {
"description": "Primary contact name.",
"maxLength": 255,
"type": "string"
},
"customer_number": {
"description": "Customer number to update.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"customer_source_id": {
"description": "Customer source (lead source) id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"customer_type_id": {
"description": "Customer type id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"email_address": {
"description": "Email address.",
"format": "email",
"maxLength": 255,
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"fax": {
"description": "Fax number.",
"maxLength": 64,
"type": "string"
},
"first_name": {
"description": "Contact first name.",
"maxLength": 255,
"type": "string"
},
"is_active": {
"description": "False to mark the customer inactive (reversible).",
"type": "boolean"
},
"last_name": {
"description": "Contact last name.",
"maxLength": 255,
"type": "string"
},
"mobile": {
"description": "Mobile number.",
"maxLength": 64,
"type": "string"
},
"name": {
"description": "New customer name.",
"maxLength": 255,
"minLength": 1,
"type": "string"
},
"notify_via_email": {
"description": "Send the customer email notifications.",
"type": "boolean"
},
"notify_via_sms": {
"description": "Send the customer SMS notifications.",
"type": "boolean"
},
"phone_number": {
"description": "Phone number.",
"maxLength": 64,
"type": "string"
},
"service_address": {
"description": "Service address (where the work happens), line 1.",
"maxLength": 255,
"type": "string"
},
"service_address_2": {
"description": "Service address line 2.",
"maxLength": 255,
"type": "string"
},
"service_city": {
"description": "Service city.",
"maxLength": 128,
"type": "string"
},
"service_country": {
"description": "Service country (2-letter code).",
"maxLength": 64,
"type": "string"
},
"service_state": {
"description": "Service state (2-letter abbreviation in the US).",
"maxLength": 64,
"type": "string"
},
"service_zip_code": {
"description": "Service ZIP/postal code.",
"maxLength": 32,
"type": "string"
},
"special_instructions": {
"description": "Special instructions shown to technicians.",
"maxLength": 5000,
"type": "string"
}
},
"required": [
"customer_number"
],
"type": "object"
},
"name": "kickserv_update_customer",
"outputSchema": null
},
{
"description": "WRITE: update an existing job — reschedule it, rename it, change its description, category or custom job status, or reassign employees (employee_ids replaces the assignment). Totals, tax and payment fields are not settable here. Kickserv: PATCH /{account}/jobs/{job_number}.xml.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"description": {
"description": "Job description / work to be done.",
"maxLength": 10000,
"type": "string"
},
"duration": {
"description": "Job duration.",
"maximum": 100000,
"minimum": 0,
"type": "number"
},
"employee_ids": {
"description": "Employee `id`s (from kickserv_list_employees) to assign. Replaces the current assignment.",
"items": {
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"maxItems": 50,
"type": "array"
},
"ends_at": {
"description": "When the job ends. A date/time string Kickserv can parse, e.g. `2026-10-02 09:30` or `10/2/2026 09:30am`.",
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"job_number": {
"description": "Job number to update.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"job_status_id": {
"description": "New custom job status id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"job_type_id": {
"description": "New job category (job type) id.",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"type": "integer"
},
"name": {
"description": "Job name/title.",
"maxLength": 255,
"type": "string"
},
"po_number": {
"description": "Customer purchase-order number.",
"maxLength": 64,
"type": "string"
},
"scheduled_on": {
"description": "When the job is scheduled. A date/time string Kickserv can parse, e.g. `2026-10-02 09:30` or `10/2/2026 09:30am`.",
"maxLength": 64,
"minLength": 1,
"type": "string"
}
},
"required": [
"job_number"
],
"type": "object"
},
"name": "kickserv_update_job",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:3e2d3dba58d64398796bc1b62fa3e1aaf865b172d40036a9b21431c445cc6293 | sha256sum