Pricing
Two lines are purchasable today: the $0.01 position check and the $0.25 contract audit. Three things are free. The rest are built, partly built, or priced, and each says which. A price list that reads as revenue when it is really a roadmap is the same overclaim ASSAY audits other people for.
Tiers
Findings wall and feed
freeFree
Every published finding, its raw return bytes, and the cast command that reproduces it; the same board as JSON.
Public MCP
freeFree
Published findings, a fresh sweep of one ticker, and the verdict alone for a position or a contract: can this position be valued safely, and is this contract multiplier-aware, with no holdings or figures.
ERC8056Guard
freeFree
An ownerless, view-only contract on chain 4663: share-equivalents for any holder, or a refusal with its reason. The wallet check on the wall calls it from your browser.
assay_true_position()
purchasable$0.01
The corrected ERC-8056 position for one holder: raw balance, uiMultiplier, share-equivalents, the Chainlink price and USD value, oracle checks, any scheduled multiplier change, and an explicit refusal when the read is not safe to act on. Tokens without a Chainlink feed get the share-equivalents and a refused USD value. Sold over x402; the same open-source code also runs locally as an AgentKit action.
assay_check_contract()
purchasable$0.25
The named audit of any address on chain 4663: its verdict with bytecode evidence, every holding of every Stock Token whose multiplier is not 1, and how many share-equivalents go unaccounted for if those balances are read as share counts. Resolves EIP-1967, beacon and EIP-1167 proxies to the implementation before deciding, returns PROXY_UNRESOLVED rather than a verdict when it cannot, and returns NOT_APPLICABLE with a role for pools and custody. Priced above the per-position check because it answers a question about a counterparty, which is the one you ask before you act.
Full evidence pack
roadmap$2.00
Every citation for a subject in one signed document. Not purchasable: no workflow for it exists yet. (This previously blamed a $0.10 ceiling in OpenServ payWorkflow(). That ceiling is only the DEFAULT of the SDK's wrapFetchWithPayment, which accepts an explicit one — the $0.25 tier above is paid exactly that way.)
Continuous monitoring
roadmap$19/mo
A watched address or agent, re-swept on a schedule. Not purchasable: no recurring billing is wired.
Solicited mandate attestation
roadmap$50.00
An on-chain ERC-8004 ValidationRegistry verdict a subject requested about itself, adjudicated by SERV Reasoning against its declared mandate. Only the declared text is graded, so the best outcome is NO_MATERIAL_EXPOSURE_AS_DECLARED (80), never CLEAN. The solicited path is built but has not been exercised: no third party has requested one, and the one attestation on-chain is ASSAY's own, self-issued under frozen identity 95265. Not purchasable, because pricing it as a product would be a claim about demand we cannot make.
Use it
Free first: this wall, the wallet check, the on-chain guard and the public MCP. Pay for the full answer. Both paid calls are x402, settled in USDC on Base to 0x6328f2fE483922721D94b33eE99e9938Da3b7911. In a browser, the paywall page is OpenServ's: it asks you to connect a Base wallet holding USDC, and the input fields appear only after you connect. An agent pays the trigger URL directly.
Free on MCP: whether this position can be valued safely, and if not, why: the confidence, the refusal reason, which oracle checks completed, and any scheduled multiplier change.
$0.01 adds the position: raw balance, uiMultiplier(), share-equivalents, the token's decimals, and the feed, price, age and heartbeat behind those checks, with the USD value, all read at one block.
Free on MCP: the verdict alone (NOT_AWARE, AWARE, NOT_APPLICABLE with its role, PROXY_UNRESOLVED, TOO_SMALL, or no code), with the code hash, the block and whether the reading is conclusive.
$0.25 adds the audit: every holding of every Stock Token whose on-chain multiplier is not 1, the share-equivalents unaccounted for, the USD held (null when any holding is unpriced or unread, never a silent zero), and the eth_call citations behind each number.
From code
curl -m 20 -i -X POST \
https://api.openserv.ai/webhooks/x402/trigger/006ecd4add4a459d8ae92362869a42a6 \
-H 'content-type: application/json' \
-d '{"buyerAddress":"0xYourBuyerAddress","payload":{"symbol":"NVDA","holder":"0xHolderAddress"}}'
# -> HTTP 402 and the x402 payment terms (USDC on Base). Nothing is charged.The audit takes the same shape with "payload":{"address":"0x…"}. Any x402 client can pay; with wrapFetchWithPayment, pass a ceiling of at least the price, because its default of $0.10 refuses the $0.25 call before sending it. The reply is {status, settleTxHash, output: {value}}, and output.value is itself a JSON string. OpenServ allows 60 seconds per call. The input schemas are in the agent card.
Before you pay. Payment settles before the task runs. A bad input comes back as ok: false JSON with an errorClass and a retryable flag, and whether OpenServ still settles a task that errors is not verified, so check a symbol or address with the free MCP first.
Which tokens get a USD answer at $0.01
These 35 tickers have a Chainlink feed on chain 4663, so the $0.01 call can value them: AAPL AMD AMZN ASML BABA CLSK COIN CRCL CRWV DELL EWY GME GOOGL INTC IONQ META MSFT MSTR MU NBIS NVDA ORCL PLTR QQQ RGTI RKLB SGOV SLV SNDK SPCX SPY TSLA TSM USAR USO. Every other Stock Token (159 of 194 in this sweep, CRWD among them) returns the corrected share-equivalents with the USD value refused, because there is no on-chain price to use. A priced token whose feed is past its heartbeat, as the 24/5 feeds are for part of every weekend, comes back degraded with the feed's age stated. Listed from the Chainlink directory the paid call reads, re-read hourly.
Free, no key
- MCP over Streamable HTTP: https://sonar.my.id/assay-mcp/mcp, for example claude mcp add --transport http assay https://sonar.my.id/assay-mcp/mcp. A client that only speaks SSE connects to https://sonar.my.id/assay-mcp/sse with --transport sse. Tools: assay_findings, assay_check_symbol, and the verdict-only assay_check_contract and assay_true_position.
- Raw feed: https://sonar.my.id/assay-mcp/findings.json, the JSON this wall reads.
- ERC8056Guard on chain 4663: 0x674f9b0eC3C3643c1f51c0a40D4837932F9c1648, ownerless and view-only. shareEquivalents(token, holder) returns the share count or a refusal with its reason; positionValue adds the feed price. The TypeScript helper is on npm as erc8056-guard (source).
Why these two prices are different
The OpenServ x402 marketplace listed 479 services on 2026-09-22, 84 of them active, at a median active price of $0.02; about 82% of everything listed was inactive. A per-position check has to be cheap enough to run before every valuation, which is the only pattern that makes an audit primitive load-bearing rather than occasional; that is the $0.01 line and it stays there.
assay_check_contract is a different kind of question. It is asked once, about a counterparty, before deciding whether to rely on its accounting — and it returns a named verdict with bytecode evidence rather than a number. It is priced as a decision, not a lookup. The 59 findings on the wall are the reason to call either one.