curl --request PATCH \
--url https://api.arize.com/v2/tags/{tag_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "production-critical",
"color": "RED"
}
'import requests
url = "https://api.arize.com/v2/tags/{tag_id}"
payload = {
"name": "production-critical",
"color": "RED"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'production-critical', color: 'RED'})
};
fetch('https://api.arize.com/v2/tags/{tag_id}', 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.arize.com/v2/tags/{tag_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'production-critical',
'color' => 'RED'
]),
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.arize.com/v2/tags/{tag_id}"
payload := strings.NewReader("{\n \"name\": \"production-critical\",\n \"color\": \"RED\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.arize.com/v2/tags/{tag_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"production-critical\",\n \"color\": \"RED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arize.com/v2/tags/{tag_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"production-critical\",\n \"color\": \"RED\"\n}"
response = http.request(request)
puts response.read_body{
"id": "VGFnOjEyMzQ1",
"name": "production",
"description": "Resources serving production traffic",
"color": "GREEN",
"space_id": "U3BhY2U6MTIzNDU=",
"created_at": "2026-01-01T12:00:00Z",
"updated_at": "2026-01-01T12:00:00Z"
}{
"status": 400,
"title": "Invalid request parameters",
"detail": "The 'name' field is required and must be a non-empty string.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#invalid-request"
}{
"status": 401,
"title": "Authentication required",
"detail": "You must be authenticated to access this resource.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#authentication-required"
}{
"status": 403,
"title": "Access forbidden",
"detail": "You do not have permission to access this resource.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#access-forbidden"
}{
"status": 404,
"title": "Resource not found",
"detail": "The requested resource with ID '12345' was not found.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#resource-not-found"
}{
"status": 409,
"title": "Resource conflict",
"detail": "A resource with the given identifier already exists.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#resource-conflict"
}{
"status": 422,
"title": "Unprocessable Entity",
"detail": "One or more fields failed validation.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#unprocessable-entity"
}{
"status": 429,
"title": "Rate limit exceeded",
"detail": "You have exceeded the allowed number of requests. Please try again later.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#rate-limit-exceeded"
}Update a tag
Update a tag’s name, description, or color.
Tags are shared, so an update is visible on every resource the tag is attached to.
Payload Requirements
- At least one of
name,description, orcolormust be provided. Omitted fields are left unchanged. name, when provided, must be non-empty after trimming, at most 100 characters, and unique within the space compared case-insensitively. A collision returns409.descriptionandcoloracceptnullto clear the current value.- System-managed fields (
id,created_at,updated_at) cannot be modified.updated_atis advanced automatically.
Valid example
{
"name": "production-critical",
"color": "RED"
}
Invalid example (empty body — nothing to update)
Request:
{}
Response:
{
"type": "https://arize.com/docs/ax/rest-reference/errors#invalid-request",
"title": "Bad Request",
"status": 400,
"detail": "At least one field (name, description, color) must be provided",
"request_id": "req_01HZY6X8E7"
}
Unrecognized fields are rejected with 400 rather than ignored, so a
misspelled field name fails loudly instead of silently doing nothing.
curl --request PATCH \
--url https://api.arize.com/v2/tags/{tag_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "production-critical",
"color": "RED"
}
'import requests
url = "https://api.arize.com/v2/tags/{tag_id}"
payload = {
"name": "production-critical",
"color": "RED"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'production-critical', color: 'RED'})
};
fetch('https://api.arize.com/v2/tags/{tag_id}', 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.arize.com/v2/tags/{tag_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'production-critical',
'color' => 'RED'
]),
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.arize.com/v2/tags/{tag_id}"
payload := strings.NewReader("{\n \"name\": \"production-critical\",\n \"color\": \"RED\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.arize.com/v2/tags/{tag_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"production-critical\",\n \"color\": \"RED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arize.com/v2/tags/{tag_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"production-critical\",\n \"color\": \"RED\"\n}"
response = http.request(request)
puts response.read_body{
"id": "VGFnOjEyMzQ1",
"name": "production",
"description": "Resources serving production traffic",
"color": "GREEN",
"space_id": "U3BhY2U6MTIzNDU=",
"created_at": "2026-01-01T12:00:00Z",
"updated_at": "2026-01-01T12:00:00Z"
}{
"status": 400,
"title": "Invalid request parameters",
"detail": "The 'name' field is required and must be a non-empty string.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#invalid-request"
}{
"status": 401,
"title": "Authentication required",
"detail": "You must be authenticated to access this resource.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#authentication-required"
}{
"status": 403,
"title": "Access forbidden",
"detail": "You do not have permission to access this resource.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#access-forbidden"
}{
"status": 404,
"title": "Resource not found",
"detail": "The requested resource with ID '12345' was not found.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#resource-not-found"
}{
"status": 409,
"title": "Resource conflict",
"detail": "A resource with the given identifier already exists.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#resource-conflict"
}{
"status": 422,
"title": "Unprocessable Entity",
"detail": "One or more fields failed validation.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#unprocessable-entity"
}{
"status": 429,
"title": "Rate limit exceeded",
"detail": "You have exceeded the allowed number of requests. Please try again later.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#rate-limit-exceeded"
}Authorizations
Most Arize AI endpoints require authentication. For those endpoints that require authentication, include your API key in the request header using the format
Path Parameters
The unique tag identifier (base64) A universally unique identifier (base64-encoded opaque string).
"RW50aXR5OjEyMzQ1"
Body
Body containing the tag fields to update. At least one of name,
description, or color must be provided.
Fields to update on a tag. Omitted fields are left unchanged, so at least one field must be provided.
New tag name. Must be unique within the space, compared case-insensitively. Maximum 100 characters. Left unchanged when omitted.
1 - 100New description. Pass null to clear it. Left unchanged when omitted.
New display color. Pass null to clear it. Left unchanged when omitted.
GRAY, INDIGO, BLUE, CYAN, TEAL, PINE, GREEN, LIME, OLIVE, LEMON, YELLOW, ORANGE, RED, CORAL, PINK, PLUM, PURPLE, BROWN, AUBURN Response
A tag object
A tag is a reusable label defined once per space and attached to many resources across the platform, so the same vocabulary can be applied to projects, datasets, prompts, and more.
Tags are shared. Renaming a tag changes it everywhere it appears, and deleting a tag detaches it from every resource it was attached to.
The unique identifier of the tag
"RW50aXR5OjEyMzQ1"
The tag name. Unique within the space, compared case-insensitively.
The unique identifier of the space the tag belongs to
"RW50aXR5OjEyMzQ1"
When the tag was created
When the tag was last modified. Equal to created_at until the tag is
updated.
Free-form description of what the tag is for. null when no description
has been set.
Display color for the tag. null when no color has been assigned, which
clients render with a neutral treatment.
GRAY, INDIGO, BLUE, CYAN, TEAL, PINE, GREEN, LIME, OLIVE, LEMON, YELLOW, ORANGE, RED, CORAL, PINK, PLUM, PURPLE, BROWN, AUBURN Was this page helpful?