OcellusBeta
Sign inScreener

Developers

Ocellus API

What Ocellus has found, for your bot, dashboard or site: token risk checks, creator records and live Robinhood Chain launches. Free and read-only.

Try it

No key needed for a first look. Paste this:

Shell
curl https://ocellus.app/api/v1/tokens/0xbf8e5f9068ff68183b0c09bcc35b5a80aa60a430

With a key, send it in a header:

Shell
curl -H "Authorization: Bearer YOUR_KEY" "https://ocellus.app/api/v1/launches?column=new&limit=5"
JavaScript
const res = await fetch('https://ocellus.app/api/v1/tokens/0xbf8e5f9068ff68183b0c09bcc35b5a80aa60a430', {
  headers: { Authorization: 'Bearer ' + process.env.OCELLUS_KEY },
});
const token = await res.json();
console.log(token.symbol, token.risk?.level, token.urls.token);

Keys and limits

How you askAllowance
With a key (Authorization: Bearer … or x-api-key: …)60 requests a minute
Without a key10 requests a minute per address
  • A key is free: sign in and make one on your Account page. It is shown once; keep it on your server, never in a web page or an app people can open.
  • Every answer from the API says where you stand: x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-reset (Unix seconds). Over the limit is 429 with retry-after.
  • Browsers on other sites can call the API (CORS is open). Do that without a key: a key in a page is a key anyone can copy.
  • The allowance belongs to your account: making a new key does not reset it.
  • Need more? Write to [email protected] and say what you are building.

GET /api/v1/tokens/{address}

The newest public scan of a token on Robinhood Chain, BNB Chain or Solana: the risk level and the findings behind it, holders, the creator and their record, and links to its page and report. 404 when Ocellus has no public scan yet; the error carries a scanUrl where a free Quick Scan can be started.

200
{
  "network": "robinhood",
  "address": "0xbf8e5f9068ff68183b0c09bcc35b5a80aa60a430",
  "symbol": "OCELLUS",
  "name": "Ocellus",
  "scannedAt": "2026-10-02T09:41:12.000Z",
  "scanStatus": "completed",
  "scans": 30,
  "risk": {
    "level": "moderate",
    "points": 31,
    "flags": ["top10_concentrated"],
    "notes": [{ "label": "Top 10", "text": "The ten largest wallets hold 31.5%.", "serious": false }],
    "unknowns": []
  },
  "holders": { "count": 412, "exact": true, "top10Share": 0.315 },
  "creator": { "wallet": "0xb00a…7187", "share": 0.02, "launches": 1, "dead": 0, "serial": false },
  "whales": 3,
  "smartWallets": 1,
  "liquidity": "locker",
  "canSell": "sells_seen",
  "sellCost": 0.012,
  "marketCapAtScanUsd": 84000,
  "launchedAt": "2026-09-18T14:02:11.000Z",
  "dexPaidAt": null,
  "links": [{ "kind": "x", "url": "https://x.com/ocellusapp" }],
  "urls": {
    "token": "https://ocellus.app/token/0xbf8e5f9068ff68183b0c09bcc35b5a80aa60a430",
    "report": "https://ocellus.app/investigations/…",
    "badge": "https://ocellus.app/badge/0xbf8e5f9068ff68183b0c09bcc35b5a80aa60a430.svg"
  },
  "attribution": "Data by Ocellus (https://ocellus.app). …"
}
  • risk.level is low, moderate, high or severe: a count of the risk signals the scan read, not a prediction. risk is null on a scan too old to carry one.
  • Shares (top10Share, creator.share, sellCost) are fractions from 0 to 1. Times are ISO 8601, UTC.
  • A field Ocellus could not read is null, never a guess.

GET /api/v1/creators/{address}

The launches credited to one address on the Robinhood Chain launchpad since 1 October 2026, and what became of them: how many died, how many graduated, and the newest 50, newest first. A launch made through a launcher contract is credited to the wallet that sent it.

