What is relayfor.si?

Tokens

Your project's tokens, their routes, and bringing a token already on pump.fun.

A token joins your project when its launch or import is confirmed. Its route lists every shareholder of its creator fee as pump.fun locked it, in basis points of the whole fee: the token's AI vault first, relayfor.si second.

List tokens

GET

Send the project's secret key as Authorization: Bearer rf_sk_..., from a server.

Request
curl https://relayfor.si/api/project/v1/tokens \  -H "Authorization: Bearer $RELAYFOR_SECRET_KEY"

Query

  • limitinteger

    1 to 100; default 20.

  • cursorstring

    next_cursor from the page before.

Answer

Answers 200 with TokenList.

Example answer
{  "data": [    {      "mint": "MASi45ub7Qe4ZE36UT5G6cU4ud8Fhhe4deS4F3cw9KTA",      "kind": "wallet",      "quote_mint": "So11111111111111111111111111111111111111112",      "name": "Nova",      "symbol": "NOVA",      "metadata_uri": "https://ipfs.io/ipfs/bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku",      "image": "https://ipfs.io/ipfs/bafkreiexgjbqcz4ahcgo6cf3xsnihhjbfy2v4bwy2hwz4tn63qsr7gnvve",      "creator": "b8dLcukC7edhDQ7cn5d4gEYkbUrMWeWQLGsCmrG6dLaY",      "route": [        {          "address": "yNoVKf58ZTBqNAYT3j5qcdsyuMNmPfYetW5v6JXmj54o",          "bps": 5600,          "roles": [            "ai"          ]        },        {          "address": "mLidkuVKnRyjP2WPBg8Y4ErK9pGSSxY6BVScJy9uUxcJ",          "bps": 2000,          "roles": [            "platform"          ]        },        {          "address": "b8dLcukC7edhDQ7cn5d4gEYkbUrMWeWQLGsCmrG6dLaY",          "bps": 800,          "roles": [            "creator"          ]        },        {          "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk",          "bps": 1600,          "roles": [            "project"          ]        }      ],      "preset": {        "id": "fps_Hh6iDhVIjXITTTn7",        "name": "Standard"      },      "sharing_config": "tcSSSS7XhS4D5EVB8Nf471dAb7Qg25xEgRAhHPfQX88w",      "bonding_curve": "YWXXL6A7pNpHXvmBa2EaQAmb2qaLix6mwHaQBPrFbbrZ",      "launch_id": "lch_qrjvWeRkipW8wXmW",      "signature": "8SVM5jGU5EjLs8zrAnijQAHy9WFp7SyYBjvFBnUZSNTDPM6oQ2NcWVn2RNagKZ58sFy76HJ3zrCJq9uUwkuHSAbZ",      "created_at": "2026-10-07T09:12:31.000Z"    }  ],  "next_cursor": null}
Its fields
  • dataobject[]Required

    The items, newest first.

    • mintstringRequired

      The token's mint address.

    • kind"wallet" | "import"Required

      How it came to relayfor.

    • quote_mintstringRequired

      What it trades against and pays its fees in: wrapped SOL for SOL.

    • namestringRequired

      The token's name.

    • symbolstringRequired

      The token's ticker.

    • metadata_uristringRequired

      The token's metadata on IPFS, as pump.fun names it.

    • imagestring | nullRequired

      The token's image; null for a token brought from pump.fun.

    • creatorstringRequired

      Its creator on pump.fun before the route took its place.

    • routeobject[]Required

      The token's shareholders as locked on chain: the AI first, relayfor second.

      • addressstringRequired

        A shareholder's wallet.

      • bpsintegerRequired

        Basis points of the whole creator fee, as pump.fun pays it.

      • roles"ai" | "platform" | "creator" | "project"[]Required

        ai: the token's vault, its AI credit; platform: relayfor's 20%; creator: the creator's part; project: one of the project's wallets. A creator who is one of the project's wallets holds both shares in one shareholder.

    • presetobject | nullRequired

      The fee preset it was made with, named as it was then.

      • idstringRequired

        fps_...

      • namestringRequired

        Its name when the token was made.

    • sharing_configstringRequired

      pump.fun's account holding the route.

    • bonding_curvestringRequired

      The token's bonding curve account on pump.fun.

    • launch_idstring | nullRequired

      The launch or import that brought it: lch_...

    • signaturestringRequired

      The transaction that locked its route.

    • created_atstringRequired

      When it was made, in UTC.

  • next_cursorstring | nullRequired

    Pass it as cursor for the next page; null on the last page.

