{"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. The same answers, and more, are served to ai agents as tools over the model context protocol at POST /mcp."},"servers":[{"url":"https://api.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/simulate":{"post":{"summary":"Run a transaction before signing it","operationId":"simulateTransaction","description":"Runs one transaction, or up to six in order, from the wallet that would send them, inside eth_simulateV1 on the latest block. Nothing is sent. What moved is read from the wallet's balances. If the wallet comes out holding a token, the same simulated block sells it straight back, to prove there is a way out.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["from"],"properties":{"from":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"data":{"type":"string","description":"Calldata as hex."},"value":{"type":"string","description":"Wei, as a whole number in a string or as hex."},"calls":{"type":"array","maxItems":6,"items":{"type":"object","required":["to"],"properties":{"to":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"data":{"type":"string"},"value":{"type":"string"}}}},"fund":{"type":"boolean","description":"Run it as if the wallet held plenty of eth."}}}}}},"responses":{"200":{"description":"What the simulation showed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Simulation"}}}},"400":{"description":"code: bad_input or bad_json","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"code: bad_key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"code: rate_limited or daily_limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"code: busy or budget_spent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/prepare/buy":{"post":{"summary":"Write a buy for a wallet to sign","operationId":"prepareBuy","description":"Unsigned transactions for your own wallet to sign. The nest holds no keys and sends nothing. The buy is rehearsed from your wallet first, the least amount the swap will accept is set from what the rehearsal produced, and the final form is run once more with a sell after it. refused is true, and steps is empty, when what it buys cannot be sold or a check calls the token a trap.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token","from","amount"],"properties":{"token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"from":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","description":"How much to spend, in what the venue is paid in (venue.pays in the answer): \"0.05\"."},"slippageBps":{"type":"integer","minimum":1,"maximum":5000,"default":100},"fund":{"type":"boolean"}}}}}},"responses":{"200":{"description":"The steps, as they were run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedTrade"}}}},"400":{"description":"code: bad_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"code: not_a_token or no_route","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"code: would_fail or too_small","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"code: rate_limited or daily_limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/prepare/sell":{"post":{"summary":"Write a sell for a wallet to sign","operationId":"prepareSell","description":"The same for a sell. Approvals the wallet has already given are left out. A sell is always written, whatever a check says: it is the way out.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["token","from"],"properties":{"token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"from":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"amount":{"type":"string","description":"\"all\", or tokens as a plain number in a string."},"percent":{"type":"number","exclusiveMinimum":0,"maximum":100},"slippageBps":{"type":"integer","minimum":1,"maximum":5000,"default":100}}}}}},"responses":{"200":{"description":"The steps, as they were run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedTrade"}}}},"400":{"description":"code: bad_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"code: no_route","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"code: nothing_to_sell or would_fail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/keys/nonce":{"post":{"summary":"A message for a wallet to sign","operationId":"keyNonce","security":[{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address"],"properties":{"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}}}}},"responses":{"200":{"description":"Sign message with personal_sign, then POST /v1/keys. Good for ten minutes.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"sign":{"type":"string"}}}}}},"400":{"description":"code: bad_address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"code: rate_limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/keys":{"post":{"summary":"A free key, for one signature","operationId":"createKey","security":[{}],"description":"Makes the wallet an account if it had none, and answers with a key, shown once. agent true marks the account as a program.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["address","signature"],"properties":{"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"signature":{"type":"string"},"label":{"type":"string"},"agent":{"type":"boolean"},"name":{"type":"string","description":"What the agent is called. Letters, digits and spaces."}}}}}},"responses":{"200":{"description":"The key.","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string"},"shownOnce":{"type":"boolean"},"mite":{"type":"object","properties":{"designation":{"type":"string"},"wallet":{"type":"string"},"agent":{"type":"boolean"}}},"limits":{"type":"object","properties":{"perMinute":{"type":"integer"},"perDay":{"type":"integer"}}}}}}}},"401":{"description":"code: bad_signature","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"code: too_many_keys","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/credits":{"get":{"summary":"What a key has paid for, and how to pay","operationId":"credits","responses":{"200":{"description":"open is false until the nest takes payments. Every key is free up to its daily limit either way.","content":{"application/json":{"schema":{"type":"object","properties":{"open":{"type":"boolean"},"balance":{"type":"integer"},"free":{"type":"object","properties":{"perMinute":{"type":"integer"},"perDay":{"type":"integer"}}},"holders":{"type":"object","description":"The limits for a key whose wallet holds at least min whole tokens. live is false until the token exists.","properties":{"perMinute":{"type":"integer"},"perDay":{"type":"integer"},"min":{"type":"integer"},"live":{"type":"boolean"}}},"pay":{"oneOf":[{"type":"object","properties":{"payTo":{"type":"string"},"asset":{"type":"string"},"symbol":{"type":"string"},"callsPerUsdg":{"type":"integer"},"how":{"type":"string"}}},{"type":"null"}]}}}}}},"401":{"description":"code: key_needed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Count a usdg payment already sent","operationId":"redeemCredits","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tx"],"properties":{"tx":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}}}}}},"responses":{"200":{"description":"Calls credited.","content":{"application/json":{"schema":{"type":"object","properties":{"credited":{"type":"integer"},"usdg":{"type":"string"},"balance":{"type":"integer"}}}}}},"404":{"description":"code: not_open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"code: already_used","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"code: no_such_tx, tx_failed or no_payment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tools.json":{"get":{"summary":"Every mcp tool as a plain function definition","operationId":"tools","security":[{}],"responses":{"200":{"description":"The same table POST /mcp serves, for agent frameworks that load function definitions.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/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"}}}}},"Simulation":{"type":"object","properties":{"chainId":{"type":"integer"},"block":{"type":"integer"},"from":{"type":"string"},"verdict":{"type":"object","required":["code","level","text"],"properties":{"code":{"type":"string","enum":["ok","tx_reverts","cannot_sell","heavy_loss","high_loss","no_route","nothing_received","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"}}},"calls":{"type":"array","items":{"type":"object","properties":{"ok":{"type":"boolean"},"gasUsed":{"type":"integer"},"reverts":{"oneOf":[{"type":"string"},{"type":"null"}]}}}},"spent":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"string","description":"A plain decimal string."},"raw":{"type":"string","description":"Base units."},"asset":{"type":"string","description":"eth, weth, usdg, or a token address."},"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]}}}},"received":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"string","description":"A plain decimal string."},"raw":{"type":"string","description":"Base units."},"asset":{"type":"string","description":"eth, weth, usdg, or a token address."},"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]}}}},"approvals":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string"},"spender":{"type":"string"},"amount":{"oneOf":[{"type":"string"},{"type":"null"}]},"unlimited":{"type":"boolean"}}}},"sellBack":{"oneOf":[{"type":"object","properties":{"token":{"type":"string"},"venue":{"type":"string","enum":["pons_curve","pons_pool","uniswap_v3","uniswap_v4"]},"at":{"oneOf":[{"type":"string"},{"type":"null"}]},"sold":{"type":"string"},"back":{"oneOf":[{"type":"object","properties":{"amount":{"type":"string","description":"A plain decimal string."},"raw":{"type":"string","description":"Base units."},"asset":{"type":"string","description":"eth, weth, usdg, or a token address."},"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]}}},{"type":"null"}]},"roundTripLossBps":{"oneOf":[{"type":"integer"},{"type":"null"}]},"reverts":{"oneOf":[{"type":"string"},{"type":"null"}]}}},{"type":"null"}]},"check":{"oneOf":[{"type":"object","properties":{"address":{"type":"string"},"verdict":{"type":"object"},"flags":{"type":"array","items":{"type":"string"}}}},{"type":"null"}]},"simulatedAt":{"type":"string","format":"date-time"}}},"PreparedTrade":{"type":"object","properties":{"chainId":{"type":"integer"},"side":{"type":"string","enum":["buy","sell"]},"from":{"type":"string"},"block":{"type":"integer"},"token":{"type":"object","properties":{"address":{"type":"string"},"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]},"decimals":{"type":"integer"}}},"venue":{"type":"object","properties":{"kind":{"type":"string"},"at":{"oneOf":[{"type":"string"},{"type":"null"}]},"pays":{"type":"string","enum":["eth","weth","usdg"]}}},"spend":{"type":"object","properties":{"amount":{"type":"string","description":"A plain decimal string."},"raw":{"type":"string","description":"Base units."},"asset":{"type":"string","description":"eth, weth, usdg, or a token address."},"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]}}},"expect":{"type":"object","description":"What the rehearsal produced, and min, the least the swap will accept before it reverts on its own.","properties":{"amount":{"type":"string"},"raw":{"type":"string"},"asset":{"type":"string"},"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]},"min":{"type":"string"},"minRaw":{"type":"string"}}},"slippageBps":{"type":"integer"},"validUntil":{"type":"string","format":"date-time"},"refused":{"type":"boolean"},"steps":{"type":"array","description":"Sign and send in order, to chain id 4663. value is wei.","items":{"type":"object","properties":{"n":{"type":"integer"},"does":{"type":"string"},"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"},"gas":{"type":"integer"}}}},"alreadyDone":{"type":"array","items":{"type":"string"}},"sellBack":{"oneOf":[{"type":"object","properties":{"token":{"type":"string"},"venue":{"type":"string","enum":["pons_curve","pons_pool","uniswap_v3","uniswap_v4"]},"at":{"oneOf":[{"type":"string"},{"type":"null"}]},"sold":{"type":"string"},"back":{"oneOf":[{"type":"object","properties":{"amount":{"type":"string","description":"A plain decimal string."},"raw":{"type":"string","description":"Base units."},"asset":{"type":"string","description":"eth, weth, usdg, or a token address."},"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]}}},{"type":"null"}]},"roundTripLossBps":{"oneOf":[{"type":"integer"},{"type":"null"}]},"reverts":{"oneOf":[{"type":"string"},{"type":"null"}]}}},{"type":"null"}]},"verdict":{"type":"object","required":["code","level","text"],"properties":{"code":{"type":"string","enum":["ok","tx_reverts","cannot_sell","heavy_loss","high_loss","no_route","nothing_received","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"}}},"check":{"type":"object"},"preparedAt":{"type":"string","format":"date-time"}}},"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"}]}}}}}}