curl --request PATCH \
--url https://api.arize.com/v2/webhooks/{webhook_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Prompt release notifications (staging)",
"timeout_ms": 10000
}
'import requests
url = "https://api.arize.com/v2/webhooks/{webhook_id}"
payload = {
"name": "Prompt release notifications (staging)",
"timeout_ms": 10000
}
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: 'Prompt release notifications (staging)', timeout_ms: 10000})
};
fetch('https://api.arize.com/v2/webhooks/{webhook_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/webhooks/{webhook_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' => 'Prompt release notifications (staging)',
'timeout_ms' => 10000
]),
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/webhooks/{webhook_id}"
payload := strings.NewReader("{\n \"name\": \"Prompt release notifications (staging)\",\n \"timeout_ms\": 10000\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/webhooks/{webhook_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Prompt release notifications (staging)\",\n \"timeout_ms\": 10000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arize.com/v2/webhooks/{webhook_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\": \"Prompt release notifications (staging)\",\n \"timeout_ms\": 10000\n}"
response = http.request(request)
puts response.read_body{
"id": "V2ViaG9vazoxMjM0NQ==",
"organization_id": "T3JnYW5pemF0aW9uOjEyMzQ1",
"name": "Prompt release notifications",
"description": "Notifies the deploy pipeline when a prompt version is labeled",
"url": "https://example.com/hooks/arize",
"auth_type": "HMAC_SHA256",
"signing_secret_hint": "whsec_…abcd",
"timeout_ms": 30000,
"headers": {
"X-Environment": "production"
},
"created_at": "2026-08-01T12:00:00Z",
"updated_at": "2026-08-01T12:00:00Z",
"created_by_user_id": "VXNlcjoxMjM0NQ=="
}{
"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 webhook
Update a webhook by its ID. At least one field must be provided.
Payload Requirements
- At least one of
name,description,url,auth_token,timeout_ms, orheadersmust be provided. - If
nameis provided, it must be unique within the organization (409 on conflict). headersreplaces the whole header map.auth_typecannot be changed after creation, and the signing secret of anHMAC_SHA256webhook cannot be rotated — create a new webhook instead.- System-managed fields (
id,created_at,updated_at) cannot be modified.
curl --request PATCH \
--url https://api.arize.com/v2/webhooks/{webhook_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Prompt release notifications (staging)",
"timeout_ms": 10000
}
'import requests
url = "https://api.arize.com/v2/webhooks/{webhook_id}"
payload = {
"name": "Prompt release notifications (staging)",
"timeout_ms": 10000
}
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: 'Prompt release notifications (staging)', timeout_ms: 10000})
};
fetch('https://api.arize.com/v2/webhooks/{webhook_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/webhooks/{webhook_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' => 'Prompt release notifications (staging)',
'timeout_ms' => 10000
]),
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/webhooks/{webhook_id}"
payload := strings.NewReader("{\n \"name\": \"Prompt release notifications (staging)\",\n \"timeout_ms\": 10000\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/webhooks/{webhook_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Prompt release notifications (staging)\",\n \"timeout_ms\": 10000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arize.com/v2/webhooks/{webhook_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\": \"Prompt release notifications (staging)\",\n \"timeout_ms\": 10000\n}"
response = http.request(request)
puts response.read_body{
"id": "V2ViaG9vazoxMjM0NQ==",
"organization_id": "T3JnYW5pemF0aW9uOjEyMzQ1",
"name": "Prompt release notifications",
"description": "Notifies the deploy pipeline when a prompt version is labeled",
"url": "https://example.com/hooks/arize",
"auth_type": "HMAC_SHA256",
"signing_secret_hint": "whsec_…abcd",
"timeout_ms": 30000,
"headers": {
"X-Environment": "production"
},
"created_at": "2026-08-01T12:00:00Z",
"updated_at": "2026-08-01T12:00:00Z",
"created_by_user_id": "VXNlcjoxMjM0NQ=="
}{
"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 webhook identifier (base64) A universally unique identifier (base64-encoded opaque string).
"RW50aXR5OjEyMzQ1"
Body
Body containing webhook update parameters. At least one field must be provided.
Updated name of the webhook (must be unique within the organization)
255Updated description of the webhook. Set to null to clear it.
Updated HTTPS endpoint events are delivered to
Replacement Authorization header value sent with each delivery
request, e.g. Bearer my-token. Sent verbatim — include the
Bearer prefix if your endpoint expects one. Only valid when the
webhook's auth_type is BEARER. Write-only: never returned in any
response.
Updated delivery timeout in milliseconds
1000 <= x <= 60000Replacement custom HTTP headers, as a map of at most 20 header names to values. Replaces the whole header map; headers not included are removed.
Show child attributes
Show child attributes
Response
A webhook object
A webhook is an organization-owned destination that receives event deliveries over HTTPS. Attach a webhook to prompts and evaluators through their webhook-subscription endpoints to choose which events it receives.
Credentials are write-only: the bearer token is never returned, and the HMAC signing secret is returned exactly once, in the create response — only its redacted hint is readable afterwards.
Unique identifier for the webhook
"RW50aXR5OjEyMzQ1"
The unique identifier of the organization that owns the webhook
"RW50aXR5OjEyMzQ1"
Name of the webhook (unique within the organization)
255A brief description of the webhook's purpose. Defaults to an empty string.
The HTTPS endpoint events are delivered to
How deliveries from this webhook are authenticated. Fixed at creation.
BEARER, HMAC_SHA256 How long a delivery request may run before it is abandoned, in milliseconds. Defaults to 30000.
1000 <= x <= 60000Custom HTTP headers sent with each delivery request
Show child attributes
Show child attributes
Timestamp for when the webhook was created
Timestamp for when the webhook was last updated
Redacted hint of the signing secret (e.g. whsec_…abcd), useful for
identifying which secret the webhook uses. Present only for
HMAC_SHA256 webhooks. The full secret is returned exactly once, in
the create response, and cannot be retrieved afterwards.
The unique identifier of the user who created the webhook. Absent when that user has since been removed from the account.
"RW50aXR5OjEyMzQ1"
Was this page helpful?