Detach Inventory Nodes
curl --request POST \
--url https://api.primeintellect.ai/api/admin/inventory/nodes/detach \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"clusterId": "<string>",
"nodeIds": [
"<string>"
]
}
'import requests
url = "https://api.primeintellect.ai/api/admin/inventory/nodes/detach"
payload = {
"clusterId": "<string>",
"nodeIds": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({clusterId: '<string>', nodeIds: ['<string>']})
};
fetch('https://api.primeintellect.ai/api/admin/inventory/nodes/detach', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.primeintellect.ai/api/admin/inventory/nodes/detach",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'clusterId' => '<string>',
'nodeIds' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.primeintellect.ai/api/admin/inventory/nodes/detach"
payload := strings.NewReader("{\n \"clusterId\": \"<string>\",\n \"nodeIds\": [\n \"<string>\"\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(string(body))
}HttpResponse<String> response = Unirest.post("https://api.primeintellect.ai/api/admin/inventory/nodes/detach")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"clusterId\": \"<string>\",\n \"nodeIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.primeintellect.ai/api/admin/inventory/nodes/detach")
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 \"clusterId\": \"<string>\",\n \"nodeIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"operationId": "<string>",
"message": "<string>",
"targetId": "<string>",
"targetName": "<string>",
"created": 123,
"updated": 123,
"assigned": 123,
"detached": 123,
"retired": 123
},
"status": "<string>"
}{
"errors": [
{
"param": "<string>",
"details": "<string>"
}
]
}admin-inventory
Detach Inventory Nodes
Detach nodes from one inventory cluster, leaving the node rows unassigned.
Every node must currently be ACTIVE on clusterId. Their assignments are
ended (kept as history), and a node left ACTIVE moves to INVENTORY. This is
the reversible half of node removal — a later import can re-assign the node.
dryRun runs the same validation without writing.
POST
/
api
/
admin
/
inventory
/
nodes
/
detach
Detach Inventory Nodes
curl --request POST \
--url https://api.primeintellect.ai/api/admin/inventory/nodes/detach \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"clusterId": "<string>",
"nodeIds": [
"<string>"
]
}
'import requests
url = "https://api.primeintellect.ai/api/admin/inventory/nodes/detach"
payload = {
"clusterId": "<string>",
"nodeIds": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({clusterId: '<string>', nodeIds: ['<string>']})
};
fetch('https://api.primeintellect.ai/api/admin/inventory/nodes/detach', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.primeintellect.ai/api/admin/inventory/nodes/detach",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'clusterId' => '<string>',
'nodeIds' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.primeintellect.ai/api/admin/inventory/nodes/detach"
payload := strings.NewReader("{\n \"clusterId\": \"<string>\",\n \"nodeIds\": [\n \"<string>\"\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(string(body))
}HttpResponse<String> response = Unirest.post("https://api.primeintellect.ai/api/admin/inventory/nodes/detach")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"clusterId\": \"<string>\",\n \"nodeIds\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.primeintellect.ai/api/admin/inventory/nodes/detach")
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 \"clusterId\": \"<string>\",\n \"nodeIds\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"operationId": "<string>",
"message": "<string>",
"targetId": "<string>",
"targetName": "<string>",
"created": 123,
"updated": 123,
"assigned": 123,
"detached": 123,
"retired": 123
},
"status": "<string>"
}{
"errors": [
{
"param": "<string>",
"details": "<string>"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Body
application/json
End the ACTIVE assignments of node_ids on cluster_id.
The node rows stay, with no live assignment; the assignment rows keep their
history (status ENDED, endDate set). cluster_id is required: it is the
detach target and the scope the ACL authorizes against.
Was this page helpful?
⌘I