Skip to main content

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.

Callout

The callout object represents a Callout in Nira.

The Callout object

uuid
required
string <uuid>

Unique identifier for the callout.

When importing callouts:

  • If the specified uuid matches an existing callout on the asset, the matching callout will be updated with the specified data.
  • If the uuid does not match a callout for the asset, a new callout will be created. The specified uuid will be used for the new callout as long as the uuid isn't already being used by a callout on a different asset. If the uuid is already being used by a callout on a different asset, a new uuid will be used for the new callout.
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: CameraBookmark = "Basic Text", Annotation = "Rich Text Window", Defect = "Defect Window", Measurement = "Measurement / Defect Window". In the app, these labels are prefixed with "3D Callout - " for point callouts and "Polyline - " for polyline/measurement callouts (e.g. a CameraBookmark appears as "3D Callout - Basic Text").

schemaVersion
required
integer

The version of the callout data format. Always specify 2. Version 2 expresses measurement points in the same coordinate system as the other positional fields (the system named by coordsys). Version 1, or omitting this field, is a legacy format and should not be used.

coordsys
required
string

The coordinate system used for the callout's 3D positional data (posX/Y/Z, camPosX/Y/Z, camTarX/Y/Z, and points), in EPSG format or 'local' for local coordinates. 'local' can only be used with non-georeferenced assets. For latitude/longitude coordinates, EPSG:4326 should be specified.

On export, the value is set from the export request's coordsys query parameter and is local, the asset's EPSG code, or EPSG:4326. On import, if omitted, the coordinates are assumed to be in the asset's internal/local coordinate space and no validation or transformation is performed — this is how legacy exports produced before schemaVersion 2 behave.

Axis order for EPSG:4326: X values (posX, camPosX, camTarX, and the first component of each points entry) are longitude, and Y values are latitude. Z values are elevation in the asset's source-file units and are passed through unconverted.

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 showDescriptionInView. Has no effect on other callout types.

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 { "type": "p", "children": [ { "text": "..." } ] }. If provided, it must be non-empty. In CSV/TSV it is encoded as a JSON string.

posX
number <double>

X coordinate for point callouts. When coordsys is EPSG:4326, this is the longitude.

posY
number <double>

Y coordinate for point callouts. When coordsys is EPSG:4326, this is the latitude.

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 points — and is used for display in the application, such as measurement labels in the orthophoto viewer and the defect dialog. Hand-authored import data should compute this consistently with points.

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 — and is used for display in the application. Hand-authored import data should compute this consistently with points.

points
Array of numbers[ items <double >[ items <double > = 3 items ] ]

An array of ordered 3D points comprising the polyline. Measurement / polyline callouts only. When schemaVersion is 2 or greater, point coordinates follow the declared coordsys. For closed polylines the export omits the duplicate closing point. In CSV/TSV, points are encoded as zero-indexed column triplets point0X, point0Y, point0Z, point1X, ….

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 poiDescription text box is displayed next to its marker — pinned open in the 2D orthophoto view, and shown when the callout is selected or highlighted in the 3D view. When false, only the marker and title are shown. Corresponds to the "Show Description in View" checkbox in the app. Has no effect on other callout types.

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 filename of each photo callout must refer to an image that has already been uploaded to the asset. In CSV/TSV, photo callouts are encoded using the photoCalloutFilename, photoCalloutTop, photoCalloutLeft, photoCalloutWidth, and photoCalloutHeight columns.

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": "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": [
    • [
      ],
    • [
      ]
    ],
  • "coordsys": "EPSG:4326",
  • "viewColorR": 255,
  • "viewColorG": 191,
  • "viewColorB": 0,
  • "showDescriptionInView": true,
  • "photocallouts": [
    • {
      }
    ],
  • "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
Array
uuid
required
string <uuid>

Unique identifier for the callout.

When importing callouts:

  • If the specified uuid matches an existing callout on the asset, the matching callout will be updated with the specified data.
  • If the uuid does not match a callout for the asset, a new callout will be created. The specified uuid will be used for the new callout as long as the uuid isn't already being used by a callout on a different asset. If the uuid is already being used by a callout on a different asset, a new uuid will be used for the new callout.
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: CameraBookmark = "Basic Text", Annotation = "Rich Text Window", Defect = "Defect Window", Measurement = "Measurement / Defect Window". In the app, these labels are prefixed with "3D Callout - " for point callouts and "Polyline - " for polyline/measurement callouts (e.g. a CameraBookmark appears as "3D Callout - Basic Text").

schemaVersion
required
integer

The version of the callout data format. Always specify 2. Version 2 expresses measurement points in the same coordinate system as the other positional fields (the system named by coordsys). Version 1, or omitting this field, is a legacy format and should not be used.

coordsys
required
string

The coordinate system used for the callout's 3D positional data (posX/Y/Z, camPosX/Y/Z, camTarX/Y/Z, and points), in EPSG format or 'local' for local coordinates. 'local' can only be used with non-georeferenced assets. For latitude/longitude coordinates, EPSG:4326 should be specified.

On export, the value is set from the export request's coordsys query parameter and is local, the asset's EPSG code, or EPSG:4326. On import, if omitted, the coordinates are assumed to be in the asset's internal/local coordinate space and no validation or transformation is performed — this is how legacy exports produced before schemaVersion 2 behave.

