curl --request GET \
--url https://api.webacy.com/addresses/sanctioned/{walletAddress} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/addresses/sanctioned/{walletAddress}"
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/addresses/sanctioned/{walletAddress}', 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/addresses/sanctioned/{walletAddress}",
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/addresses/sanctioned/{walletAddress}"
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/addresses/sanctioned/{walletAddress}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/addresses/sanctioned/{walletAddress}")
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{
"address": "0x21B8D56BDA776BBE68655A16895AFD96F5534FED",
"is_sanctioned": true,
"sanctions_status": "sanctioned",
"is_sanctions_related": false,
"sanctions_related_status": "not_related"
}Check if a wallet address is sanctioned
Verify if a wallet address appears on OFAC or other sanctions lists. The address-screening sanctions_status on this operation is distinct from the RWA token-attribute field with the same name: here, clean means screening completed without a match and unknown means authoritative screening could not be completed when fail-open behavior is enabled. With fail-closed behavior, the same unavailable-screening condition returns HTTP 503 instead. The successful response is a closed contract containing exactly address, is_sanctioned, sanctions_status, is_sanctions_related, and sanctions_related_status; adding another response field requires an explicit contract and specification change. Direct access to this operation requires x-api-key; keyless x402 access is available through the public /pay gateway. TRON support added per RFC-020 (May 2026).
curl --request GET \
--url https://api.webacy.com/addresses/sanctioned/{walletAddress} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/addresses/sanctioned/{walletAddress}"
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/addresses/sanctioned/{walletAddress}', 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/addresses/sanctioned/{walletAddress}",
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/addresses/sanctioned/{walletAddress}"
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/addresses/sanctioned/{walletAddress}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/addresses/sanctioned/{walletAddress}")
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{
"address": "0x21B8D56BDA776BBE68655A16895AFD96F5534FED",
"is_sanctioned": true,
"sanctions_status": "sanctioned",
"is_sanctions_related": false,
"sanctions_related_status": "not_related"
}true only for an exact address match; addresses merely associated with a sanctioned entity will return false. To identify indirect sanctions exposure or entity associations, use the main risk intelligence endpoint.Authorizations
Path Parameters
Query Parameters
Selected chain. Supported values: 'eth', 'base', 'bsc', 'pol', 'opt', 'arb', 'sol', 'btc', 'tron', 'stellar', 'robinhood', and 'hedera'. TRON addresses must be valid base58check (34 chars, leading 'T').
eth, base, bsc, pol, opt, sol, arb, btc, tron, stellar, hedera, robinhood Response
Success. If authoritative screening is unavailable, a fail-open deployment returns sanctions_status: unknown; a fail-closed deployment returns 503 instead.
Address-screening verdict for this operation, not the RWA token-attribute sanctions_status vocabulary (none | proposed | designated). Callers should require clean before treating an address as cleared; unknown means an authoritative screening result could not be obtained.
sanctioned, clean, unknown True when the address is attributed to an entity subject to sanctions but is not itself named on a sanctions list. Independent of is_sanctioned and sanctions_status, which reflect list matches only. Stays false when sanctions_related_status is unknown.
Attribution check for this address. related and not_related mean the attribution data was read; unknown means it could not be read, so the address could not be cleared of attribution. Callers should gate on this field rather than on is_sanctions_related === false.
related, not_related, unknown 