{"openapi":"3.1.0","info":{"title":"DYOR Fun Stable Developer API","version":"1.5.0","description":"Stable Mainnet API (chain ID 988). Every chain-sensitive endpoint is pinned to the independent Stable deployment and database. Pools pair directly with 6-decimal USDT0; native gas is also USDT0 and uses 18-decimal transaction values."},"servers":[{"url":"https://stable-api-production.up.railway.app","description":"Stable API"}],"tags":[{"name":"Metadata"},{"name":"Launch"},{"name":"Market"},{"name":"Integration"},{"name":"System"}],"paths":{"/api/stable/v1/images":{"post":{"tags":["Metadata"],"summary":"Upload a token image","description":"PNG, JPEG, WebP or GIF; any aspect ratio; max 4.5 MB. Images are auto-oriented, center-cropped, and normalized to a 500x500 WebP.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Uploaded image","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageUpload"}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"/api/stable/v1/metadata":{"post":{"tags":["Metadata"],"summary":"Create token metadata","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataInput"}}}},"responses":{"200":{"description":"Metadata created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataCreated"}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"/api/stable/v1/metadata/{id}":{"get":{"tags":["Metadata"],"summary":"Read token metadata","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"ERC-20 metadata document"},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"/api/stable/v1/launch/prepare":{"post":{"tags":["Launch"],"summary":"Prepare an unsigned launch transaction","description":"Returns unsigned Stable Mainnet transaction fields pinned to chain ID 988. The caller signs and broadcasts; the API never receives a private key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchInput"}}}},"responses":{"200":{"description":"Unsigned transaction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreparedTransaction"}}}},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}},"503":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"/api/stable/v1/tokens":{"get":{"tags":["Market"],"summary":"List indexed launches","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","description":"nextCursor from the previous response","schema":{"type":"integer"}}],"responses":{"200":{"description":"Paginated token list"}}}},"/api/stable/v1/tokens/{address}":{"get":{"tags":["Market"],"summary":"Read token and live graduation progress","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"responses":{"200":{"description":"Token detail","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"/api/stable/v1/tokens/{address}/trades":{"get":{"tags":["Market"],"summary":"Read recent indexed V3 swaps","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"Recent buy and sell activity"},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"/api/stable/v1/portfolio/{address}":{"get":{"tags":["Market"],"summary":"Read wallet launch and indexed creator reward history","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"responses":{"200":{"description":"Created tokens, reward assignments and harvested fee totals"},"400":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"/api/stable/v1/integration/config":{"get":{"tags":["Integration"],"summary":"Read Stable production, Uniswap and mechanism configuration","responses":{"200":{"description":"Integration configuration"}}}},"/api/stable/v1/integration/status/{address}":{"get":{"tags":["Integration"],"summary":"Read stable progress, graduation and migration status","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}}],"responses":{"200":{"description":"Integration token status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntegrationStatus"}}}},"404":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"/api/stable/v1/integration/test-fixtures":{"get":{"tags":["Integration"],"summary":"Read graduated and in-progress legacy test fixtures","responses":{"200":{"description":"Integration test tokens"}}}},"/api/stable/v1/health":{"get":{"tags":["System"],"summary":"Read API and chain health","responses":{"200":{"description":"Healthy"},"503":{"description":"Error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"/api/stable/v1/market/trades":{"get":{"tags":["Market"],"summary":"Read recent swaps across all Stable DYOR pools","responses":{"200":{"description":"Recent Stable buy and sell activity"}}}},"/api/stable/v1/market/overview":{"get":{"tags":["Market"],"summary":"Read Stable global metrics and protocol/indexer state","responses":{"200":{"description":"Stable market and protocol overview"}}}},"/api/stable/v1/tokens/{address}/holders":{"get":{"tags":["Market"],"summary":"Read the indexed Stable ERC-20 holder snapshot","responses":{"200":{"description":"Top Stable token holders and holder count"},"404":{"description":"Token not indexed"},"503":{"description":"Holder source temporarily unavailable"}}}}},"components":{"schemas":{"ImageUpload":{"type":"object","required":["id","url"],"properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string"}}},"MetadataInput":{"type":"object","required":["name","symbol","image"],"properties":{"name":{"type":"string","maxLength":60},"symbol":{"type":"string","maxLength":20},"description":{"type":"string","maxLength":256},"image":{"type":"string"},"website":{"type":"string","format":"uri"},"x":{"type":"string","format":"uri"},"telegram":{"type":"string","format":"uri"}}},"MetadataCreated":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"uri":{"type":"string","format":"uri"}}},"LaunchInput":{"type":"object","required":["name","symbol","metadataUri","feeRecipient"],"properties":{"name":{"type":"string","maxLength":60},"symbol":{"type":"string","maxLength":20},"metadataUri":{"type":"string","format":"uri"},"feeRecipient":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"sender":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"Actual transaction sender. Supply this so the API can apply any Factory fee exemption."},"initialBuyEth":{"type":"string","default":"0","description":"Legacy compatibility name. Initial buy in the selected chain's native asset: ETH on Robinhood, USDC on Arc, or USDT0 on Stable. Arc and Stable accept at most 6 decimal places."},"minTokensOut":{"type":"string","default":"0"}}},"PreparedTransaction":{"type":"object","properties":{"chain":{"const":"stable"},"chainId":{"const":988},"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"},"launchFee":{"type":"string"},"baseLaunchFee":{"type":"string"},"feeExempt":{"type":"boolean"},"initialBuy":{"type":"string"}}},"IntegrationStatus":{"type":"object","properties":{"schemaVersion":{"type":"string"},"chain":{"const":"stable"},"chainId":{"const":988},"environment":{"enum":["production","integration-test"]},"token":{"type":"string"},"factory":{"type":"string"},"pool":{"type":"string"},"positionId":{"type":"string"},"progress":{"type":"object","properties":{"bps":{"type":"integer","minimum":0,"maximum":10000},"percent":{"type":"number"},"graduated":{"type":"boolean"},"currentLiquidityWei":{"type":"string"},"athLiquidityWei":{"type":"string"},"targetLiquidityWei":{"type":"string"}}},"migration":{"type":"object","properties":{"required":{"const":false},"migrated":{"const":false},"status":{"const":"not-applicable"}}},"trading":{"type":"object","properties":{"venue":{"const":"uniswap-v3"},"internalMarket":{"const":false},"bondingCurve":{"const":false},"pool":{"type":"string"},"pairToken":{"type":"string"},"pairSymbol":{"const":"USDT0"},"pairDecimals":{"const":6},"feeTier":{"const":10000}}},"restrictions":{"type":"object","properties":{"maxWalletBps":{"const":0},"maxWalletPercent":{"const":0},"restrictionBlocks":{"const":0},"endBlock":{"type":"integer"},"active":{"type":"boolean"},"initialBuyExempt":{"const":false}}}}},"Token":{"type":"object","properties":{"token":{"type":"string"},"pool":{"type":"string"},"deployer":{"type":"string"},"position_id":{"type":"string"},"name":{"type":["string","null"]},"symbol":{"type":["string","null"]},"image":{"type":["string","null"]},"marketCapEth":{"type":"string","description":"Current market cap in raw 6-decimal USDT0 units; the legacy field name does not mean ETH on Stable"},"liquidityEth":{"type":"string","description":"Current pool-side balance in raw 6-decimal USDT0 units"},"poolBalanceEth":{"type":"string","description":"Current pair-token balance formatted for display"},"athPoolBalanceEth":{"type":"string","description":"All-time-high indexed pair-token balance; fee collection adjustments are intentionally ignored"},"targetLiquidityEth":{"type":"string","description":"Graduation target in raw 6-decimal USDT0 units; normally 9000000000"},"progressBps":{"type":"integer","minimum":0,"maximum":10000,"description":"Current pool-balance progress; permanently 10000 after ATH reaches target"},"graduated":{"type":"boolean","description":"Derived from ATH pool pair-token balance; does not require a keeper transaction"}}}}}}