curl -X GET "https://api.credprotocol.com/api/v2/graph/address/vitalik.eth?chain_id=1" \
-H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch(
'https://api.credprotocol.com/api/v2/graph/address/vitalik.eth?chain_id=1',
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
const graph = await response.json();
console.log(`Nodes: ${graph.nodes.length}`);
console.log(`Edges: ${graph.edges.length}`);
console.log(`Total Transactions: ${graph.total_transactions}`);
import requests
response = requests.get(
"https://api.credprotocol.com/api/v2/graph/address/vitalik.eth",
params={"chain_id": 1},
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
graph = response.json()
print(f"Nodes: {len(graph['nodes'])}")
print(f"Edges: {len(graph['edges'])}")
print(f"Total Transactions: {graph['total_transactions']}")
{
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"chain_id": 1,
"chain_name": "Ethereum Mainnet",
"total_transactions": 150,
"sanctioned_wallets": 1,
"nodes": [
{ "id": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "label": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "group": "wallet", "sanctioned": false, "sanctions": [] },
{ "id": "USDC", "label": "USDC", "group": "token", "sanctioned": false, "sanctions": [] },
{
"id": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"label": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"group": "wallet",
"sanctioned": true,
"sanctions": [
{
"source": "ofac_sdn",
"entity_name": "TORNADO CASH",
"entity_type": "Entity",
"programs": "CYBER2",
"symbol": "ETH",
"currency_name": "Ethereum",
"address": "0x8589427373D6D84E98730D7795D8f6f8731FDA16",
"source_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=39796",
"listed_at": "2026-11-01T07:12:40Z"
}
]
}
],
"edges": [
{ "from": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "to": "USDC", "label": "SENT" },
{ "from": "USDC", "to": "0x8589427373d6d84e98730d7795d8f6f8731fda16", "label": "RECEIVED" }
]
}
{
"detail": "Invalid Ethereum address"
}
{
"detail": "Invalid or expired API token. Please create a new API token in /dashboard/console."
}
{
"error": "authentication_required",
"message": "This endpoint requires authentication.",
"cred_units": 5,
"options": [
{ "method": "api_token", "cost": "3 Cred Units" },
{ "method": "x402_payment", "price": "$0.03", "currency": "USDC" }
]
}
Transaction Graph
Visualize ERC-20 token transfer relationships as a node/edge graph
GET
/
api
/
v2
/
graph
/
address
/
{address}
curl -X GET "https://api.credprotocol.com/api/v2/graph/address/vitalik.eth?chain_id=1" \
-H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch(
'https://api.credprotocol.com/api/v2/graph/address/vitalik.eth?chain_id=1',
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
const graph = await response.json();
console.log(`Nodes: ${graph.nodes.length}`);
console.log(`Edges: ${graph.edges.length}`);
console.log(`Total Transactions: ${graph.total_transactions}`);
import requests
response = requests.get(
"https://api.credprotocol.com/api/v2/graph/address/vitalik.eth",
params={"chain_id": 1},
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
graph = response.json()
print(f"Nodes: {len(graph['nodes'])}")
print(f"Edges: {len(graph['edges'])}")
print(f"Total Transactions: {graph['total_transactions']}")
{
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"chain_id": 1,
"chain_name": "Ethereum Mainnet",
"total_transactions": 150,
"sanctioned_wallets": 1,
"nodes": [
{ "id": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "label": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "group": "wallet", "sanctioned": false, "sanctions": [] },
{ "id": "USDC", "label": "USDC", "group": "token", "sanctioned": false, "sanctions": [] },
{
"id": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"label": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"group": "wallet",
"sanctioned": true,
"sanctions": [
{
"source": "ofac_sdn",
"entity_name": "TORNADO CASH",
"entity_type": "Entity",
"programs": "CYBER2",
"symbol": "ETH",
"currency_name": "Ethereum",
"address": "0x8589427373D6D84E98730D7795D8f6f8731FDA16",
"source_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=39796",
"listed_at": "2026-11-01T07:12:40Z"
}
]
}
],
"edges": [
{ "from": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "to": "USDC", "label": "SENT" },
{ "from": "USDC", "to": "0x8589427373d6d84e98730d7795d8f6f8731fda16", "label": "RECEIVED" }
]
}
{
"detail": "Invalid Ethereum address"
}
{
"detail": "Invalid or expired API token. Please create a new API token in /dashboard/console."
}
{
"error": "authentication_required",
"message": "This endpoint requires authentication.",
"cred_units": 5,
"options": [
{ "method": "api_token", "cost": "3 Cred Units" },
{ "method": "x402_payment", "price": "$0.03", "currency": "USDC" }
]
}
Overview
Generates a transaction graph for any Ethereum address, showing ERC-20 token transfer relationships as nodes and edges. The graph is a tripartite structure: wallets connect to tokens, which connect to other wallets.Transfers are cached for 10 minutes. First requests typically take 2-5 seconds; cached responses return in under 100ms. The sanctions match is made on every request, so a newly designated wallet is flagged as soon as the hourly OFAC ingestion stores it.
Authentication
This endpoint supports two authentication methods:| Method | Header | Cost |
|---|---|---|
| API Token | Authorization: Bearer YOUR_API_KEY | 3 Cred Units |
| x402 Payment | X-PAYMENT: <signed_payment> | $0.03 USDC |
x402 payments allow instant, accountless access. Pay per request with USDC on Base - no signup required.
Try it live →
Path Parameters
Ethereum address or ENS name (e.g.,
vitalik.eth or 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045)Query Parameters
Supported Networks
| Chain | Chain ID |
|---|---|
| Ethereum Mainnet | 1 |
| Optimism | 10 |
| Binance Smart Chain | 56 |
| Polygon | 137 |
| Base | 8453 |
| Arbitrum | 42161 |
| Avalanche | 43114 |
| Linea | 59144 |
| Robinhood Chain | 4663 |
Response
Array of graph nodes representing wallets and tokens.
Show Node properties
Show Node properties
The matching list entries, in the same shape as the screening endpoint’s
matches (source, entity_name, programs, source_url, …). Empty unless sanctioned is true.Graph Structure
The graph uses a tripartite structure to represent token transfers:Wallet A --SENT--> TOKEN --RECEIVED--> Wallet B
- Wallet nodes represent Ethereum addresses involved in transfers
- Token nodes represent ERC-20 tokens that were transferred
- Edges connect wallets to tokens with a direction (
SENTorRECEIVED)
Sanctioned wallets
Every wallet node is screened against the OFAC SDN and Consolidated lists, the same lists behind the sanctions screening endpoint. A listed wallet carriessanctioned: true and its list entries, so a graph visualisation can highlight it and a compliance check can tell at a glance whether the queried address has transacted with a designated party. For a one-hop risk summary across chains without the graph, use sanctions exposure.
curl -X GET "https://api.credprotocol.com/api/v2/graph/address/vitalik.eth?chain_id=1" \
-H "Authorization: Bearer YOUR_API_KEY"
const response = await fetch(
'https://api.credprotocol.com/api/v2/graph/address/vitalik.eth?chain_id=1',
{
headers: {
'Authorization': 'Bearer YOUR_API_KEY'
}
}
);
const graph = await response.json();
console.log(`Nodes: ${graph.nodes.length}`);
console.log(`Edges: ${graph.edges.length}`);
console.log(`Total Transactions: ${graph.total_transactions}`);
import requests
response = requests.get(
"https://api.credprotocol.com/api/v2/graph/address/vitalik.eth",
params={"chain_id": 1},
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
graph = response.json()
print(f"Nodes: {len(graph['nodes'])}")
print(f"Edges: {len(graph['edges'])}")
print(f"Total Transactions: {graph['total_transactions']}")
{
"address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"chain_id": 1,
"chain_name": "Ethereum Mainnet",
"total_transactions": 150,
"sanctioned_wallets": 1,
"nodes": [
{ "id": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "label": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "group": "wallet", "sanctioned": false, "sanctions": [] },
{ "id": "USDC", "label": "USDC", "group": "token", "sanctioned": false, "sanctions": [] },
{
"id": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"label": "0x8589427373d6d84e98730d7795d8f6f8731fda16",
"group": "wallet",
"sanctioned": true,
"sanctions": [
{
"source": "ofac_sdn",
"entity_name": "TORNADO CASH",
"entity_type": "Entity",
"programs": "CYBER2",
"symbol": "ETH",
"currency_name": "Ethereum",
"address": "0x8589427373D6D84E98730D7795D8f6f8731FDA16",
"source_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=39796",
"listed_at": "2026-11-01T07:12:40Z"
}
]
}
],
"edges": [
{ "from": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", "to": "USDC", "label": "SENT" },
{ "from": "USDC", "to": "0x8589427373d6d84e98730d7795d8f6f8731fda16", "label": "RECEIVED" }
]
}
{
"detail": "Invalid Ethereum address"
}
{
"detail": "Invalid or expired API token. Please create a new API token in /dashboard/console."
}
{
"error": "authentication_required",
"message": "This endpoint requires authentication.",
"cred_units": 5,
"options": [
{ "method": "api_token", "cost": "3 Cred Units" },
{ "method": "x402_payment", "price": "$0.03", "currency": "USDC" }
]
}
Use Cases
Counterparty Analysis
Counterparty Analysis
Identify the major counterparties for a wallet — who they transact with most and through which tokens.
Wash Trading Detection
Wash Trading Detection
Spot circular transfer patterns where tokens flow between a small set of wallets, indicating potential wash trading.
Fund Flow Tracking
Fund Flow Tracking
Trace how funds move through a network of addresses to understand capital flows and identify intermediary wallets.
Network Visualization
Network Visualization
Build interactive graph visualizations to explore transaction relationships in dApps, dashboards, or compliance tools.
Sanctions Exposure
Sanctions Exposure
Highlight wallets on an OFAC list in the network and see exactly which tokens connect them to the queried address.
Performance
- Response Time: 2-5 seconds (uncached), under 100ms (cached)
- Caching: Results cached for 10 minutes per address/chain combination
- Data Source: Etherscan API V2 (ERC-20 token transfers only)
- Scope: All historical token transfers for the address on the specified chain