Launch from your own code
One call to Clipfund builds your launch transaction and co-signs it. You sign it with your wallet and send it yourself. Clipfund watches the chain, lists the token on Explore within seconds, and its campaign starts collecting fees. No sign-in needed.
Overview
- 1Ask Clipfund to build itOne POST with your token details and wallet.
- 2Sign and sendYour wallet pays and signs. You send it with your RPC.
- 3Show up on ExploreWe see it on-chain and list it. Nothing else to call.
Account keys
These values are live from this Clipfund server.
| Account | Address | Used for |
|---|---|---|
| Pump program | 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P | create_v2 |
| Pump fees program | pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ | fee sharing config and shares |
| PumpSwap program | pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA | trading after graduation |
| Quote mint (WSOL) | So11111111111111111111111111111111111111112 | quoteMint for update_fee_shares_v2 |
| Clipfund platform wallet | GWPsnZHy2i3RCJhkQT1pyiqVweqRucsxqmi267tjFJGb | shareholder at exactly 1000 bps |
| Clipfund admin | 27DmJunQPVWHrW9i5yudtmPmuQ5vJGhWgjZGUkPt2fr2 | token creator and split admin; co-signs every launch |
| Address lookup table | Hyif6eWb8x88RVrvjPfabsgRYnwkVnyByEXTVTXbUcyP | optional, makes the tx smaller |
| Share | Value | Rule |
|---|---|---|
| Platform | 1000 bps (10%) | Exactly this. Fixed. |
| Campaign | 5000-9000 bps | At least 50%. Goes to your campaign wallet. |
| Creator | 0-4000 bps | The rest. Any wallet you choose. |
Build the launch
POST /api/launch/prepare with multipart form data. Clipfund picks a fresh campaign wallet and a mint, stores your image and metadata, builds the transaction, and signs it with the mint and the Clipfund admin key.
| Field | Value | Meaning |
|---|---|---|
| creator | required | Your wallet address. It pays, signs, and gets the creator share. |
| name, symbol | required | Token name and ticker. |
| image | required | Token image file. |
| campaignBps | 5000-9000 | Campaign share. Default 9000. |
| description, twitter, telegram, website | optional | Shown on pump.fun. |
| cpmCents, platforms, guidelines, watermark | optional | Campaign settings. Defaults: 100, all 4, empty, $TICKER. |
The answer has mint and txBase64. Sign it with your wallet first, then POST /api/launch/cosign with { mint, txBase64 }. Clipfund checks that it is exactly the transaction it built, adds the mint and admin signatures, sends it, and returns the signature. Do it within about a minute, or the blockhash expires. For a dev buy, call POST /api/trade after the launch lands.
What is inside
You can check every instruction before you sign. The launch transaction holds:
| # | Instruction | Program |
|---|---|---|
| 1 | set compute unit limit | Compute budget |
| 2 | create_v2 (creator = Clipfund admin, user = you) | Pump |
| 3 | transfer 0.00585 SOL from you to the Clipfund admin, for the fee config rent | System |
| 4 | create_fee_sharing_config | Pump fees |
| 5 | update_fee_shares_v2 (you, campaign wallet, platform wallet) | Pump fees |
pump.fun no longer lets anyone lock a split forever. Clipfund holds the split's admin key, so a creator cannot move the campaign share to themselves after launch.
Full example
Node 20+ with @solana/web3.js and bs58. The buy at the end is optional. Keep the secret key in an environment variable.
import { Connection, Keypair, VersionedTransaction } from "@solana/web3.js";
import bs58 from "bs58";
import { readFile } from "node:fs/promises";
const BASE = "https://clipfund.fun";
const connection = new Connection(process.env.RPC_URL!, "confirmed");
const creator = Keypair.fromSecretKey(bs58.decode(process.env.CREATOR_SECRET!));
const form = new FormData();
form.append("creator", creator.publicKey.toBase58());
form.append("name", "Clip Coin");
form.append("symbol", "CLIP");
form.append("description", "Funds clippers on Content Rewards.");
form.append("image", new Blob([await readFile("logo.png")], { type: "image/png" }), "logo.png");
form.append("campaignBps", "9000");
const post = (path, body) =>
fetch(BASE + path, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(body) })
.then((r) => r.json());
const data = await fetch(BASE + "/api/launch/prepare", { method: "POST", body: form }).then((r) => r.json());
if (!data.txBase64) throw new Error(data.error);
const tx = VersionedTransaction.deserialize(Buffer.from(data.txBase64, "base64"));
tx.sign([creator]);
const { signature, error } = await post("/api/launch/cosign", {
mint: data.mint,
txBase64: Buffer.from(tx.serialize()).toString("base64"),
});
if (error) throw new Error(error);
await connection.confirmTransaction(signature, "confirmed");
const buy = await post("/api/trade", {
mint: data.mint, side: "buy", amountSol: 0.5, slippageBps: 500, payer: creator.publicKey.toBase58(),
});
const buyTx = VersionedTransaction.deserialize(Buffer.from(buy.txBase64, "base64"));
buyTx.sign([creator]);
await connection.sendRawTransaction(buyTx.serialize());
console.log("launched", data.mint, signature);After launch
The token appears on Explore with a via code tag, and anyone on Explore sees a notice when it lands. Its campaign starts with these defaults: $1.00 CPM, TikTok, Instagram, YouTube and X, your token image as the reference image, and the watermark $TICKER. Sign in with the creator wallet to see it in your dashboard.
Powered by Content Rewards
Every Clipfund campaign runs on contentrewards.com. When a token's campaign wallet reaches about $1,000, Clipfund swaps it to USDC and funds the token's Content Rewards campaign. Clippers join, post, and get paid per view there. Views are bot-checked by Content Rewards.