FieldPulse MCP by usefulapi
Read FieldPulse customers, jobs, estimates, invoices, assets and projects; create and update jobs.
사용해야 할까요
품질 및 안전성
발견 사항 (8)
- LOWfieldpulse_list_customer_contacts에서
- LOWfieldpulse_get_customer_contact에서
- LOWfieldpulse_list_job_status_workflows에서
- LOWfieldpulse_list_job_workflow_statuses에서
- LOWfieldpulse_list_asset_categories에서
- LOWfieldpulse_list_purchase_orders에서
- LOWfieldpulse_list_company_profiles에서
- LOWfieldpulse_list_pipeline_statuses에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`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"
}커뮤니티
증거