200
{
  "network": "robinhood",
  "creator": "0x…",
  "launches": 37,
  "dead": 35,
  "graduated": 1,
  "firstLaunchAt": "2026-09-20T08:11:00.000Z",
  "lastLaunchAt": "2026-10-02T07:49:00.000Z",
  "recent": [
    { "address": "0x…", "symbol": "ABC", "launchedAt": "2026-10-02T07:49:00.000Z",
      "graduated": false, "fate": "young", "riskLevel": null, "url": "https://ocellus.app/token/0x…" }
  ],
  "truncated": false,
  "url": "https://ocellus.app/creator/0x…",
  "attribution": "Data by Ocellus (https://ocellus.app). …"
}
  • fate is dead, alive or young (under a day old, too early to say).
  • The counts are of every launch on record. truncated is always false; it is kept so nothing built on it breaks.

GET /api/v1/launches

The live launches page as data, a few seconds behind the chain. Optional: column=new|almost|bonded for one column, limit=1…60 for fewer.

200
{
  "asOf": "2026-10-02T07:50:01.008Z",
  "today": { "launches": 1259, "graduated": 11 },
  "columns": {
    "new": [
      { "address": "0x…", "symbol": "ABC", "name": "Alphabet", "launchedAt": "2026-10-02T07:49:36.256Z",
        "graduatedAt": null, "raised": 0.12, "target": 4.2, "payToken": "ETH", "progress": 0.0286,
        "marketCapUsd": 4600, "creator": { "launches": 3, "dead": 2 },
        "links": { "x": "https://x.com/…" }, "riskLevel": null, "dexPaidAt": null,
        "url": "https://ocellus.app/investigate?network=robinhood&address=0x…&quick=1" }
    ],
    "almost": [],
    "bonded": []
  },
  "attribution": "Data by Ocellus (https://ocellus.app). …"
}
  • new: launched in the last hour. almost: the closest to graduating (every launch at 60% or more, and the next closest above 10% when those are fewer than ten; progress says how far each is). bonded: graduated in the last day.
  • raised and target are in the curve's own pay token (payToken). dexPaidAt is when DexScreener approved a paid profile.
  • The data changes every few seconds; asking more than once every three seconds returns the same answer.

The badge

For a project's own site: the level at the token's newest Ocellus scan, as a small picture that links to its report. It is read from the newest scan each time it is shown, so a rescan reaches the badge within a minute or so. No key.

Ocellus scan badge

HTML
<a href="https://ocellus.app/token/0xbf8e5f9068ff68183b0c09bcc35b5a80aa60a430"><img src="https://ocellus.app/badge/0xbf8e5f9068ff68183b0c09bcc35b5a80aa60a430.svg" alt="Ocellus scan" height="22"></a>
Markdown
[![Ocellus scan](https://ocellus.app/badge/0xbf8e5f9068ff68183b0c09bcc35b5a80aa60a430.svg)](https://ocellus.app/token/0xbf8e5f9068ff68183b0c09bcc35b5a80aa60a430)

The badge states the level Ocellus read and nothing more. It is not an endorsement, an audit or advice, and a site must not present it as one.

Errors

429
{ "error": { "code": "rate_limited", "message": "This key has used its 60 requests for this minute.", "details": { "retryAfterSeconds": 23 } } }
StatuscodeMeans
400invalid_address, invalid_requestThe address or a parameter is not one the API reads.
401not_authenticatedThe key is unknown or was revoked.
404not_foundNo public scan of this token yet.
429rate_limitedOver the allowance for this minute.
500internalSomething broke on our side. The answer carries a ref to quote to support.
503service_unavailableOcellus is having trouble; try again shortly.

The rules

  • Credit Ocellus. Where you show the data, show “Data by Ocellus” linked to ocellus.app or to the token's page (urls.token).
  • Do not present it as advice. A level is a reading of risk signals at one moment. Show when it was scanned (scannedAt).
  • Read-only. The API serves what Ocellus has already scanned; it does not start scans. Send people to urls.token or the scanUrl for a fresh one.
  • Stable. Under /v1 fields may be added, never renamed or removed. Ignore fields you do not know.
  • Do not resell the data on its own, and do not use several keys or addresses to get around the limits.