curl -X PATCH "https://api.services.payward.com/v1/webhooks/ep_3FJn9bPPldQiddo0BAmk7dnfdMB" \
-H "API-Key: $PWS_API_KEY" \
-H "API-Nonce: $PWS_API_NONCE" \
-H "API-Sign: $PWS_API_SIGN" \
-H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"disabled": false,
"events": [
"quote.executed"
]
}'import requests
url = "https://api.services.payward.com/v1/webhooks/{webhook_id}"
payload = {
"url": "https://partner.example.com/hooks/quote",
"description": "primary delivery",
"events": ["quote.executed"],
"disabled": False
}
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({
url: 'https://partner.example.com/hooks/quote',
description: 'primary delivery',
events: ['quote.executed'],
disabled: false
})
};
fetch('https://api.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.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([
'url' => 'https://partner.example.com/hooks/quote',
'description' => 'primary delivery',
'events' => [
'quote.executed'
],
'disabled' => false
]),
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.services.payward.com/v1/webhooks/{webhook_id}"
payload := strings.NewReader("{\n \"url\": \"https://partner.example.com/hooks/quote\",\n \"description\": \"primary delivery\",\n \"events\": [\n \"quote.executed\"\n ],\n \"disabled\": false\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.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 \"url\": \"https://partner.example.com/hooks/quote\",\n \"description\": \"primary delivery\",\n \"events\": [\n \"quote.executed\"\n ],\n \"disabled\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.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 \"url\": \"https://partner.example.com/hooks/quote\",\n \"description\": \"primary delivery\",\n \"events\": [\n \"quote.executed\"\n ],\n \"disabled\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "ep_3FJn9bPPldQiddo0BAmk7dnfdMB",
"url": "https://partner.example.com/hooks/quote",
"description": "primary delivery",
"created_at": "2026-06-18T16:58:08.893527Z",
"updated_at": "2026-06-18T16:58:08.895052Z",
"events": [
"quote.executed"
]
}
}{
"error": {
"type": "<string>",
"status": 400,
"instance": "<string>",
"code": "bad_request",
"doc_url": "<string>",
"causes": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"type": "<string>",
"status": 401,
"instance": "<string>",
"code": "unauthenticated",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 403,
"instance": "<string>",
"code": "forbidden",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 404,
"instance": "<string>",
"code": "webhook_not_found",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 504,
"instance": "<string>",
"code": "deadline_exceeded",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 429,
"instance": "<string>",
"code": "resource_exhausted",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 500,
"instance": "<string>",
"code": "internal",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 501,
"instance": "<string>",
"code": "unimplemented",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 503,
"instance": "<string>",
"code": "unavailable",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 504,
"instance": "<string>",
"code": "deadline_exceeded",
"doc_url": "<string>",
"causes": [
{}
]
}
}Update webhook
Update a webhook configuration.
Use this endpoint to:
- Update the webhook URL or description
- Disable or re-enable a webhook without deleting it
- Update which events the webhook is subscribed to
Disabled webhooks will not receive any events until re-enabled.
curl -X PATCH "https://api.services.payward.com/v1/webhooks/ep_3FJn9bPPldQiddo0BAmk7dnfdMB" \
-H "API-Key: $PWS_API_KEY" \
-H "API-Nonce: $PWS_API_NONCE" \
-H "API-Sign: $PWS_API_SIGN" \
-H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"disabled": false,
"events": [
"quote.executed"
]
}'import requests
url = "https://api.services.payward.com/v1/webhooks/{webhook_id}"
payload = {
"url": "https://partner.example.com/hooks/quote",
"description": "primary delivery",
"events": ["quote.executed"],
"disabled": False
}
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({
url: 'https://partner.example.com/hooks/quote',
description: 'primary delivery',
events: ['quote.executed'],
disabled: false
})
};
fetch('https://api.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.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([
'url' => 'https://partner.example.com/hooks/quote',
'description' => 'primary delivery',
'events' => [
'quote.executed'
],
'disabled' => false
]),
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.services.payward.com/v1/webhooks/{webhook_id}"
payload := strings.NewReader("{\n \"url\": \"https://partner.example.com/hooks/quote\",\n \"description\": \"primary delivery\",\n \"events\": [\n \"quote.executed\"\n ],\n \"disabled\": false\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.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 \"url\": \"https://partner.example.com/hooks/quote\",\n \"description\": \"primary delivery\",\n \"events\": [\n \"quote.executed\"\n ],\n \"disabled\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.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 \"url\": \"https://partner.example.com/hooks/quote\",\n \"description\": \"primary delivery\",\n \"events\": [\n \"quote.executed\"\n ],\n \"disabled\": false\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "ep_3FJn9bPPldQiddo0BAmk7dnfdMB",
"url": "https://partner.example.com/hooks/quote",
"description": "primary delivery",
"created_at": "2026-06-18T16:58:08.893527Z",
"updated_at": "2026-06-18T16:58:08.895052Z",
"events": [
"quote.executed"
]
}
}{
"error": {
"type": "<string>",
"status": 400,
"instance": "<string>",
"code": "bad_request",
"doc_url": "<string>",
"causes": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"type": "<string>",
"status": 401,
"instance": "<string>",
"code": "unauthenticated",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 403,
"instance": "<string>",
"code": "forbidden",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 404,
"instance": "<string>",
"code": "webhook_not_found",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 504,
"instance": "<string>",
"code": "deadline_exceeded",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 429,
"instance": "<string>",
"code": "resource_exhausted",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 500,
"instance": "<string>",
"code": "internal",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 501,
"instance": "<string>",
"code": "unimplemented",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 503,
"instance": "<string>",
"code": "unavailable",
"doc_url": "<string>",
"causes": [
{}
]
}
}{
"error": {
"type": "<string>",
"status": 504,
"instance": "<string>",
"code": "deadline_exceeded",
"doc_url": "<string>",
"causes": [
{}
]
}
}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.
Headers
Client-generated UUIDv4 for safe retries. Sent as the Idempotency-Key HTTP header. Replayed responses include the Idempotent-Replayed: true header.
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$"550e8400-e29b-41d4-a716-446655440000"
Path Parameters
Unique identifier for the webhook
"WHTEST-XXXXX-EXAMPLE"
Body
New HTTPS URL where webhook events will be sent. Omit to leave unchanged.
8 - 2048"https://partner.example.com/hooks/quote"
New free-form label for the webhook. Omit to leave unchanged; pass an empty string to clear.
500"primary delivery"
List of event types to subscribe to. This replaces all existing event subscriptions. Empty arrays are treated as omitted.
100quote.executed, quote.cancelled, quote.execution_failed, user.closed, user.disabled, conversion.deposit_completed, conversion.deposit_failed, conversion.deposit_held, conversion.travel_rule_blocked, conversion.quote_execution_failed, conversion.withdrawal_completed, conversion.withdrawal_failed, transaction.swap, transaction.price_trigger_swap, transaction.earn_reward, transaction.deposit, transaction.withdrawal, transaction.transfer, funds.deposit_received, funds.deposit_held, funds.deposit_credited, funds.deposit_returned, funds.deposit_failed, verification.requirements_updated, verification.updated ["quote.executed"]
Whether the webhook should be disabled
false
Response
Webhook updated successfully
Show child attributes
Show child attributes