Camino asset lookup (v0.3.0). Tells an agent whether a stock, fund or token exists on-chain, where, what it is, what it costs to buy, and what to do when it doesn't exist. Covers 2,037 tokens on 9 chains, 1,145 stocks and funds with their tokens, every US-listed ticker, and the holdings of 162 tokenized funds. No key is needed to start.

First, register yourself (one call, no account, no person; the key works at once):
  curl -X POST https://dweller.fyi/api/v1/agents/register -H "Content-Type: application/json" -d '{"name":"<what to call you>","chain":"Solana"}'
The answer has api_key (shown once; send it as Authorization: Bearer <api_key> on every call, including to https://dweller.fyi/api/mcp) and claim_url. The key names you in Camino's log and makes the chain you gave your default, so you never say it again. Give claim_url to the person you act for: opening it and signing in lets them see your calls and revoke the key. The key works whether or not anyone claims it. GET https://dweller.fyi/api/v1/agents/me says whether you have been claimed.
Have a Solana wallet? Register with it instead and the wallet is your identity, the same one that signs your orders; a lost key is re-issued by signing again:
  curl -X POST https://dweller.fyi/api/v1/agents/challenge -H "Content-Type: application/json" -d '{"wallet":"<your solana address>"}'
  sign the message it returns with the wallet (signMessage, not a transaction), then
  curl -X POST https://dweller.fyi/api/v1/agents/register -H "Content-Type: application/json" -d '{"wallet":"<your solana address>","signature":"<base58 or base64>","name":"<optional>"}'
Each challenge is good for one signature and ten minutes. Without a key every call still works; you are logged as anonymous.

Two ways in, same answers:
- Web API: GET or POST https://dweller.fyi/api/v1/lookup, POST https://dweller.fyi/api/v1/basket. OpenAPI: https://dweller.fyi/api/v1/openapi.json
- MCP (Streamable HTTP, JSON-RPC over POST): https://dweller.fyi/api/mcp, tools lookup_asset, lookup_basket, get_routes, build_order, confirm_order.

Rules of use:
1. Label what you send: ticker, name or address. Use q only for loose text. A whole basket goes in one call: POST /api/v1/basket or lookup_basket, up to 50 names.
2. Read outcome first. tokens_found: the tokens are ordered your chain first, then measured depth, then redeemability. no_token: show the person the choices and let them pick; never substitute silently. ambiguous: ask the person, offering candidates. unknown_address: do not trust the address.
3. Every fact carries a stamp (source, as_of, checked, confidence). Liquidity comes from a quote-only sweep run twice a day (once in US market hours, once outside); read the checked time and treat it as a measurement, not a firm price. Each token's liquidity also says its hours: 24/7, or us_market_hours (its desk refuses quotes outside weekdays 9:30am to 4pm ET).
4. To buy: get_routes with your size. Routes that fill at this hour come first; a route flagged closed_now says when it reopens. Show the person the best route and its price against the real share, then build_order for that exact address. The answer is an unsigned transaction; the person's wallet signs and sends it. Camino never signs, never holds funds, adds no fee, and is not a party to the trade.
5. build_order reads the wallet's USDC balance first. When it fails, read reason: closed (take an alternative from alternatives, or wait for reopens_at), no_funds (the wallet holds less than amount_usd; wallet_balance says how much), no_quote (try a smaller size or another token). error says it plainly; router_error is the router's own words.
6. If you cannot sign, give the person sign_url from the order: a page where their wallet signs a fresh quote for it. Several orders at once: https://dweller.fyi/sign/<order_id>,<order_id>,... Quotes are firm for about 30 seconds, so do not copy transactions around; let the page fetch its own.
7. After the wallet sends, call confirm_order with the order_id and the signature. Camino asks the chain whether it landed and records the fill. (The sign page does this itself.) Skip this and the trade is invisible to Camino.
8. Issuer desks in get_routes are modeled, not quoted, and need an account with the issuer. Nothing here is advice.

Routes and orders: GET or POST https://dweller.fyi/api/v1/routes (same fields as lookup plus size_usd), POST https://dweller.fyi/api/v1/order (address or ticker, wallet, amount_usd), POST https://dweller.fyi/api/v1/order/{order_id}/confirm (signature), GET https://dweller.fyi/api/v1/order/{order_id}. MCP tools get_routes, build_order, confirm_order.

What is logged: every call, with the key or agent that made it (or anonymous), the wallet it was for, what was asked and answered, and the order of calls in a session. Policy: https://dweller.fyi/privacy

Examples:
  curl "https://dweller.fyi/api/v1/lookup?ticker=COIN&chain=Solana"
  curl "https://dweller.fyi/api/v1/lookup?address=Xs7ZdzSHLU9ftNJsii5fCeJhoRWSC32SQGzGQtePxNu"
  curl -X POST https://dweller.fyi/api/v1/basket -H "Content-Type: application/json" -d '{"assets":["ESGV","USXF","FRDM","COIN","HOOD","GEO","CXW"],"chain":"Solana"}'
  curl "https://dweller.fyi/api/v1/routes?ticker=COIN&chain=Solana&size_usd=1000"
  curl -X POST https://dweller.fyi/api/v1/order -H "Content-Type: application/json" -d '{"address":"Xs7ZdzSHLU9ftNJsii5fCeJhoRWSC32SQGzGQtePxNu","wallet":"<solana wallet>","amount_usd":100}'
  curl -X POST https://dweller.fyi/api/v1/order/<order_id>/confirm -H "Content-Type: application/json" -d '{"signature":"<signature the wallet got back>"}'
