Fee strategies
How your project's part of each token's creator fee splits between its AI, its creator and your wallets.
A fee strategy (a preset in the API) splits your project's part of each token's creator fee: a share for the token's AI credit, one for its creator and one for your own wallets. Shares are basis points of your part, so 10,000 is all of it. The AI keeps at least 2,500; every other share is 0 or at least 125. relayfor.si takes 20% of each creator fee before your part.
Every project is made with one default, the Standard strategy. A launch or import uses the default unless it names another in preset. See Fee strategy for the rules with a figure to try.
List fee strategies
Send the project's secret key as Authorization: Bearer rf_sk_..., from a server.
curl https://relayfor.si/api/project/v1/presets \ -H "Authorization: Bearer $RELAYFOR_SECRET_KEY"Answer
Answers 200 with PresetList.
{ "data": [ { "id": "fps_Hh6iDhVIjXITTTn7", "name": "Standard", "default": true, "ai_share": 6000, "creator_share": 2000, "project_share": 2000, "ai_floor_share": 2500, "wallets": [ { "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk", "share": 2000 } ], "creator_choice": { "budget": 8000, "ai_floor": 2500, "creator_max": 5500 }, "fee_bps": { "ai": 4800, "creator": 1600, "project": 1600, "platform": 2000 }, "created_at": "2026-10-07T08:58:12.000Z", "updated_at": "2026-10-07T08:58:12.000Z" }, { "id": "fps_vZCJ5xU1IT4qWzSH", "name": "AI first", "default": false, "ai_share": 8000, "creator_share": 1000, "project_share": 1000, "ai_floor_share": 5000, "wallets": [ { "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk", "share": 1000 } ], "creator_choice": { "budget": 9000, "ai_floor": 5000, "creator_max": 4000 }, "fee_bps": { "ai": 6400, "creator": 800, "project": 800, "platform": 2000 }, "created_at": "2026-10-07T11:30:00.000Z", "updated_at": "2026-10-07T11:30:00.000Z" } ]}Its fields
dataobject[]RequiredThe items, the default first, then newest first.
idstringRequiredThe preset's id: fps_ and 16 characters.
namestringRequiredIts name, unique in the project.
defaultbooleanRequiredThe project's default: what a launch or import gets when it names none.
ai_shareintegerRequiredThe AI's share when the creator doesn't choose.
creator_shareintegerRequiredThe creator's share when the creator doesn't choose.
project_shareintegerRequiredThe project's wallets together.
ai_floor_shareintegerRequiredThe least AI share its creators may choose: at least 2,500 (20% of the token's fees).
walletsobject[]RequiredThe project's wallets, each with its share of the project's part.
addressstringRequiredA wallet of the project's own.
shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_choiceobjectRequiredWhat a creator may choose at launch, for a launchpad's own page.
budgetintegerRequiredThe AI and creator shares together.
ai_floorintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_maxintegerRequiredThe most a creator may take: the budget less the floor.
fee_bpsobjectRequiredThe preset's own split in basis points of the whole creator fee, as a route locks it: shares rounded down, the AI taking what rounding leaves.
aiintegerRequiredThe AI's basis points of the whole fee.
creatorintegerRequiredThe creator's basis points of the whole fee.
projectintegerRequiredThe project's wallets' basis points of the whole fee, together.
platformintegerRequiredrelayfor's 20%.
created_atstringRequiredWhen it was made, in UTC.
updated_atstringRequiredWhen it last changed, in UTC.
Errors
A 429 or 503 answer carries Retry-After: wait that many seconds, then send the same request again.
Starting splits
Send the project's secret key as Authorization: Bearer rf_sk_..., from a server.
curl https://relayfor.si/api/project/v1/presets/templates \ -H "Authorization: Bearer $RELAYFOR_SECRET_KEY"Answer
Answers 200 with PresetTemplateList.
{ "data": [ { "key": "standard", "ai_share": 6000, "creator_share": 2000, "project_share": 2000 }, { "key": "ai_first", "ai_share": 8000, "creator_share": 1000, "project_share": 1000 }, { "key": "creator_first", "ai_share": 3000, "creator_share": 5000, "project_share": 2000 }, { "key": "no_project_share", "ai_share": 6000, "creator_share": 4000, "project_share": 0 } ]}Its fields
dataobject[]Requiredrelayfor's starting splits.
key"standard" | "ai_first" | "creator_first" | "no_project_share"RequiredWhich starting split: the dashboard names it.
ai_shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
project_shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
Errors
A 429 or 503 answer carries Retry-After: wait that many seconds, then send the same request again.
Add a fee strategy
The shares, in basis points of the project's part, add up to 10,000; the AI keeps at least its floor (2,500 or more); every other share is 0 or at least 125. A wallet a payout could never reach (a program, a sysvar, relayfor's own) is refused. Up to 20 presets per project.
Send the project's secret key as Authorization: Bearer rf_sk_..., from a server.
Send an Idempotency-Key (any unique string, a UUID): a retry with the same key and body gets the first answer back for 24 hours, a secret it carried included.
curl -X POST https://relayfor.si/api/project/v1/presets \ -H "Authorization: Bearer $RELAYFOR_SECRET_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "name": "AI first", "ai_share": 8000, "creator_share": 1000, "ai_floor_share": 5000, "wallets": [ { "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk", "share": 1000 } ] }'Body
namestringRequired2 to 48 characters, unique in the project whatever their case.
ai_shareintegerRequiredThe AI's share when the creator doesn't choose.
creator_shareintegerRequiredThe creator's share when the creator doesn't choose: 0, or at least 125.
ai_floor_shareintegerThe least AI share its creators may choose; default 2,500.
walletsobject[]Up to 7 of the project's own wallets; their shares together are the project's share. Each at least 125 (1% of the token's fees).
addressstringRequiredA Solana address of the project's own.
shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
defaultbooleanMake it the project's default; the old default stops being one. Every project is made with one, relayfor's Standard.
Answer
Answers 201 with Preset.
{ "id": "fps_vZCJ5xU1IT4qWzSH", "name": "AI first", "default": false, "ai_share": 8000, "creator_share": 1000, "project_share": 1000, "ai_floor_share": 5000, "wallets": [ { "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk", "share": 1000 } ], "creator_choice": { "budget": 9000, "ai_floor": 5000, "creator_max": 4000 }, "fee_bps": { "ai": 6400, "creator": 800, "project": 800, "platform": 2000 }, "created_at": "2026-10-07T11:30:00.000Z", "updated_at": "2026-10-07T11:30:00.000Z"}Its fields
idstringRequiredThe preset's id: fps_ and 16 characters.
namestringRequiredIts name, unique in the project.
defaultbooleanRequiredThe project's default: what a launch or import gets when it names none.
ai_shareintegerRequiredThe AI's share when the creator doesn't choose.
creator_shareintegerRequiredThe creator's share when the creator doesn't choose.
project_shareintegerRequiredThe project's wallets together.
ai_floor_shareintegerRequiredThe least AI share its creators may choose: at least 2,500 (20% of the token's fees).
walletsobject[]RequiredThe project's wallets, each with its share of the project's part.
addressstringRequiredA wallet of the project's own.
shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_choiceobjectRequiredWhat a creator may choose at launch, for a launchpad's own page.
budgetintegerRequiredThe AI and creator shares together.
ai_floorintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_maxintegerRequiredThe most a creator may take: the budget less the floor.
fee_bpsobjectRequiredThe preset's own split in basis points of the whole creator fee, as a route locks it: shares rounded down, the AI taking what rounding leaves.
aiintegerRequiredThe AI's basis points of the whole fee.
creatorintegerRequiredThe creator's basis points of the whole fee.
projectintegerRequiredThe project's wallets' basis points of the whole fee, together.
platformintegerRequiredrelayfor's 20%.
created_atstringRequiredWhen it was made, in UTC.
updated_atstringRequiredWhen it last changed, in UTC.
Errors
- 400invalid_request
- 400missing_idempotency_key
- 401unauthorized
- 409idempotency_in_progress
- 409preset_name_taken
- 413payload_too_large
- 415unsupported_media_type
- 422idempotency_mismatch
- 422too_many_presets
- 429rate_limited
- 500internal
- 503unavailable
A 409, 429, or 503 answer carries Retry-After: wait that many seconds, then send the same request again.
Get a fee strategy
Send the project's secret key as Authorization: Bearer rf_sk_..., from a server.
curl https://relayfor.si/api/project/v1/presets/fps_vZCJ5xU1IT4qWzSH \ -H "Authorization: Bearer $RELAYFOR_SECRET_KEY"Path
idstringRequiredThe preset's id: fps_...
Answer
Answers 200 with Preset.
{ "id": "fps_Hh6iDhVIjXITTTn7", "name": "Standard", "default": true, "ai_share": 6000, "creator_share": 2000, "project_share": 2000, "ai_floor_share": 2500, "wallets": [ { "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk", "share": 2000 } ], "creator_choice": { "budget": 8000, "ai_floor": 2500, "creator_max": 5500 }, "fee_bps": { "ai": 4800, "creator": 1600, "project": 1600, "platform": 2000 }, "created_at": "2026-10-07T08:58:12.000Z", "updated_at": "2026-10-07T08:58:12.000Z"}Its fields
idstringRequiredThe preset's id: fps_ and 16 characters.
namestringRequiredIts name, unique in the project.
defaultbooleanRequiredThe project's default: what a launch or import gets when it names none.
ai_shareintegerRequiredThe AI's share when the creator doesn't choose.
creator_shareintegerRequiredThe creator's share when the creator doesn't choose.
project_shareintegerRequiredThe project's wallets together.
ai_floor_shareintegerRequiredThe least AI share its creators may choose: at least 2,500 (20% of the token's fees).
walletsobject[]RequiredThe project's wallets, each with its share of the project's part.
addressstringRequiredA wallet of the project's own.
shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_choiceobjectRequiredWhat a creator may choose at launch, for a launchpad's own page.
budgetintegerRequiredThe AI and creator shares together.
ai_floorintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_maxintegerRequiredThe most a creator may take: the budget less the floor.
fee_bpsobjectRequiredThe preset's own split in basis points of the whole creator fee, as a route locks it: shares rounded down, the AI taking what rounding leaves.
aiintegerRequiredThe AI's basis points of the whole fee.
creatorintegerRequiredThe creator's basis points of the whole fee.
projectintegerRequiredThe project's wallets' basis points of the whole fee, together.
platformintegerRequiredrelayfor's 20%.
created_atstringRequiredWhen it was made, in UTC.
updated_atstringRequiredWhen it last changed, in UTC.
Errors
A 429 or 503 answer carries Retry-After: wait that many seconds, then send the same request again.
Change a fee strategy
Changes apply to tokens launched or brought after them. A token keeps the split it launched with: pump.fun locks it.
The changed preset is checked whole, by the same rules as a new one. Tokens already launched with it keep their routes: a route is locked on chain when its token is made.
Send the project's secret key as Authorization: Bearer rf_sk_..., from a server.
curl -X PATCH https://relayfor.si/api/project/v1/presets/fps_vZCJ5xU1IT4qWzSH \ -H "Authorization: Bearer $RELAYFOR_SECRET_KEY" \ -H "Content-Type: application/json" \ -d '{ "default": true }'Path
idstringRequiredThe preset's id: fps_...
Body
namestring2 to 48 characters, unique in the project whatever their case.
ai_shareintegerBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_shareintegerBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
ai_floor_shareintegerBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
walletsobject[]Up to 7 of the project's own wallets; their shares together are the project's share. Each at least 125 (1% of the token's fees).
addressstringRequiredA Solana address of the project's own.
shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
defaulttrueMake it the project's default; the old default stops being one.
Answer
Answers 200 with Preset.
{ "id": "fps_vZCJ5xU1IT4qWzSH", "name": "AI first", "default": true, "ai_share": 8000, "creator_share": 1000, "project_share": 1000, "ai_floor_share": 5000, "wallets": [ { "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk", "share": 1000 } ], "creator_choice": { "budget": 9000, "ai_floor": 5000, "creator_max": 4000 }, "fee_bps": { "ai": 6400, "creator": 800, "project": 800, "platform": 2000 }, "created_at": "2026-10-07T11:30:00.000Z", "updated_at": "2026-10-07T12:00:00.000Z"}Its fields
idstringRequiredThe preset's id: fps_ and 16 characters.
namestringRequiredIts name, unique in the project.
defaultbooleanRequiredThe project's default: what a launch or import gets when it names none.
ai_shareintegerRequiredThe AI's share when the creator doesn't choose.
creator_shareintegerRequiredThe creator's share when the creator doesn't choose.
project_shareintegerRequiredThe project's wallets together.
ai_floor_shareintegerRequiredThe least AI share its creators may choose: at least 2,500 (20% of the token's fees).
walletsobject[]RequiredThe project's wallets, each with its share of the project's part.
addressstringRequiredA wallet of the project's own.
shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_choiceobjectRequiredWhat a creator may choose at launch, for a launchpad's own page.
budgetintegerRequiredThe AI and creator shares together.
ai_floorintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_maxintegerRequiredThe most a creator may take: the budget less the floor.
fee_bpsobjectRequiredThe preset's own split in basis points of the whole creator fee, as a route locks it: shares rounded down, the AI taking what rounding leaves.
aiintegerRequiredThe AI's basis points of the whole fee.
creatorintegerRequiredThe creator's basis points of the whole fee.
projectintegerRequiredThe project's wallets' basis points of the whole fee, together.
platformintegerRequiredrelayfor's 20%.
created_atstringRequiredWhen it was made, in UTC.
updated_atstringRequiredWhen it last changed, in UTC.
Errors
- 400invalid_request
- 401unauthorized
- 404not_found
- 409preset_name_taken
- 413payload_too_large
- 415unsupported_media_type
- 429rate_limited
- 500internal
- 503unavailable
A 429 or 503 answer carries Retry-After: wait that many seconds, then send the same request again.
Archive a fee strategy
The default can't be archived: make another preset the default first. Tokens launched with it still name it. Archiving one already archived answers it again, so a retry is safe.
Send the project's secret key as Authorization: Bearer rf_sk_..., from a server.
curl -X DELETE https://relayfor.si/api/project/v1/presets/fps_vZCJ5xU1IT4qWzSH \ -H "Authorization: Bearer $RELAYFOR_SECRET_KEY"Path
idstringRequiredThe preset's id: fps_...
Answer
Answers 200 with Preset.
{ "id": "fps_vZCJ5xU1IT4qWzSH", "name": "AI first", "default": false, "ai_share": 8000, "creator_share": 1000, "project_share": 1000, "ai_floor_share": 5000, "wallets": [ { "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk", "share": 1000 } ], "creator_choice": { "budget": 9000, "ai_floor": 5000, "creator_max": 4000 }, "fee_bps": { "ai": 6400, "creator": 800, "project": 800, "platform": 2000 }, "created_at": "2026-10-07T11:30:00.000Z", "updated_at": "2026-10-07T11:30:00.000Z"}Its fields
idstringRequiredThe preset's id: fps_ and 16 characters.
namestringRequiredIts name, unique in the project.
defaultbooleanRequiredThe project's default: what a launch or import gets when it names none.
ai_shareintegerRequiredThe AI's share when the creator doesn't choose.
creator_shareintegerRequiredThe creator's share when the creator doesn't choose.
project_shareintegerRequiredThe project's wallets together.
ai_floor_shareintegerRequiredThe least AI share its creators may choose: at least 2,500 (20% of the token's fees).
walletsobject[]RequiredThe project's wallets, each with its share of the project's part.
addressstringRequiredA wallet of the project's own.
shareintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_choiceobjectRequiredWhat a creator may choose at launch, for a launchpad's own page.
budgetintegerRequiredThe AI and creator shares together.
ai_floorintegerRequiredBasis points of the project's part: 10,000 is all of it, the 80% of a token's creator fee relayfor's 20% leaves.
creator_maxintegerRequiredThe most a creator may take: the budget less the floor.
fee_bpsobjectRequiredThe preset's own split in basis points of the whole creator fee, as a route locks it: shares rounded down, the AI taking what rounding leaves.
aiintegerRequiredThe AI's basis points of the whole fee.
creatorintegerRequiredThe creator's basis points of the whole fee.
projectintegerRequiredThe project's wallets' basis points of the whole fee, together.
platformintegerRequiredrelayfor's 20%.
created_atstringRequiredWhen it was made, in UTC.
updated_atstringRequiredWhen it last changed, in UTC.
Errors
A 429 or 503 answer carries Retry-After: wait that many seconds, then send the same request again.