{"name":"SafeToken.fun API","description":"Fair memecoin launchpad on BNB Smart Chain (mainnet). REST API for token list, curve state, and metadata. Use smart contracts for creating tokens and trading (bonding curve, graduation). AI agents and developers can integrate programmatically.","discoverability":"No paid promotion. This API is built for discoverability by crawlers, robots, and AI agents scanning the web.","barrierToLaunch":"Very low. One transaction to create a token; bonding curve seeded with 0.1 BNB. Only 0.05 BNB of buys needed to graduate (0.15 BNB threshold) — low barrier so early users and bots aren't scared off. No large bond or upfront liquidity required.","version":"1.0","baseUrl":"https://safetoken.fun","docs":"https://safetoken.fun/api-docs","agentQuickStart":"Create a token: GET this URL for contracts.tokenFactory and tokenFactoryAbi. For address ending in 5afe: GET /api/tokens/vanity-salt?name=...&symbol=... to get salt and address, then call createTokenWithSalt(name, symbol, burnPercent, salt) on BNB Chain (56). Else call createToken(name, symbol, burnPercent). Then POST /api/tokens with mint, name, symbol, creator, burnPercent. No API key required.","agentFaq":[{"q":"How do I create a token via the API?","a":"GET /api for tokenFactory address and tokenFactoryAbi. For address ending in 5afe: GET /api/tokens/vanity-salt?name=...&symbol=... then createTokenWithSalt(name, symbol, burnPercent, salt). Else createToken(name, symbol, burnPercent). Then POST /api/tokens with mint, name, symbol, creator, burnPercent."},{"q":"How do I get a token address ending in 5afe?","a":"GET /api/tokens/vanity-salt?name=...&symbol=... (query params). Response: { salt, address }. Call TokenFactory.createTokenWithSalt(name, symbol, burnPercent, salt) on-chain. Use the returned address as mint in POST /api/tokens."},{"q":"Do I need an API key?","a":"No. All endpoints are public; no authentication required."},{"q":"What chain?","a":"BNB Smart Chain mainnet (chainId 56). Contract addresses in the manifest are for mainnet."},{"q":"How do I check if the API is up?","a":"GET /api/health returns 200 and { ok: true, status: 'up' }."}],"chain":{"id":56,"name":"BNB Smart Chain","testnetId":97,"testnetName":"BNB Smart Chain Testnet"},"contracts":{"launchpad":"0x183457B3e20B8Bb59B0d7D0F8a01E6EE8D1986DD","tokenFactory":"0x5F98aA6a93d50e6C01CF3d16536b270D9a3676Af","tokenFactoryAbi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"burnPercent","type":"uint8"}],"name":"createToken","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"burnPercent","type":"uint8"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"createTokenWithSalt","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"}],"note":"Agent launches: call TokenFactory.createToken(name, symbol, burnPercent) or createTokenWithSalt for vanity address. Buy/sell via Launchpad contract. Addresses are set at deploy time."},"endpoints":[{"method":"GET","path":"/api","description":"This manifest (API discovery)."},{"method":"GET","path":"/api/health","description":"Health check. Returns 200 + { ok: true, status: 'up' } so bots can verify API is up."},{"method":"GET","path":"/api/tokens","description":"List tokens. Query: page, limit, q (search), board (all|new|graduating|listed), creator, mint, sort (newest|burn)."},{"method":"POST","path":"/api/tokens","description":"Register a token after on-chain creation. Body: mint, name, symbol, creator, burnPercent, description?, imageUrl?, twitterUrl?, telegramUrl?, websiteUrl?, launchpadAddress?."},{"method":"GET","path":"/api/curve/:mint","description":"Bonding curve state for a token (virtual reserves, tokensSold, totalToSell, progress)."},{"method":"GET","path":"/api/curves","description":"Progress for multiple tokens. Query: mints (comma-separated). Returns { curves: { [mint]: { progress, graduated } } }."},{"method":"GET","path":"/api/metadata/:mint","description":"Token metadata (name, symbol, description, image) for explorers and wallets."},{"method":"GET","path":"/api/token/:mint/holders","description":"Holder count and distribution for a token."},{"method":"GET","path":"/api/tokens/vanity-salt","description":"Compute CREATE2 salt for token address ending in 5afe. Query: name, symbol. Returns { salt, address }. Then call createTokenWithSalt(name, symbol, burnPercent, salt) on-chain."},{"method":"POST","path":"/api/upload-image","description":"Upload image to IPFS (Pinata). Requires PINATA_JWT. Body: form data with image file."}],"forAgents":["GET /api returns contracts.tokenFactory, contracts.launchpad, and contracts.tokenFactoryAbi (createToken, createTokenWithSalt) — everything needed to create a token from code.","Discover tokens: GET /api/tokens. Filter by board=new|graduating|listed.","Get curve state: GET /api/curve/{mint} for bonding curve reserves and progress.","Create token on-chain: Use TokenFactory (ABI in manifest). For address ending in 5afe: GET /api/tokens/vanity-salt?name=...&symbol=... then createTokenWithSalt(name, symbol, burnPercent, salt). Else createToken(name, symbol, burnPercent). Then POST /api/tokens to register.","Buy/sell on curve: Call Launchpad contract (buy/sell) until graduation. After graduation, trade on PancakeSwap.","Full docs: https://safetoken.fun/api-docs"]}