> This page is for version Dev.
> For other versions, use one of these documentation indexes:
> - 3.3.0 (default): https://docs.nvidia.com/vss/3.3.0/llms.txt
> - Dev: https://docs.nvidia.com/vss/dev/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/vss/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/vss/_mcp/server.

# Upsert sensor calibration

POST https://ai.nvidia.com/api/v3.3/analytics/config/calibration/upsert
Content-Type: application/json

Insert or update calibration data for one or more sensors. To change file-level attributes such as version, calibration type, or OSM URL, upload the complete calibration file instead.

Reference: https://docs.nvidia.com/vss/system-components/middleware/api-gateway-mcp/video-analytics-api/video-analytics-api-reference/config/controller-config-upsert-calibration

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Body (application/json)

This endpoint expects a Calibration.

- `version` (string, required)
- `osmURL` (string, required)
- `calibrationType` (enum, required)
  - Allowed values: `geo`, `cartesian`, `image`
- `sensors` (list of CalibrationSensorsItems, required)
- `rois` (list of CalibrationRoisItems, optional)
- `tripwires` (list of CalibrationTripwiresItems, optional)
- `corridors` (list of CalibrationCorridorsItems, optional)

## Response

### 201

Successful Operation.

- `success` (boolean, required)

## Errors

### 400 Bad Request Error

Bad Request. This response will be sent if request body doesn't follow schema.

- `error` (string, required)

### 404 Not Found Error

Resource Not Found

- `error` (string, required)

### 422 Unprocessable Entity Error

Unprocessable Entity

- `error` (string, required)

### 500 Internal Server Error

Internal Server Error

- `error` (string, required)

## Types

### CalibrationSensorsItems

- `type` (string, required)
- `id` (string, required)
- `origin` (CalibrationSensorsItemsOrigin, required)
- `geoLocation` (CalibrationSensorsItemsGeoLocation, required)
- `coordinates` (CalibrationSensorsItemsCoordinates, required)
- `scaleFactor` (double, required)
- `attributes` (list of CalibrationSensorsItemsAttributesItems, required)
- `place` (list of CalibrationSensorsItemsPlaceItems, required)
- `imageCoordinates` (list of CalibrationSensorsItemsImageCoordinatesItems, required)
- `globalCoordinates` (list of CalibrationSensorsItemsGlobalCoordinatesItems, required)
- `translationToGlobalCoordinates` (CalibrationSensorsItemsTranslationToGlobalCoordinates, optional)
- `group` (CalibrationSensorsItemsGroup, optional)
- `region` (CalibrationSensorsItemsRegion, optional)
- `intrinsicMatrix` (list of list of double, optional)
- `extrinsicMatrix` (list of list of double, optional)
- `cameraMatrix` (list of list of double, optional)
- `homography` (list of list of double, optional)
- `rois` (list of CalibrationSensorsItemsRoisItems, optional)
- `tripwires` (list of CalibrationSensorsItemsTripwiresItems, optional)

### CalibrationRoisItems

- `id` (string, required)
- `roiCoordinates` (list of CalibrationRoisItemsRoiCoordinatesItems, required)
- `sensors` (list of string, required)
- `groups` (list of string, required)
- `type` (string, optional)
- `restrictedObjectTypes` (list of string, optional)
- `confinedObjectTypes` (list of string, optional)

### CalibrationTripwiresItems

- `id` (string, required)
- `wire` (CalibrationTripwiresItemsWire, required)
- `direction` (CalibrationTripwiresItemsDirection, required)
- `sensors` (list of string, required)
- `groups` (list of string, required)

### CalibrationCorridorsItems

- `name` (string, required)
- `sensors` (list of string, required)
- `directions` (list of string, required)
- `length` (double, required)

### CalibrationSensorsItemsOrigin

- `lat` (double, required)
- `lng` (double, required)

### CalibrationSensorsItemsGeoLocation

- `lat` (double, required)
- `lng` (double, required)

### CalibrationSensorsItemsCoordinates

- `x` (double, required)
- `y` (double, required)
- `z` (double, optional)

### CalibrationSensorsItemsAttributesItems

- `name` (string, required)
- `value` (string, required)

