curl --request PATCH \
--url https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id} \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"disabled": true,
"events": [
"quote.executed"
]
}
'import requests
url = "https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}"
payload = {
"disabled": True,
"events": ["quote.executed"]
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<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>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({disabled: true, events: ['quote.executed']})
};
fetch('https://api.sandbox.services.payward.com/v1/webhooks/{webhook_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.sandbox.services.payward.com/v1/webhooks/{webhook_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([
'disabled' => true,
'events' => [
'quote.executed'
]
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <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.sandbox.services.payward.com/v1/webhooks/{webhook_id}"
payload := strings.NewReader("{\n \"disabled\": true,\n \"events\": [\n \"quote.executed\"\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.sandbox.services.payward.com/v1/webhooks/{webhook_id}")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"disabled\": true,\n \"events\": [\n \"quote.executed\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"disabled\": true,\n \"events\": [\n \"quote.executed\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "ep_2YuTbBzs6F8XUjWk7p7uA9KNdL5",
"url": "https://partner.example.com/hooks/quote",
"description": "primary delivery",
"disabled": false,
"created_at": "2026-05-25T11:30:00Z",
"updated_at": "2026-05-25T11:30:00Z",
"events": [
"quote.executed",
"quote.cancelled"
]
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 400,
"code": "bad_request",
"causes": [
{
"field": "page_size",
"message": "must be between 1 and 25"
}
]
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 401,
"code": "unauthenticated"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 403,
"code": "forbidden"
}
}{
"error": {
"type": "webhooks_error",
"status": 404,
"instance": "req_01H00000000000000000000000",
"code": "webhook_not_found"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 429,
"code": "resource_exhausted"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 500,
"code": "internal"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 503,
"code": "unavailable"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 504,
"code": "deadline_exceeded"
}
}Update webhook
Updates a webhook’s mutable fields. Stripe-style partial PATCH: any field omitted from the request body is left unchanged. Use disabled = true to soft-disable an endpoint without deleting its delivery history.
curl --request PATCH \
--url https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id} \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"disabled": true,
"events": [
"quote.executed"
]
}
'import requests
url = "https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}"
payload = {
"disabled": True,
"events": ["quote.executed"]
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<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>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({disabled: true, events: ['quote.executed']})
};
fetch('https://api.sandbox.services.payward.com/v1/webhooks/{webhook_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.sandbox.services.payward.com/v1/webhooks/{webhook_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([
'disabled' => true,
'events' => [
'quote.executed'
]
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <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.sandbox.services.payward.com/v1/webhooks/{webhook_id}"
payload := strings.NewReader("{\n \"disabled\": true,\n \"events\": [\n \"quote.executed\"\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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.sandbox.services.payward.com/v1/webhooks/{webhook_id}")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"disabled\": true,\n \"events\": [\n \"quote.executed\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"disabled\": true,\n \"events\": [\n \"quote.executed\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "ep_2YuTbBzs6F8XUjWk7p7uA9KNdL5",
"url": "https://partner.example.com/hooks/quote",
"description": "primary delivery",
"disabled": false,
"created_at": "2026-05-25T11:30:00Z",
"updated_at": "2026-05-25T11:30:00Z",
"events": [
"quote.executed",
"quote.cancelled"
]
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 400,
"code": "bad_request",
"causes": [
{
"field": "page_size",
"message": "must be between 1 and 25"
}
]
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 401,
"code": "unauthenticated"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 403,
"code": "forbidden"
}
}{
"error": {
"type": "webhooks_error",
"status": 404,
"instance": "req_01H00000000000000000000000",
"code": "webhook_not_found"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 429,
"code": "resource_exhausted"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 500,
"code": "internal"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 503,
"code": "unavailable"
}
}{
"error": {
"type": "webhooks_error",
"instance": "req_01H00000000000000000000000",
"status": 504,
"code": "deadline_exceeded"
}
}Authorizations
Your public API key. Identifies the partner making the request.
HMAC signature over the request, computed with your private key.
Monotonically increasing nonce included in the request signature.
Path Parameters
Identifier returned by CreateWebhook.
1 - 64Body
Request to update a webhook. Stripe-style partial PATCH: omitted fields are left unchanged.
The owning tenant is derived from the authenticated caller. Only the webhook id and the fields to mutate are supplied.
New destination URL. Omit to leave unchanged.
8 - 2048New description. Omit to leave unchanged; pass empty string to clear.
500Disable (true) or re-enable (false) deliveries. Omit to leave unchanged.
Replacement set of events the webhook should be subscribed to. Omit to leave unchanged. Empty arrays are treated as omitted; clearing the list is not supported (a webhook with no events cannot receive any deliveries).
100Event type supported by the webhooks API.
quote.executed, quote.cancelled, quote.execution_failed, user.closed, user.disabled, conversion.deposit_completed, conversion.deposit_failed, conversion.deposit_held, conversion.withdrawal_completed, conversion.withdrawal_failed, conversion.quote_execution_failed, conversion.travel_rule_blocked, transaction.swap, transaction.price_trigger_swap, transaction.earn_reward, transaction.deposit, transaction.withdrawal, transaction.transfer, conversion.quote_executed, funds.deposit_received, funds.deposit_held, funds.deposit_credited, funds.deposit_returned, funds.deposit_failed, verification.requirements_updated, verification.updated, price_trigger_swap.executed, price_trigger_swap.execution_failed, price_trigger_swap.cancelled, price_trigger_swap.created, price_trigger_swap.failed, funds.withdrawal_held, funds.withdrawal_complete, funds.withdrawal_failed, recurring_swap.created, recurring_swap.executed, recurring_swap.execution_failed, recurring_swap.cancelled, recurring_swap.failed, recurring_swap.paused, recurring_swap.resumed, transaction.recurring_swap Response
Successful response
A registered webhook destination.
Show child attributes
Show child attributes