FieldEdge MCP by usefulapi

Read work orders, customers and invoices; create customers, notes and work orders in FieldEdge.

使うべきか

品質と安全性

A
説明の品質
100%
スキーマの完全性
97%
命名の品質
77%
ポイズニングのリスク
100%
権限の一致
100%
プロトコルへの準拠
100%

検出事項(6)

  • LOWTool 'fieldedge_search_work_orders_by_address' name length outside 3-30 rangefieldedge_search_work_orders_by_address 内
  • LOWTool 'fieldedge_list_work_order_assignments' name length outside 3-30 rangefieldedge_list_work_order_assignments 内
  • LOWTool 'fieldedge_get_customer_by_phone' name length outside 3-30 rangefieldedge_get_customer_by_phone 内
  • LOWTool 'fieldedge_search_customers_by_address' name length outside 3-30 rangefieldedge_search_customers_by_address 内
  • LOWTool 'fieldedge_list_customer_attachments' name length outside 3-30 rangefieldedge_list_customer_attachments 内
  • LOWTool 'fieldedge_update_assignment_status' name length outside 3-30 rangefieldedge_update_assignment_status 内

ツール定義とプロトコルへの準拠に関する自動分析に基づいています。

コンテキストコスト

~13,290トークン数(ツール定義)
~2.0 KB一般的なレスポンスサイズ
注意への影響は大きい(128k コンテキストの 10.38%)

これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。

インストール

ワンクリックインストール

これを `claude_desktop_config.json` ファイルに追加してください:

{
  "mcpServers": {
    "fieldedge": {
      "url": "https://fieldedge.usefulapi.io/mcp"
    }
  }
}

リモートエンドポイント

https://fieldedge.usefulapi.io/mcpstreamable-http

できること

ツール一覧

ツール(45)

🟢 読み取り専用🟡 書き込み🔴 削除⚪ 不明
🟢fieldedge_list_work_orders(limit, offset, completed, customer_id, invoice_added, ...)

