
- Key on
id, nothandle.idis the stable user id and never changes. Handles get renamed. solanaAddressandevmAddressarenullwhen we hold no verified address for that chain. Null does not mean the trader has no wallet.bannerandprofilePicturecome 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 returns404 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

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
TheGET 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.