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

# Replace all Expected Racks

PUT https://nico-rest-api.nico.svc.cluster.local/v2/org/{org}/nico/expected-rack
Content-Type: application/json

Replace the full set of Expected Racks for a Site with the provided list. All existing Expected Racks for the Site that are not in the request body will be deleted, and any new Expected Racks in the request will be created. Existing Expected Racks with matching `rackId` values will be updated.

Every entry in `expectedRacks` must reference the same `siteId` as the top-level `siteId`. `rackId` values must be unique within the request. The `expectedRacks` array may be empty to clear all Expected Racks for the Site.

Org must have an Infrastructure Provider entity. User must have `FORGE_PROVIDER_ADMIN` role.

Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also replace Expected Racks if they have an account with the Site's Infrastructure Provider.

Reference: https://docs.nvidia.com/infra-controller/infra-controller/rest-api-reference/api-reference/expected-rack/replace-all-expected-rack

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: NVIDIA Infra Controller REST API
  version: 1.0.0
paths:
  /v2/org/{org}/nico/expected-rack:
    put:
      operationId: replace-all-expected-rack
      summary: Replace all Expected Racks
      description: >-
        Replace the full set of Expected Racks for a Site with the provided
        list. All existing Expected Racks for the Site that are not in the
        request body will be deleted, and any new Expected Racks in the request
        will be created. Existing Expected Racks with matching `rackId` values
        will be updated.


        Every entry in `expectedRacks` must reference the same `siteId` as the
        top-level `siteId`. `rackId` values must be unique within the request.
        The `expectedRacks` array may be empty to clear all Expected Racks for
        the Site.


        Org must have an Infrastructure Provider entity. User must have
        `FORGE_PROVIDER_ADMIN` role.


        Alternatively, Tenant Admins with `TargetedInstanceCreation` capability
        can also replace Expected Racks if they have an account with the Site's
        Infrastructure Provider.
      tags:
        - subpackage_expectedRack
      parameters:
        - name: org
          in: path
          required: true
          schema:
            type: string
        - name: Authorization
          in: header
          description: >-
            ```

            export JWT_BEARER_TOKEN="<jwt-bearer-token>"


            # Example org name: "acme-inc

            export ORG_NAME=<org-name>


            # Use the JWT bearer token in your API request auth header:

            curl -v -X GET -H "Content-Type: application/json" -H
            "Authorization: Bearer $JWT_BEARER_TOKEN"
            https://nico-rest-api.nico.svc.cluster.local/v2/org/$ORG_NAME/nico/user/current

            ```
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ExpectedRack'
        '400':
          description: Error response when request data cannot be validated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NICoAPIError'
        '403':
          description: >-
            Error response when user is not authorized to call an endpoint or
            retrieve/modify objects
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NICoAPIError'
      requestBody:
        description: Replace-all Expected Racks request
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpectedRackList'
servers:
  - url: https://nico-rest-api.nico.svc.cluster.local
