curl --request GET \
--url https://api.webacy.com/transactions/{txHash} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/transactions/{txHash}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.webacy.com/transactions/{txHash}', 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.webacy.com/transactions/{txHash}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.webacy.com/transactions/{txHash}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.webacy.com/transactions/{txHash}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/transactions/{txHash}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"partyRisk": {
"address": "<string>",
"count": 123,
"medium": 123,
"high": 123,
"overallRisk": 123,
"issues": [
{}
],
"details": {},
"isContract": true,
"addressType": "<string>",
"analyzed_at": "<string>"
},
"counterpartyRisk": {
"address": "<string>",
"count": 123,
"medium": 123,
"high": 123,
"overallRisk": 123,
"issues": [
{}
],
"details": {},
"isContract": true,
"addressType": "<string>",
"analyzed_at": "<string>"
},
"assetRisk": {
"address": "<string>",
"count": 123,
"medium": 123,
"high": 123,
"overallRisk": 123,
"issues": [
{}
],
"details": {},
"isContract": true,
"addressType": "<string>",
"analyzed_at": "<string>"
},
"txData": {
"partyAddress": "<string>",
"counterpartyAddress": "<string>",
"assetAddress": "<string>",
"assetType": "<string>",
"changeType": "<string>",
"rawAmount": "<string>",
"symbol": "<string>",
"name": "<string>",
"source": "<string>"
},
"totalPages": 123,
"currentPage": 123
}
]{
"message": "Unauthorized"
}{
"x402Version": 1,
"error": "payment required"
}{
"message": "Payment service temporarily unavailable"
}Get risk details for a transaction hash
Get comprehensive risk analysis for a specific blockchain transaction
curl --request GET \
--url https://api.webacy.com/transactions/{txHash} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/transactions/{txHash}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.webacy.com/transactions/{txHash}', 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.webacy.com/transactions/{txHash}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.webacy.com/transactions/{txHash}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.webacy.com/transactions/{txHash}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/transactions/{txHash}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"partyRisk": {
"address": "<string>",
"count": 123,
"medium": 123,
"high": 123,
"overallRisk": 123,
"issues": [
{}
],
"details": {},
"isContract": true,
"addressType": "<string>",
"analyzed_at": "<string>"
},
"counterpartyRisk": {
"address": "<string>",
"count": 123,
"medium": 123,
"high": 123,
"overallRisk": 123,
"issues": [
{}
],
"details": {},
"isContract": true,
"addressType": "<string>",
"analyzed_at": "<string>"
},
"assetRisk": {
"address": "<string>",
"count": 123,
"medium": 123,
"high": 123,
"overallRisk": 123,
"issues": [
{}
],
"details": {},
"isContract": true,
"addressType": "<string>",
"analyzed_at": "<string>"
},
"txData": {
"partyAddress": "<string>",
"counterpartyAddress": "<string>",
"assetAddress": "<string>",
"assetType": "<string>",
"changeType": "<string>",
"rawAmount": "<string>",
"symbol": "<string>",
"name": "<string>",
"source": "<string>"
},
"totalPages": 123,
"currentPage": 123
}
]{
"message": "Unauthorized"
}{
"x402Version": 1,
"error": "payment required"
}{
"message": "Payment service temporarily unavailable"
}Authorizations
Path Parameters
Query Parameters
Chain of the transaction. Required (400 without it). Unsupported chains (TON, SUI, Bitcoin, Tron, Gnosis…) return 400.
eth, base, bsc, pol, opt, sol, arb, stellar, hedera, robinhood EVM only: page of asset changes.
x >= 1EVM only: asset changes per page.
x >= 1Response
Success
Risk profile of one side of the transaction (same shape as the address risk response). When there is nothing to score — the asset of a native-coin transfer or of a call that moved no token — or scoring that side failed, it is only { "address": ... }.
Show child attributes
Show child attributes
Risk profile of one side of the transaction (same shape as the address risk response). When there is nothing to score — the asset of a native-coin transfer or of a call that moved no token — or scoring that side failed, it is only { "address": ... }.
Show child attributes
Show child attributes
Risk profile of one side of the transaction (same shape as the address risk response). When there is nothing to score — the asset of a native-coin transfer or of a call that moved no token — or scoring that side failed, it is only { "address": ... }.
Show child attributes
Show child attributes
What the transaction did. On EVM chains this is one normalized asset change (the fields below). On Solana, Stellar and Hedera it is the chain-native transaction record from the provider, whose fields differ per chain.
Show child attributes
Show child attributes
EVM only: pages of asset changes for this transaction.
EVM only.
