curl --request GET \
--url https://api.range.org/v1/risk/token \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v1/risk/token"
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.range.org/v1/risk/token', 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.range.org/v1/risk/token",
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.range.org/v1/risk/token"
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.range.org/v1/risk/token")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v1/risk/token")
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{
"token_info": {
"asset_address": "So11111111111111111111111111111111111111112",
"name": "Wrapped SOL",
"symbol": "SOL"
},
"overall_assessment": {
"risk_level": "LOW",
"risk_score": 123,
"max_score": 123,
"risk_percentage": 72.5
},
"summary": {
"total_factors": 123,
"high_risk_count": 123,
"medium_risk_count": 123,
"low_risk_count": 123
},
"risk_factors": {},
"processing_time_ms": 154,
"errors": [
"<string>"
]
}Token Risk Assessment
Request a Solana token risk assessment and inspect the documented response contract and validation errors.
curl --request GET \
--url https://api.range.org/v1/risk/token \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.range.org/v1/risk/token"
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.range.org/v1/risk/token', 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.range.org/v1/risk/token",
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.range.org/v1/risk/token"
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.range.org/v1/risk/token")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.range.org/v1/risk/token")
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{
"token_info": {
"asset_address": "So11111111111111111111111111111111111111112",
"name": "Wrapped SOL",
"symbol": "SOL"
},
"overall_assessment": {
"risk_level": "LOW",
"risk_score": 123,
"max_score": 123,
"risk_percentage": 72.5
},
"summary": {
"total_factors": 123,
"high_risk_count": 123,
"medium_risk_count": 123,
"low_risk_count": 123
},
"risk_factors": {},
"processing_time_ms": 154,
"errors": [
"<string>"
]
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
asset_address | string | Yes | Solana token mint address (32-44 character base58 string) |
network | string | Yes | Blockchain network. The only supported value is solana. |
Documented Response Contract
The OpenAPI specification defines the following HTTP 200 response schema.Top-Level Fields
| Field | Type | Description |
|---|---|---|
token_info | object | Token metadata: asset_address, name, symbol |
overall_assessment | object | Risk result: risk_level (LOW/MEDIUM/HIGH), risk_score, max_score, risk_percentage |
summary | object | Factor counts: total_factors, high_risk_count, medium_risk_count, low_risk_count |
risk_factors | object | Individual assessments keyed by factor name. Each contains level and explanation. |
processing_time_ms | number | Processing time in milliseconds. |
errors | array | Non-fatal errors encountered during the assessment. |
Examples
USDC
curl -X GET "https://api.range.org/v1/risk/token?asset_address=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&network=solana" \
-H "Authorization: Bearer YOUR_API_KEY"
Errors
Invalid Address Format (400)
A request withasset_address=invalid_address and network=solana returns HTTP 400:
{
"message": [
"asset_address must be a valid Solana base58 address (32-44 chars, no 0 O I l)"
],
"error": "Bad Request",
"statusCode": 400
}
Unsupported Network (400)
A request withasset_address=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v and network=ethereum returns HTTP 400:
{
"message": [
"network must be one of the following values: solana"
],
"error": "Bad Request",
"statusCode": 400
}
Documented TypeScript Types
Documented TypeScript Types
interface TokenRiskResponse {
token_info: {
asset_address: string;
name: string;
symbol: string;
};
overall_assessment: {
risk_level: "LOW" | "MEDIUM" | "HIGH";
risk_score: number;
max_score: number;
risk_percentage: number;
};
summary: {
total_factors: number;
high_risk_count: number;
medium_risk_count: number;
low_risk_count: number;
};
risk_factors: Record<string, {
level: "LOW" | "MEDIUM" | "HIGH";
explanation: string;
}>;
processing_time_ms: number;
errors: string[];
}
Authorizations
Authorization method required to allow user to access the api endpoints.
Query Parameters
Asset identifier (chain-agnostic). Currently only Solana token mint (base58, 32–44 chars) is supported.
"So11111111111111111111111111111111111111112"
Blockchain network for token risk (only solana supported)
solana "solana"
Response
Token risk assessment with detailed factors and scoring
Basic token identification details
Show child attributes
Show child attributes
Overall risk assessment aggregation
Show child attributes
Show child attributes
Summary counts of risk factor severity levels
Show child attributes
Show child attributes
Map of risk factor key to its detailed assessment
Show child attributes
Show child attributes
Processing time in milliseconds for the assessment
154
List of non-fatal errors encountered while computing the assessment
Was this page helpful?