## πͺ Crypto Dossier **An x402-native market-intelligence endpoint.** One call returns a complete dossier on any crypto token β **by symbol or contract address** β merged from **8 independent sources** into one clean JSON schema, priced at **$0.001 per call**, payable by any agent. Built for autonomous agents, trading bots, and enrichment pipelines that pay-per-call over **x402** β no accounts, no API-key juggling, no rate-limit management. --- ### π³ Access & payment Speaks **x402-v2 on Base**. Two ways in: **1 Β· Free trial β Sign In With X (SIWX).** Your first **5 calls are free**. An unsigned request returns `401 siwx_required`; sign the SIWX challenge (EIP-4361 wallet sign-in) to consume one trial. No payment, just a signature. **2 Β· Pay-per-call β x402.** After the trials, an unsigned request returns the **`402` payment-required** challenge (accepted assets, networks, `payTo` in its header). Sign the x402 headers and the call settles on-chain at **$0.001** β the dossier returns in the same response. `wallet-mcp execute_service` signs both automatically. --- ### π― What you send ```json { "query": "ETH" } { "query": "0x6982508145454ce325ddbe47a25d4ec3d2311933" } ``` A **symbol** (`BTC`, `ETH`, `SOL`) or any **token contract address** (any chain). Also accepts `symbol` / `token` / `address` keys, or a raw-string body. ### π¦ What you get A single, richly-organized dossier (`schema v2.0`): | Section | Contents | |---|---| | **query** | input, resolved type (symbol/contract), symbol, found flag | | **identity** | name, logo, website(s), socials (twitter / telegram / β¦) | | **price** | consolidated USD price, per-source breakdown, source count, cross-source spread % | | **market** | market cap, FDV, liquidity, 24h volume | | **change** | 1h / 6h / 24h % move | | **cex** | last, bid, ask, 24h high / low, VWAP, volume | | **dex** | top pair (chain, DEX, price, liquidity, volume, link) + pair count | | **ohlc** | 14 daily candles (O/H/L/C/V) | | **fx** | USD β EUR / GBP / JPY / CNY / INR | | **sentiment** | Fear & Greed index (value + classification) | | **global** | total market cap, BTC dominance, active coins, ATH | | **assessment** | derived `flags[]` β one-glance signal roll-up | | **meta** | schema version + per-source coverage map | #### Example `assessment.flags` ```json ["cex-listed", "high-volatility-24h", "low-liquidity", "price-divergence", "market-fear"] ``` `cex-listed` Β· `dex-only` Β· `low-liquidity` Β· `high-volatility-24h` Β· `near-1usd` Β· `price-divergence` Β· `market-<sentiment>` Β· `not-found`. --- ### π§ Symbol vs contract β the smart part - **Symbols** resolve to authoritative **exchange-grade** pricing (multi-source median + spread), with market-wide sentiment and global stats layered on. - **Contracts** resolve to full **on-chain / DEX** data β price, liquidity, market cap, pairs, plus logo and socials β so it works for **long-tail tokens** that centralized APIs don't even list. A trust gate keeps a same-named token on another chain from contaminating a major-symbol query. --- ### π‘οΈ Built to never break - **Fail-open.** Any source can time out or go dark β the dossier still returns, that field simply degraded. No partial crashes. - **Always-valid schema.** Every response conforms to `schema v2.0` β even malformed input or an internal hiccup returns the full shape, never an empty `[]`. Safe to parse blind. - **Market context always.** Even an unknown token returns live sentiment + global market stats. - **Bounded latency.** Per-source timeouts keep every call fast. Verified across major symbols, raw contracts, `.co.uk`-style edge cases, unknown tickers, and empty input. --- **POST** `{ "query": "<symbol | contract>" }` β a complete market dossier in one response. Five free trial runs, then $0.001 each over x402.
The seven checks, with their evidence
7 recordedRegistered?rung 1 Β· registered
passThe agent exists in the on-chain registry, with an owner and a document URL.
passed
- block_number
- 52281733
- chain_id
- 8453
- token_id
- 60190
checked at 2026-10-07T15:58:24.809666Z
Reachable?rung 2 Β· resolvable
passThe document URL it declared actually answers when fetched.
passed
- elapsed_ms
- 438
- final_url
- https://display.indie.money/8453:0x56a9b39F21023cC71efD19568591c9681025c3f7-agent-card.json
- http_status
- 200
- request_url
- https://display.indie.money/8453:0x56a9b39F21023cC71efD19568591c9681025c3f7-agent-card.json
- scheme
- https
checked at 2026-10-07T15:58:24.809666Z
Readable?rung 3 Β· parseable
passWhat came back is valid JSON that a machine can read.
passed
- body_bytes
- 9016
- body_sha256
- 0967aa780d3c21e5416d1d118e56a44200b2e0b3d880bdac608e68cb34b8f746
- content_type
- application/json
checked at 2026-10-07T15:58:24.809666Z
Follows the spec?rung 4 Β· conformant
passThe document meets what ERC-8004 requires of it.
passed
- both_fields_present
- false
- legacy_endpoints_field
- false
- may_gaps
- (empty)
- must_violations
- (empty)
- registrations_checked
- 1
- services_field_source
- services
- services_status
- present
- should_gaps
- image, services[].version
- spec_commit
- 68fc6765761a10fb26f0692df21c8a6f9d12b1be
checked at 2026-10-07T15:58:24.809666Z
Claims its identity?rung 5 Β· bound
passThe document names the on-chain agent it belongs to, rather than leaving it unsaid.
passed
- declared_agent_id
- 60190
- declared_chain
- 8453
- declared_registry
- eip155:8453:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432
- match
- true
- registrations_seen
- 1
checked at 2026-10-07T15:58:24.809666Z
Answers?rung 6 Β· live
passA declared endpoint responds to a probe. Not implemented yet, so nobody passes or fails it.
passed
- endpoints
{"declared":"https://market.indie.money/service/8453/0x56a9b39F21023cC71efD19568591c9681025c3f7","elapsed_ms":820,"finalβ¦ (396 chars β expand)
{"declared":"https://market.indie.money/service/8453/0x56a9b39F21023cC71efD19568591c9681025c3f7","elapsed_ms":820,"final_url":"https://market.indie.money/service/8453/0x56a9b39F21023cC71efD19568591c9681025c3f7","http_status":200,"index":0,"kind":"https","name":"web","outcome":"live","probed":true,"probed_url":"https://market.indie.money/service/8453/0x56a9b39F21023cC71efD19568591c9681025c3f7"}- endpoints_answered_not_live
- 0
- endpoints_declared
- 1
- endpoints_live
- 1
- endpoints_our_error
- 0
- endpoints_payment_gated
- 0
- endpoints_probeable
- 1
- endpoints_probed
- 1
- endpoints_refused
- 0
checked at 2026-10-07T19:37:51.488079Z
Has feedback?rung 7 Β· attested
failAt least one on-chain feedback entry names this agent.
did not pass
- distinct_authors
- 0
- feedback_count
- 0
- reason
- no_feedback
checked at 2026-10-07T15:58:24.809666Z
Check it again, now
outside the censusOn-chain snapshot
base- token id
- 60190
- owner
- 0x4d1f17112841d5cd524c017f1a8f3b38ed09c6e0
- block
- 52,281,733
- observed
- 2026-10-07T15:58:24.812530Z
What the fetch saw
https- scheme
- https
- request url
- https://display.indie.money/8453:0x56a9b39F21023cC71efD19568591c9681025c3f7-agent-card.json
- final url
- https://display.indie.money/8453:0x56a9b39F21023cC71efD19568591c9681025c3f7-agent-card.json
- http status
- 200
- content type
- application/json
- size
- 9,016 bytes
- sha256
- 0967aa780d3c21e5416d1d118e56a44200b2e0b3d880bdac608e68cb34b8f746
- elapsed
- 438 ms
This run
reproducible- run
- c67de707-a82d-4589-8936-acd5a584c720
- chain
- base
- pinned block
- 52,281,733
- agents
- 98,319
- started
- 2026-10-07T06:00:13.662398Z
- finished
- 2026-10-07T19:18:37.899751Z
- checker
- 0.7.0 Β· 10238dd9af44dfa032e6578390569a413a6bb393
- spec commit
- 68fc6765761a10fb26f0692df21c8a6f9d12b1be
cargo run -p sweeper -- base # at block 52281733