Errors

A 429 or 503 answer carries Retry-After: wait that many seconds, then send the same request again.

Get a token

GET

Send the project's secret key as Authorization: Bearer rf_sk_..., from a server.

Request
curl https://relayfor.si/api/project/v1/tokens/MASi45ub7Qe4ZE36UT5G6cU4ud8Fhhe4deS4F3cw9KTA \  -H "Authorization: Bearer $RELAYFOR_SECRET_KEY"

Path

  • mintstringRequired

    The token's mint address.

Answer

Answers 200 with TokenDetail.

Example answer
{  "mint": "MASi45ub7Qe4ZE36UT5G6cU4ud8Fhhe4deS4F3cw9KTA",  "kind": "wallet",  "quote_mint": "So11111111111111111111111111111111111111112",  "name": "Nova",  "symbol": "NOVA",  "metadata_uri": "https://ipfs.io/ipfs/bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku",  "image": "https://ipfs.io/ipfs/bafkreiexgjbqcz4ahcgo6cf3xsnihhjbfy2v4bwy2hwz4tn63qsr7gnvve",  "creator": "b8dLcukC7edhDQ7cn5d4gEYkbUrMWeWQLGsCmrG6dLaY",  "route": [    {      "address": "yNoVKf58ZTBqNAYT3j5qcdsyuMNmPfYetW5v6JXmj54o",      "bps": 5600,      "roles": [        "ai"      ]    },    {      "address": "mLidkuVKnRyjP2WPBg8Y4ErK9pGSSxY6BVScJy9uUxcJ",      "bps": 2000,      "roles": [        "platform"      ]    },    {      "address": "b8dLcukC7edhDQ7cn5d4gEYkbUrMWeWQLGsCmrG6dLaY",      "bps": 800,      "roles": [        "creator"      ]    },    {      "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk",      "bps": 1600,      "roles": [        "project"      ]    }  ],  "preset": {    "id": "fps_Hh6iDhVIjXITTTn7",    "name": "Standard"  },  "sharing_config": "tcSSSS7XhS4D5EVB8Nf471dAb7Qg25xEgRAhHPfQX88w",  "bonding_curve": "YWXXL6A7pNpHXvmBa2EaQAmb2qaLix6mwHaQBPrFbbrZ",  "launch_id": "lch_qrjvWeRkipW8wXmW",  "signature": "8SVM5jGU5EjLs8zrAnijQAHy9WFp7SyYBjvFBnUZSNTDPM6oQ2NcWVn2RNagKZ58sFy76HJ3zrCJq9uUwkuHSAbZ",  "created_at": "2026-10-07T09:12:31.000Z",  "market": {    "graduated": false,    "curve_progress_bps": 3120  }}
Its fields
  • mintstringRequired

    The token's mint address.

  • kind"wallet" | "import"Required

    How it came to relayfor.

  • quote_mintstringRequired

    What it trades against and pays its fees in: wrapped SOL for SOL.

  • namestringRequired

    The token's name.

  • symbolstringRequired

    The token's ticker.

  • metadata_uristringRequired

    The token's metadata on IPFS, as pump.fun names it.

  • imagestring | nullRequired

    The token's image; null for a token brought from pump.fun.

  • creatorstringRequired

    Its creator on pump.fun before the route took its place.

  • routeobject[]Required

    The token's shareholders as locked on chain: the AI first, relayfor second.

    • addressstringRequired

      A shareholder's wallet.

    • bpsintegerRequired

      Basis points of the whole creator fee, as pump.fun pays it.

    • roles"ai" | "platform" | "creator" | "project"[]Required

      ai: the token's vault, its AI credit; platform: relayfor's 20%; creator: the creator's part; project: one of the project's wallets. A creator who is one of the project's wallets holds both shares in one shareholder.

  • presetobject | nullRequired

    The fee preset it was made with, named as it was then.

    • idstringRequired

      fps_...

    • namestringRequired

      Its name when the token was made.

  • sharing_configstringRequired

    pump.fun's account holding the route.

  • bonding_curvestringRequired

    The token's bonding curve account on pump.fun.

  • launch_idstring | nullRequired

    The launch or import that brought it: lch_...

  • signaturestringRequired

    The transaction that locked its route.

  • created_atstringRequired

    When it was made, in UTC.

  • marketobject | nullRequired

    Read from the chain now; null when it could not be read.

    • graduatedbooleanRequired

      Its curve completed: it trades on PumpSwap.

    • curve_progress_bpsnumberRequired

      How much of its curve sold, in basis points (10000 once graduated).

