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,
"nodes": [
{ "id": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "label": "0xd8dA...6045", "group": "wallet" },
{ "id": "USDC", "label": "USDC", "group": "token" },
{ "id": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F", "label": "0x71C7...976F", "group": "wallet" }
],
"edges": [
{ "from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "to": "USDC", "label": "SENT" },
{ "from": "USDC", "to": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F", "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": "5 Cred Units" },
{ "method": "x402_payment", "price": "$0.05", "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,
"nodes": [
{ "id": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "label": "0xd8dA...6045", "group": "wallet" },
{ "id": "USDC", "label": "USDC", "group": "token" },
{ "id": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F", "label": "0x71C7...976F", "group": "wallet" }
],
"edges": [
{ "from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "to": "USDC", "label": "SENT" },
{ "from": "USDC", "to": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F", "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": "5 Cred Units" },
{ "method": "x402_payment", "price": "$0.05", "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.Results are cached for 10 minutes. First requests typically take 2-5 seconds; cached responses return in under 100ms.
Authentication
This endpoint supports two authentication methods:| Method | Header | Cost |
|---|---|---|
| API Token | Authorization: Bearer YOUR_API_KEY | 5 Cred Units |
| x402 Payment | X-PAYMENT: <signed_payment> | $0.05 USDC |
x402 payments allow instant, accountless access. Pay per request with USDC on Base - no signup required.
Try it live →
Path Parameters
string
required
Ethereum address or ENS name (e.g.,
vitalik.eth or 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045)Query Parameters
integer
default:"1"
Chain ID of the blockchain network to analyze. Defaults to Ethereum Mainnet.
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
string
The resolved Ethereum address (checksummed)
integer
The chain ID that was queried
string
Human-readable name of the blockchain network
integer
Total number of ERC-20 token transfers found for this address on the specified chain
array
array
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)
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,
"nodes": [
{ "id": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "label": "0xd8dA...6045", "group": "wallet" },
{ "id": "USDC", "label": "USDC", "group": "token" },
{ "id": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F", "label": "0x71C7...976F", "group": "wallet" }
],
"edges": [
{ "from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045", "to": "USDC", "label": "SENT" },
{ "from": "USDC", "to": "0x71C7656EC7ab88b098defB751B7401B5f6d8976F", "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": "5 Cred Units" },
{ "method": "x402_payment", "price": "$0.05", "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.
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