The rating is free and always will be. Credibility is the asset, and a rating nobody can read is worth nothing. What is priced is the layer underneath it: who else is in the trade, how a strategy is actually being run, and what it can absorb before its own edge is gone.
Right now the whole website is open. Nothing below is being charged for.
We have been collecting for days rather than years, and a screen of locked panels would show you that we built locks rather than that we built anything worth buying. So every page and every column is readable, signed in or not. The plans below are what the paid surface will be, published now so it is not a surprise later.
The API is the exception and is charged today — a machine reading this on a schedule is a cost we carry per call, which is a different thing from a person reading a page.
50,000 calls a month
Programmatic access to ratings, crowding and behaviour. 50,000 calls a month.
500,000 calls a month
The same surface at ten times the volume. For a product that reads this continuously.
Endpoints above your tier return 402 Payment Required naming the capability you need. A spent monthly allowance returns 429 for the paid surface and leaves /v1/plans, /v1/meta, /v1/account and the OpenAPI document reachable — a key that has run out has to be able to read what it would cost to carry on.
The API and the web interface keep separate entitlement tables. They agree on nearly everything and are allowed to differ where the surfaces genuinely differ — crowding summaries are free over the API and part of a plan on the site, because a chart and a feed are not the same product. Where you care which you are buying, the API's table is the one this page describes.
GET /api/v1/plans prices and quotas, no key needed
GET /api/v1/account your balance, quota and deposit address
GET /api/v1/meta counts, capabilities, known limitations
GET /api/v1/vaults?agentManaged=true filter by chain, platform, agent-managed
GET /api/v1/vaults/{slug} metrics, NAV series, positions
GET /api/v1/vaults/{slug}/waterfall gross to net
GET /api/v1/vaults/{slug}/execution fills, taker share, fee rate
GET /api/v1/operators cohort summaries, survivors and failures
GET /api/v1/crowding clusters, coverage; members need a plan
GET /api/v1/crowding?asOf=2026-08-14 the book as it stood, not as it is
GET /api/v1/history/capital daily measured capital, by who decides
GET /api/v1/assets instruments and who holds them
POST /api/v1/risk your book: look-through exposure, what a shock costs you
GET /api/v1/correlation are these vaults the same trade, after the market
GET /api/v1/stress who is liquidated at what price; ?scale=sigma for distance
GET /api/v1/cascade the forced selling that follows, and where it lands
GET /api/v1/vaults/{slug}/redemption what a withdrawal does to the strategy behind it
GET /api/v1/exposure/netting where longs and shorts cancel, and where they cannot
POST /api/v1/registry pre-register a strategy (free)
POST /api/v1/commit commit to a decision BEFORE executing
POST /api/v1/reveal reveal it afterwards; we match it on chain
GET /api/v1/attestation/{digest} whether the sequence is intact
GET /api/v1/watches your alerts, where they deliver, what has fired
PUT /api/v1/watches arm one: kind, target, threshold as a fraction
DELETE /api/v1/watches/{id} disarm itPOST /api/v1/risk is the one that answers a question about you rather than about a vault. Send the vaults you hold and what you hold of each, and it prices your side: the instruments you are exposed to through them, which are rarely the ones you chose, and what a move costs you. A loss stops tracking the price once a vault is closed by the venue rather than marked down, and that discontinuity is where the money is — so it is reported per scenario rather than smoothed into a sensitivity.
The registry, commit and reveal endpoints are the only thing here that ties a strategy to its trades. An agent posts a hash of its intent before placing an order — we cannot see the trade, because the hash covers a nonce too — then reveals it afterwards, and we check it against what appeared on chain. A gap in the sequence, a commitment never revealed, or a reveal matching nothing are all the same failure: a decision the record does not cover. Any of them voids the grade permanently, because the missing commitment would have had to be made before the trade.
Paying inside the request
A 402 carries your own deposit address. Send the transfer, then retry the same request with X-PAYMENT: base:0x<txHash> — we read that transaction on chain during the request and credit it, so there is no waiting for a background job. The reply carries X-Payment-Response saying what happened.
What we do not do is submit a payment for you. Canonical x402 has the server broadcast a signed authorisation, which needs a private key and a gas balance. We hold neither, and acquiring them would give up the property that makes a compromise of this server cost a list of addresses rather than anyone’s funds. Naming the limit beats claiming x402 support and sending an agent looking for an endpoint that is not there.
History, where we have it. Crowding takes an asOf and answers with the book as it stood — a backtest cannot use a figure that only exists in the present tense, and answering “was this crowded before it unwound” with today’s clusters is the survivorship error this site exists to argue against. The reply names the snapshot it actually landed on rather than silently serving a different day. Cluster history is short and says so; /history/capital runs longer and marks every day that was rebuilt rather than observed.
Alerts are set by the machine that wants them. PUT /api/v1/watches arms a crossing — crowding, consistency, drawdown, a version change, or proximity to liquidation — and the firing arrives at your webhook. The threshold is a fraction rather than a percentage, because 0.9 would otherwise be ambiguous between 90% and 0.9% and the wrong reading simply never fires. GET tells you what is armed, what has fired, and whether any endpoint is registered to receive it.
An agent never needs a browser. It can read /api/v1/plans unauthenticated, and /api/v1/account returns its own balance, quota and deposit address against an X-API-Key — so it can top itself up without a human clicking anything.
An alert is worth what it reaches. Every watch you set — crowding past a share you choose, consistency falling, drawdown past a limit, a strategy version changing — can be delivered to your own endpoint as a signed POST, so the crossing lands in a system rather than in somebody’s inbox.
POST https://your-system/aspern
X-ASPERN-Event: watch.fired
X-ASPERN-Delivery: cl9x… stable across retries — deduplicate on it
X-ASPERN-Signature: t=1786…,v1=9f3a… HMAC-SHA256 of "<t>.<raw body>"
{ "id": "cl9x…", "event": "watch.fired", "createdAt": "2026-08-15T19:04:11Z",
"data": { "kind": "crowding", "target": "PURR", "threshold": 0.9,
"value": 0.93, "message": "PURR crossed 90% one-sided." } }Verify against the bytes you received rather than a re-serialised object, and reject anything whose t is more than five minutes from your clock — the timestamp is inside the signature so a captured delivery cannot be replayed later. We retry a 5xx, a timeout, a 408 or a 429, backing off from one minute to six hours across six attempts; any other 4xx stops at once. Every attempt is recorded with its response code and shown in your account, so “did you send it” has an answer rather than an opinion.
Endpoints must be public HTTPS. We refuse private and link-local addresses, because delivering to one would make this a probe of our own network run on request.
Twenty-six tools that let an assistant read ratings, crowding, execution quality, stress, cascades, portfolio risk and operator cohorts directly, and register or commit a strategy. It is a shell over the same REST API rather than a second implementation, so entitlements and quota are decided in one place — and a key is optional: without one every tool still answers with the free surface.
{
"mcpServers": {
"aspern": {
"command": "npx",
"args": ["-y", "tsx", "<path>/services/mcp/src/index.ts"],
"env": { "ASPERN_API_KEY": "asp_pro_…", "ASPERN_API_URL": "https://aspern.org/api" }
}
}
}When a tool hits a wall the assistant is told what kind of wall it is. A 402 carries the amount owed and a deposit address; a partly-answered response carries the arrears alongside it, so a missing field is never mistaken for a plan that needs upgrading.
USDC or USDT on Ethereum, Base, Arbitrum or Optimism, to an address issued to you alone — the same string on every one of those chains, so use whichever is cheapest. No card, no automatic renewal, no invoice chasing. Credit appears once the transfer is deep enough to be irreversible. Sign in to see yours.
Vaults as CSV from either the API (/api/v1/vaults?format=csv, needs a plan) or the site. Operators and crowding are site exports only — they authenticate with a session rather than a key, so a machine client cannot reach them yet. /export/vaults?closed=1 includes the vaults that died: a survivor-only file is the bias this site exists to argue against, and handing it to you unmarked would be an odd way to make that argument. Every return column ships beside the basis it was computed on, so a figure cannot travel into a spreadsheet without the caveat that belongs to it.
What the API commits to — availability, latency, notice before a breaking change, and what a missed month is worth — is stated on the status page beside the measurement of what it actually did, including the months that miss. One person answers support, by email, and what to expect back is written down rather than implied.
Read the methodology before relying on any of it.