Skip to main content
POST
/
environments
/
{environmentId}
/
waas
/
transactionReviewConfig
/
test
Send a synthetic transaction review request to the configured webhook
curl --request POST \
  --url https://app.dynamicauth.com/api/v0/environments/{environmentId}/waas/transactionReviewConfig/test \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "config": {
    "enabled": true,
    "webhookPublicKey": "<string>",
    "webhookSecret": "<string>",
    "webhookTimeoutMs": 15250,
    "webhookUrl": "<string>"
  }
}
'
import requests

url = "https://app.dynamicauth.com/api/v0/environments/{environmentId}/waas/transactionReviewConfig/test"

payload = { "config": {
"enabled": True,
"webhookPublicKey": "<string>",
"webhookSecret": "<string>",
"webhookTimeoutMs": 15250,
"webhookUrl": "<string>"
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
config: {
enabled: true,
webhookPublicKey: '<string>',
webhookSecret: '<string>',
webhookTimeoutMs: 15250,
webhookUrl: '<string>'
}
})
};

fetch('https://app.dynamicauth.com/api/v0/environments/{environmentId}/waas/transactionReviewConfig/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://app.dynamicauth.com/api/v0/environments/{environmentId}/waas/transactionReviewConfig/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([
'config' => [
'enabled' => true,
'webhookPublicKey' => '<string>',
'webhookSecret' => '<string>',
'webhookTimeoutMs' => 15250,
'webhookUrl' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://app.dynamicauth.com/api/v0/environments/{environmentId}/waas/transactionReviewConfig/test"

payload := strings.NewReader("{\n \"config\": {\n \"enabled\": true,\n \"webhookPublicKey\": \"<string>\",\n \"webhookSecret\": \"<string>\",\n \"webhookTimeoutMs\": 15250,\n \"webhookUrl\": \"<string>\"\n }\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("Authorization", "Bearer <token>")
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://app.dynamicauth.com/api/v0/environments/{environmentId}/waas/transactionReviewConfig/test")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"enabled\": true,\n \"webhookPublicKey\": \"<string>\",\n \"webhookSecret\": \"<string>\",\n \"webhookTimeoutMs\": 15250,\n \"webhookUrl\": \"<string>\"\n }\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://app.dynamicauth.com/api/v0/environments/{environmentId}/waas/transactionReviewConfig/test")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"config\": {\n \"enabled\": true,\n \"webhookPublicKey\": \"<string>\",\n \"webhookSecret\": \"<string>\",\n \"webhookTimeoutMs\": 15250,\n \"webhookUrl\": \"<string>\"\n }\n}"

response = http.request(request)
puts response.read_body
{
  "decision": {
    "proceed": true,
    "reason": "<string>"
  },
  "failurePolicyApplied": true,
  "latencyMs": 123,
  "request": {
    "body": {},
    "headers": {},
    "url": "<string>"
  },
  "response": {
    "body": "<string>",
    "headers": {},
    "parsed": {
      "proceed": true,
      "reason": "<string>"
    },
    "status": 123
  },
  "responseSignature": {},
  "transportError": "<string>"
}
{
"error": "<string>"
}
{
"error": "No jwt provided!"
}
{
"error": "Access Forbidden"
}
{
"error": "Internal Server Error"
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

environmentId
string
required

ID of the environment

Required string length: 36
Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
Example:

"95b11417-f18f-457f-8804-68e361f9164f"

Body

application/json
scenario
enum<string>
required

Synthetic transaction shape sent to the configured webhook for testing.

Available options:
signMessage,
evmTransaction,
evmTokenTransfer,
evmUserOperation,
evmTypedData,
svmTransaction,
svmMessage,
btcTransaction,
suiTransaction,
suiMessage,
stellarMessage
config
object

Optional config overrides. When provided, fields here take precedence over the saved configuration. Use this to test a config that has not been saved yet (e.g. driving a test from an unsaved form).

Response

Test webhook decision and diagnostic detail

decision
object
required
failurePolicyApplied
boolean
required

True if the decision came from the failure policy (timeout, transport error, bad status, signature problem) rather than from a parsed webhook response.

latencyMs
integer
required

Wall-clock duration of the call in milliseconds.

request
object
required
response
object
required
responseSignature
object
required
scenario
enum<string>
required

Synthetic transaction shape sent to the configured webhook for testing.

Available options:
signMessage,
evmTransaction,
evmTokenTransfer,
evmUserOperation,
evmTypedData,
svmTransaction,
svmMessage,
btcTransaction,
suiTransaction,
suiMessage,
stellarMessage
transportError
string | null
required

Network or timeout error message, if any.

Last modified on July 8, 2026