Skip to main content
GET /v2/user/handle/{handle} resolves the fictional handle @tradername to a verified Solana wallet and a verified EVM wallet, shown as fictional shortened sample strings 8qNx...vR4m and 0x7aB2...9cF4
  • Key on id, not handle. id is the stable user id and never changes. Handles get renamed.
  • solanaAddress and evmAddress are null when we hold no verified address for that chain. Null does not mean the trader has no wallet.
  • banner and profilePicture come from our image host at /a/<key>.webp. A new picture gets a new URL.
  • A response that carries a wallet counts as one of the plan’s monthly reveals.

Not found

A lookup that finds nothing returns 404 NOT_FOUND. On a wallet lookup it means we hold no verified link from that address to a trader. Cache the negative briefly and ask again later. A user we hold without a verified wallet returns 200 with both addresses null. An address verified by more than one trader returns one record, the trader who verified it first. A wallet lookup needs a base58 Solana address or a 0x-prefixed EVM address. Anything else returns 400.

PnL

Illustrative realized profit for the 24h, 7d and 30d windows (+$1,430, +$109,660, +$104,229) and on-platform cash flow for all time (+$8,120), on one linear scale
returnPct is in percent: 5.82 means 5.82%. One response carries two scopes: all is not profit. A trader who only bought shows a negative all whatever they hold. Use 24h, 7d and 30d for profit. The API reference lists every field. All windows arrive in one call. A response or batch entry with status ready carries a wallet and counts as a reveal. Only ready is charged the hit price. Every other answer, and a 404, costs the miss price. no-wallet does not mean the trader has no wallet. all is null for a trader with no on-platform trade.

Resolve on demand

Live resolution is paused. A handle we already hold with a verified wallet answers 200 at the usual price. Any other handle answers 202 with reason: "unavailable" and retryable: false, and is not charged. The rest of this section describes the endpoint when live resolution runs.
The GET endpoints answer from what we already hold. POST .../resolve asks for an answer we do not hold yet, by handle only.
A 200 costs 30,000 CU. A 202 or a 404 costs 200 CU, except the paused answer above, which is free. The endpoint allows 10 calls a minute per IP. Asking again joins the resolve already running and does not start a second one. retryAfterSeconds also arrives as a Retry-After header. A live answer can take several seconds, so allow for it in your client timeout. When live lookup is paused, an unknown handle returns 202 with reason: "unavailable", retryable: false and a message. No job is queued and the call is free. Cached records stay available and return 200. The x-fomoscan-resolve header reads cached when we already held the record and live when this call produced it. The body is the same either way.