components:
  schemas:
    Labels:
      type: object
      additionalProperties:
        type: string
      title: Labels
    ExpectedRackCreateRequest:
      type: object
      properties:
        siteId:
          type: string
          format: uuid
          description: ID of the Site the Expected Rack belongs to
        rackId:
          type: string
          description: >-
            Operator-supplied identifier for the rack (string, not UUID). Must
            be non-empty and unique within the Site.
        rackProfileId:
          type: string
          description: >-
            Identifier of the Rack Profile this rack conforms to. Must be
            non-empty.
        name:
          type:
            - string
            - 'null'
          description: Human-readable name of the Expected Rack
        description:
          type:
            - string
            - 'null'
          description: Human-readable description of the Expected Rack
        labels:
          $ref: '#/components/schemas/Labels'
          description: >-
            User-defined key-value pairs for organizing and categorizing
            Expected Racks. Well-known keys (`chassis.*`, `location.*`) are used
            to convey chassis identity and physical location.
      required:
        - siteId
        - rackId
        - rackProfileId
      description: >-
        Request data to create a new Expected Rack.


        The `rackId` is an operator-supplied string identifier (not a UUID) that
        must be unique within the Site. Chassis identity and physical location
        information are conveyed via well-known label keys in `labels`:

        - `chassis.manufacturer`, `chassis.serial-number`, `chassis.model`

        - `location.region`, `location.datacenter`, `location.room`,
        `location.position`
      title: ExpectedRackCreateRequest
    ExpectedRackList:
      type: object
      properties:
        siteId:
          type: string
          format: uuid
          description: ID of the Site whose Expected Racks should be replaced
        expectedRacks:
          type: array
          items:
            $ref: '#/components/schemas/ExpectedRackCreateRequest'
          description: >-
            The full desired set of Expected Racks for the Site. Every entry
            must reference the same `siteId` as the top-level field, and
            `rackId` values must be unique within the request. May be empty to
            clear all Expected Racks for the Site.
      required:
        - siteId
        - expectedRacks
      description: >-
        Replace-all request body for Expected Racks. The `expectedRacks` array
        contains the full desired set of Expected Racks for the Site identified
        by `siteId`. All entries must reference the same `siteId` as the
        top-level field, and `rackId` values must be unique within the request.
        The array may be empty to clear all Expected Racks for the Site.
      title: ExpectedRackList
    ExpectedRack:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier (UUID) for the Expected Rack
        rackId:
          type: string
          description: >-
            Operator-supplied identifier for the rack (string, not UUID). Unique
            within a Site.
        siteId:
          type: string
          format: uuid
          description: ID of the Site the Expected Rack belongs to
        rackProfileId:
          type: string
          description: Identifier of the Rack Profile this rack conforms to
        name:
          type: string
          description: Human-readable name of the Expected Rack
        description:
          type: string
          description: Human-readable description of the Expected Rack
        labels:
          $ref: '#/components/schemas/Labels'
          description: >-
            User-defined key-value pairs for organizing and categorizing
            Expected Racks. Well-known keys (`chassis.*`, `location.*`) are used
            to convey chassis identity and physical location.
        created:
          type: string
          format: date-time
          description: ISO 8601 datetime when the Expected Rack was created
        updated:
          type: string
          format: date-time
          description: ISO 8601 datetime when the Expected Rack was last updated
      description: >-
        An Expected Rack represents a rack that is expected to be discovered at
        a Site. The `rackId` is an operator-supplied string identifier (not a
        UUID) that uniquely identifies the rack within the Site. Each Expected
        Rack references a Rack Profile that describes the rack's expected layout
        and capabilities.


        Chassis identity and physical location information are conveyed via
        well-known label keys in `labels`:

        - `chassis.manufacturer`, `chassis.serial-number`, `chassis.model`

        - `location.region`, `location.datacenter`, `location.room`,
        `location.position`
      title: ExpectedRack
    NiCoApiErrorSource:
      type: string
      enum:
        - nico
      description: Source of the error.
      title: NiCoApiErrorSource
    NiCoApiErrorData:
      type: object
      properties: {}
      description: Additional data about the error
      title: NiCoApiErrorData
    NICoAPIError:
      type: object
      properties:
        source:
          $ref: '#/components/schemas/NiCoApiErrorSource'
          description: Source of the error.
        message:
          type: string
          description: Message describing the error
        data:
          oneOf:
            - $ref: '#/components/schemas/NiCoApiErrorData'
            - type: 'null'
          description: Additional data about the error
      description: Describes the error response from NVIDIA Infra Controller REST API
      title: NICoAPIError
  securitySchemes:
    JWTBearerToken:
      type: http
      scheme: bearer
      description: >-
        ```

        export JWT_BEARER_TOKEN="<jwt-bearer-token>"


        # Example org name: "acme-inc

        export ORG_NAME=<org-name>


        # Use the JWT bearer token in your API request auth header:

        curl -v -X GET -H "Content-Type: application/json" -H "Authorization:
        Bearer $JWT_BEARER_TOKEN"
        https://nico-rest-api.nico.svc.cluster.local/v2/org/$ORG_NAME/nico/user/current

        ```

```

## SDK Code Examples

```python
import requests

url = "https://nico-rest-api.nico.svc.cluster.local/v2/org/org/nico/expected-rack"