List work orders (jobs) of the company with status, service address, customer, primary technician and linked invoice. Filters combine with AND; assigned=false cannot be combined with primary_tech_id. Needs scope workorders:read. GET /open-api/v1/work-orders.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "completed": {
      "description": "Only completed (true) or open (false) work orders.",
      "type": "boolean"
    },
    "customer_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Only work orders of this service-location customer id."
    },
    "invoice_added": {
      "description": "Only work orders that have (true) or lack (false) an invoice.",
      "type": "boolean"
    },
    "primary_tech_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Only work orders whose primary technician is this employee id."
    },
    "assigned": {
      "description": "Only work orders that have (true) or lack (false) a primary technician.",
      "type": "boolean"
    },
    "sort": {
      "description": "Sort field, '-' prefix = descending: workOrderNumber, scheduledStart, priority.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_work_order(work_order_id)

One work order: status, assignments, service address, task, tags and linked invoice. Needs scope workorders:read. GET /open-api/v1/work-orders/{work_order_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "work_order_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Work order id (GUID, from fieldedge_list_work_orders)."
    }
  },
  "required": [
    "work_order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_search_work_orders_by_address(address_line_1, address_line_2, city, state, postal_code, ...)

Work orders at a service address, most recent first, each with its customer's name. All of address_line_1, city, state and postal_code are required. Needs scope workorders:read. GET /open-api/v1/work-orders/search/by-address.

入力スキーマ

{
  "type": "object",
  "properties": {
    "address_line_1": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Primary address line."
    },
    "address_line_2": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Secondary address line."
    },
    "city": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "City."
    },
    "state": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "State or region."
    },
    "postal_code": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20,
      "description": "Postal or ZIP code."
    },
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    }
  },
  "required": [
    "address_line_1",
    "city",
    "state",
    "postal_code"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_work_order_assignments(work_order_id, technician_id, status, schedule_from, schedule_to, ...)

Technician assignments (schedule, status) on one work order. Needs scope workorders:read. GET /open-api/v1/work-orders/{workOrderId}/assignments.

入力スキーマ

{
  "type": "object",
  "properties": {
    "work_order_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Work order id (GUID)."
    },
    "technician_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Only this technician's assignments (employee id)."
    },
    "status": {
      "description": "Only assignments in this status.",
      "type": "string",
      "enum": [
        "pending",
        "traveling",
        "working",
        "paused",
        "completed",
        "canceled",
        "backorder",
        "finalized"
      ]
    },
    "schedule_from": {
      "description": "Only assignments scheduled on/after this ISO 8601 date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "schedule_to": {
      "description": "Only assignments scheduled on/before this ISO 8601 date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "sort": {
      "description": "scheduleDateTime or technicianName, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    },
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    }
  },
  "required": [
    "work_order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_search_customers(limit, offset, phone, email, first_name, ...)

Search customers (personal data). With no filter all customers are listed. Needs scope customers:read. GET /open-api/v1/customers/search.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "phone": {
      "type": "string",
      "minLength": 1,
      "maxLength": 30,
      "description": "Phone number."
    },
    "email": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "E-mail address."
    },
    "first_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "First name."
    },
    "updated_after": {
      "description": "Only customers updated on/after this ISO 8601 UTC date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "updated_before": {
      "description": "Only customers updated on/before this ISO 8601 UTC date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "has_service_agreement": {
      "description": "Only customers with (true) or without (false) an active service agreement.",
      "type": "boolean"
    },
    "sort": {
      "description": "displayName, address1, city, state, primaryEmail or updatedAt; '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_customer(customer_id)

One customer (or job location) by id, with contact details and address (personal data). The reply says whether the record is a job or a billing customer. Needs scope customers:read. GET /open-api/v1/customers/id/{customer_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Customer id (GUID)."
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_customer_by_phone(phone)

The customer with this phone number (personal data). Needs scope customers:read. GET /open-api/v1/customer/{phone}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "phone": {
      "type": "string",
      "pattern": "^\\+?\\d{10,15}$",
      "description": "Phone number, 10-15 digits, optionally prefixed with +."
    }
  },
  "required": [
    "phone"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_search_customers_by_address(address_line_1, address_line_2, city, state, postal_code, ...)

Customers at a street address (personal data). address_line_1, city, state and postal_code are required. Needs scope customers:read. GET /open-api/v1/customers/by-address.

入力スキーマ

{
  "type": "object",
  "properties": {
    "address_line_1": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Primary address line."
    },
    "address_line_2": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Secondary address line."
    },
    "city": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "City."
    },
    "state": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "State or region."
    },
    "postal_code": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20,
      "description": "Postal or ZIP code."
    },
    "sort": {
      "description": "firstName or lastName, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    },
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    }
  },
  "required": [
    "address_line_1",
    "city",
    "state",
    "postal_code"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_customer_notes(customer_id, sort, limit, offset)

Notes on a customer record, newest first by default. Needs scope customers:read. GET /open-api/v1/customers/{customerId}/notes.

入力スキーマ

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Customer id (GUID)."
    },
    "sort": {
      "description": "createdAt or updatedAt, '-' prefix = descending (default -createdAt).",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    },
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_customer_attachments(customer_id, sort, limit, offset)

File attachments on a customer record, each with the blob URL to view or download it. Needs scope customers:read. GET /open-api/v1/customers/{customerId}/attachments.

入力スキーマ

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Customer id (GUID)."
    },
    "sort": {
      "description": "createdAt or fileName, '-' prefix = descending (default -createdAt).",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    },
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    }
  },
  "required": [
    "customer_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_tags(limit, offset, name, sort)

Reusable customer tags of the account. Needs scope customers:read. GET /open-api/v1/tags.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Only tags matching this name."
    },
    "sort": {
      "description": "name, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_invoices(limit, offset, sort)

Invoices by invoice date, without line items (use fieldedge_get_invoice for those). Needs scope invoices:read. GET /open-api/v1/invoices.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "sort": {
      "description": "dateAdded or customerName, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_invoice(invoice_id)

One invoice with its line items; the invoice id equals its work order id. Needs scope invoices:read. GET /open-api/v1/invoices/{invoice_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "invoice_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Invoice id (= work order id)."
    }
  },
  "required": [
    "invoice_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_quotes(limit, offset, id, customer_id, class_name, ...)

Quotes, without line items (use fieldedge_get_quote for those). Prefer class_id over class_name. Needs scope workorders:read. GET /open-api/v1/quotes.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Only the quote with this id (= work order id)."
    },
    "customer_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Only quotes whose work order belongs to this customer/location id."
    },
    "class_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Exact display name of the quote class (e.g. Install, Repair)."
    },
    "class_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Stable id of the quote class."
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_quote(quote_id)

