FieldPulse MCP by usefulapi
Read FieldPulse customers, jobs, estimates, invoices, assets and projects; create and update jobs.
我該用這個嗎
品質與安全性
發現項目(8)
- LOW在 fieldpulse_list_customer_contacts 中
- LOW在 fieldpulse_get_customer_contact 中
- LOW在 fieldpulse_list_job_status_workflows 中
- LOW在 fieldpulse_list_job_workflow_statuses 中
- LOW在 fieldpulse_list_asset_categories 中
- LOW在 fieldpulse_list_purchase_orders 中
- LOW在 fieldpulse_list_company_profiles 中
- LOW在 fieldpulse_list_pipeline_statuses 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"fieldpulse": {
"url": "https://fieldpulse.usefulapi.io/mcp"
}
}
}遠端端點
https://fieldpulse.usefulapi.io/mcpstreamable-http它能做什麼
工具清單
工具(43)
🟢fieldpulse_list_customers(search, sort_by, sort_dir, page, limit)
List or search customers (name, email, phone, address, status, assigned user). GET /customers.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"sort_by": {
"type": "string",
"enum": [
"searchable",
"email",
"phone",
"address_1"
]
},
"sort_dir": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_customer(customer_id)
One customer by id. GET /customers/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse customer id."
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_customer_contacts(customer_id, page, limit)
The contacts (people) of one customer. GET /customers/{customerId}/customer-contact.
輸入結構描述
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse customer id."
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_customer_contact(customer_id, contact_id)
One contact of a customer. GET /customers/{customerId}/customer-contact/{contactId}.
輸入結構描述
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse customer id."
},
"contact_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Customer contact id."
}
},
"required": [
"customer_id",
"contact_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_jobs(search, sort_by, sort_dir, created_from, created_to, ...)
List or search jobs (type, status, customer, schedule, assignments), optionally within a created-at range or by custom status ids. GET /jobs.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"sort_by": {
"type": "string",
"enum": [
"created_at",
"updated_at"
]
},
"sort_dir": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"created_from": {
"description": "Only jobs created at or after this time (yyyy-mm-dd or ISO 8601 with a timezone).",
"type": "string"
},
"created_to": {
"description": "Only jobs created at or before this time.",
"type": "string"
},
"status_ids": {
"description": "Only jobs in these custom status ids (see fieldpulse_list_job_workflow_statuses).",
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"with_custom_fields": {
"description": "Include each job's custom field values (customfields_with_related_data).",
"type": "boolean"
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_job(job_id, with_custom_fields)
One job by id, optionally with its custom field values. GET /jobs/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse job id."
},
"with_custom_fields": {
"description": "Include custom field values.",
"type": "boolean"
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_job_status_workflows(limit)
The job status workflows (use their ids with fieldpulse_list_job_workflow_statuses and when setting a custom job status). GET /jobs/status-workflows.
輸入結構描述
{
"type": "object",
"properties": {
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_job_workflow_statuses(limit)
The custom job statuses of all workflows, with their ids (for filtering jobs or setting a status). GET /jobs/status-workflow-statuses.
輸入結構描述
{
"type": "object",
"properties": {
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_estimates(search, sort_by, sort_dir, page, limit)
List or search estimates (customer, status, totals, line items). GET /estimates.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"sort_by": {
"description": "An attribute of the record, e.g. created_at.",
"type": "string",
"pattern": "^[a-z][a-z0-9_]{0,49}$"
},
"sort_dir": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_estimate(estimate_id)
One estimate by id. GET /estimates/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"estimate_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse estimate id."
}
},
"required": [
"estimate_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_invoices(search, sort_by, sort_dir, page, limit)
List or search invoices (customer, status, totals, due dates). GET /invoices.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"sort_by": {
"description": "An attribute of the record, e.g. created_at.",
"type": "string",
"pattern": "^[a-z][a-z0-9_]{0,49}$"
},
"sort_dir": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_invoice(invoice_id)
One invoice by id. GET /invoices/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"invoice_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse invoice id."
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_payments(search, sort_by, sort_dir, page, limit)
List or search payments (amount, method, date, invoice). GET /payments.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"sort_by": {
"type": "string",
"enum": [
"cuid",
"method",
"amount",
"payment_date"
]
},
"sort_dir": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_payment(payment_id)
One payment by id. GET /payments/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"payment_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse payment id."
}
},
"required": [
"payment_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_assets(search, status, page, limit)
List or search customer assets (equipment) by install status. GET /assets.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"status": {
"type": "string",
"enum": [
"uninstalled",
"installed",
"retired"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_asset(asset_id)
One asset by id. GET /assets/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"asset_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse asset id."
}
},
"required": [
"asset_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_asset_categories(search, page, limit)
List asset categories. GET /assets-category.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_locations(object_type, object_id, page, limit)
List locations (service addresses) of a customer or a job. GET /locations.
輸入結構描述
{
"type": "object",
"properties": {
"object_type": {
"type": "string",
"enum": [
"customer",
"job"
]
},
"object_id": {
"description": "Id of the customer or job (needs object_type).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_location(location_id)
One location by id. GET /locations/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"location_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse location id."
}
},
"required": [
"location_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_projects(search, sort_by, sort_dir, page, limit)
List or search projects (status, completion). GET /projects.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"sort_by": {
"type": "string",
"enum": [
"cuid",
"name",
"status_id",
"completion_percentage"
]
},
"sort_dir": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_project(project_id)
One project by id. GET /projects/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"project_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse project id."
}
},
"required": [
"project_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_contracts(limit)
List contracts (maintenance agreements). GET /contracts.
輸入結構描述
{
"type": "object",
"properties": {
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_contract(contract_id)
One contract by id. GET /contracts/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"contract_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse contract id."
}
},
"required": [
"contract_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_items(page, limit)
List the invoice item catalog (products and services with prices). GET /items.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_item(item_id)
One invoice item by id. GET /items/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"item_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse item id."
}
},
"required": [
"item_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_purchase_orders(page, limit)
List purchase orders. GET /purchase-orders.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_purchase_order(purchase_order_id)
One purchase order by id. GET /purchase-orders/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"purchase_order_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse purchase order id."
}
},
"required": [
"purchase_order_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_vendors(search, limit)
List vendors (suppliers). GET /vendors.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_get_vendor(vendor_id)
One vendor by id. GET /vendors/{id}.
輸入結構描述
{
"type": "object",
"properties": {
"vendor_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse vendor id."
}
},
"required": [
"vendor_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_company_profiles(search, page, limit)
The company profile(s) of this FieldPulse account (name, address, contact details, settings). GET /company-profile.
輸入結構描述
{
"type": "object",
"properties": {
"search": {
"description": "Free-text search string.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_users(limit)
List the account's users (team members) with ids for assignments. GET /users.
輸入結構描述
{
"type": "object",
"properties": {
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_teams(page, limit)
List the account's teams. GET /teams.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_tags(object_type, page, limit)
List tags for customers or jobs. GET /tags.
輸入結構描述
{
"type": "object",
"properties": {
"object_type": {
"type": "string",
"enum": [
"customer",
"job"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_lead_sources(page, limit)
List customer lead sources. GET /lead-source.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_pipeline_statuses(page, limit)
List customer pipeline statuses. GET /pipeline-status.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_custom_fields(object_type, page, limit)
List custom field definitions, optionally for one object type. GET /custom-fields.
輸入結構描述
{
"type": "object",
"properties": {
"object_type": {
"type": "string",
"enum": [
"customer",
"job",
"invoice",
"item",
"maintenance_agreement",
"project",
"asset",
"material_list"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_comments(object_type, object_id, page, limit)
List comments on a record (customer, job, project, subtasks, invoice). GET /comments.
輸入結構描述
{
"type": "object",
"properties": {
"object_type": {
"type": "string",
"enum": [
"customer",
"job",
"project",
"subtasks",
"invoice"
]
},
"object_id": {
"description": "Id of the record (needs object_type).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_subtasks(status, assigned_user_id, sort_by, sort_dir, page, ...)
List subtasks (job checklist items) by status or assigned user. GET /subtasks.
輸入結構描述
{
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"open",
"close"
]
},
"assigned_user_id": {
"description": "Only subtasks assigned to this user id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"sort_by": {
"type": "string",
"enum": [
"due_date",
"status",
"title"
]
},
"sort_dir": {
"description": "Sort direction.",
"type": "string",
"enum": [
"asc",
"desc"
]
},
"page": {
"description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100000
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢fieldpulse_list_timesheets(user_id, in_time, out_time, type, limit)
List timesheet entries (clock in/out), optionally for one user or a time window. GET /timesheets.
輸入結構描述
{
"type": "object",
"properties": {
"user_id": {
"description": "Only this user's entries.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"in_time": {
"description": "Clock-in time filter (yyyy-mm-dd or ISO 8601 with a timezone).",
"type": "string"
},
"out_time": {
"description": "Clock-out time filter.",
"type": "string"
},
"type": {
"description": "Entry type, e.g. job.",
"type": "string",
"minLength": 1,
"maxLength": 50
},
"limit": {
"description": "Records per page, 1-100 (default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 100
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴fieldpulse_create_customer(first_name, last_name, display_name, company_name, account_type, ...)
WRITE: create a customer (lead or account). Give first_name and/or last_name, or a unique display_name. Creates a new record every call; check fieldpulse_list_customers first to avoid duplicates. POST /customers.
輸入結構描述
{
"type": "object",
"properties": {
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"display_name": {
"description": "Required by FieldPulse when first and last name are empty; must be unique.",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"company_name": {
"type": "string",
"maxLength": 255
},
"account_type": {
"type": "string",
"enum": [
"individual",
"company"
]
},
"email": {
"type": "string",
"maxLength": 255,
"format": "email",
"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,}$"
},
"alt_email": {
"type": "string",
"maxLength": 255,
"format": "email",
"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,}$"
},
"secondary_email": {
"type": "string",
"maxLength": 255,
"format": "email",
"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,}$"
},
"phone": {
"description": "A valid phone number.",
"type": "string",
"maxLength": 255
},
"secondary_phone": {
"description": "A valid phone number.",
"type": "string",
"maxLength": 255
},
"status": {
"type": "string",
"enum": [
"lead",
"opportunity",
"current customer",
"lost",
"other",
"inactive"
]
},
"notes": {
"type": "string",
"maxLength": 7500
},
"job_notes": {
"type": "string",
"maxLength": 4000
},
"assigned_to": {
"description": "User id the customer is assigned to (see fieldpulse_list_users); null clears it.",
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"lead_source_id": {
"description": "See fieldpulse_list_lead_sources.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pipeline_status_id": {
"description": "See fieldpulse_list_pipeline_statuses.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"tags": {
"description": "Existing customer tag ids (see fieldpulse_list_tags).",
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"has_different_billing_address": {
"type": "boolean"
},
"billing_address_1": {
"type": "string",
"maxLength": 1000
},
"billing_address_2": {
"type": "string",
"maxLength": 1000
},
"billing_city": {
"type": "string",
"maxLength": 255
},
"billing_state": {
"type": "string",
"maxLength": 255
},
"billing_zip_code": {
"type": "string",
"maxLength": 255
},
"service_address_1": {
"type": "string",
"maxLength": 255
},
"service_address_2": {
"type": "string",
"maxLength": 255
},
"service_address_city": {
"type": "string",
"maxLength": 255
},
"service_address_state": {
"type": "string",
"maxLength": 255
},
"service_address_zip_code": {
"type": "string",
"maxLength": 255
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴fieldpulse_update_customer(customer_id, first_name, last_name, display_name, company_name, ...)
WRITE: change fields of one customer (only the fields you pass). If FieldPulse asks for a name, include first_name/last_name or display_name. PUT /customers/{customerId}.
輸入結構描述
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse customer id."
},
"first_name": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"last_name": {
"type": "string",
"minLength": 1,
"maxLength": 255
},
"display_name": {
"description": "Required by FieldPulse when first and last name are empty; must be unique.",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"company_name": {
"type": "string",
"maxLength": 255
},
"account_type": {
"type": "string",
"enum": [
"individual",
"company"
]
},
"email": {
"type": "string",
"maxLength": 255,
"format": "email",
"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,}$"
},
"alt_email": {
"type": "string",
"maxLength": 255,
"format": "email",
"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,}$"
},
"secondary_email": {
"type": "string",
"maxLength": 255,
"format": "email",
"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,}$"
},
"phone": {
"description": "A valid phone number.",
"type": "string",
"maxLength": 255
},
"secondary_phone": {
"description": "A valid phone number.",
"type": "string",
"maxLength": 255
},
"status": {
"type": "string",
"enum": [
"lead",
"opportunity",
"current customer",
"lost",
"other",
"inactive"
]
},
"notes": {
"type": "string",
"maxLength": 7500
},
"job_notes": {
"type": "string",
"maxLength": 4000
},
"assigned_to": {
"description": "User id the customer is assigned to (see fieldpulse_list_users); null clears it.",
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"lead_source_id": {
"description": "See fieldpulse_list_lead_sources.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"pipeline_status_id": {
"description": "See fieldpulse_list_pipeline_statuses.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"tags": {
"description": "Existing customer tag ids (see fieldpulse_list_tags).",
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"has_different_billing_address": {
"type": "boolean"
},
"billing_address_1": {
"type": "string",
"maxLength": 1000
},
"billing_address_2": {
"type": "string",
"maxLength": 1000
},
"billing_city": {
"type": "string",
"maxLength": 255
},
"billing_state": {
"type": "string",
"maxLength": 255
},
"billing_zip_code": {
"type": "string",
"maxLength": 255
},
"service_address_1": {
"type": "string",
"maxLength": 255
},
"service_address_2": {
"type": "string",
"maxLength": 255
},
"service_address_city": {
"type": "string",
"maxLength": 255
},
"service_address_state": {
"type": "string",
"maxLength": 255
},
"service_address_zip_code": {
"type": "string",
"maxLength": 255
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴fieldpulse_create_job(customer_id, job_type, billing, subtitle, notes, ...)
WRITE: create a job for an existing customer. Needs customer_id, job_type and the numeric billing value FieldPulse requires; set a status (1-6) or a custom status_id + status_workflow_id. Creates a new job every call. POST /jobs.
輸入結構描述
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Existing customer id."
},
"job_type": {
"type": "string",
"minLength": 1,
"maxLength": 150,
"description": "Job type label, e.g. the service name."
},
"billing": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "The integer billing value FieldPulse requires for a job."
},
"subtitle": {
"type": "string",
"maxLength": 150
},
"notes": {
"type": "string",
"maxLength": 7500
},
"field_notes": {
"type": "string",
"maxLength": 5000
},
"status": {
"type": "integer",
"minimum": 1,
"maximum": 6,
"description": "1 = new, 2 = in progress, 3 = pending, 4 = completed, 5 = canceled, 6 = on the way."
},
"status_id": {
"description": "A custom status id (see fieldpulse_list_job_workflow_statuses); needs status_workflow_id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"status_workflow_id": {
"description": "The status workflow of status_id (see fieldpulse_list_job_status_workflows).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"start_time": {
"description": "Start, yyyy-mm-dd or ISO 8601 with a timezone.",
"type": [
"string",
"null"
]
},
"end_time": {
"description": "End, yyyy-mm-dd or ISO 8601 with a timezone.",
"type": [
"string",
"null"
]
},
"due_date": {
"description": "Due date, yyyy-mm-dd or ISO 8601 with a timezone.",
"type": [
"string",
"null"
]
},
"location_id": {
"description": "A location of the customer (see fieldpulse_list_locations).",
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"project_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"customer_contact_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"assignments": {
"description": "Who the job is assigned to.",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"team_id": {
"description": "Team id (see fieldpulse_list_teams).",
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"assigned_members": {
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"description": "User ids (see fieldpulse_list_users)."
}
},
"required": [
"assigned_members"
]
}
},
"tags": {
"description": "Existing job tag ids (see fieldpulse_list_tags).",
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
}
},
"required": [
"customer_id",
"job_type",
"billing"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴fieldpulse_update_job(job_id, customer_id, job_type, billing, subtitle, ...)
WRITE: change a job: status, schedule, notes, assignments, location. FieldPulse requires customer_id, job_type and billing on every update, so this reads the job first and keeps those (and its current status) unless you pass new values. The read and the write are two requests; FieldPulse offers no version check. PUT /jobs/{jobId}.
輸入結構描述
{
"type": "object",
"properties": {
"job_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "FieldPulse job id."
},
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"job_type": {
"type": "string",
"minLength": 1,
"maxLength": 150
},
"billing": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"subtitle": {
"type": "string",
"maxLength": 150
},
"notes": {
"type": "string",
"maxLength": 7500
},
"field_notes": {
"type": "string",
"maxLength": 5000
},
"status": {
"type": "integer",
"minimum": 1,
"maximum": 6,
"description": "1 = new, 2 = in progress, 3 = pending, 4 = completed, 5 = canceled, 6 = on the way."
},
"status_id": {
"description": "A custom status id (see fieldpulse_list_job_workflow_statuses); needs status_workflow_id.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"status_workflow_id": {
"description": "The status workflow of status_id (see fieldpulse_list_job_status_workflows).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"start_time": {
"description": "Start, yyyy-mm-dd or ISO 8601 with a timezone.",
"type": [
"string",
"null"
]
},
"end_time": {
"description": "End, yyyy-mm-dd or ISO 8601 with a timezone.",
"type": [
"string",
"null"
]
},
"due_date": {
"description": "Due date, yyyy-mm-dd or ISO 8601 with a timezone.",
"type": [
"string",
"null"
]
},
"location_id": {
"description": "A location of the customer (see fieldpulse_list_locations).",
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"project_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"customer_contact_id": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"assignments": {
"description": "Who the job is assigned to.",
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"team_id": {
"description": "Team id (see fieldpulse_list_teams).",
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"assigned_members": {
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"description": "User ids (see fieldpulse_list_users)."
}
},
"required": [
"assigned_members"
]
}
},
"tags": {
"description": "Existing job tag ids (see fieldpulse_list_tags).",
"maxItems": 50,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
}
},
"required": [
"job_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社群
證據