Errors

A 429 or 503 answer carries Retry-After: wait that many seconds, then send the same request again.

Bring a token

POST

Reads who may set the token's route from the chain and builds pump.fun's fee-sharing transaction with relayfor's 1 SOL fee, checked by simulation, for that wallet to sign. Then as a wallet launch: send it yourself or post it to /launches/{id}/submit, and poll GET /launches/{id}. Refused when the route is locked already or the token has no creator fee to route.

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.

Request
curl -X POST https://relayfor.si/api/project/v1/tokens/import \  -H "Authorization: Bearer $RELAYFOR_SECRET_KEY" \  -H "Idempotency-Key: $(uuidgen)" \  -H "Content-Type: application/json" \  -d '{    "mint": "MASi45ub7Qe4ZE36UT5G6cU4ud8Fhhe4deS4F3cw9KTA",    "creator": "b8dLcukC7edhDQ7cn5d4gEYkbUrMWeWQLGsCmrG6dLaY"  }'

Body

  • mintstringRequired

    The existing pump.fun token.

  • creatorstringRequired

    The wallet that signs: the token's creator on pump.fun (its open route's admin, if it has one).

  • presetstring

    The fee preset (fps_...) that splits the project's part of the token's creator fee; the project's default when absent.

  • splitobject

    The creator's choice of the AI and creator parts, in basis points of the project's part: either alone, or both adding up to the preset's creator_choice.budget; the AI at least the preset's floor. The preset's own split when absent.

    • ai_shareinteger

      Basis 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_shareinteger

      Basis 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_fees_tostring

    Where the creator's part goes; the creator's own wallet when absent. When it is one of the preset's wallets, that wallet holds both shares. Ignored when the creator's share is 0.

  • transaction_version0 | 1

    1 (the default) for wallets that sign v1 transactions; 0 for one that doesn't yet: a v0 transaction of at most 1232 bytes, its shared accounts loaded from relayfor's lookup table. A v0 launch carries no opening buy and fits the creator and about 2 funded project wallets in its route.

Answer

Answers 201 with Launch.