payload = {
    "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
    "expectedRacks": [
        {
            "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
            "rackId": "rack-01",
            "rackProfileId": "rp-standard-42u",
            "name": "Rack 01",
            "description": "Production rack in row A",
            "labels": {
                "chassis.manufacturer": "NVIDIA",
                "chassis.serial-number": "NVRK0001001",
                "chassis.model": "GB200-NVL72",
                "location.datacenter": "phx-dc01",
                "location.position": "A1"
            }
        },
        {
            "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
            "rackId": "rack-02",
            "rackProfileId": "rp-standard-42u",
            "name": "Rack 02",
            "description": "Production rack in row A",
            "labels": {
                "chassis.manufacturer": "NVIDIA",
                "chassis.serial-number": "NVRK0001002",
                "chassis.model": "GB200-NVL72",
                "location.datacenter": "phx-dc01",
                "location.position": "A2"
            }
        }
    ]
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript
const url = 'https://nico-rest-api.nico.svc.cluster.local/v2/org/org/nico/expected-rack';
const options = {
  method: 'PUT',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"siteId":"f97df110-f4de-492e-8849-4a6af68026b0","expectedRacks":[{"siteId":"f97df110-f4de-492e-8849-4a6af68026b0","rackId":"rack-01","rackProfileId":"rp-standard-42u","name":"Rack 01","description":"Production rack in row A","labels":{"chassis.manufacturer":"NVIDIA","chassis.serial-number":"NVRK0001001","chassis.model":"GB200-NVL72","location.datacenter":"phx-dc01","location.position":"A1"}},{"siteId":"f97df110-f4de-492e-8849-4a6af68026b0","rackId":"rack-02","rackProfileId":"rp-standard-42u","name":"Rack 02","description":"Production rack in row A","labels":{"chassis.manufacturer":"NVIDIA","chassis.serial-number":"NVRK0001002","chassis.model":"GB200-NVL72","location.datacenter":"phx-dc01","location.position":"A2"}}]}'
};

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://nico-rest-api.nico.svc.cluster.local/v2/org/org/nico/expected-rack"

	payload := strings.NewReader("{\n  \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n  \"expectedRacks\": [\n    {\n      \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n      \"rackId\": \"rack-01\",\n      \"rackProfileId\": \"rp-standard-42u\",\n      \"name\": \"Rack 01\",\n      \"description\": \"Production rack in row A\",\n      \"labels\": {\n        \"chassis.manufacturer\": \"NVIDIA\",\n        \"chassis.serial-number\": \"NVRK0001001\",\n        \"chassis.model\": \"GB200-NVL72\",\n        \"location.datacenter\": \"phx-dc01\",\n        \"location.position\": \"A1\"\n      }\n    },\n    {\n      \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n      \"rackId\": \"rack-02\",\n      \"rackProfileId\": \"rp-standard-42u\",\n      \"name\": \"Rack 02\",\n      \"description\": \"Production rack in row A\",\n      \"labels\": {\n        \"chassis.manufacturer\": \"NVIDIA\",\n        \"chassis.serial-number\": \"NVRK0001002\",\n        \"chassis.model\": \"GB200-NVL72\",\n        \"location.datacenter\": \"phx-dc01\",\n        \"location.position\": \"A2\"\n      }\n    }\n  ]\n}")

	req, _ := http.NewRequest("PUT", 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://nico-rest-api.nico.svc.cluster.local/v2/org/org/nico/expected-rack")

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

request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n  \"expectedRacks\": [\n    {\n      \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n      \"rackId\": \"rack-01\",\n      \"rackProfileId\": \"rp-standard-42u\",\n      \"name\": \"Rack 01\",\n      \"description\": \"Production rack in row A\",\n      \"labels\": {\n        \"chassis.manufacturer\": \"NVIDIA\",\n        \"chassis.serial-number\": \"NVRK0001001\",\n        \"chassis.model\": \"GB200-NVL72\",\n        \"location.datacenter\": \"phx-dc01\",\n        \"location.position\": \"A1\"\n      }\n    },\n    {\n      \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n      \"rackId\": \"rack-02\",\n      \"rackProfileId\": \"rp-standard-42u\",\n      \"name\": \"Rack 02\",\n      \"description\": \"Production rack in row A\",\n      \"labels\": {\n        \"chassis.manufacturer\": \"NVIDIA\",\n        \"chassis.serial-number\": \"NVRK0001002\",\n        \"chassis.model\": \"GB200-NVL72\",\n        \"location.datacenter\": \"phx-dc01\",\n        \"location.position\": \"A2\"\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.put("https://nico-rest-api.nico.svc.cluster.local/v2/org/org/nico/expected-rack")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n  \"expectedRacks\": [\n    {\n      \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n      \"rackId\": \"rack-01\",\n      \"rackProfileId\": \"rp-standard-42u\",\n      \"name\": \"Rack 01\",\n      \"description\": \"Production rack in row A\",\n      \"labels\": {\n        \"chassis.manufacturer\": \"NVIDIA\",\n        \"chassis.serial-number\": \"NVRK0001001\",\n        \"chassis.model\": \"GB200-NVL72\",\n        \"location.datacenter\": \"phx-dc01\",\n        \"location.position\": \"A1\"\n      }\n    },\n    {\n      \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n      \"rackId\": \"rack-02\",\n      \"rackProfileId\": \"rp-standard-42u\",\n      \"name\": \"Rack 02\",\n      \"description\": \"Production rack in row A\",\n      \"labels\": {\n        \"chassis.manufacturer\": \"NVIDIA\",\n        \"chassis.serial-number\": \"NVRK0001002\",\n        \"chassis.model\": \"GB200-NVL72\",\n        \"location.datacenter\": \"phx-dc01\",\n        \"location.position\": \"A2\"\n      }\n    }\n  ]\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://nico-rest-api.nico.svc.cluster.local/v2/org/org/nico/expected-rack', [
  'body' => '{
  "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
  "expectedRacks": [
    {
      "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
      "rackId": "rack-01",
      "rackProfileId": "rp-standard-42u",
      "name": "Rack 01",
      "description": "Production rack in row A",
      "labels": {
        "chassis.manufacturer": "NVIDIA",
        "chassis.serial-number": "NVRK0001001",
        "chassis.model": "GB200-NVL72",
        "location.datacenter": "phx-dc01",
        "location.position": "A1"
      }
    },
    {
      "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
      "rackId": "rack-02",
      "rackProfileId": "rp-standard-42u",
      "name": "Rack 02",
      "description": "Production rack in row A",
      "labels": {
        "chassis.manufacturer": "NVIDIA",
        "chassis.serial-number": "NVRK0001002",
        "chassis.model": "GB200-NVL72",
        "location.datacenter": "phx-dc01",
        "location.position": "A2"
      }
    }
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://nico-rest-api.nico.svc.cluster.local/v2/org/org/nico/expected-rack");
var request = new RestRequest(Method.PUT);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n  \"expectedRacks\": [\n    {\n      \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n      \"rackId\": \"rack-01\",\n      \"rackProfileId\": \"rp-standard-42u\",\n      \"name\": \"Rack 01\",\n      \"description\": \"Production rack in row A\",\n      \"labels\": {\n        \"chassis.manufacturer\": \"NVIDIA\",\n        \"chassis.serial-number\": \"NVRK0001001\",\n        \"chassis.model\": \"GB200-NVL72\",\n        \"location.datacenter\": \"phx-dc01\",\n        \"location.position\": \"A1\"\n      }\n    },\n    {\n      \"siteId\": \"f97df110-f4de-492e-8849-4a6af68026b0\",\n      \"rackId\": \"rack-02\",\n      \"rackProfileId\": \"rp-standard-42u\",\n      \"name\": \"Rack 02\",\n      \"description\": \"Production rack in row A\",\n      \"labels\": {\n        \"chassis.manufacturer\": \"NVIDIA\",\n        \"chassis.serial-number\": \"NVRK0001002\",\n        \"chassis.model\": \"GB200-NVL72\",\n        \"location.datacenter\": \"phx-dc01\",\n        \"location.position\": \"A2\"\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 = [
  "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
  "expectedRacks": [
    [
      "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
      "rackId": "rack-01",
      "rackProfileId": "rp-standard-42u",
      "name": "Rack 01",
      "description": "Production rack in row A",
      "labels": [
        "chassis.manufacturer": "NVIDIA",
        "chassis.serial-number": "NVRK0001001",
        "chassis.model": "GB200-NVL72",
        "location.datacenter": "phx-dc01",
        "location.position": "A1"
      ]
    ],
    [
      "siteId": "f97df110-f4de-492e-8849-4a6af68026b0",
      "rackId": "rack-02",
      "rackProfileId": "rp-standard-42u",
      "name": "Rack 02",
      "description": "Production rack in row A",
      "labels": [
        "chassis.manufacturer": "NVIDIA",
        "chassis.serial-number": "NVRK0001002",
        "chassis.model": "GB200-NVL72",
        "location.datacenter": "phx-dc01",
        "location.position": "A2"
      ]
    ]
  ]
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://nico-rest-api.nico.svc.cluster.local/v2/org/org/nico/expected-rack")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PUT"
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()
```