Integration APIs

POSTClaim Creator Rewards

Last updated April 23, 2026

Claim accrued creator rewards for a wallet across every Genesis bonding-curve and Raydium CPMM bucket the wallet is entitled to, in a single call. The endpoint returns a list of base64-encoded Solana transactions that the wallet (or a designated payer) must sign and submit.

SDK wrapper available

Most integrators should use claimCreatorRewards from the Genesis JavaScript SDK — it deserializes the transactions, handles error parsing, and plugs directly into a Umi identity for signing. Call this endpoint directly only if you cannot depend on the SDK.

Summary

POST /v1/creator-rewards/claim returns the Solana transactions needed to claim a wallet's accrued creator rewards across every bonding-curve and Raydium CPMM bucket in a single call.

  • Aggregation — one request claims across all eligible buckets; one transaction is returned per bucket
  • Signing — response is base64-encoded Solana transactions the wallet (or optional payer) must sign and submit
  • Errors — HTTP 400 "No rewards available to claim" when nothing has accrued; callers must branch on the error, not an empty array
  • SDK wrapperclaimCreatorRewards handles deserialization, typed errors, and Umi signing

Endpoint

POST /v1/creator-rewards/claim
EnvironmentBase URL
Devnet & Mainnethttps://api.metaplex.com

Request Body

FieldTypeRequiredDescription
walletstringYesBase58-encoded public key of the creator fee wallet to claim for. This is the wallet set as creatorFeeWallet on the bucket — or the launching wallet if no override was configured.
networkstringNo'solana-mainnet' (default) or 'solana-devnet'. Must match the base URL's cluster.
payerstringNoBase58-encoded public key that covers transaction fees and any rent on the returned transactions. Defaults to wallet when omitted.

When to set payer

Set payer to a different wallet when the creator fee wallet does not hold SOL (for example, an agent PDA or a cold wallet). The payer must sign the returned transactions, so it is typically the wallet submitting the claim on behalf of the creator. The creator fee recipient still receives the claimed SOL — payer only covers fees and rent.

Example Request

1import { claimCreatorRewards } from '@metaplex-foundation/genesis'
2import { base58 } from '@metaplex-foundation/umi/serializers'
3import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
4import { keypairIdentity } from '@metaplex-foundation/umi'
5
6const umi = createUmi('https://api.mainnet-beta.solana.com')
7const keypair = umi.eddsa.createKeypairFromSecretKey(mySecretKeyBytes)
8umi.use(keypairIdentity(keypair))
9
10const result = await claimCreatorRewards(umi, {}, {
11 wallet: umi.identity.publicKey,
12 network: 'solana-mainnet',
13 // payer is optional — defaults to `wallet` on the server.
14 // Set it to have a different wallet cover rent and transaction fees.
15 // payer: umi.identity.publicKey,
16})
17
18for (const tx of result.transactions) {
19 const signed = await umi.identity.signTransaction(tx)
20 const signature = await umi.rpc.sendTransaction(signed, {
21 preflightCommitment: 'confirmed',
22 })
23 await umi.rpc.confirmTransaction(signature, {
24 strategy: { type: 'blockhash', ...result.blockhash },
25 commitment: 'confirmed',
26 })
27 console.log('Claimed:', base58.deserialize(signature)[0])
28}
29
30// Claimed: 5uGGYEMmjP2HpyFCvLPNpVDSQEBtUE3LR6ZQFqhJxQSh5FbKacSyN8nQmAJowuFs6BTCdwzoFyyJz8Y2hQx8kPxo
31// Claimed: 3TAroVovEap1ZEAJYq3WiDZoMK3GU3soCdrhvZJNg6b9EANqvWrVcDGNffm7mD8wvtpR7ynWQBcbrmz8AK6nrhfy

Success Response

