Update endpoint
curl --request PATCH \
--url https://api.reclack.com/v1/webhooks/{endpointId} \
--header 'Api-Key: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://acme.dev/hooks/reclack",
"event_types": [
"invoice.paid",
"subscription.renewed"
],
"description": "Billing events for the production app"
}
'import requests
url = "https://api.reclack.com/v1/webhooks/{endpointId}"
payload = {
"url": "https://acme.dev/hooks/reclack",
"event_types": ["invoice.paid", "subscription.renewed"],
"description": "Billing events for the production app"
}
headers = {
"Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://acme.dev/hooks/reclack',
event_types: ['invoice.paid', 'subscription.renewed'],
description: 'Billing events for the production app'
})
};
fetch('https://api.reclack.com/v1/webhooks/{endpointId}', 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.reclack.com/v1/webhooks/{endpointId}",
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([
'url' => 'https://acme.dev/hooks/reclack',
'event_types' => [
'invoice.paid',
'subscription.renewed'
],
'description' => 'Billing events for the production app'
]),
CURLOPT_HTTPHEADER => [
"Api-Key: <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.reclack.com/v1/webhooks/{endpointId}"
payload := strings.NewReader("{\n \"url\": \"https://acme.dev/hooks/reclack\",\n \"event_types\": [\n \"invoice.paid\",\n \"subscription.renewed\"\n ],\n \"description\": \"Billing events for the production app\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Api-Key", "<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.reclack.com/v1/webhooks/{endpointId}")
.header("Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://acme.dev/hooks/reclack\",\n \"event_types\": [\n \"invoice.paid\",\n \"subscription.renewed\"\n ],\n \"description\": \"Billing events for the production app\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reclack.com/v1/webhooks/{endpointId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://acme.dev/hooks/reclack\",\n \"event_types\": [\n \"invoice.paid\",\n \"subscription.renewed\"\n ],\n \"description\": \"Billing events for the production app\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "whe_7Fh2PqX9",
"url": "https://acme.dev/hooks/reclack",
"status": "active",
"description": "Billing events for the production app",
"event_types": [
"invoice.paid",
"subscription.renewed"
],
"secret": "whsec_9f1c4a2b8e7d0356",
"created_at": "2026-10-18T22:07:41Z",
"updated_at": "2026-10-18T22:07:41Z"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}Webhooks
Update Webhook Endpoint
Move an endpoint, change its types, or resume it.
PATCH
/
v1
/
webhooks
/
{endpointId}
Update endpoint
curl --request PATCH \
--url https://api.reclack.com/v1/webhooks/{endpointId} \
--header 'Api-Key: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "https://acme.dev/hooks/reclack",
"event_types": [
"invoice.paid",
"subscription.renewed"
],
"description": "Billing events for the production app"
}
'import requests
url = "https://api.reclack.com/v1/webhooks/{endpointId}"
payload = {
"url": "https://acme.dev/hooks/reclack",
"event_types": ["invoice.paid", "subscription.renewed"],
"description": "Billing events for the production app"
}
headers = {
"Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://acme.dev/hooks/reclack',
event_types: ['invoice.paid', 'subscription.renewed'],
description: 'Billing events for the production app'
})
};
fetch('https://api.reclack.com/v1/webhooks/{endpointId}', 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.reclack.com/v1/webhooks/{endpointId}",
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([
'url' => 'https://acme.dev/hooks/reclack',
'event_types' => [
'invoice.paid',
'subscription.renewed'
],
'description' => 'Billing events for the production app'
]),
CURLOPT_HTTPHEADER => [
"Api-Key: <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.reclack.com/v1/webhooks/{endpointId}"
payload := strings.NewReader("{\n \"url\": \"https://acme.dev/hooks/reclack\",\n \"event_types\": [\n \"invoice.paid\",\n \"subscription.renewed\"\n ],\n \"description\": \"Billing events for the production app\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Api-Key", "<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.reclack.com/v1/webhooks/{endpointId}")
.header("Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://acme.dev/hooks/reclack\",\n \"event_types\": [\n \"invoice.paid\",\n \"subscription.renewed\"\n ],\n \"description\": \"Billing events for the production app\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reclack.com/v1/webhooks/{endpointId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://acme.dev/hooks/reclack\",\n \"event_types\": [\n \"invoice.paid\",\n \"subscription.renewed\"\n ],\n \"description\": \"Billing events for the production app\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "whe_7Fh2PqX9",
"url": "https://acme.dev/hooks/reclack",
"status": "active",
"description": "Billing events for the production app",
"event_types": [
"invoice.paid",
"subscription.renewed"
],
"secret": "whsec_9f1c4a2b8e7d0356",
"created_at": "2026-10-18T22:07:41Z",
"updated_at": "2026-10-18T22:07:41Z"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}Overview
Update an endpoint. Use this to move the URL, replace the subscription list, or resume an endpoint that paused after repeated failures.Authorizations
Your Reclack API key. The prefix decides the environment: rk_sandbox_ for test chains, rk_live_ for production.
Path Parameters
The endpoint id.
Body
application/json
Response
Success
Show child attributes
Show child attributes

