{"openapi":"3.1.0","info":{"title":"swarm0x api","version":"1","description":"Can a token on Robinhood Chain be bought and sold, and what does it cost. Every answer comes from a real buy and sell run inside a simulation, so nothing is sent and nothing costs gas."},"servers":[{"url":"https://app.swarm0x.sh"}],"externalDocs":{"url":"https://docs.swarm0x.sh/api/"},"security":[{},{"bearer":[]},{"apiKey":[]}],"paths":{"/v1/check/{address}":{"get":{"summary":"Check a token","operationId":"checkToken","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"description":"The token contract."}],"responses":{"200":{"description":"What the nest found.","headers":{"x-ratelimit-limit":{"schema":{"type":"integer"}},"x-ratelimit-remaining":{"schema":{"type":"integer"}},"x-cache":{"schema":{"type":"string","enum":["hit","miss"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Check"}}}},"400":{"description":"Not a token address. code: bad_address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The key is not live. code: bad_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many calls. code: rate_limited or daily_limit. retry-after says how long to wait.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"The chain did not answer. code: upstream","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The nest is at its limit. code: busy or budget_spent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/holders/{address}":{"get":{"summary":"Who holds a token","operationId":"tokenHolders","description":"Read from the token's own transfers and the fills on its pools, back to its first block. A busy token answers with status reading first: only its launch is in that answer, and the whole one is ready about half a minute later.","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"description":"The token contract."}],"responses":{"200":{"description":"What the nest found.","headers":{"x-ratelimit-limit":{"schema":{"type":"integer"}},"x-ratelimit-remaining":{"schema":{"type":"integer"}},"x-cache":{"schema":{"type":"string","enum":["hit","miss"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Holders"}}}},"400":{"description":"Not a token address. code: bad_address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"The key is not live. code: bad_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not a token the nest can read holders for. code: not_a_token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many calls. code: rate_limited or daily_limit. retry-after says how long to wait.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"The chain did not answer. code: upstream or holders_failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"The nest is at its limit. code: busy, budget_spent, holders_busy, holders_budget or holders_no_archive","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/health":{"get":{"summary":"Is the nest following the chain","operationId":"health","security":[{}],"responses":{"200":{"description":"ok is false when the nest has fallen behind.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"head":{"type":"integer"},"blocksBehind":{"type":"integer"},"ethUsd":{"oneOf":[{"type":"number"},{"type":"null"}]}}}}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"},"apiKey":{"type":"apiKey","in":"header","name":"x-api-key"}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"Holders":{"type":"object","required":["address","chainId","status","transfersRead","token","holders","top","launch","snipers","bundle","deployer","smartMoney","repeatCrowd","checkedAt"],"properties":{"address":{"type":"string"},"chainId":{"type":"integer"},"checkedAt":{"type":"string","format":"date-time"},"transfersRead":{"type":"integer"},"status":{"type":"string","enum":["complete","reading","partial"],"description":"complete: every transfer was read. reading: a busy token, only the launch is in this answer, ask again in half a minute. partial: counts are a floor."},"token":{"type":"object","properties":{"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]},"decimals":{"type":"integer"},"totalSupply":{"type":"string","description":"Whole tokens, as a decimal string."}}},"marketCapUsd":{"oneOf":[{"type":"number"},{"type":"null"}]},"holders":{"oneOf":[{"type":"object","properties":{"count":{"type":"integer"},"countIsFloor":{"type":"boolean"},"top10Bps":{"type":"integer","description":"Hundredths of a percent of total supply."},"inPoolsBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"burnedBps":{"type":"integer","description":"Sitting at a burn address, in hundredths of a percent of supply."},"freshInTop":{"type":"integer","description":"Top holders made within 3 days of their first buy."},"agedInTop":{"type":"integer","description":"Top holders whose age is known."}}},{"type":"null"}]},"top":{"type":"array","description":"The ten biggest holders. Pools, the curve and burn addresses are left out.","items":{"type":"object","properties":{"address":{"type":"string"},"balance":{"type":"string"},"supplyBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"firstSeen":{"oneOf":[{"type":"string","format":"date-time","description":"The first time anything reached this wallet on the chain."},{"type":"null"}]},"ageDays":{"oneOf":[{"type":"integer"},{"type":"null"}]},"entryMarketCapUsd":{"oneOf":[{"type":"number","description":"The market cap it bought at, averaged over its buys by size."},{"type":"null"}]},"multiple":{"oneOf":[{"type":"number","description":"Market cap now over market cap at entry."},{"type":"null"}]},"soldBps":{"type":"integer","description":"Of everything that ever reached it, the share it has sold, in hundredths of a percent."},"tags":{"type":"array","items":{"type":"string","enum":["deployer","creator","sniper","bundle","fresh","winner","contract","funded_by_deployer"]}}}}},"launch":{"oneOf":[{"type":"object","properties":{"block":{"type":"integer"},"time":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"windowBlocks":{"type":"integer","description":"Snipers and bundles are looked for in the launch block and this many after it."}}},{"type":"null"}]},"snipers":{"oneOf":[{"type":"object","properties":{"wallets":{"type":"integer"},"boughtBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"heldBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"soldOut":{"type":"integer"}}},{"type":"null"}]},"bundle":{"oneOf":[{"type":"object","description":"Three or more launch buyers behind one funder, or filled in one transaction.","properties":{"wallets":{"type":"integer"},"funder":{"oneOf":[{"type":"string"},{"type":"null"}]},"sameTransaction":{"type":"boolean"},"boughtBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"heldBps":{"type":"integer","description":"Hundredths of a percent of total supply."}}},{"type":"null"}]},"deployer":{"oneOf":[{"type":"object","properties":{"address":{"type":"string"},"source":{"type":"string","enum":["pons","deployment","launch_tx"]},"status":{"type":"string","enum":["never_held","holds_all","holds_some","sold_out","moved_out","burned_out"]},"receivedBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"boughtBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"soldBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"movedBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"pooledBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"burnedBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"heldBps":{"type":"integer","description":"Hundredths of a percent of total supply."}}},{"type":"null"}]},"smartMoney":{"oneOf":[{"type":"object","description":"Wallets in profit on the winners list that hold this token.","properties":{"holding":{"type":"integer"},"soldOut":{"type":"integer"},"wallets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"rank":{"type":"integer"},"window":{"type":"string","enum":["24h","7d","30d","all"],"description":"The winners board the wallet ranks on, the nearest one first. 30d and all were added on 2026-09-20."},"profitEth":{"type":"number"},"winRate":{"type":"number"},"closed":{"type":"integer"},"supplyBps":{"type":"integer","description":"Hundredths of a percent of total supply."},"entryMarketCapUsd":{"oneOf":[{"type":"number"},{"type":"null"}]},"multiple":{"oneOf":[{"type":"number"},{"type":"null"}]},"biggestWin":{"oneOf":[{"type":"object","description":"The most eth it ever took out of one token it has closed.","properties":{"token":{"type":"string"},"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]},"profitEth":{"type":"number"},"spentEth":{"type":"number"},"multiple":{"type":"number"},"closedAt":{"type":"string","format":"date-time"}}},{"type":"null"}]}}}}}},{"type":"null"}]},"repeatCrowd":{"oneOf":[{"type":"object","description":"Top holders that also bought the same deployer's other launches.","properties":{"wallets":{"type":"integer"},"ofTop":{"type":"integer"},"mostLaunches":{"type":"integer"},"deployerLaunches":{"type":"integer"}}},{"type":"null"}]}}},"Check":{"type":"object","required":["address","chainId","verdict","flags","token","venue","trade","price","pons","checkedAt"],"properties":{"address":{"type":"string"},"chainId":{"type":"integer"},"checkedAt":{"type":"string","format":"date-time"},"verdict":{"type":"object","required":["code","level","text"],"properties":{"code":{"type":"string","enum":["ok","cannot_sell","cannot_buy","toll_pool","thin_pool","high_fees","heavy_fees","no_pool","empty_pool","no_contract","not_a_token","quote_asset","unproven"]},"level":{"type":"string","enum":["ok","warn","danger","unknown"],"description":"unknown means the nest could not find out. It is not a pass."},"text":{"type":"string"}}},"flags":{"type":"array","items":{"type":"string","enum":["owner_active","hook","dynamic_fee","toll_pool","thin_pool","high_creator_tax","serial_deployer","deployer_sold","snipe_tax_active","curve_closed","no_liquidity"]},"description":"Worth knowing, but not what decided the verdict."},"token":{"type":"object","properties":{"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]},"name":{"oneOf":[{"type":"string"},{"type":"null"}]},"decimals":{"oneOf":[{"type":"integer"},{"type":"null"}]},"totalSupply":{"oneOf":[{"type":"string","description":"Whole tokens, as a decimal string."},{"type":"null"}]},"owner":{"oneOf":[{"type":"string"},{"type":"null"}]},"ownerRenounced":{"oneOf":[{"type":"boolean"},{"type":"null"}]}}},"venue":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["pons_curve","pons_pool","uniswap_v3","uniswap_v4"]},"quote":{"type":"string","description":"eth, weth, usdg, or the address of the quote token."},"poolFeeBps":{"oneOf":[{"type":"number","description":"The pool keeps this much of every swap. Null when a hook sets it swap by swap."},{"type":"null"}]},"dynamicFee":{"type":"boolean"},"hook":{"oneOf":[{"type":"string"},{"type":"null"}]},"pool":{"oneOf":[{"type":"string"},{"type":"null"}]},"poolId":{"oneOf":[{"type":"string"},{"type":"null"}]},"poolsFound":{"type":"integer"}}},{"type":"null"}]},"trade":{"oneOf":[{"type":"object","properties":{"method":{"type":"string","enum":["simulated_trade","curve_math","pool_quote"],"description":"simulated_trade: a real buy and sell inside eth_simulateV1. curve_math: a simulated buy and the verified curve formula for the sell. pool_quote: quoted both ways through the pool."},"paid":{"type":"object","properties":{"amount":{"type":"string"},"asset":{"type":"string"}}},"tokensOut":{"oneOf":[{"type":"string"},{"type":"null"}]},"roundTripLossBps":{"oneOf":[{"type":"integer","description":"What buying and selling straight back loses, in hundredths of a percent."},{"type":"null"}]},"feesBps":{"oneOf":[{"type":"integer"},{"type":"null"}]},"priceImpactBps":{"oneOf":[{"type":"integer"},{"type":"null"}]},"buyReverts":{"oneOf":[{"type":"string"},{"type":"null"}]},"sellReverts":{"oneOf":[{"type":"string"},{"type":"null"}]}}},{"type":"null"}]},"price":{"oneOf":[{"type":"object","properties":{"usd":{"oneOf":[{"type":"number"},{"type":"null"}]},"marketCapUsd":{"oneOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]},"pons":{"oneOf":[{"type":"object","description":"Only for tokens launched on Pons.","properties":{"phase":{"type":"string","enum":["curve","graduated"]},"curveFillBps":{"oneOf":[{"type":"integer"},{"type":"null"}]},"buyTaxBps":{"type":"integer"},"sellTaxBps":{"type":"integer"},"creatorTaxBps":{"type":"integer"},"deployer":{"oneOf":[{"type":"object","properties":{"address":{"type":"string"},"launches":{"type":"integer"},"graduated":{"type":"integer"},"soldOwn":{"type":"integer"}}},{"type":"null"}]}}},{"type":"null"}]}}}}}}