This is the hosted API sold with the Analyst, Desk and Enterprise plans, served from
https://scienter.xyz/api/v1/. It is a different surface from the self-hosted server, the Railway intelligence service and the MCP server’s own keys; none of those credentials work here and this one works nowhere else.Get a key
- Activate a membership from pricing. Whop confirms the purchase to scienter.xyz by signed webhook, so the membership is known to the API within seconds.
- Sign in at scienter.xyz/activate with the membership id, then open scienter.xyz/settings/api.
- Create a key. It is prefixed
sc_, shown once, and stored server-side only as a hash. It expires after 90 days and can be revoked on the same page. An Analyst seat may hold five active keys; a Desk plan twenty-five.
x-scienter-membership: sc_.... Prefer either header over any query form: a credential in a URL reaches access logs, proxies and browser history.
The envelope
Every route answers with the same shape, and thestate field is the first thing to read.
data, next to the claim they qualify. That is deliberate: an MCP client hands the object to a language model, and the model restates the conclusion without whatever surrounded it.
Routes
Each is specified in full, with its schema, on the pages that follow.
POST /api/v1/scan/{address} is the one route here that is not sold with a plan. It is provisioned for partner products that call Scienter on their own users’ behalf, on a scp_-prefixed key with its own monthly budget, and it is listed with the rest so the surface is documented in one place rather than two.
Where the history comes from
The sanctions walk, the bridge trace and the exchange activity read the address’s transfer history. Since September 2026 that history comes first from Scienter’s own transfer warehouse (a bounded universe of sanctioned addresses and their counterparties, bridge and exchange contracts, and tracked token launches, fetched once and stored) and then, for anything not yet stored, from a live provider read inside a fixed budget. The payload names which:provenance is warehouse or onchain. A read over no history at all is reported as unchecked, never as clear.
How long a call takes
Set your client timeout to at least 60 seconds. The first call about an address the warehouse has not seen is slow, and a default timeout will cut it off and look like a broken API. Measured against production on 2026-09-19:
The reason is in Where the history comes from:
a route that reads transfer history serves it from the warehouse when it is
there and falls back to a live provider read when it is not. The live read is
the slow part, and it only happens once per address.
The deployer record is fast on every call because it reads committed data and
makes no request at answer time.
A sanctions call on a very high-degree address — a large exchange wallet, or
one of the famous ones — may spend its whole budget on the proximity walk and
return
proximity_checked: false with the direct list check completed. That is
the route reporting the half it could not finish rather than claiming a clean
walk, and it is the correct answer rather than a failure.
Limits
Quotas are per membership, per UTC calendar day, and reset at midnight UTC. Every response carriesX-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds to reset).
The daily quota is the only limit the gate enforces today. Fair-use ceilings per minute exist on the pricing page and will be enforced when they are; this page will say so when that happens rather than before.
A
402 names why the credential was refused (no_credential, unknown_membership, tier_too_low, store_unavailable); the last is our fault and says so. Do not retry a 402 in a loop. A 429 means the day’s quota is spent; wait for the reset.
From an MCP client
@scienter/mcp (packages/scienter-mcp in the repository) exposes all seven routes as read-only tools for Claude Desktop, Claude Code and Cursor, with the same key. It is built and tested but not yet on the npm registry, so there is no install line to paste today: the curl calls on this page are the working path, and the package page carries the client config the day it is published.
Each tool renders an absence louder than a finding and prints the payload’s caveat in the same block of text as the claim. See scienter.xyz/mcp for the tool table and the package’s publication status.
What this API will not do
- It will not return a wallet risk score. No calibrated model exists for one, and a number with a real address attached would be a fabrication.
- It will not render an unreachable upstream as an empty result.
- It will not report a simulated history as a screen.
- It will not fold “two hops from a listed address” into “sanctioned”. They are separate fields because they are separate claims.
Scienter analyses public blockchain records. A finding states what those records show and how confident we are; it is evidence, not proof of anyone’s identity, intent or wrongdoing, and an attribution we cite is the cited source’s. An empty result means not analysed, never safe. Nothing here is legal, tax or investment advice, or a recommendation to transact with any address or asset — see Disclaimers for the full text.