Launch Types

Creator Fees on the Genesis Bonding Curve

Last updated April 9, 2026

Creator fees are an optional per-swap fee on the Genesis Bonding Curve that accrue to a configured wallet on every buy and sell.

What You'll Learn

  • Configuring a creator fee wallet at launch
  • Redirecting fees to a specific wallet or agent PDA
  • Checking how much has accrued in the bucket
  • Claiming accrued fees during the active curve
  • Claiming post-graduation fees from the Raydium CPMM pool

Summary

A creator fee is an optional per-swap fee on the Genesis Bonding Curve, applied to the SOL side of every buy and sell. Fees accrue in the bucket account (creatorFeeAccrued) rather than being transferred immediately — collect them via two permissionless instructions.

  • Configuration — set creatorFeeWallet in the launch object at curve creation; defaults to the launching wallet if omitted
  • AccrualcreatorFeeAccrued increments on every swap; fees are not transferred per-swap
  • Active curve claimingclaimBondingCurveCreatorFeeV2 collects accrued fees while the curve is live
  • Post-graduation claimingclaimRaydiumCreatorFeeV2 collects fees from the Raydium CPMM pool after the curve graduates

For how creator fees interact with swap pricing and the protocol swap fee, see Theory of Operation — Fee Structure.

Quick Start

Jump to: Configure at Launch · Redirect to Wallet · Agent PDA · Combine with First Buy · Check Accrued · Claim During Curve · Claim After Graduation

  1. Set creatorFeeWallet in the launch object when calling createAndRegisterLaunch
  2. After launch, read bucket.creatorFeeAccrued to monitor accumulated fees
  3. Call claimBondingCurveCreatorFeeV2 to collect fees while the curve is active
  4. After graduation, call claimRaydiumCreatorFeeV2 to collect Raydium LP fees

Prerequisites

Configuring a Creator Fee at Launch

Creator fees are configured in the launch object passed to createAndRegisterLaunch (or createLaunch). The creatorFeeWallet field is optional — if omitted, the launching wallet receives all fees by default. For the full launch flow, see Launching a Bonding Curve via the Metaplex API.

Redirecting Creator Fees to a Specific Wallet

Set creatorFeeWallet to direct accrued fees to any wallet address other than the launching wallet.

launch-with-creator-fee.ts
1import { createAndRegisterLaunch } from '@metaplex-foundation/genesis/api';
2
3const result = await createAndRegisterLaunch(umi, {}, {
4 wallet: umi.identity.publicKey,
5 launchType: 'bondingCurve',
6 token: {
7 name: 'My Token',
8 symbol: 'MTK',
9 image: 'https://gateway.irys.xyz/your-image-id',
10 },
11 launch: {
12 creatorFeeWallet: 'FeeRecipientWalletAddress...',
13 },
14});

The creator fee wallet is set at curve creation and cannot be changed after the curve is live.

Agent Launches — Automatic PDA Routing

When launching on behalf of a Metaplex agent, the creator fee is automatically routed to the agent's PDA without setting creatorFeeWallet manually. For the full agent launch flow — Core execute wrapping and setToken association — see Create an Agent Token.

Combining Creator Fees with a First Buy

You can configure a creator fee wallet and a first buy together. The first buy is always fee-free — no protocol fee or creator fee applies to that initial purchase. All subsequent swaps pay the normal creator fee.

launch-with-fee-and-first-buy.ts
launch: {
creatorFeeWallet: 'FeeRecipientWalletAddress...',
firstBuyAmount: 0.5, // 0.5 SOL, fee-free for the first buyer
},

Checking Accrued Creator Fees

The creatorFeeAccrued field on the BondingCurveBucketV2 account tracks the total SOL accumulated since the last claim. Read it using fetchBondingCurveBucketV2:

check-creator-fees.ts
1import {
2 findBondingCurveBucketV2Pda,
3 fetchBondingCurveBucketV2,
4} from '@metaplex-foundation/genesis';
5import { isSome, publicKey } from '@metaplex-foundation/umi';
6
7const genesisAccount = publicKey('YOUR_GENESIS_ACCOUNT_PUBKEY');
8const baseMint = publicKey('TOKEN_MINT_PUBKEY');
9
10const [bucketPda] = findBondingCurveBucketV2Pda(umi, {
11 genesisAccount,
12 bucketIndex: 0,
13});
14
15const bucket = await fetchBondingCurveBucketV2(umi, bucketPda);
16console.log('Creator fees accrued (lamports):', bucket.creatorFeeAccrued);
17console.log('Creator fees claimed to date (lamports):', bucket.creatorFeeClaimed);
18
19// Read the configured creator fee wallet from the bucket extension
20const creatorFeeExt = bucket.extensions.creatorFee;
21const creatorFeeWallet = isSome(creatorFeeExt) ? creatorFeeExt.value.wallet : null;
22console.log('Creator fee wallet:', creatorFeeWallet?.toString() ?? 'none configured');

