Update Webhook Config
curl --request POST \
--url https://api.velt.dev/v2/workspace/webhookconfig/update \
--header 'Content-Type: application/json' \
--header 'x-velt-api-key: <x-velt-api-key>' \
--header 'x-velt-auth-token: <x-velt-auth-token>' \
--data '
{
"data": {
"useWebhookService": true,
"webhookServiceConfig": {
"authToken": "<string>",
"rawNotificationUrl": "<string>",
"processedNotificationUrl": "<string>",
"encodeData": true,
"encryptData": true,
"publicKey": "<string>",
"triggers": {
"comment_annotation.add": true,
"comment.add": true,
"comment.update": true,
"comment.delete": true,
"comment_annotation.status_change": true,
"comment_annotation.assign": true,
"comment_annotation.priority_change": true,
"comment_annotation.suggestion_accept": true,
"comment_annotation.suggestion_reject": true,
"comment.reaction_add": true,
"comment.reaction_delete": true
}
}
}
}
'import requests
url = "https://api.velt.dev/v2/workspace/webhookconfig/update"
payload = { "data": {
"useWebhookService": True,
"webhookServiceConfig": {
"authToken": "<string>",
"rawNotificationUrl": "<string>",
"processedNotificationUrl": "<string>",
"encodeData": True,
"encryptData": True,
"publicKey": "<string>",
"triggers": {
"comment_annotation.add": True,
"comment.add": True,
"comment.update": True,
"comment.delete": True,
"comment_annotation.status_change": True,
"comment_annotation.assign": True,
"comment_annotation.priority_change": True,
"comment_annotation.suggestion_accept": True,
"comment_annotation.suggestion_reject": True,
"comment.reaction_add": True,
"comment.reaction_delete": True
}
}
} }
headers = {
"x-velt-api-key": "<x-velt-api-key>",
"x-velt-auth-token": "<x-velt-auth-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-velt-api-key': '<x-velt-api-key>',
'x-velt-auth-token': '<x-velt-auth-token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
data: {
useWebhookService: true,
webhookServiceConfig: {
authToken: '<string>',
rawNotificationUrl: '<string>',
processedNotificationUrl: '<string>',
encodeData: true,
encryptData: true,
publicKey: '<string>',
triggers: {
'comment_annotation.add': true,
'comment.add': true,
'comment.update': true,
'comment.delete': true,
'comment_annotation.status_change': true,
'comment_annotation.assign': true,
'comment_annotation.priority_change': true,
'comment_annotation.suggestion_accept': true,
'comment_annotation.suggestion_reject': true,
'comment.reaction_add': true,
'comment.reaction_delete': true
}
}
}
})
};
fetch('https://api.velt.dev/v2/workspace/webhookconfig/update', 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.velt.dev/v2/workspace/webhookconfig/update",
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([
'data' => [
'useWebhookService' => true,
'webhookServiceConfig' => [
'authToken' => '<string>',
'rawNotificationUrl' => '<string>',
'processedNotificationUrl' => '<string>',
'encodeData' => true,
'encryptData' => true,
'publicKey' => '<string>',
'triggers' => [
'comment_annotation.add' => true,
'comment.add' => true,
'comment.update' => true,
'comment.delete' => true,
'comment_annotation.status_change' => true,
'comment_annotation.assign' => true,
'comment_annotation.priority_change' => true,
'comment_annotation.suggestion_accept' => true,
'comment_annotation.suggestion_reject' => true,
'comment.reaction_add' => true,
'comment.reaction_delete' => true
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-velt-api-key: <x-velt-api-key>",
"x-velt-auth-token: <x-velt-auth-token>"
],
]);
$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.velt.dev/v2/workspace/webhookconfig/update"
payload := strings.NewReader("{\n \"data\": {\n \"useWebhookService\": true,\n \"webhookServiceConfig\": {\n \"authToken\": \"<string>\",\n \"rawNotificationUrl\": \"<string>\",\n \"processedNotificationUrl\": \"<string>\",\n \"encodeData\": true,\n \"encryptData\": true,\n \"publicKey\": \"<string>\",\n \"triggers\": {\n \"comment_annotation.add\": true,\n \"comment.add\": true,\n \"comment.update\": true,\n \"comment.delete\": true,\n \"comment_annotation.status_change\": true,\n \"comment_annotation.assign\": true,\n \"comment_annotation.priority_change\": true,\n \"comment_annotation.suggestion_accept\": true,\n \"comment_annotation.suggestion_reject\": true,\n \"comment.reaction_add\": true,\n \"comment.reaction_delete\": true\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-velt-api-key", "<x-velt-api-key>")
req.Header.Add("x-velt-auth-token", "<x-velt-auth-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.post("https://api.velt.dev/v2/workspace/webhookconfig/update")
.header("x-velt-api-key", "<x-velt-api-key>")
.header("x-velt-auth-token", "<x-velt-auth-token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"useWebhookService\": true,\n \"webhookServiceConfig\": {\n \"authToken\": \"<string>\",\n \"rawNotificationUrl\": \"<string>\",\n \"processedNotificationUrl\": \"<string>\",\n \"encodeData\": true,\n \"encryptData\": true,\n \"publicKey\": \"<string>\",\n \"triggers\": {\n \"comment_annotation.add\": true,\n \"comment.add\": true,\n \"comment.update\": true,\n \"comment.delete\": true,\n \"comment_annotation.status_change\": true,\n \"comment_annotation.assign\": true,\n \"comment_annotation.priority_change\": true,\n \"comment_annotation.suggestion_accept\": true,\n \"comment_annotation.suggestion_reject\": true,\n \"comment.reaction_add\": true,\n \"comment.reaction_delete\": true\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.velt.dev/v2/workspace/webhookconfig/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-velt-api-key"] = '<x-velt-api-key>'
request["x-velt-auth-token"] = '<x-velt-auth-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"useWebhookService\": true,\n \"webhookServiceConfig\": {\n \"authToken\": \"<string>\",\n \"rawNotificationUrl\": \"<string>\",\n \"processedNotificationUrl\": \"<string>\",\n \"encodeData\": true,\n \"encryptData\": true,\n \"publicKey\": \"<string>\",\n \"triggers\": {\n \"comment_annotation.add\": true,\n \"comment.add\": true,\n \"comment.update\": true,\n \"comment.delete\": true,\n \"comment_annotation.status_change\": true,\n \"comment_annotation.assign\": true,\n \"comment_annotation.priority_change\": true,\n \"comment_annotation.suggestion_accept\": true,\n \"comment_annotation.suggestion_reject\": true,\n \"comment.reaction_add\": true,\n \"comment.reaction_delete\": true\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"result": {
"status": "success",
"message": "Webhook configuration updated successfully.",
"data": {
"useWebhookService": true,
"webhookServiceConfig": {
"authToken": "webhook_auth_token_here",
"rawNotificationUrl": "https://example.com/webhooks/raw",
"processedNotificationUrl": "https://example.com/webhooks/processed"
}
}
}
}
Webhooks Configuration
Update Webhook Config
POST
/
v2
/
workspace
/
webhookconfig
/
update
Update Webhook Config
curl --request POST \
--url https://api.velt.dev/v2/workspace/webhookconfig/update \
--header 'Content-Type: application/json' \
--header 'x-velt-api-key: <x-velt-api-key>' \
--header 'x-velt-auth-token: <x-velt-auth-token>' \
--data '
{
"data": {
"useWebhookService": true,
"webhookServiceConfig": {
"authToken": "<string>",
"rawNotificationUrl": "<string>",
"processedNotificationUrl": "<string>",
"encodeData": true,
"encryptData": true,
"publicKey": "<string>",
"triggers": {
"comment_annotation.add": true,
"comment.add": true,
"comment.update": true,
"comment.delete": true,
"comment_annotation.status_change": true,
"comment_annotation.assign": true,
"comment_annotation.priority_change": true,
"comment_annotation.suggestion_accept": true,
"comment_annotation.suggestion_reject": true,
"comment.reaction_add": true,
"comment.reaction_delete": true
}
}
}
}
'import requests
url = "https://api.velt.dev/v2/workspace/webhookconfig/update"
payload = { "data": {
"useWebhookService": True,
"webhookServiceConfig": {
"authToken": "<string>",
"rawNotificationUrl": "<string>",
"processedNotificationUrl": "<string>",
"encodeData": True,
"encryptData": True,
"publicKey": "<string>",
"triggers": {
"comment_annotation.add": True,
"comment.add": True,
"comment.update": True,
"comment.delete": True,
"comment_annotation.status_change": True,
"comment_annotation.assign": True,
"comment_annotation.priority_change": True,
"comment_annotation.suggestion_accept": True,
"comment_annotation.suggestion_reject": True,
"comment.reaction_add": True,
"comment.reaction_delete": True
}
}
} }
headers = {
"x-velt-api-key": "<x-velt-api-key>",
"x-velt-auth-token": "<x-velt-auth-token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-velt-api-key': '<x-velt-api-key>',
'x-velt-auth-token': '<x-velt-auth-token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
data: {
useWebhookService: true,
webhookServiceConfig: {
authToken: '<string>',
rawNotificationUrl: '<string>',
processedNotificationUrl: '<string>',
encodeData: true,
encryptData: true,
publicKey: '<string>',
triggers: {
'comment_annotation.add': true,
'comment.add': true,
'comment.update': true,
'comment.delete': true,
'comment_annotation.status_change': true,
'comment_annotation.assign': true,
'comment_annotation.priority_change': true,
'comment_annotation.suggestion_accept': true,
'comment_annotation.suggestion_reject': true,
'comment.reaction_add': true,
'comment.reaction_delete': true
}
}
}
})
};
fetch('https://api.velt.dev/v2/workspace/webhookconfig/update', 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.velt.dev/v2/workspace/webhookconfig/update",
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([
'data' => [
'useWebhookService' => true,
'webhookServiceConfig' => [
'authToken' => '<string>',
'rawNotificationUrl' => '<string>',
'processedNotificationUrl' => '<string>',
'encodeData' => true,
'encryptData' => true,
'publicKey' => '<string>',
'triggers' => [
'comment_annotation.add' => true,
'comment.add' => true,
'comment.update' => true,
'comment.delete' => true,
'comment_annotation.status_change' => true,
'comment_annotation.assign' => true,
'comment_annotation.priority_change' => true,
'comment_annotation.suggestion_accept' => true,
'comment_annotation.suggestion_reject' => true,
'comment.reaction_add' => true,
'comment.reaction_delete' => true
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-velt-api-key: <x-velt-api-key>",
"x-velt-auth-token: <x-velt-auth-token>"
],
]);
$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.velt.dev/v2/workspace/webhookconfig/update"
payload := strings.NewReader("{\n \"data\": {\n \"useWebhookService\": true,\n \"webhookServiceConfig\": {\n \"authToken\": \"<string>\",\n \"rawNotificationUrl\": \"<string>\",\n \"processedNotificationUrl\": \"<string>\",\n \"encodeData\": true,\n \"encryptData\": true,\n \"publicKey\": \"<string>\",\n \"triggers\": {\n \"comment_annotation.add\": true,\n \"comment.add\": true,\n \"comment.update\": true,\n \"comment.delete\": true,\n \"comment_annotation.status_change\": true,\n \"comment_annotation.assign\": true,\n \"comment_annotation.priority_change\": true,\n \"comment_annotation.suggestion_accept\": true,\n \"comment_annotation.suggestion_reject\": true,\n \"comment.reaction_add\": true,\n \"comment.reaction_delete\": true\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-velt-api-key", "<x-velt-api-key>")
req.Header.Add("x-velt-auth-token", "<x-velt-auth-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.post("https://api.velt.dev/v2/workspace/webhookconfig/update")
.header("x-velt-api-key", "<x-velt-api-key>")
.header("x-velt-auth-token", "<x-velt-auth-token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"useWebhookService\": true,\n \"webhookServiceConfig\": {\n \"authToken\": \"<string>\",\n \"rawNotificationUrl\": \"<string>\",\n \"processedNotificationUrl\": \"<string>\",\n \"encodeData\": true,\n \"encryptData\": true,\n \"publicKey\": \"<string>\",\n \"triggers\": {\n \"comment_annotation.add\": true,\n \"comment.add\": true,\n \"comment.update\": true,\n \"comment.delete\": true,\n \"comment_annotation.status_change\": true,\n \"comment_annotation.assign\": true,\n \"comment_annotation.priority_change\": true,\n \"comment_annotation.suggestion_accept\": true,\n \"comment_annotation.suggestion_reject\": true,\n \"comment.reaction_add\": true,\n \"comment.reaction_delete\": true\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.velt.dev/v2/workspace/webhookconfig/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-velt-api-key"] = '<x-velt-api-key>'
request["x-velt-auth-token"] = '<x-velt-auth-token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"useWebhookService\": true,\n \"webhookServiceConfig\": {\n \"authToken\": \"<string>\",\n \"rawNotificationUrl\": \"<string>\",\n \"processedNotificationUrl\": \"<string>\",\n \"encodeData\": true,\n \"encryptData\": true,\n \"publicKey\": \"<string>\",\n \"triggers\": {\n \"comment_annotation.add\": true,\n \"comment.add\": true,\n \"comment.update\": true,\n \"comment.delete\": true,\n \"comment_annotation.status_change\": true,\n \"comment_annotation.assign\": true,\n \"comment_annotation.priority_change\": true,\n \"comment_annotation.suggestion_accept\": true,\n \"comment_annotation.suggestion_reject\": true,\n \"comment.reaction_add\": true,\n \"comment.reaction_delete\": true\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"result": {
"status": "success",
"message": "Webhook configuration updated successfully.",
"data": {
"useWebhookService": true,
"webhookServiceConfig": {
"authToken": "webhook_auth_token_here",
"rawNotificationUrl": "https://example.com/webhooks/raw",
"processedNotificationUrl": "https://example.com/webhooks/processed"
}
}
}
}
Use this API to update the webhook service configuration for a workspace. At least one of
useWebhookService or webhookServiceConfig must be provided.
This endpoint uses API-key-level auth: pass
x-velt-api-key and x-velt-auth-token as headers. You can obtain these from the Get Auth Tokens endpoint.Currently only supported for Basic Webhooks.
Defaults on first enable. If you enable the service (
useWebhookService: true) and the stored config has no triggers yet (defaults are seeded even if authToken / URLs already exist), defaults are seeded automatically: the standard comment triggers and all huddle triggers are turned on, the crdt and recorder triggers are off, and enableDataProtection is false. The opt-in suggestion_accept / suggestion_reject comment triggers stay off until you enable them explicitly. Existing non-trigger fields are preserved, and any webhookServiceConfig values you send in the same request are merged on top of these defaults.The response
data echoes the latest post-write state as { useWebhookService, webhookServiceConfig } — the same shape returned by Get Webhook Config. Fields not part of your request fall back to the existing stored values.Endpoint
POST https://api.velt.dev/v2/workspace/webhookconfig/update
Headers
Your API key.
Your Auth Token.
Body
Params
Show properties
Show properties
Whether to enable the webhook service.
Webhook service configuration object.
Show properties
Show properties
Auth token sent with each webhook request for verification.
URL to receive raw (unprocessed) webhook notifications.
URL to receive processed webhook notifications.
Whether to base64 encode the webhook payload.
Whether to encrypt the webhook payload.
Public key used for payload encryption.
Event triggers that activate webhook notifications. Each key is an event type string and the value is a boolean to enable (
true) or disable (false) that trigger. See Webhooks for the full list of event types. Common keys include:Show properties
Show properties
Trigger when a new comment thread is created.
Trigger when a new comment is added to a thread.
Trigger when a comment is updated.
Trigger when a comment is deleted.
Trigger when a thread’s status changes (e.g., resolved).
Trigger when a thread is assigned to a user.
Trigger when a thread’s priority changes.
Trigger when a suggestion is accepted. Opt-in: disabled by default, enable it explicitly to receive this event.
Trigger when a suggestion is rejected. Opt-in: disabled by default, enable it explicitly to receive this event.
Trigger when a reaction is added to a comment.
Trigger when a reaction is removed from a comment.
Example Request
{
"data": {
"useWebhookService": true,
"webhookServiceConfig": {
"authToken": "webhook_auth_token_here",
"rawNotificationUrl": "https://example.com/webhooks/raw",
"processedNotificationUrl": "https://example.com/webhooks/processed"
}
}
}
Example Response
Success Response
{
"result": {
"status": "success",
"message": "Webhook configuration updated successfully.",
"data": {
"useWebhookService": true,
"webhookServiceConfig": {
"authToken": "webhook_auth_token_here",
"rawNotificationUrl": "https://example.com/webhooks/raw",
"processedNotificationUrl": "https://example.com/webhooks/processed"
}
}
}
}
Failure Response
{
"error": {
"status": "INVALID_ARGUMENT",
"message": "Invalid webhook service configuration."
}
}
{
"result": {
"status": "success",
"message": "Webhook configuration updated successfully.",
"data": {
"useWebhookService": true,
"webhookServiceConfig": {
"authToken": "webhook_auth_token_here",
"rawNotificationUrl": "https://example.com/webhooks/raw",
"processedNotificationUrl": "https://example.com/webhooks/processed"
}
}
}
}
Was this page helpful?
⌘I