{
"data": {
"transactions": ["<base64 transaction>", "<base64 transaction>"],
"blockhash": {
"blockhash": "ERKYmtrmNSKaw3VpnFYAfK3jvWGnd15Nf9kJxZqJ7JHx",
"lastValidBlockHeight": 445407640
}
}
}
FieldTypeDescription
data.transactionsstring[]Base64-encoded Solana transactions. Each must be deserialized, signed by the payer (and the creator fee wallet if it is a separate signer), and submitted.
data.blockhash.blockhashstringRecent blockhash the transactions were built against. Use this with confirmTransaction — do not replace it with a freshly fetched blockhash.
data.blockhash.lastValidBlockHeightnumberSlot height after which the blockhash expires.

The API returns one transaction per bucket being claimed — often two (bonding-curve plus Raydium). Submit them sequentially; their order is not significant.

Error Response

Errors are returned with HTTP status 400 and the shape:

{ "error": { "message": "No rewards available to claim" } }

Known Error Messages

MessageHTTPCause
No rewards available to claim400The wallet has no accrued-and-unclaimed creator rewards on any bucket. This is returned instead of an empty transactions array, so callers must handle it as a non-exceptional outcome.
✖ Invalid wallet address400wallet is not a valid base58 Solana public key.

No-rewards is a 400, not an empty array

The endpoint returns HTTP 400 with the message No rewards available to claim when a wallet has nothing to claim — it does not return 200 with transactions: []. Callers must catch the error (or inspect response.status and body.error.message) and treat this case as "nothing to do" rather than a failure. The SDK surfaces this as a typed GenesisApiError; see error handling.

Notes

  • The endpoint is idempotent at the bucket level — calling it again immediately after a successful claim returns No rewards available to claim until new fees accrue.
  • The returned transactions use the blockhash in data.blockhash. If confirmation takes longer than ~60–90 seconds, the blockhash will expire and the call must be repeated to get a fresh set of transactions.
  • Creator rewards accrue on every swap (bonding curve) and from LP trading activity (Raydium CPMM) — this endpoint aggregates both. For the underlying accrual mechanics and per-bucket fetch helpers, see Creator Fees on the Genesis Bonding Curve.
  • The creator fee wallet is set at bucket creation via creatorFeeWallet and cannot be changed after a curve goes live.

Instead of calling this endpoint directly, use claimCreatorRewards from @metaplex-foundation/genesis:

claimCreatorRewards.ts
1import { claimCreatorRewards } from '@metaplex-foundation/genesis'
2import { base58 } from '@metaplex-foundation/umi/serializers'
3import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
4import { keypairIdentity } from '@metaplex-foundation/umi'
5
6const umi = createUmi('https://api.mainnet-beta.solana.com')
7const keypair = umi.eddsa.createKeypairFromSecretKey(mySecretKeyBytes)
8umi.use(keypairIdentity(keypair))
9
10const result = await claimCreatorRewards(umi, {}, {
11 wallet: umi.identity.publicKey,
12 network: 'solana-mainnet',
13 // payer is optional — defaults to `wallet` on the server.
14 // Set it to have a different wallet cover rent and transaction fees.
15 // payer: umi.identity.publicKey,
16})
17
18for (const tx of result.transactions) {
19 const signed = await umi.identity.signTransaction(tx)
20 const signature = await umi.rpc.sendTransaction(signed, {
21 preflightCommitment: 'confirmed',
22 })
23 await umi.rpc.confirmTransaction(signature, {
24 strategy: { type: 'blockhash', ...result.blockhash },
25 commitment: 'confirmed',
26 })
27 console.log('Claimed:', base58.deserialize(signature)[0])
28}
29
30// Claimed: 5uGGYEMmjP2HpyFCvLPNpVDSQEBtUE3LR6ZQFqhJxQSh5FbKacSyN8nQmAJowuFs6BTCdwzoFyyJz8Y2hQx8kPxo
31// Claimed: 3TAroVovEap1ZEAJYq3WiDZoMK3GU3soCdrhvZJNg6b9EANqvWrVcDGNffm7mD8wvtpR7ynWQBcbrmz8AK6nrhfy

See the API Client page for the full SDK surface, and Creator Fees for the end-to-end claim guide.