Launch API
Launch tokens programmatically. Non-custodial — Furnace prepares the transaction, you sign it.
How it works
The launch API is non-custodial. You send your token parameters, Furnace pins the metadata to IPFS and returns the exact transaction (to, data, value) for the FurnaceLaunchFactory.launchToken call on Robinhood Chain (chain ID 4663). You then sign and broadcast that transaction from your own wallet. Furnace never touches your keys.
Endpoint
POST https://foragepad.com/api/launch/prepare
Send a GET to the same URL to fetch the live machine-readable spec (fields, defaults, and the current factory 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 }, optionalprofile—Memecoin | Growth | Bluechip | Custom(defaultGrowth)feeDistribution—Creator | BuybackBurn | AddLiquidity | Staking | None(defaultNone)bondingCurveFeeBps— fixed at150(1.50% total trade fee)postGradFeeBps—0–135(default50)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://foragepad.com/api/launch/prepare \
-H "content-type: application/json" \
-d '{
"name": "ForgeCoin",
"symbol": "FORGE",
"description": "A token forged on Robinhood Chain.",
"profile": "Growth",
"socials": { "twitter": "https://x.com/forgecoin" }
}'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://foragepad.com/api/launch/prepare", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ name: "ForgeCoin", symbol: "FORGE" }),
}).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 bonding-curve addresses are emitted in the Launched event of the transaction receipt. The 1.50% total trade fee and the 0.50% protocol split are enforced by the contract regardless of API input.