One quote with its line items; the quote id equals its work order id. Needs scope workorders:read. GET /open-api/v1/quotes/{quote_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "quote_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Quote id (= work order id)."
    }
  },
  "required": [
    "quote_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_agreements(limit, offset, agreement_number, customer_id, plan_name, ...)

Service agreements (recurring maintenance contracts) with plan, dates and customer. Needs scope workorders:read. GET /open-api/v1/agreements.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "agreement_number": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Agreement number."
    },
    "customer_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Only this customer's agreements."
    },
    "plan_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Agreement plan name."
    },
    "active": {
      "description": "Only active (true) or inactive (false) agreements.",
      "type": "boolean"
    },
    "next_service_before": {
      "description": "Only agreements whose next service date is before this UTC date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "next_service_after": {
      "description": "Only agreements whose next service date is after this UTC date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "next_invoice_before": {
      "description": "Only agreements whose next invoice date is before this UTC date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "sort": {
      "description": "agreementNumber, originalContractDate, nextServiceDate or nextInvoiceDate; '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_agreement(agreement_id)

One service agreement by id. Needs scope workorders:read. GET /open-api/v1/agreements/{agreement_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "agreement_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Agreement id (GUID)."
    }
  },
  "required": [
    "agreement_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_employees(limit, offset, active, role, sort)

Employees (technicians, dispatchers, CSRs, admins). Needs scope employees:read. GET /open-api/v1/employees.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "active": {
      "description": "Only active (true) or inactive (false) employees.",
      "type": "boolean"
    },
    "role": {
      "description": "Only employees with this role.",
      "type": "string",
      "enum": [
        "Admin",
        "Manager",
        "CSR",
        "Dispatcher",
        "Technician"
      ]
    },
    "sort": {
      "description": "name, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_employee(employee_id)

One employee record. Needs scope employees:read. GET /open-api/v1/employees/{employee_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "employee_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Employee id (GUID)."
    }
  },
  "required": [
    "employee_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_business_units(limit, offset, active, name, sort)

Business units (needed to create a work order). Needs scope business-units:read. GET /open-api/v1/business-units.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "active": {
      "description": "Only active (true) or inactive (false) units.",
      "type": "boolean"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Only units whose name contains this text."
    },
    "sort": {
      "description": "name, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_business_unit(business_unit_id)

One business unit by id. Needs scope business-units:read. GET /open-api/v1/business-units/{business_unit_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "business_unit_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Business unit id (GUID)."
    }
  },
  "required": [
    "business_unit_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_lead_sources(limit, offset, active, business_unit_id, name, ...)

Lead sources (needed to create a work order). Needs scope lead-sources:read. GET /open-api/v1/lead-sources.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "active": {
      "description": "Only active (true) or inactive (false) sources.",
      "type": "boolean"
    },
    "business_unit_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Only sources of this business unit."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Only sources whose name contains this text."
    },
    "sort": {
      "description": "name, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_lead_source(lead_source_id)

One lead source by id. Needs scope lead-sources:read. GET /open-api/v1/lead-sources/{lead_source_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "lead_source_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Lead source id (GUID)."
    }
  },
  "required": [
    "lead_source_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_tasks(limit, offset, class, active, sort)

Tasks (service types, needed to create a work order). Needs scope tasks:read. GET /open-api/v1/tasks.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "class": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Only tasks of this class."
    },
    "active": {
      "description": "Only active (true) or inactive (false) tasks.",
      "type": "boolean"
    },
    "sort": {
      "description": "name, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_task_bundle(task_id)

One task together with its resolved department and skill. Needs scope tasks:read. GET /open-api/v1/tasks/{task_id}/bundle.

入力スキーマ

{
  "type": "object",
  "properties": {
    "task_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Task id (GUID)."
    }
  },
  "required": [
    "task_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_items(limit, offset, category, active, updated_after, ...)

Inventory items (parts, services) with cost and rate. Needs scope items:read. GET /open-api/v1/items.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "category": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Only items of this category."
    },
    "active": {
      "description": "Only active (true) or inactive (false) items.",
      "type": "boolean"
    },
    "updated_after": {
      "description": "Only items updated on/after this ISO 8601 UTC date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "updated_before": {
      "description": "Only items updated on/before this ISO 8601 UTC date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "sort": {
      "description": "name, createdAt or updatedAt; '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_item(item_id)

One inventory item by id. Needs scope items:read. GET /open-api/v1/items/{item_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "item_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Item id (GUID)."
    }
  },
  "required": [
    "item_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_item_categories(limit, offset)

Inventory item categories (tree: childTreeLevel, parent). Needs scope item-categories:read. GET /open-api/v1/item-categories.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_item_category(item_category_id)

One item category by id. Needs scope item-categories:read. GET /open-api/v1/item-categories/{item_category_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "item_category_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Item category id (GUID)."
    }
  },
  "required": [
    "item_category_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_sales_tax_codes(limit, offset, active, is_taxable, sort)

Sales tax codes. Needs scope items:read. GET /open-api/v1/sales-tax-codes.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "active": {
      "description": "Only active (true) or inactive (false) codes.",
      "type": "boolean"
    },
    "is_taxable": {
      "description": "Only taxable (true) or non-taxable (false) codes.",
      "type": "boolean"
    },
    "sort": {
      "description": "name, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_list_warehouses(limit, offset, name, active, sort)

Inventory warehouses. Needs scope warehouses:read. GET /open-api/v1/warehouses.

入力スキーマ

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "Records per page (1-200, default 20).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "offset": {
      "description": "Records to skip (default 0). Use the previous reply's next_offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 10000000
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Only warehouses with this name."
    },
    "active": {
      "description": "Only active (true) or inactive (false) warehouses.",
      "type": "boolean"
    },
    "sort": {
      "description": "name, '-' prefix = descending.",
      "type": "string",
      "pattern": "^-?[A-Za-z]{1,40}$"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_warehouse(warehouse_id)

One warehouse by id. Needs scope warehouses:read. GET /open-api/v1/warehouses/{warehouse_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "warehouse_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Warehouse id (GUID)."
    }
  },
  "required": [
    "warehouse_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_lead(lead_id)

One lead by id (lead-provider integrations). Needs scope leads:read. GET /open-api/v1/leads/{lead_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "lead_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Lead id (GUID)."
    }
  },
  "required": [
    "lead_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢fieldedge_get_company(company_id)

The company name for a company id (the tenant id). Needs scope company:read. GET /open-api/v1/companies/{company_id}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "company_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Company id."
    }
  },
  "required": [
    "company_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡fieldedge_create_customer(first_name, last_name, email, phone_number, company_name, ...)

WRITE: create a customer record in FieldEdge, visible to the office staff at once. Needs an e-mail or a phone number (international format, e.g. +14155552671); marketing_email_opt_in needs an e-mail and marketing_sms_opt_in a phone number. Names are 2-50 characters without digits. Check fieldedge_search_customers first so you do not create a duplicate. Needs scope customers:write. POST /open-api/v1/customers.

入力スキーマ

{
  "type": "object",
  "properties": {
    "first_name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 50,
      "description": "First name (2-50 characters, no digits)."
    },
    "last_name": {
      "type": "string",
      "minLength": 2,
      "maxLength": 50,
      "description": "Last name (2-50 characters, no digits)."
    },
    "email": {
      "description": "Primary e-mail address.",
      "type": "string",
      "maxLength": 200,
      "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_number": {
      "description": "Primary phone number, international format.",
      "type": "string",
      "pattern": "^\\+?[0-9 ()-]{7,20}$"
    },
    "company_name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 150,
      "description": "Company or business name."
    },
    "address_1": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Street address line 1."
    },
    "address_2": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Street address line 2."
    },
    "city": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "City."
    },
    "state": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "State or province."
    },
    "zip": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20,
      "description": "Postal or ZIP code."
    },
    "preferred_contact_methods": {
      "description": "Email, Phone and/or SMS.",
      "maxItems": 3,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "Email",
          "Phone",
          "SMS"
        ]
      }
    },
    "marketing_email_opt_in": {
      "description": "The customer agreed to marketing e-mail. Only true if they really did.",
      "type": "boolean"
    },
    "marketing_sms_opt_in": {
      "description": "The customer agreed to marketing SMS. Only true if they really did.",
      "type": "boolean"
    }
  },
  "required": [
    "first_name",
    "last_name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡fieldedge_create_customer_note(customer_id, note)

WRITE: add a free-text note to a customer record; office staff see it in FieldEdge at once. Needs scope customers:write. POST /open-api/v1/customers/{customerId}/notes.

入力スキーマ

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Customer id (GUID)."
    },
    "note": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "The note text."
    }
  },
  "required": [
    "customer_id",
    "note"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴fieldedge_update_customer_note(customer_id, note_id, note)

WRITE: replace the text of an existing customer note (the old text is lost). Get the note id from fieldedge_list_customer_notes. Needs scope customers:write. PATCH /open-api/v1/customers/{customerId}/notes/{noteId}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Customer id (GUID)."
    },
    "note_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Note id (from fieldedge_list_customer_notes)."
    },
    "note": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "The new note text."
    }
  },
  "required": [
    "customer_id",
    "note_id",
    "note"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡fieldedge_create_tag(name)

WRITE: create a reusable customer tag (e.g. "VIP Customer"). Check fieldedge_list_tags first. Needs scope customers:write. POST /open-api/v1/tags.

入力スキーマ

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Tag name."
    }
  },
  "required": [
    "name"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡fieldedge_add_customer_tag(customer_id, tag_id)

WRITE: attach an existing tag to a customer; it shows on the customer record in FieldEdge. Needs scope customers:write. POST /open-api/v1/customers/{customerId}/tags.

入力スキーマ

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Customer id (GUID)."
    },
    "tag_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Tag id (from fieldedge_list_tags)."
    }
  },
  "required": [
    "customer_id",
    "tag_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴fieldedge_remove_customer_tag(customer_id, tag_id)

WRITE: detach a tag from a customer (the tag itself stays). Needs scope customers:write. DELETE /open-api/v1/customers/{customerId}/tags/{tagId}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Customer id (GUID)."
    },
    "tag_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Tag id to remove."
    }
  },
  "required": [
    "customer_id",
    "tag_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡fieldedge_create_work_order(customer_id, business_unit_id, lead_source_id, task_id, work_order_number, ...)

WRITE: create a work order for a customer location. business_unit_id, lead_source_id and task_id are required: get them from fieldedge_list_business_units, fieldedge_list_lead_sources and fieldedge_list_tasks. Scheduling, invoice lines and equipment are separate steps (fieldedge_assign_technician for scheduling). Needs scope workorders:write. POST /open-api/v1/work-orders.

入力スキーマ

{
  "type": "object",
  "properties": {
    "customer_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Customer location id the work order is for."
    },
    "business_unit_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Business unit id."
    },
    "lead_source_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Lead source id."
    },
    "task_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Task (service type) id."
    },
    "work_order_number": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Work order name/number; FieldEdge generates one when omitted."
    },
    "primary_tech_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Employee id of the primary technician to pre-assign."
    },
    "document_type": {
      "description": "Document the work order generates (default Normal).",
      "type": "string",
      "enum": [
        "Normal",
        "QuoteOnly",
        "InvoiceOnly"
      ]
    },
    "work_description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "Description of the work to be performed."
    },
    "notes": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "Internal notes (the Work Summary in FieldEdge)."
    },
    "require_equipment": {
      "description": "Equipment must be assigned before completion (default false).",
      "type": "boolean"
    }
  },
  "required": [
    "customer_id",
    "business_unit_id",
    "lead_source_id",
    "task_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴fieldedge_update_work_order(work_order_id, primary_tech_id, business_unit_id, lead_source_id, work_description, ...)

WRITE: partially update a work order; only the fields you pass change. Can reassign the primary technician, change description/notes, and mark it completed (with a resolution) or cancel it (cancel_note). Look at fieldedge_get_work_order first. Needs scope workorders:write. PATCH /open-api/v1/work-orders/{workOrderId}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "work_order_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Work order id (GUID)."
    },
    "primary_tech_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "New primary technician (employee id)."
    },
    "business_unit_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "New business unit id."
    },
    "lead_source_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "New lead source id."
    },
    "work_description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "New description of the work."
    },
    "notes": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "New internal notes."
    },
    "priority_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Priority id."
    },
    "completed": {
      "description": "Mark the work order completed.",
      "type": "boolean"
    },
    "resolution": {
      "type": "string",
      "minLength": 1,
      "maxLength": 5000,
      "description": "Resolution text (when completing)."
    },
    "cancel_note": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "Reason, when cancelling the work order."
    }
  },
  "required": [
    "work_order_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡fieldedge_assign_technician(work_order_id, technician_id, schedule_date_time, est_complete_date_time)

WRITE: schedule a technician on a work order. The assignment appears on the Dispatch Board at once and FieldEdge returns no assignment id: list the assignments afterwards to find it. Needs scope workorders:write. POST /open-api/v1/work-orders/{workOrderId}/assignments.

入力スキーマ

{
  "type": "object",
  "properties": {
    "work_order_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Work order id (GUID)."
    },
    "technician_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Employee id of the technician (fieldedge_list_employees with role Technician)."
    },
    "schedule_date_time": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      "description": "Scheduled start, ISO 8601 with offset, e.g. 2026-08-17T12:58:00Z."
    },
    "est_complete_date_time": {
      "description": "Estimated completion, ISO 8601 with offset.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    }
  },
  "required": [
    "work_order_id",
    "technician_id",
    "schedule_date_time"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴fieldedge_update_assignment_status(work_order_id, assignment_id, status, cancel_note)

WRITE: move an assignment to pending, traveling, working, paused, completed or canceled. It triggers the same customer notifications and dispatch-board updates as a change on the dispatch board and is timestamped now. Canceling needs cancel_note; it fails once the assignment is completed, canceled or finalized. Get the assignment id from fieldedge_list_work_order_assignments. Needs scope workorders:write. PATCH /open-api/v1/work-orders/{workOrderId}/assignments/{assignmentId}/status.

入力スキーマ

{
  "type": "object",
  "properties": {
    "work_order_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Work order id (GUID)."
    },
    "assignment_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Assignment id."
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "traveling",
        "working",
        "paused",
        "completed",
        "canceled"
      ],
      "description": "New status."
    },
    "cancel_note": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000,
      "description": "Required when status is canceled; not allowed otherwise."
    }
  },
  "required": [
    "work_order_id",
    "assignment_id",
    "status"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴fieldedge_remove_assignment(work_order_id, assignment_id)

WRITE: unassign one technician (by assignment id) from a work order; other technicians on it stay. Get the assignment id from fieldedge_list_work_order_assignments. Needs scope workorders:write. DELETE /open-api/v1/work-orders/{workOrderId}/assignments/{assignmentId}.

入力スキーマ

{
  "type": "object",
  "properties": {
    "work_order_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Work order id (GUID)."
    },
    "assignment_id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,64}$",
      "description": "Assignment id to remove."
    }
  },
  "required": [
    "work_order_id",
    "assignment_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

コミュニティ

このサーバーを評価する

エビデンス

最近の観測

検証済みバージョンは記録されていませんツール 45 件