Nira HTTP API
Getting Started
Before getting started with Nira's HTTP API, be sure you know your organization's Nira URL prefix (e.g. your-organization.nira.app). Visit the login page if you need any help locating it.
You will also need an API key. To generate one, log in to your Nira organization as an administrator, click the Hamburger menu (Upper left corner), then API Keys → Add. Your API key must be included as the value of the x-api-key HTTP header with every request that you make.
Your API requests should be made to your Nira organization's hostname. For example, if your Nira organization's hostname is your-organization.nira.app, the full request URL to retrieve a list of your user groups would be https://your-organization.nira.app/api/groups
Can't find the API call that you need?
Nira's HTTP API is intentionally simple, as our most requested programmability is exposed in the JavaScript SDK Viewer class. Additional API calls can be added upon request -- simply reach out with a brief description of your use case.
Upload automation
For automation of asset uploads, we typically suggest using our python-based niraclient uploader. If you'd like to implement upload automation using your own code, please reach out with a brief description of your use case and we will provide our low-level upload API documentation.
Enterprise plan required
HTTP API access requires a customized Enterprise plan. Please contact us with any questions.
Software vendor integrations
If you are a software vendor interested in adding Nira upload capabilities into your application, please contact us.
| uuid required | string <uuid> Unique identifier for the callout. When importing callouts:
|
| type required | string Default: "CameraBookmark" Enum: "Annotation" "Defect" "Measurement" "CameraBookmark" Specifies the type of callout. Measurement callouts are also referred
to as Polyline Callouts. These values correspond to the Callout Type
labels shown in the Nira app as follows: |
| schemaVersion required | integer The version of the callout data format. Always specify 2. Version 2
expresses measurement |
| coordsys required | string The coordinate system used for the callout's 3D positional data
( On export, the value is set from the export request's Axis order for EPSG:4326: X values ( |
| title | string Title for Annotation and Camera Bookmarks. Also see defectTitle parameter. |
| poiDescription | string Description text for CameraBookmark callouts — the text box that gets shown in the 3D view next to the callout. Whether the box is displayed is controlled by |
| content | Array of objects Rich-text body content for Annotation callouts, produced by Nira's
Slate-based editor. It is an array of block nodes, each of the form
|
| posX | number <double> X coordinate for point callouts. When |
| posY | number <double> Y coordinate for point callouts. When |
| posZ | number <double> Z coordinate for point callouts. Elevation is always expressed in the coordinate system of the asset's source geometry files (e.g. meters if the source files use meters); it is not converted between vertical datums. |
| camPosX | number <double> Camera position X coordinate. |
| camPosY | number <double> Camera position Y coordinate. |
| camPosZ | number <double> Camera position Z coordinate. |
| camTarX | number <double> Camera target X coordinate. |
| camTarY | number <double> Camera target Y coordinate. |
| camTarZ | number <double> Camera target Z coordinate. |
| defectTitle | string Title used when the callout's type is 'Defect'. |
| defectDescription | string Defect description |
| defectSeverity | integer or null Numeric value indicating the severity of the defect. One of 1–5, or null when unclassified. The values correspond to the labels shown in the app: null = Unclassified, 1 = Low, 2 = Normal, 3 = Medium, 4 = High, 5 = Critical. |
| defectType | Array of strings The callout's list of tags, shown as "Observation Tags" in the app. Despite the field name, tags are supported on all callout types, not just Defects. In the app's Layers panel, callouts can be grouped and filtered by these tags, and each tag becomes an autocomplete suggestion for future tagging across the organization. |
| measurementClosed | boolean Indicates whether the polyline forms a closed shape. Measurement / polyline callouts only. |
| measurementLength | number <double> The sum of the lengths of all segments of the polyline. Measurement /
polyline callouts only. Calculated at export time. On import the value
is stored exactly as provided — it is never recalculated from |
| measurementArea | number <double> The area enclosed by the polyline. Closed measurement / polyline
callouts only. Calculated at export time. On import the value is stored
exactly as provided — it is never recalculated from |
| points | Array of numbers[ items <double >[ items <double > = 3 items ] ] An array of ordered 3D points comprising the polyline. Measurement /
polyline callouts only. When |
| viewColorR | number <float> [ 0 .. 255 ] The red component of the callout's display color, in the range 0-255 (not 0.0-1.0). |
| viewColorG | number <float> [ 0 .. 255 ] The green component of the callout's display color, in the range 0-255. |
| viewColorB | number <float> [ 0 .. 255 ] The blue component of the callout's display color, in the range 0-255. |
| showDescriptionInView | boolean Default: true For CameraBookmark callouts, controls whether the callout's |
Array of objects A list of photo callouts associated with this callout. Currently, only
one photo callout per callout is supported, and they are only
applicable to callouts of type Defect. The | |
| pdfReportScreenshotId | string <uuid> Unique identifier of the screenshot image shown for this defect callout in PDF reports. Presence of this attribute implies that this callout was configured to be shown in PDF reports. This attribute is only effective when imported into the same Nira organization from which it was exported. |
{- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "title": "string",
- "poiDescription": "string",
- "content": [
- {
- "type": "p",
- "children": [
- {
- "text": "Inspect the corroded flange."
}
]
}
], - "type": "Annotation",
- "schemaVersion": 2,
- "posX": 0.1,
- "posY": 0.1,
- "posZ": 0.1,
- "camPosX": 0.1,
- "camPosY": 0.1,
- "camPosZ": 0.1,
- "camTarX": 0.1,
- "camTarY": 0.1,
- "camTarZ": 0.1,
- "defectTitle": "string",
- "defectDescription": "string",
- "defectSeverity": 0,
- "defectType": [
- "string"
], - "measurementClosed": true,
- "measurementLength": 0.8870510458946228,
- "measurementArea": 0,
- "points": [
- [
- 63.575,
- 44.632,
- 30.174
], - [
- 63.575,
- 44.632,
- 30.712
]
], - "coordsys": "EPSG:4326",
- "viewColorR": 255,
- "viewColorG": 191,
- "viewColorB": 0,
- "showDescriptionInView": true,
- "photocallouts": [
- {
- "filename": "P0002105.jpg",
- "top": 4026,
- "left": 5076,
- "width": 441,
- "height": 619,
- "url": "string"
}
], - "pdfReportScreenshotId": "78372278-7c24-4f17-acb0-06adfe7460dd"
}Import callouts for a specific asset
Imports callouts onto an asset from a JSON, CSV, or TSV payload. The
payload format must match the Content-Type header: application/json,
text/csv, or text/tab-separated-values.
For JSON, the request body is an array of Callout objects — the same format produced by the export endpoint, so a file exported from the export endpoint or from the Nira app can be imported unchanged. See the Callout schema for the full field reference, including the CSV/TSV column encodings.
Each callout's uuid determines whether it is updated or created: a
uuid matching an existing callout on the same asset updates that
callout in place, while a uuid belonging to a callout on a different
asset (or no uuid at all) creates a new callout with a freshly
generated uuid. On import all fields are optional.
This endpoint requires the organization to have callout import/export enabled, or to be on the Growth or Enterprise plan.
Body size limits are 40 MB for JSON and 100 MB for CSV/TSV.
path Parameters
| asset_suuid required | string The 22-character asset short UUID, as it appears in the asset's URL in the Nira app. Numeric asset ids are not accepted. |
query Parameters
| removeCalloutsBeforeImport | string Default: "0" Enum: "1" "0" When set to "1", ALL existing callouts on the asset are permanently deleted before the import runs, including photo callouts and measurement data. This is destructive, asset-wide, and cannot be undone. Defaults to "0", which leaves existing callouts in place. |
header Parameters
| x-api-key required | string Your API key |
| Content-Type required | string Enum: "application/json" "text/csv" "text/tab-separated-values" The content type of the request body. Must be one of 'application/json', 'text/csv', or 'text/tab-separated-values'. |
Request Body schema: required
| uuid required | string <uuid> Unique identifier for the callout. When importing callouts:
|
| type required | string Default: "CameraBookmark" Enum: "Annotation" "Defect" "Measurement" "CameraBookmark" Specifies the type of callout. Measurement callouts are also referred
to as Polyline Callouts. These values correspond to the Callout Type
labels shown in the Nira app as follows: |
| schemaVersion required | integer The version of the callout data format. Always specify 2. Version 2
expresses measurement |
| coordsys required | string The coordinate system used for the callout's 3D positional data
( On export, the value is set from the export request's Axis order for EPSG:4326: X values ( |
| title | string Title for Annotation and Camera Bookmarks. Also see defectTitle parameter. |
| poiDescription | string Description text for CameraBookmark callouts — the text box that gets shown in the 3D view next to the callout. Whether the box is displayed is controlled by |
| content | Array of objects Rich-text body content for Annotation callouts, produced by Nira's
Slate-based editor. It is an array of block nodes, each of the form
|
| posX | number <double> X coordinate for point callouts. When |
| posY | number <double> Y coordinate for point callouts. When |
| posZ | number <double> Z coordinate for point callouts. Elevation is always expressed in the coordinate system of the asset's source geometry files (e.g. meters if the source files use meters); it is not converted between vertical datums. |
| camPosX | number <double> Camera position X coordinate. |
| camPosY | number <double> Camera position Y coordinate. |
| camPosZ | number <double> Camera position Z coordinate. |
| camTarX | number <double> Camera target X coordinate. |
| camTarY | number <double> Camera target Y coordinate. |
| camTarZ | number <double> Camera target Z coordinate. |
| defectTitle | string Title used when the callout's type is 'Defect'. |
| defectDescription | string Defect description |
| defectSeverity | integer or null Numeric value indicating the severity of the defect. One of 1–5, or null when unclassified. The values correspond to the labels shown in the app: null = Unclassified, 1 = Low, 2 = Normal, 3 = Medium, 4 = High, 5 = Critical. |
| defectType | Array of strings The callout's list of tags, shown as "Observation Tags" in the app. Despite the field name, tags are supported on all callout types, not just Defects. In the app's Layers panel, callouts can be grouped and filtered by these tags, and each tag becomes an autocomplete suggestion for future tagging across the organization. |
| measurementClosed | boolean Indicates whether the polyline forms a closed shape. Measurement / polyline callouts only. |
| measurementLength | number <double> The sum of the lengths of all segments of the polyline. Measurement /
polyline callouts only. Calculated at export time. On import the value
is stored exactly as provided — it is never recalculated from |
| measurementArea | number <double> The area enclosed by the polyline. Closed measurement / polyline
callouts only. Calculated at export time. On import the value is stored
exactly as provided — it is never recalculated from |
| points | Array of numbers[ items <double >[ items <double > = 3 items ] ] An array of ordered 3D points comprising the polyline. Measurement /
polyline callouts only. When |
| viewColorR | number <float> [ 0 .. 255 ] The red component of the callout's display color, in the range 0-255 (not 0.0-1.0). |
| viewColorG | number <float> [ 0 .. 255 ] The green component of the callout's display color, in the range 0-255. |
| viewColorB | number <float> [ 0 .. 255 ] The blue component of the callout's display color, in the range 0-255. |
| showDescriptionInView | boolean Default: true For CameraBookmark callouts, controls whether the callout's |
Array of objects A list of photo callouts associated with this callout. Currently, only
one photo callout per callout is supported, and they are only
applicable to callouts of type Defect. The | |
| pdfReportScreenshotId | string <uuid> Unique identifier of the screenshot image shown for this defect callout in PDF reports. Presence of this attribute implies that this callout was configured to be shown in PDF reports. This attribute is only effective when imported into the same Nira organization from which it was exported. |
Responses
Request samples
- Payload
[- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "title": "string",
- "poiDescription": "string",
- "content": [
- {
- "type": "p",
- "children": [
- {
- "text": "Inspect the corroded flange."
}
]
}
], - "type": "Annotation",
- "schemaVersion": 2,
- "posX": 0.1,
- "posY": 0.1,
- "posZ": 0.1,
- "camPosX": 0.1,
- "camPosY": 0.1,
- "camPosZ": 0.1,
- "camTarX": 0.1,
- "camTarY": 0.1,
- "camTarZ": 0.1,
- "defectTitle": "string",
- "defectDescription": "string",
- "defectSeverity": 0,
- "defectType": [
- "string"
], - "measurementClosed": true,
- "measurementLength": 0.8870510458946228,
- "measurementArea": 0,
- "points": [
- [
- 63.575,
- 44.632,
- 30.174
], - [
- 63.575,
- 44.632,
- 30.712
]
], - "coordsys": "EPSG:4326",
- "viewColorR": 255,
- "viewColorG": 191,
- "viewColorB": 0,
- "showDescriptionInView": true,
- "photocallouts": [
- {
- "filename": "P0002105.jpg",
- "top": 4026,
- "left": 5076,
- "width": 441,
- "height": 619
}
], - "pdfReportScreenshotId": "78372278-7c24-4f17-acb0-06adfe7460dd"
}
]Response samples
- 200
{- "callouts": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "title": "string",
- "poiDescription": "string",
- "content": [
- {
- "type": "p",
- "children": [
- {
- "text": "Inspect the corroded flange."
}
]
}
], - "type": "Annotation",
- "schemaVersion": 2,
- "posX": 0.1,
- "posY": 0.1,
- "posZ": 0.1,
- "camPosX": 0.1,
- "camPosY": 0.1,
- "camPosZ": 0.1,
- "camTarX": 0.1,
- "camTarY": 0.1,
- "camTarZ": 0.1,
- "defectTitle": "string",
- "defectDescription": "string",
- "defectSeverity": 0,
- "defectType": [
- "string"
], - "measurementClosed": true,
- "measurementLength": 0.8870510458946228,
- "measurementArea": 0,
- "points": [
- [
- 63.575,
- 44.632,
- 30.174
], - [
- 63.575,
- 44.632,
- 30.712
]
], - "coordsys": "EPSG:4326",
- "viewColorR": 255,
- "viewColorG": 191,
- "viewColorB": 0,
- "showDescriptionInView": true,
- "photocallouts": [
- {
- "filename": "P0002105.jpg",
- "top": 4026,
- "left": 5076,
- "width": 441,
- "height": 619,
- "url": "string"
}
], - "pdfReportScreenshotId": "78372278-7c24-4f17-acb0-06adfe7460dd"
}
], - "assetId": 0,
- "suuid": "string",
- "removeCalloutsBeforeImport": "string"
}Export callouts for a specific asset
Exports callouts related to the specified asset in the requested format.
path Parameters
| asset_suuid required | string The unique identifier of the asset. |
query Parameters
| format | string Default: "json" Enum: "json" "csv" "tsv" The format of the export. One of 'json', 'csv', or 'tsv'. Defaults to 'json' when omitted. |
| coordsys | string Enum: "local" "asset" "latlong" The coordinate system that will be used for the exported callouts 3D positional data (
|
| include | Array of strings Default: "pointCallouts,polylineCallouts,photoCallouts,pdfReportScreenshotIds" Items Enum: "pointCallouts" "polylineCallouts" "photoCallouts" "pdfReportScreenshotIds" Selects which categories of callout data to include in the export. When omitted, all categories are included. When provided, only the listed categories are included — any category not listed is excluded. Values are matched case-insensitively.
|
header Parameters
| x-api-key required | string Your API key |
Responses
Response samples
- 200
[- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "title": "string",
- "poiDescription": "string",
- "content": [
- {
- "type": "p",
- "children": [
- {
- "text": "Inspect the corroded flange."
}
]
}
], - "type": "Annotation",
- "schemaVersion": 2,
- "posX": 0.1,
- "posY": 0.1,
- "posZ": 0.1,
- "camPosX": 0.1,
- "camPosY": 0.1,
- "camPosZ": 0.1,
- "camTarX": 0.1,
- "camTarY": 0.1,
- "camTarZ": 0.1,
- "defectTitle": "string",
- "defectDescription": "string",
- "defectSeverity": 0,
- "defectType": [
- "string"
], - "measurementClosed": true,
- "measurementLength": 0.8870510458946228,
- "measurementArea": 0,
- "points": [
- [
- 63.575,
- 44.632,
- 30.174
], - [
- 63.575,
- 44.632,
- 30.712
]
], - "coordsys": "EPSG:4326",
- "viewColorR": 255,
- "viewColorG": 191,
- "viewColorB": 0,
- "showDescriptionInView": true,
- "photocallouts": [
- {
- "filename": "P0002105.jpg",
- "top": 4026,
- "left": 5076,
- "width": 441,
- "height": 619,
- "url": "string"
}
], - "pdfReportScreenshotId": "78372278-7c24-4f17-acb0-06adfe7460dd"
}
]Delete an asset
path Parameters
| suuid required | string Assets's base64 encoded uuid |
header Parameters
| x-api-key required | string Your API key |
Responses
Response samples
- 200
{- "success": true,
- "result": {
- "id": 0,
- "name": "string",
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "createdBy": 0,
- "usesvt": true,
- "type": "default",
- "passwordRequired": true,
- "dccname": "string",
- "hideBranding": null
}
}Change an asset's visibility
This controls whether an asset is publicly accessible or private.
path Parameters
| suuid required | string Assets's base64 encoded uuid |
header Parameters
| x-api-key required | string Your API key |
Request Body schema: application/jsonrequired
| visibility | string Enum: "private" "publicly_accessible" |
Responses
Request samples
- Payload
{- "visibility": "private"
}Response samples
- 200
{- "success": true,
- "result": {
- "id": 0,
- "name": "string",
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "createdBy": 0,
- "usesvt": true,
- "type": "default",
- "passwordRequired": true,
- "dccname": "string",
- "hideBranding": null
}
}Delete multiple assets
Delete multiple assets that were created prior to a particular point in time. This can be useful for cleaning up older assets.
query Parameters
| before required | string^\d+d?$ Example: before=30d A timestamp (milliseconds since epoch) or a relative date string in the format "Nd", where N is a positive integer and "d" represents days. For example, "30d" would delete assets created before 30 days ago, and the timestamp "1741201439963" would delete all assets created before 2025-03-05 19:03:59 UTC. |
| confirm required | string^(true|false)$ Example: confirm=true If param is set to 'true', the deletion will be executed. |
header Parameters
| x-api-key required | string Your API key |
Responses
Response samples
- 200
{- "success": true,
- "result": [
- {
- "id": 1,
- "uuid": "550e8400-e29b-41d4-a716-446655440000",
- "name": "Asset"
}
]
}Expire all of a user's sessions
Expire all of the login sessions of a user account with the specified email address. Please note, it can take up to 10 minutes after making this request for the user to be forcibly logged out of an ongoing session.
query Parameters
| email required | string Example: email=example@gmail.com |
header Parameters
| x-api-key required | string Your API key |
Responses
Response samples
- 200
- 404
{- "success": true,
- "result": [
- {
- "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
- "email": "user@example.com",
- "iat": 0,
- "exp": 0
}
]
}