Score a token contract
curl --request GET \
--url https://scienter-intelligence-production.up.railway.app/api/token/{address}/rug-score \
--header 'Authorization: Bearer <token>'import requests
url = "https://scienter-intelligence-production.up.railway.app/api/token/{address}/rug-score"
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/token/{address}/rug-score', 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/token/{address}/rug-score",
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/token/{address}/rug-score"
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/token/{address}/rug-score")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scienter-intelligence-production.up.railway.app/api/token/{address}/rug-score")
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{
"prob": 0.0019,
"model_version": "v20260901_180251",
"evidence": [],
"top_features": [
{
"feature": "pair_count",
"value": 1,
"contribution": -1.923771
},
{
"feature": "max_liquidity_usd",
"value": 25582237.72,
"contribution": -1.60755
}
]
}{
"error": "unauthorized",
"reason": "<string>"
}Token
Score a token contract
The rug model over live DEX liquidity and pair data.
This is the only route here that calls an upstream on every request, and it is roughly 5x slower than the others as a result (measured p50 1.41s, p95 3.09s under load on 2026-09-03). Rate-limit your own calls accordingly.
GET
/
api
/
token
/
{address}
/
rug-score
Score a token contract
curl --request GET \
--url https://scienter-intelligence-production.up.railway.app/api/token/{address}/rug-score \
--header 'Authorization: Bearer <token>'import requests
url = "https://scienter-intelligence-production.up.railway.app/api/token/{address}/rug-score"
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/token/{address}/rug-score', 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/token/{address}/rug-score",
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/token/{address}/rug-score"
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/token/{address}/rug-score")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://scienter-intelligence-production.up.railway.app/api/token/{address}/rug-score")
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{
"prob": 0.0019,
"model_version": "v20260901_180251",
"evidence": [],
"top_features": [
{
"feature": "pair_count",
"value": 1,
"contribution": -1.923771
},
{
"feature": "max_liquidity_usd",
"value": 25582237.72,
"contribution": -1.60755
}
]
}{
"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
A token mint or contract address. Solana base58 is case-sensitive.
Query Parameters
Available options:
solana, ethereum, base, bsc, arbitrum, hyperevm