curl --request POST \
--url https://api.webacy.com/scan/{fromAddress}/transactions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"tx": {
"from": "0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326",
"raw": "0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0"
},
"chain": 1
}
'import requests
url = "https://api.webacy.com/scan/{fromAddress}/transactions"
payload = {
"tx": {
"from": "0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326",
"raw": "0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0"
},
"chain": 1
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
tx: {
from: '0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326',
raw: '0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0'
},
chain: 1
})
};
fetch('https://api.webacy.com/scan/{fromAddress}/transactions', 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/scan/{fromAddress}/transactions",
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([
'tx' => [
'from' => '0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326',
'raw' => '0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0'
],
'chain' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.webacy.com/scan/{fromAddress}/transactions"
payload := strings.NewReader("{\n \"tx\": {\n \"from\": \"0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326\",\n \"raw\": \"0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0\"\n },\n \"chain\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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.webacy.com/scan/{fromAddress}/transactions")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"tx\": {\n \"from\": \"0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326\",\n \"raw\": \"0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0\"\n },\n \"chain\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/scan/{fromAddress}/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tx\": {\n \"from\": \"0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326\",\n \"raw\": \"0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0\"\n },\n \"chain\": 1\n}"
response = http.request(request)
puts response.read_body{
"simulation": "<array>",
"block": 123,
"timestamp": "2023-11-07T05:31:56Z",
"chain": "eth",
"domainRisk": {
"riskLevel": "low",
"description": "<string>",
"message": "<string>"
},
"public_key_id": "<string>",
"descriptor": "<string>"
}Simulate a raw EVM transaction for security risks
Analyzes a raw EVM transaction for security risks including malicious contracts, suspicious addresses, and potential threats. Supports Ethereum (1), BSC (56), Polygon (137), Optimism (10), Arbitrum (42161), and Base (8453).
curl --request POST \
--url https://api.webacy.com/scan/{fromAddress}/transactions \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"tx": {
"from": "0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326",
"raw": "0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0"
},
"chain": 1
}
'import requests
url = "https://api.webacy.com/scan/{fromAddress}/transactions"
payload = {
"tx": {
"from": "0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326",
"raw": "0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0"
},
"chain": 1
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
tx: {
from: '0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326',
raw: '0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0'
},
chain: 1
})
};
fetch('https://api.webacy.com/scan/{fromAddress}/transactions', 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/scan/{fromAddress}/transactions",
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([
'tx' => [
'from' => '0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326',
'raw' => '0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0'
],
'chain' => 1
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.webacy.com/scan/{fromAddress}/transactions"
payload := strings.NewReader("{\n \"tx\": {\n \"from\": \"0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326\",\n \"raw\": \"0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0\"\n },\n \"chain\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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.webacy.com/scan/{fromAddress}/transactions")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"tx\": {\n \"from\": \"0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326\",\n \"raw\": \"0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0\"\n },\n \"chain\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/scan/{fromAddress}/transactions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tx\": {\n \"from\": \"0x1f9090aaE28b8a3dCeaDf281B0F12828e676c326\",\n \"raw\": \"0x02f86f01830c61ff847735940084aa945e38829c409496221423681a6d52e184d440a8efcebb105c724280b844a9059cbb0000000000000000000000001f9090aae28b8a3dceadf281b0f12828e676c3260000000000000000000000000000000000000000000000056bc75e2d63100000c0\"\n },\n \"chain\": 1\n}"
response = http.request(request)
puts response.read_body{
"simulation": "<array>",
"block": 123,
"timestamp": "2023-11-07T05:31:56Z",
"chain": "eth",
"domainRisk": {
"riskLevel": "low",
"description": "<string>",
"message": "<string>"
},
"public_key_id": "<string>",
"descriptor": "<string>"
}Authorizations
Path Parameters
EVM address that signed the transaction
Query Parameters
Chain slug (eth, bsc, pol, opt, arb, base). Optional: the body chain id is used when absent; the query wins when both are given.
eth, bsc, pol, opt, arb, base Force refresh cached risk data
Body
Transaction details
Show child attributes
Show child attributes
Chain id (1 Ethereum, 56 BSC, 137 Polygon, 10 Optimism, 42161 Arbitrum, 8453 Base) as a number or a decimal / 0x hex string, or a chain slug. Required unless the chain query is given (the query wins). Testnet ids are rejected.
1
Block of a mined transaction. Honoured only when tx.raw is a 66-character transaction hash; raw transaction bytes are always simulated as pending.
12345678
dApp origin (e.g. app.uniswap.org). Scored and returned as the informational top-level domainRisk; it does not change the descriptor on this route.
Response
Transaction risk analysis completed successfully
Transaction simulation results with risk analysis including partyRisk, counterpartyRisk, assetRisk, and functionRisk (if risky 4-byte signature detected)
Block number of a mined transaction; null for a pending simulation (always present).
Timestamp of the scan
Chain identifier
"eth"
Risk of the domain sent in the request (riskLevel, description, message); absent when no domain was sent. Informational on this route.
Show child attributes
Show child attributes
Id of the key that signed descriptor.
Hex-encoded, signed summary of the verdict for hardware-wallet (Ledger) display. API consumers can ignore it.
