cURL
curl --request POST \
--url https://api.nekt.ai/api/v1/tags/detach/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>"
}
'import requests
url = "https://api.nekt.ai/api/v1/tags/detach/"
payload = { "name": "<string>" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>'})
};
fetch('https://api.nekt.ai/api/v1/tags/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.nekt.ai/api/v1/tags/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([
'name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.nekt.ai/api/v1/tags/detach/"
payload := strings.NewReader("{\n \"name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.nekt.ai/api/v1/tags/detach/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nekt.ai/api/v1/tags/detach/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}Tags
Detach Tags
Remove one or more tags from sources, transformations, destinations, and other catalog resources.
POST
/
api
/
v1
/
tags
/
detach
/
cURL
curl --request POST \
--url https://api.nekt.ai/api/v1/tags/detach/ \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>"
}
'import requests
url = "https://api.nekt.ai/api/v1/tags/detach/"
payload = { "name": "<string>" }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>'})
};
fetch('https://api.nekt.ai/api/v1/tags/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.nekt.ai/api/v1/tags/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([
'name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.nekt.ai/api/v1/tags/detach/"
payload := strings.NewReader("{\n \"name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.nekt.ai/api/v1/tags/detach/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.nekt.ai/api/v1/tags/detach/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}The detach endpoint removes the association between one or more existing tags and a set of resources. The tag itself is not deleted — only the links between the tag and the resources in the request body are removed. Tag names that do not exist in the organization are ignored silently.
The request body is identical to Attach Tags: a list of tag
names and one or more resource ID lists.
The interactive API Playground on this page is generated from the OpenAPI schema and may only show the base
Tag fields. The canonical request body is the one documented below (names plus the per-resource ID arrays), and the response is an array of tags, not a single object.Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
names | array of strings | Yes | Tag names to detach. Names that don’t exist in the organization are skipped. |
sources | array of UUIDs | No | Source IDs to untag. |
transformations | array of UUIDs | No | Transformation IDs to untag (covers queries, notebooks, and histories). |
destinations | array of UUIDs | No | Destination IDs to untag. |
visualizations | array of UUIDs | No | Visualization IDs to untag. |
layers | array of UUIDs | No | Layer IDs to untag. |
folders | array of UUIDs | No | Folder IDs to untag. |
tables | array of UUIDs | No | Table IDs to untag. |
volumes | array of UUIDs | No | Volume IDs to untag. |
Unlike
attach, the detach endpoint does not create tags on the fly. If a name in names is not already present in your organization it is simply skipped.Response
The endpoint returns the list of tags that were matched bynames and from which the resources were detached.
[
{
"id": "6f2a9c4b-2a10-4e7f-9c54-d2a9b1d28b0e",
"name": "marketing",
"created_at": "2026-04-17T10:15:00.000000-03:00",
"updated_at": "2026-04-17T11:02:00.000000-03:00"
}
]
Example: detach one tag from a single source
curl --request POST \
--url https://api.nekt.ai/api/v1/tags/detach/ \
--header "x-api-key: YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"names": ["marketing"],
"sources": ["d2c1b472-902c-477a-b300-e7c3fd72609b"]
}'
Example: detach multiple tags from one transformation
curl --request POST \
--url https://api.nekt.ai/api/v1/tags/detach/ \
--header "x-api-key: YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"names": ["weekly-refresh", "owned-by-revops"],
"transformations": ["a7b4f0d2-5c91-4e34-9c1f-7e3a5f1c9d02"]
}'
Example: batch detach tags across sources, transformations, and destinations
curl --request POST \
--url https://api.nekt.ai/api/v1/tags/detach/ \
--header "x-api-key: YOUR_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"names": ["production"],
"sources": [
"d2c1b472-902c-477a-b300-e7c3fd72609b",
"f3e4d5c6-b7a8-49e0-1f2a-3b4c5d6e7f80"
],
"transformations": [
"a7b4f0d2-5c91-4e34-9c1f-7e3a5f1c9d02",
"b8c5e1e3-6d02-4f45-ad20-8f4b6e2d0e13"
],
"destinations": [
"e4d5c6b7-a8b9-40c1-d2e3-f4a5b6c7d8e9"
]
}'
Python example: remove a tag from every destination that currently carries it
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.nekt.ai"
headers = {
"x-api-key": API_KEY,
"Content-Type": "application/json",
}
destinations = requests.get(
f"{BASE_URL}/api/v1/destinations/",
headers=headers,
params={"expand[]": "tags"},
).json()
legacy_destination_ids = [
d["id"]
for d in destinations["results"]
if any(tag["name"] == "legacy" for tag in d.get("tags", []))
]
requests.post(
f"{BASE_URL}/api/v1/tags/detach/",
headers=headers,
json={
"names": ["legacy"],
"destinations": legacy_destination_ids,
},
)
Related
- Attach Tags — create the inverse association.
- List Tags — confirm which tags currently exist.
Authorizations
API Key authentication. Format: 'x-api-key: api_key'
Body
application/jsonapplication/x-www-form-urlencodedmultipart/form-data
Maximum string length:
255Was this page helpful?