Claiming Creator Fees During the Active Curve

claimBondingCurveCreatorFeeV2 transfers all accrued creator fees from the bucket to the configured creator fee wallet. Call it at any time while the curve is active.

claim-creator-fees.ts
1import { claimBondingCurveCreatorFeeV2 } from '@metaplex-foundation/genesis';
2import { isSome } from '@metaplex-foundation/umi';
3
4// Read the creator fee wallet from the bucket extension before claiming.
5const creatorFeeExt = bucket.extensions.creatorFee;
6if (!isSome(creatorFeeExt)) throw new Error('No creator fee configured on this bucket');
7const creatorFeeWallet = creatorFeeExt.value.wallet;
8
9const result = await claimBondingCurveCreatorFeeV2(umi, {
10 genesisAccount,
11 bucket: bucketPda,
12 baseMint,
13 creatorFeeWallet,
14}).sendAndConfirm(umi);
15
16console.log('Creator fees claimed:', result.signature);

claimBondingCurveCreatorFeeV2 is permissionless — any wallet can call it, but the SOL is always sent to the configured creator fee wallet, not the caller.

Claiming Creator Fees After Graduation

After the bonding curve graduates, liquidity migrates to a Raydium CPMM pool and creator fees continue to accrue from LP trading activity. The RaydiumCpmmBucketV2 account exposes creatorFeeAccrued and creatorFeeClaimed fields analogous to those on BondingCurveBucketV2. Collect post-graduation fees with claimRaydiumCreatorFeeV2.

claim-raydium-creator-fees.ts
1import { claimRaydiumCreatorFeeV2 } from '@metaplex-foundation/genesis';
2
3const result = await claimRaydiumCreatorFeeV2(umi, {
4 genesisAccount,
5 // ... Raydium pool accounts
6}).sendAndConfirm(umi);

Like its bonding curve counterpart, claimRaydiumCreatorFeeV2 is permissionless — any wallet can trigger the claim, but the SOL is always sent to the configured creator fee wallet.

Notes

  • Creator fees are accrued in the bucket (creatorFeeAccrued) on each swap, not transferred immediately — explicitly call the claim instructions to receive them; creatorFeeClaimed tracks the cumulative total claimed to date
  • Both claim instructions are permissionless: any wallet can trigger them, but the SOL always goes to the configured creator fee wallet, not the caller
  • creatorFeeWallet defaults to the launching wallet if not set; it cannot be changed after the curve is created
  • The first buy mechanism waives all fees (protocol and creator) for the designated initial purchase only; all subsequent swaps pay the normal creator fee
  • Creator fees apply to the SOL side of every swap regardless of direction (buy or sell); they do not compound with the protocol swap fee
  • For current fee rates, see the Genesis Protocol Fees page
  • For swap-side context — reading bucket state, computing quotes, and executing trades — see Bonding Curve Swap Integration

FAQ

What is the default creator fee wallet if creatorFeeWallet is not set?

The default creator fee wallet is the launching wallet — the wallet that signed the createLaunch call. Set creatorFeeWallet explicitly in the launch object to redirect fees to any other address.

Are creator fees transferred on every swap?

No. Creator fees are accrued in the bucket (creatorFeeAccrued) on each swap but are not transferred immediately. Call claimBondingCurveCreatorFeeV2 to collect them during the active curve, and claimRaydiumCreatorFeeV2 after graduation.

Can anyone call claimBondingCurveCreatorFeeV2?

Yes. Both claimBondingCurveCreatorFeeV2 and claimRaydiumCreatorFeeV2 are permissionless — any wallet can trigger the claim, but the SOL is always sent to the configured creator fee wallet, not the caller.

Does the first buy pay creator fees?

No. When a first buy is configured, all fees — protocol swap fee and creator fee — are waived for that one initial purchase. All subsequent swaps pay the normal creator fee.

How do I check how much creator fee has accrued?

Read the creatorFeeAccrued field from the bucket account using fetchBondingCurveBucketV2. See Checking Accrued Creator Fees.

Can I change the creator fee wallet after launch?

No. The creator fee wallet is set at curve creation and cannot be changed after the curve is live.