Spatial asset service#
The spatial asset service manages spatial assets (point clouds, etc.) and their metadata. Spatial asset data is stored in Dagger; Nominal tracks metadata and references.
OpenAPI file: SpatialService.json
Endpoints#
Get#
GET /spatial/v1/spatials/{spatialRid}
Returns spatial asset metadata associated with a spatial asset rid.
Path parameters
spatialRidstring (RID) required
Response
ridstring (RID)Unique resource identifier for this spatial asset.
titlestringHuman-readable name.
descriptionstringOptional longer description.
labelsarray of stringLabels for categorization and filtering.
propertiesmap ofPropertyNameto stringArbitrary key-value metadata.
createdBystring (RID)RID of the user who created this asset.
createdAtstring (date-time)When this asset was created.
updatedAtstring (date-time)When this asset was last modified.
isArchivedbooleanWhether this asset has been archived.
daggerUuidstring (UUID)The UUID of the Dagger model containing this asset’s data. Supplied by the caller at create time.
typeMetadataSpatialTypeMetadataType-specific metadata (e.g. sensor metadata for point clouds). The variant of this union also serves as the type discriminator — there is no separate spatialType field.
Set
typeto"pointCloud".pointCloudPointCloudMetadata
Fields of
PointCloudMetadatasensorModelstringThe sensor model name, e.g. “Velodyne VLP-16”, “Ouster OS1-128”.
coordinateSystemstringCoordinate reference system identifier, e.g. “EPSG:4326”, “ENU”.
resolutionMmnumberSpatial resolution of the point cloud in millimeters.
scanPatternScanPatternThe scan pattern of the lidar sensor.
Values of
ScanPatternROTATING
SOLID_STATE
FLASH
MECHANICAL
startTimestampTimestampStart of the time range covered by this spatial asset.
Fields of
Timestampsecondsinteger (int64)
nanosinteger (int64)
endTimestampTimestampEnd of the time range covered by this spatial asset.
sourceHandleHandleOptional reference to the original source data (e.g., S3 path) for provenance tracking.
Set
typeto"s3".s3string
Request
curl "https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.get(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.get(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.get(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<spatial rid>",
"title": "<title>",
"description": "<description>",
"labels": [
"<label>"
],
"properties": {
"<key>": "<property value>"
},
"createdBy": "<created by>",
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"isArchived": true,
"daggerUuid": "<dagger uuid>",
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING"
}
},
"startTimestamp": {
"seconds": 1,
"nanos": 1
},
"endTimestamp": {
"seconds": 1,
"nanos": 1
},
"sourceHandle": {
"type": "s3",
"s3": "<s3 path>"
}
}
Update metadata#
PUT /spatial/v1/spatials/{spatialRid}
Updates the metadata for a spatial asset associated with the given rid.
Path parameters
spatialRidstring (RID) required
Body
titlestring
descriptionstring
labelsarray of string
propertiesmap ofPropertyNameto string
typeMetadataSpatialTypeMetadata
Set
typeto"pointCloud".pointCloudPointCloudMetadata
Fields of
PointCloudMetadatasensorModelstringThe sensor model name, e.g. “Velodyne VLP-16”, “Ouster OS1-128”.
coordinateSystemstringCoordinate reference system identifier, e.g. “EPSG:4326”, “ENU”.
resolutionMmnumberSpatial resolution of the point cloud in millimeters.
scanPatternScanPatternThe scan pattern of the lidar sensor.
Values of
ScanPatternROTATING
SOLID_STATE
FLASH
MECHANICAL
startTimestampTimestamp
Fields of
Timestampsecondsinteger (int64) required
nanosinteger (int64) required
endTimestampTimestamp
sourceHandleHandle
Set
typeto"s3".s3string
Response
ridstring (RID)Unique resource identifier for this spatial asset.
titlestringHuman-readable name.
descriptionstringOptional longer description.
labelsarray of stringLabels for categorization and filtering.
propertiesmap ofPropertyNameto stringArbitrary key-value metadata.
createdBystring (RID)RID of the user who created this asset.
createdAtstring (date-time)When this asset was created.
updatedAtstring (date-time)When this asset was last modified.
isArchivedbooleanWhether this asset has been archived.
daggerUuidstring (UUID)The UUID of the Dagger model containing this asset’s data. Supplied by the caller at create time.
typeMetadataSpatialTypeMetadataType-specific metadata (e.g. sensor metadata for point clouds). The variant of this union also serves as the type discriminator — there is no separate spatialType field.
Set
typeto"pointCloud".pointCloudPointCloudMetadata
Fields of
PointCloudMetadatasensorModelstringThe sensor model name, e.g. “Velodyne VLP-16”, “Ouster OS1-128”.
coordinateSystemstringCoordinate reference system identifier, e.g. “EPSG:4326”, “ENU”.
resolutionMmnumberSpatial resolution of the point cloud in millimeters.
scanPatternScanPatternThe scan pattern of the lidar sensor.
Values of
ScanPatternROTATING
SOLID_STATE
FLASH
MECHANICAL
startTimestampTimestampStart of the time range covered by this spatial asset.
Fields of
Timestampsecondsinteger (int64)
nanosinteger (int64)
endTimestampTimestampEnd of the time range covered by this spatial asset.
sourceHandleHandleOptional reference to the original source data (e.g., S3 path) for provenance tracking.
Set
typeto"s3".s3string
Request
curl -X PUT "https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"title": "<title>",
"description": "<description>",
"labels": [
"<label>"
],
"properties": {
"<key>": "<property value>"
},
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING"
}
},
"startTimestamp": {
"seconds": 1,
"nanos": 1
},
"endTimestamp": {
"seconds": 1,
"nanos": 1
},
"sourceHandle": {
"type": "s3",
"s3": "<s3 path>"
}
}'
import requests
response = requests.put(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"description": "<description>",
"labels": ["<label>"],
"properties": {"<key>": "<property value>"},
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING",
},
},
"startTimestamp": {"seconds": 1, "nanos": 1},
"endTimestamp": {"seconds": 1, "nanos": 1},
"sourceHandle": {"type": "s3", "s3": "<s3 path>"},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.put(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"description": "<description>",
"labels": ["<label>"],
"properties": {"<key>": "<property value>"},
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING",
},
},
"startTimestamp": {"seconds": 1, "nanos": 1},
"endTimestamp": {"seconds": 1, "nanos": 1},
"sourceHandle": {"type": "s3", "s3": "<s3 path>"},
},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.put(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"description": "<description>",
"labels": ["<label>"],
"properties": {"<key>": "<property value>"},
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING",
},
},
"startTimestamp": {"seconds": 1, "nanos": 1},
"endTimestamp": {"seconds": 1, "nanos": 1},
"sourceHandle": {"type": "s3", "s3": "<s3 path>"},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<spatial rid>",
"title": "<title>",
"description": "<description>",
"labels": [
"<label>"
],
"properties": {
"<key>": "<property value>"
},
"createdBy": "<created by>",
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"isArchived": true,
"daggerUuid": "<dagger uuid>",
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING"
}
},
"startTimestamp": {
"seconds": 1,
"nanos": 1
},
"endTimestamp": {
"seconds": 1,
"nanos": 1
},
"sourceHandle": {
"type": "s3",
"s3": "<s3 path>"
}
}
Batch get#
POST /spatial/v1/spatials/batchGet
Returns spatial asset metadata for each given spatial asset rid.
Body
spatialRidsarray of string (RID)
Response
responsesarray ofSpatial
Fields of
Spatialridstring (RID)Unique resource identifier for this spatial asset.
titlestringHuman-readable name.
descriptionstringOptional longer description.
labelsarray of stringLabels for categorization and filtering.
propertiesmap ofPropertyNameto stringArbitrary key-value metadata.
createdBystring (RID)RID of the user who created this asset.
createdAtstring (date-time)When this asset was created.
updatedAtstring (date-time)When this asset was last modified.
isArchivedbooleanWhether this asset has been archived.
daggerUuidstring (UUID)The UUID of the Dagger model containing this asset’s data. Supplied by the caller at create time.
typeMetadataSpatialTypeMetadataType-specific metadata (e.g. sensor metadata for point clouds). The variant of this union also serves as the type discriminator — there is no separate spatialType field.
Set
typeto"pointCloud".pointCloudPointCloudMetadata
Fields of
PointCloudMetadatasensorModelstringThe sensor model name, e.g. “Velodyne VLP-16”, “Ouster OS1-128”.
coordinateSystemstringCoordinate reference system identifier, e.g. “EPSG:4326”, “ENU”.
resolutionMmnumberSpatial resolution of the point cloud in millimeters.
scanPatternScanPatternThe scan pattern of the lidar sensor.
Values of
ScanPatternROTATING
SOLID_STATE
FLASH
MECHANICAL
startTimestampTimestampStart of the time range covered by this spatial asset.
Fields of
Timestampsecondsinteger (int64)
nanosinteger (int64)
endTimestampTimestampEnd of the time range covered by this spatial asset.
sourceHandleHandleOptional reference to the original source data (e.g., S3 path) for provenance tracking.
Set
typeto"s3".s3string
Request
curl -X POST "https://api.gov.nominal.io/api/spatial/v1/spatials/batchGet" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"spatialRids": [
"<spatial rid>"
]
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/spatial/v1/spatials/batchGet",
headers={"Authorization": "Bearer <api key>"},
json={"spatialRids": ["<spatial rid>"]},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/spatial/v1/spatials/batchGet",
headers={"Authorization": "Bearer <api key>"},
json={"spatialRids": ["<spatial rid>"]},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/spatial/v1/spatials/batchGet",
headers={"Authorization": "Bearer <api key>"},
json={"spatialRids": ["<spatial rid>"]},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"responses": [
{
"rid": "<spatial rid>",
"title": "<title>",
"description": "<description>",
"labels": [
"<label>"
],
"properties": {
"<key>": "<property value>"
},
"createdBy": "<created by>",
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"isArchived": true,
"daggerUuid": "<dagger uuid>",
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING"
}
},
"startTimestamp": {
"seconds": 1,
"nanos": 1
},
"endTimestamp": {
"seconds": 1,
"nanos": 1
},
"sourceHandle": {
"type": "s3",
"s3": "<s3 path>"
}
}
]
}
Search#
POST /spatial/v1/spatials/search
Returns metadata about spatial assets that match a given query.
Body
querySearchSpatialsQueryrequired
Set
typeto"searchText".searchTextstring
Set
typeto"label".labelstring
Set
typeto"property".propertyProperty
Fields of
Propertynamestring required
valuestring required
Set
typeto"and".andarray ofSearchSpatialsQuery
Set
typeto"or".orarray ofSearchSpatialsQuery
Set
typeto"workspace".workspacestring (RID)
Set
typeto"spatialType".spatialTypeSpatialType
Values of
SpatialTypePOINT_CLOUD
pageSizeintegerDefaults to 100. Will throw if larger than 1000.
tokenstring
sortOptionsSortOptionsrequired
Fields of
SortOptionsisDescendingboolean required
fieldSortFieldrequired
Values of
SortFieldCREATED_AT
archivedStatusesarray ofArchivedStatusDefault search status is NOT_ARCHIVED if none are provided.
Values of
ArchivedStatusNOT_ARCHIVED
ARCHIVED
Response
resultsarray ofSpatial
Fields of
Spatialridstring (RID)Unique resource identifier for this spatial asset.
titlestringHuman-readable name.
descriptionstringOptional longer description.
labelsarray of stringLabels for categorization and filtering.
propertiesmap ofPropertyNameto stringArbitrary key-value metadata.
createdBystring (RID)RID of the user who created this asset.
createdAtstring (date-time)When this asset was created.
updatedAtstring (date-time)When this asset was last modified.
isArchivedbooleanWhether this asset has been archived.
daggerUuidstring (UUID)The UUID of the Dagger model containing this asset’s data. Supplied by the caller at create time.
typeMetadataSpatialTypeMetadataType-specific metadata (e.g. sensor metadata for point clouds). The variant of this union also serves as the type discriminator — there is no separate spatialType field.
Set
typeto"pointCloud".pointCloudPointCloudMetadata
Fields of
PointCloudMetadatasensorModelstringThe sensor model name, e.g. “Velodyne VLP-16”, “Ouster OS1-128”.
coordinateSystemstringCoordinate reference system identifier, e.g. “EPSG:4326”, “ENU”.
resolutionMmnumberSpatial resolution of the point cloud in millimeters.
scanPatternScanPatternThe scan pattern of the lidar sensor.
Values of
ScanPatternROTATING
SOLID_STATE
FLASH
MECHANICAL
startTimestampTimestampStart of the time range covered by this spatial asset.
Fields of
Timestampsecondsinteger (int64)
nanosinteger (int64)
endTimestampTimestampEnd of the time range covered by this spatial asset.
sourceHandleHandleOptional reference to the original source data (e.g., S3 path) for provenance tracking.
Set
typeto"s3".s3string
nextPageTokenstring
Request
curl -X POST "https://api.gov.nominal.io/api/spatial/v1/spatials/search" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"query": {
"type": "searchText",
"searchText": "<search text>"
},
"sortOptions": {
"isDescending": true,
"field": "CREATED_AT"
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/spatial/v1/spatials/search",
headers={"Authorization": "Bearer <api key>"},
json={
"query": {"type": "searchText", "searchText": "<search text>"},
"sortOptions": {"isDescending": True, "field": "CREATED_AT"},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/spatial/v1/spatials/search",
headers={"Authorization": "Bearer <api key>"},
json={
"query": {"type": "searchText", "searchText": "<search text>"},
"sortOptions": {"isDescending": True, "field": "CREATED_AT"},
},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/spatial/v1/spatials/search",
headers={"Authorization": "Bearer <api key>"},
json={
"query": {"type": "searchText", "searchText": "<search text>"},
"sortOptions": {"isDescending": True, "field": "CREATED_AT"},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"results": [
{
"rid": "<spatial rid>",
"title": "<title>",
"description": "<description>",
"labels": [
"<label>"
],
"properties": {
"<key>": "<property value>"
},
"createdBy": "<created by>",
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"isArchived": true,
"daggerUuid": "<dagger uuid>",
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING"
}
},
"startTimestamp": {
"seconds": 1,
"nanos": 1
},
"endTimestamp": {
"seconds": 1,
"nanos": 1
},
"sourceHandle": {
"type": "s3",
"s3": "<s3 path>"
}
}
],
"nextPageToken": "<token>"
}
Create#
POST /spatial/v1/spatials
Creates and persists a spatial asset entity with the given metadata.
Body
titlestring required
daggerUuidstring (UUID) requiredUUID of the Dagger model that backs this spatial asset. Callers must create the model in Dagger before calling create.
typeMetadataSpatialTypeMetadatarequired
Set
typeto"pointCloud".pointCloudPointCloudMetadata
Fields of
PointCloudMetadatasensorModelstringThe sensor model name, e.g. “Velodyne VLP-16”, “Ouster OS1-128”.
coordinateSystemstringCoordinate reference system identifier, e.g. “EPSG:4326”, “ENU”.
resolutionMmnumberSpatial resolution of the point cloud in millimeters.
scanPatternScanPatternThe scan pattern of the lidar sensor.
Values of
ScanPatternROTATING
SOLID_STATE
FLASH
MECHANICAL
labelsarray of string
propertiesmap ofPropertyNameto string
markingRidsarray of string (RID)The markings to apply to the created spatial asset. If not provided, the asset will be visible to all users in the same workspace.
descriptionstring
startTimestampTimestampStart of the time range covered by this spatial asset.
Fields of
Timestampsecondsinteger (int64) required
nanosinteger (int64) required
endTimestampTimestampEnd of the time range covered by this spatial asset.
sourceHandleHandleOptional reference to the original source data (e.g., S3 path) for provenance tracking.
Set
typeto"s3".s3string
workspacestring (RID)The workspace in which to create the spatial asset. If not provided, the asset will be created in the default workspace for the user’s organization, if the default workspace is configured.
Response
ridstring (RID)Unique resource identifier for this spatial asset.
titlestringHuman-readable name.
descriptionstringOptional longer description.
labelsarray of stringLabels for categorization and filtering.
propertiesmap ofPropertyNameto stringArbitrary key-value metadata.
createdBystring (RID)RID of the user who created this asset.
createdAtstring (date-time)When this asset was created.
updatedAtstring (date-time)When this asset was last modified.
isArchivedbooleanWhether this asset has been archived.
daggerUuidstring (UUID)The UUID of the Dagger model containing this asset’s data. Supplied by the caller at create time.
typeMetadataSpatialTypeMetadataType-specific metadata (e.g. sensor metadata for point clouds). The variant of this union also serves as the type discriminator — there is no separate spatialType field.
Set
typeto"pointCloud".pointCloudPointCloudMetadata
Fields of
PointCloudMetadatasensorModelstringThe sensor model name, e.g. “Velodyne VLP-16”, “Ouster OS1-128”.
coordinateSystemstringCoordinate reference system identifier, e.g. “EPSG:4326”, “ENU”.
resolutionMmnumberSpatial resolution of the point cloud in millimeters.
scanPatternScanPatternThe scan pattern of the lidar sensor.
Values of
ScanPatternROTATING
SOLID_STATE
FLASH
MECHANICAL
startTimestampTimestampStart of the time range covered by this spatial asset.
Fields of
Timestampsecondsinteger (int64)
nanosinteger (int64)
endTimestampTimestampEnd of the time range covered by this spatial asset.
sourceHandleHandleOptional reference to the original source data (e.g., S3 path) for provenance tracking.
Set
typeto"s3".s3string
Request
curl -X POST "https://api.gov.nominal.io/api/spatial/v1/spatials" \
-H "Authorization: Bearer <api key>" \
-H "Content-Type: application/json" \
--data '{
"title": "<title>",
"daggerUuid": "<dagger uuid>",
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING"
}
}
}'
import requests
response = requests.post(
"https://api.gov.nominal.io/api/spatial/v1/spatials",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"daggerUuid": "<dagger uuid>",
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING",
},
},
},
)
response.raise_for_status()
print(response.json())
import httpx
response = httpx.post(
"https://api.gov.nominal.io/api/spatial/v1/spatials",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"daggerUuid": "<dagger uuid>",
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING",
},
},
},
)
response.raise_for_status()
print(response.json())
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.post(
"https://api.gov.nominal.io/api/spatial/v1/spatials",
headers={"Authorization": "Bearer <api key>"},
json={
"title": "<title>",
"daggerUuid": "<dagger uuid>",
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING",
},
},
},
) as response:
response.raise_for_status()
print(await response.json())
asyncio.run(main())
Response: 200
{
"rid": "<spatial rid>",
"title": "<title>",
"description": "<description>",
"labels": [
"<label>"
],
"properties": {
"<key>": "<property value>"
},
"createdBy": "<created by>",
"createdAt": "2026-01-01T00:00:00Z",
"updatedAt": "2026-01-01T00:00:00Z",
"isArchived": true,
"daggerUuid": "<dagger uuid>",
"typeMetadata": {
"type": "pointCloud",
"pointCloud": {
"sensorModel": "<sensor model>",
"coordinateSystem": "<coordinate system>",
"resolutionMm": 1,
"scanPattern": "ROTATING"
}
},
"startTimestamp": {
"seconds": 1,
"nanos": 1
},
"endTimestamp": {
"seconds": 1,
"nanos": 1
},
"sourceHandle": {
"type": "s3",
"s3": "<s3 path>"
}
}
Archive#
PUT /spatial/v1/spatials/{spatialRid}/archive
Archives a spatial asset, excluding it from search. Can be unarchived.
Path parameters
spatialRidstring (RID) required
Response
No content (HTTP 204).
Request
curl -X PUT "https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>/archive" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.put(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>/archive",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
import httpx
response = httpx.put(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>/archive",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.put(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>/archive",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
asyncio.run(main())
Response: 204
No content.
Unarchive#
PUT /spatial/v1/spatials/{spatialRid}/unarchive
Unarchives a previously archived spatial asset.
Path parameters
spatialRidstring (RID) required
Response
No content (HTTP 204).
Request
curl -X PUT "https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>/unarchive" \
-H "Authorization: Bearer <api key>"
import requests
response = requests.put(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>/unarchive",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
import httpx
response = httpx.put(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>/unarchive",
headers={"Authorization": "Bearer <api key>"},
)
response.raise_for_status()
import asyncio
import aiohttp
async def main() -> None:
async with aiohttp.ClientSession() as session:
async with session.put(
"https://api.gov.nominal.io/api/spatial/v1/spatials/<spatial rid>/unarchive",
headers={"Authorization": "Bearer <api key>"},
) as response:
response.raise_for_status()
asyncio.run(main())
Response: 204
No content.
Types#
ArchivedStatus#
NOT_ARCHIVED
ARCHIVED
Handle#
Set type to the name of one of the other fields, and set only that field.
s3string
PointCloudMetadata#
Metadata about the sensor that captured a point cloud.
sensorModelstringThe sensor model name, e.g. “Velodyne VLP-16”, “Ouster OS1-128”.
coordinateSystemstringCoordinate reference system identifier, e.g. “EPSG:4326”, “ENU”.
resolutionMmnumberSpatial resolution of the point cloud in millimeters.
scanPatternScanPatternThe scan pattern of the lidar sensor.
Property#
namestring required
valuestring required
ScanPattern#
ROTATING
SOLID_STATE
FLASH
MECHANICAL
SearchSpatialsQuery#
Set type to the name of one of the other fields, and set only that field.
searchTextstring
labelstring
propertyProperty
andarray ofSearchSpatialsQuery
orarray ofSearchSpatialsQuery
workspacestring (RID)
spatialTypeSpatialType
SortField#
CREATED_AT
SortOptions#
isDescendingboolean required
fieldSortFieldrequired
Spatial#
A spatial asset representing 3D or geospatial data (e.g. point clouds).
ridstring (RID) requiredUnique resource identifier for this spatial asset.
titlestring requiredHuman-readable name.
descriptionstringOptional longer description.
labelsarray of stringLabels for categorization and filtering.
propertiesmap ofPropertyNameto stringArbitrary key-value metadata.
createdBystring (RID) requiredRID of the user who created this asset.
createdAtstring (date-time) requiredWhen this asset was created.
updatedAtstring (date-time) requiredWhen this asset was last modified.
isArchivedboolean requiredWhether this asset has been archived.
daggerUuidstring (UUID) requiredThe UUID of the Dagger model containing this asset’s data. Supplied by the caller at create time.
typeMetadataSpatialTypeMetadatarequiredType-specific metadata (e.g. sensor metadata for point clouds). The variant of this union also serves as the type discriminator — there is no separate spatialType field.
startTimestampTimestampStart of the time range covered by this spatial asset.
endTimestampTimestampEnd of the time range covered by this spatial asset.
sourceHandleHandleOptional reference to the original source data (e.g., S3 path) for provenance tracking.
SpatialType#
The type of spatial data stored in a spatial asset.
POINT_CLOUD
SpatialTypeMetadata#
Type-specific metadata for spatial assets. Each variant holds metadata relevant to a particular spatial asset type.
Set type to the name of one of the other fields, and set only that field.
pointCloudPointCloudMetadata
Timestamp#
Deprecated for new APIs. Use google.protobuf.Timestamp for absolute instants in proto APIs.
This legacy nanosecond precision timestamp type is represented by an epoch time in seconds and a nanosecond offset. The nanosecond offset is from the start of the epoch second, so must be less than 1 billion.
secondsinteger (int64) required
nanosinteger (int64) required
Page design based on Scalar, MIT License.