Launch API
Launch tokens programmatically. Non-custodial — OV3 prepares the transaction, you sign it.
How it works
The launch API is non-custodial. You send your token parameters, OV3 pins the metadata to IPFS and returns the exact transaction (to, data, value) for the OV3InstantLauncher.launch call on Robinhood Chain (chain ID 4663). That call deploys your token and opens a locked Uniswap V3 pool for it in one transaction — tradeable from block one. You then sign and broadcast that transaction from your own wallet. OV3 never touches your keys.
Endpoint
POST https://ov3.fun/api/launch/prepare
Send a GET to the same URL to fetch the live machine-readable spec (fields, defaults, and the current launcher address).
Request body
name— string, requiredsymbol— string, required (≤ 10 chars)description— string, optionalimage— image URL oripfs://, optionalbanner— image URL, optionalsocials—{ twitter, telegram, discord, github, gitbook, website }, optionalfeeDistribution—Creator | None(defaultNone)creatorFeeBps— creator share of the pool's 1% swap fee, in bps:5000–9000(default5000= 50%)tokenSupply—10K | 1M | 10M | 100M | 1B | 10B(default1B)developerBuyEth— optional ETH to buy your own token at launchfeeRecipient—0xaddress receiving creator fees (Creator mode)feeRecipients/feeBps— arrays for on-chain fee splitting (Creator mode)
Example — prepare
curl -X POST https://ov3.fun/api/launch/prepare \
-H "content-type: application/json" \
-d '{
"name": "GrowthCoin",
"symbol": "GROW",
"description": "A token launched on Robinhood Chain.",
"creatorFeeBps": 7000,
"socials": { "twitter": "https://x.com/growthcoin" }
}'Response:
{
"chainId": 4663,
"to": "0x...factory",
"data": "0x...calldata",
"value": "0",
"metadataUri": "ipfs://...",
"note": "Sign and broadcast this transaction from your own wallet..."
}Example — sign & broadcast (viem)
import { createWalletClient, http, defineChain } from "viem";
import { privateKeyToAccount } from "viem/accounts";
const rhc = defineChain({
id: 4663,
name: "Robinhood Chain",
nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
rpcUrls: { default: { http: ["https://rpc.mainnet.chain.robinhood.com"] } },
});
const prep = await fetch("https://ov3.fun/api/launch/prepare", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ name: "GrowthCoin", symbol: "GROW" }),
}).then((r) => r.json());
const account = privateKeyToAccount(process.env.PRIVATE_KEY);
const wallet = createWalletClient({ account, chain: rhc, transport: http() });
const hash = await wallet.sendTransaction({
to: prep.to,
data: prep.data,
value: BigInt(prep.value),
});
console.log("launch tx:", hash);The new token and Uniswap V3 pool addresses are emitted in the InstantLaunchedevent of the transaction receipt. The pool's 1% swap fee and the 0.50% protocol fee are enforced by the contract regardless of API input.