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"
}
}
}
}
Basic Webhooks
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
string
required
Your API key.
string
required
Your Auth Token.
Body
Params
object
required
Show properties
Show properties
boolean
Whether to enable the webhook service.
object
Webhook service configuration object.
Show properties
Show properties
string
Auth token sent with each webhook request for verification.
string
URL to receive raw (unprocessed) webhook notifications.
string
URL to receive processed webhook notifications.
boolean
Whether to base64 encode the webhook payload.
boolean
Whether to encrypt the webhook payload.
string
Public key used for payload encryption.
object
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
boolean
Trigger when a new comment thread is created.
boolean
Trigger when a new comment is added to a thread.
boolean
Trigger when a comment is updated.
boolean
Trigger when a comment is deleted.
boolean
Trigger when a thread’s status changes (e.g., resolved).
boolean
Trigger when a thread is assigned to a user.
boolean
Trigger when a thread’s priority changes.
boolean
Trigger when a suggestion is accepted. Opt-in: disabled by default, enable it explicitly to receive this event.
boolean
Trigger when a suggestion is rejected. Opt-in: disabled by default, enable it explicitly to receive this event.
boolean
Trigger when a reaction is added to a comment.
boolean
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