Example answer
{  "id": "lch_qrjvWeRkipW8wXmW",  "kind": "import",  "state": "prepared",  "mint": "MASi45ub7Qe4ZE36UT5G6cU4ud8Fhhe4deS4F3cw9KTA",  "creator": "b8dLcukC7edhDQ7cn5d4gEYkbUrMWeWQLGsCmrG6dLaY",  "name": "Nova",  "symbol": "NOVA",  "metadata_uri": "https://ipfs.io/ipfs/bafkreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku",  "image": null,  "route": [    {      "address": "yNoVKf58ZTBqNAYT3j5qcdsyuMNmPfYetW5v6JXmj54o",      "bps": 5600,      "roles": [        "ai"      ]    },    {      "address": "mLidkuVKnRyjP2WPBg8Y4ErK9pGSSxY6BVScJy9uUxcJ",      "bps": 2000,      "roles": [        "platform"      ]    },    {      "address": "b8dLcukC7edhDQ7cn5d4gEYkbUrMWeWQLGsCmrG6dLaY",      "bps": 800,      "roles": [        "creator"      ]    },    {      "address": "nTPkyRFA6CAFjF1YveCHK1ATbQgdM9mwZgikp4Wzxrxk",      "bps": 1600,      "roles": [        "project"      ]    }  ],  "preset": {    "id": "fps_Hh6iDhVIjXITTTn7",    "name": "Standard"  },  "fee_lamports": "1000000000",  "quote_mint": "So11111111111111111111111111111111111111112",  "opening_buy": null,  "transaction": {    "version": 1,    "base64": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...",    "last_valid_block_height": "376012345"  },  "signature": null,  "error": null,  "created_at": "2026-10-07T09:12:04.000Z",  "confirmed_at": null}
Its fields
  • idstringRequired

    lch_ and 16 characters.

  • kind"wallet" | "import"Required

    wallet: launched from the creator's wallet; import: brought from pump.fun.

  • state"prepared" | "sent" | "confirmed" | "failed" | "expired"Required

    prepared: waits for the wallet; confirmed: the chain shows the token as prepared.

  • mintstringRequired

    The token's mint address.

  • creatorstringRequired

    The creator's wallet: it signs and pays for the launch or import.

  • namestringRequired

    The token's name.

  • symbolstringRequired

    The token's ticker.

  • metadata_uristringRequired

    The token's metadata on IPFS, as pump.fun names it.

  • imagestring | nullRequired

    Null for an import: we fetch no link a token names.

  • routeobject[]Required

    The token's shareholders as locked on chain: the AI first, relayfor second.

    • addressstringRequired

      A shareholder's wallet.

    • bpsintegerRequired

      Basis points of the whole creator fee, as pump.fun pays it.

    • roles"ai" | "platform" | "creator" | "project"[]Required

      ai: the token's vault, its AI credit; platform: relayfor's 20%; creator: the creator's part; project: one of the project's wallets. A creator who is one of the project's wallets holds both shares in one shareholder.

  • presetobject | nullRequired

    The fee preset it was made with, named as it was then.

    • idstringRequired

      fps_...

    • namestringRequired

      Its name when the token was made.

  • fee_lamportsstringRequired

    relayfor's fee in this transaction, in lamports: 0.02 SOL a launch, 1 SOL an import.

  • quote_mintstringRequired

    What the token trades against: wrapped SOL for SOL.

  • opening_buyobject | nullRequired

    The creator's first buy, in the launch itself; null for none.

    • amountstringRequired

      The quote's base units spent, fees included.

    • lamportsstring | nullRequired

      The same in lamports, for a token quoted in SOL.

    • tokensstringRequired

      The tokens it gets, in base units.

    • tokens_tostring | nullRequired

      Who gets them; null for the creator.

  • transactionobject | nullRequired

    While prepared: the transaction for the creator's wallet to sign last (a wallet launch or an import).

    • version0 | 1Required

      Its format: 1, or 0 for a wallet that can't sign version 1.

    • base64stringRequired

      The transaction, base64, signed by the new mint.

    • last_valid_block_heightstringRequired

      Past this block height it can no longer land: prepare a new launch.

  • signaturestring | nullRequired

    The transaction on Solana; null until it was sent.

  • errorstring | nullRequired

    Why it failed or expired; null unless it did.

  • created_atstringRequired

    When it was made, in UTC.

  • confirmed_atstring | nullRequired

    When the chain confirmed it; null until then.

Errors

A 409, 429, or 503 answer carries Retry-After: wait that many seconds, then send the same request again.

On this page