Download OpenAPI specification:
How to Use Our REST APIs.
System Surveyor's APIs enable bi-directional communication with it's platform. These APIs provide a software layer connecting and optimizing the network to allow your users to create / edit / retrieve sites & surveys, along with all of the associated data.
The domain name for our API is https://openapi.systemsurveyor.com. This needs to be prefixed to all requests.
In order to utilize these APIs, you must have an Enterprise account, with a valid plan. Your account administrator must create an
access_token
for you, which is required for each request.
Login to System Surveyor using JWT token authentication
If SSO is live for the user's account users will be redirected to login with SSO instead of with username/password authentication.
email required | string |
password required | string |
force_login | boolean |
captcha_token | string The captcha token is used to verify that the user is not a bot. This token is generated by the client-side captcha library and should be sent to the server for verification. This field is optional and should only be used by the web client. |
{- "email": "johndoe@gmail.com",
- "password": "Qwerty123",
- "force_login": true,
- "captcha_token": "string"
}
{- "user_id": 950945,
- "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0eXBlIjoiYWNjZXNzIiwidXNlcl9pZCI6MjAwOSwicm9sZSI6MiwiZXhwIjoxODA1MjEwMzY0LCJpYXQiOjE2NDk2OTAzNjQsInRlYW1fcm9sZXMiOnsiMTg1NSI6MiwiMjA3NCI6MiwiMTAwMjgiOjJ9fQ.k--bt3XHKLRNDZMl3Jmc0qwiJQp_B5XEAecxPUNoCiCfirD6G82Fes8nbtoxCFBm1-Y2Dj6hy036b_B8DemSQk0SdpXuCF-jFb2LRouzohGZ-psiJ40DBe7JLwRNtq09nmLcEvtUIokOpcHiPTsqdnlXt8bAea09ECC9quYZ3ufnH6Gpr_P4EBOqE_I-FwbUqCHCiakbqlXDkim1FTs03wdGVIC7nY8Ika-w3q5ZFK88dqrKtmuK-c0uXnYfQfqelohLJTKfZiGc52qvIUX3FRdusecJQbijJeqJDjX7_Zfa1YYzYx9BC5dqb53J4bbAMUuYHEiMy4Thf4cAJGzG9g",
- "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0eXBlIjoicmVmcmVzaCIsInVzZXJfaWQiOjIwMDksInJvbGUiOjIsImV4cCI6NTM5MDQ0MTAzNjQsImlhdCI6MTY0OTY5MDM2NH0.3Dmrn6_IxHS-EzSGGNAAXFuPRQ0GKjbgmWjK2F4i0hm1iI-DV1aMulonGmHRFDIl33sZYjHQjyLE4LN2quKC6ThjrvkEfgDGaYaIXbTk0mxm1VzqUUbocTuK_N8DITsvhDw31XPAiQ4Sz0mI9rxNb84zdHOgeaVdVZR9K3ssXWKuU9pAk2qEPJiCIw9cJQcjIGNcGlUpphOey5KddDqkq17uZNcA0uJMi6QPvDHZi7rBYXVOPwNY_xqWjrubMMto2vgbWcNOKIzRs00o1TsSTVKhZOwAzctjTIijKnwXvghzLgROiyR5OIT7ZgTVmr7HYhhb7GCyH7LgVLfeKGELew",
- "first_login_ts": 0
}
Returns a new valid access token given a valid refresh token.
object |
refresh_token required | string |
{- "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0eXBlIjoicmVmcmVzaCIsInJvbGUiOjIsInVzZXJfaWQiOjMwNDcsImV4cCI6MTYyNTkwODg3MywiaWF0IjoxNjI1MzA0MDczfQ.AhgGvP9vyJmwXpo3f1_q3yI1rvP47LFV_UPL9FcGbWKa8tfR9nop6rqSXBRNx1ZflM-rNUbQB63DQqRIXXXvPo0df3u9CQsrcMkNllmBzfoCv_vBlcx0k53CmUz0A9tINF5ypA30i57uUVQmvOf0JEf83-Xi6DkjCf2_e7mzc_Ab4XcYVpRrFUxuV5i1L0OL7U-V9CjcA1J92rzB6ZCPUi9v8vdziOcEdCYZRzGM1oxO07rpZkPj_0KOeuh7ecqW3s51z8R6_Sj8bOz0TuAnrDBmArfzbS3TRrNPBKtADhV62oCbRF8PuNjGZa89V6V_TkJmrZsMCZiHGXRPn63Dig"
}
{- "token": "eyJ0eXNiOiJKV1QiXCJhbGciOiJSUzI1NiJ9.eyJ0eXBlIjoicmVmcmVzaCIsInJvbGUiOjIsInVzZXJfaWQiOjMwNDcsImV4cCI6MTYyNTkwODg3MywiaWF0IjoxNjI1MzA0MDczfQ.AhgGvP9vyJmwXpo3f1_q3yI1rvP47LFV_UPL9FcGbWKa8tfR9nop6rqSXBRNx1ZflM-rNUbQB63DQqRIXXXvPo0df3u9CQsrcMkNllmBzfoCv_vBlcx0k53CmUz0A9tINF5ypA30i57uUVQmvOf0JEf83-Xi6DkjCf2_e7mzc_Ab4XcYVpRrFUxuV5i1L0OL7U-V9CjcA1J92rzB6ZCPUi9v8vdziOcEdCYZRzGM1oxO07rpZkPj_0KOeuh7ecqW3s51z8R6_Sj8bOz0TuAnrDBmArfzbS3TRrNPBKtADhV62oCbRF8PuNjGZa89V6V_TkJmrZsMCZiHGXRPn63Dig",
- "refresh_token": "wqJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0eXBlIjoicmVmcmVzaCIsInJvbGUiOjIsInVzZXJfaWQiOjMwNDcsImV4cCI6MTYyNTkwODg3MywiaWF0IjoxNjI1MzA0MDczfQ.AhgGvP9vyJmwXpo3f1_q3yI1rvP47LFV_UPL9FcGbWKa8tfR9nop6rqSXBRNx1ZflM-rNUbQB63DQqRIXXXvPo0df3u9CQsrcMkNllmBzfoCv_vBlcx0k53CmUz0A9tINF5ypA30i57uUVQmvOf0JEf83-Xi6DkjCf2_e7mzc_Ab4XcYVpRrFUxuV5i1L0OL7U-V9CjcA1J92rzB6ZCPUi9v8vdziOcEdCYZRzGM1oxO07rpZkPj_0KOeuh7ecqW3s51z8R6_Sj8bOz0TuAnrDBmArfzbS3TRrNPBKtADhV62oCbRF8PuNjGZa89V6V_TkJmrZsMCZiHGXRPn63Dig"
}
Returns all reports that have been created by the current user.
[- {
- "id": "c3bfec95-bfaf-4c3c-b97d-403e71ea0f41",
- "name": "Bill of Materials 1",
- "file_path": "string",
- "token": "c3bfe",
- "status": "requested",
- "type": "pdf",
- "expires_at": 59045010,
- "site_id": 45651,
- "survey_id": 90563
}
]
Allows scheduling Excel or JSON reports.
Legacy Excel reports (reports that are processed by https://github.com/systemsurveyor/ssv-reporting) cannot be scheduled
using this endpoint. They need to be scheduled using POST /v2/report
.
site_id | string External ID of the report's site |
survey_ids | Array of strings List of external IDs of surveys in the report |
output | string Enum: "xls" "json" Output format for the report |
scope | string Enum: "site" "survey" Whether the report is a site report or survey report |
report_name | string Name given to the new report |
report_definition_id required | string External ID of the report definition the new report belongs to |
{- "site_id": "de6e23c1-68e8-47eb-a2ef-78b472ec090d",
- "survey_ids": [
- "de6e23c1-68e8-47eb-a2ef-78b472ec090d",
- "f89b13b6-52cc-49de-90a2-cccda01bb0aa"
], - "output": "xls",
- "scope": "site",
- "report_name": "My Bill of Materials report",
- "report_definition_id": "f89b13b6-52cc-49de-90a2-cccda01bb0aa"
}
{- "report_id": 2545
}
Returns all archived/unarchived sites and folders across all teams of a user.
Explanation of usage of filters:
Filtered by favorites:
Filtered by folder and favorites:
Filtered by folder:
q | string Example: q=foobar Search |
page[number] | integer Example: page[number]=2 Page Number |
page[size] | integer Example: page[size]=300 Page Size |
filter[modified_after] | integer Example: filter[modified_after]=1645157198 Return only sites that have been created, modified, or favorited (added to workbench) after an specific datetime (in UTC Epoch format). |
filter[favorites_only] | integer Example: filter[favorites_only]=1 Filters results to only include sites the user has added to their workbench |
filter[folder_id] | string Example: filter[folder_id]=963dcf8a-9c99-4da0-adeb-12b86d99b122 Returns only sites that belong to a specific folder |
filter[accessible_after] | integer Example: filter[accessible_after]=56489413165 Returns only sites and folders where the user has been granted access to after a specified time |
{- "sites": [
- {
- "id": "46787da3-1e6e-4d9b-a858-ac9e12dc3efb",
- "name": "Union Square",
- "site_count": 5,
- "survey_count": 12,
- "type": "site",
- "version": 45479945,
- "favorite_timestamp": 12034903409,
- "has_favorite_sites": true,
- "permissions": {
- "is_site_guest": true,
- "user_can_edit_site": true,
- "user_can_change_site_access": true,
- "user_can_invite_guests": true,
- "user_can_delete_surveys": true,
- "user_can_create_surveys": true,
- "user_can_modify_surveys": true,
- "user_can_revoke_survey_edit": true,
- "user_can_edit_contacts": true,
- "user_can_view_site_access": true
}, - "owner": {
- "user_id": 12390,
- "first_name": "John",
- "last_name": "Doe"
}, - "modified_at": 1644374426,
- "modifier": "string",
- "team": {
- "team_id": 1049,
- "name": "string"
}
}
]
}
Allows for batch deleting of sites (and all related data).
Users must be team members and have write access on all sites to be deleted, otherwise the entire operation will fail. Guest users are not allowed to batch delete sites.
Site external ID
[- "b14663f6-9ad1-40c0-8a1a-32f2e19b1ccb"
]
Returns all archived/unarchived sites that the current user has access to across all teams.
page[number] | integer Example: page[number]=2 Page Number |
page[size] | integer Example: page[size]=300 Page Size |
filter[modified_after] | integer Example: filter[modified_after]=1645157198 Return only sites that have been created, modified, granted access to, or favorited after an specific datetime (in UTC Epoch format). |
filter[favorites_only] | integer Example: filter[favorites_only]=1 Filters results to only include sites the user has added to their workbench |
{- "id": "c3bfec95-bfaf-4c3c-b97d-403e71ea0f41",
- "name": "Austin Airport",
- "city": "Austin",
- "state": "Texas",
- "zip_code": "string",
- "address": "123 Main St, Austin, TX 78701",
- "label": "string",
- "tags": [
- "finished"
], - "is_active": true,
- "reference_id": "ref-12345",
- "custom_site_id": "string",
- "customer_external_id": "string",
- "team_id": 454,
- "created_at": 3143434,
- "modified_at": 45490509,
- "survey_count": 53,
- "favorited_ts": 1645157198
}
Creates a new site with a specific site_id
or updates the site if it already exists. To create a site, pass a new UUID for the site_id
.
To update a site, pass the existing UUID for the site_id
. You may pass a folder_external_id
field in the payload to create the site inside that folder.
site_id required | string Example: 40759717-c239-4504-a0a5-7e7f57220995 Site ID |
id | string |
name | string |
city | string |
state | string |
zip_code | string |
label | string |
tags | Array of any |
is_active | boolean |
reference_id | string |
custom_site_id | string |
customer_external_id | string |
team_id | integer |
{- "id": "c3bfec95-bfaf-4c3c-b97d-403e71ea0f41",
- "name": "Austin Airport",
- "city": "Austin",
- "state": "Texas",
- "zip_code": "string",
- "label": "string",
- "tags": [
- "finished"
], - "is_active": true,
- "reference_id": "ref-12345",
- "custom_site_id": "string",
- "customer_external_id": "string",
- "team_id": 454
}
{- "id": "c3bfec95-bfaf-4c3c-b97d-403e71ea0f41",
- "name": "Austin Airport",
- "city": "Austin",
- "state": "Texas",
- "zip_code": "string",
- "address": "123 Main St, Austin, TX 78701",
- "label": "string",
- "tags": [
- "finished"
], - "is_active": true,
- "reference_id": "ref-12345",
- "custom_site_id": "string",
- "customer_external_id": "string",
- "team_id": 454,
- "created_at": 3143434,
- "modified_at": 45490509
}
site_id required | string Example: 40759717-c239-4504-a0a5-7e7f57220995 Site ID |
id | string |
name | string |
city | string |
state | string |
zip_code | string |
label | string |
tags | Array of any |
is_active | boolean |
reference_id | string |
custom_site_id | string |
customer_external_id | string |
team_id | integer |
{- "id": "c3bfec95-bfaf-4c3c-b97d-403e71ea0f41",
- "name": "Austin Airport",
- "city": "Austin",
- "state": "Texas",
- "zip_code": "string",
- "label": "string",
- "tags": [
- "finished"
], - "is_active": true,
- "reference_id": "ref-12345",
- "custom_site_id": "string",
- "customer_external_id": "string",
- "team_id": 454
}
{- "id": "c3bfec95-bfaf-4c3c-b97d-403e71ea0f41",
- "name": "Austin Airport",
- "city": "Austin",
- "state": "Texas",
- "zip_code": "string",
- "address": "123 Main St, Austin, TX 78701",
- "label": "string",
- "tags": [
- "finished"
], - "is_active": true,
- "reference_id": "ref-12345",
- "custom_site_id": "string",
- "customer_external_id": "string",
- "team_id": 454,
- "created_at": 3143434,
- "modified_at": 45490509
}
site_id required | string Example: 074bb7b5-86d2-4ea6-9851-7f8a4397844f |
{- "id": "c3bfec95-bfaf-4c3c-b97d-403e71ea0f41",
- "name": "Austin Airport",
- "city": "Austin",
- "state": "Texas",
- "zip_code": "string",
- "address": "123 Main St, Austin, TX 78701",
- "label": "string",
- "tags": [
- "finished"
], - "is_active": true,
- "reference_id": "ref-12345",
- "custom_site_id": "string",
- "customer_external_id": "string",
- "team_id": 454,
- "created_at": 3143434,
- "modified_at": 45490509
}
Adds a list of sites to the user's workbench. Sites that are already in the workbench will be ignored.
Site external ID
[- "b14663f6-9ad1-40c0-8a1a-32f2e19b1ccb"
]
Removes sites from the current user's workbench. Sites that are not in the users workbench and are requested for removal will be ignored.
Site ID
[- "b14663f6-9ad1-40c0-8a1a-32f2e19b1ccb"
]
Returns all of the current user's favorite sites across all teams. Results are ordered by most recently favorited.
Query Parameters:
page[number] | integer Example: page[number]=2 Page Number |
page[size] | integer Example: page[size]=300 Page Size |
filter[modified_after] | integer Example: filter[modified_after]=1645157198 Return only sites that have been added or removed from favorites after the specified timestamp. |
{- "favorite_sites": [
- {
- "id": "46787da3-1e6e-4d9b-a858-ac9e12dc3efb",
- "name": "Union Square",
- "favorited_at": 1645157198
}
], - "unfavorited_sites": [
- {
- "id": "46787da3-1e6e-4d9b-a858-ac9e12dc3efb",
- "name": "Union Square",
- "unfavorited_at": 1645157198
}
]
}
Returns all sites and folders that have been deleted that a user had access to across all teams.
When called without a filter, returns all the deleted sites from entries found in the site audit table. Result are ordered by most recently deleted.
page[number] | integer Example: page[number]=2 Page Number |
page[size] | integer Example: page[size]=300 Page Size |
filter[deleted_after] | integer Example: filter[deleted_after]=1645157198 Returns all sites and folders deleted after the input timestamp. |
[- {
- "id": "46787da3-1e6e-4d9b-a858-ac9e12dc3efb",
- "name": "Union Square",
- "type": "site",
- "deleted_at": 1645157198
}
]
Returns all surveys and folders for a specific site. These are shown in the site overview page.
Surveys that belong to folders will not be included in the response, unless a search is being made.
Results are ordered by title
ascending by default if no sorting is specified.
site_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Site ID |
filter[status] | string Enum: "archived" "open" Return only surveys in a specific status ( |
filter[external_folder_id] | string Example: filter[external_folder_id]=b14663f6-9ad1-40c0-8a1a-32f2e19b1ccb Filter surveys by folder using string of external_id (UUID) |
filter[modified_after] | number Example: filter[modified_after]=1658776598 Return only surveys and folders that have been created or modified after a timestamp (in UTC Epoch format). |
filter[deleted_after] | number Example: filter[deleted_after]=1658776598 Return surveys and folders that have been deleted after the specified timestamp. |
sort | string Enum: "id" "title" "document_image_url" "preview_image" "editor_id" "editor_first_name" "editor_last_name" "label" "element_count" "is_folder" "is_archived" "created_at" "modified_at" "status" "survey_count" Example: sort=sort=-is_folder,name,editor_first_name Sort by column names (comma separated). Use |
q | string Example: q=foobar Search |
page[number] | integer Example: page[number]=2 Page Number |
page[size] | integer Example: page[size]=300 Page Size |
{- "surveys": [
- {
- "id": "b14663f6-9ad1-40c0-8a1a-32f2e19b1ccb",
- "title": "New Folder Name",
- "label": "TGS-123",
- "is_folder": true,
- "element_count": 90,
- "survey_count": 2,
- "is_archived": false,
- "modified_at": 1674952923,
- "created_at": 1674952923,
- "editor": {
- "user_id": 9313,
- "first_name": "John",
- "last_name": "Doe"
}
}
]
}
Deletes a survey and all its related objects. Also expires any shares of the survey.
Only team members with write access can delete surveys, guest users cannot delete surveys.
survey_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Survey ID |
Retrieves an entire survey object
survey_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Survey ID |
{- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "title": "Harvard University",
- "label": "string",
- "reference_id": "string",
- "description": "string",
- "summary": "string",
- "location": "string",
- "status": "open",
- "sync_status": "synced",
- "site": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "team_id": 4590,
- "customer_external_id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "icon_size": 0,
- "is_archived": true,
- "unit": "metric",
- "version": 0,
- "margin_range": 0,
- "floorplan_scale": 0,
- "preview_image": "2015/07/14/wyN60NaasBo320V7cNxcswXX.png",
- "floorplan_url": "string",
- "created_at": 0,
- "modified_at": 0,
- "modified_source": "web",
- "boundaries": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "lines": [
- [
- {
- "x": 345.145,
- "y": 9656.1454
}
]
], - "created_at": 3409409,
- "modified_at": 390905
}
], - "elements": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "name": "FCAM-001",
- "element_id": 0,
- "element_index": 0,
- "element_profile_id": 0,
- "systemtype_id": 0,
- "variant": "right_angle",
- "z_order": 0,
- "position": {
- "x": 345.145,
- "y": 9656.1454
}, - "photo_urls": [
- "2024/12/11/6d8af86d-53e5-416c-8bd0-6b6965c53469.png"
], - "pdf_urls": {
- "name": "string",
- "url": "string",
- "link_type": 0
}, - "sync_status": "synced",
- "accessories": [
- {
- "id": "37d677a8-0e2d-4faf-bf19-f9a4ea09eca9",
- "manufacturer": "string",
- "model": "string",
- "description": "string",
- "quantity": 0,
- "price": null,
- "labor_hours": null,
- "row_index": 0
}
], - "attributes": [
- {
- "id": "37d677a8-0e2d-4faf-bf19-f9a4ea09eca9",
- "name": "string",
- "value": "string"
}
]
}
], - "annotations": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "location": {
- "x": 345.145,
- "y": 9656.1454
}, - "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
- "stroke_color": "ee0011",
- "stroke_width": 6,
- "start_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "end_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "font_size": 14,
- "size": "363.393299344501 275.00364166059717",
- "opacity": 1,
- "category": "rectangle",
- "coordinates": [
- {
- "x": 345.145,
- "y": 9656.1454
}
], - "fill": true
}
], - "users": [
- {
- "id": 0,
- "first_name": "string",
- "last_name": "string",
}
]
}
Sets an editor lock on a survey so that other users cannot edit it. If the survey already has an editor lock from another user, the user requesting the lock will need to request the current editor to release the lock.
survey_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Survey ID |
Schedules an asynchronous job to clone an existing survey, copying all elements and related objects into a new survey.
All the binary files related to elements such as images and PDFs will also be cloned and assigned new paths.
An optional folder_id
query parameter can be passed to specify the folder where the new survey will be placed. The folder
must be in the same site as the survey being cloned.
survey_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Survey external ID |
folder_id | string Example: folder_id=86af1f1d-4f19-4c6c-afd6-e5ee041666ce Folder external ID |
{- "job_id": "86af1f1d-4f19-4c6c-afd6-e5ee041666ce"
}
Returns the status of a clone survey job.
survey_id required | string Example: 123e4567-e89b-12d3-a456-426614174000 Survey external ID |
job_id required | string Example: 123e4567-e89b-12d3-a456-426614174000 Clone job ID |
{- "status": "completed"
}
Moves a survey into a site or folder (that can contain surveys).
The list of possible sites and folders the survey can be moved to is provided by get_survey_move_destinations
endpoint.
If the destination is a site, the user must have write access and the site should be in the same team as the site the survey belongs to. If the destination is a folder, the folder must be in the same team as the survey's site.
A copy operation can be performed instead by using a copy
query parameter. This will create a new survey and move
it to the specified destination, leaving the original survey intact. The new survey's external ID will be returned
in the response.
survey_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Survey ID |
copy | boolean Default: false If set to |
destination_id required | string External ID of the destination site or folder. |
{- "destination_id": "86af1f1d-4f19-4c6c-afd6-e5ee041666ce"
}
{- "new_survey_id": "86af1f1d-4f19-4c6c-afd6-e5ee041666ce"
}
Schedules a new survey import job from an Excel file. Import jobs are done on existing surveys only.
survey_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Survey ID |
{- "job_id": "86af1f1d-4f19-4c6c-afd6-e5ee041666ce"
}
Schedules a new survey export job.
The response will include the scheduled job's ID which the client can use to poll the get_survey_export
endpoint for the
finished result export file.
survey_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Survey ID |
{- "job_id": "86af1f1d-4f19-4c6c-afd6-e5ee041666ce"
}
Returns a list of all possible sites and folders that the user can move a survey to, within the same team of the survey.
Sites and folders that surveys can be moved to will be grouped by site folders, which are folders that can contain sites.
survey_id required | string Example: 074bb7b5-86d2-4ea6-9851-7f8a4397844f |
Syncing works by creating a new survey with a unique identifier generated by the client, or updating the
existing survey with that identifier if it exists along with all related elements, comments, annotations, etc. This operation
overwrites all existing data related to the survey and replaces it with new objects created from the incoming request. Newly
created surveys can also be directly placed inside folders by passing a folder_id
value in the request payload.
Floorplans can be set for the survey by specifying the path in floorplan_url
field. If no file exists in this path within
the storage, the request will fail.
Only the survey editor can sync an existing survey.
Due to backwards compatibility issues, in order to set survey element photos paths on sync the field photos
needs to be used in the
request instead of photo_urls
. Likewise for PDFs a pdfs
field must be used instead of pdf_urls
site_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Site external ID |
survey_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Survey external ID |
title required | string |
label | string |
reference_id | string |
description | string |
summary | string |
location | string |
status | string Enum: "open" "archived" |
icon_size required | integer |
unit | string Enum: "metric" "imperial" |
margin_range required | number |
floorplan_scale | number |
floorplan_url | string |
modified_source | string Enum: "web" "tablet" "import" "api" |
Array of objects (survey_boundary) | |
Array of objects (survey_element) | |
Array of objects (survey_annotation) |
{- "title": "Harvard University",
- "label": "string",
- "reference_id": "string",
- "description": "string",
- "summary": "string",
- "location": "string",
- "status": "open",
- "icon_size": 0,
- "unit": "metric",
- "margin_range": 0,
- "floorplan_scale": 0,
- "floorplan_url": "string",
- "modified_source": "web",
- "boundaries": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "lines": [
- [
- {
- "x": 345.145,
- "y": 9656.1454
}
]
]
}
], - "elements": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "name": "FCAM-001",
- "element_id": 0,
- "element_index": 0,
- "element_profile_id": 0,
- "systemtype_id": 0,
- "variant": "right_angle",
- "z_order": 0,
- "position": {
- "x": 345.145,
- "y": 9656.1454
}, - "photos": [
- "2024/12/11/4ad1d801-f824-4d1a-9dec-8e6aa9290173.jpeg"
], - "pdfs": {
- "name": "string",
- "url": "string",
- "link_type": 0
}, - "accessories": [
- {
- "manufacturer": "string",
- "model": "string",
- "description": "string",
- "quantity": 0,
- "price": null,
- "labor_hours": null,
- "row_index": 0
}
], - "attributes": [
- {
- "name": "string",
- "value": "string"
}
]
}
], - "annotations": [
- {
- "location": {
- "x": 345.145,
- "y": 9656.1454
}, - "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
- "stroke_color": "ee0011",
- "stroke_width": 6,
- "start_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "end_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "font_size": 14,
- "size": "363.393299344501 275.00364166059717",
- "opacity": 1,
- "category": "rectangle",
- "coordinates": [
- {
- "x": 345.145,
- "y": 9656.1454
}
], - "fill": true
}
]
}
{- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "title": "Harvard University",
- "label": "string",
- "reference_id": "string",
- "description": "string",
- "summary": "string",
- "location": "string",
- "status": "open",
- "sync_status": "synced",
- "site": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "team_id": 4590,
- "customer_external_id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "icon_size": 0,
- "is_archived": true,
- "unit": "metric",
- "version": 0,
- "margin_range": 0,
- "floorplan_scale": 0,
- "preview_image": "2015/07/14/wyN60NaasBo320V7cNxcswXX.png",
- "floorplan_url": "string",
- "created_at": 0,
- "modified_at": 0,
- "modified_source": "web",
- "boundaries": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "lines": [
- [
- {
- "x": 345.145,
- "y": 9656.1454
}
]
], - "created_at": 3409409,
- "modified_at": 390905
}
], - "elements": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "name": "FCAM-001",
- "element_id": 0,
- "element_index": 0,
- "element_profile_id": 0,
- "systemtype_id": 0,
- "variant": "right_angle",
- "z_order": 0,
- "position": {
- "x": 345.145,
- "y": 9656.1454
}, - "photo_urls": [
- "2024/12/11/6d8af86d-53e5-416c-8bd0-6b6965c53469.png"
], - "pdf_urls": {
- "name": "string",
- "url": "string",
- "link_type": 0
}, - "sync_status": "synced",
- "accessories": [
- {
- "id": "37d677a8-0e2d-4faf-bf19-f9a4ea09eca9",
- "manufacturer": "string",
- "model": "string",
- "description": "string",
- "quantity": 0,
- "price": null,
- "labor_hours": null,
- "row_index": 0
}
], - "attributes": [
- {
- "id": "37d677a8-0e2d-4faf-bf19-f9a4ea09eca9",
- "name": "string",
- "value": "string"
}
]
}
], - "annotations": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "location": {
- "x": 345.145,
- "y": 9656.1454
}, - "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
- "stroke_color": "ee0011",
- "stroke_width": 6,
- "start_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "end_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "font_size": 14,
- "size": "363.393299344501 275.00364166059717",
- "opacity": 1,
- "category": "rectangle",
- "coordinates": [
- {
- "x": 345.145,
- "y": 9656.1454
}
], - "fill": true
}
], - "users": [
- {
- "id": 0,
- "first_name": "string",
- "last_name": "string",
}
]
}
Allows scheduling a survey sync background job. A job ID will be returned after the job has been queued.
The request payload should contain the new complete state of the survey. If the new state is valid the survey will be asynchronously synced to this new state.
If the number of elements to sync exceeds the limit allowed by the current plan, a 422 error will be returned.
A sync job can be scheduled to create new surveys or sync existing ones. Only the survey editor can sync an existing survey.
In order to place a new survey within a folder, include a folder_id
field containing the folder's external ID in the
payload. The folder must be within the same site as the survey.
Due to backwards compatibility issues, in order to set survey element photos paths on sync the field photos
needs to be used in the
request instead of photo_urls
. Likewise for PDFs a pdfs
field must be used instead of pdf_urls
This endpoint can receive compressed payloads using GZIP compression algorithm. When sending gzip compressed payloads a
Content-Encoding: gzip
header must be used in the request.
site_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Site external ID |
survey_id required | string Example: 86af1f1d-4f19-4c6c-afd6-e5ee041666ce Survey external ID |
The new survey structure to apply in the sync. Can be gzip compressed.
title required | string |
label | string |
reference_id | string |
description | string |
summary | string |
location | string |
status | string Enum: "open" "archived" |
icon_size required | integer |
unit | string Enum: "metric" "imperial" |
margin_range required | number |
floorplan_scale | number |
floorplan_url | string |
modified_source | string Enum: "web" "tablet" "import" "api" |
Array of objects (survey_boundary) | |
Array of objects (survey_element) | |
Array of objects (survey_annotation) |
{- "title": "Harvard University",
- "label": "string",
- "reference_id": "string",
- "description": "string",
- "summary": "string",
- "location": "string",
- "status": "open",
- "icon_size": 0,
- "unit": "metric",
- "margin_range": 0,
- "floorplan_scale": 0,
- "floorplan_url": "string",
- "modified_source": "web",
- "boundaries": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "lines": [
- [
- {
- "x": 345.145,
- "y": 9656.1454
}
]
]
}
], - "elements": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "name": "FCAM-001",
- "element_id": 0,
- "element_index": 0,
- "element_profile_id": 0,
- "systemtype_id": 0,
- "variant": "right_angle",
- "z_order": 0,
- "position": {
- "x": 345.145,
- "y": 9656.1454
}, - "photos": [
- "2024/12/11/4ad1d801-f824-4d1a-9dec-8e6aa9290173.jpeg"
], - "pdfs": {
- "name": "string",
- "url": "string",
- "link_type": 0
}, - "accessories": [
- {
- "manufacturer": "string",
- "model": "string",
- "description": "string",
- "quantity": 0,
- "price": null,
- "labor_hours": null,
- "row_index": 0
}
], - "attributes": [
- {
- "name": "string",
- "value": "string"
}
]
}
], - "annotations": [
- {
- "location": {
- "x": 345.145,
- "y": 9656.1454
}, - "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
- "stroke_color": "ee0011",
- "stroke_width": 6,
- "start_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "end_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "font_size": 14,
- "size": "363.393299344501 275.00364166059717",
- "opacity": 1,
- "category": "rectangle",
- "coordinates": [
- {
- "x": 345.145,
- "y": 9656.1454
}
], - "fill": true
}
]
}
{- "job_id": 9309340
}
Allows polling the status of a scheduled sync job
job_id required | number <integer> Example: 450540 Sync job ID |
{- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "title": "Harvard University",
- "label": "string",
- "reference_id": "string",
- "description": "string",
- "summary": "string",
- "location": "string",
- "status": "open",
- "sync_status": "synced",
- "site": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "team_id": 4590,
- "customer_external_id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "icon_size": 0,
- "is_archived": true,
- "unit": "metric",
- "version": 0,
- "margin_range": 0,
- "floorplan_scale": 0,
- "preview_image": "2015/07/14/wyN60NaasBo320V7cNxcswXX.png",
- "floorplan_url": "string",
- "created_at": 0,
- "modified_at": 0,
- "modified_source": "web",
- "boundaries": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "lines": [
- [
- {
- "x": 345.145,
- "y": 9656.1454
}
]
], - "created_at": 3409409,
- "modified_at": 390905
}
], - "elements": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "name": "FCAM-001",
- "element_id": 0,
- "element_index": 0,
- "element_profile_id": 0,
- "systemtype_id": 0,
- "variant": "right_angle",
- "z_order": 0,
- "position": {
- "x": 345.145,
- "y": 9656.1454
}, - "photo_urls": [
- "2024/12/11/6d8af86d-53e5-416c-8bd0-6b6965c53469.png"
], - "pdf_urls": {
- "name": "string",
- "url": "string",
- "link_type": 0
}, - "sync_status": "synced",
- "accessories": [
- {
- "id": "37d677a8-0e2d-4faf-bf19-f9a4ea09eca9",
- "manufacturer": "string",
- "model": "string",
- "description": "string",
- "quantity": 0,
- "price": null,
- "labor_hours": null,
- "row_index": 0
}
], - "attributes": [
- {
- "id": "37d677a8-0e2d-4faf-bf19-f9a4ea09eca9",
- "name": "string",
- "value": "string"
}
]
}
], - "annotations": [
- {
- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "location": {
- "x": 345.145,
- "y": 9656.1454
}, - "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit",
- "stroke_color": "ee0011",
- "stroke_width": 6,
- "start_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "end_point": {
- "x": 345.145,
- "y": 9656.1454
}, - "font_size": 14,
- "size": "363.393299344501 275.00364166059717",
- "opacity": 1,
- "category": "rectangle",
- "coordinates": [
- {
- "x": 345.145,
- "y": 9656.1454
}
], - "fill": true
}
], - "users": [
- {
- "id": 0,
- "first_name": "string",
- "last_name": "string",
}
]
}
Returns all the systemtype_elements for the given team
team_id required | number <integer> The internal unique ID of the team |
{- "favorites": [
- {
- "element_id": "string",
- "name": "string"
}
], - "infrastructure": [
- {
- "element_id": "string",
- "name": "string"
}
], - "video_surveillance": [
- {
- "element_id": "string",
- "name": "string"
}
], - "access_control": [
- {
- "element_id": "string",
- "name": "string"
}
], - "fire_alarm": [
- {
- "element_id": "string",
- "name": "string"
}
], - "communications": [
- {
- "element_id": "string",
- "name": "string"
}
], - "building_management": [
- {
- "element_id": "string",
- "name": "string"
}
], - "audio_visual": [
- {
- "element_id": "string",
- "name": "string"
}
], - "facility_equipment": [
- {
- "element_id": "string",
- "name": "string"
}
], - "healthcare": [
- {
- "element_id": "string",
- "name": "string"
}
], - "information_technology": [
- {
- "element_id": "string",
- "name": "string"
}
], - "intrusion_detection": [
- {
- "element_id": "string",
- "name": "string"
}
]
}
{- "first_name": "John",
- "last_name": "Doe",
- "company": "System Surveyor",
- "email": "jdoe@gmail.com",
- "avatar_url": "string",
- "user_id": 140956,
- "role": "admin",
- "is_enable": true
}
team_id required | number <integer> Example: 309409 Team ID |
{- "name": "string",
- "abbreviation": "string",
- "element_color": "string",
- "sort": 0,
- "elements": [
- {
- "id": "string",
- "name": "PTZ Camera",
- "abbreviation": "string",
- "sort_order": 0,
- "icon": "string",
- "category": { }
}
]
}
Returns all element profiles and accessories for a team.
Only team members are able to access element profiles for the specified team.
Results are ordered by sort_order
field that is part of the element profile.
team_id required | integer Example: 20730 Team internal ID |
{- "element_profiles": [
- {
- "id": 1234,
- "name": "Video Camera Profile",
- "is_default": true,
- "sort": 0,
- "content": {
- "attribute": [
- {
- "attribute_id": 455,
- "value": "49494A"
}
]
}, - "accessories": [
- {
- "id": 0,
- "team_id": 0,
- "element_id": 0,
- "description": "Accessory 1",
- "manufacturer": "string",
- "model": "string",
- "price": 0.1,
- "labor_hours": 0.1,
- "created_at": 0
}
], - "created_by": 0,
- "team_id": 0,
- "element_id": 0,
- "created_at": 0,
- "modified_at": 0
}
]
}
Returns all element profile accessories of a team for a specific element.
Results are sorted by description
ascending by default.
team_id required | integer Example: 20730 Team ID |
element_id required | integer Example: 123 Element ID |
q | string Example: q=foobar Search |
page[number] | integer Example: page[number]=2 Page Number |
page[size] | integer Example: page[size]=300 Page Size |
{- "count": 23,
- "accessories": [
- {
- "id": 0,
- "team_id": 0,
- "element_id": 0,
- "description": "Accessory 1",
- "manufacturer": "string",
- "model": "string",
- "price": 0.1,
- "labor_hours": 0.1,
- "created_at": 0
}
]
}
Schedule a background job for generating an Element Profile Excel export file for an element.
The generated export file can then be used to fill in new element profiles to be created using the import functionality.
team_id required | integer |
element_id required | integer |
{- "job_id": "f804fa1f-fcbf-4d6d-85b4-d52995b83aac"
}
Returns all element profiles and accessories for a team and element.
Only team members are able to access element profiles for the specified team.
Results are ordered by sort_order
field that is part of the element profile.
team_id required | string Example: 20730 Team ID |
element_id required | string Example: 170 Element ID |
{- "data": [
- {
- "id": 1234,
- "name": "Video Camera Profile",
- "is_default": true,
- "sort": 0,
- "content": {
- "attribute": [
- {
- "attribute_id": 455,
- "value": "49494A"
}
]
}, - "accessories": [
- {
- "id": 0,
- "team_id": 0,
- "element_id": 0,
- "description": "Accessory 1",
- "manufacturer": "string",
- "model": "string",
- "price": 0.1,
- "labor_hours": 0.1,
- "created_at": 0
}
], - "created_by": 0,
- "team_id": 0,
- "element_id": 0,
- "created_at": 0,
- "modified_at": 0
}
]
}
Schedules an Element Profile import job using an Element Profile Excel export file as input.
A validate_only=1
query param can be passed to make the background job only validate the input file. With this
option, no importing process will be executed, changes to be applied by the importing process as well as any errors
found will be temporarily cached. This data can later be checked using the get_import_status
endpoint.
A append=1
query param can be passed to indicate that the import should not delete any existing element profiles
and should only create or update the element profiles included in the import file.
team_id required | integer |
element_id required | integer |
validate_only | integer Only validate the import file and do not import any element profiles |
append | integer Only create new element profiles and do not delete existing profiles |
{- "job_id": "f804fa1f-fcbf-4d6d-85b4-d52995b83aac"
}
Allows querying the status of a scheduled Element Profile import job
job_id required | string Example: 4de325de-8e98-4e11-8a8b-ee163c717604 |
{- "status": "completed",
- "filename": "f804fa1f-fcbf-4d6d-85b4-d52995b83aac.xlsx",
- "errors": [
- "Export file version 1587545 does not match Element 69 with version 87978797"
], - "changes": {
- "additions": 0,
- "deletions": 0,
- "updates": 0
}
}
Create a new Element Profile with accessories
team_id required | integer |
element_id required | integer |
name required | string |
is_default | boolean |
sort | integer |
object | |
Array of objects (element_profile_accessory) | |
team_id | integer |
element_id | integer |
{- "name": "Video Camera Profile",
- "is_default": true,
- "sort": 0,
- "content": {
- "attribute": [
- {
- "attribute_id": 455,
- "value": "49494A"
}
]
}, - "accessories": [
- {
- "id": 0,
- "team_id": 0,
- "element_id": 0,
- "description": "Accessory 1",
- "manufacturer": "string",
- "model": "string",
- "price": 0.1,
- "labor_hours": 0.1,
- "created_at": 0
}
], - "team_id": 0,
- "element_id": 0
}
{- "id": 1234,
- "name": "Video Camera Profile",
- "is_default": true,
- "sort": 0,
- "content": {
- "attribute": [
- {
- "attribute_id": 455,
- "value": "49494A"
}
]
}, - "accessories": [
- {
- "id": 0,
- "team_id": 0,
- "element_id": 0,
- "description": "Accessory 1",
- "manufacturer": "string",
- "model": "string",
- "price": 0.1,
- "labor_hours": 0.1,
- "created_at": 0
}
], - "created_by": 0,
- "team_id": 0,
- "element_id": 0,
- "created_at": 0,
- "modified_at": 0
}
Allows updating an existing Element Profile.
All current accessories of the Element Profile will be replaced by any new accessories sent in the request
ep_id required | integer Example: 12309 ID of Element Profile |
name required | string |
is_default | boolean |
sort | integer |
object | |
Array of objects (element_profile_accessory) | |
team_id | integer |
element_id | integer |
{- "name": "Video Camera Profile",
- "is_default": true,
- "sort": 0,
- "content": {
- "attribute": [
- {
- "attribute_id": 455,
- "value": "49494A"
}
]
}, - "accessories": [
- {
- "id": 0,
- "team_id": 0,
- "element_id": 0,
- "description": "Accessory 1",
- "manufacturer": "string",
- "model": "string",
- "price": 0.1,
- "labor_hours": 0.1,
- "created_at": 0
}
], - "team_id": 0,
- "element_id": 0
}
{- "id": 1234,
- "name": "Video Camera Profile",
- "is_default": true,
- "sort": 0,
- "content": {
- "attribute": [
- {
- "attribute_id": 455,
- "value": "49494A"
}
]
}, - "accessories": [
- {
- "id": 0,
- "team_id": 0,
- "element_id": 0,
- "description": "Accessory 1",
- "manufacturer": "string",
- "model": "string",
- "price": 0.1,
- "labor_hours": 0.1,
- "created_at": 0
}
], - "created_by": 0,
- "team_id": 0,
- "element_id": 0,
- "created_at": 0,
- "modified_at": 0
}
Creates a new site/survey folder or updates an existing one if found.
To create/update a site folder, pass a value for team_id
field in the request payload, to create/update a survey folder
pass a value for site_external_id
field.
folder_id required | string Example: 40759717-c239-4504-a0a5-7e7f57220995 Folder ID |
name required | string Folder name |
label | string |
site_external_id | string Site external ID |
team_id | integer |
{- "name": "string",
- "label": "string",
- "site_external_id": "string",
- "team_id": 0
}
{- "id": "5f5eb9b1-7104-454f-b736-1ca962531b14",
- "name": "string",
- "label": "string",
- "site_id": 0,
- "team_id": 0,
- "team": {
- "id": 0,
- "name": "string"
}, - "modified_at": 0
}
Soft deletes a site folder or a survey folder.
Folder must be empty in order to be deleted.
Only account admins, team admins, and team members can delete folders. Only team members with write access can delete survey folders.
folder_id required | string Example: 40759717-c239-4504-a0a5-7e7f57220995 Folder ID |
Get data for the current authenticated user at a granular level.
The returned information includes information about the user that they provided at sign up as well as informationa about the teams they are a part of, company they are with and subscription they have with System Surveyor.
{- "id": 12094,
- "user_name": "john_smith",
- "first_name": "John",
- "last_name": "Doe",
- "title": "CEO",
- "email": "foobar@gmail.com",
- "company": "System Surveyor",
- "mobile": "910-423-345",
- "country": "United States of America (USA)",
- "state": "Pennsylvania",
- "city": "Los Angeles",
- "created_at": 1594652482,
- "teams": [
- {
- "id": 11,
- "name": "John's Team",
- "account_id": 995,
- "role": "team_member",
- "unit": "metric",
- "labor_rate": 15,
- "budget_status": 0,
- "margin_range": 20,
}
], - "accounts": [
- {
- "id": 450495,
- "company": "System Surveyor",
- "is_trial": true,
- "is_free": true,
- "cancel_requested": true,
- "trial_expiration": "string",
- "subscription": {
- "id": 123,
- "quantity": 10,
- "plan": {
- "id": 0,
- "name": "Enterprise",
- "max_seats": 0,
- "max_elements_per_survey": 0,
- "max_attachments_per_element": 0
}
}, - "features": {
- "public_api": true,
- "v2_report": true,
- "aoc_boundaries": true,
- "web_editor_2": true,
- "favorite_elements": true,
- "product_advisor": true
}
}
]
}