curl --request PATCH \
--url https://compute.x402layer.cc/pods/v1/webhooks/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"url": "<string>",
"event_types": [],
"enabled": true,
"skip_to_now": true
}
'import requests
url = "https://compute.x402layer.cc/pods/v1/webhooks/{id}"
payload = {
"url": "<string>",
"event_types": [],
"enabled": True,
"skip_to_now": True
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: '<string>', event_types: [], enabled: true, skip_to_now: true})
};
fetch('https://compute.x402layer.cc/pods/v1/webhooks/{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://compute.x402layer.cc/pods/v1/webhooks/{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([
'url' => '<string>',
'event_types' => [
],
'enabled' => true,
'skip_to_now' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://compute.x402layer.cc/pods/v1/webhooks/{id}"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"event_types\": [],\n \"enabled\": true,\n \"skip_to_now\": true\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-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://compute.x402layer.cc/pods/v1/webhooks/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"event_types\": [],\n \"enabled\": true,\n \"skip_to_now\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://compute.x402layer.cc/pods/v1/webhooks/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\",\n \"event_types\": [],\n \"enabled\": true,\n \"skip_to_now\": true\n}"
response = http.request(request)
puts response.read_body{
"webhook": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"event_types": [
"pod.created"
],
"enabled": true,
"disabled_by_us_at": "2023-11-07T05:31:56Z",
"failure_count": 123,
"last_error": "<string>",
"last_delivery_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Update a webhook
Base URL https://compute.x402layer.cc/pods/v1. Auth is X-API-Key only. This is the PROGRAMMATIC surface and is NOT the same as the dashboard pod routes (POST /pods, PATCH /pods/{id}/settings, …), which take a wallet signature or a browser session and are free to change. Every response carries x-request-id.
Re-enabling CLEARS the failure state and the give-up marker, so a fixed endpoint starts delivering again instead of staying silent under the old backoff.
skip_to_now moves the delivery cursor to the newest event, which is what you usually want for an endpoint that was off for a week and does not want the week of backlog. It only moves FORWARD, so it can never be used to make us resend. Rate limit: the shared write bucket, 60 requests/minute per account.
curl --request PATCH \
--url https://compute.x402layer.cc/pods/v1/webhooks/{id} \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"url": "<string>",
"event_types": [],
"enabled": true,
"skip_to_now": true
}
'import requests
url = "https://compute.x402layer.cc/pods/v1/webhooks/{id}"
payload = {
"url": "<string>",
"event_types": [],
"enabled": True,
"skip_to_now": True
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({url: '<string>', event_types: [], enabled: true, skip_to_now: true})
};
fetch('https://compute.x402layer.cc/pods/v1/webhooks/{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://compute.x402layer.cc/pods/v1/webhooks/{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([
'url' => '<string>',
'event_types' => [
],
'enabled' => true,
'skip_to_now' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://compute.x402layer.cc/pods/v1/webhooks/{id}"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"event_types\": [],\n \"enabled\": true,\n \"skip_to_now\": true\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("X-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://compute.x402layer.cc/pods/v1/webhooks/{id}")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"event_types\": [],\n \"enabled\": true,\n \"skip_to_now\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://compute.x402layer.cc/pods/v1/webhooks/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\",\n \"event_types\": [],\n \"enabled\": true,\n \"skip_to_now\": true\n}"
response = http.request(request)
puts response.read_body{
"webhook": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"event_types": [
"pod.created"
],
"enabled": true,
"disabled_by_us_at": "2023-11-07T05:31:56Z",
"failure_count": 123,
"last_error": "<string>",
"last_delivery_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"details": {}
}
}Authorizations
A compute API key (x402c_...). Mint one in the dashboard under Settings -> API Keys. This is the ONLY auth /pods/v1/* accepts - wallet signatures are bound to method+path+body and do not survive the internal hop, so signature callers must use the dashboard routes instead. Two extra scopes gate the dangerous powers: pods:wallet:write (pod wallet money, backup passphrase) and pods:control:write (connectors, full-power control socket).
Path Parameters
Webhook id.
Body
pod.created, pod.active, pod.destroyed, pod.destroy_failed, pod.action.queued, pod.status.changed, pod.renewed, pod.renewal_failed, pod.expiring, pod.backup.completed, pod.backup.failed Setting true also clears disabled_by_us_at, the failure count and the last error.
Jump the delivery cursor to the newest event. Forward only.
true Response
The updated webhook.
Show child attributes
Show child attributes
Was this page helpful?