Axis order for EPSG:4326: X values (posX, camPosX, camTarX, and the first component of each points entry) are longitude, and Y values are latitude. Z values are elevation in the asset's source-file units and are passed through unconverted.

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 showDescriptionInView. Has no effect on other callout types.

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 { "type": "p", "children": [ { "text": "..." } ] }. If provided, it must be non-empty. In CSV/TSV it is encoded as a JSON string.

posX
number <double>

X coordinate for point callouts. When coordsys is EPSG:4326, this is the longitude.

posY
number <double>

Y coordinate for point callouts. When coordsys is EPSG:4326, this is the latitude.

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 points — and is used for display in the application, such as measurement labels in the orthophoto viewer and the defect dialog. Hand-authored import data should compute this consistently with points.

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 — and is used for display in the application. Hand-authored import data should compute this consistently with points.

points
Array of numbers[ items <double >[ items <double > = 3 items ] ]

An array of ordered 3D points comprising the polyline. Measurement / polyline callouts only. When schemaVersion is 2 or greater, point coordinates follow the declared coordsys. For closed polylines the export omits the duplicate closing point. In CSV/TSV, points are encoded as zero-indexed column triplets point0X, point0Y, point0Z, point1X, ….

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 poiDescription text box is displayed next to its marker — pinned open in the 2D orthophoto view, and shown when the callout is selected or highlighted in the 3D view. When false, only the marker and title are shown. Corresponds to the "Show Description in View" checkbox in the app. Has no effect on other callout types.

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 filename of each photo callout must refer to an image that has already been uploaded to the asset. In CSV/TSV, photo callouts are encoded using the photoCalloutFilename, photoCalloutTop, photoCalloutLeft, photoCalloutWidth, and photoCalloutHeight columns.

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

Content type
[
  • {
    • "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
    • "title": "string",
    • "poiDescription": "string",
    • "content": [
      ],
    • "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": [
      ],
    • "measurementClosed": true,
    • "measurementLength": 0.8870510458946228,
    • "measurementArea": 0,
    • "points": [
      ],
    • "coordsys": "EPSG:4326",
    • "viewColorR": 255,
    • "viewColorG": 191,
    • "viewColorB": 0,
    • "showDescriptionInView": true,
    • "photocallouts": [
      ],
    • "pdfReportScreenshotId": "78372278-7c24-4f17-acb0-06adfe7460dd"
    }
]

Response samples

Content type
application/json
{
  • "callouts": [
    • {
      }
    ],
  • "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 (posX/Y/Z, camPosX/Y/Z, camTarX/Y/Z, and points). Must be asset, latlong, or local. Optional; when omitted it defaults to latlong for georeferenced assets and local otherwise. Requesting asset or latlong for a non-georeferenced asset returns a 400.

  • asset: 3D Positional data will be represented using the coordinate system of the asset. For example, if your asset uses the EPSG:27700 coordinate system, then all 3D positional data will be represented in EPSG:27700. If the asset is not georeferenced, then 3D Positional data will be represented using the coordinate system of the asset's geometry files (i.e. the .obj files).
  • latlong: The X and Y coordinate of all 3D Positional data will be represented using latitude / longitude coordinates, also known as EPSG:4326. Elevation (Z) will be represented using coordinate system of your asset's source files. For example, if the .obj files for the asset use meters to store elevation, then the Z coordinates of the callout positional data will use meters.
  • local: 3D Positional data will be represented using the coordinate system of the asset's geometry files (i.e. the .obj files). This should only be used for non-georeferenced assets. It is almost always better to specify asset instead of local.
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.

  • pointCallouts Includes 3D point callouts.
  • polylineCallouts Includes 3D polyline / measurement callouts.
  • photoCallouts Includes 2D photo callouts.
  • pdfReportScreenshotIds Preserves Include in PDF Report checkbox options and their associated Screenshot IDs. PDF Report Screenshot IDs are only compatible with your own Nira organization. When importing your callout data into a different Nira organization, the Include in PDF Report checkbox will need to be manually checked for any 3D callouts that you wish to include in PDF reports.
header Parameters
x-api-key
required
string

Your API key

Responses

Response samples

Content type
[
  • {
    • "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f",
    • "title": "string",
    • "poiDescription": "string",
    • "content": [
      ],
    • "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": [
      ],
    • "measurementClosed": true,
    • "measurementLength": 0.8870510458946228,
    • "measurementArea": 0,
    • "points": [
      ],
    • "coordsys": "EPSG:4326",
    • "viewColorR": 255,
    • "viewColorG": 191,
    • "viewColorB": 0,
    • "showDescriptionInView": true,
    • "photocallouts": [
      ],
    • "pdfReportScreenshotId": "78372278-7c24-4f17-acb0-06adfe7460dd"
    }
]

Asset

The asset object represents an asset in Nira.

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

Content type
application/json
{
  • "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/json
required
visibility
string
Enum: "private" "publicly_accessible"

Responses

Request samples

Content type
application/json
{
  • "visibility": "private"
}

Response samples

Content type
application/json
{
  • "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

Content type
application/json
{
  • "success": true,
  • "result": [
    • {
      }
    ]
}

Users

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

Content type
application/json
{
  • "success": true,
  • "result": [
    • {
      }
    ]
}