curl --request PATCH \
--url https://api.meetingkit.com/api/v1/webhook_endpoints/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"metadata": {
"gurusup_user_id": "usr_8812",
"old_key": ""
},
"url": "<string>",
"enabled_events": [
"<string>"
],
"name": "<string>",
"api_version": "2026-10-09"
}
'import requests
url = "https://api.meetingkit.com/api/v1/webhook_endpoints/{id}"
payload = {
"metadata": {
"gurusup_user_id": "usr_8812",
"old_key": ""
},
"url": "<string>",
"enabled_events": ["<string>"],
"name": "<string>",
"api_version": "2026-10-09"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
metadata: {gurusup_user_id: 'usr_8812', old_key: ''},
url: '<string>',
enabled_events: ['<string>'],
name: '<string>',
api_version: '2026-10-09'
})
};
fetch('https://api.meetingkit.com/api/v1/webhook_endpoints/{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.meetingkit.com/api/v1/webhook_endpoints/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'metadata' => [
'gurusup_user_id' => 'usr_8812',
'old_key' => ''
],
'url' => '<string>',
'enabled_events' => [
'<string>'
],
'name' => '<string>',
'api_version' => '2026-10-09'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.meetingkit.com/api/v1/webhook_endpoints/{id}"
payload := strings.NewReader("{\n \"metadata\": {\n \"gurusup_user_id\": \"usr_8812\",\n \"old_key\": \"\"\n },\n \"url\": \"<string>\",\n \"enabled_events\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"api_version\": \"2026-10-09\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.patch("https://api.meetingkit.com/api/v1/webhook_endpoints/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {\n \"gurusup_user_id\": \"usr_8812\",\n \"old_key\": \"\"\n },\n \"url\": \"<string>\",\n \"enabled_events\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"api_version\": \"2026-10-09\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetingkit.com/api/v1/webhook_endpoints/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {\n \"gurusup_user_id\": \"usr_8812\",\n \"old_key\": \"\"\n },\n \"url\": \"<string>\",\n \"enabled_events\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"api_version\": \"2026-10-09\"\n}"
response = http.request(request)
puts response.read_body{
"id": "whe_01k6d4a1b2c3d4e5f6g7h8j9km",
"object": "<string>",
"workspace_id": "wks_01k6a2r9s8x7c2dvq3m5n6p4ab",
"name": "Acme production",
"url": "https://api.acme.com/meetingkit/webhooks",
"enabled_events": [
"meeting.finished",
"bot.summary_ready"
],
"status": "enabled",
"api_version": "2026-10-09",
"metadata": {
"gurusup_user_id": "usr_8812"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}Update a webhook endpoint
Omitted fields keep their values. Disabling an endpoint stops its deliveries, retries
included. Moving api_version changes the shape of every event sent from then on,
retries included.
curl --request PATCH \
--url https://api.meetingkit.com/api/v1/webhook_endpoints/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"metadata": {
"gurusup_user_id": "usr_8812",
"old_key": ""
},
"url": "<string>",
"enabled_events": [
"<string>"
],
"name": "<string>",
"api_version": "2026-10-09"
}
'import requests
url = "https://api.meetingkit.com/api/v1/webhook_endpoints/{id}"
payload = {
"metadata": {
"gurusup_user_id": "usr_8812",
"old_key": ""
},
"url": "<string>",
"enabled_events": ["<string>"],
"name": "<string>",
"api_version": "2026-10-09"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
metadata: {gurusup_user_id: 'usr_8812', old_key: ''},
url: '<string>',
enabled_events: ['<string>'],
name: '<string>',
api_version: '2026-10-09'
})
};
fetch('https://api.meetingkit.com/api/v1/webhook_endpoints/{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.meetingkit.com/api/v1/webhook_endpoints/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'metadata' => [
'gurusup_user_id' => 'usr_8812',
'old_key' => ''
],
'url' => '<string>',
'enabled_events' => [
'<string>'
],
'name' => '<string>',
'api_version' => '2026-10-09'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.meetingkit.com/api/v1/webhook_endpoints/{id}"
payload := strings.NewReader("{\n \"metadata\": {\n \"gurusup_user_id\": \"usr_8812\",\n \"old_key\": \"\"\n },\n \"url\": \"<string>\",\n \"enabled_events\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"api_version\": \"2026-10-09\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<api-key>")
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.patch("https://api.meetingkit.com/api/v1/webhook_endpoints/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"metadata\": {\n \"gurusup_user_id\": \"usr_8812\",\n \"old_key\": \"\"\n },\n \"url\": \"<string>\",\n \"enabled_events\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"api_version\": \"2026-10-09\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meetingkit.com/api/v1/webhook_endpoints/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"metadata\": {\n \"gurusup_user_id\": \"usr_8812\",\n \"old_key\": \"\"\n },\n \"url\": \"<string>\",\n \"enabled_events\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"api_version\": \"2026-10-09\"\n}"
response = http.request(request)
puts response.read_body{
"id": "whe_01k6d4a1b2c3d4e5f6g7h8j9km",
"object": "<string>",
"workspace_id": "wks_01k6a2r9s8x7c2dvq3m5n6p4ab",
"name": "Acme production",
"url": "https://api.acme.com/meetingkit/webhooks",
"enabled_events": [
"meeting.finished",
"bot.summary_ready"
],
"status": "enabled",
"api_version": "2026-10-09",
"metadata": {
"gurusup_user_id": "usr_8812"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}{
"errors": [
{
"code": "invalid",
"field": "recording.methods.bot.mode",
"message": "must be one of: audio_and_video, audio_only, inherit"
}
]
}Authorizations
Your API key, sent bare. See Authentication.
Path Parameters
Webhook endpoint ID, beginning with whe_. Treat it as an opaque string.
"whe_01k6d4a1b2c3d4e5f6g7h8j9km"
Body
Merged into the object's metadata: the keys you send are added or overwritten and the
others kept. "" as a value removes that key; metadata: "" removes every key. Numbers and
booleans are stored as their text; objects, arrays and null are refused.
Show child attributes
Show child attributes
{
"gurusup_user_id": "usr_8812",
"old_key": ""
}
A public HTTPS URL.
2048Replaces the whole list.
1A new name.
100Turn it on or off.
enabled: receives events.disabled: receives nothing; disabling cancels its pending deliveries.
enabled, disabled The version its events are named and shaped at, from now on.
"2026-10-09"
Response
The updated endpoint.
Webhook endpoint ID, beginning with whe_. Treat it as an opaque string.
"whe_01k6d4a1b2c3d4e5f6g7h8j9km"
Always webhook_endpoint.
Workspace ID, beginning with wks_. Treat it as an opaque string.
"wks_01k6a2r9s8x7c2dvq3m5n6p4ab"
Defaults to the URL's host.
"Acme production"
The public HTTPS URL events are sent to.
"https://api.acme.com/meetingkit/webhooks"
The events it receives, named as its api_version names them. * is every event.
["meeting.finished", "bot.summary_ready"]
Whether it receives events.
enabled: receives events.disabled: receives nothing; disabling cancels its pending deliveries.
enabled, disabled The version its events are named and shaped at.
"2026-10-09"
Your own key-value pairs, for your ids and context. MeetingKit stores them, returns them on the object and in every webhook that carries it, and never acts on them. Up to 50 keys of up to 40 characters (no square brackets), values up to 500 characters. See metadata.
Show child attributes
Show child attributes
{ "gurusup_user_id": "usr_8812" }
When it was created, in ISO 8601.
When it last changed, in ISO 8601.