Skip to main content

Nira HTTP API

Download OpenAPI specification:Download

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

OpenAPI specification

The specification for this API is available as YAML and JSON for use with Postman, Swagger UI and client generators. The x-api-key header is declared as the ApiKeyAuth security scheme.

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
string <uuid>

Nira's unique identifier for the callout. Always present in exported callouts.

When importing callouts:

  • In add and replace mode, the uuid is optional and any uuid you supply is ignored. Nira generates the new callout's uuid and returns it in the response's results array, so you can use it to update that callout later.
  • In update mode with matchField=uuid, the uuid selects which callout on the asset to update. Every object must carry one, and no two objects may repeat the same one. A malformed uuid rejects the whole request with a 400. A well-formed uuid that matches nothing on the asset leaves that object alone, which the response reports as a skipped outcome, and the rest of the import still applies.
  • In update mode with matchField=externalId, the uuid is ignored and the externalId selects the callout instead.
numericId
integer

The callout's place in its asset's label sequence, counting from 1. Present in exports and ignored on import, where Nira always assigns it.

On import, Nira assigns these in payload order, so the row order in your file decides the numbering. In replace mode the sequence restarts from 1. Otherwise it carries on after the callouts already on the asset. A number is never reused, so deleting a callout leaves a gap in the sequence. update mode never changes one.

alphanumericId
string

The callout's label as users see it in the 3D view, the Layers panel and PDF reports. It is numericId in a shorter, readable form, so 1 is A1 and 2 is A2. Present in exports and ignored on import.

The sequence counts in base 35, running 1 to 9 and then A to Z, so 9 is A9, 10 is AA, 36 is B1, and 911 is AA1. Sorting a spreadsheet by this column only matches the real order for the first 910 callouts on an asset, because as text AA1 sorts before AZ. Sort by numericId instead.

title
string

Title for Annotation and Camera Bookmarks. Also see defectTitle parameter.

poiDescription
string

Description text for CameraBookmark callouts. This is the text box 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.

externalId
string <= 255 characters

Your own identifier for the callout, up to 255 characters, unique among the live callouts of an asset. Nira stores and returns it but never generates one. Returned in every export, empty when unset.

When importing callouts:

  • In add and replace mode, it is stored on the new callout. A value already on another callout of the asset rejects the whole request with a 400.
  • In update mode with matchField=externalId, it selects which callout to update. Every object must carry one, and no two objects may repeat the same one.
  • In update mode with matchField=uuid, it is written to the matched callout. In JSON, null clears it. In CSV/TSV an empty cell leaves it unchanged.
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.

type
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". The app then prefixes the label according to the callout's geometry, so the same CameraBookmark reads as "3D Callout - Basic Text" when it is a single point and "Polyline - Basic Text" when it has polyline geometry.

schemaVersion
integer

The version of the callout data format. Always specify 2. Version 1, or omitting this field, is a legacy format and should not be used.

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. Nira computes this from the callout's points and uses it for display, such as measurement labels in the orthophoto viewer and the defect dialog. It is ignored on import, and is recomputed the next time the asset is opened.

measurementArea
number <double>

The area enclosed by the polyline. Closed measurement / polyline callouts only. Nira computes this from the callout's points as a triangulated surface area, so it follows the geometry rather than flattening it. It is ignored on import, and is recomputed the next time the asset is opened.

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, ….

update mode can replace a polyline's points but cannot add geometry to a callout that has none, or remove it from one that does. An empty array is rejected. Omit the field to leave the geometry as it is.

coordsys
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.

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.

update mode can change a photo callout but cannot add or remove one. An empty array is rejected. Omit the field to leave the photo callout as it is.

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": "9f8e7d6c-5b4a-4392-8171-0e2d3c4b5a69",
  • "numericId": 1,
  • "alphanumericId": "A1",
  • "title": "North pier, west face",
  • "poiDescription": "Hairline crack running the full height of the pier.",
  • "externalId": "inspection-2026-0042",
  • "content": [
    • {
      }
    ],
  • "type": "Defect",
  • "schemaVersion": 2,
  • "posX": -84.268241,
  • "posY": 39.344056,
  • "posZ": 211.843078,
  • "camPosX": -84.267912,
  • "camPosY": 39.343688,
  • "camPosZ": 238.512443,
  • "camTarX": -84.268241,
  • "camTarY": 39.344056,
  • "camTarZ": 211.843078,
  • "defectTitle": "Spalling at pier base",
  • "defectDescription": "Concrete spalling with exposed rebar, roughly 40 cm across.",
  • "defectSeverity": 4,
  • "defectType": [
    • "Corrosion",
    • "Spalling"
    ],
  • "measurementClosed": false,
  • "measurementLength": 0.8870510458946228,
  • "measurementArea": 0,
  • "points": [
    • [
      ],
    • [
      ]
    ],
  • "coordsys": "EPSG:4326",
  • "viewColorR": 255,
  • "viewColorG": 191,
  • "viewColorB": 0,
  • "showDescriptionInView": true,
  • "photocallouts": [],
  • "pdfReportScreenshotId": "3f2504e0-4f89-41d3-9a0c-0305e82c3301"
}

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 the export endpoint produces, so an exported file is accepted as-is. See the Callout schema for the full field reference, including the CSV/TSV column encodings.

