curl --request POST \
--url https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"event": "quote.executed"
}
'import requests
url = "https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test"
payload = { "event": "quote.executed" }
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({event: 'quote.executed'})
};
fetch('https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test', 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}/test",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'event' => '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}/test"
payload := strings.NewReader("{\n \"event\": \"quote.executed\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"event\": \"quote.executed\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.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 \"event\": \"quote.executed\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"message_id": "msg_2eZwQqkM3xT5J8vY1bDnA7CfWp0",
"event": "quote.executed"
}
}{
"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"
}
}Send webhook test event
Sends a test event to the webhook.
Delivers an example message of the requested event type to this webhook’s destination URL, and only to this webhook, regardless of which other webhooks are subscribed to the same event type. The payload carries representative placeholder values in the exact shape of a real delivery (including the type discriminator), and the request is signed with the webhook’s signing secret like any other delivery, so partners can exercise their receiving endpoint and signature verification end to end before going live.
The webhook must be subscribed to event (it must appear in the webhook’s events list); requesting a test for an event the webhook does not subscribe to fails with 400 Bad Request rather than delivering nothing.
curl --request POST \
--url https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test \
--header 'API-Key: <api-key>' \
--header 'API-Nonce: <api-key>' \
--header 'API-Sign: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"event": "quote.executed"
}
'import requests
url = "https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test"
payload = { "event": "quote.executed" }
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({event: 'quote.executed'})
};
fetch('https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test', 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}/test",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'event' => '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}/test"
payload := strings.NewReader("{\n \"event\": \"quote.executed\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"event\": \"quote.executed\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.services.payward.com/v1/webhooks/{webhook_id}/test")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.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 \"event\": \"quote.executed\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"message_id": "msg_2eZwQqkM3xT5J8vY1bDnA7CfWp0",
"event": "quote.executed"
}
}{
"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 send a test event to a webhook.
The owning tenant is derived from the authenticated caller. Only the webhook id and the event type are supplied.
Event type to send an example of. The test delivery's payload uses representative placeholder values in the shape of a real event of this type. The funds.deposit_*, funds.withdrawal_held, funds.withdrawal_complete, and funds.withdrawal_failed test events include example amount and fee objects with asset and decimal-string value fields; the example fee is included when it is zero. In live deliveries, amount is included when resolvable and fee is included only when fee data is available and resolvable.
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
Response from SendWebhookTestEvent.
A successful response means the test message was accepted for delivery, not that the destination URL has already received it; delivery happens asynchronously with the usual retry schedule.
Data envelope returned after a successful SendWebhookTestEvent.
Show child attributes
Show child attributes