Archalis Radar API

Ratings from AAA to C for BNB Chain tokens, a SCAM label for confirmed patterns, and on-chain forensics of every rug pull. Built so a trading bot can decide in one request whether a token is worth the risk.

~7 smedian time from pool creation to first rating 5,000+new pools seen per day BNB ChainPancakeSwap V2/V3, other DEXes, four.meme

Quick start

Base URL: https://api.archalis.com/v1. No key is needed to try it: requests without a key use the free plan, counted per IP address.

curl https://api.archalis.com/v1/token/0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82

With a key:

curl -H "X-API-Key: ark_..." https://api.archalis.com/v1/token/0x...

Keys and plans

Send your key in the X-API-Key header, or as Authorization: Bearer ark_.... For the stream, which browsers open without headers, ?key=ark_... also works.

PlanRequests per secondRequests per dayFresh analyses per dayStream
Free11,000201 connection, 60 s delay
Trial (7 days)1020,0001002 connections, real time
Pro10100,0005003 connections, real time
Bot301,000,0005,00010 connections, real time

Daily counters reset at 00:00 UTC. Every response carries X-RateLimit-Remaining-Day.

Token rating

GET/v1/token/{address}

Returns the latest rating in our archive, with the time it was computed in analyzedAt. If the token is not in the archive, or you add ?fresh=1, the radar analyzes it now: this takes a few seconds and counts against your fresh analyses.

A real response: a token whose liquidity was 100% locked, emptied by insiders 31 minutes after launch (some fields omitted).

{
  "chain": "bsc",
  "token": "0xd0d87cd37f498b79a9d4f37b7e623bd05ea2db96",
  "symbol": "NOKc",
  "rating": {
    "grade": "D",
    "label": "default: rug pull",
    "class": "default",
    "provisional": false,
    "outlook": null,
    "score": 19
  },
  "flags": [
    "SIMULATION_NOT_RUN",
    "RIGGED_BALANCES",
    "LOW_LIQUIDITY",
    "NEW_TOKEN",
    "INSIDER_DUMP"
  ],
  "market": {
    "type": "v2",
    "dex": "PancakeSwap V2",
    "pair": "0x7f3dadc63ebc3945b1cb981b7e5e30b2d653aec5",
    "base": "WBNB",
    "liquidityUsd": 0.07
  },
  "contract": {
    "simulated": false,
    "honeypot": false,
    "sellTaxPct": null,
    "ownerRenounced": true,
    "upgradable": false,
    "ownerPowers": []
  },
  "liquidity": {
    "burnedPct": 0,
    "lockedPct": 100,
    "inWalletsPct": 0,
    "verified": true,
    "locks": [
      {
        "locker": "PinkLock V2",
        "pct": 100,
        "unlockAt": null,
        "permanent": true
      }
    ]
  },
  "collapse": {
    "kind": "insider_dump",
    "isRugPull": true,
    "liquidityDropPct": 99.99,
    "minutesAfterLaunch": 31,
    "pulledPct": 0,
    "insiderSoldPct": 99.99,
    "marketSoldPct": 0
  },
  "analyzedAt": "2026-10-16T22:34:06.000Z",
  "source": "archive"
}

Grades

AAA to BBB are investment grade, BB and B speculative, CCC to C junk. SCAM is a confirmed scam pattern (not a grade). D means the rug pull already happened. Tokens younger than 24 hours get a provisional rating: "provisional": true.

Collapse

When liquidity falls 70% or more from its peak, collapse says why, from on-chain forensics: liquidity_pulled and insider_dump are rug pulls; market_crash and coordinated_selling are not.

Batch

POST/v1/tokens

Up to 50 tokens per request, from the archive only. Each token counts as one request.

curl -X POST https://api.archalis.com/v1/tokens \
  -H "X-API-Key: ark_..." -H "content-type: application/json" \
  -d '{"tokens": ["0x...", "0x..."]}'

Tokens not yet analyzed come back as {"token": "0x...", "error": "not_in_archive"}: ask for them one by one with GET /v1/token.

Creator

GET/v1/creator/{address}

