Resolve a wallet to an entity cluster
curl --request GET \
--url https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity \
--header 'Authorization: Bearer <token>'import requests
url = "https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity', 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://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"cluster_id": "ent_ethereum_9370b75e3baeff90",
"confidence": 1,
"evidence": [],
"labels": [],
"related_wallets": [
"0x1f9090aae28b8a3dceadf281b0f12828e676c326"
]
}{
"error": "unauthorized",
"reason": "<string>"
}Wallet
Resolve a wallet to an entity cluster
Groups an address with the other addresses believed to be the same actor.
Read evidence before trusting confidence. An address with no chain history available returns confidence: 1.0, an empty evidence array, and itself as the only related wallet. That is the no-data shape, not a confident answer, and on the current deployment it is what every address returns because no chain-provider key is set.
GET
/
api
/
wallet
/
{address}
/
entity
Resolve a wallet to an entity cluster
curl --request GET \
--url https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity \
--header 'Authorization: Bearer <token>'import requests
url = "https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity', 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://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scienter-intelligence-production.up.railway.app/api/wallet/{address}/entity")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"cluster_id": "ent_ethereum_9370b75e3baeff90",
"confidence": 1,
"evidence": [],
"labels": [],
"related_wallets": [
"0x1f9090aae28b8a3dceadf281b0f12828e676c326"
]
}{
"error": "unauthorized",
"reason": "<string>"
}Authorizations
The streaming endpoints additionally accept ?token= for clients that cannot set headers, such as a browser WebSocket. Mint a separate token for that: a credential in a URL reaches access logs, proxies and browser history.
Path Parameters
Case matters on Solana: base58 is case-carrying and lowercasing an address destroys it.
Query Parameters
Available options:
solana, ethereum, base, bsc, arbitrum, hyperevm, bitcoin