Download OpenAPI specification:
Complete Trendspek API endpoints including core data types for annotations, datasets, assets, and upload workflows.
This uses current security best practice, implementing what is known as the Client Credentials Workflow.
Authentication will require a client secret and a client key.
Please refer to the Trendspek Support for help in obtaining these.
Access to the API, requires exchanging Client ID and Secret for an API Token.
The Expiry Time will be set to at most 1 hour. This short-lived API token is best practice, and will reduce the damage if the API token is intercepted.
Authenticate client id and secret and returns an access token
| client_id | string <integer> |
| client_secret | string <password> |
| grant_type | string |
{- "client_id": "string",
- "client_secret": "pa$$word",
- "grant_type": "client_credentials"
}{- "access_token": "string",
- "expires_in": 3600,
- "token_type": "string"
}API Endpoints to facilitate the Upload of datasets for processing and visualisation in Trendspek.
Actions:
| company required | string <uuid> Company UUID |
Create Dataset request
| asset_uuid | string or null <uuid> UUID of existing asset (optional for new assets) |
| type | string Enum: "photogrammetry" "preprocessed_metashape" "preprocessed_contextcapture" "preprocessed_reality_capture" "preprocessed_dji_terra" Processing type for the dataset |
| name | string <= 255 characters Dataset name (required when asset_uuid is not provided, ignored when asset_uuid is provided) |
| description | string Dataset description |
| capture_date | string <date> The date when the dataset was captured |
| comments | string or null Uploader comments (optional) |
| metadata | object or null Optional metadata for the dataset (for future use) |
Array of objects non-empty Array of files to upload (minimum 1 file required) |
{- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "type": "photogrammetry",
- "name": "string",
- "description": "string",
- "capture_date": "2019-08-24",
- "comments": "string",
- "metadata": { },
- "upload_files": [
- {
- "filename": "IMG0001.jpg",
- "size_bytes": 12623312,
- "width": 3072,
- "height": 4080
}
]
}{- "data": {
- "pending_dataset_uuid": "bdbdcf7a-f385-4296-a83f-a730f5a9bedf",
- "upload_project_uuid": "2d1ac789-ee57-4371-9263-b0e1ea8e5347",
- "gigapixels": 13800000,
- "gigapixels_remaining": 90000000,
- "storage": 54800600,
- "storage_remaining": 9000000000,
- "status": "UPLOADING",
- "upload_urls": [
- {
- "signed_url": "string",
- "upload_path": "string",
- "original_filename": "IMG0001.jpg",
- "expires_at": "2019-08-24T14:15:22Z",
- "width": 3072,
- "height": 4080,
- "size_bytes": 12623312
}
], - "limits": {
- "gigapixels": {
- "total": 0,
- "used": 0,
- "available": 0,
- "attempting": 0
}, - "storage": {
- "total": 0,
- "used": 0,
- "available": 0,
- "attempting": 0
}, - "assets": {
- "total": 0,
- "used": 0,
- "available": 0,
- "attempting": 0
}, - "datasets": {
- "total": 0,
- "used": 0,
- "available": 0,
- "attempting": 0
}
}
}
}Actions:
| company required | string <uuid> Company UUID |
| pending_dataset required | string <uuid> Pending Dataset UUID from the create endpoint. |
Create Upload Project request
Array of objects non-empty Array of files to upload (minimum 1 file required) |
{- "upload_files": [
- {
- "filename": "IMG0001.jpg",
- "size_bytes": 12623312,
- "width": 3072,
- "height": 4080
}
]
}{- "data": {
- "pending_dataset_uuid": "bdbdcf7a-f385-4296-a83f-a730f5a9bedf",
- "upload_project_uuid": "2d1ac789-ee57-4371-9263-b0e1ea8e5347",
- "gigapixels": 13800000,
- "gigapixels_remaining": 90000000,
- "storage": 54800600,
- "storage_remaining": 9000000000,
- "status": "UPLOADING",
- "upload_urls": [
- {
- "signed_url": "string",
- "upload_path": "string",
- "original_filename": "IMG0001.jpg",
- "expires_at": "2019-08-24T14:15:22Z",
- "width": 3072,
- "height": 4080,
- "size_bytes": 12623312
}
], - "limits": {
- "gigapixels": {
- "total": 0,
- "used": 0,
- "available": 0,
- "attempting": 0
}, - "storage": {
- "total": 0,
- "used": 0,
- "available": 0,
- "attempting": 0
}, - "assets": {
- "total": 0,
- "used": 0,
- "available": 0,
- "attempting": 0
}, - "datasets": {
- "total": 0,
- "used": 0,
- "available": 0,
- "attempting": 0
}
}
}
}Actions:
| company required | string <uuid> Company UUID |
| pending_dataset required | string <uuid> Pending Dataset UUID from the create endpoint. |
Cancel upload request
| cancel_reason | string A short summary for cancelling upload |
{- "cancel_reason": "string"
}{- "error": "Unauthenticated."
}Returns the current status of the upload project (e.g.: uploading, processing, processed, failed, cancelled).
| company required | string <uuid> Company UUID |
| pending_dataset required | string <uuid> Pending Dataset UUID from the create endpoint. |
{- "uuid": "string",
- "status": "string",
- "processor_comments": "string",
- "fail_reason": "string",
- "relationships": {
- "asset": {
- "uuid": "string",
- "links": "string"
}, - "dataset": {
- "uuid": "string",
- "links": "string"
}
}
}Signals that all dataset files have been uploaded and that processing can begin.
Actions:
| company required | string <uuid> Company UUID |
| pending_dataset required | string <uuid> Pending Dataset UUID from the create endpoint. |
{- "uuid": "string",
- "status": "string",
- "processor_comments": "string",
- "fail_reason": "string",
- "relationships": {
- "asset": {
- "uuid": "string",
- "links": "string"
}, - "dataset": {
- "uuid": "string",
- "links": "string"
}
}
}List the uploads for the company.
| company required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Company UUID |
{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "dataset_name": "string",
- "processing_type": "string",
- "uploader_comments": "string",
- "upload_status": "string",
- "asset": {
- "uuid": "string",
- "links": "string"
}, - "user_uuid": "string",
- "created_at": "string",
- "updated_at": "string"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Data endpoints typically come in two varieties: a list view and a show view.
List views show a reduced dataset and typically use cursor-based pagination for efficient handling of large sets of data. They can also be used for searching objects matching a certain criteria.
The Show views contains more data, and can optionally include related information.
Billing Companies contain one or more companies. Use these endpoints to review key contact details.
Retrieve the current billing company associated with the API token.
Details are for the primary contact for this Billing Company.
NB: This is the only singular endpoint, as only one billing company will ever be accessible at a time.
{- "data": {
- "uuid": "a1c4460d-e2ac-4351-981a-e60e32702053",
- "name": "string",
- "first_name": "string",
- "last_name": "string",
- "position": "string",
- "email": "string",
- "phone": "string",
- "department": "string",
- "address_line_1": "string",
- "address_line_2": "string",
- "address_line_3": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country_code": "string",
- "created_at": "string",
- "updated_at": "string"
}
}Companies are the primary organisational unit within Trendspek.
Companies belong to Billing Companies.
Companies have Assets.
Users have a Role within a Company that gives them access to that Company.
Users must have an asset role assigned for each company asset they need access to.
This will return a list of accessible companies within the billing company.
You can filter the results by company name (partial match).
This endpoint uses cursor-based pagination for efficient handling of large sets of data.
| cursor | string Example: cursor=eyJjcmVhdGVkX2F0IjoiMjAyNC0wMS0xNSAxNDozMDowMCIsImlkIjoxMjN9 Cursor token for pagination. Use the next_cursor from the previous response to get the next page. |
| per_page | integer [ 1 .. 100 ] Default: 15 Example: per_page=25 Number of items per page (maximum: 100, default: 15) |
| filter[company] | string Example: filter[company]=Acme Corp Filter companies by name (partial match) |
{- "data": [
- {
- "uuid": "a1c4460d-e29e-421a-953b-b8ab990074c8",
- "name": "string",
- "website": "string",
- "data_location": "string",
- "timezone": "string",
- "created_at": "string",
- "updated_at": "string"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Show a specific company's details.
You can include related resources using the 'include' parameter.
| company required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Company UUID |
| include | string Example: include=billingCompany Comma-separated list of relationships to include (billingCompany) |
{- "data": {
- "uuid": "a1c4460d-e2c7-4614-8726-0ec650743310",
- "name": "string",
- "website": "string",
- "data_location": "string",
- "timezone": "string",
- "created_at": "string",
- "updated_at": "string",
- "billing_company_uuid": "bbb60dc5-0c0f-4f13-9759-15188cf64c79",
- "billing_company": {
- "uuid": "a1c4460d-e2ac-4351-981a-e60e32702053",
- "name": "string",
- "first_name": "string",
- "last_name": "string",
- "position": "string",
- "email": "string",
- "phone": "string",
- "department": "string",
- "address_line_1": "string",
- "address_line_2": "string",
- "address_line_3": "string",
- "city": "string",
- "state": "string",
- "zip": "string",
- "country_code": "string",
- "created_at": "string",
- "updated_at": "string"
}
}
}An Asset is a real-world object of interest—usually a building or built object.
An Asset will have one or more Datasets.
Retrieve a paginated collection of assets for the specified company.
You can filter the results by name, dataset, or annotation UUID.
This endpoint uses cursor-based pagination for efficient handling of large sets of data.
| company required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Company UUID |
| cursor | string Example: cursor=eyJjcmVhdGVkX2F0IjoiMjAyNC0wMS0xNSAxNDozMDowMCIsImlkIjoxMjN9 Cursor token for pagination. Use the next_cursor from the previous response to get the next page. |
| per_page | integer [ 1 .. 100 ] Default: 15 Example: per_page=25 Number of items per page (maximum: 100, default: 15) |
| filter[name] | string Example: filter[name]=Building A Filter assets by name (partial match) |
{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "address": "string",
- "location": "string",
- "metadata": {
- "plane_elevation": "string",
- "relative_level": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve a specific asset with its company relationship.
| company required | string <uuid> Company UUID |
| asset required | string <uuid> Asset UUID |
| include | string Example: include=company Comma-separated list of relationships to include (company) |
{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "address": "string",
- "location": "string",
- "metadata": {
- "plane_elevation": "string",
- "relative_level": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "company_uuid": "aba69bec-94b3-48e8-9737-4f951465d0f8",
- "company": {
- "uuid": "a1c4460d-e29e-421a-953b-b8ab990074c8",
- "name": "string",
- "website": "string",
- "data_location": "string",
- "timezone": "string",
- "created_at": "string",
- "updated_at": "string"
}
}
}A Dataset is a representation of an Asset in 3D, captured at a point in time.
Datasets can have different types: e.g. photogrammetry, lidar, thermal.
Datasets can be captured over different points in time to see changes in an asset over time.
Retrieve a paginated collection of datasets for the specified company.
You can filter the results by name, asset, or annotation UUID.
This endpoint uses cursor-based pagination for efficient handling of large sets of data.
| company required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Company UUID |
| cursor | string Example: cursor=eyJjcmVhdGVkX2F0IjoiMjAyNC0wMS0xNSAxNDozMDowMCIsImlkIjoxMjN9 Cursor token for pagination. Use the next_cursor from the previous response to get the next page. |
| per_page | integer [ 1 .. 100 ] Default: 15 Example: per_page=25 Number of items per page (maximum: 100, default: 15) |
| filter[name] | string Example: filter[name]=Dataset 2024-01 Filter datasets by name (partial match) |
| filter[asset] | string <uuid> Example: filter[asset]=550e8400-e29b-41d4-a716-446655440001 Filter datasets by asset UUID |
{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "date": "string",
- "description": "string",
- "clipping_plane": [
- {
- "normal": [
- -0.03892423536844968,
- 0.5,
- 0.2
], - "distance": 0
}
], - "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "screenshot": "string",
- "image1": "string",
- "image2": "string",
- "image3": "string",
- "gigapixels": "string",
- "dataset_type": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve a specific dataset with its asset and company relationships.
| company required | string <uuid> Company UUID |
| dataset required | string <uuid> Dataset UUID |
| include | string Example: include=asset Comma-separated list of relationships to include (asset) |
{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "date": "string",
- "description": "string",
- "clipping_plane": [
- {
- "normal": [
- -0.03892423536844968,
- 0.5,
- 0.2
], - "distance": 0
}
], - "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "screenshot": "string",
- "image1": "string",
- "image2": "string",
- "image3": "string",
- "gigapixels": "string",
- "dataset_type": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "asset": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "address": "string",
- "location": "string",
- "metadata": {
- "plane_elevation": "string",
- "relative_level": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}An Annotation is a data point in 3D space. Annotations belong to Assets, and are associated with a Dataset.
Retrieve a paginated collection of annotations that belong to the specified company.
You can filter the results by asset, dataset, folder, or template UUID.
You can also include related resources using the 'include' parameter.
This endpoint uses cursor-based pagination for efficient handling of large sets of data.
| company required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Company UUID |
| cursor | string Example: cursor=eyJjcmVhdGVkX2F0IjoiMjAyNC0wMS0xNSAxNDozMDowMCIsImlkIjoxMjN9 Cursor token for pagination. Use the next_cursor from the previous response to get the next page. |
| per_page | integer [ 1 .. 100 ] Default: 15 Example: per_page=25 Number of items per page (maximum: 100, default: 15) |
| filter[asset] | string <uuid> Example: filter[asset]=550e8400-e29b-41d4-a716-446655440000 Filter annotations by asset UUID |
| filter[dataset] | string <uuid> Example: filter[dataset]=550e8400-e29b-41d4-a716-446655440001 Filter annotations by dataset UUID |
| filter[folder] | string <uuid> Example: filter[folder]=550e8400-e29b-41d4-a716-446655440002 Filter annotations by annotation folder UUID |
{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "annotation_name": "string",
- "annotation_type": "USER",
- "drawing_type": "Point",
- "description": "string",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "bim_data": { },
- "folder": "string",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve a specific annotation by its UUID, ensuring it belongs to the specified company. An annotation will come with related template and photo data.
| company required | string <uuid> Company UUID |
| annotation required | string <uuid> Annotation UUID |
| include | string Example: include=asset, dataset, drawing, featuredImage, supportingImage Comma-separated list of relationships to include (asset, dataset, drawing, featuredImage, supportingImage) |
{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "annotation_name": "string",
- "annotation_type": "USER",
- "drawing_type": "Point",
- "description": "string",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "bim_data": { },
- "featured_image": {
- "uuid": "string",
- "url": "string",
- "file_name": "string",
- "source_type": "string"
}, - "supporting_image": {
- "uuid": "string",
- "url": "string",
- "file_name": "string",
- "source_type": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "asset": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "address": "string",
- "location": "string",
- "metadata": {
- "plane_elevation": "string",
- "relative_level": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "dataset_uuid": "24d83e1a-5c51-45c1-b39e-fd35c214de0e",
- "dataset": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "date": "string",
- "description": "string",
- "clipping_plane": [
- {
- "normal": [
- -0.03892423536844968,
- 0.5,
- 0.2
], - "distance": 0
}
], - "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "screenshot": "string",
- "image1": "string",
- "image2": "string",
- "image3": "string",
- "gigapixels": "string",
- "dataset_type": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8"
}, - "folder": "string",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "drawing_uuid": "4d04804c-8135-43ff-bf5a-9639c7bd05f2",
- "drawing": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "type": "Point",
- "geojson": {
- "type": "string",
- "bbox": [ ],
- "features": { }
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "annotation": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "annotation_name": "string",
- "annotation_type": "USER",
- "drawing_type": "Point",
- "description": "string",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "bim_data": { },
- "folder": "string",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}, - "relationships": {
- "photos": {
- "links": "/v1/external/api/companies/{company}/photos?filter[asset]=<uuid>"
}, - "files": {
- "links": "/v1/external/api/companies/{company}/asset-files?filter[annotation]=<uuid>"
}, - "template_data": {
- "links": "/v1/external/api/companies/{company}/template_data"
}
}
}
}Retrieve a paginated collection of annotation images that belong to the specified annotation.
This endpoint uses cursor-based pagination for efficient handling of large datasets.
You can filter the results by asset or dataset UUID.
| company required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Company UUID |
| annotation required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440001 Annotation UUID |
| cursor | string Example: cursor=eyJjcmVhdGVkX2F0IjoiMjAyNC0wMS0xNSAxNDozMDowMCIsImlkIjoxMjN9 Cursor token for pagination. Use the next_cursor from the previous response to get the next page. |
| per_page | integer [ 1 .. 100 ] Default: 15 Example: per_page=25 Number of items per page (maximum: 100, default: 15) |
| filter[asset] | string <uuid> Example: filter[asset]=550e8400-e29b-41d4-a716-446655440000 Filter photos by asset UUID |
| filter[dataset] | string <uuid> Example: filter[dataset]=550e8400-e29b-41d4-a716-446655440001 Filter photos by dataset UUID |
{- "data": [
- {
- "image_uuid": "81aa1675-ce1e-4227-a1b8-beadb95ef40a",
- "image": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "url": "string",
- "filename": "string",
- "source_type": "string"
}, - "annotation_uuid": "b3ea11bf-a299-4c33-9d09-4eaf8ede40b6",
- "annotation": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "annotation_name": "string",
- "annotation_type": "USER",
- "drawing_type": "Point",
- "description": "string",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "bim_data": { },
- "folder": "string",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve template data associated with a specific annotation. This endpoint returns the template form data that has been filled out for the annotation. Returns null if no template data exists for the annotation.
| company required | string <uuid> Company UUID |
| annotation required | string <uuid> Annotation UUID |
{- "data": {
- "uuid": "123e4567-e89b-12d3-a456-426614174000",
- "template_uuid": "123e4567-e89b-12d3-a456-426614174000",
- "value": {
- "field1": {
- "value": "Sample text"
}, - "field2": {
- "value": 42
}, - "field3": {
- "value": true
}
}, - "created_at": "2023-01-01T12:00:00.000000Z",
- "updated_at": "2023-01-01T12:00:00.000000Z"
}
}Create new annotations for the specified asset.
| company required | string |
| asset required | string |
Create one or more annotations on an asset. Each annotation represents a 3D point of interest linked to a dataset.
required | Array of objects [ 1 .. 20 ] items Array of annotations to create |
{- "annotations": [
- {
- "dataset_uuid": "a1c4460d-d389-4e5c-8752-0fff3e1492d8",
- "annotation_name": "Crack on north wall",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "drawing": {
- "geometry": {
- "type": "Point",
- "coordinates": [
- 150.123,
- -33.456,
- 100
]
}, - "properties": {
- "stroke": "#ff0000",
- "stroke_width": 3,
- "stroke_opacity": 1,
- "clamped": false,
- "fill": "#ff0000",
- "fill_opacity": 0.3,
- "fill_is_visible": false,
- "drawing_is_visible": true,
- "pin_icon": "map-marker-alt",
- "pin_display": 1
}
}, - "folder_uuid": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
- "description": "Hairline crack approximately 2m long running diagonally across the north face",
- "bim_data": {
- "ifc_guid": "3cUkl32yn0kuek3rp1IGXS",
- "element_type": "IfcWall",
- "element_name": "Basic Wall: Brick - 270mm",
- "originating_system": "Revit 2024",
- "authoring_tool_id": "revit-2024-exporter-v3.1",
- "external_id": "f781426a-0a88-4f9c-b975-d65331d5fd84",
- "classifications": [
- {
- "system": "Uniclass 2015",
- "edition": "2015",
- "code": "Ss_25_10_30",
- "name": "Masonry wall systems"
}
], - "property_sets": {
- "Pset_WallCommon": {
- "IsExternal": true,
- "FireRating": "2HR",
- "LoadBearing": true
}, - "Dimensions": {
- "Area": 45.6,
- "Length": 12.3,
- "Height": 3.7
}
}, - "spatial_location": {
- "building": "Main Terminal",
- "storey": "Level 2",
- "space": "Room 204",
- "zone": "Zone A"
}
}, - "template_uuid": "e4f5a6b7-c8d9-0123-abcd-ef4567890123",
- "template_data": {
- "short_text": {
- "value": "Hairline crack on north face",
- "custom_field_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}, - "number": {
- "value": 42,
- "custom_field_uuid": "b2c3d4e5-f6a7-8901-bcde-f12345678901"
}
}, - "images": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "type": "annotation-file"
}
], - "supporting_image": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "type": "annotation-file"
}
}
]
}{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "annotation_name": "string",
- "annotation_type": "USER",
- "drawing_type": "Point",
- "description": "string",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "bim_data": { },
- "folder": "string",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Update an existing annotation. Only the fields provided in the request body will be updated. Omitted fields remain unchanged.
| company required | string |
| asset required | string |
| annotation required | string |
Update an existing annotation. Only include the fields you want to change. Omitted fields remain unchanged.
| annotation_name | string <= 512 characters Human-readable name for the annotation |
object or null (CameraPose) Camera orientation and position when the annotation was placed. Position uses ECEF (Earth-Centered, Earth-Fixed) coordinates in metres. | |
object (DrawingInput) Drawing markup for this annotation. Provide the geometry and optional visual properties. The server computes all derived data (bounding box, label coordinates, area, perimeter) and transforms WGS84 coordinates to model-space for storage. Max 1MB. Max 100 coordinates per geometry. | |
| folder_uuid | string or null <uuid> UUID of an annotation folder belonging to the asset. Set to null to remove the folder association. Omit to leave unchanged. |
| description | string or null Detailed description of the annotation |
object or null (BimDataInput) Optional BIM (Building Information Modeling) metadata linking this annotation to an IFC model element. Max 64KB. See schema for allowed structure. | |
| template_uuid | string or null <uuid> UUID of an annotation template. Set to null to remove the template association. Required if template_data is provided. |
| template_data | object or null Template field values keyed by custom field slug. When provided with template_uuid, replaces all existing template data. Maximum 50 fields. |
Array of objects or null <= 50 items Array of image references to attach to the annotation. Replaces all existing images. Set to null or empty array to remove all images. Omit to leave unchanged. Maximum 50 items.The first entry in the array will be used as the featured image for the annotation. | |
object or null A single supporting image reference to attach to the annotation. Replaces existing supporting image. Set to null to remove. Omit to leave unchanged. |
{- "annotation_name": "Crack on north wall",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "drawing": {
- "geometry": {
- "type": "Point",
- "coordinates": [
- 150.123,
- -33.456,
- 100
]
}, - "properties": {
- "stroke": "#ff0000",
- "stroke_width": 3,
- "stroke_opacity": 1,
- "clamped": false,
- "fill": "#ff0000",
- "fill_opacity": 0.3,
- "fill_is_visible": false,
- "drawing_is_visible": true,
- "pin_icon": "map-marker-alt",
- "pin_display": 1
}
}, - "folder_uuid": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
- "description": "Hairline crack approximately 2m long running diagonally across the north face",
- "bim_data": {
- "ifc_guid": "3cUkl32yn0kuek3rp1IGXS",
- "element_type": "IfcWall",
- "element_name": "Basic Wall: Brick - 270mm",
- "originating_system": "Revit 2024",
- "authoring_tool_id": "revit-2024-exporter-v3.1",
- "external_id": "f781426a-0a88-4f9c-b975-d65331d5fd84",
- "classifications": [
- {
- "system": "Uniclass 2015",
- "edition": "2015",
- "code": "Ss_25_10_30",
- "name": "Masonry wall systems"
}
], - "property_sets": {
- "Pset_WallCommon": {
- "IsExternal": true,
- "FireRating": "2HR",
- "LoadBearing": true
}, - "Dimensions": {
- "Area": 45.6,
- "Length": 12.3,
- "Height": 3.7
}
}, - "spatial_location": {
- "building": "Main Terminal",
- "storey": "Level 2",
- "space": "Room 204",
- "zone": "Zone A"
}
}, - "template_uuid": "e4f5a6b7-c8d9-0123-abcd-ef4567890123",
- "template_data": {
- "short_text": {
- "value": "Updated crack description",
- "custom_field_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
}, - "images": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "type": "annotation-file"
}
], - "supporting_image": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "type": "annotation-file"
}
}{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "annotation_name": "string",
- "annotation_type": "USER",
- "drawing_type": "Point",
- "description": "string",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "bim_data": { },
- "featured_image": {
- "uuid": "string",
- "url": "string",
- "file_name": "string",
- "source_type": "string"
}, - "supporting_image": {
- "uuid": "string",
- "url": "string",
- "file_name": "string",
- "source_type": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "asset": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "address": "string",
- "location": "string",
- "metadata": {
- "plane_elevation": "string",
- "relative_level": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "dataset_uuid": "24d83e1a-5c51-45c1-b39e-fd35c214de0e",
- "dataset": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "date": "string",
- "description": "string",
- "clipping_plane": [
- {
- "normal": [
- -0.03892423536844968,
- 0.5,
- 0.2
], - "distance": 0
}
], - "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "screenshot": "string",
- "image1": "string",
- "image2": "string",
- "image3": "string",
- "gigapixels": "string",
- "dataset_type": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8"
}, - "folder": "string",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "drawing_uuid": "4d04804c-8135-43ff-bf5a-9639c7bd05f2",
- "drawing": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "type": "Point",
- "geojson": {
- "type": "string",
- "bbox": [ ],
- "features": { }
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "annotation": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "annotation_name": "string",
- "annotation_type": "USER",
- "drawing_type": "Point",
- "description": "string",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "bim_data": { },
- "folder": "string",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}, - "relationships": {
- "photos": {
- "links": "/v1/external/api/companies/{company}/photos?filter[asset]=<uuid>"
}, - "files": {
- "links": "/v1/external/api/companies/{company}/asset-files?filter[annotation]=<uuid>"
}, - "template_data": {
- "links": "/v1/external/api/companies/{company}/template_data"
}
}
}
}Delete an annotation from the database, along with its associated photos and template data.
| company required | string |
| asset required | string |
| annotation required | string |
{- "error": "Unauthenticated."
}Generate presigned upload URLs for the files that should be linked to an annotation. Returns signed URLs that can be used to upload files directly to cloud storage.
| company required | string |
| asset required | string |
| annotation required | string |
Request presigned upload URLs for annotation image files
Array of objects [ 1 .. 50 ] items Array of files to generate presigned URLs for (1-50 files) |
{- "files": [
- {
- "filename": "crack-photo.jpg",
- "mime_type": "image/jpeg",
- "size_bytes": 2048576
}
]
}{- "data": [
- {
- "signed_url": "string",
- "expires_at": "2019-08-24T14:15:22Z",
- "upload_path": "string",
- "original_filename": "crack-photo.jpg",
- "unique_filename": "0192a3b4-c5d6-7890-abcd-ef1234567890.jpg",
- "mime_type": "image/jpeg",
- "size_bytes": 2048576
}
]
}Save files that have been uploaded via presigned URLs for the provided annotation. This should be called after successfully generating the presigned urls for the files returned by the presign endpoint.
| company required | string |
| asset required | string |
| annotation required | string |
Save files with presigned URLs for the provided annotation.
Array of objects [ 1 .. 50 ] items Array of uploaded files to save (1-50 files) |
{- "files": [
- {
- "upload_path": "datasets/company-slug/asset-files/abc123.jpg",
- "original_filename": "crack-photo.jpg",
- "unique_filename": "0192a3b4-c5d6-7890-abcd-ef1234567890.jpg",
- "mime_type": "image/jpeg",
- "size_bytes": 2048576
}
]
}{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "filename": "DOC0001.pdf",
- "unique_filename": "DOC0001.pdf",
- "mime_type": "application/pdf",
- "file_size": 0,
- "signed_url": "string",
- "folder_path": "Documents/Reports/2024",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve a specific drawing by its UUID, ensuring it belongs to the specified company. You can include the related annotation using the 'include' parameter.
| company required | string <uuid> Company UUID |
| annotation required | string <uuid> Annotation UUID |
| drawing required | string <uuid> Drawing UUID |
| include | string Example: include=annotation Comma-separated list of related resources to include (annotation) |
{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "type": "Point",
- "geojson": {
- "type": "string",
- "bbox": [ ],
- "features": { }
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "annotation": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "annotation_name": "string",
- "annotation_type": "USER",
- "drawing_type": "Point",
- "description": "string",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "bim_data": { },
- "folder": "string",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}Update a drawing's geometry and/or visual properties independently. Partial updates are supported: send geometry only, properties only, or both.
| company required | string |
| asset required | string |
| annotation required | string |
| drawing required | string |
Update drawing geometry, properties, or both. Omitted sections remain unchanged.
object GeoJSON geometry object with 3D WGS84 coordinates [longitude, latitude, elevation]. | |
object Optional visual properties for the drawing. Omitted properties remain unchanged. |
{- "geometry": {
- "type": "Point",
- "coordinates": [
- 150.123,
- -33.456,
- 100
]
}, - "properties": {
- "stroke": "#ff0000",
- "stroke_width": 3,
- "stroke_opacity": 1,
- "clamped": false,
- "fill": "#ff0000",
- "fill_opacity": 0.3,
- "fill_is_visible": false,
- "drawing_is_visible": true,
- "pin_icon": "map-marker-alt",
- "pin_display": 1
}
}{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "type": "Point",
- "geojson": {
- "type": "string",
- "bbox": [ ],
- "features": { }
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "annotation": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "annotation_name": "string",
- "annotation_type": "USER",
- "drawing_type": "Point",
- "description": "string",
- "camera_pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "bim_data": { },
- "folder": "string",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}
}Retrieve a paginated collection of folders for the specified asset.
This endpoint uses cursor-based pagination for efficient handling of large sets of data.
| company required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Company UUID |
| asset required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Asset UUID |
| cursor | string Example: cursor=eyJjcmVhdGVkX2F0IjoiMjAyNC0wMS0xNSAxNDozMDowMCIsImlkIjoxMjN9 Cursor token for pagination. Use the next_cursor from the previous response to get the next page. |
| per_page | integer [ 1 .. 100 ] Default: 15 Example: per_page=25 Number of items per page (maximum: 100, default: 15) |
| filter[name] | string Example: filter[name]=Inspections Filter folders by name (partial match) |
| filter[type] | string Enum: "annotation" "file" "annotation-file" "project" Example: filter[type]=annotation Filter folders by type (exact match) |
{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "type": "annotation",
- "path": "string",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "project_folder": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve a specific folder by its UUID, ensuring it belongs to the specified asset and company.
| company required | string <uuid> Company UUID |
| asset required | string <uuid> Asset UUID |
| folder required | string <uuid> Folder UUID |
{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "type": "annotation",
- "path": "string",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "project_folder": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "relationships": {
- "annotations": {
- "links": "/v1/external/api/companies/{company}/annotations?filter[folder]=<uuid>"
}, - "files": {
- "links": "/v1/external/api/companies/{company}/asset-files?filter[folder]=<uuid>"
}
}
}
}Create new folders for the specified asset.
| company required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Company UUID |
| asset required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Asset UUID |
Create one or more folders on an asset. Each folder can optionally be nested under an existing parent folder.
required | Array of objects [ 1 .. 100 ] items Array of folders to create |
{- "folders": [
- {
- "name": "Inspection Results",
- "type": "annotation",
- "parent_folder_uuid": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
- "annotation_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
]
}{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "type": "annotation",
- "path": "string",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "project_folder": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Delete a folder from the specified asset. The folder must not contain any child folders, annotations, or asset files.
| company required | string <uuid> Company UUID |
| asset required | string <uuid> Asset UUID |
| folder required | string <uuid> Folder UUID |
{- "error": "Unauthenticated."
}Update an existing folder. Only the fields provided in the request body will be updated. Omitted fields remain unchanged.
| company required | string <uuid> Company UUID |
| asset required | string <uuid> Asset UUID |
| folder required | string <uuid> Folder UUID |
Update an existing folder. Only provided fields will be updated.
| name | string <= 255 characters New name for the folder |
| parent_folder_uuid | string or null <uuid> UUID of an existing parent folder belonging to the same asset. Set to null to move the folder to root level. |
{- "name": "Renamed Folder",
- "parent_folder_uuid": "f1a2b3c4-d5e6-7890-abcd-ef1234567890"
}{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "type": "annotation",
- "path": "string",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "project_folder": true,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "relationships": {
- "annotations": {
- "links": "/v1/external/api/companies/{company}/annotations?filter[folder]=<uuid>"
}, - "files": {
- "links": "/v1/external/api/companies/{company}/asset-files?filter[folder]=<uuid>"
}
}
}
}Retrieve a paginated collection of templates that belong to the specified company.
This endpoint uses cursor-based pagination for efficient handling of large datasets.
| company required | string <uuid> Company UUID |
| per_page | integer [ 1 .. 100 ] Example: per_page=15 Number of templates per page (max 100) |
| cursor | string Cursor for pagination (provided in previous response) |
{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "description": "string",
- "type": "string",
- "json_schema": {
- "property1": "string",
- "property2": "string"
}, - "ui_schema": {
- "property1": "string",
- "property2": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve a specific template.
| company required | string <uuid> Company UUID |
| template required | string <uuid> Template UUID |
{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "description": "string",
- "type": "string",
- "json_schema": {
- "property1": "string",
- "property2": "string"
}, - "ui_schema": {
- "property1": "string",
- "property2": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}Retrieve custom fields associated with the specified template.
| company required | string <uuid> Company UUID |
| template required | string <uuid> Template UUID |
{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "slug": "string",
- "description": "string",
- "type": "text",
- "scope": "template",
- "user_defined_values": true,
- "metadata": { },
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]
}Users represent people who have access to Trendspek. Users have a Role within a Company. The Role governs what they are able to do within Trendspek.
Retrieve a paginated collection of users within the billing company.
You can filter the results by fuzzy search (searches email, first_name, last_name), first_name, last_name, email, or company UUID.
This endpoint uses cursor-based pagination for efficient handling of large sets of data.
| company required | string <uuid> Company UUID |
| cursor | string Example: cursor=eyJjcmVhdGVkX2F0IjoiMjAyNC0wMS0xNSAxNDozMDowMCIsImlkIjoxMjN9 Cursor token for pagination. Use the next_cursor from the previous response to get the next page. |
| per_page | integer [ 1 .. 100 ] Default: 15 Example: per_page=25 Number of items per page (maximum: 100, default: 15) |
| filter[fuzzy-search] | string Example: filter[fuzzy-search]=John Fuzzy search across email, first_name, and last_name fields |
| filter[first_name] | string Example: filter[first_name]=John Filter users by first name (partial match) |
| filter[last_name] | string Example: filter[last_name]=Doe Filter users by last name (partial match) |
| filter[email] | string Example: filter[email]=john@example.com Filter users by email (partial match) |
| filter[company] | string <uuid> Example: filter[company]=550e8400-e29b-41d4-a716-446655440000 Filter users by company UUID |
{- "data": [
- {
- "uuid": "string",
- "first_name": "string",
- "last_name": "string",
- "email": "string",
- "phone_number": "string",
- "measurement_unit": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve a paginated collection of photos that belong to assets within the specified company.
This endpoint uses cursor-based pagination for efficient handling of large datasets.
You can filter the results by asset or dataset UUID.
| company required | string <uuid> Company UUID |
| per_page | integer <= 100 Default: 15 Number of photos per page (max 100) |
| cursor | string Cursor for pagination |
| filter[asset] | string <uuid> Filter photos by asset UUID |
| filter[dataset] | string <uuid> Filter photos by dataset UUID |
| include | string Include related resources (e.g., photo_collection) |
{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "camera_centre": {
- "x": 0,
- "y": 0,
- "z": 0
}, - "direction": {
- "x": 0,
- "y": 0,
- "z": 0
}, - "inverse_matrix": {
- "0": 0.5316195907139125,
- "1": 0.4037727666897304,
- "2": 0.7445456088440071,
- "3": 0.8215591364047421,
- "4": -0.03206235861658679,
- "5": -0.5692210383935539,
- "6": -0.20596406521300437,
- "7": 0.914297302872354,
- "8": -0.3487681834704407
}, - "matrix": {
- "0": 0.5316195907139125,
- "1": 0.4037727666897304,
- "2": 0.7445456088440071,
- "3": 0.8215591364047421,
- "4": -0.03206235861658679,
- "5": -0.5692210383935539,
- "6": -0.20596406521300437,
- "7": 0.914297302872354,
- "8": -0.3487681834704407
}, - "frustum_aspect_ratio": 0,
- "fov": 0,
- "ratio": 0,
- "orientation": {
- "x": 0,
- "y": 0,
- "z": 0,
- "w": 0
}, - "position": {
- "latitude": 0,
- "longitude": 0,
- "height": 0
}, - "image_paths": {
- "large": "string",
- "small": "string",
- "thumbnail": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "photo_collection_uuid": "5c376c7e-c142-4105-b17c-f73fc6104f8e",
- "photo_collection": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "width": 0,
- "height": 0,
- "lens_distortion_coefficients": [
- 0
], - "sensor_over_focal": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "deleted_at": "2019-08-24T14:15:22Z",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "asset": { },
- "dataset_uuid": "24d83e1a-5c51-45c1-b39e-fd35c214de0e",
- "dataset": { }
}
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve a specific photo by its UUID, ensuring it belongs to an asset within the specified company.
| company required | string <uuid> Company UUID |
| photo required | string <uuid> Photo UUID |
| include | string Include related resources (e.g., photo_collection) |
{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "camera_centre": {
- "x": 0,
- "y": 0,
- "z": 0
}, - "direction": {
- "x": 0,
- "y": 0,
- "z": 0
}, - "inverse_matrix": {
- "0": 0.5316195907139125,
- "1": 0.4037727666897304,
- "2": 0.7445456088440071,
- "3": 0.8215591364047421,
- "4": -0.03206235861658679,
- "5": -0.5692210383935539,
- "6": -0.20596406521300437,
- "7": 0.914297302872354,
- "8": -0.3487681834704407
}, - "matrix": {
- "0": 0.5316195907139125,
- "1": 0.4037727666897304,
- "2": 0.7445456088440071,
- "3": 0.8215591364047421,
- "4": -0.03206235861658679,
- "5": -0.5692210383935539,
- "6": -0.20596406521300437,
- "7": 0.914297302872354,
- "8": -0.3487681834704407
}, - "frustum_aspect_ratio": 0,
- "fov": 0,
- "ratio": 0,
- "orientation": {
- "x": 0,
- "y": 0,
- "z": 0,
- "w": 0
}, - "position": {
- "latitude": 0,
- "longitude": 0,
- "height": 0
}, - "image_paths": {
- "large": "string",
- "small": "string",
- "thumbnail": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "photo_collection_uuid": "5c376c7e-c142-4105-b17c-f73fc6104f8e",
- "photo_collection": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "width": 0,
- "height": 0,
- "lens_distortion_coefficients": [
- 0
], - "sensor_over_focal": 0,
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z",
- "deleted_at": "2019-08-24T14:15:22Z",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "asset": { },
- "dataset_uuid": "24d83e1a-5c51-45c1-b39e-fd35c214de0e",
- "dataset": { }
}
}
}Retrieve a paginated collection of asset files that belong to assets within the specified company.
This endpoint uses cursor-based pagination for efficient handling of large datasets.
| company required | string <uuid> Company UUID |
| per_page | integer [ 1 .. 100 ] Default: 15 Number of items to return per page (1-100) |
| cursor | string Cursor for pagination |
| filter[asset] | string <uuid> Example: filter[asset]=550e8400-e29b-41d4-a716-446655440002 Filter asset file by asset UUID |
| filter[annotation] | string <uuid> Example: filter[annotation]=550e8400-e29b-41d4-a716-446655440002 Filter asset file by annotation UUID |
| filter[folder] | string <uuid> Example: filter[folder]=550e8400-e29b-41d4-a716-446655440003 Filter asset files by folder UUID. The folder must belong to the same company. |
{- "data": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "filename": "DOC0001.pdf",
- "unique_filename": "DOC0001.pdf",
- "mime_type": "application/pdf",
- "file_size": 0,
- "signed_url": "string",
- "folder_path": "Documents/Reports/2024",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
], - "links": {
- "first": "string",
- "last": "string",
- "prev": "string",
- "next": "string"
}, - "meta": {
- "path": "string",
- "per_page": 0,
- "next_cursor": "string",
- "prev_cursor": "string"
}
}Retrieve a specific asset file by its UUID, ensuring it belongs to an asset within the specified company.
| company required | string <uuid> Company UUID |
| asset_file required | string <uuid> Asset File UUID |
| include | string Example: include=asset Comma-separated list of relationships to include (asset) |
{- "data": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "filename": "DOC0001.pdf",
- "unique_filename": "DOC0001.pdf",
- "mime_type": "application/pdf",
- "file_size": 0,
- "signed_url": "string",
- "folder_path": "Documents/Reports/2024",
- "folder_uuid": "f7e5e551-618f-4c64-957c-171c3285c667",
- "asset_uuid": "76807d23-a41c-4ee1-a173-773f47fc22c8",
- "asset": {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "name": "string",
- "pose": {
- "heading": 1.6901096450070003,
- "pitch": -0.3824610189425868,
- "roll": 6.283185307179586,
- "position": {
- "x": -2341050.836201532,
- "y": 4866765.726717598,
- "z": -3382017.3390386524
}
}, - "address": "string",
- "location": "string",
- "metadata": {
- "plane_elevation": "string",
- "relative_level": "string"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}, - "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}