### CalibrationSensorsItemsPlaceItems

- `name` (string, required)
- `value` (string, required)

### CalibrationSensorsItemsImageCoordinatesItems

- `x` (double, required)
- `y` (double, required)

### CalibrationSensorsItemsGlobalCoordinatesItems

- `x` (double, required)
- `y` (double, required)
- `z` (double, optional)

### CalibrationSensorsItemsTranslationToGlobalCoordinates

- `x` (double, required)
- `y` (double, required)
- `z` (double, optional)

### CalibrationSensorsItemsGroup

- `name` (string, required)
- `type` (string, required)
- `origin` (list of double, required)
- `dimensions` (list of double, required)
- `alias` (string, optional)

### CalibrationSensorsItemsRegion

- `placeLevel` (string, required)
- `origin` (list of double, required)
- `dimensions` (CalibrationSensorsItemsRegionDimensions, required)

### CalibrationSensorsItemsRoisItems

- `id` (string, required)
- `roiCoordinates` (list of CalibrationSensorsItemsRoisItemsRoiCoordinatesItems, required)
- `type` (string, optional)
- `restrictedObjectTypes` (list of string, optional)
- `confinedObjectTypes` (list of string, optional)

### CalibrationSensorsItemsTripwiresItems

- `id` (string, required)
- `wire` (CalibrationSensorsItemsTripwiresItemsWire, required)
- `direction` (CalibrationSensorsItemsTripwiresItemsDirection, required)

### CalibrationRoisItemsRoiCoordinatesItems

- `x` (double, required)
- `y` (double, required)
- `z` (double, optional)

### CalibrationTripwiresItemsWire

- `p1` (CalibrationTripwiresItemsWireP1, required)
- `p2` (CalibrationTripwiresItemsWireP2, required)

### CalibrationTripwiresItemsDirection

- `p1` (CalibrationTripwiresItemsDirectionP1, required)
- `p2` (CalibrationTripwiresItemsDirectionP2, required)

### CalibrationSensorsItemsRegionDimensions

- `length` (double, required)
- `width` (double, required)

### CalibrationSensorsItemsRoisItemsRoiCoordinatesItems

- `x` (double, required)
- `y` (double, required)
- `z` (double, optional)

### CalibrationSensorsItemsTripwiresItemsWire

- `p1` (CalibrationSensorsItemsTripwiresItemsWireP1, required)
- `p2` (CalibrationSensorsItemsTripwiresItemsWireP2, required)

### CalibrationSensorsItemsTripwiresItemsDirection

- `p1` (CalibrationSensorsItemsTripwiresItemsDirectionP1, required)
- `p2` (CalibrationSensorsItemsTripwiresItemsDirectionP2, required)

### CalibrationTripwiresItemsWireP1

- `x` (double, required)
- `y` (double, required)

### CalibrationTripwiresItemsWireP2

- `x` (double, required)
- `y` (double, required)

### CalibrationTripwiresItemsDirectionP1

- `x` (double, required)
- `y` (double, required)

### CalibrationTripwiresItemsDirectionP2

- `x` (double, required)
- `y` (double, required)

### CalibrationSensorsItemsTripwiresItemsWireP1

- `x` (double, required)
- `y` (double, required)

### CalibrationSensorsItemsTripwiresItemsWireP2

- `x` (double, required)
- `y` (double, required)

### CalibrationSensorsItemsTripwiresItemsDirectionP1

- `x` (double, required)
- `y` (double, required)

### CalibrationSensorsItemsTripwiresItemsDirectionP2

- `x` (double, required)
- `y` (double, required)

## Examples

**Request**

```json
{
  "version": "v1",
  "osmURL": "URL",
  "calibrationType": "cartesian",
  "sensors": [
    {
      "type": "camera",
      "id": "cam1",
      "origin": {
        "lat": 0,
        "lng": 0
      },
      "geoLocation": {
        "lat": 0,
        "lng": 0
      },
      "coordinates": {
        "x": 1,
        "y": 1
      },
      "scaleFactor": 1,
      "attributes": [
        {
          "name": "source",
          "value": "vst"
        }
      ],
      "place": [
        {
          "name": "building",
          "value": "warehouse"
        }
      ],
      "imageCoordinates": [
        {
          "x": 1,
          "y": 1
        }
      ],
      "globalCoordinates": [
        {
          "x": 1,
          "y": 1
        }
      ]
    }
  ]
}
```