Everything we know about the wallet that opened a pool: its launches with initial and current grade, which ones ended in a rug pull and how, who funded it, and the network of linked wallets (shared volume bots, cross launches, common funders) with its rug pulls.

Real-time stream

GET/v1/stream

Server-Sent Events. Each event carries the full token object described above.

EventWhen
newa new pool receives its first rating
ratinga grade changes
ruga rug pull is confirmed by forensics
crasha price crash caused by market selling
// Node.js 18+ or the browser
const es = new EventSource('https://api.archalis.com/v1/stream?key=ark_...');
es.addEventListener('new', (e) => {
  const { token } = JSON.parse(e.data);
  const avoid = ['HONEYPOT', 'SERIAL_RUG_LAUNCHER', 'LP_UNLOCKED', 'SUPPLY_OUTSIDE_POOL'];
  if (token.flags.some((f) => avoid.includes(f))) return;
  console.log(token.symbol, token.rating.grade, token.market?.liquidityUsd);
});
es.addEventListener('rug', (e) => console.log('rug pull', JSON.parse(e.data).token.symbol));

Usage

GET/v1/usage

Your plan, its limits, its expiry and today's consumption. It does not count against your quota.

Default rates

GET/v1/stats/default-rates

For each initial grade: how many new pools received it and how many then ended in a rug pull. Public and free, no key and no quota. It is how you can check that the ratings work, the same evidence credit rating agencies publish.

Risk flags

Stable codes, meant to be filtered by a program. New codes may be added; existing ones do not change meaning.

FlagMeaning
HONEYPOTbuying works, selling does not (simulated)
CONFISCATORY_TAXsell tax of 50% or more
SELL_TAX_HIGH / BUY_TAX_HIGHtax of 10% or more
BUY_BLOCKED / TRANSFER_BLOCKEDbuying or transferring fails right now
SIMULATION_NOT_RUNtrades could not be simulated (for example, no liquidity)
OWNER_ACTIVEthe contract has an owner who has not renounced it
CAN_MINT, CAN_BLACKLIST, CAN_CHANGE_TAX, CAN_HALT_TRADINGpowers of the active owner
UPGRADABLEthe contract code can be replaced
RIGGED_BALANCESa wallet holds more than the whole supply
CREATOR_HOLDS_SUPPLYcreator or owner holds 20% or more of the supply
SUPPLY_OUTSIDE_POOL20% or more of the supply was kept outside the pool at launch
LP_UNLOCKED / LP_PARTLY_UNLOCKED50% / 10% or more of the liquidity can be pulled at any time
LP_UNVERIFIABLEwho controls the liquidity cannot be fully verified (V3 pools, partial history)
LP_TO_REMOVER_CONTRACTliquidity handed to a known liquidity-removal contract
LOW_LIQUIDITYless than $10,000 of liquidity
BONDING_CURVEstill on the four.meme bonding curve
BOT_VOLUMEhalf or more of the volume comes from known volume bots
SERIAL_RUG_LAUNCHERlaunched with a service that pulls liquidity in nearly every launch
CREATOR_PAST_RUGS / CREATOR_NETWORK_RUGSthe creator, or its network of linked wallets, has past rug pulls
NEW_TOKENless than 24 hours old
LIQUIDITY_PULLED / INSIDER_DUMPrug pull confirmed
PRICE_CRASH / COORDINATED_SELLINGcrash from market selling, or from one group of linked wallets (not a rug pull)

Errors

Errors return a JSON body {"error": {"code": "...", "message": "..."}}.

StatusCodeWhat to do
400invalid_address, invalid_batchfix the request
401invalid_keycheck the key, or omit it to use the free plan
402key_expiredrenew the plan
429rate_limitedwait for Retry-After seconds
429daily_quota, fresh_quota, too_many_streamswait for 00:00 UTC or move to a larger plan
422analysis_failedthe address is not a token we can analyze
504analysis_timeoutretry, or read the cached result

What it does not do

Ratings are automated assessments of structural risk based on public blockchain data. They are not investment advice and not a recommendation to buy or sell.