curl --request POST \
--url https://api.dashboard.knotapi.com/webhook-endpoints/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"environment": "development",
"url": "https://example.com/webhooks/knot",
"description": "Primary webhook listener"
}
'import requests
url = "https://api.dashboard.knotapi.com/webhook-endpoints/create"
payload = {
"environment": "development",
"url": "https://example.com/webhooks/knot",
"description": "Primary webhook listener"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
environment: 'development',
url: 'https://example.com/webhooks/knot',
description: 'Primary webhook listener'
})
};
fetch('https://api.dashboard.knotapi.com/webhook-endpoints/create', 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.dashboard.knotapi.com/webhook-endpoints/create",
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([
'environment' => 'development',
'url' => 'https://example.com/webhooks/knot',
'description' => 'Primary webhook listener'
]),
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.dashboard.knotapi.com/webhook-endpoints/create"
payload := strings.NewReader("{\n \"environment\": \"development\",\n \"url\": \"https://example.com/webhooks/knot\",\n \"description\": \"Primary webhook listener\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.dashboard.knotapi.com/webhook-endpoints/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"environment\": \"development\",\n \"url\": \"https://example.com/webhooks/knot\",\n \"description\": \"Primary webhook listener\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dashboard.knotapi.com/webhook-endpoints/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"environment\": \"development\",\n \"url\": \"https://example.com/webhooks/knot\",\n \"description\": \"Primary webhook listener\"\n}"
response = http.request(request)
puts response.read_body{
"id": "0a8f5c6e-3d2b-4e1a-9f7c-8b6d5e4c3a21",
"url": "https://example.com/webhooks/knot",
"description": "Primary webhook listener",
"environment": "development",
"created_at": "2026-10-01T14:32:08Z"
}Create Webhook Endpoint
Create a webhook endpoint. Up to 10 per environment.
curl --request POST \
--url https://api.dashboard.knotapi.com/webhook-endpoints/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"environment": "development",
"url": "https://example.com/webhooks/knot",
"description": "Primary webhook listener"
}
'import requests
url = "https://api.dashboard.knotapi.com/webhook-endpoints/create"
payload = {
"environment": "development",
"url": "https://example.com/webhooks/knot",
"description": "Primary webhook listener"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
environment: 'development',
url: 'https://example.com/webhooks/knot',
description: 'Primary webhook listener'
})
};
fetch('https://api.dashboard.knotapi.com/webhook-endpoints/create', 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.dashboard.knotapi.com/webhook-endpoints/create",
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([
'environment' => 'development',
'url' => 'https://example.com/webhooks/knot',
'description' => 'Primary webhook listener'
]),
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.dashboard.knotapi.com/webhook-endpoints/create"
payload := strings.NewReader("{\n \"environment\": \"development\",\n \"url\": \"https://example.com/webhooks/knot\",\n \"description\": \"Primary webhook listener\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.dashboard.knotapi.com/webhook-endpoints/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"environment\": \"development\",\n \"url\": \"https://example.com/webhooks/knot\",\n \"description\": \"Primary webhook listener\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.dashboard.knotapi.com/webhook-endpoints/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"environment\": \"development\",\n \"url\": \"https://example.com/webhooks/knot\",\n \"description\": \"Primary webhook listener\"\n}"
response = http.request(request)
puts response.read_body{
"id": "0a8f5c6e-3d2b-4e1a-9f7c-8b6d5e4c3a21",
"url": "https://example.com/webhooks/knot",
"description": "Primary webhook listener",
"environment": "development",
"created_at": "2026-10-01T14:32:08Z"
}Authorizations
Short-lived access token from the device authorization flow. Expires after 15 minutes. Manages only the environment of the client ID it was issued for.
Body
The input parameters required for creating a webhook endpoint.
The environment the webhook endpoint belongs to. Must match your access token's environment.
development, production "development"
The URL Knot sends webhooks to. Must be a public https URL. Max 2083 characters.
"https://example.com/webhooks/knot"
A description of the webhook endpoint. Max 255 characters.
"Primary webhook listener"
Response
Successful request.
Unique identifier for the webhook endpoint.
"0a8f5c6e-3d2b-4e1a-9f7c-8b6d5e4c3a21"
The URL Knot sends webhooks to.
"https://example.com/webhooks/knot"
A description of the webhook endpoint, or null if none.
"Primary webhook listener"
The environment the webhook endpoint belongs to.
development, production "development"
When the webhook endpoint was created, in ISO 8601 format.
"2026-10-01T14:32:08Z"
Was this page helpful?