API reference
The CSDS API is organized around plain HTTPS and JSON. It analyzes a token's on-chain footprint and returns a 0–100 risk score with specific red flags. Responses are predictable, errors are typed, and rate limits are returned in headers.
Base URL
All endpoints are served over HTTPS from a single base URL:
https://csds.blockchainrangers.com/api
The current major version is v1, namespaced under /api/v1/. Requests and responses are JSON; send Content-Type: application/json on every POST.
Authentication
Paid analysis is settled from an account balance (priced in USD cents) or via the x402 payment flow. There are no per-request API keys enforced by the server today — programmatic API-key auth is Beta and tracked on the Authentication page. You can call the API directly or use the CLI — both bill each analysis from your account balance.
402 Payment Required with a payment_requirements object. See Authentication.Endpoints
Four analysis endpoints trade depth for cost and latency. Pick the lightest one that answers your question.
| Endpoint | Method | Cost | Rate limit | Use it for |
|---|---|---|---|---|
/api/v1/standard-report |
POST | $1.00 | 100 / hour | A full breakdown across every dimension. |
/api/v1/deep-dive |
POST | $5.00 | 20 / hour | Historical comparison + monitoring. |
/api/v1/batch |
POST | −25% | 10 / hour | Screening many tokens at once. |
Make your first call
Every request needs two things: your API key (which authenticates you and bills the call to your balance) and a small JSON body with the token's project_address and chain.
Step 1 — Get your API key
Open the dashboard → API Keys → Create key. Copy it immediately — it's shown only once and looks like csds_live_…. (Make sure your balance is topped up, or calls return 402.)
Step 2 — Send it on every request
Put the key in an Authorization header: Authorization: Bearer YOUR_API_KEY. In each example below, replace YOUR_API_KEY with the key you just copied.
curl -X POST https://csds.blockchainrangers.com/api/v1/standard-report \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"project_address":"0x6982508145454ce325ddbe47a25d4ec3d2311933","chain":"ethereum"}'
# Paste your key here (or read it from an env var: $env:CSDS_API_KEY)
$apiKey = "YOUR_API_KEY"
$headers = @{ Authorization = "Bearer $apiKey" }
$body = @{ project_address = "0x6982508145454ce325ddbe47a25d4ec3d2311933"; chain = "ethereum" } | ConvertTo-Json
Invoke-RestMethod "https://csds.blockchainrangers.com/api/v1/standard-report" `
-Method Post -Headers $headers -Body $body -ContentType "application/json"
import httpx
API_KEY = "YOUR_API_KEY" # from your dashboard
r = httpx.post(
"https://csds.blockchainrangers.com/api/v1/standard-report",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"project_address": "0x6982508145454ce325ddbe47a25d4ec3d2311933", "chain": "ethereum"},
)
print(r.status_code, r.json())
const API_KEY = "YOUR_API_KEY"; // from your dashboard
const r = await fetch("https://csds.blockchainrangers.com/api/v1/standard-report", {
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ project_address: "0x6982508145454ce325ddbe47a25d4ec3d2311933", chain: "ethereum" }),
});
console.log(await r.json());
# Save your key once (stored locally); or set the CSDS_API_KEY env var instead
csds config set api-key YOUR_API_KEY
# The chain is optional — the CLI auto-detects it
csds check 0x6982508145454ce325ddbe47a25d4ec3d2311933 --chain ethereum --format json
X-API-Key: YOUR_API_KEY works too. A missing or invalid key returns 401; a valid key with an empty balance returns 402 — top up and retry. Never expose your key in front-end/browser code that others can see.Conventions
Identifying a token
Every analysis request takes two core fields:
| Field | Type | Required | Description |
|---|---|---|---|
| project_address | string | Required | Contract/mint address. EVM: 0x + 40 hex. Solana: base58 (32–44 chars). |
| chain | string | Required | A live supported chain — ethereum, bnb/bsc, or solana (more soon). blockchain is accepted as an alias. |
Risk levels
Every response carries a numeric risk_score (0–100) and a risk_level string:
LOW 0–25 MEDIUM 26–50 HIGH 51–75 CRITICAL 76–100
Errors & rate limits
Errors use standard HTTP status codes with a typed JSON body. Every response includes X-RateLimit-* headers. See Errors and Rate limits for the full reference.