{"openapi":"3.1.0","info":{"title":"DYOR Fun Developer API","version":"1.2.0","description":"Upload launch media, publish metadata, prepare unsigned Robinhood Chain launch transactions, and read Railway-indexed Neon snapshots without request-time chain scans."},"servers":[{"url":"https://dyorpro.fun"}],"tags":[{"name":"Metadata"},{"name":"Launch"},{"name":"Market"},{"name":"Integration"},{"name":"System"}],"paths":{"/api/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/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/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/v1/launch/prepare":{"post":{"tags":["Launch"],"summary":"Prepare an unsigned launch transaction","description":"Returns EIP-155 transaction fields for chain 4663. 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/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/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/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/v1/integration/config":{"get":{"tags":["Integration"],"summary":"Read production, test and Uniswap contract configuration","responses":{"200":{"description":"Integration configuration"}}}},"/api/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/v1/integration/test-fixtures":{"get":{"tags":["Integration"],"summary":"Read graduated and in-progress legacy test fixtures","responses":{"200":{"description":"Integration test tokens"}}}},"/api/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"}}}}}}}}}}}},"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}$"},"initialBuyEth":{"type":"string","default":"0"},"minTokensOut":{"type":"string","default":"0"}}},"PreparedTransaction":{"type":"object","properties":{"chainId":{"const":4663},"to":{"type":"string"},"data":{"type":"string"},"value":{"type":"string"},"launchFee":{"type":"string"},"initialBuy":{"type":"string"}}},"IntegrationStatus":{"type":"object","properties":{"schemaVersion":{"type":"string"},"chainId":{"const":4663},"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"},"feeTier":{"const":10000}}},"restrictions":{"type":"object","properties":{"maxWalletBps":{"const":200},"maxWalletPercent":{"const":2},"restrictionBlocks":{"type":"integer","enum":[0,50,300],"description":"0 from production block 7968106; 50 from block 7955908; 300 for earlier and legacy test launches"},"endBlock":{"type":"integer"},"active":{"type":"boolean"}}}}},"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 wei"},"liquidityEth":{"type":"string","description":"Current pool WETH balance in wei"},"poolBalanceEth":{"type":"string","description":"Current pool WETH balance formatted in ETH"},"athPoolBalanceEth":{"type":"string","description":"All-time-high indexed pool WETH balance in ETH; fee collection adjustments are intentionally ignored"},"targetLiquidityEth":{"type":"string","description":"Graduation target in wei"},"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 WETH balance; does not require a keeper transaction"}}}}}}