Connect your AI agent to SITE 4.0 using the SITE MCP connector. Use it to ask questions about your properties, condition assessments, and repair plans from a compatible AI agent.
The connector uses the Model Context Protocol (MCP). You sign in with your SITE account, and the agent works with the data and actions your account is allowed to access. You can ask questions in everyday language. You do not need to write code.
Connect and use SITE 4.0
What you can do
You can use the connector to find properties, review pavement and roof assessments, summarize repair scenarios and budgets, explore inventory and media, and retrieve links to SITE 4.0. It also provides SITE product help and assessment guidance.
Most operations only read information and do not change your SITE records. If your permissions allow, you can generate a pavement report and have it emailed to your SITE account. The permissions section below explains this action.
Before you connect
You need an active SITE 4.0 account with access to the data you want to use, and an AI application that supports remote MCP connections over Streamable HTTP with OAuth sign-in. Your AI application's plan and your organization's settings may determine whether you can add a custom connector.
Your SITE permissions still apply. Some actions also require an active contract or a particular SITE role. Connecting an agent does not grant additional access.
Connect to SITE 4.0
Open the connector settings. Find the connector or MCP settings in your AI application.
Add a connection. Choose the option to add a custom remote connector or MCP server.
Enter the connection details. Enter SITE as the connector name and
https://mcp.sitetechnologies.io/as the server URL. If asked for the transport, select Streamable HTTP.Sign in to SITE. Start the connection and sign in with your SITE account, including your organization's sign-in process when applicable.
Enable the connector. Review the connection request and approve it. Return to your AI application and enable the connector for the conversation if your application requires it.
Use the sign-in flow provided by the connector. You do not need to paste your SITE password, access token, or refresh token into a chat.
To confirm the connection, ask:
Use the SITE connector to show which account I am signed in as and list up to five properties I can access.
If your AI application does not offer a custom MCP connection, ask its administrator about connector availability. Installing or enabling a connector is controlled by that application.
Try these questions
Replace the text in brackets with a property you can access.
Find [property name]. Show its latest available assessments and give me a link to open it in SITE 4.0.
For [property name], compare the available pavement repair scenarios and their total costs. Keep alternative scenarios separate.
Summarize the latest available roof condition information for our properties. Identify properties with missing roof condition data.
For a report, you can ask:
Prepare a pavement executive summary report for [property name] using its latest available pavement assessment. Show me the property and assessment date before generating the report.
Generating that report queues a PDF for delivery to your SITE account's email address. The returned report ID confirms that generation was queued. It does not confirm that the PDF has been delivered.
Sign-in, disconnection, and privacy
Compatible clients can renew access in the background using the refresh token issued during sign-in. If the connection expires, is revoked, or can no longer renew, the application may ask you to sign in again.
You can disable or remove the connector in your AI application's settings. This controls that application's connection. It does not delete your SITE account or undo actions already completed through the connector.
The agent receives the results returned by the connector for your requests. Those results can contain the SITE records you asked it to use. Your AI provider's data policies apply to information it receives. Review the SITE privacy policy and your AI provider's privacy settings before connecting.
Troubleshooting
Situation | What to do |
You cannot add a custom connector | Check your AI application's plan, connector support, and administrator settings. |
Sign-in fails or the connection expires | Try the connector's reconnect option and complete SITE sign-in again. |
An operation returns a permission error | Check that you are using the intended SITE account and that your role has access to the requested data or action. |
A property or assessment is missing | Confirm the account and filters. Ask your SITE administrator to check access. An empty result is not proof that the record does not exist. |
An execution reaches a limit or returns a truncated result | Narrow the request, return fewer fields, or divide it into smaller runs. |
An operation requires another executor | Use the execution tool named in |
A report request returned an ID but no PDF is available yet | Generation and email delivery are asynchronous. Check delivery before requesting the report again. |
A write times out or fails | Check which actions completed before repeating anything. Earlier writes may already have succeeded. |
For help, contact SITE support. Include the AI application, the approximate time of the issue, the operation name if available, and the error message. Do not send passwords or access tokens.
Permissions and Code Mode
Permissions and actions
The connector separates reading data, creating records, and updating existing records. Your AI application controls its own confirmation prompts. SITE checks the permitted execution mode and your account's permissions when an operation runs.
Tool | What it allows |
| Read operations and SITE 4.0 navigation links. |
| Enabled actions that create records or request a report. |
| Enabled writes, including updates to existing records, subject to your account permissions. |
create_report uses execute_write to queue a pavement executive summary PDF and email it to the signed-in user. Repeating the request can send another report.
Creating or updating users is not currently available to Client Admins through the connector. Contact SITE support for help with user changes.
User deletion is not enabled. The reference below focuses on customer workflows; your agent can discover available operations through search and get_schema. Your SITE permissions still apply.
Each operation commits separately. If an execution stops after completing one write, that write may already have taken effect. Check the outcome before repeating a report request. Repeating an entire failed execution can duplicate an action or email.
How Code Mode works
The agent discovers an operation, reads its input and response definitions, and submits a short Python program that calls it. A single program can combine several operations, filter records, or calculate a summary. The program returns the result the agent needs for its answer.
The workflow uses these tools:
Tool | Purpose |
| Find available operations by keyword. Results include the operation name, a summary, and the required executor. |
| Read an operation's parameters, response fields, and required executor. |
| Run Python using read operations. |
| Run Python to create records or request reports. |
| Run Python to perform enabled writes, including updates to existing records. |
| Discover and read SITE guidance supplied as MCP resources. These are separate from Code Mode execution. |
For product help or assessment methodology, the agent can read site://knowledge/catalog, then the topic URIs returned by the catalog. These topics include their sources, limitations, and required evidence. They help interpret data; they do not replace a property's own assessment records.
Execution example
First, the agent requests the definitions of get_me and list_properties with get_schema. It can then submit this program to execute:
me = await call_tool("get_me", {})
properties = await call_tool("list_properties", {})
rows = properties["data"]
return {
"user_id": me["data"]["user_id"],
"property_count": len(rows),
"properties": [
{"id": row["id"], "name": row["name"]}
for row in rows[:5]
],
}The agent uses call_tool with the operation's name and parameters. HTTP paths in the reference below explain the underlying API mapping. The Python program does not make direct HTTP requests to those paths.
Sandbox and limits
Programs run in a restricted Python sandbox. They have no direct access to the server's filesystem, environment variables, or network. The connection to SITE operations is the provided call_tool function. The sandbox is an execution boundary, not a test account: permitted writes affect the connected SITE account.
Each run has a configured execution time limit of 30 seconds, a memory limit of 100 MB, and a maximum of 50 call_tool calls. Final results are limited to 20,000 bytes; larger results are truncated with a notice. The agent should filter or summarize data before returning it and split larger tasks into smaller runs. These execution limits are not a promise that a full conversation or report delivery will finish within 30 seconds.
The interpreter supports a subset of Python. Third-party packages are not available. Supported modules include json, re, datetime, math, itertools, and collections. The executor's description provides additional language restrictions.
Working with the results
The agent should use IDs returned by SITE and read each operation's schema before calling it. An empty list filter may mean no filter, so it should not pass an empty list when it intends to select no records.
Repairs and scope items can contain group rows. Totals must include the individual items inside those groups. Repair scenarios represent alternative plans and should be compared separately.
Area and length values use the units stated in their fields. The agent can read your unit preference through get_user_profile_settings using the user ID returned by get_me, and convert values for display. Monetary values include their currency and must not be added across currencies without an explicit conversion.
For platform links, the agent should call get_site_link and use the returned URL. Opening a link still requires normal SITE access. For media, supported signed URLs are temporary; request a fresh URL if one expires. Whether an agent can display an image depends on that application's capabilities.
Available operations
Expand a topic, then choose an operation to see its description, parameters, and response fields. This reference focuses on customer workflows.
How to read this reference
How to read this reference
The reference below describes selected operations available through call_tool, including SITE's navigation helper. Availability of an operation does not grant permission to run it; SITE checks the signed-in account on each API call.
Endpoint paths below include /api and use https://app.sitetechnologies.io as their origin. Use operation names with call_tool when working through MCP. get_site_link is an MCP helper and has no HTTP endpoint.
Technical names such as list_projects and project_id identify records for a property's services, assessments, or repair plans. The agent resolves these records and IDs from your request. You can refer to the property, type of assessment, and date in everyday language.
For each operation, the reference gives the required executor and selected parameters and response fields relevant to customer workflows. The full operation schema is available through get_schema. ? means a field can be absent, = value shows a default, null is an allowed empty value, A | B allows either type, and X[] is a list. Named shapes define nested objects. Schemas describe possible fields; some optional fields require an explicit request or depend on the account's access. The operation schema returned by the connected server is the current reference.
Operations in this guide are grouped by topic. Each entry includes its execution tool, endpoint where applicable, parameters, and response fields. To find a specific operation, search this page for its name.
Properties and assessments (6 operations)
Properties and assessments (6 operations)
Find properties, assessments, and links to SITE 4.0.
list_properties
list_properties
Execution tool: execute
Endpoint: GET /api/v1/properties
List properties visible to your account.
Use include_fields to request geometry, has_open_capture_project, parcel_blob, or trades. geometry adds property and roof boundaries as WKT in longitude and latitude (EPSG:4326). Only values listed in the parameter schema are available through MCP.
parameters
client_code?: string | null
Filter payload on client code
has_missing_boundary?: boolean | null
Filter payload on whether or not the property has missing property
or roof boundaries
property_id?: string(uuid)[] | null
Filter payload on property ids
bbox?: string | null
Filter payload on properties within a bounding box in format
'west,south,east,north', where west/east are longitudes and
south/north are latitudes
has_open_capture_project?: boolean = false
Filter properties by whether they have an active imagery capture
service
include_fields?: ("geometry" | "has_open_capture_project" |
"parcel_blob" | "trades")[]
response
data: PropertySchema[]
meta: object
PropertySchema
id: string(uuid)
client_code: string
name: string
external_code: string
is_demo: boolean
address: Address
property_boundary: BoundaryWithApprovalSchema | null
roof_boundary: BoundaryWithApprovalSchema | null
created_at: string(date-time)
created_by: string(uuid)
updated_at: string(date-time) | null
updated_by: string(uuid) | null
site_point_of_contact: UserIdentifiersSchema | null
property_manager: UserIdentifiersSchema | null
construction_manager: UserIdentifiersSchema | null
geocode?: GeocodeSchema | null
boundary_review_status: "not_started" | "in_progress" | "approved" |
"rejected" | null
has_open_capture_project?: boolean | null
trades?: ("Roof" | "Facade" | "Pavement" | "Landscaping")[] | null
parcel_boundary: BoundarySchema | null
parcel_blob?: object | null
climate_condition: "Mild" | "Normal" | "Severe" | null
tags: TagKeyValue[]
Address
address_line_1: string
address_line_2?: string | null
city: string
state: string | null
zip_code?: string | null
country: string
BoundaryWithApprovalSchema
geometry: string | null
area: Area | null
approved: boolean | null
Area
value: number
unit: "sqft"
UserIdentifiersSchema
id: string(uuid)
first_name: string
last_name: string
GeocodeSchema
latitude: number
longitude: number
BoundarySchema
geometry: string | null
area: Area | null
TagKeyValue
key: string
value: string
get_property
get_property
Execution tool: execute
Endpoint: GET /api/v1/properties/{id}
Get a property.
parameters
id: string(uuid)
response
data: PropertySchema
meta: object
PropertySchema
id: string(uuid)
client_code: string
name: string
external_code: string
is_demo: boolean
address: Address
property_boundary: BoundaryWithApprovalSchema | null
roof_boundary: BoundaryWithApprovalSchema | null
created_at: string(date-time)
created_by: string(uuid)
updated_at: string(date-time) | null
updated_by: string(uuid) | null
site_point_of_contact: UserIdentifiersSchema | null
property_manager: UserIdentifiersSchema | null
construction_manager: UserIdentifiersSchema | null
geocode?: GeocodeSchema | null
boundary_review_status: "not_started" | "in_progress" | "approved" |
"rejected" | null
has_open_capture_project?: boolean | null
trades?: ("Roof" | "Facade" | "Pavement" | "Landscaping")[] | null
parcel_boundary: BoundarySchema | null
parcel_blob?: object | null
climate_condition: "Mild" | "Normal" | "Severe" | null
tags: TagKeyValue[]
Address
address_line_1: string
address_line_2?: string | null
city: string
state: string | null
zip_code?: string | null
country: string
BoundaryWithApprovalSchema
geometry: string | null
area: Area | null
approved: boolean | null
Area
value: number
unit: "sqft"
UserIdentifiersSchema
id: string(uuid)
first_name: string
last_name: string
GeocodeSchema
latitude: number
longitude: number
BoundarySchema
geometry: string | null
area: Area | null
TagKeyValue
key: string
value: string
get_property_trades
get_property_trades
Execution tool: execute
Endpoint: GET /api/v1/properties/{property_id}/trades
Get property trades information.
parameters
property_id: string(uuid)
response
data: PropertyTradesResponse
meta: object
PropertyTradesResponse
property_condition_index: integer | null
property_condition_index_category: "excellent" | "very_good" | "good" |
"fair" | "poor" | "very_poor" | "failed" | null
trades: {string: TradeInfo}
inventory: InventoryTradeInfo
TradeInfo
latest_condition_index: integer | null
latest_condition_index_category: "excellent" | "very_good" | "good" |
"fair" | "poor" | "very_poor" | "failed" | null
latest_area: Area | null
latest_project_id: string(uuid) | null
Area
value: number
unit: "sqft"
InventoryTradeInfo
latest_project_id: string(uuid) | null
latest_project_year: integer | null
list_projects
list_projects
Execution tool: execute
Endpoint: GET /api/v1/projects
List services for properties, including imagery capture, assessments, and repair plans.
Each record belongs to one property and has a start and end date. is_open indicates whether today is within that date range. is_capture identifies imagery collection. Other services include analysis, planning, and bids. Use trade to select Roof, Facade, Pavement, or Landscaping.
zones_info contains the overall condition index and total zone area for that service. The condition index is an area-weighted average across zones with a value, such as PCI for pavement. It is included by default when property_id is supplied. Set include_zones_info=true to request it for other queries.
parameters
client_code?: string | null
property_id?: string(uuid)[] | null
contract_id?: string(uuid) | null
is_open?: boolean | null
is_capture?: boolean | null
trade?: "Roof" | "Facade" | "Pavement" | "Landscaping" | null
service_name?: "Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Low Level Capture 75ft" |
"Facade Walking Capture" | "Trailer Capture" | "Pavement Bids" |
"Roofing Bids" | "Roofing Work Order" | "PCI Analysis" |
"Pavement PCI & Repair Plan 1 Year" |
"Pavement PCI & Repair Plan 2 Year" |
"Pavement PCI & Repair Plan 3 Year" |
"Pavement PCI & Repair Plan 5 Year" |
"Pavement PCI & Repair Plan 10 Year" | "RCI Analysis" |
"Roofing RCI & Repair Plan 1 Year" |
"Roofing RCI & Repair Plan 2 Year" |
"Roofing RCI & Repair Plan 3 Year" |
"Roofing RCI & Repair Plan 5 Year" |
"Roofing RCI & Repair Plan 10 Year" | "FCI Analysis" |
"Facade Defect Detection" | "LCI Analysis" |
"Landscaping Measurement" | "Landscaping Defect Detection" |
"Inventory AI" | "Low Level Capture" | "Mapping Walking Capture" |
"Marketing Video" | "Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload" | "Utility" |
null
include_zones_info?: boolean | null
include_capture_date?: boolean = false
response
data: Project[]
meta: object
Project
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
client_code: string
client_name: string
property_id: string(uuid)
contract_id: string(uuid)
service_name: "Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Low Level Capture 75ft" |
"Facade Walking Capture" | "Trailer Capture" | "Pavement Bids" |
"Roofing Bids" | "Roofing Work Order" | "PCI Analysis" |
"Pavement PCI & Repair Plan 1 Year" |
"Pavement PCI & Repair Plan 2 Year" |
"Pavement PCI & Repair Plan 3 Year" |
"Pavement PCI & Repair Plan 5 Year" |
"Pavement PCI & Repair Plan 10 Year" | "RCI Analysis" |
"Roofing RCI & Repair Plan 1 Year" |
"Roofing RCI & Repair Plan 2 Year" |
"Roofing RCI & Repair Plan 3 Year" |
"Roofing RCI & Repair Plan 5 Year" |
"Roofing RCI & Repair Plan 10 Year" | "FCI Analysis" |
"Facade Defect Detection" | "LCI Analysis" |
"Landscaping Measurement" | "Landscaping Defect Detection" |
"Inventory AI" | "Low Level Capture" | "Mapping Walking Capture" |
"Marketing Video" | "Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload" | "Utility"
start_date: string(date)
end_date: string(date)
is_priority: boolean
is_capture: boolean
is_open: boolean
zones_info?: ProjectZonesInfo | null
capture_date?: string(date-time) | null
ProjectZonesInfo
condition_index: integer | null
area: Area
condition_index_category: "excellent" | "very_good" | "good" | "fair" |
"poor" | "very_poor" | "failed" | null
Area
value: number
unit: "sqft"
get_project
get_project
Execution tool: execute
Endpoint: GET /api/v1/projects/{id}
Get a service record for a property, such as an assessment or repair plan.
parameters
id: string(uuid)
response
data: Project
meta: object
Project
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
client_code: string
client_name: string
property_id: string(uuid)
contract_id: string(uuid)
service_name: "Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Low Level Capture 75ft" |
"Facade Walking Capture" | "Trailer Capture" | "Pavement Bids" |
"Roofing Bids" | "Roofing Work Order" | "PCI Analysis" |
"Pavement PCI & Repair Plan 1 Year" |
"Pavement PCI & Repair Plan 2 Year" |
"Pavement PCI & Repair Plan 3 Year" |
"Pavement PCI & Repair Plan 5 Year" |
"Pavement PCI & Repair Plan 10 Year" | "RCI Analysis" |
"Roofing RCI & Repair Plan 1 Year" |
"Roofing RCI & Repair Plan 2 Year" |
"Roofing RCI & Repair Plan 3 Year" |
"Roofing RCI & Repair Plan 5 Year" |
"Roofing RCI & Repair Plan 10 Year" | "FCI Analysis" |
"Facade Defect Detection" | "LCI Analysis" |
"Landscaping Measurement" | "Landscaping Defect Detection" |
"Inventory AI" | "Low Level Capture" | "Mapping Walking Capture" |
"Marketing Video" | "Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload" | "Utility"
start_date: string(date)
end_date: string(date)
is_priority: boolean
is_capture: boolean
is_open: boolean
zones_info?: ProjectZonesInfo | null
capture_date?: string(date-time) | null
ProjectZonesInfo
condition_index: integer | null
area: Area
condition_index_category: "excellent" | "very_good" | "good" | "fair" |
"poor" | "very_poor" | "failed" | null
Area
value: number
unit: "sqft"
get_site_link
get_site_link
Execution tool: execute
MCP navigation helper. No underlying HTTP endpoint.
Get a SITE 4.0 page, property, trade or inventory link.
Returns a browser URL for this environment. Use it when sharing a link to SITE instead of constructing a URL yourself. Property links open the overview, or its pavement or roof trade when specified. Inventory opens Inventory AI. Facade and landscaping do not currently have direct trade links.
This builds a URL without looking up the property or checking access, trade availability or feature flags. Resolve the property with list_properties or get_property first. Opening the link requires sign-in and normal platform permissions. Specific service records, tabs, zones, repairs and media cannot be selected by these URLs.
parameters
page: "home" | "property" | "inventory" | "pavement_portfolio" |
"chat"
SITE 4.0 page to open. Use property for a property overview or
trade.
property_id?: string(uuid) | null
Required for property and inventory. Use the id from list_properties
or get_property, not the property's name or client code.
trade?: "pavement" | "roof" | null
Optional for the property page only. Omit to open the property
overview.
response
url: string
Condition and inventory (6 operations)
Condition and inventory (6 operations)
Review zones, condition data, inventory, and roof attributes.
list_zones
list_zones
Execution tool: execute
Endpoint: GET /api/v1/zones
List zones with the selected filters.
parameters
grouped?: boolean = false
created_by?: string(uuid)[] | null
Filter by user who created the zone
has_comments?: boolean | null
Filter by whether zone has comments
is_priority?: boolean | null
Filter by priority status
created_year?: integer[] | null
Filter by year of creation
surface_type?: ("concrete" | "asphalt" | "pavers" | "mixed" | "gravel" |
"unknown")[] | null
Filter by surface type
sub_surface_type?: ("jpcp" | "crcp" | "rcc" | "pervious" | "stamped" |
"plain" | "precast" | "hma" | "wma" | "porous" | "rap" | "brick")[] |
null
Filter by sub-surface type
traffic_type?: ("Apron" | "Parking" | "Local Road" | "Collector Road" |
"Box Culvert" | "Curb & Gutter" | "Utility Corridor" |
"Bridge Deck" | "Blast Pad" | "Entrance" | "Car Parking" |
"Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D")[] | null
Filter by traffic type
condition_index_categories?: ("excellent" | "very_good" | "good" |
"fair" | "poor" | "very_poor" | "failed")[] | null
Filter by condition index categories
is_striped?: boolean | null
Filter by striped status
facade_type?: ("field" | "transition")[] | null
Filter by facade type
facade_subtype?: ("concrete" | "masonry" | "stone_panelized" |
"veneer" | "eifs_defs" | "stucco" | "glass" | "sheet_metal" | "door" |
"siding" | "sealed_joints" | "mortar_joint" | "flashing")[] | null
Filter by facade subtype
is_ai?: boolean | null
Filter by AI-generated status
review_status?: ("pending" | "approved" | "revised")[] | null
Filter by facade review status
material?: ("Asphalt Shingle" | "Modified Bitumen" | "Built-Up Roof" |
"EPDM" | "TPO" | "PVC" | "KEE" |
"Single-Ply Thermoplastic (variant unverified)" |
"Spray Polyurethane Foam" | "Liquid-Applied Coating" |
"Architectural Metal Panel" | "Structural Metal Panel" | "Clay Tile" |
"Concrete Tile" | "Slate" | "Wood Shake / Shingle" | "Synthetic" |
"Green / Vegetative Roof" | "Hot Rubberized Asphalt" | "Unknown")[] |
null
Filter by roof material
building_id?: string | null
Filter by building ID (case-insensitive substring match)
surfacing_value_id?: string(uuid)[] | null
Filter by roof surfacing attribute value
response
data: (PavementZone | FacadeZone | RoofZone)[] | ZoneGroup[]
meta: object
PavementZone
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at?: string(date-time)
created_by?: string(uuid)
id?: string(uuid)
client_code?: string
property_id?: string(uuid)
project_id?: string(uuid)
geometry?: string
area?: Area
has_comments?: boolean
comment_count?: integer
is_priority?: boolean
index?: integer | null
group_index?: integer | null
type: "pavement" = "pavement"
surface_type?: "concrete" | "asphalt" | "pavers" | "mixed" | "gravel" |
"unknown"
sub_surface_type?: "jpcp" | "crcp" | "rcc" | "pervious" | "stamped" |
"plain" | "precast" | "hma" | "wma" | "porous" | "rap" | "brick" |
null
traffic_type?: "Apron" | "Parking" | "Local Road" | "Collector Road" |
"Box Culvert" | "Curb & Gutter" | "Utility Corridor" |
"Bridge Deck" | "Blast Pad" | "Entrance" | "Car Parking" |
"Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D"
depth?: number
condition_index?: integer | null
condition_index_category?: "excellent" | "very_good" | "good" | "fair" |
"poor" | "very_poor" | "failed" | null
is_striped?: boolean | null
slab_count?: integer | null
curb_count?: integer | null
predicted_condition_index?: integer | null
previous_condition_index?: integer | null
scope_item_count?: integer
repair_count?: integer
depth_measurement?: Length
Area
value: number
unit: "sqft"
Length
value: number
unit: "ft" | "in" | "mil"
FacadeZone
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at?: string(date-time)
created_by?: string(uuid)
id?: string(uuid)
client_code?: string
property_id?: string(uuid)
project_id?: string(uuid)
geometry?: string
area?: Area
has_comments?: boolean
comment_count?: integer
is_priority?: boolean
index?: integer | null
group_index?: integer | null
type: "facade" = "facade"
face_id?: string(uuid)
facade_type?: "field" | "transition"
facade_subtype?: "concrete" | "masonry" | "stone_panelized" | "veneer" |
"eifs_defs" | "stucco" | "glass" | "sheet_metal" | "door" | "siding" |
"sealed_joints" | "mortar_joint" | "flashing"
is_ai?: boolean
review_status?: "pending" | "approved" | "revised" | null
perimeter?: Length
RoofZone
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at?: string(date-time)
created_by?: string(uuid)
id?: string(uuid)
client_code?: string
property_id?: string(uuid)
project_id?: string(uuid)
geometry?: string
area?: Area
has_comments?: boolean
comment_count?: integer
is_priority?: boolean
index?: integer | null
group_index?: integer | null
type: "roof" = "roof"
material?: "Asphalt Shingle" | "Modified Bitumen" | "Built-Up Roof" |
"EPDM" | "TPO" | "PVC" | "KEE" |
"Single-Ply Thermoplastic (variant unverified)" |
"Spray Polyurethane Foam" | "Liquid-Applied Coating" |
"Architectural Metal Panel" | "Structural Metal Panel" | "Clay Tile" |
"Concrete Tile" | "Slate" | "Wood Shake / Shingle" | "Synthetic" |
"Green / Vegetative Roof" | "Hot Rubberized Asphalt" | "Unknown" |
null
install_year?: integer | null
building_id?: string | null
is_irma?: boolean | null
securement?: ("Ballasted" | "Wind Ballasted" | "Adhered" |
"Mechanically Attached" | "Induction Welded")[] | null
num_roof_layers?: integer | null
has_tapered_insulation_system?: boolean | null
has_overflow_drainage_parapet_wall?: boolean | null
warranty_status?: "Active" | "Inactive" | "Unknown" | null
warranty_issuer?: string | null
warranty_expiration_date?: string(date) | null
surfacing_value_id?: string(uuid) | null
membrane_formula_value_id?: string(uuid) | null
cover_board_value_id?: string(uuid) | null
flat_insulation_value_id?: string(uuid) | null
vapor_barrier_value_id?: string(uuid) | null
substrate_board_value_id?: string(uuid) | null
deck_type_value_id?: string(uuid) | null
primary_drainage_value_id?: string(uuid) | null
install_type_value_id?: string(uuid) | null
membrane_thickness?: Length | null
cover_board_thickness?: Length | null
flat_insulation_thickness?: Length | null
deck_thickness?: Length | null
condition_index?: integer | null
condition_index_category?: "excellent" | "very_good" | "good" | "fair" |
"poor" | "very_poor" | "failed" | null
perimeter?: Length
scope_item_count?: integer
repair_count?: integer
material_code?: string | null
ZoneGroup
group_name: string
zones: (PavementZone | FacadeZone | RoofZone)[]
get_zone
get_zone
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/zones/{zone_id}
Get a zone.
parameters
project_id: string(uuid)
zone_id: string(uuid)
response
data: PavementZone | FacadeZone | RoofZone
meta: object
PavementZone
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at?: string(date-time)
created_by?: string(uuid)
id?: string(uuid)
client_code?: string
property_id?: string(uuid)
project_id?: string(uuid)
geometry?: string
area?: Area
has_comments?: boolean
comment_count?: integer
is_priority?: boolean
index?: integer | null
group_index?: integer | null
type: "pavement" = "pavement"
surface_type?: "concrete" | "asphalt" | "pavers" | "mixed" | "gravel" |
"unknown"
sub_surface_type?: "jpcp" | "crcp" | "rcc" | "pervious" | "stamped" |
"plain" | "precast" | "hma" | "wma" | "porous" | "rap" | "brick" |
null
traffic_type?: "Apron" | "Parking" | "Local Road" | "Collector Road" |
"Box Culvert" | "Curb & Gutter" | "Utility Corridor" |
"Bridge Deck" | "Blast Pad" | "Entrance" | "Car Parking" |
"Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D"
depth?: number
condition_index?: integer | null
condition_index_category?: "excellent" | "very_good" | "good" | "fair" |
"poor" | "very_poor" | "failed" | null
is_striped?: boolean | null
slab_count?: integer | null
curb_count?: integer | null
predicted_condition_index?: integer | null
previous_condition_index?: integer | null
scope_item_count?: integer
repair_count?: integer
depth_measurement?: Length
Area
value: number
unit: "sqft"
Length
value: number
unit: "ft" | "in" | "mil"
FacadeZone
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at?: string(date-time)
created_by?: string(uuid)
id?: string(uuid)
client_code?: string
property_id?: string(uuid)
project_id?: string(uuid)
geometry?: string
area?: Area
has_comments?: boolean
comment_count?: integer
is_priority?: boolean
index?: integer | null
group_index?: integer | null
type: "facade" = "facade"
face_id?: string(uuid)
facade_type?: "field" | "transition"
facade_subtype?: "concrete" | "masonry" | "stone_panelized" | "veneer" |
"eifs_defs" | "stucco" | "glass" | "sheet_metal" | "door" | "siding" |
"sealed_joints" | "mortar_joint" | "flashing"
is_ai?: boolean
review_status?: "pending" | "approved" | "revised" | null
perimeter?: Length
RoofZone
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at?: string(date-time)
created_by?: string(uuid)
id?: string(uuid)
client_code?: string
property_id?: string(uuid)
project_id?: string(uuid)
geometry?: string
area?: Area
has_comments?: boolean
comment_count?: integer
is_priority?: boolean
index?: integer | null
group_index?: integer | null
type: "roof" = "roof"
material?: "Asphalt Shingle" | "Modified Bitumen" | "Built-Up Roof" |
"EPDM" | "TPO" | "PVC" | "KEE" |
"Single-Ply Thermoplastic (variant unverified)" |
"Spray Polyurethane Foam" | "Liquid-Applied Coating" |
"Architectural Metal Panel" | "Structural Metal Panel" | "Clay Tile" |
"Concrete Tile" | "Slate" | "Wood Shake / Shingle" | "Synthetic" |
"Green / Vegetative Roof" | "Hot Rubberized Asphalt" | "Unknown" |
null
install_year?: integer | null
building_id?: string | null
is_irma?: boolean | null
securement?: ("Ballasted" | "Wind Ballasted" | "Adhered" |
"Mechanically Attached" | "Induction Welded")[] | null
num_roof_layers?: integer | null
has_tapered_insulation_system?: boolean | null
has_overflow_drainage_parapet_wall?: boolean | null
warranty_status?: "Active" | "Inactive" | "Unknown" | null
warranty_issuer?: string | null
warranty_expiration_date?: string(date) | null
surfacing_value_id?: string(uuid) | null
membrane_formula_value_id?: string(uuid) | null
cover_board_value_id?: string(uuid) | null
flat_insulation_value_id?: string(uuid) | null
vapor_barrier_value_id?: string(uuid) | null
substrate_board_value_id?: string(uuid) | null
deck_type_value_id?: string(uuid) | null
primary_drainage_value_id?: string(uuid) | null
install_type_value_id?: string(uuid) | null
membrane_thickness?: Length | null
cover_board_thickness?: Length | null
flat_insulation_thickness?: Length | null
deck_thickness?: Length | null
condition_index?: integer | null
condition_index_category?: "excellent" | "very_good" | "good" | "fair" |
"poor" | "very_poor" | "failed" | null
perimeter?: Length
scope_item_count?: integer
repair_count?: integer
material_code?: string | null
list_zones_by_project_id
list_zones_by_project_id
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/zones
List zones for the selected service with the selected filters.
parameters
project_id: string(uuid)
grouped?: boolean = false
created_by?: string(uuid)[] | null
Filter by user who created the zone
has_comments?: boolean | null
Filter by whether zone has comments
is_priority?: boolean | null
Filter by priority status
created_year?: integer[] | null
Filter by year of creation
surface_type?: ("concrete" | "asphalt" | "pavers" | "mixed" | "gravel" |
"unknown")[] | null
Filter by surface type
sub_surface_type?: ("jpcp" | "crcp" | "rcc" | "pervious" | "stamped" |
"plain" | "precast" | "hma" | "wma" | "porous" | "rap" | "brick")[] |
null
Filter by sub-surface type
traffic_type?: ("Apron" | "Parking" | "Local Road" | "Collector Road" |
"Box Culvert" | "Curb & Gutter" | "Utility Corridor" |
"Bridge Deck" | "Blast Pad" | "Entrance" | "Car Parking" |
"Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D")[] | null
Filter by traffic type
condition_index_categories?: ("excellent" | "very_good" | "good" |
"fair" | "poor" | "very_poor" | "failed")[] | null
Filter by condition index categories
is_striped?: boolean | null
Filter by striped status
facade_type?: ("field" | "transition")[] | null
Filter by facade type
facade_subtype?: ("concrete" | "masonry" | "stone_panelized" |
"veneer" | "eifs_defs" | "stucco" | "glass" | "sheet_metal" | "door" |
"siding" | "sealed_joints" | "mortar_joint" | "flashing")[] | null
Filter by facade subtype
is_ai?: boolean | null
Filter by AI-generated status
review_status?: ("pending" | "approved" | "revised")[] | null
Filter by facade review status
material?: ("Asphalt Shingle" | "Modified Bitumen" | "Built-Up Roof" |
"EPDM" | "TPO" | "PVC" | "KEE" |
"Single-Ply Thermoplastic (variant unverified)" |
"Spray Polyurethane Foam" | "Liquid-Applied Coating" |
"Architectural Metal Panel" | "Structural Metal Panel" | "Clay Tile" |
"Concrete Tile" | "Slate" | "Wood Shake / Shingle" | "Synthetic" |
"Green / Vegetative Roof" | "Hot Rubberized Asphalt" | "Unknown")[] |
null
Filter by roof material
building_id?: string | null
Filter by building ID (case-insensitive substring match)
surfacing_value_id?: string(uuid)[] | null
Filter by roof surfacing attribute value
response
data: (PavementZone | FacadeZone | RoofZone)[] | ZoneGroup[]
meta: object
PavementZone
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at?: string(date-time)
created_by?: string(uuid)
id?: string(uuid)
client_code?: string
property_id?: string(uuid)
project_id?: string(uuid)
geometry?: string
area?: Area
has_comments?: boolean
comment_count?: integer
is_priority?: boolean
index?: integer | null
group_index?: integer | null
type: "pavement" = "pavement"
surface_type?: "concrete" | "asphalt" | "pavers" | "mixed" | "gravel" |
"unknown"
sub_surface_type?: "jpcp" | "crcp" | "rcc" | "pervious" | "stamped" |
"plain" | "precast" | "hma" | "wma" | "porous" | "rap" | "brick" |
null
traffic_type?: "Apron" | "Parking" | "Local Road" | "Collector Road" |
"Box Culvert" | "Curb & Gutter" | "Utility Corridor" |
"Bridge Deck" | "Blast Pad" | "Entrance" | "Car Parking" |
"Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D"
depth?: number
condition_index?: integer | null
condition_index_category?: "excellent" | "very_good" | "good" | "fair" |
"poor" | "very_poor" | "failed" | null
is_striped?: boolean | null
slab_count?: integer | null
curb_count?: integer | null
predicted_condition_index?: integer | null
previous_condition_index?: integer | null
scope_item_count?: integer
repair_count?: integer
depth_measurement?: Length
Area
value: number
unit: "sqft"
Length
value: number
unit: "ft" | "in" | "mil"
FacadeZone
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at?: string(date-time)
created_by?: string(uuid)
id?: string(uuid)
client_code?: string
property_id?: string(uuid)
project_id?: string(uuid)
geometry?: string
area?: Area
has_comments?: boolean
comment_count?: integer
is_priority?: boolean
index?: integer | null
group_index?: integer | null
type: "facade" = "facade"
face_id?: string(uuid)
facade_type?: "field" | "transition"
facade_subtype?: "concrete" | "masonry" | "stone_panelized" | "veneer" |
"eifs_defs" | "stucco" | "glass" | "sheet_metal" | "door" | "siding" |
"sealed_joints" | "mortar_joint" | "flashing"
is_ai?: boolean
review_status?: "pending" | "approved" | "revised" | null
perimeter?: Length
RoofZone
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at?: string(date-time)
created_by?: string(uuid)
id?: string(uuid)
client_code?: string
property_id?: string(uuid)
project_id?: string(uuid)
geometry?: string
area?: Area
has_comments?: boolean
comment_count?: integer
is_priority?: boolean
index?: integer | null
group_index?: integer | null
type: "roof" = "roof"
material?: "Asphalt Shingle" | "Modified Bitumen" | "Built-Up Roof" |
"EPDM" | "TPO" | "PVC" | "KEE" |
"Single-Ply Thermoplastic (variant unverified)" |
"Spray Polyurethane Foam" | "Liquid-Applied Coating" |
"Architectural Metal Panel" | "Structural Metal Panel" | "Clay Tile" |
"Concrete Tile" | "Slate" | "Wood Shake / Shingle" | "Synthetic" |
"Green / Vegetative Roof" | "Hot Rubberized Asphalt" | "Unknown" |
null
install_year?: integer | null
building_id?: string | null
is_irma?: boolean | null
securement?: ("Ballasted" | "Wind Ballasted" | "Adhered" |
"Mechanically Attached" | "Induction Welded")[] | null
num_roof_layers?: integer | null
has_tapered_insulation_system?: boolean | null
has_overflow_drainage_parapet_wall?: boolean | null
warranty_status?: "Active" | "Inactive" | "Unknown" | null
warranty_issuer?: string | null
warranty_expiration_date?: string(date) | null
surfacing_value_id?: string(uuid) | null
membrane_formula_value_id?: string(uuid) | null
cover_board_value_id?: string(uuid) | null
flat_insulation_value_id?: string(uuid) | null
vapor_barrier_value_id?: string(uuid) | null
substrate_board_value_id?: string(uuid) | null
deck_type_value_id?: string(uuid) | null
primary_drainage_value_id?: string(uuid) | null
install_type_value_id?: string(uuid) | null
membrane_thickness?: Length | null
cover_board_thickness?: Length | null
flat_insulation_thickness?: Length | null
deck_thickness?: Length | null
condition_index?: integer | null
condition_index_category?: "excellent" | "very_good" | "good" | "fair" |
"poor" | "very_poor" | "failed" | null
perimeter?: Length
scope_item_count?: integer
repair_count?: integer
material_code?: string | null
ZoneGroup
group_name: string
zones: (PavementZone | FacadeZone | RoofZone)[]
list_inventory_categories
list_inventory_categories
Execution tool: execute
Endpoint: GET /api/v1/clients/{client_code}/inventory-categories
List Inventory Categories
parameters
client_code: string
response
data: InventoryCategory[]
meta: object
InventoryCategory
id: string(uuid)
name: string
trade: "Roof" | "Facade" | "Pavement" | "Landscaping" | null
counts_toward_parking_ratio: boolean
is_ada: boolean
is_client_specific: boolean
trade_is_override: boolean
list_inventory_items
list_inventory_items
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/inventory-items
List inventory items for the selected service with filters and a summary.
The returned items reflect the filters. The summary covers all active items in that service, even when filters narrow the item list.
parameters
project_id: string(uuid)
category_id?: string(uuid)[] | null
Filter by category
trade?: ("Roof" | "Facade" | "Pavement" | "Landscaping" | "null")[] |
null
Filter by effective trade. Use "null" to include facility-wide
(no-trade) items; combine with trade values to include both.
created_by?: string(uuid)[] | null
Filter by user who created the item
has_comments?: boolean | null
Filter by whether the item has comments
created_year?: integer[] | null
Filter by year of creation
q?: string | null
Search item names and comment content
response
data: InventoryItem[]
meta: InventoryItemListMeta
InventoryItem
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
project_id: string(uuid)
property_id: string(uuid)
name: string
category_id: string(uuid)
category_name: string
trade: "Roof" | "Facade" | "Pavement" | "Landscaping" | null
geometry: string
description: string | null
comment_count: integer
hvac_details: InventoryItemHvacDetails | null
InventoryItemHvacDetails
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
inventory_item_id: string(uuid)
label: string | null
equipment_type: string | null
make: string | null
model: string | null
serial_number: string | null
capacity_tons: number | null
electrical_service: string | null
year_manufactured: integer | null
belts: string | null
filters: string | null
ashrae_category: "window_air_conditioner" |
"residential_package_air_conditioner" |
"through_wall_air_conditioner" |
"water_cooled_package_air_conditioner" |
"residential_air_to_air_heat_pump" |
"commercial_air_to_air_heat_pump" |
"commercial_water_to_air_heat_pump" |
"single_zone_rooftop_air_conditioner" |
"multi_zone_rooftop_air_conditioner" | "steel_water_tube_boiler" |
"steel_fire_tube_boiler" | "cast_iron_boiler" | "electric_boiler" |
"burner" | "gas_or_oil_fired_furnace" |
"gas_or_electric_unit_heater" | "hot_water_or_steam_unit_heater" |
"electric_radiant_heater" | "hot_water_or_steam_radiant_heater" |
"diffuser_grille_or_register" | "induction_or_fan_coil_unit" |
"vav_or_double_duct_box" | "air_washer" | "ductwork" | "damper" |
"centrifugal_fan" | "axial_fan" | "propeller_fan" |
"roof_mounted_ventilating_fan" | "dx_water_or_steam_coil" |
"electric_coil" | "shell_and_tube_heat_exchanger" |
"reciprocating_compressor" | "reciprocating_packaged_chiller" |
"centrifugal_packaged_chiller" | "absorption_packaged_chiller" |
"galvanized_metal_cooling_tower" | "wood_cooling_tower" |
"ceramic_cooling_tower" | null
building: string | null
suite: string | null
expected_useful_life_years: integer | null
age_years: integer | null
projected_replacement_year: integer | null
years_past_useful_life: integer | null
InventoryItemListMeta
summary: InventoryItemSummary
InventoryItemSummary
item_count: integer
parking_ratio: number | null
ada_parking_ratio: number | null
list_roof_attribute_values
list_roof_attribute_values
Execution tool: execute
Endpoint: GET /api/v1/roof-attribute-values
List Roof Attribute Values
parameters
attribute?: "surfacing" | "membrane_formula" | "cover_board" |
"flat_insulation" | "vapor_barrier" | "substrate_board" |
"deck_type" | "primary_drainage" | "install_type" | null
response
data: RoofAttributeValue[]
meta: object
RoofAttributeValue
id: string(uuid)
attribute: "surfacing" | "membrane_formula" | "cover_board" |
"flat_insulation" | "vapor_barrier" | "substrate_board" |
"deck_type" | "primary_drainage" | "install_type"
name: string
client_code: string | null
Repairs, budgets, and scopes (8 operations)
Repairs, budgets, and scopes (8 operations)
Compare repair options, costs, budgets, and scope items.
list_repairs
list_repairs
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/repairs
List all repairs, optionally grouped by year or zone.
Repairs are SITE's suggested repair actions, each planned for a year and usually tied to a zone.
Repairs planned for the same year on the same area of the map are combined into one group row (type: "repair_group"), whose repairs list holds the individual repairs. Count and add up the repairs inside group rows, not the group rows themselves. Other rows are single repairs (type: "repair").
With group_by, the response is a list of buckets instead, each {key, repairs}. key is the year, or the zone index (null for repairs with no zone). Each bucket holds the same mix of single repairs and group rows.
The repairs for a selected service can belong to several repair scenarios, which are alternative plans. list_repair_scenarios gives each scenario's repair count and total price. To total one plan, filter by scenario_id; adding up every repair mixes alternatives together.
For a whole property or client, find the relevant services with list_projects first.
parameters
project_id: string(uuid)
group_by?: "year" | "zone" | null
type_name?: string[] | null
Filter by repair type name
year?: integer[] | null
Filter by year
scenario?: ("alternate" | "as_built" | "bid" | "default" | "optimal" |
"optional" | "self_performer" | "suggested")[] | null
Filter by scenario
scenario_id?: string(uuid)[] | null
Filter by scenario ID
expense_type?: ("Capital" | "Maintenance")[] | null
Filter by expense type
created_by?: string(uuid)[] | null
Filter by created by
has_comments?: boolean | null
Filter by whether repair has comments
has_annotations?: boolean | null
Filter by whether repair has annotations
created_year?: integer[] | null
Filter by year of creation
zone_traffic_type?: ("Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D")[] | null
Filter by traffic type
zone_surface_type?: ("concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown")[] | null
Filter by surface type
zone_sub_surface_type?: ("jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick")[] | null
Filter by sub-surface type
response
data: (RepairItem | RepairGroupItem)[] | RepairGroup[]
meta: object
RepairItem
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
zone_id: string(uuid) | null
client_code: string
property_id: string(uuid)
project_id: string(uuid)
annotation_ids: string(uuid)[]
year: integer
type_name: string
expense_type: "Capital" | "Maintenance"
depth: string | null
quantity: Quantity
quantity_is_override: boolean
unit_price: UnitPrice | null
unit_price_is_override: boolean
override_measure_imperial?: string | null
geometry_measure_imperial?: string | null
override_unit_price?: string | null
catalog_unit_price: UnitPrice | null
total_price: Price | null
comment_count: integer
geometry: string
is_zone_geometry: boolean
effective_geometry_source: "drawn" | "annotations" | "zone" |
"zone_snapshot"
completion_date: string(date) | null
area: Area
scenario: string
scenarios: ScenarioResponse[]
zone_index: integer | null
zone_traffic_type: "Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D" | null
zone_surface_type: "concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown" | null
zone_sub_surface_type: "jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick" | null
zone_condition_index: integer | null
zone_depth: number | null
zone_area: Area | null
zone_perimeter: number | null
type?: "repair" = "repair"
zone_depth_measurement: Length | null
zone_perimeter_measurement: Length | null
repair_price: Price | null
Quantity
amount: string
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
UnitPrice
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Price
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
Area
value: number
unit: "sqft"
ScenarioResponse
id: string(uuid)
name: string
Length
value: number
unit: "ft" | "in" | "mil"
RepairGroupItem
type?: "repair_group" = "repair_group"
name: string
repairs: RepairItem[]
RepairGroup
key: integer | null
repairs: (RepairItem | RepairGroupItem)[]
get_repair
get_repair
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/repairs/{id}
Get a repair.
parameters
project_id: string(uuid)
id: string(uuid)
response
data: Repair
meta: object
Repair
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
zone_id: string(uuid) | null
client_code: string
property_id: string(uuid)
project_id: string(uuid)
annotation_ids: string(uuid)[]
year: integer
type_name: string
expense_type: "Capital" | "Maintenance"
depth: string | null
quantity: Quantity
quantity_is_override: boolean
unit_price: UnitPrice | null
unit_price_is_override: boolean
override_measure_imperial?: string | null
geometry_measure_imperial?: string | null
override_unit_price?: string | null
catalog_unit_price: UnitPrice | null
total_price: Price | null
comment_count: integer
geometry: string
is_zone_geometry: boolean
effective_geometry_source: "drawn" | "annotations" | "zone" |
"zone_snapshot"
completion_date: string(date) | null
area: Area
scenario: string
scenarios: ScenarioResponse[]
zone_index: integer | null
zone_traffic_type: "Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D" | null
zone_surface_type: "concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown" | null
zone_sub_surface_type: "jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick" | null
zone_condition_index: integer | null
zone_depth: number | null
zone_area: Area | null
zone_perimeter: number | null
zone_depth_measurement: Length | null
zone_perimeter_measurement: Length | null
repair_price: Price | null
Quantity
amount: string
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
UnitPrice
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Price
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
Area
value: number
unit: "sqft"
ScenarioResponse
id: string(uuid)
name: string
Length
value: number
unit: "ft" | "in" | "mil"
list_repair_types
list_repair_types
Execution tool: execute
Endpoint: GET /api/v1/repair-types
List Repair Types
parameters
trade?: ("Roof" | "Facade" | "Pavement" | "Landscaping")[] | null
Filter by trade
response
data: RepairType[]
meta: object
RepairType
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
name: string
trade: "Roof" | "Facade" | "Pavement" | "Landscaping"
expense_type: "Capital" | "Maintenance"
list_repair_scenarios
list_repair_scenarios
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/repair-scenarios
List alternative repair plans for the selected service.
parameters
project_id: string(uuid)
response
data: RepairScenario[]
meta: object
RepairScenario
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
name: string
description: string | null
repair_count: integer
total_price: string | null
get_project_budget
get_project_budget
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/budget
Get the active budget for the selected service.
parameters
project_id: string(uuid)
response
data: Budget
meta: object
Budget
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
list_scope_items
list_scope_items
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/scope-items
List all scope items, optionally grouped by year or zone.
Scope items are the client's own work items for a service, with quantities and prices, each planned for a year and usually tied to a zone. A client can create one directly or promote one of SITE's suggested repairs into one.
Scope items planned for the same year on the same area of the map are combined into one group row (type: "scope_item_group"), whose scope_items list holds the individual items. Count and add up the items inside group rows, not the group rows themselves. Other rows are single items (type: "scope_item").
With group_by, the response is a list of buckets instead, each {key, scope_items}. key is the year, or the zone index (null for items with no zone).
For a whole property or client, find the relevant services with list_projects first.
parameters
project_id: string(uuid)
group_by?: "year" | "zone" | null
type_name?: string[] | null
Filter by scope item type name
year?: integer[] | null
Filter by year
scenario_id?: string(uuid)[] | null
Filter by scenario ID
expense_type?: ("Capital" | "Maintenance")[] | null
Filter by expense type
created_by?: string(uuid)[] | null
Filter by created by
has_comments?: boolean | null
Filter by whether a scope item has comments
has_annotations?: boolean | null
Filter by whether a scope item has annotations
created_year?: integer[] | null
Filter by year of creation
zone_traffic_type?: ("Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D")[] | null
Filter by traffic type
zone_surface_type?: ("concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown")[] | null
Filter by surface type
zone_sub_surface_type?: ("jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick")[] | null
Filter by sub-surface type
label_name?: string[] | null
Filter by label name (case-insensitive)
response
data: (ScopeItemItem | ScopeItemInnerGroup)[] | ScopeItemOuterGroup[]
meta: object
ScopeItemItem
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
zone_id: string(uuid) | null
client_code: string
property_id: string(uuid)
project_id: string(uuid)
annotation_ids: string(uuid)[]
year: integer
type_name: string
expense_type: "Capital" | "Maintenance"
depth: string | null
quantity: Quantity
quantity_is_override: boolean
unit_price: UnitPrice | null
unit_price_is_override: boolean
override_measure_imperial?: string | null
geometry_measure_imperial?: string | null
override_unit_price?: string | null
catalog_unit_price: UnitPrice | null
total_price: Price | null
comment_count: integer
geometry: string
is_zone_geometry: boolean
effective_geometry_source: "drawn" | "annotations" | "zone" |
"zone_snapshot"
completion_date: string(date) | null
area: Area
scenario: string
scenarios: ScenarioResponse[]
zone_index: integer | null
zone_traffic_type: "Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D" | null
zone_surface_type: "concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown" | null
zone_sub_surface_type: "jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick" | null
zone_condition_index: integer | null
zone_depth: number | null
zone_area: Area | null
zone_perimeter: number | null
labels: LabelResponse[]
on_non_terminal_bid_package: boolean
type?: "scope_item" = "scope_item"
zone_depth_measurement: Length | null
zone_perimeter_measurement: Length | null
Quantity
amount: string
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
UnitPrice
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Price
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
Area
value: number
unit: "sqft"
ScenarioResponse
id: string(uuid)
name: string
LabelResponse
name: string
Length
value: number
unit: "ft" | "in" | "mil"
ScopeItemInnerGroup
type?: "scope_item_group" = "scope_item_group"
name: string
scope_items: ScopeItemItem[]
ScopeItemOuterGroup
key: integer | null
scope_items: (ScopeItemItem | ScopeItemInnerGroup)[]
list_scope_item_types
list_scope_item_types
Execution tool: execute
Endpoint: GET /api/v1/scope-item-types
List Scope Item Types
parameters
trade?: ("Roof" | "Facade" | "Pavement" | "Landscaping")[] | null
Filter by trade
response
data: ScopeItemType[]
meta: object
ScopeItemType
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
name: string
trade: "Roof" | "Facade" | "Pavement" | "Landscaping"
expense_type: "Capital" | "Maintenance"
get_zone_cost_to_wait
get_zone_cost_to_wait
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/zones/{zone_id}/cost-to-wait
Forecast a pavement zone's PCI and deferred-repair cost if nothing is done.
parameters
project_id: string(uuid)
zone_id: string(uuid)
response
data: CostToWaitProjection | CostToWaitUnavailable
meta: object
CostToWaitProjection
available: true
climate: "mild" | "normal" | "severe"
traffic_class: "car" | "truck"
slab_count: integer | null
start_year: integer
years_of_analysis: integer
projection_by_year: CostToWaitProjectionPerYear[]
CostToWaitProjectionPerYear
year: integer
pci: integer
pci_with_repair: integer | null
recommendation: string
preventative: string | null
unit_price: UnitPrice
total_repair_cost: Price
cost_increase: CostToWaitCostIncrease
UnitPrice
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Price
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
CostToWaitCostIncrease
amount: Price
percent: integer | null
CostToWaitUnavailable
available: false
reason: "no_pci" | "unsupported_surface"
Photos and media (6 operations)
Photos and media (6 operations)
Find media, filter available imagery, and review media exceptions.
list_medias
list_medias
Execution tool: execute
Endpoint: GET /api/v1/media
List media available for a property. Set with_signed_urls=true to include temporary links for opening the file. Links to resized images and thumbnails are included when those versions are available.
parameters
with_signed_urls?: boolean = false
property_id: string(uuid)
capture_service?: ("Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Facade Walking Capture" | "Trailer Capture" |
"Low Level Capture" | "Mapping Walking Capture" | "Marketing Video" |
"Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload")[] | null
Filter by capture service(s). Can be repeated for multiple services.
captured_year?: integer[] | null
Filter by capture year(s). Can be repeated for multiple years.
response
data: Media[]
meta: object
Media
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
client_code: string
capture_service: "Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Facade Walking Capture" | "Trailer Capture" |
"Low Level Capture" | "Mapping Walking Capture" | "Marketing Video" |
"Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload" | null
trades: ("Roof" | "Facade" | "Pavement" | "Landscaping")[]
filename: string
latitude: number
longitude: number
absolute_altitude: number
relative_altitude: number
captured_at: string(date-time)
calibrated_focal_length?: number | null
focal_length_in_35mm_film?: number | null
exif_image_width?: integer | null
exif_image_height?: integer | null
media_type?: "PHOTO" | "VIDEO" | "THERMAL" = "PHOTO"
is_upside_down?: boolean = false
camera_direction_degree?: number | null
project_ids?: string(uuid)[]
tags?: MediaTag[]
creator?: UserIdentifiersSchema | null
MediaTag
id: string(uuid)
key: string
value: string
UserIdentifiersSchema
id: string(uuid)
first_name: string
last_name: string
get_media
get_media
Execution tool: execute
Endpoint: GET /api/v1/media/{id}
Get details for a media file. Set with_signed_urls=true to include temporary links for opening the file. Links to resized images and thumbnails are included when those versions are available.
parameters
id: string(uuid)
with_signed_urls?: boolean = false
response
data: Media
meta: object
Media
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
client_code: string
capture_service: "Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Facade Walking Capture" | "Trailer Capture" |
"Low Level Capture" | "Mapping Walking Capture" | "Marketing Video" |
"Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload" | null
trades: ("Roof" | "Facade" | "Pavement" | "Landscaping")[]
filename: string
latitude: number
longitude: number
absolute_altitude: number
relative_altitude: number
captured_at: string(date-time)
calibrated_focal_length?: number | null
focal_length_in_35mm_film?: number | null
exif_image_width?: integer | null
exif_image_height?: integer | null
media_type?: "PHOTO" | "VIDEO" | "THERMAL" = "PHOTO"
is_upside_down?: boolean = false
camera_direction_degree?: number | null
project_ids?: string(uuid)[]
tags?: MediaTag[]
creator?: UserIdentifiersSchema | null
MediaTag
id: string(uuid)
key: string
value: string
UserIdentifiersSchema
id: string(uuid)
first_name: string
last_name: string
get_media_filter_options
get_media_filter_options
Execution tool: execute
Endpoint: GET /api/v1/properties/{property_id}/media-filter-options
Get the years and services available for filtering a property's media.
capture_service narrows the years but leaves the full service list available. This operation requires permission to read media.
parameters
property_id: string(uuid)
capture_service?: ("Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Facade Walking Capture" | "Trailer Capture" |
"Low Level Capture" | "Mapping Walking Capture" | "Marketing Video" |
"Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload")[] | null
Filter by capture service(s). Can be repeated for multiple services.
response
data: MediaFilterOptions
meta: object
MediaFilterOptions
years: integer[]
services: ("Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Low Level Capture 75ft" |
"Facade Walking Capture" | "Trailer Capture" | "Pavement Bids" |
"Roofing Bids" | "Roofing Work Order" | "PCI Analysis" |
"Pavement PCI & Repair Plan 1 Year" |
"Pavement PCI & Repair Plan 2 Year" |
"Pavement PCI & Repair Plan 3 Year" |
"Pavement PCI & Repair Plan 5 Year" |
"Pavement PCI & Repair Plan 10 Year" | "RCI Analysis" |
"Roofing RCI & Repair Plan 1 Year" |
"Roofing RCI & Repair Plan 2 Year" |
"Roofing RCI & Repair Plan 3 Year" |
"Roofing RCI & Repair Plan 5 Year" |
"Roofing RCI & Repair Plan 10 Year" | "FCI Analysis" |
"Facade Defect Detection" | "LCI Analysis" |
"Landscaping Measurement" | "Landscaping Defect Detection" |
"Inventory AI" | "Low Level Capture" | "Mapping Walking Capture" |
"Marketing Video" | "Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload" | "Utility")[]
get_media_facets
get_media_facets
Execution tool: execute
Endpoint: GET /api/v1/media/facets
Get media facet values without loading the media collection.
parameters
property_id: string(uuid)
capture_service?: ("Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Facade Walking Capture" | "Trailer Capture" |
"Low Level Capture" | "Mapping Walking Capture" | "Marketing Video" |
"Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload")[] | null
Filter by capture service(s). Can be repeated for multiple services.
captured_year?: integer[] | null
Filter by capture year(s). Can be repeated for multiple years.
response
data: MediaFacets
meta: object
MediaFacets
capture_service: FacetValue[]
captured_year: FacetValue[]
FacetValue
value: string | integer | boolean | string(uuid)
count: integer
list_media_exceptions
list_media_exceptions
Execution tool: execute
Endpoint: GET /api/v1/media-exception
List media processing issues visible to your account.
parameters
property_id?: string(uuid) | null
capture_service?: "Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Facade Walking Capture" | "Trailer Capture" |
"Low Level Capture" | "Mapping Walking Capture" | "Marketing Video" |
"Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload" | null
response
data: MediaException[]
meta: object
MediaException
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
capture_service: "Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Facade Walking Capture" | "Trailer Capture" |
"Low Level Capture" | "Mapping Walking Capture" | "Marketing Video" |
"Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload" | null
filename: string
failed_at: string(date-time)
user_failed_message: string
get_media_exception
get_media_exception
Execution tool: execute
Endpoint: GET /api/v1/media-exception/{id}
Get a media processing issue and its customer-facing message.
parameters
id: string(uuid)
response
data: MediaException
meta: object
MediaException
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
capture_service: "Mapping Capture" | "Roof Capture (RGB)" |
"Roof Capture (Thermal)" | "Roof Capture (RGB + Thermal)" |
"Facade Capture (RGB)" | "Facade Capture (Thermal)" |
"Facade Capture (RGB + Thermal)" |
"Roof (RGB) + Facade (RGB) Bundle" |
"Roof (RGB) + Facade (Thermal) Bundle" |
"Roof (RGB) + Facade (RGB + Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB) Bundle" |
"Roof (Thermal) + Facade (Thermal) Bundle" |
"Roof (Thermal) + Facade (RGB + Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB) Bundle" |
"Roof (RGB + Thermal) + Facade (Thermal) Bundle" |
"Roof (RGB + Thermal) + Facade (RGB + Thermal) Bundle" |
"Landscaping Capture" | "Facade Walking Capture" | "Trailer Capture" |
"Low Level Capture" | "Mapping Walking Capture" | "Marketing Video" |
"Marketing Photos" | "Mapping Super Capture 3D" |
"Facade Super Capture 3D" | "Smart Oblique 3D" | "Other" |
"Orbit Flight" | "User Upload" | "Contractor Upload" | null
filename: string
failed_at: string(date-time)
user_failed_message: string
Maps and comments (7 operations)
Maps and comments (7 operations)
Read map annotations, property comments, and boundary review assignments.
list_project_map_annotations
list_project_map_annotations
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/map-annotations
List map annotations for the selected service with the selected filters.
parameters
project_id: string(uuid)
category_name?: string[] | null
Filter by annotation category
created_by?: string(uuid)[] | null
Filter by user who created the annotation
has_comments?: boolean | null
Filter by whether annotation has comments
created_year?: integer[] | null
Filter by year of creation
q?: string | null
Search in annotation names and comment content
severity?: ("low" | "medium" | "high")[] | null
Filter by severity (low, medium, high)
zone_id?: string(uuid)[] | null
Filter by zone ID
repair_type_name?: string[] | null
Filter by the type name of a linked Repair
response
data: ProjectMapAnnotation[]
meta: object
ProjectMapAnnotation
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
client_code: string
name: string
full_name: string
description: string | null
type: "shape" | "text"
category_name: string | null
is_client_viewable: boolean
geometry: string
geometry_type: "Point" | "Line" | "Polygon"
area_sqft: Area | null
perimeter_ft: number | null
length_ft: number | null
has_comments: boolean
comment_count: integer
group_id: string(uuid) | null
project_id: string(uuid)
zone_id: string(uuid) | null
zone_index: integer | null
severity: "low" | "medium" | "high" | null
deduct_value_type: string | null
component: string | null
repair_ids: string(uuid)[]
scope_item_ids: string(uuid)[]
area: Area | null
perimeter: Length | null
length: Length | null
Area
value: number
unit: "sqft"
Length
value: number
unit: "ft" | "in" | "mil"
list_property_map_annotations
list_property_map_annotations
Execution tool: execute
Endpoint: GET /api/v1/properties/{property_id}/map-annotations
List a property's map annotations with the selected filters.
parameters
property_id: string(uuid)
category?: string[] | null
Filter by annotation category
created_by?: string(uuid)[] | null
Filter by user who created the annotation
has_comments?: boolean | null
Filter by whether annotation has comments
created_year?: integer[] | null
Filter by year of creation
q?: string | null
Search in annotation names and comment content
response
data: PropertyMapAnnotation[]
meta: object
PropertyMapAnnotation
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
client_code: string
name: string
full_name: string
description: string | null
type: "shape" | "text"
category_name: string | null
is_client_viewable: boolean
geometry: string
geometry_type: "Point" | "Line" | "Polygon"
area_sqft: Area | null
perimeter_ft: number | null
length_ft: number | null
has_comments: boolean
comment_count: integer
group_id: string(uuid) | null
property_id: string(uuid)
is_auto_name: boolean
area: Area | null
perimeter: Length | null
length: Length | null
Area
value: number
unit: "sqft"
Length
value: number
unit: "ft" | "in" | "mil"
list_map_annotation_categories
list_map_annotation_categories
Execution tool: execute
Endpoint: GET /api/v1/clients/{client_code}/map-annotation-categories
List Map Annotation Categories
parameters
client_code: string
trade?: "Roof" | "Facade" | "Pavement" | "Landscaping" | "null" | null
Filter by trade. Use "null" to get property categories only (no
trade), or a specific trade value to filter by that trade. Omit to
get all categories. Roof returns the flat (component,
deduct_value_type, name) picklist as a single list; the client
builds the cascade by grouping on those columns.
response
data: (RoofMapAnnotationCategory | MapAnnotationCategory)[]
meta: object
RoofMapAnnotationCategory
id: string(uuid)
name: string
abbreviation: string | null
trade: "Roof" | "Facade" | "Pavement" | "Landscaping" | null
is_client_specific: boolean
component: string
deduct_value_type: string
MapAnnotationCategory
id: string(uuid)
name: string
abbreviation: string | null
trade: "Roof" | "Facade" | "Pavement" | "Landscaping" | null
is_client_specific: boolean
list_project_map_annotation_groups
list_project_map_annotation_groups
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/map-annotation-groups
List map annotation groups for the selected service.
parameters
project_id: string(uuid)
response
data: ProjectMapAnnotationGroup[]
meta: object
ProjectMapAnnotationGroup
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
client_code: string
name: string
project_id: string(uuid)
list_property_map_annotation_groups
list_property_map_annotation_groups
Execution tool: execute
Endpoint: GET /api/v1/properties/{property_id}/map-annotation-groups
List map annotation groups.
parameters
property_id: string(uuid)
response
data: PropertyMapAnnotationGroup[]
meta: object
PropertyMapAnnotationGroup
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
client_code: string
name: string
property_id: string(uuid)
list_property_comments
list_property_comments
Execution tool: execute
Endpoint: GET /api/v1/properties/{property_id}/comments
List all comments.
parameters
property_id: string(uuid)
zone_id?: string(uuid) | null
annotation_id?: string(uuid) | null
repair_id?: string(uuid) | null
scope_item_id?: string(uuid) | null
inventory_item_id?: string(uuid) | null
response
data: Comment[]
meta: object
Comment
updated_at?: string(date-time) | null
updated_by?: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
property_id: string(uuid)
annotation_id: string(uuid) | null
zone_id: string(uuid) | null
repair_id: string(uuid) | null
scope_item_id: string(uuid) | null
inventory_item_id: string(uuid) | null
author: UserIdentifiersSchema
unsanitized_content: string
UserIdentifiersSchema
id: string(uuid)
first_name: string
last_name: string
list_pending_tpa_property_boundaries
list_pending_tpa_property_boundaries
Execution tool: execute
Endpoint: GET /api/v1/boundary-review/properties
List pending property boundaries assigned to the signed-in user for review.
parameters: none
response
data: TpaPropertyBoundary[]
meta: object
TpaPropertyBoundary
property_id: string(uuid)
client_code: string
property_name: string | null
address: Address | null
geometry: string
Address
address_line_1: string
address_line_2?: string | null
city: string
state: string | null
zip_code?: string | null
country: string
Vendors and bids (5 operations)
Vendors and bids (5 operations)
Review vendors, quotes, and bid packages.
list_vendors
list_vendors
Execution tool: execute
Endpoint: GET /api/v1/vendors
List vendors available to your organization.
parameters: none
response
data: VendorOrg[]
meta: object
VendorOrg
id: string(uuid)
name: string
list_vendor_quotes
list_vendor_quotes
Execution tool: execute
Endpoint: GET /api/v1/vendor-quotes
List vendor quotes available to the signed-in user for the selected service.
parameters
project_id: string(uuid)
response
data: VendorQuoteListItem[]
meta: object
VendorQuoteListItem
vendor_quote: VendorQuote
package: BidPackage
project_id: string(uuid)
lines: VendorQuoteListLine[]
award_outcome: "pending" | "won" | "lost" | "declined"
award: VendorPackageAward | null
VendorQuote
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_package_id: string(uuid)
project_id: string(uuid)
vendor_id: string(uuid)
vendor: VendorOrg
status: "in_progress" | "submitted" | "awarded" | "rejected"
awarded_at: string(date-time) | null
client_code: string
property_id: string(uuid)
VendorOrg
id: string(uuid)
name: string
BidPackage
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
project_id: string(uuid)
origin_id: string(uuid)
client_code: string
property_id: string(uuid)
status: "draft" | "open" | "awarded" | "finalized" | "canceled"
version: integer
has_unpublished_changes: boolean
bid_due_at: string(date-time) | null
name: string | null
canceled_at: string(date-time) | null
canceled_by: string(uuid) | null
base_line_count: integer
vendor_quote_count: integer
vendor_quote_status_counts?: VendorQuoteStatusCounts | null
VendorQuoteStatusCounts
in_progress: integer
submitted: integer
awarded: integer
rejected: integer
VendorQuoteListLine
bid_line_item: BidLineItem
scope: VendorQuoteScopeWorkItem
BidLineItem
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_package_id: string(uuid)
source_scope_item_id: string(uuid) | null
vendor_id: string(uuid) | null
base_bid_line_item_id: string(uuid) | null
client_code: string
property_id: string(uuid)
VendorQuoteScopeWorkItem
id: string(uuid)
type_id: string(uuid)
type_name: string
year: integer
geometry: string | null
quantity: Quantity
quantity_is_override: boolean
area: Area
expense_type: "Capital" | "Maintenance" | null
zone_index: integer | null
zone_traffic_type: "Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D" | null
zone_surface_type: "concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown" | null
zone_sub_surface_type: "jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick" | null
withdrawn?: boolean = false
Quantity
amount: string
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Area
value: number
unit: "sqft"
VendorPackageAward
vendor_quote_id: string(uuid)
vendor: VendorOrg
awarded_at: string(date-time)
items: VendorAwardItem[]
unawarded_base_bid_line_item_ids: string(uuid)[]
totals: Price[]
VendorAwardItem
kind: "base" | "alternate" | "addon" | "fee"
id: string(uuid)
bid_line_item_id: string(uuid) | null
base_bid_line_item_id: string(uuid) | null
label: string
scope: VendorQuoteScopeWorkItem | null
price: Price | null
Price
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
get_vendor_quote
get_vendor_quote
Execution tool: execute
Endpoint: GET /api/v1/vendor-quotes/{vendor_quote_id}
Get vendor quote detail with scrubbed scope.
parameters
vendor_quote_id: string(uuid)
response
data: VendorQuoteDetail
meta: object
VendorQuoteDetail
vendor_quote: VendorQuote
package: BidPackage
lines: VendorQuotePackageLine[]
fees: VendorQuoteFee[]
addons: VendorQuotePackageLine[]
award_outcome: "pending" | "won" | "lost" | "declined"
award: VendorPackageAward | null
VendorQuote
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_package_id: string(uuid)
project_id: string(uuid)
vendor_id: string(uuid)
vendor: VendorOrg
status: "in_progress" | "submitted" | "awarded" | "rejected"
awarded_at: string(date-time) | null
client_code: string
property_id: string(uuid)
VendorOrg
id: string(uuid)
name: string
BidPackage
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
project_id: string(uuid)
origin_id: string(uuid)
client_code: string
property_id: string(uuid)
status: "draft" | "open" | "awarded" | "finalized" | "canceled"
version: integer
has_unpublished_changes: boolean
bid_due_at: string(date-time) | null
name: string | null
canceled_at: string(date-time) | null
canceled_by: string(uuid) | null
base_line_count: integer
vendor_quote_count: integer
vendor_quote_status_counts?: VendorQuoteStatusCounts | null
VendorQuoteStatusCounts
in_progress: integer
submitted: integer
awarded: integer
rejected: integer
VendorQuotePackageLine
bid_line_item: BidLineItem
scope: VendorQuoteScopeWorkItem
response: QuoteLineItem | null
attestation?: LineAttestation | null
BidLineItem
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_package_id: string(uuid)
source_scope_item_id: string(uuid) | null
vendor_id: string(uuid) | null
base_bid_line_item_id: string(uuid) | null
client_code: string
property_id: string(uuid)
VendorQuoteScopeWorkItem
id: string(uuid)
type_id: string(uuid)
type_name: string
year: integer
geometry: string | null
quantity: Quantity
quantity_is_override: boolean
area: Area
expense_type: "Capital" | "Maintenance" | null
zone_index: integer | null
zone_traffic_type: "Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D" | null
zone_surface_type: "concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown" | null
zone_sub_surface_type: "jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick" | null
withdrawn?: boolean = false
Quantity
amount: string
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Area
value: number
unit: "sqft"
QuoteLineItem
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_line_item_id: string(uuid)
vendor_id: string(uuid)
response_type: "accept" | "reject"
quoted_price: string | null
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
note: string | null
client_accepted_at: string(date-time) | null
client_code: string
property_id: string(uuid)
LineAttestation
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_line_item_id: string(uuid)
vendor_quote_id: string(uuid)
vendor_id: string(uuid)
completion_date: string(date)
materials: string | null
client_code: string
property_id: string(uuid)
VendorQuoteFee
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
vendor_quote_id: string(uuid)
vendor_id: string(uuid)
name: string
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
client_accepted_at: string(date-time) | null
client_code: string
property_id: string(uuid)
VendorPackageAward
vendor_quote_id: string(uuid)
vendor: VendorOrg
awarded_at: string(date-time)
items: VendorAwardItem[]
unawarded_base_bid_line_item_ids: string(uuid)[]
totals: Price[]
VendorAwardItem
kind: "base" | "alternate" | "addon" | "fee"
id: string(uuid)
bid_line_item_id: string(uuid) | null
base_bid_line_item_id: string(uuid) | null
label: string
scope: VendorQuoteScopeWorkItem | null
price: Price | null
Price
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
list_bid_packages
list_bid_packages
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/bid-packages
List bid packages for the selected service, including active base lines.
parameters
project_id: string(uuid)
response
data: BidPackageListItem[]
meta: object
BidPackageListItem
package: BidPackage
lines: ClientBidPackageLine[]
award: PackageAward | null
BidPackage
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
project_id: string(uuid)
origin_id: string(uuid)
client_code: string
property_id: string(uuid)
status: "draft" | "open" | "awarded" | "finalized" | "canceled"
version: integer
has_unpublished_changes: boolean
bid_due_at: string(date-time) | null
name: string | null
canceled_at: string(date-time) | null
canceled_by: string(uuid) | null
base_line_count: integer
vendor_quote_count: integer
vendor_quote_status_counts?: VendorQuoteStatusCounts | null
VendorQuoteStatusCounts
in_progress: integer
submitted: integer
awarded: integer
rejected: integer
ClientBidPackageLine
bid_line_item: BidLineItem
scope: BidScopeItem
BidLineItem
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_package_id: string(uuid)
source_scope_item_id: string(uuid) | null
vendor_id: string(uuid) | null
base_bid_line_item_id: string(uuid) | null
client_code: string
property_id: string(uuid)
BidScopeItem
id: string(uuid)
type_id: string(uuid)
type_name: string
year: integer
geometry: string
quantity: Quantity
quantity_is_override: boolean
area: Area
expense_type: "Capital" | "Maintenance" | null
zone_index: integer | null
zone_traffic_type: "Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D" | null
zone_surface_type: "concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown" | null
zone_sub_surface_type: "jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick" | null
withdrawn?: boolean = false
unit_price: UnitPrice | null
total_price: Price | null
Quantity
amount: string
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Area
value: number
unit: "sqft"
UnitPrice
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Price
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
PackageAward
vendor_quote_id: string(uuid)
vendor: VendorOrg
awarded_at: string(date-time)
items: AwardItem[]
unawarded_base_bid_line_item_ids: string(uuid)[]
totals: Price[]
VendorOrg
id: string(uuid)
name: string
AwardItem
kind: "base" | "alternate" | "addon" | "fee"
id: string(uuid)
bid_line_item_id: string(uuid) | null
base_bid_line_item_id: string(uuid) | null
label: string
scope: BidScopeItem | null
price: Price | null
get_bid_package
get_bid_package
Execution tool: execute
Endpoint: GET /api/v1/projects/{project_id}/bid-packages/{bid_package_id}
Get bid package detail with vendor responses.
parameters
project_id: string(uuid)
bid_package_id: string(uuid)
response
data: BidPackageDetail
meta: object
BidPackageDetail
package: BidPackage
lines: ClientBidPackageLine[]
vendor_quotes: ClientVendorQuoteDetail[]
BidPackage
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
project_id: string(uuid)
origin_id: string(uuid)
client_code: string
property_id: string(uuid)
status: "draft" | "open" | "awarded" | "finalized" | "canceled"
version: integer
has_unpublished_changes: boolean
bid_due_at: string(date-time) | null
name: string | null
canceled_at: string(date-time) | null
canceled_by: string(uuid) | null
base_line_count: integer
vendor_quote_count: integer
vendor_quote_status_counts?: VendorQuoteStatusCounts | null
VendorQuoteStatusCounts
in_progress: integer
submitted: integer
awarded: integer
rejected: integer
ClientBidPackageLine
bid_line_item: BidLineItem
scope: BidScopeItem
BidLineItem
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_package_id: string(uuid)
source_scope_item_id: string(uuid) | null
vendor_id: string(uuid) | null
base_bid_line_item_id: string(uuid) | null
client_code: string
property_id: string(uuid)
BidScopeItem
id: string(uuid)
type_id: string(uuid)
type_name: string
year: integer
geometry: string
quantity: Quantity
quantity_is_override: boolean
area: Area
expense_type: "Capital" | "Maintenance" | null
zone_index: integer | null
zone_traffic_type: "Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D" | null
zone_surface_type: "concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown" | null
zone_sub_surface_type: "jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick" | null
withdrawn?: boolean = false
unit_price: UnitPrice | null
total_price: Price | null
Quantity
amount: string
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Area
value: number
unit: "sqft"
UnitPrice
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
unit: "square_feet" | "linear_feet" | "square_meters" |
"linear_meters" | "lump_sum" | "each"
Price
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
ClientVendorQuoteDetail
vendor_quote: VendorQuote
line_items: QuoteLineItem[]
fees: VendorQuoteFee[]
addons: VendorQuotePackageLine[]
VendorQuote
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_package_id: string(uuid)
project_id: string(uuid)
vendor_id: string(uuid)
vendor: VendorOrg
status: "in_progress" | "submitted" | "awarded" | "rejected"
awarded_at: string(date-time) | null
client_code: string
property_id: string(uuid)
VendorOrg
id: string(uuid)
name: string
QuoteLineItem
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_line_item_id: string(uuid)
vendor_id: string(uuid)
response_type: "accept" | "reject"
quoted_price: string | null
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
note: string | null
client_accepted_at: string(date-time) | null
client_code: string
property_id: string(uuid)
VendorQuoteFee
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
vendor_quote_id: string(uuid)
vendor_id: string(uuid)
name: string
amount: string
currency: "USD" | "EUR" | "SEK" | "JPY" | "CAD"
client_accepted_at: string(date-time) | null
client_code: string
property_id: string(uuid)
VendorQuotePackageLine
bid_line_item: BidLineItem
scope: VendorQuoteScopeWorkItem
response: QuoteLineItem | null
attestation?: LineAttestation | null
VendorQuoteScopeWorkItem
id: string(uuid)
type_id: string(uuid)
type_name: string
year: integer
geometry: string | null
quantity: Quantity
quantity_is_override: boolean
area: Area
expense_type: "Capital" | "Maintenance" | null
zone_index: integer | null
zone_traffic_type: "Apron" | "Parking" | "Local Road" |
"Collector Road" | "Box Culvert" | "Curb & Gutter" |
"Utility Corridor" | "Bridge Deck" | "Blast Pad" | "Entrance" |
"Car Parking" | "Dolly Pad" | "Drive Lanes-Car Traffic" |
"Drive Lanes-Car Traffic, Car Parking" | "Drive Lanes-Truck Traffic" |
"Drive Lanes-Truck Traffic, Car Parking" |
"Drive Lanes-Truck Traffic, Trailer Parking" | "Drive Thru" |
"Dumpster Pad" | "Filling Station" | "High Priority Area" |
"Highway" | "Ramp" | "Scale" | "Shoulder Lane" | "Sidewalks" |
"Roadway" | "Runway" | "Storage" | "Taxiway" | "Trailer Parking" |
"Trench Drain" | "Truck Dock" | "Truck Dock & Vehicle Parking" |
"Utility Area" | "Utility Cover" | "Utility Pad" | "Valley Gutter" |
"Vehicle Parking" | "Zone D" | null
zone_surface_type: "concrete" | "asphalt" | "pavers" | "mixed" |
"gravel" | "unknown" | null
zone_sub_surface_type: "jpcp" | "crcp" | "rcc" | "pervious" |
"stamped" | "plain" | "precast" | "hma" | "wma" | "porous" | "rap" |
"brick" | null
withdrawn?: boolean = false
LineAttestation
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
bid_line_item_id: string(uuid)
vendor_quote_id: string(uuid)
vendor_id: string(uuid)
completion_date: string(date)
materials: string | null
client_code: string
property_id: string(uuid)
Tags (1 operation)
Tags (1 operation)
Find available tags.
list_tags
list_tags
Execution tool: execute
Endpoint: GET /api/v1/tags
List all tags, grouped by client code and key.
parameters
client_code?: string | null
Client code to filter tags
include_entity_counts?: boolean = false
Include entity counts
response
data: TagGroup[]
meta: object
TagGroup
client_code: string
key: string
values: TagValue[]
TagValue
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
value: string
entity_counts?: {string: integer} | null
Reports (1 operation)
Reports (1 operation)
Request a pavement executive summary report.
create_report
create_report
Execution tool: execute_write
Endpoint: POST /api/v1/report
Generate and email a pavement executive summary PDF.
The PDF is emailed to the signed-in user. Returns a report ID after queuing generation, not a download URL or delivery confirmation. Repeating the request can generate and email another report.
parameters
report_type: "pavement_executive_summary"
project_id: string(uuid)
response
result: string(uuid)
Account and access (7 operations)
Account and access (7 operations)
Check account details and permissions.
The following parameter lists show the fields relevant to customer accounts. Your SITE permissions still apply.
get_me
get_me
Execution tool: execute
Endpoint: GET /api/v1/me
Get the authenticated user's information including permissions.
parameters: none
response
data: MeResponse
meta: object
MeResponse
user_id: string(uuid)
permissions: {string: string[]}
client_code: string | null
get_user_profile_settings
get_user_profile_settings
Execution tool: execute
Endpoint: GET /api/v1/users/{user_id}/settings
Get profile settings for a user.
parameters
user_id: string(uuid)
response
data: ProfileSettings
meta: object
ProfileSettings
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid) | null
user_id: string(uuid)
system_of_measurement: "imperial" | "metric"
language: string
appearance: "light" | "dark" | "system"
list_property_user_permissions
list_property_user_permissions
Execution tool: execute
Endpoint: GET /api/v1/properties/{property_id}/user-permissions
List Property User Permissions
parameters
property_id: string(uuid)
response
data: UserPropertyPermission[]
meta: object
UserPropertyPermission
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
property_id: string(uuid)
property_name: string
user_id: string(uuid)
first_name: string
last_name: string
email: string
user_type: string
The account's role returned by SITE.
write_access: boolean
list_user_property_permissions
list_user_property_permissions
Execution tool: execute
Endpoint: GET /api/v1/users/{user_id}/property-permissions
List all property permissions for a user.
parameters
user_id: string(uuid)
response
data: UserPropertyPermission[]
meta: object
UserPropertyPermission
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid)
property_id: string(uuid)
property_name: string
user_id: string(uuid)
first_name: string
last_name: string
email: string
user_type: string
The account's role returned by SITE.
write_access: boolean
list_allowed_email_patterns
list_allowed_email_patterns
Execution tool: execute
Endpoint: GET /api/v1/allowed-email-patterns
List allowed email patterns.
parameters
client_code?: string | null
Only return patterns applicable to this client
response
data: AllowedEmailPattern[]
meta: object
AllowedEmailPattern
created_at: string(date-time)
created_by: string(uuid)
id: string(uuid)
pattern: string
client_code?: string | null
list_users
list_users
Execution tool: execute
Endpoint: GET /api/v1/users
List all users.
parameters
client_code?: string | null
email?: string | null
user_type?: ("client_user" | "client_admin")[]
response
data: User[]
meta: object
User
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid) | null
id: string(uuid)
first_name: string
last_name: string
email: string
user_type: string
The account's role returned by SITE.
client_code?: string | null
client_name?: string | null
vendor_id?: string(uuid) | null
get_user
get_user
Execution tool: execute
Endpoint: GET /api/v1/users/{id}
Get a user by ID.
parameters
id: string(uuid)
response
data: User
meta: object
User
updated_at: string(date-time) | null
updated_by: string(uuid) | null
created_at: string(date-time)
created_by: string(uuid) | null
id: string(uuid)
first_name: string
last_name: string
email: string
user_type: string
The account's role returned by SITE.
client_code?: string | null
client_name?: string | null
vendor_id?: string(uuid) | null
