curl -X PUT "https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/api/webhooks/v2/sayvy",
"events": [
"call.completed",
"call.started",
"ai.tool.executed"
],
"is_active": true
}'
import requests
url = "https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc"
payload = {
"url": "https://example.com/api/webhooks/v2/sayvy",
"events": [
"call.completed",
"call.started",
"ai.tool.executed"
],
"is_active": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc", {
method: "PUT",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
url: "https://example.com/api/webhooks/v2/sayvy",
is_active: false
})
});
const data = await response.json();
console.log(data);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.PUT(HttpRequest.BodyPublishers.ofString("""
{
"is_active": false
}
"""))
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
{
"id": "8f3b0e2a-71d3-4a5f-9e6b-123456789abc",
"organization_id": "93f35dc2-5d46-4e58-a9ee-038c35d9bcf1",
"url": "https://example.com/api/webhooks/v2/sayvy",
"secret": "whsec_3b9f8a12e4c7d018b249aef567890123",
"events": [
"call.completed",
"call.started",
"ai.tool.executed"
],
"is_active": true,
"created_at": "2026-09-07T12:30:00Z",
"updated_at": "2026-09-07T14:45:00Z"
}
{
"detail": "URL must start with http:// or https://"
}
{
"detail": "Unauthorized"
}
{
"detail": "Webhook not found"
}
Webhooks
Update webhook
Modify webhook callback URL, subscribed events, or active status
PUT
/
api
/
v1
/
webhooks
/
{webhook_id}
curl -X PUT "https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/api/webhooks/v2/sayvy",
"events": [
"call.completed",
"call.started",
"ai.tool.executed"
],
"is_active": true
}'
import requests
url = "https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc"
payload = {
"url": "https://example.com/api/webhooks/v2/sayvy",
"events": [
"call.completed",
"call.started",
"ai.tool.executed"
],
"is_active": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc", {
method: "PUT",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
url: "https://example.com/api/webhooks/v2/sayvy",
is_active: false
})
});
const data = await response.json();
console.log(data);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.PUT(HttpRequest.BodyPublishers.ofString("""
{
"is_active": false
}
"""))
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
{
"id": "8f3b0e2a-71d3-4a5f-9e6b-123456789abc",
"organization_id": "93f35dc2-5d46-4e58-a9ee-038c35d9bcf1",
"url": "https://example.com/api/webhooks/v2/sayvy",
"secret": "whsec_3b9f8a12e4c7d018b249aef567890123",
"events": [
"call.completed",
"call.started",
"ai.tool.executed"
],
"is_active": true,
"created_at": "2026-09-07T12:30:00Z",
"updated_at": "2026-09-07T14:45:00Z"
}
{
"detail": "URL must start with http:// or https://"
}
{
"detail": "Unauthorized"
}
{
"detail": "Webhook not found"
}
Update an existing webhook subscription. Modify the destination callback URL, adjust the array of subscribed events, or toggle the subscription active status (
is_active).
Authentication
This endpoint requires Bearer token authentication.Authorization: Bearer <token>
| Header | Type | Required | Description | Format |
|---|---|---|---|---|
Authorization | string | Yes | Scoped organization API key or Bearer JWT token | Bearer <token> |
Input parameters
string
required
Unique UUID identifier of the webhook subscription to update. Example:
8f3b0e2a-71d3-4a5f-9e6b-123456789abc.string
required
Bearer token for authentication. Format:
Bearer <token>.string
Updated HTTPS callback URL. Must start with
http:// or https://.string[]
Updated list of subscribed events from
ALLOWED_EVENTS.boolean
Toggle whether Sayvy AI actively dispatches webhook payloads to this endpoint (
true or false).Response Fields
Returns the updated WebhookSubscriptionResponse object:string
Webhook UUID.
string
Organization UUID.
string
Updated callback URL.
string
HMAC SHA-256 signing secret.
string[]
Updated subscribed events list.
boolean
Updated active state.
string
Creation timestamp.
string
Modification timestamp.
curl -X PUT "https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/api/webhooks/v2/sayvy",
"events": [
"call.completed",
"call.started",
"ai.tool.executed"
],
"is_active": true
}'
import requests
url = "https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc"
payload = {
"url": "https://example.com/api/webhooks/v2/sayvy",
"events": [
"call.completed",
"call.started",
"ai.tool.executed"
],
"is_active": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.status_code)
print(response.json())
const response = await fetch("https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc", {
method: "PUT",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
url: "https://example.com/api/webhooks/v2/sayvy",
is_active: false
})
});
const data = await response.json();
console.log(data);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.sayvy.ai/api/v1/webhooks/8f3b0e2a-71d3-4a5f-9e6b-123456789abc"))
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.PUT(HttpRequest.BodyPublishers.ofString("""
{
"is_active": false
}
"""))
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
{
"id": "8f3b0e2a-71d3-4a5f-9e6b-123456789abc",
"organization_id": "93f35dc2-5d46-4e58-a9ee-038c35d9bcf1",
"url": "https://example.com/api/webhooks/v2/sayvy",
"secret": "whsec_3b9f8a12e4c7d018b249aef567890123",
"events": [
"call.completed",
"call.started",
"ai.tool.executed"
],
"is_active": true,
"created_at": "2026-09-07T12:30:00Z",
"updated_at": "2026-09-07T14:45:00Z"
}
{
"detail": "URL must start with http:// or https://"
}
{
"detail": "Unauthorized"
}
{
"detail": "Webhook not found"
}
‹ PreviousNext ›
Delete webhook
DELETE /api/v1/webhooks/{webhook_id}
Was this page helpful?