**Response**

```json
{
  "success": true
}
```

**SDK Code**

```python
import requests

url = "https://ai.nvidia.com/api/v3.3/analytics/config/calibration/upsert"

payload = {
    "version": "v1",
    "osmURL": "URL",
    "calibrationType": "cartesian",
    "sensors": [
        {
            "type": "camera",
            "id": "cam1",
            "origin": {
                "lat": 0,
                "lng": 0
            },
            "geoLocation": {
                "lat": 0,
                "lng": 0
            },
            "coordinates": {
                "x": 1,
                "y": 1
            },
            "scaleFactor": 1,
            "attributes": [
                {
                    "name": "source",
                    "value": "vst"
                }
            ],
            "place": [
                {
                    "name": "building",
                    "value": "warehouse"
                }
            ],
            "imageCoordinates": [
                {
                    "x": 1,
                    "y": 1
                }
            ],
            "globalCoordinates": [
                {
                    "x": 1,
                    "y": 1
                }
            ]
        }
    ]
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://ai.nvidia.com/api/v3.3/analytics/config/calibration/upsert';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"version":"v1","osmURL":"URL","calibrationType":"cartesian","sensors":[{"type":"camera","id":"cam1","origin":{"lat":0,"lng":0},"geoLocation":{"lat":0,"lng":0},"coordinates":{"x":1,"y":1},"scaleFactor":1,"attributes":[{"name":"source","value":"vst"}],"place":[{"name":"building","value":"warehouse"}],"imageCoordinates":[{"x":1,"y":1}],"globalCoordinates":[{"x":1,"y":1}]}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://ai.nvidia.com/api/v3.3/analytics/config/calibration/upsert"

	payload := strings.NewReader("{\n  \"version\": \"v1\",\n  \"osmURL\": \"URL\",\n  \"calibrationType\": \"cartesian\",\n  \"sensors\": [\n    {\n      \"type\": \"camera\",\n      \"id\": \"cam1\",\n      \"origin\": {\n        \"lat\": 0,\n        \"lng\": 0\n      },\n      \"geoLocation\": {\n        \"lat\": 0,\n        \"lng\": 0\n      },\n      \"coordinates\": {\n        \"x\": 1,\n        \"y\": 1\n      },\n      \"scaleFactor\": 1,\n      \"attributes\": [\n        {\n          \"name\": \"source\",\n          \"value\": \"vst\"\n        }\n      ],\n      \"place\": [\n        {\n          \"name\": \"building\",\n          \"value\": \"warehouse\"\n        }\n      ],\n      \"imageCoordinates\": [\n        {\n          \"x\": 1,\n          \"y\": 1\n        }\n      ],\n      \"globalCoordinates\": [\n        {\n          \"x\": 1,\n          \"y\": 1\n        }\n      ]\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://ai.nvidia.com/api/v3.3/analytics/config/calibration/upsert")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"version\": \"v1\",\n  \"osmURL\": \"URL\",\n  \"calibrationType\": \"cartesian\",\n  \"sensors\": [\n    {\n      \"type\": \"camera\",\n      \"id\": \"cam1\",\n      \"origin\": {\n        \"lat\": 0,\n        \"lng\": 0\n      },\n      \"geoLocation\": {\n        \"lat\": 0,\n        \"lng\": 0\n      },\n      \"coordinates\": {\n        \"x\": 1,\n        \"y\": 1\n      },\n      \"scaleFactor\": 1,\n      \"attributes\": [\n        {\n          \"name\": \"source\",\n          \"value\": \"vst\"\n        }\n      ],\n      \"place\": [\n        {\n          \"name\": \"building\",\n          \"value\": \"warehouse\"\n        }\n      ],\n      \"imageCoordinates\": [\n        {\n          \"x\": 1,\n          \"y\": 1\n        }\n      ],\n      \"globalCoordinates\": [\n        {\n          \"x\": 1,\n          \"y\": 1\n        }\n      ]\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://ai.nvidia.com/api/v3.3/analytics/config/calibration/upsert")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"version\": \"v1\",\n  \"osmURL\": \"URL\",\n  \"calibrationType\": \"cartesian\",\n  \"sensors\": [\n    {\n      \"type\": \"camera\",\n      \"id\": \"cam1\",\n      \"origin\": {\n        \"lat\": 0,\n        \"lng\": 0\n      },\n      \"geoLocation\": {\n        \"lat\": 0,\n        \"lng\": 0\n      },\n      \"coordinates\": {\n        \"x\": 1,\n        \"y\": 1\n      },\n      \"scaleFactor\": 1,\n      \"attributes\": [\n        {\n          \"name\": \"source\",\n          \"value\": \"vst\"\n        }\n      ],\n      \"place\": [\n        {\n          \"name\": \"building\",\n          \"value\": \"warehouse\"\n        }\n      ],\n      \"imageCoordinates\": [\n        {\n          \"x\": 1,\n          \"y\": 1\n        }\n      ],\n      \"globalCoordinates\": [\n        {\n          \"x\": 1,\n          \"y\": 1\n        }\n      ]\n    }\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://ai.nvidia.com/api/v3.3/analytics/config/calibration/upsert', [
  'body' => '{
  "version": "v1",
  "osmURL": "URL",
  "calibrationType": "cartesian",
  "sensors": [
    {
      "type": "camera",
      "id": "cam1",
      "origin": {
        "lat": 0,
        "lng": 0
      },
      "geoLocation": {
        "lat": 0,
        "lng": 0
      },
      "coordinates": {
        "x": 1,
        "y": 1
      },
      "scaleFactor": 1,
      "attributes": [
        {
          "name": "source",
          "value": "vst"
        }
      ],
      "place": [
        {
          "name": "building",
          "value": "warehouse"
        }
      ],
      "imageCoordinates": [
        {
          "x": 1,
          "y": 1
        }
      ],
      "globalCoordinates": [
        {
          "x": 1,
          "y": 1
        }
      ]
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://ai.nvidia.com/api/v3.3/analytics/config/calibration/upsert");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"version\": \"v1\",\n  \"osmURL\": \"URL\",\n  \"calibrationType\": \"cartesian\",\n  \"sensors\": [\n    {\n      \"type\": \"camera\",\n      \"id\": \"cam1\",\n      \"origin\": {\n        \"lat\": 0,\n        \"lng\": 0\n      },\n      \"geoLocation\": {\n        \"lat\": 0,\n        \"lng\": 0\n      },\n      \"coordinates\": {\n        \"x\": 1,\n        \"y\": 1\n      },\n      \"scaleFactor\": 1,\n      \"attributes\": [\n        {\n          \"name\": \"source\",\n          \"value\": \"vst\"\n        }\n      ],\n      \"place\": [\n        {\n          \"name\": \"building\",\n          \"value\": \"warehouse\"\n        }\n      ],\n      \"imageCoordinates\": [\n        {\n          \"x\": 1,\n          \"y\": 1\n        }\n      ],\n      \"globalCoordinates\": [\n        {\n          \"x\": 1,\n          \"y\": 1\n        }\n      ]\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "version": "v1",
  "osmURL": "URL",
  "calibrationType": "cartesian",
  "sensors": [
    [
      "type": "camera",
      "id": "cam1",
      "origin": [
        "lat": 0,
        "lng": 0
      ],
      "geoLocation": [
        "lat": 0,
        "lng": 0
      ],
      "coordinates": [
        "x": 1,
        "y": 1
      ],
      "scaleFactor": 1,
      "attributes": [
        [
          "name": "source",
          "value": "vst"
        ]
      ],
      "place": [
        [
          "name": "building",
          "value": "warehouse"
        ]
      ],
      "imageCoordinates": [
        [
          "x": 1,
          "y": 1
        ]
      ],
      "globalCoordinates": [
        [
          "x": 1,
          "y": 1
        ]
      ]
    ]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://ai.nvidia.com/api/v3.3/analytics/config/calibration/upsert")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```