The mode query parameter selects what the import does. In the default add mode every row becomes a new callout: any uuid or numericId or alphanumericId in the payload is ignored. Nira assigns all of them. In replace mode every callout on the asset is removed first, including photo callouts, and then every row in the request is created. In update mode no callouts are created. Each row is matched against an existing callout on the asset by the field named in matchField (uuid or externalId), and matched callouts are updated in place with only the fields the row actually carries. Rows that match nothing are skipped and reported as such in the response. On import all fields are optional.

externalId is a caller-owned identifier that Nira stores and returns but never generates. In CSV/TSV an empty externalId cell leaves the stored value unchanged, the same as every other omitted column. In JSON a null clears it.

A malformed match value rejects the whole request with a 400. A well-formed one that matches nothing only skips that row.

This endpoint requires the organization to be on the Growth or Enterprise plan.

A request either applies in full or changes nothing. If it returns an error status, nothing was written, including any callouts mode=replace had already removed, so a failed request is safe to retry once the payload is corrected.

What each response status means:

  • 2xx: the import applied.
  • 4xx or 556: the request was rejected and will be rejected again if resent unchanged. Correct it before sending it again.
  • 401: refresh the credentials once, then retry.
  • 429: wait for the time in the Retry-After header, then retry.
  • 500, 502, 503, or 52x: retry as it stands.
  • 504 or 524: retry only when the original request carried an Idempotency-Key, because the import may already have applied.

Every error body carries a stable reason string on each entry of errors, such as import-over-limit, so clients can branch on that instead of on the message text.

To make a retry safe after a timeout or a lost connection, send an Idempotency-Key header and repeat the same key on the retry. If the first attempt did apply, the retry returns that attempt's original response and imports nothing further.

A single request accepts at most 60000 callouts. Larger imports must be split into several requests. Each one is atomic on its own, so send them one at a time and check each response before sending the next.

Body size limits are 40 MB for JSON and 100 MB for CSV/TSV.

Authorizations:
ApiKeyAuth
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
mode
string
Default: "add"
Enum: "add" "replace" "update"

What the import does:

  • "add" (the default) creates a new callout for every row, ignoring any supplied uuid.
  • "replace" removes every callout on the asset, including photo callouts, then creates every row in the request.
  • "update" only updates callouts that already exist on the asset, and never creates or deletes anything.
matchField
string
Enum: "uuid" "externalId"

The callout field used to match payload rows to existing callouts. Required when mode=update, and ignored in the other modes. In update mode every row must carry a value for it, and no two rows may repeat a value.

  • "uuid" matches by the uuid Nira assigned to each callout.
  • "externalId" matches by the externalId you assigned to each callout when it was imported or created. Use it when your own system's identifiers are the ones you track. Any uuid a row carries is then ignored.
removeCalloutsBeforeImport
string
Default: "0"
Enum: "1" "0"

Deprecated. "1" is equivalent to mode=replace, and is kept for callers that already send it. Defaults to "0". Cannot be combined with mode.

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'.

Idempotency-Key
string

An optional identifier you choose for this import, 1 to 200 characters. Repeating a request with the same key on the same asset returns the original response and imports nothing further. Using a key that was already used for a different request on the same asset returns a 409.

Request Body schema:
required
Array
uuid
string <uuid>

Nira's unique identifier for the callout. Always present in exported callouts.

When importing callouts:

  • In add and replace mode, the uuid is optional and any uuid you supply is ignored. Nira generates the new callout's uuid and returns it in the response's results array, so you can use it to update that callout later.
  • In update mode with matchField=uuid, the uuid selects which callout on the asset to update. Every object must carry one, and no two objects may repeat the same one. A malformed uuid rejects the whole request with a 400. A well-formed uuid that matches nothing on the asset leaves that object alone, which the response reports as a skipped outcome, and the rest of the import still applies.
  • In update mode with matchField=externalId, the uuid is ignored and the externalId selects the callout instead.
title
string

Title for Annotation and Camera Bookmarks. Also see defectTitle parameter.

poiDescription
string

Description text for CameraBookmark callouts. This is the text box 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.

externalId
string <= 255 characters

Your own identifier for the callout, up to 255 characters, unique among the live callouts of an asset. Nira stores and returns it but never generates one. Returned in every export, empty when unset.

When importing callouts:

  • In add and replace mode, it is stored on the new callout. A value already on another callout of the asset rejects the whole request with a 400.
  • In update mode with matchField=externalId, it selects which callout to update. Every object must carry one, and no two objects may repeat the same one.
  • In update mode with matchField=uuid, it is written to the matched callout. In JSON, null clears it. In CSV/TSV an empty cell leaves it unchanged.
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.

type
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". The app then prefixes the label according to the callout's geometry, so the same CameraBookmark reads as "3D Callout - Basic Text" when it is a single point and "Polyline - Basic Text" when it has polyline geometry.

schemaVersion
integer

The version of the callout data format. Always specify 2. Version 1, or omitting this field, is a legacy format and should not be used.

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.

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, ….

