Build, balance, realign and analyze sales/service territories; geocode, route, schedule, live map.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer <EZT MCP API key>. Discovery (initialize, tools/list, resources/list, prompts/list, ezt://guidance/* and ezt://part-layers* reads) is open; every tools/call, Tasks method and other resource read requires this header and returns 401 with WWW-Authenticate and error.code=AUTH_REQUIRED without it.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Builds territories that follow an account column, such as rep name or territory code from CRM: each part goes to the group holding most of its accounts (conflict_policy). Adds a new alignment (TAL). Needs an ingested point_layer, grouping_field, part_layer, and tal_label. Grouping values are labels, not balance metrics. part_scope: bbox_intersect (default; parts near the accounts) or explicit with part_filter, e.g. {state_abbr: TX}. A declared visit-frequency column needs visit_frequency_field or ignore_visit_frequency (CLARIFICATION_REQUIRED otherwise). With map_session_id the open map is the input. Returns a task; the result carries tal_id and ts_handle. analyze reports the statistics.
tal is the default. assignments returns assignments_artifact plus an authenticated download_url; no ts_handle, tal_id, or map_refresh.
Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Tool list last changed Oct 26, 2026.
Builds territories that follow an account column, such as rep name or territory code from CRM: each part goes to the group holding most of its accounts (conflict_policy). Adds a new alignment (TAL). Needs an ingested point_layer, grouping_field, part_layer, and tal_label. Grouping values are labels, not balance metrics. part_scope: bbox_intersect (default; parts near the accounts) or explicit with part_filter, e.g. {state_abbr: TX}. A declared visit-frequency column needs visit_frequency_field or ignore_visit_frequency (CLARIFICATION_REQUIRED otherwise). With map_session_id the open map is the input. Returns a task; the result carries tal_id and ts_handle. analyze reports the statistics.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| part_ids | any | |
| tal_label | any | |
| ts_handle | any | |
| part_layer | any | |
| part_scope | any | |
| output_mode | string | tal is the default. assignments returns assignments_artifact plus an authenticated download_url; no ts_handle, tal_id, or map_refresh. |
| part_filter | any | |
| point_layer* | string | |
| repair_policy | string | Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found. |
| grouping_field | any | |
| map_session_id | any | |
| conflict_policy | string | |
| expected_revision | any | |
| visit_frequency_field | any | |
| ignore_visit_frequency | any |
{
"type": "object",
"title": "account_buildArguments",
"required": [
"point_layer"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"part_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Part Ids",
"default": null
},
"tal_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Label",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"part_scope": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Scope",
"default": null
},
"output_mode": {
"enum": [
"tal",
"assignments"
],
"type": "string",
"title": "Output Mode",
"default": "tal",
"description": "tal is the default. assignments returns assignments_artifact plus an authenticated download_url; no ts_handle, tal_id, or map_refresh."
},
"part_filter": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Part Filter",
"default": null
},
"point_layer": {
"type": "string",
"title": "Point Layer"
},
"repair_policy": {
"enum": [
"default",
"strict",
"report_only"
],
"type": "string",
"title": "Repair Policy",
"default": "default",
"description": "Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found."
},
"grouping_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Grouping Field",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"conflict_policy": {
"type": "string",
"title": "Conflict Policy",
"default": "plurality_account_count"
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
},
"visit_frequency_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Visit Frequency Field",
"default": null
},
"ignore_visit_frequency": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Ignore Visit Frequency",
"default": null
}
}
}Computes territory statistics for one or more alignments, i.e. how balanced the territories are and how alignments compare: account counts, declared metric totals (e.g. Revenue), workload hours, balance scores, and cross-TAL comparison; hypothetical_moves previews a realign. Input: map_session_id (the open map as it is now), ts_handle, ts, or a completed build job_id (pass tal_ids when several TALs exist). metrics: omit for every declared column, or name them; workload and account_count are always available. Workload needs dwell (dwell_time, the build's recorded dwell, or the layer's dwell_time_field); without it the result has every other statistic, no workload, and workload_omitted.ask_user, the question for the user. analysis_panel=single with map_session_id fills the map's analysis dock (analysis_panel.status=pushed). territories[].workload_total is minutes; hours are in territory_metric_grids. Drive-time alignments count accounts inside each polygon. Returns a task.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| scope | any | |
| job_id | any | |
| metrics | any | |
| tal_ids | any | |
| max_depth | any | |
| ts_handle | any | |
| dwell_time | any |
Finds coverage gaps in a contractor (vendor, service provider, technician, repair shop) network: counts the contractors that reach each demand point (customer, claim, store, ZIP center). Reads contractor_layer (ingested with layer_role=contractors) and demand_layer. coverage: {rule: drive_time, max_minutes} (straight-line travel model, no provider calls), {rule: drive_time, source: isochrone_tal, isochrone_tal_id} (isochrone_build areas around the contractors), or {rule: zip_list} (declared service ZIPs). One trade per call ('*' for all). Missing layers, coverage, or trade return CLARIFICATION_REQUIRED with the question. Writes new layers, never the source: <demand>_coverage (contractor_count, single_source, coverage_class red none / amber one / green 2+ / blue saturated, nearest contractor and minutes, capacity_ratio, gap score) and <demand>_gaps; gap_territory=true adds the all-gap ZIPs as one territory. Assigns nothing; dividing work is auto_build. Returns a task; the result has coverage_pct, gap and single-source counts, top_gaps, and per-contractor reach.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| trade | any | |
| coverage | any | |
| ts_handle | any | |
| tier_field | any | |
| trade_field | any | |
| demand_layer | any |
Returns the total hours for each of the routes calculate_route has drawn: drive hours, dwell hours, route_workload_hours (provider drive time plus dwell, no visit-frequency multiplier), stop coordinates, centroid, and bbox. Synchronous. Needs map_session_id or ts_handle, and dwell from dwell_time or the dwell recorded on the route; unresolved dwell returns CLARIFICATION_REQUIRED (needs_dwell). A circuit's stop_count includes the return to the start, so that stop's dwell counts twice. Facts only: no capacity, ranking, or overload flags. These hours are a different measure from territory and cluster workload; territory statistics come from analyze.
| Argument | Type | Description |
|---|---|---|
| route_ids | any | |
| ts_handle | any | |
| dwell_time | any | |
| map_session_id | any |
{
"type": "object",
"title": "analyze_routesArguments",
"properties": {
"route_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Route Ids",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
}
}
}Partitions ingested account points into balanced sales territories with equal workload, metric, or count over a part layer (e.g. ZIPs) as a new alignment (TAL). Needs the user's choices: build_mode (fixed_territory_count + territory_count, fixed_workload_target + target_workload hours, or scoped_split), objective (workload_bias for drive time + dwell; metric + metric_bias for a column such as Revenue; biases sum to 100), and dwell_time (a column or a stated scalar). Each missing choice returns CLARIFICATION_REQUIRED with ask_user; a declared visit-frequency column also needs visit_frequency_field or ignore_visit_frequency. part_scope: bbox_intersect (default; parts near the accounts, can reach national scale) or explicit with part_filter, e.g. {state_abbr: TX}. The filter limits parts; accounts outside it stay on the layer, unassigned (UNASSIGNED_ACCOUNTS). With map_session_id the open map is the input. Returns a task; national builds take minutes and estimated_remaining_ms is capped, not a forecast. The result carries tal_id, ts_handle, and phase_timings_ms; analyze has statistics.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| part_ids | any | |
| objective | any | |
| tal_label* | string | |
| ts_handle | any | |
| build_mode | any | |
| dwell_time | any |
Sequences and drives a set of stops, e.g. a technician from home to the depot, then the day's calls, and back home: returns the order, road distance, drive time, per-leg timings, and geometry from TomTom or Azure Maps, and draws the path with numbered stops on the open map (map_session_id). Creates no territory and changes no assignment. route_type is the user's choice: circuit (returns to start), tour (ends at the required end stop), or open_tour (one way). stop_sets are visited in the order given and no stop moves between sets; order is optimize or as_given; group_by_field adds priority bands. Stops are inline coordinates or point-layer references (e.g. source.filter.territory_id). A new route_id adds a second route; recalculating an existing route_id replaces it, e.g. to drop a stop. dwell_time is stored for analyze_routes. Route drive time is a different measure from territory workload. No provider key returns ROUTING_NOT_CONFIGURED; past the monthly quota, PROVIDER_QUOTA_EXCEEDED. Returns a task.
| Argument | Type | Description |
|---|---|---|
| end | any | |
| start* | object | |
| route_id | any | |
| depart_at | any | |
| stop_sets* | array | |
| ts_handle | any | |
| dwell_time | any |
Groups the points of one ingested layer into balanced clusters directly, with no ZIP or part layer and no territory alignment. Writes group_field (default group_id) on every point and colors the layer by it, replacing any prior color classification (size and shape channels stay). Needs build_mode (fixed_territory_count or fixed_workload_target), objective, and dwell_time, as in auto_build; a missing one returns CLARIFICATION_REQUIRED with the question. point_filter (e.g. {STATE: FL}) clusters a subset of the layer; unmatched points stay, ungrouped. Max 10,000 points after the filter. seed_point_layer, a second point layer such as technician homes, anchors one group per seed (the seed count matches the group count, else seed_count_mismatch); seed_attraction 0-100 (default 70) is the pull of each seed on its group. Returns a task; the result lists groups with point_count, workload_hours, and point_ids.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| objective | any | |
| ts_handle | any | |
| build_mode | any | |
| dwell_time | any | |
| group_field | string | |
| point_layer* | string | |
| point_filter |
Updates map settings on the Territory Solution and refreshes the live map: project_name (map heading), theme (dark | light basemap and UI style), loaded_part_layers ([] hides ZIP/part outlines; builds never load them), active_part_layer, active_tal_id, center and zoom (default view; the live map jumps there), and point symbology. point_layer_classifications entries are {point_layer, field, method: quantile | equal_interval | categorical | manual, class_count 2-12, channel: color | size | shape, optional colors/sizes/shapes/style}; the server computes the breaks and returns per-class counts. One classification per channel per layer; clear:true removes one. Shapes include circle, square, triangle, diamond, star, cross, house, pin, flag, hexagon, pentagon, shield, arrow_up, building, person. classification without point_layer is a project-level setting that does not color points. Input: map_session_id (the live map), ts_handle, or ts.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| zoom | any | |
| theme | any | |
| center | any | |
| ts_handle | any | |
| presentation | any | |
| project_name | any | |
| active_tal_id | any |
Creates one leaf territory from a list of part_ids (e.g. a committed map selection), in a new alignment or an existing one (tal_id). With map_session_id the live map's Territory Solution is updated and repainted; otherwise ts_handle (a new ts_handle is returned). map_session_id wins when both are passed. territory_name is a display label; the result's created_territory.territory_id is the stable id for later edits, plus leaf_territories and selection_summary (duplicate_part_ids). Dwell is optional here and is not inherited from an earlier auto_build; dwell_time is recorded for later analyze. Without it, analyze reports every statistic except workload and returns workload_omitted.ask_user. Returns a task.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| tal_id | any | |
| part_ids* | array | |
| ts_handle | any | |
| dwell_time | any | |
| part_layer* | string | |
| repair_policy | any | |
| map_session_id | any | |
| territory_name |
Point-layer delete: removes one point layer and its account points from the Territory Solution and the open map, in one synchronous call. Needs point_layer (the layer id or its exact unique label), plus map_session_id or ts_handle. Territories, part overlays, and other point layers stay. A layer that is already gone returns ok with already_absent=true; an ambiguous label returns AMBIGUOUS_POINT_LAYER with matching_point_layers. ingest_accounts does not replace an existing layer; delete it here first. A visit layer derived from the deleted layer is reported and kept.
| Argument | Type | Description |
|---|---|---|
| ts_handle | any | |
| point_layer* | string | |
| map_session_id | any |
{
"type": "object",
"title": "delete_point_layerArguments",
"required": [
"point_layer"
],
"properties": {
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"point_layer": {
"type": "string",
"title": "Point Layer"
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
}
}
}Route delete: removes one whole route from the Territory Solution and the open map, in one synchronous call. Needs route_id or the route's exact unique label, plus map_session_id or ts_handle. A route that is already gone returns ok with already_absent=true; an ambiguous label returns AMBIGUOUS_ROUTE with matching_route_ids. A single stop is removed by recalculating the same route_id with calculate_route.
| Argument | Type | Description |
|---|---|---|
| route_id* | string | |
| ts_handle | any | |
| map_session_id | any |
{
"type": "object",
"title": "delete_routeArguments",
"required": [
"route_id"
],
"properties": {
"route_id": {
"type": "string",
"title": "Route Id"
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
}
}
}Deletes one whole territory alignment (TAL: 'the territory layer', 'all territories') from the Territory Solution and the open map, in one synchronous call. Needs tal_id or the TAL's exact unique label, plus map_session_id or ts_handle. Points, part-layer overlays, and routes stay; the map switches to a remaining alignment or to points only. A TAL that is already gone returns ok with already_absent=true; an ambiguous label returns AMBIGUOUS_TAL. One territory is removed with delete_territory instead.
| Argument | Type | Description |
|---|---|---|
| tal_id* | string | |
| ts_handle | any | |
| map_session_id | any |
{
"type": "object",
"title": "delete_talArguments",
"required": [
"tal_id"
],
"properties": {
"tal_id": {
"type": "string",
"title": "Tal Id"
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
}
}
}Deletes one leaf territory from an alignment; its parts become unassigned. Needs tal_id, territory_id (the leaf id or its exact unique display name), and the Territory Solution from map_session_id, ts_handle, or ts. A territory that is already gone returns ok with already_absent=true and no task; otherwise returns a task and the open map repaints. Related: territory_merge hands a leaving rep's territory to its neighbors; delete_tal removes a whole alignment in one call.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| tal_id* | string | |
| ts_handle | any | |
| part_layer | any | |
| territory_id* | string | |
| repair_policy | string | Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found. |
| map_session_id | any | |
Builds territories from known part-to-territory assignments (a ZIP-to-territory sheet or file, including a three-level region/district/territory hierarchy via territory_path) and adds them to the Territory Solution as a new alignment (TAL). Assignments come inline or as an assignments_handle (aup_...) from request_assignment_upload. Sheets with Postal Code plus Territory/Region/Division columns are mapped automatically. Duplicate part_ids follow duplicate_part_policy (default keep_first). Returns a task; the result carries tal_id and ts_handle and paints the open map. Location points load with ingest_accounts; balanced partitions come from auto_build; grouping by a column is account_build.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| tal_id | any | |
| tal_label* | string | |
| ts_handle | any | |
| part_layer* | string | |
| assignments | any | |
| repair_policy | string | Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found. |
Maps a free-text territory request to a workflow. Read-only keyword routing; no compute. Returns intent_category, the recommended tool order, the main tool (tier1_tool, null when the request is ambiguous) and alternatives, required_inputs, clarifying_questions for missing inputs, and the workflow guide inline as guidance {uri, title, excerpt}. Covers building territories (auto_build, account_build, direct_build, cluster_points, seed_build), editing (realign, split, merge, rebalance), analyze, geocoding and ingest, showing a ZIP or part layer, routes, drive-time areas (isochrone_build), recurring visit schedules (schedule_visits), contractor coverage gaps (analyze_network_coverage), listing points in a territory (points_in_territory), and moving a Territory Solution to or from EasyTerritory Designer.
| Argument | Type | Description |
|---|---|---|
| context | any | |
| user_request* | string |
{
"type": "object",
"title": "discover_intentArguments",
"required": [
"user_request"
],
"properties": {
"context": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Context",
"default": null
},
"user_request": {
"type": "string",
"title": "User Request"
}
}
}Reports whether the person has the map open (viewer_status.connected) for a map_session_id from get_map_visualization, waiting up to wait_seconds (max 30 s per call; the result reports requested_wait_seconds and max_wait_seconds). Works the same for the in-chat map and the map_url tab. Returns VIEWER_NOT_CONNECTED while the map is still closed; the same call can be repeated while the person opens it. Build, analyze, and selection results paint live once the viewer is connected.
| Argument | Type | Description |
|---|---|---|
| wait_seconds | number | |
| map_session_id* | string | |
| poll_interval_ms | integer |
{
"type": "object",
"title": "ensure_map_viewerArguments",
"required": [
"map_session_id"
],
"properties": {
"wait_seconds": {
"type": "number",
"title": "Wait Seconds",
"default": 0
},
"map_session_id": {
"type": "string",
"title": "Map Session Id"
},
"poll_interval_ms": {
"type": "integer",
"title": "Poll Interval Ms",
"default": 500
}
}
}Traverses the EMEP knowledge graph from a topic file (e.g. 'workflows/realign-by-selection.md') to related guidance, up to `depth` hops. Returns no edges unless the pack ships a _graph.yaml.
| Argument | Type | Description |
|---|---|---|
| depth | integer | |
| file_path* | string | |
| edge_kinds | any |
{
"type": "object",
"title": "ep_graph_traverseArguments",
"required": [
"file_path"
],
"properties": {
"depth": {
"type": "integer",
"title": "Depth",
"default": 1
},
"file_path": {
"type": "string",
"title": "File Path"
},
"edge_kinds": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Edge Kinds",
"default": null
}
}
}Lists EMEP topics grouped by type (concept, workflow, interface, troubleshooting, decision). Optional `type` filter.
| Argument | Type | Description |
|---|---|---|
| type | any |
{
"type": "object",
"title": "ep_list_topicsArguments",
"properties": {
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type",
"default": null
}
}
}Semantic search over the EZT MCP Expert Pack (EMEP): workflow guidance, concepts, interfaces, and common mistakes. Returns ranked markdown chunks with source files; atoms pulled in via `requires` are flagged requires_expanded. Degrades to the ezt://guidance/... resources if retrieval is unavailable. Examples: 'build balanced territories from accounts', 'viewer not connected before compute', 'auto_build vs account_build'.
| Argument | Type | Description |
|---|---|---|
| tags | any | |
| type | any | |
| query* | string | |
| max_results | integer |
{
"type": "object",
"title": "ep_searchArguments",
"required": [
"query"
],
"properties": {
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Tags",
"default": null
},
"type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Type",
"default": null
},
"query": {
"type": "string",
"title": "Query"
},
"max_results": {
"type": "integer",
"title": "Max Results",
"default": 6
}
}
}Exports the territory solution as one GeoJSON file to share, archive, or open in EasyTerritory Designer: territory polygons with part_ids, points, and routes with numbered stops, each carrying its displayed style. tal_ids, point_layers, and route_layers narrow it; include_points / include_routes omit a family. Input: map_session_id, ts_handle, or a completed build job_id. Returns a task whose result is geojson_artifact plus a download_url (GET with the API key; gzip unless zip=false), not an inline body. import_geojson reopens the file.
| Argument | Type | Description |
|---|---|---|
| zip | boolean | |
| job_id | any | |
| tal_ids | any | |
| ts_handle | any | |
| point_layers | any | |
| route_layers | any | |
| include_points | boolean | |
| include_routes | boolean | |
| map_session_id | any |
Extracts one regional branch of a hierarchical alignment (by branch_rollup_territory_id or branch_territory_path) into its own Territory Solution, so a delegate can edit just that region. Returns the extract plus branch_metadata, which reintegrate_branch needs later. exclude_locked (default true) leaves locked territories out.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| tal_id* | string | |
| ts_handle | any | |
| delegate_ref | any | |
| exclude_locked | boolean | |
| map_session_id | any | |
| expected_revision | any | |
| branch_territory_path | any | |
| expected_content_hash | any | |
| branch_rollup_territory_id | any |
Plain-language orchestrator: takes request (the goal) and runs the matching workflow in one call, optionally with csv_file (a host file parameter), accounts_handle, assignments_handle, map_session_id, or ts_handle. An uploaded CSV is parsed, staged, and ingested onto the open map. target_hours / workload_target map to a fixed-workload auto_build. Missing build inputs (part layer, alignment name, sizing, balance, dwell) return CLARIFICATION_REQUIRED with the questions. The granular tools do the same steps individually.
| Argument | Type | Description |
|---|---|---|
| args | any | |
| request* | string | |
| csv_file | any | |
| ts_handle | any | |
| state_facts | any | |
| map_session_id | any | |
| accounts_handle | any | |
| assignments_handle | any |
{
"type": "object",
"title": "eztArguments",
"required": [
"request"
],
"properties": {
"args": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Args",
"default": null
},
"request": {
"type": "string",
"title": "Request"
},
"csv_file": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Csv File",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"state_facts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "State Facts",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"accounts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Accounts Handle",
"default": null
},
"assignments_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Assignments Handle",
"default": null
}
}
}Geocodes a list of customer addresses to coordinates with match confidence, without loading them as a point layer. Accepts address/address_line1/street, city, state, and postal columns (common CRM headers are mapped). accept_suboptimal_geocodes=true accepts ZIP-centroid matches. Cached addresses are free; billable lookups count against a monthly per-key quota, and past it the result is PROVIDER_QUOTA_EXCEEDED with limit, used, remaining, and period_resets_at. Returns geocoded_rows, which ingest_accounts can load. ingest_accounts also geocodes on its own.
| Argument | Type | Description |
|---|---|---|
| rows* | array | |
| use_cache | boolean | |
| region_hint | any | |
| country_hint | any | |
| map_session_id | any | |
| min_confidence | number | |
| force_regeocode | boolean | |
| accept_suboptimal_geocodes | boolean |
{
"type": "object",
"title": "geocode_addressArguments",
"required": [
"rows"
],
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Rows"
},
"use_cache": {
"type": "boolean",
"title": "Use Cache",
"default": true
},
"region_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Region Hint",
"default": null
},
"country_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Country Hint",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"min_confidence": {
"type": "number",
"title": "Min Confidence",
"default": 0
},
"force_regeocode": {
"type": "boolean",
"title": "Force Regeocode",
"default": false
},
"accept_suboptimal_geocodes": {
"type": "boolean",
"title": "Accept Suboptimal Geocodes",
"default": false
}
}
}Returns the EZT MCP operating guide: the cross-tool workflow order and shared rules (result.text, same text as the server instructions), result.server_version, and result.seat for the caller's key (plan standard|trial, key_expires_at, and quota_remaining for geocoding, routing, and isochrone requests). Read-only. Useful at the start of a session or for a host that does not show server instructions.
No arguments.
{
"type": "object",
"title": "get_guidanceArguments",
"properties": {}
}Returns the most recent committed selection on an open map session (map_session_id): part_layer, part_ids, and selection_task_id when the selection came from request_part_selection. Covers selections the person started from the map legend. realign takes these part_ids as moves with a leaf territory_id.
| Argument | Type | Description |
|---|---|---|
| map_session_id* | string |
{
"type": "object",
"title": "get_map_selectionArguments",
"required": [
"map_session_id"
],
"properties": {
"map_session_id": {
"type": "string",
"title": "Map Session Id"
}
}
}Opens the interactive territory map (Map Component) and returns map_url and map_session_id. Opens a blank map, or shows the latest state of an existing Territory Solution (e.g. yesterday's work) from ts, ts_handle, or a completed job_id. Idempotent per user_id: a second call returns the same map. new_project=true replaces the open workspace with an empty project. theme: dark | light (basemap and UI style; default dark). presentation.view_name: empty | points_only | review | selection. Apps-capable hosts render the map in chat (ui://easyterritory/map-viewer); other clients open map_url in a browser. Later map tools take map_session_id. ensure_map_viewer reports when the person has the map open.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| mode | string | |
| theme | any | |
| job_id | any | |
| user_id | any | |
| ts_handle | any | |
| new_project | boolean | |
| presentation | any | |
| active_tal_id | any |
Returns the state of a map selection task (selection_task_id from request_part_selection, or active_selection_task_id in ezt://map-sessions/{id}/state): status awaiting_user_selection, committed, expired, or cancelled, and once committed the selected part_ids (with assigned and unassigned part_ids when a TAL is active). While awaiting, the response carries recommended_poll_delay_ms. Committed part_ids feed realign, create_territory_from_parts, or analyze.
| Argument | Type | Description |
|---|---|---|
| selection_task_id* | string |
{
"type": "object",
"title": "get_part_selectionArguments",
"required": [
"selection_task_id"
],
"properties": {
"selection_task_id": {
"type": "string",
"title": "Selection Task Id"
}
}
}Opens a GeoJSON FeatureCollection (plain points, or a territory file this server produced, plain or gzip/zip) as a Territory Solution and returns ts_handle and a summary. Input: geojson (object), geojson_text, or geojson_gzip (base64). Territory polygons without part_ids return TERRITORY_POLYGONS_WITHOUT_PART_IDS unless part_layer plus overlay_policy=centroid_within assigns parts by centroid. point_layer names imported points; tal_label names the alignment. EasyTerritory Designer projects (REST/Agent/Projects/{projectId}/TerritorySolution) import as geojson_gzip.
| Argument | Type | Description |
|---|---|---|
| geojson | any | |
| tal_label | any | |
| part_layer | any | |
| point_layer | any | |
| geojson_gzip | any | |
| geojson_text | any | |
| overlay_policy | any |
{
"type": "object",
"title": "import_geojsonArguments",
"properties": {
"geojson": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Geojson",
"default": null
},
"tal_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Label",
"default": null
},
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"point_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Point Layer",
"default": null
},
"geojson_gzip": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Geojson Gzip",
"default": null
},
"geojson_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Geojson Text",
"default": null
},
"overlay_policy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Overlay Policy",
"default": null
}
}
}Account ingest: loads account or location rows (CRM records, a CSV, a spreadsheet) as point data on a named point layer of the Territory Solution, to add them to the map, geocoding rows without coordinates. Rows come inline (rows) or as accounts_handle from request_account_upload for large files; a client file path is unreadable. latitude/lat and longitude/lon/lng pass through; other names need latitude_field/longitude_field, and unused coordinate-like columns return CLARIFICATION_REQUIRED (needs_coordinate_fields). id_field is a unique key (default row_id); duplicates return needs_unique_row_id. Only declared columns are kept: metric_fields, workload_fields, dwell_time_field, visit_frequency_field, grouping_fields, display_fields, search_fields; to load a contractor list, layer_role=contractors adds trade_field, tier_field, capacity_field, service_zip_field (analyze_network_coverage). Later use of an undeclared column returns UNDECLARED_FIELD. label defaults to the point_layer id in title case. Returns a task; the result reports failed_rows, map_refresh, and geocode quota shortfall.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| rows | any | |
| label | any | |
| id_field | string | |
| ts_handle | any | |
| use_cache | boolean | |
| layer_role | any |
Draws the area reachable by driving from one or more origins within a time or distance budget (drive-time area, service area, catchment) and adds each area as a territory in a drive-time alignment. origins: inline {latitude, longitude} or a point-layer reference. bands: [{time_budget_seconds} or {distance_budget_meters}], one unit per call (MIXED_BUDGET_TYPES otherwise); one band gives one area per origin, several give nested areas. Limits: 25 origins, 5 bands, 6 hours, 500 km; travel_mode car or truck; depart_at supported. Areas are the provider polygons and may overlap; analyze counts accounts in every area containing them. realign/split/merge/rebalance return ISOCHRONE_TAL_NOT_EDITABLE. A band budget is not territory workload or route time. No provider key returns ISOCHRONE_NOT_CONFIGURED; the full call count is checked against the monthly quota first (PROVIDER_QUOTA_EXCEEDED). Returns a task.
| Argument | Type | Description |
|---|---|---|
| avoid | any | |
| bands* | array | |
| tal_id | any | |
| origins* | array | |
| traffic | boolean | |
| depart_at | any | |
| tal_label | any | |
| ts_handle |
Returns the available canonical part layers for territory construction (for example us_zips, us_counties, ca_fsa, and active country postal or administrative polygon layers), with the same metadata as ezt://part-layers: part_layer, label, description, country_codes, admin_levels, part_count, id_format, example_part_ids, capabilities, data_version, and updated_at. Optional part_layer returns detailed metadata for one layer (bbox, aliases, supported_admin1, source_name, source_vintage, id_format_notes) or UNKNOWN_PART_LAYER. Optional country_code filters by 2-letter ISO country code. Read-only.
| Argument | Type | Description |
|---|---|---|
| part_layer | any | |
| country_code | any |
{
"type": "object",
"title": "list_part_layersArguments",
"properties": {
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"country_code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Country Code",
"default": null
}
}
}Shows a completed analyze result in the open map's analysis dock (single or compare). Needs map_session_id and the analyze task_id/job_id or the full analyze result (with tal_analyses and ts_identity; a partial object returns INVALID_REQUEST). presentation_mode: single, compare, executive, or diagnostic. dismiss=true hides the dock and keeps the statistics on the session. Changes nothing in the Territory Solution. analyze with analysis_panel=single fills the dock in the same call.
| Argument | Type | Description |
|---|---|---|
| roles | any | |
| job_id | any | |
| labels | any | |
| dismiss | boolean | |
| task_id | any | |
| analyses | any | |
| map_session_id* | string | |
| presentation_mode | any |
{
"type": "object",
"title": "load_analysis_panelArguments",
"required": [
"map_session_id"
],
"properties": {
"roles": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Roles",
"default": null
},
"job_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Job Id",
"default": null
},
"labels": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Labels",
"default": null
},
"dismiss": {
"type": "boolean",
"title": "Dismiss",
"default": false
},
"task_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Task Id",
"default": null
},
"analyses": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Analyses",
"default": null
},
"map_session_id": {
"type": "string",
"title": "Map Session Id"
},
"presentation_mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Presentation Mode",
"default": null
}
}
}Lists which account points from one point layer fall inside a territory polygon or a drive-time (isochrone) area: per territory, the point ids, full properties, point_count, and metric sums (metrics, else the layer's declared metric fields). Synchronous and read-only. Needs map_session_id or ts_handle. territory_id names one leaf (a stable territory_id or its exact unique display name); territory_ids names several; both omitted means every leaf in the TAL (tal_id, else the active or sole TAL). point_layer omitted uses the sole layer with points; point_filter (e.g. {tier: 'Gold'}) filters points by attribute before counting and listing. A point counts in every containing polygon, and overlaps lists points in more than one. max_points caps the points listed per territory (default 1000, max 10000); counts and sums always cover every inside point. Unknown ids return UNKNOWN_TAL_ID / UNKNOWN_TERRITORY_ID / UNKNOWN_POINT_LAYER with the available values. Territory statistics without the point list come from analyze.
| Argument | Type | Description |
|---|---|---|
| tal_id | any | |
| metrics | any | |
| ts_handle | any | |
| max_points | integer | |
| point_layer | any | |
| point_filter | any | |
Returns attributes (no geometry) for parts of a part layer listed by list_part_layers or ezt://part-layers. Takes exactly one of filter (e.g. {state_abbr: TX}) or part_ids; neither or both returns INVALID_REQUEST. Paged with page_token.
| Argument | Type | Description |
|---|---|---|
| filter | any | |
| part_ids | any | |
| page_token | any | |
| part_layer* | string | |
| max_results | integer |
{
"type": "object",
"title": "query_partsArguments",
"required": [
"part_layer"
],
"properties": {
"filter": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Filter",
"default": null
},
"part_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Part Ids",
"default": null
},
"page_token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Page Token",
"default": null
},
"part_layer": {
"type": "string",
"title": "Part Layer"
},
"max_results": {
"type": "integer",
"title": "Max Results",
"default": 100
}
}
}Moves ZIPs or other parts (typed ids or ones selected on the map) from one territory into another within one alignment (tal_id): a ZIP move. moves=[{part_id, to_territory_id}], or realign_operation with part_ids. The Territory Solution comes from map_session_id (the open map), ts_handle, or ts; expected_revision adds optimistic concurrency (STALE_TS_REVISION when the map changed). to_territory_id is a leaf territory_id or that leaf's exact, unique display name; an unknown or ambiguous value returns UNKNOWN_TERRITORY_ID or AMBIGUOUS_TERRITORY with available_leaf_territories. A committed map selection is read with get_map_selection; request_part_selection lets the person pick parts on the map. remove_empty_territories drops leaves left with no parts. Returns a task; the open map repaints. analyze refreshes statistics when the map has account points.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| moves | any | |
| tal_id* | string | |
| part_ids | any | |
| ts_handle | any | |
| part_layer | any | |
| repair_policy | string | Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found. |
Merges an edited branch (proposal Territory Solution from extract_tal_branch) back into the master. Needs branch_metadata and expected_master_revision; returns STALE_TS_REVISION when the master changed since the extract, in which case a fresh extract is needed. Merges apply one at a time.
| Argument | Type | Description |
|---|---|---|
| master_ts | any | |
| proposal_ts | any | |
| map_session_id | any | |
| branch_metadata* | object | |
| master_ts_handle | any | |
| proposal_ts_handle | any | |
| expected_master_revision* | integer | |
| expected_master_content_hash | any |
{
"type": "object",
"title": "reintegrate_branchArguments",
"required": [
"expected_master_revision",
"branch_metadata"
],
"properties": {
"master_ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Master Ts",
"default": null
},
"proposal_ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Proposal Ts",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"branch_metadata": {
"type": "object",
"title": "Branch Metadata",
"additionalProperties": true
},
"master_ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Master Ts Handle",
"default": null
},
"proposal_ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Proposal Ts Handle",
"default": null
},
"expected_master_revision": {
"type": "integer",
"title": "Expected Master Revision"
},
"expected_master_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expected Master Content Hash",
"default": null
}
}
}Stages account rows for ingest_accounts and returns upload_handle, csv_headers, and suggested_ingest args with a geocode_plan. Four ways in: POST the CSV file to the returned upload_url (no API key; expires in 15 minutes; fastest for large files), csv_file (a host file parameter), csv_text (raw CSV, up to 16 MB, newlines preserved), or rows chunks appended with upload_handle. A local path in csv_file returns UNREADABLE_FILE_REFERENCE; an expired URL returns UPLOAD_TOKEN_EXPIRED and a call with upload_handle issues a new one. The handle is single-use (claimed by ingest_accounts) and expires after 1 hour by default.
| Argument | Type | Description |
|---|---|---|
| rows | any | |
| csv_file | any | |
| csv_text | any | |
| ttl_seconds | any | |
| upload_handle | any |
{
"type": "object",
"title": "request_account_uploadArguments",
"properties": {
"rows": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Rows",
"default": null
},
"csv_file": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Csv File",
"default": null
},
"csv_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Csv Text",
"default": null
},
"ttl_seconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Ttl Seconds",
"default": null
},
"upload_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Upload Handle",
"default": null
}
}
}Stages part-to-territory assignment rows (e.g. a ZIP-to-territory spreadsheet with Postal Code plus Territory/Region/Division) for direct_build and returns upload_handle. Same four ways in as request_account_upload: POST the file to upload_url (no API key; 15 minutes), csv_file, csv_text (newlines preserved), or assignment chunks appended with upload_handle. Legacy columns map to part_id and territory_path automatically. A file of locations rather than assignments is redirected to request_account_upload. The handle is single-use and expires after 1 hour by default.
| Argument | Type | Description |
|---|---|---|
| csv_file | any | |
| csv_text | any | |
| assignments | any | |
| ttl_seconds | any | |
| upload_handle | any |
{
"type": "object",
"title": "request_assignment_uploadArguments",
"properties": {
"csv_file": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Csv File",
"default": null
},
"csv_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Csv Text",
"default": null
},
"assignments": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Assignments",
"default": null
},
"ttl_seconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Ttl Seconds",
"default": null
},
"upload_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Upload Handle",
"default": null
}
}
}Lets the person adjust boundaries by picking parts (e.g. ZIPs) on the map: puts the open map into select mode on a part_layer, for purpose realign, a new territory, or a plain list. Returns selection_task_id; get_part_selection reports status (awaiting_user_selection, then committed, expired, or cancelled) and the committed part_ids, and its response carries recommended_poll_delay_ms. The commit happens on the map, not in chat. destination_territory_id and realign_operation pre-set a realign. Works on the in-chat map and the map_url tab. A selection the person started from the map legend is read with get_map_selection.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| prompt | any | |
| purpose | string | |
| user_id | any | |
| part_layer* | string | |
| active_tal_id | any | |
| new_territory | any | |
| expiry_seconds | any | |
| realign_operation | any |
Schedules recurring visits: expands each account's cadence (e.g. every 7 days) across a horizon and packs visits into daily work clusters (buckets) under a technician-day cap. Decides which day each visit happens (auto_build and cluster_points divide accounts among people); creates no alignment. Needs point_layer (ingested with cadence declared, else UNDECLARED_FIELD), visit_frequency_field, dwell_time, and daily_capacity (e.g. {mode: not_to_exceed, hours: 8}); missing dwell or capacity returns CLARIFICATION_REQUIRED. Omitted max_buckets_per_day means one technician per day; when one does not fit, CLARIFICATION_REQUIRED carries capacity_plan — ask how many. estimate_only=true returns capacity_plan. contractors (point_layer or list with start, pre_service_stops, route_type, end) anchors buckets. frequency_unit: interval_days or visits_per_horizon. bucket_workload_hours (drive plus dwell) is a different measure from territory workload and route_workload_hours. Returns a task. calculate_route over one bucket_id drives that day. Date limits use visit_constraints with horizon_start_date.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| tal_id | any | |
| horizon | any | |
| objective | any | |
| point_ids | any | |
| ts_handle | any | |
| dwell_time | any |
Grows one territory outward from a seed {longitude, latitude} over a part layer until it holds a target: {type: location_count, value: N} or {type: metric_sum, field: <declared metric>, value: X}, counted from an ingested point layer. Adds the territory as a leaf of tal_id, or as a new alignment. Fit is closest: target_status is reached, closest_under, closest_over, frontier_exhausted, or max_parts_reached, with SEED_TARGET_UNDERSHOT/OVERSHOT warnings and the difference. Parts already in that alignment are never taken; the territory grows around them (blocked_part_count, seed_offset_km), and a seed inside an assigned part returns SEED_PART_ASSIGNED. part_scope=explicit with part_filter confines growth to an area. One seed per call. An undeclared metric field returns UNDECLARED_FIELD. Returns a task with created_territory and ts_handle; the open map repaints with map_session_id.
| Argument | Type | Description |
|---|---|---|
| seed* | object | |
| tal_id | any | |
| target* | object | |
| user_id | any | |
| part_ids | any | |
| max_parts | any | |
| tal_label | any | |
| ts_handle | any |
Changes the open map's session state: mode, active alignment (active_tal_id), pending job reference, or camera (center [longitude, latitude] and zoom 0-24). Session only: the Territory Solution is not changed (configure_map sets a durable default view). The result's render_ack is read at publish time, so sent_unconfirmed one version behind is normal; render_ack_hint says whether to reread ezt://map-sessions/{map_session_id}/state or resend. camera reports the view in effect and its source (requested, session, map_config, or viewer_current). A set camera stays until changed; switching alignment does not refit.
| Argument | Type | Description |
|---|---|---|
| mode | any | |
| zoom | any | |
| center | any | |
| active_tal_id | any | |
| map_session_id* | string | |
| pending_job_reference | any |
{
"type": "object",
"title": "set_map_stateArguments",
"required": [
"map_session_id"
],
"properties": {
"mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Mode",
"default": null
},
"zoom": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Zoom",
"default": null
},
"center": {
"anyOf": [
{
"type": "array",
"items": {
"type": "number"
}
},
{
"type": "null"
}
],
"title": "Center",
"default": null
},
"active_tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Active Tal Id",
"default": null
},
"map_session_id": {
"type": "string",
"title": "Map Session Id"
},
"pending_job_reference": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Pending Job Reference",
"default": null
}
}
}Shows or hides something on the open map from a plain request ('add US zip codes', 'hide the zips', 'show my accounts') or overlay_kind (part_layer, point_layer, tal, route) with overlay_id. Part layers load at a zoom where they are visible (visibility.camera_action); hiding a part layer leaves territories unchanged. Point layers must already be ingested; a layer in the Territory Solution but missing from the map is re-pushed (status=refreshed, with render_ack). Point layers have no hidden state: hide wording returns HIDE_NOT_SUPPORTED with do_this_next delete_point_layer, which removes the layer; the legend checkbox hides one in a single tab. route re-shows or hides routes calculate_route drew (route_id targets one); with no route yet it returns blocked_by=needs_route. When the user named a camera, do_this_next carries the configure_map call that sets it. Input: map_session_id (preferred), ts_handle, or ts.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| route_id | any | |
| ts_handle | any | |
| overlay_id | any | |
| overlay_kind | any | |
| user_request | any | |
| map_session_id | any | |
| merge_strategy | any |
Sends product feedback to EasyTerritory: a blocked or partial workflow, a workaround, a confusing response, or a missing capability. Returns an acknowledgement with feedback_id. Secrets, emails, Territory Solution JSON, GeoJSON, and account/CSV tables are stripped before storage; the text is meant for a description of what happened, not data.
| Argument | Type | Description |
|---|---|---|
| category | any | |
| severity | any | |
| user_goal* | string | |
| confidence | any | |
| session_id | any | |
| client_name | any | |
| related_tool | any | |
| what_happened* | string | |
| client_version | any | |
| correlation_id | any | |
Tool equivalent of the native MCP tasks/cancel, listed for clients without the Tasks capability. Requests cooperative cancellation of a task_id and returns the Task status document. Whether the Territory Solution is unchanged or partially updated follows the originating tool.
| Argument | Type | Description |
|---|---|---|
| task_id* | string |
{
"type": "object",
"title": "tasks_cancelArguments",
"required": [
"task_id"
],
"properties": {
"task_id": {
"type": "string",
"title": "Task Id"
}
}
}Tool equivalent of the native MCP tasks/get, listed for clients without the Tasks capability. Returns the Task status document for a task_id (holding up to wait_ms while the task is working). next_action is sleep_and_poll (wait sleep_ms, then one tasks_get), consume_result (one tasks_result call), or stop_error. status=cancelled means the user stopped it. While queued, _meta carries queue_position, queue_depth, queue_lane, and estimated_start_ms, which is advisory and not a wait time. Polling never starts work.
| Argument | Type | Description |
|---|---|---|
| task_id* | string | |
| wait_ms | any |
{
"type": "object",
"title": "tasks_getArguments",
"required": [
"task_id"
],
"properties": {
"task_id": {
"type": "string",
"title": "Task Id"
},
"wait_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Wait Ms",
"default": null
}
}
}Tool equivalent of the native MCP tasks/result, listed for clients without the Tasks capability. Returns the originating tool's terminal result once the task status is completed (consume_result): ts_handle, counts, timings, and map binding, never an inline Territory Solution when a handle exists. A build's ts_handle or task_id (as job_id) is the input analyze takes.
| Argument | Type | Description |
|---|---|---|
| task_id* | string |
{
"type": "object",
"title": "tasks_resultArguments",
"required": [
"task_id"
],
"properties": {
"task_id": {
"type": "string",
"title": "Task Id"
}
}
}Merges a pair of adjacent territories and rebalances the rest of the alignment with minimal disruption (N to N-1 territories), e.g. when a rep leaves and the neighbors absorb the territory. territory_id_b is the territory that goes away; territory_id_a is an adjacent neighbor that keeps its id. The same job rebalances every remaining territory. One call removes one territory; non-adjacent ids return NON_ADJACENT_TERRITORIES. Needs source_tal_id and the Territory Solution from map_session_id, ts_handle, or ts; workload balance needs dwell_time (CLARIFICATION_REQUIRED otherwise). Writes a new derived alignment. Returns a task.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| objective | any | |
| ts_handle | any | |
| dwell_time | any | |
| part_layer | any | |
| point_layer | any | |
| new_tal_label | any | |
| repair_policy | string | Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found. |
Rebalances an existing alignment after the account data changed, keeping it as close to the current alignment as possible. Needs source_tal_id and the Territory Solution from map_session_id, ts_handle, or ts. point_layer defaults to the alignment's build layer or the only point layer; otherwise CLARIFICATION_REQUIRED (ambiguous_point_layer, with details.point_layers). Workload balance needs dwell_time; zero_workload means no account maps to a part. The current alignment is the baseline: when nothing improves the objective the result is NO_IMPROVING_REBALANCE_FOUND and nothing changes. Writes a new derived alignment. Returns a task with retention_pct and solver_diagnostics.
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| objective | any | |
| ts_handle | any | |
| dwell_time | any | |
| part_layer | any | |
| point_layer | any | |
| new_tal_label | any | |
| repair_policy | string | Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found. |
Territory split: divides one territory (e.g. an oversized one) into two while changing the rest of the alignment as little as possible (N to N+1 territories). Needs source_tal_id and target_territory_id, plus the Territory Solution from map_session_id (the open map), ts_handle, or ts. Workload balance needs dwell_time; a missing id or dwell returns CLARIFICATION_REQUIRED with the question. Writes a new derived alignment; the source stays. Returns a task; the result carries disruption_summary (retention_pct).
| Argument | Type | Description |
|---|---|---|
| ts | any | |
| objective | any | |
| ts_handle | any | |
| dwell_time | any | |
| part_layer | any | |
| point_layer | any | |
| new_tal_label | any | |
| repair_policy | string | Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found. |
Returns the next tool call for a multi-step workflow, given where the workflow stands. Read-only state machine; executes nothing. intent_category: build_from_accounts | account_grouping | known_assignments | realign_existing | restructure | load_part_layer | route_stops | reachable_area | periodic_scheduling | coverage_gap_analysis | points_in_territory. state: viewer_connected, point_layer, part_layer, tal_present, analysis_fresh, plus selection/realign or restructure flags. inputs: the values known so far (part_layer, territory_count, tal_id, operation, route_type, origins, visit_frequency_field, ...); missing_inputs names the keys still needed. Returns next_tool with drafted next_args, missing_inputs (reported, never invented), blocked_by, remaining_steps, and the workflow guide inline as guidance. Order rules applied: map before compute, viewer connected before compute, ingest before build, analyze after an edit when a point layer exists. Calling it after each step with the updated state walks the whole workflow.
| Argument | Type | Description |
|---|---|---|
| state | any | |
| inputs | any | |
| intent_category* | string |
{
"type": "object",
"title": "workflow_advisorArguments",
"required": [
"intent_category"
],
"properties": {
"state": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "State",
"default": null
},
"inputs": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Inputs",
"default": null
},
"intent_category": {
"type": "string",
"title": "Intent Category"
}
}
}| part_layer | any |
| compare_tals | boolean |
| analysis_panel | any |
| map_session_id | any |
| hypothetical_moves | any |
| visit_frequency_field | any |
{
"type": "object",
"title": "analyzeArguments",
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"scope": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Scope",
"default": null
},
"job_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Job Id",
"default": null
},
"metrics": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Metrics",
"default": null
},
"tal_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Tal Ids",
"default": null
},
"max_depth": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Depth",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"compare_tals": {
"type": "boolean",
"title": "Compare Tals",
"default": false
},
"analysis_panel": {
"anyOf": [
{
"enum": [
"none",
"single",
"comparison_slot"
],
"type": "string",
"description": "single fills the open map's analysis dock with this result (needs map_session_id). The dock shows one alignment at a time: with several tal_ids each TAL gets its own dock entry and the dock follows the map's active TAL. comparison_slot does the same and also returns cross_tal_comparison. none or omitted pushes nothing."
},
{
"type": "null"
}
],
"title": "Analysis Panel",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"hypothetical_moves": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Hypothetical Moves",
"default": null
},
"visit_frequency_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Visit Frequency Field",
"default": null
}
}
}| demand_metric | any |
| gap_territory | boolean |
| capacity_field | any |
| map_session_id | any |
| contractor_layer | any |
| priority_weights | any |
| contractor_filter | any |
| service_zip_field | any |
| saturation_threshold | any |
{
"type": "object",
"title": "analyze_network_coverageArguments",
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"trade": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Trade",
"default": null
},
"coverage": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Coverage",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"tier_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tier Field",
"default": null
},
"trade_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Trade Field",
"default": null
},
"demand_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Demand Layer",
"default": null
},
"demand_metric": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Demand Metric",
"default": null
},
"gap_territory": {
"type": "boolean",
"title": "Gap Territory",
"default": false
},
"capacity_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Capacity Field",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"contractor_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Contractor Layer",
"default": null
},
"priority_weights": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "number"
}
},
{
"type": "null"
}
],
"title": "Priority Weights",
"default": null
},
"contractor_filter": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Contractor Filter",
"default": null
},
"service_zip_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Service Zip Field",
"default": null
},
"saturation_threshold": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Saturation Threshold",
"default": null
}
}
}| part_layer* | string |
| part_scope | any |
| output_mode | string | tal is the default. assignments returns assignments_artifact plus an authenticated download_url; no ts_handle, tal_id, or map_refresh. |
| part_filter | any |
| point_layer* | string |
| repair_policy | string | Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found. |
| map_session_id | any |
| expected_revision | any |
| visit_frequency_field | any |
| ignore_visit_frequency | any |
{
"type": "object",
"title": "auto_buildArguments",
"required": [
"point_layer",
"part_layer",
"tal_label"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"part_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Part Ids",
"default": null
},
"objective": {
"anyOf": [
{
"type": "object",
"properties": {
"metric": {
"type": "string",
"description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance."
},
"metric_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on the metric or location-count dimension."
},
"workload_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on workload (drive time + dwell)."
}
},
"description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Objective",
"default": null
},
"tal_label": {
"type": "string",
"title": "Tal Label"
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"build_mode": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Build Mode",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"part_layer": {
"type": "string",
"title": "Part Layer"
},
"part_scope": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Scope",
"default": null
},
"output_mode": {
"enum": [
"tal",
"assignments"
],
"type": "string",
"title": "Output Mode",
"default": "tal",
"description": "tal is the default. assignments returns assignments_artifact plus an authenticated download_url; no ts_handle, tal_id, or map_refresh."
},
"part_filter": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Part Filter",
"default": null
},
"point_layer": {
"type": "string",
"title": "Point Layer"
},
"repair_policy": {
"enum": [
"default",
"strict",
"report_only"
],
"type": "string",
"title": "Repair Policy",
"default": "default",
"description": "Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found."
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
},
"visit_frequency_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Visit Frequency Field",
"default": null
},
"ignore_visit_frequency": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Ignore Visit Frequency",
"default": null
}
}
}| route_type* | string |
| route_label | any |
| travel_mode | string |
| map_session_id | any |
| include_geometry | boolean |
{
"type": "object",
"title": "calculate_routeArguments",
"required": [
"route_type",
"start",
"stop_sets"
],
"properties": {
"end": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "End",
"default": null
},
"start": {
"type": "object",
"title": "Start",
"additionalProperties": true
},
"route_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Route Id",
"default": null
},
"depart_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Depart At",
"default": null
},
"stop_sets": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Stop Sets"
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"route_type": {
"type": "string",
"title": "Route Type"
},
"route_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Route Label",
"default": null
},
"travel_mode": {
"type": "string",
"title": "Travel Mode",
"default": "car"
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"include_geometry": {
"type": "boolean",
"title": "Include Geometry",
"default": true
}
}
}| any |
| metric_fields | any |
| map_session_id | any |
| seed_attraction | any |
| seed_point_layer | any |
| expected_revision | any |
| group_label_prefix | string |
| visit_frequency_field | any |
{
"type": "object",
"title": "cluster_pointsArguments",
"required": [
"point_layer"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"objective": {
"anyOf": [
{
"type": "object",
"properties": {
"metric": {
"type": "string",
"description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance."
},
"metric_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on the metric or location-count dimension."
},
"workload_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on workload (drive time + dwell)."
}
},
"description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Objective",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"build_mode": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Build Mode",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"group_field": {
"type": "string",
"title": "Group Field",
"default": "group_id"
},
"point_layer": {
"type": "string",
"title": "Point Layer"
},
"point_filter": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Point Filter",
"default": null
},
"metric_fields": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Metric Fields",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"seed_attraction": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Seed Attraction",
"default": null
},
"seed_point_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Seed Point Layer",
"default": null
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
},
"group_label_prefix": {
"type": "string",
"title": "Group Label Prefix",
"default": "Group"
},
"visit_frequency_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Visit Frequency Field",
"default": null
}
}
}| classification | any |
| map_session_id | any |
| merge_strategy | any |
| active_part_layer | any |
| expected_revision | any |
| loaded_part_layers | any |
| expected_content_hash | any |
| point_layer_classifications | any |
{
"type": "object",
"title": "configure_mapArguments",
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"zoom": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Zoom",
"default": null
},
"theme": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Theme",
"default": null
},
"center": {
"anyOf": [
{
"type": "array",
"items": {
"type": "number"
}
},
{
"type": "null"
}
],
"title": "Center",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"presentation": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Presentation",
"default": null
},
"project_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Project Name",
"default": null
},
"active_tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Active Tal Id",
"default": null
},
"classification": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Classification",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"merge_strategy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Merge Strategy",
"default": null
},
"active_part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Active Part Layer",
"default": null
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
},
"loaded_part_layers": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Loaded Part Layers",
"default": null
},
"expected_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expected Content Hash",
"default": null
},
"point_layer_classifications": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Point Layer Classifications",
"default": null
}
}
}| string |
| territory_path | any |
| conflict_policy | any |
{
"type": "object",
"title": "create_territory_from_partsArguments",
"required": [
"part_layer",
"part_ids",
"territory_name"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Id",
"default": null
},
"part_ids": {
"type": "array",
"items": {
"type": "string"
},
"title": "Part Ids"
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"part_layer": {
"type": "string",
"title": "Part Layer"
},
"repair_policy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Repair Policy",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"territory_name": {
"type": "string",
"title": "Territory Name"
},
"territory_path": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Territory Path",
"default": null
},
"conflict_policy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Conflict Policy",
"default": null
}
}
}| expected_revision |
| any |
{
"type": "object",
"title": "delete_territoryArguments",
"required": [
"tal_id",
"territory_id"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"tal_id": {
"type": "string",
"title": "Tal Id"
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"territory_id": {
"type": "string",
"title": "Territory Id"
},
"repair_policy": {
"enum": [
"default",
"strict",
"report_only"
],
"type": "string",
"title": "Repair Policy",
"default": "default",
"description": "Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found."
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
}
}
}| map_session_id | any |
| expected_revision | any |
| assignments_handle | any |
| missing_part_policy | string |
| duplicate_part_policy | string |
{
"type": "object",
"title": "direct_buildArguments",
"required": [
"part_layer",
"tal_label"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Id",
"default": null
},
"tal_label": {
"type": "string",
"title": "Tal Label"
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"part_layer": {
"type": "string",
"title": "Part Layer"
},
"assignments": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Assignments",
"default": null
},
"repair_policy": {
"enum": [
"default",
"strict",
"report_only"
],
"type": "string",
"title": "Repair Policy",
"default": "default",
"description": "Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found."
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
},
"assignments_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Assignments Handle",
"default": null
},
"missing_part_policy": {
"type": "string",
"title": "Missing Part Policy",
"default": "fail"
},
"duplicate_part_policy": {
"type": "string",
"title": "Duplicate Part Policy",
"default": "keep_first"
}
}
}{
"type": "object",
"title": "export_geojsonArguments",
"properties": {
"zip": {
"type": "boolean",
"title": "Zip",
"default": true
},
"job_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Job Id",
"default": null
},
"tal_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Tal Ids",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"point_layers": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Point Layers",
"default": null
},
"route_layers": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Route Layers",
"default": null
},
"include_points": {
"type": "boolean",
"title": "Include Points",
"default": true
},
"include_routes": {
"type": "boolean",
"title": "Include Routes",
"default": true
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
}
}
}{
"type": "object",
"title": "extract_tal_branchArguments",
"required": [
"tal_id"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"tal_id": {
"type": "string",
"title": "Tal Id"
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"delegate_ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Delegate Ref",
"default": null
},
"exclude_locked": {
"type": "boolean",
"title": "Exclude Locked",
"default": true
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
},
"branch_territory_path": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Branch Territory Path",
"default": null
},
"expected_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expected Content Hash",
"default": null
},
"branch_rollup_territory_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Branch Rollup Territory Id",
"default": null
}
}
}| expiry_seconds | any |
| interaction_flags | any |
{
"type": "object",
"title": "get_map_visualizationArguments",
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"mode": {
"type": "string",
"title": "Mode",
"default": "view"
},
"theme": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Theme",
"default": null
},
"job_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Job Id",
"default": null
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Id",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"new_project": {
"type": "boolean",
"title": "New Project",
"default": false
},
"presentation": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Presentation",
"default": null
},
"active_tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Active Tal Id",
"default": null
},
"expiry_seconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expiry Seconds",
"default": null
},
"interaction_flags": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Interaction Flags",
"default": null
}
}
}| tier_field | any |
| label_field | string |
| point_layer | string |
| region_hint | any |
| trade_field | any |
| country_hint | any |
| metric_fields | any |
| search_fields | any |
| capacity_field | any |
| display_fields | any |
| latitude_field | string |
| map_session_id | any |
| min_confidence | number |
| accounts_handle | any |
| force_regeocode | boolean |
| grouping_fields | any |
| longitude_field | string |
| workload_fields | any |
| dwell_time_field | any |
| service_zip_field | any |
| visit_frequency_field | any |
| accept_suboptimal_geocodes | boolean |
{
"type": "object",
"title": "ingest_accountsArguments",
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"rows": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Rows",
"default": null
},
"label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Label",
"default": null
},
"id_field": {
"type": "string",
"title": "Id Field",
"default": "row_id"
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"use_cache": {
"type": "boolean",
"title": "Use Cache",
"default": true
},
"layer_role": {
"anyOf": [
{
"enum": [
"accounts",
"contractors"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Layer Role",
"default": null
},
"tier_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tier Field",
"default": null
},
"label_field": {
"type": "string",
"title": "Label Field",
"default": "label"
},
"point_layer": {
"type": "string",
"title": "Point Layer",
"default": "accounts"
},
"region_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Region Hint",
"default": null
},
"trade_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Trade Field",
"default": null
},
"country_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Country Hint",
"default": null
},
"metric_fields": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Metric Fields",
"default": null
},
"search_fields": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Search Fields",
"default": null
},
"capacity_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Capacity Field",
"default": null
},
"display_fields": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Display Fields",
"default": null
},
"latitude_field": {
"type": "string",
"title": "Latitude Field",
"default": "latitude"
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"min_confidence": {
"type": "number",
"title": "Min Confidence",
"default": 0
},
"accounts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Accounts Handle",
"default": null
},
"force_regeocode": {
"type": "boolean",
"title": "Force Regeocode",
"default": false
},
"grouping_fields": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Grouping Fields",
"default": null
},
"longitude_field": {
"type": "string",
"title": "Longitude Field",
"default": "longitude"
},
"workload_fields": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Workload Fields",
"default": null
},
"dwell_time_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Dwell Time Field",
"default": null
},
"service_zip_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Service Zip Field",
"default": null
},
"visit_frequency_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Visit Frequency Field",
"default": null
},
"accept_suboptimal_geocodes": {
"type": "boolean",
"title": "Accept Suboptimal Geocodes",
"default": true
}
}
}| any |
| route_type | string |
| travel_mode | string |
| map_session_id | any |
{
"type": "object",
"title": "isochrone_buildArguments",
"required": [
"origins",
"bands"
],
"properties": {
"avoid": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Avoid",
"default": null
},
"bands": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Bands"
},
"tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Id",
"default": null
},
"origins": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Origins"
},
"traffic": {
"type": "boolean",
"title": "Traffic",
"default": true
},
"depart_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Depart At",
"default": null
},
"tal_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Label",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"route_type": {
"type": "string",
"title": "Route Type",
"default": "fastest"
},
"travel_mode": {
"type": "string",
"title": "Travel Mode",
"default": "car"
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
}
}
}| territory_id |
| any |
| territory_ids | any |
| map_session_id | any |
{
"type": "object",
"title": "points_in_territoryArguments",
"properties": {
"tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Id",
"default": null
},
"metrics": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Metrics",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"max_points": {
"type": "integer",
"title": "Max Points",
"default": 1000
},
"point_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Point Layer",
"default": null
},
"point_filter": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Point Filter",
"default": null
},
"territory_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Territory Id",
"default": null
},
"territory_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Territory Ids",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
}
}
}| map_session_id | any |
| expected_revision | any |
| realign_operation | any |
| remove_empty_territories | boolean |
{
"type": "object",
"title": "realignArguments",
"required": [
"tal_id"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"moves": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Moves",
"default": null
},
"tal_id": {
"type": "string",
"title": "Tal Id"
},
"part_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Part Ids",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"repair_policy": {
"enum": [
"default",
"strict",
"report_only"
],
"type": "string",
"title": "Repair Policy",
"default": "default",
"description": "Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found."
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
},
"realign_operation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Realign Operation",
"default": null
},
"remove_empty_territories": {
"type": "boolean",
"title": "Remove Empty Territories",
"default": false
}
}
}| destination_territory_id | any |
| remove_empty_territories | boolean |
{
"type": "object",
"title": "request_part_selectionArguments",
"required": [
"part_layer"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Prompt",
"default": null
},
"purpose": {
"type": "string",
"title": "Purpose",
"default": "generic"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Id",
"default": null
},
"part_layer": {
"type": "string",
"title": "Part Layer"
},
"active_tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Active Tal Id",
"default": null
},
"new_territory": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "New Territory",
"default": null
},
"expiry_seconds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expiry Seconds",
"default": null
},
"realign_operation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Realign Operation",
"default": null
},
"destination_territory_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Destination Territory Id",
"default": null
},
"remove_empty_territories": {
"type": "boolean",
"title": "Remove Empty Territories",
"default": false
}
}
}| contractors | any |
| point_layer* | string |
| point_filter | any |
| territory_id | any |
| estimate_only | boolean |
| territory_ids | any |
| daily_capacity | any |
| frequency_unit | string |
| map_session_id | any |
| schedule_label | any |
| emit_visit_layer | boolean |
| visit_layer_name | any |
| expected_revision | any |
| visit_constraints | any |
| horizon_start_date | any |
| never_visit_values | any |
| max_buckets_per_day | any |
| visit_frequency_field* | string |
| cadence_flexibility_pct | any |
{
"type": "object",
"title": "schedule_visitsArguments",
"required": [
"point_layer",
"visit_frequency_field"
],
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Id",
"default": null
},
"horizon": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Horizon",
"default": null
},
"objective": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Objective",
"default": null
},
"point_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Point Ids",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"contractors": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Contractors",
"default": null
},
"point_layer": {
"type": "string",
"title": "Point Layer"
},
"point_filter": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Point Filter",
"default": null
},
"territory_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Territory Id",
"default": null
},
"estimate_only": {
"type": "boolean",
"title": "Estimate Only",
"default": false
},
"territory_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Territory Ids",
"default": null
},
"daily_capacity": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Daily Capacity",
"default": null
},
"frequency_unit": {
"type": "string",
"title": "Frequency Unit",
"default": "interval_days"
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"schedule_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Schedule Label",
"default": null
},
"emit_visit_layer": {
"type": "boolean",
"title": "Emit Visit Layer",
"default": true
},
"visit_layer_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Visit Layer Name",
"default": null
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
},
"visit_constraints": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
},
{
"type": "null"
}
],
"title": "Visit Constraints",
"default": null
},
"horizon_start_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Horizon Start Date",
"default": null
},
"never_visit_values": {
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "null"
}
],
"title": "Never Visit Values",
"default": null
},
"max_buckets_per_day": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Buckets Per Day",
"default": null
},
"visit_frequency_field": {
"type": "string",
"title": "Visit Frequency Field"
},
"cadence_flexibility_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Cadence Flexibility Pct",
"default": null
}
}
}| part_layer | any |
| part_scope | any |
| part_filter | any |
| point_layer | any |
| map_session_id | any |
| territory_name | any |
{
"type": "object",
"title": "seed_buildArguments",
"required": [
"seed",
"target"
],
"properties": {
"seed": {
"type": "object",
"title": "Seed",
"additionalProperties": true
},
"tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Id",
"default": null
},
"target": {
"type": "object",
"title": "Target",
"additionalProperties": true
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Id",
"default": null
},
"part_ids": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Part Ids",
"default": null
},
"max_parts": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Parts",
"default": null
},
"tal_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tal Label",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"part_scope": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Scope",
"default": null
},
"part_filter": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Part Filter",
"default": null
},
"point_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Point Layer",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"territory_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Territory Name",
"default": null
}
}
}| expected_revision | any |
| expected_content_hash | any |
{
"type": "object",
"title": "show_map_overlayArguments",
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"route_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Route Id",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"overlay_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Overlay Id",
"default": null
},
"overlay_kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Overlay Kind",
"default": null
},
"user_request": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "User Request",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"merge_strategy": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Merge Strategy",
"default": null
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Expected Revision",
"default": null
},
"expected_content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expected Content Hash",
"default": null
}
}
}| context_summary |
| any |
| include_context | boolean |
| expected_capability | any |
| related_product_area | any |
| suggested_improvement | any |
{
"type": "object",
"$defs": {
"FeedbackCategoryParam": {
"enum": [
"product_gap",
"mcp_tool_gap",
"documentation_gap",
"data_issue",
"workflow_confusion",
"bug",
"suggestion",
"other"
],
"type": "string"
},
"FeedbackSeverityParam": {
"enum": [
"low",
"medium",
"high",
"blocking"
],
"type": "string"
},
"FeedbackConfidenceParam": {
"enum": [
"low",
"medium",
"high"
],
"type": "string"
},
"FeedbackProductAreaParam": {
"enum": [
"territory_planning",
"alignment",
"mapping",
"routing",
"powerbi",
"d365",
"data_import",
"geocoding",
"map_component",
"mcp",
"other"
],
"type": "string"
}
},
"title": "submit_feedbackArguments",
"required": [
"user_goal",
"what_happened"
],
"properties": {
"category": {
"$ref": "#/$defs/FeedbackCategoryParam",
"default": "other"
},
"severity": {
"$ref": "#/$defs/FeedbackSeverityParam",
"default": "medium"
},
"user_goal": {
"type": "string",
"title": "User Goal"
},
"confidence": {
"$ref": "#/$defs/FeedbackConfidenceParam",
"default": "medium"
},
"session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Session Id",
"default": null
},
"client_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Client Name",
"default": null
},
"related_tool": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Related Tool",
"default": null
},
"what_happened": {
"type": "string",
"title": "What Happened"
},
"client_version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Client Version",
"default": null
},
"correlation_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Correlation Id",
"default": null
},
"context_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Context Summary",
"default": null
},
"include_context": {
"type": "boolean",
"title": "Include Context",
"default": false
},
"expected_capability": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expected Capability",
"default": null
},
"related_product_area": {
"anyOf": [
{
"$ref": "#/$defs/FeedbackProductAreaParam"
},
{
"type": "null"
}
],
"default": null
},
"suggested_improvement": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Suggested Improvement",
"default": null
}
}
}| source_tal_id | any |
| map_session_id | any |
| territory_id_a | any |
| territory_id_b | any |
| balance_tolerance | any |
| disruption_weight | any |
| visit_frequency_field | any |
{
"type": "object",
"title": "territory_mergeArguments",
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"objective": {
"anyOf": [
{
"type": "object",
"properties": {
"metric": {
"type": "string",
"description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance."
},
"metric_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on the metric or location-count dimension."
},
"workload_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on workload (drive time + dwell)."
}
},
"description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Objective",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"point_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Point Layer",
"default": null
},
"new_tal_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "New Tal Label",
"default": null
},
"repair_policy": {
"enum": [
"default",
"strict",
"report_only"
],
"type": "string",
"title": "Repair Policy",
"default": "default",
"description": "Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found."
},
"source_tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Source Tal Id",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"territory_id_a": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Territory Id A",
"default": null
},
"territory_id_b": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Territory Id B",
"default": null
},
"balance_tolerance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Balance Tolerance",
"default": null
},
"disruption_weight": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Disruption Weight",
"default": null
},
"visit_frequency_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Visit Frequency Field",
"default": null
}
}
}| source_tal_id | any |
| map_session_id | any |
| balance_tolerance | any |
| disruption_weight | any |
| visit_frequency_field | any |
{
"type": "object",
"title": "territory_rebalanceArguments",
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"objective": {
"anyOf": [
{
"type": "object",
"properties": {
"metric": {
"type": "string",
"description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance."
},
"metric_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on the metric or location-count dimension."
},
"workload_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on workload (drive time + dwell)."
}
},
"description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Objective",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"point_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Point Layer",
"default": null
},
"new_tal_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "New Tal Label",
"default": null
},
"repair_policy": {
"enum": [
"default",
"strict",
"report_only"
],
"type": "string",
"title": "Repair Policy",
"default": "default",
"description": "Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found."
},
"source_tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Source Tal Id",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"balance_tolerance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Balance Tolerance",
"default": null
},
"disruption_weight": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Disruption Weight",
"default": null
},
"visit_frequency_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Visit Frequency Field",
"default": null
}
}
}| source_tal_id | any |
| map_session_id | any |
| balance_tolerance | any |
| disruption_weight | any |
| new_territory_label | any |
| target_territory_id | any |
| visit_frequency_field | any |
{
"type": "object",
"title": "territory_splitArguments",
"properties": {
"ts": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Ts",
"default": null
},
"objective": {
"anyOf": [
{
"type": "object",
"properties": {
"metric": {
"type": "string",
"description": "Point metric column name to balance (e.g. 'Revenue', 'weekly_volume'), or '__account_count__' for location-count balance."
},
"metric_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on the metric or location-count dimension."
},
"workload_bias": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "Weight (0..100) on workload (drive time + dwell)."
}
},
"description": "Balance objective: {metric: '<column>|__account_count__', workload_bias: 0..100, metric_bias: 0..100}. Biases sum to 100. For pure metric balance, pass {metric: '<column>', workload_bias: 0, metric_bias: 100} (or {metric: '<column>'} on restructure tools). When omitted on restructure tools, inherits the source TAL build_provenance objective or seed_build target.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Objective",
"default": null
},
"ts_handle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts Handle",
"default": null
},
"dwell_time": {
"anyOf": [
{
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"scalar",
"field"
],
"type": "string",
"description": "Dwell source: 'scalar' for a fixed per-visit duration or 'field' for an ingested point column."
},
"unit": {
"enum": [
"minutes",
"hours"
],
"type": "string",
"default": "minutes",
"description": "Time unit for value or field ('minutes' or 'hours')."
},
"field": {
"type": "string",
"minLength": 1,
"description": "Point column name holding per-account onsite time when type='field'."
},
"value": {
"type": "number",
"minimum": 0,
"description": "Confirmed onsite duration per visit when type='scalar'."
}
},
"description": "Onsite (dwell) time per visit: {type: 'scalar', value: <number>, unit: 'minutes'|'hours'} or {type: 'field', field: '<column>', unit: 'minutes'|'hours'}.",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Dwell Time",
"default": null
},
"part_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Part Layer",
"default": null
},
"point_layer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Point Layer",
"default": null
},
"new_tal_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "New Tal Label",
"default": null
},
"repair_policy": {
"enum": [
"default",
"strict",
"report_only"
],
"type": "string",
"title": "Repair Policy",
"default": "default",
"description": "Topology repair for dissolved territories. default fills interior holes in the dissolved geometry (no part is added or reassigned; repair_summary.changed_part_ids lists the territories' own parts). report_only detects holes and changes nothing (warning REPAIR_AVAILABLE). strict fails with REPAIR_REQUIRED when a hole is found."
},
"source_tal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Source Tal Id",
"default": null
},
"map_session_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Map Session Id",
"default": null
},
"balance_tolerance": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Balance Tolerance",
"default": null
},
"disruption_weight": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Disruption Weight",
"default": null
},
"new_territory_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "New Territory Label",
"default": null
},
"target_territory_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Target Territory Id",
"default": null
},
"visit_frequency_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Visit Frequency Field",
"default": null
}
}
}