MUSIC//LAUNCH

Agents

No API key or signup. An agent can prepare metadata, launch from its own wallet, read indexed market data and trade through Uniswap v4. The site never takes custody.

Launch a music token

Base (chain 8453) · factory 0x20B50A33719fe1Df58363b99485fBDc860575433 · locker 0x0B2C76923679aCD03E44c96651aF8b85795bCB65 · feeRecipient 0xb42705acCDB6ad6517849D05268E906D61E8c2Ec

First create the metadata record, then call launch(params) on the factory from the launcher wallet. Quote is BTSG 0x0357d61eDe1cbCB38981B11117cFcA1854CA28Ad (free launch, send no ETH), ETH (address zero), or USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 — ETH/USDC quotes send exactly 0.0025 ETH with the call. For ERC20 quotes call findSalt(...) first so the token address sorts above the quote. Supply 0 means the default 1B. startTick sets the opening market cap (multiple of 200; 184200 ≈ 10 ETH FDV for 1B supply). lpFee is in pips (0, 10000 = 1%, 30000 = 3%). Empty recipients = fees burned; otherwise shares in bps summing to 10000.

# free BTSG-quoted music launch
cast send 0x20B50A33719fe1Df58363b99485fBDc860575433 \
  "launch((string,string,string,address,uint256,int24,uint24,bytes32,(address,uint16)[]))" \
  "(Midnight Drive,MDRV,ar://<meta>,0x0357d61eDe1cbCB38981B11117cFcA1854CA28Ad,0,184200,10000,0x$(openssl rand -hex 32),[(0xYourWallet,10000)])" \
  --rpc-url https://mainnet.base.org --private-key $PK

# ETH-quoted (adds the 0.0025 ETH fee)
cast send 0x20B50A33719fe1Df58363b99485fBDc860575433 \
  "launch((string,string,string,address,uint256,int24,uint24,bytes32,(address,uint16)[]))" \
  "(Midnight Drive,MDRV,ar://<meta>,0x0000000000000000000000000000000000000000,0,184200,10000,0x$(openssl rand -hex 32),[(0xYourWallet,10000)])" \
  --value 0.0025ether --rpc-url https://mainnet.base.org --private-key $PK

Prepare metadata first. Music metadata (artist, genre, Arweave audio, cover and links) is registered with POST https://musiclaunch.lol/api/launch/meta using {chain: 'base', launcher, salt, name, symbol, artist, genre, audio_url, duration_seconds?, description?, image_url?, website?, x_handle?} first; it returns the uri to pass as metadataURI and the predicted token address. Use the returned URI unchanged in launch. Upload audio and cover to Arweave first and pass ar://<txid> URIs.

Read

GET https://musiclaunch.lol/api/launch/list?chain=base&sort=new|trending|mcap|volume|gainers&window=1h|24h|all&limit=50
GET https://musiclaunch.lol/api/launch/feed              # latest launches + trades
GET https://musiclaunch.lol/api/launch/meta/<token>      # artist / genre / audio / cover / links
GET https://musiclaunch.lol/api/launch/candles?chain=base&token=0x…&interval=5m
GET https://musiclaunch.lol/api/launch/holders?chain=base&token=0x…
GET https://musiclaunch.lol/api/launch/search?q=<name-or-address>&chain=base
GET https://musiclaunch.lol/llms.txt

Token quantities in indexed responses are raw-unit strings; prices and FDV are floats in quote units. Responses are intended for polling and are not cached by the API.

Trade

Pools are plain Uniswap v4 (quote / token, tick spacing 200, no hook). Swap through the Universal Router with a V4_SWAP command, or any router that speaks v4. Get the pool key with poolKeyOf(token) on the factory. Anyone may call collect(tokenId) on the locker (0x0B2C76923679aCD03E44c96651aF8b85795bCB65) to pay out accrued fees.

After a launch transaction, send POST https://musiclaunch.lol/api/launch/sync?chain=base&tx=0x… to request immediate indexing; otherwise the indexer picks it up on its regular cycle.