Get a webhook endpoint
curl --request GET \
--url https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_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.contourvoice.com/v1/webhook-endpoints/{endpoint_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <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"
"net/http"
"io"
)
func main() {
url := "https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"agent_ids": [
"3f1c1b2e-6d1a-4c0e-9b2f-1a2b3c4d5e6f"
],
"created_at": "2026-09-10T14:00:00Z",
"description": "Production",
"enabled": true,
"events": [
"call.started",
"call.ended",
"call.analyzed"
],
"id": "b7e1c2d3-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"secret_hint": "k9Qz",
"updated_at": "2026-09-10T14:00:00Z",
"url": "https://example.com/webhooks/contour"
}{
"detail": "Invalid or expired API key"
}{
"detail": "Webhook endpoint not found."
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"ctx": {},
"input": "<unknown>"
}
]
}Webhook Endpoints
Get a webhook endpoint
One endpoint. The secret is not included; only its last four characters.
GET
/
v1
/
webhook-endpoints
/
{endpoint_id}
Get a webhook endpoint
curl --request GET \
--url https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_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.contourvoice.com/v1/webhook-endpoints/{endpoint_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <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"
"net/http"
"io"
)
func main() {
url := "https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contourvoice.com/v1/webhook-endpoints/{endpoint_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"agent_ids": [
"3f1c1b2e-6d1a-4c0e-9b2f-1a2b3c4d5e6f"
],
"created_at": "2026-09-10T14:00:00Z",
"description": "Production",
"enabled": true,
"events": [
"call.started",
"call.ended",
"call.analyzed"
],
"id": "b7e1c2d3-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"secret_hint": "k9Qz",
"updated_at": "2026-09-10T14:00:00Z",
"url": "https://example.com/webhooks/contour"
}{
"detail": "Invalid or expired API key"
}{
"detail": "Webhook endpoint not found."
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"ctx": {},
"input": "<unknown>"
}
]
}Authorizations
Your organization's API key (sk_cont_...), sent as Authorization: Bearer sk_cont_.... Keep it server-side.
Path Parameters
Response
Successful Response
False while deliveries are paused.
Subscribed events.
Endpoint id; use it in every other endpoint call.
The last four characters of the signing secret, so you can tell which secret an endpoint is using without exposing it.
Where events are delivered.
Agent filter, or null for all calls in the organization.
Your label.