update mode can replace a polyline's points but cannot add geometry to a callout that has none, or remove it from one that does. An empty array is rejected. Omit the field to leave the geometry as it is.

coordsys
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.

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.

update mode can change a photo callout but cannot add or remove one. An empty array is rejected. Omit the field to leave the photo callout as it is.

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": "9f8e7d6c-5b4a-4392-8171-0e2d3c4b5a69",
    • "title": "North pier, west face",
    • "poiDescription": "Hairline crack running the full height of the pier.",
    • "externalId": "inspection-2026-0042",
    • "content": [
      ],
    • "type": "Defect",
    • "schemaVersion": 2,
    • "posX": -84.268241,
    • "posY": 39.344056,
    • "posZ": 211.843078,
    • "camPosX": -84.267912,
    • "camPosY": 39.343688,
    • "camPosZ": 238.512443,
    • "camTarX": -84.268241,
    • "camTarY": 39.344056,
    • "camTarZ": 211.843078,
    • "defectTitle": "Spalling at pier base",
    • "defectDescription": "Concrete spalling with exposed rebar, roughly 40 cm across.",
    • "defectSeverity": 4,
    • "defectType": [
      ],
    • "measurementClosed": false,
    • "points": [
      ],
    • "coordsys": "EPSG:4326",
    • "viewColorR": 255,
    • "viewColorG": 191,
    • "viewColorB": 0,
    • "showDescriptionInView": true,
    • "photocallouts": [
      ],
    • "pdfReportScreenshotId": "3f2504e0-4f89-41d3-9a0c-0305e82c3301"
    }
]

Response samples

Content type
application/json
{
  • "assetId": 4213,
  • "suuid": "FmITrR_IR1KIsfhXJireEQ",
  • "mode": "add",
  • "matchField": null,
  • "removeCalloutsBeforeImport": true,
  • "removedCount": 0,
  • "createdCount": 2,
  • "updatedCount": 0,
  • "skippedCount": 0,
  • "results": [
    • {
      }
    ]
}

Export callouts for a specific asset

Exports callouts related to the specified asset in the requested format.

What each response status means:

  • 2xx: the export is complete.
  • 4xx or 556: the request was rejected and will be rejected again if resent unchanged. Correct it before sending it again.
  • 401: refresh the credentials once, then retry.
  • 429: wait for the time in the Retry-After header, then retry.
  • 500, 502, 503, or 52x: retry as it stands.

Every error body carries a stable reason string on each entry of errors, such as export-invalid-coordsys, so clients can branch on that instead of on the message text.

Authorizations:
ApiKeyAuth
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. It is 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, and 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": "9f8e7d6c-5b4a-4392-8171-0e2d3c4b5a69",
    • "numericId": 1,
    • "alphanumericId": "A1",
    • "title": "North pier, west face",
    • "poiDescription": "Hairline crack running the full height of the pier.",
    • "externalId": "inspection-2026-0042",
    • "content": [
      ],
    • "type": "Defect",
    • "schemaVersion": 2,
    • "posX": -84.268241,
    • "posY": 39.344056,
    • "posZ": 211.843078,
    • "camPosX": -84.267912,
    • "camPosY": 39.343688,
    • "camPosZ": 238.512443,
    • "camTarX": -84.268241,
    • "camTarY": 39.344056,
    • "camTarZ": 211.843078,
    • "defectTitle": "Spalling at pier base",
    • "defectDescription": "Concrete spalling with exposed rebar, roughly 40 cm across.",
    • "defectSeverity": 4,
    • "defectType": [
      ],
    • "measurementClosed": false,
    • "measurementLength": 0.8870510458946228,
    • "measurementArea": 0,
    • "points": [
      ],
    • "coordsys": "EPSG:4326",
    • "viewColorR": 255,
    • "viewColorG": 191,
    • "viewColorB": 0,
    • "showDescriptionInView": true,
    • "photocallouts": [],
    • "pdfReportScreenshotId": "3f2504e0-4f89-41d3-9a0c-0305e82c3301"
    }
]

Asset

The asset object represents an asset in Nira.

Delete an asset

Authorizations:
ApiKeyAuth
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": 4213,
    • "name": "Kings Island Bridge Survey",
    • "uuid": "140d1779-2bb4-4443-bc25-ab8c6f43bc1b",
    • "createdBy": 17,
    • "usesvt": false,
    • "type": "photogrammetry",
    • "passwordRequired": false,
    • "dccname": "RealityScan",
    • "hideBranding": false
    }
}

Change an asset's visibility

This controls whether an asset is publicly accessible or private.

Authorizations:
ApiKeyAuth
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": 4213,
    • "name": "Kings Island Bridge Survey",
    • "uuid": "140d1779-2bb4-4443-bc25-ab8c6f43bc1b",
    • "createdBy": 17,
    • "usesvt": false,
    • "type": "photogrammetry",
    • "passwordRequired": false,
    • "dccname": "RealityScan",
    • "hideBranding": false
    }
}

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.

Authorizations:
ApiKeyAuth
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.

Authorizations:
ApiKeyAuth
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": [
    • {
      }
    ]
}