curl --request PATCH \
--url https://api.arize.com/v2/annotation-configs/{annotation_config_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"annotation_config_type": "CATEGORICAL",
"name": "quality-v2",
"values": [
{
"label": "good",
"score": 1
},
{
"label": "bad",
"score": 0
}
],
"optimization_direction": "MAXIMIZE"
}
'import requests
url = "https://api.arize.com/v2/annotation-configs/{annotation_config_id}"
payload = {
"annotation_config_type": "CATEGORICAL",
"name": "quality-v2",
"values": [
{
"label": "good",
"score": 1
},
{
"label": "bad",
"score": 0
}
],
"optimization_direction": "MAXIMIZE"
}
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({
annotation_config_type: 'CATEGORICAL',
name: 'quality-v2',
values: [{label: 'good', score: 1}, {label: 'bad', score: 0}],
optimization_direction: 'MAXIMIZE'
})
};
fetch('https://api.arize.com/v2/annotation-configs/{annotation_config_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/annotation-configs/{annotation_config_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([
'annotation_config_type' => 'CATEGORICAL',
'name' => 'quality-v2',
'values' => [
[
'label' => 'good',
'score' => 1
],
[
'label' => 'bad',
'score' => 0
]
],
'optimization_direction' => 'MAXIMIZE'
]),
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/annotation-configs/{annotation_config_id}"
payload := strings.NewReader("{\n \"annotation_config_type\": \"CATEGORICAL\",\n \"name\": \"quality-v2\",\n \"values\": [\n {\n \"label\": \"good\",\n \"score\": 1\n },\n {\n \"label\": \"bad\",\n \"score\": 0\n }\n ],\n \"optimization_direction\": \"MAXIMIZE\"\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/annotation-configs/{annotation_config_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"annotation_config_type\": \"CATEGORICAL\",\n \"name\": \"quality-v2\",\n \"values\": [\n {\n \"label\": \"good\",\n \"score\": 1\n },\n {\n \"label\": \"bad\",\n \"score\": 0\n }\n ],\n \"optimization_direction\": \"MAXIMIZE\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arize.com/v2/annotation-configs/{annotation_config_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 \"annotation_config_type\": \"CATEGORICAL\",\n \"name\": \"quality-v2\",\n \"values\": [\n {\n \"label\": \"good\",\n \"score\": 1\n },\n {\n \"label\": \"bad\",\n \"score\": 0\n }\n ],\n \"optimization_direction\": \"MAXIMIZE\"\n}"
response = http.request(request)
puts response.read_body{
"id": "QW5ub3RhdGlvbkNvbmZpZzoxMjM0NQ==",
"name": "quality-v2",
"space_id": "space_12345",
"type": "CATEGORICAL",
"values": [
{
"label": "good",
"score": 1
},
{
"label": "bad",
"score": 0
}
],
"optimization_direction": "MAXIMIZE",
"created_at": "2024-01-01T00: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 an annotation config
Update an annotation config by its ID.
Payload Requirements
annotation_config_typeis required and must match the stored config’s type. The type is immutable and cannot be changed.- The updatable fields depend on the type:
CATEGORICAL:name,values,optimization_direction.CONTINUOUS:name,minimum_score,maximum_score,optimization_direction.FREEFORM:name.
- All fields other than
annotation_config_typeare optional; omitted fields are left unchanged. name, if provided, must be unique within the space (409 Conflict if duplicate).valuesreplaces the full label set (2-100 labels).- System-managed fields (
id,space_id,created_at) cannot be modified.
Valid example (categorical config)
{
"annotation_config_type": "CATEGORICAL",
"name": "quality-v2",
"values": [
{ "label": "good", "score": 1 },
{ "label": "bad", "score": 0 }
],
"optimization_direction": "MAXIMIZE"
}
Invalid example (missing annotation_config_type)
{
"name": "quality-v2"
}
curl --request PATCH \
--url https://api.arize.com/v2/annotation-configs/{annotation_config_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"annotation_config_type": "CATEGORICAL",
"name": "quality-v2",
"values": [
{
"label": "good",
"score": 1
},
{
"label": "bad",
"score": 0
}
],
"optimization_direction": "MAXIMIZE"
}
'import requests
url = "https://api.arize.com/v2/annotation-configs/{annotation_config_id}"
payload = {
"annotation_config_type": "CATEGORICAL",
"name": "quality-v2",
"values": [
{
"label": "good",
"score": 1
},
{
"label": "bad",
"score": 0
}
],
"optimization_direction": "MAXIMIZE"
}
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({
annotation_config_type: 'CATEGORICAL',
name: 'quality-v2',
values: [{label: 'good', score: 1}, {label: 'bad', score: 0}],
optimization_direction: 'MAXIMIZE'
})
};
fetch('https://api.arize.com/v2/annotation-configs/{annotation_config_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/annotation-configs/{annotation_config_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([
'annotation_config_type' => 'CATEGORICAL',
'name' => 'quality-v2',
'values' => [
[
'label' => 'good',
'score' => 1
],
[
'label' => 'bad',
'score' => 0
]
],
'optimization_direction' => 'MAXIMIZE'
]),
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/annotation-configs/{annotation_config_id}"
payload := strings.NewReader("{\n \"annotation_config_type\": \"CATEGORICAL\",\n \"name\": \"quality-v2\",\n \"values\": [\n {\n \"label\": \"good\",\n \"score\": 1\n },\n {\n \"label\": \"bad\",\n \"score\": 0\n }\n ],\n \"optimization_direction\": \"MAXIMIZE\"\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/annotation-configs/{annotation_config_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"annotation_config_type\": \"CATEGORICAL\",\n \"name\": \"quality-v2\",\n \"values\": [\n {\n \"label\": \"good\",\n \"score\": 1\n },\n {\n \"label\": \"bad\",\n \"score\": 0\n }\n ],\n \"optimization_direction\": \"MAXIMIZE\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arize.com/v2/annotation-configs/{annotation_config_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 \"annotation_config_type\": \"CATEGORICAL\",\n \"name\": \"quality-v2\",\n \"values\": [\n {\n \"label\": \"good\",\n \"score\": 1\n },\n {\n \"label\": \"bad\",\n \"score\": 0\n }\n ],\n \"optimization_direction\": \"MAXIMIZE\"\n}"
response = http.request(request)
puts response.read_body{
"id": "QW5ub3RhdGlvbkNvbmZpZzoxMjM0NQ==",
"name": "quality-v2",
"space_id": "space_12345",
"type": "CATEGORICAL",
"values": [
{
"label": "good",
"score": 1
},
{
"label": "bad",
"score": 0
}
],
"optimization_direction": "MAXIMIZE",
"created_at": "2024-01-01T00: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 annotation config identifier (base64) A universally unique identifier (base64-encoded opaque string).
"RW50aXR5OjEyMzQ1"
Body
Body containing annotation config update parameters. The annotation_config_type is required and must match the stored config's type.
- Option 1
- Option 2
- Option 3
The type of annotation config:
- CONTINUOUS: a numeric score within a defined range
- CATEGORICAL: a set of labeled values each with an optional score
- FREEFORM: free-text annotation with no structured scoring
CONTINUOUS New name for the annotation config. Must be unique within the space.
New minimum score value.
New maximum score value.
New optimization direction.
MAXIMIZE, MINIMIZE, NONE Response
An annotation config object
- Option 1
- Option 2
- Option 3
The unique identifier for the annotation config
The name of the annotation config
The timestamp for when the annotation config was created
The space id the annotation config belongs to
Discriminator value identifying a continuous annotation config.
CONTINUOUS The minimum score value
The maximum score value
Direction for optimization. When absent, the server treats the value as NONE.
MAXIMIZE, MINIMIZE, NONE Was this page helpful?