What is relayfor.si?

Webhooks

Endpoints that receive signed events, their deliveries and their secrets.

Add an endpoint and relayfor.si posts each event to it, signed. See Webhooks for every event, how to check a signature and how retries work.

List endpoints

GET

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

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

Answer

Answers 200 with WebhookList.

Example answer
{  "data": [    {      "id": "whk_X4llUGp4sGFkmDEl",      "url": "https://api.example.com/relayfor/events",      "events": [        "launch.confirmed",        "payout.credited",        "account.low_balance"      ],      "created_at": "2026-10-07T09:01:00.000Z",      "rotated_at": null    }  ]}
Its fields
  • dataobject[]Required

    The items, newest first.

    • idstringRequired

      The endpoint's id: whk_ and 16 characters.

    • urlstringRequired

      Where events are sent.

    • events"launch.confirmed" | "launch.failed" | "token.imported" | "token.graduated" | "payout.credited" | "account.low_balance" | "key.limit_reached" | "route.changed"[]Required

      The event types it receives; empty for all of them.

    • created_atstringRequired

      When it was made, in UTC.

    • rotated_atstring | nullRequired

      When its secret was last replaced.

Errors

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

Add an endpoint

POST

The answer carries the endpoint's signing secret, and gives it again to a retry with the same Idempotency-Key. Events: launch.confirmed, launch.failed, token.imported, token.graduated, payout.credited, account.low_balance (spendable credit under $5, once until topped up), key.limit_reached (once a period) and route.changed. Up to 5 endpoints 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.

Request
curl -X POST https://relayfor.si/api/project/v1/webhooks \  -H "Authorization: Bearer $RELAYFOR_SECRET_KEY" \  -H "Idempotency-Key: $(uuidgen)" \  -H "Content-Type: application/json" \  -d '{    "url": "https://api.example.com/relayfor/events",    "events": [      "launch.confirmed",      "payout.credited",      "account.low_balance"    ]  }'

Body

  • urlstringRequired

    A public https:// URL, without credentials in it.

  • events"launch.confirmed" | "launch.failed" | "token.imported" | "token.graduated" | "payout.credited" | "account.low_balance" | "key.limit_reached" | "route.changed"[]

    The event types it receives; left out or empty for all of them.

Answer

Answers 201 with NewWebhook.

Example answer
{  "id": "whk_X4llUGp4sGFkmDEl",  "url": "https://api.example.com/relayfor/events",  "events": [    "launch.confirmed",    "payout.credited",    "account.low_balance"  ],  "created_at": "2026-10-07T09:01:00.000Z",  "rotated_at": null,  "secret": "whsec_3J9mKq2Vx7Lp4Rt8Nc1Hd6Ys5Bz0Fw2Ga"}
Its fields
  • idstringRequired

    The endpoint's id: whk_ and 16 characters.

  • urlstringRequired

    Where events are sent.

  • events"launch.confirmed" | "launch.failed" | "token.imported" | "token.graduated" | "payout.credited" | "account.low_balance" | "key.limit_reached" | "route.changed"[]Required

    The event types it receives; empty for all of them.

  • created_atstringRequired

    When it was made, in UTC.

  • rotated_atstring | nullRequired

    When its secret was last replaced.

  • secretstring | nullRequired

    The signing secret, whsec_...: shown in this answer, and again to a retry with the same Idempotency-Key within 24 hours. Null only if it can't be given back: then rotate it.

Errors

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

Get an endpoint

GET

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

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

Path

  • idstringRequired

    The endpoint's id: whk_...

Answer

Answers 200 with Webhook.

Example answer
{  "id": "whk_X4llUGp4sGFkmDEl",  "url": "https://api.example.com/relayfor/events",  "events": [    "launch.confirmed",    "payout.credited",    "account.low_balance"  ],  "created_at": "2026-10-07T09:01:00.000Z",  "rotated_at": null}
Its fields
  • idstringRequired

    The endpoint's id: whk_ and 16 characters.

  • urlstringRequired

    Where events are sent.

  • events"launch.confirmed" | "launch.failed" | "token.imported" | "token.graduated" | "payout.credited" | "account.low_balance" | "key.limit_reached" | "route.changed"[]Required

    The event types it receives; empty for all of them.

  • created_atstringRequired

    When it was made, in UTC.

  • rotated_atstring | nullRequired

    When its secret was last replaced.

Errors

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

Delete an endpoint

DELETE

Deleting an endpoint already deleted answers it again, so a retry after a lost answer is safe.

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

Request
curl -X DELETE https://relayfor.si/api/project/v1/webhooks/whk_X4llUGp4sGFkmDEl \  -H "Authorization: Bearer $RELAYFOR_SECRET_KEY"

Path

  • idstringRequired

    The endpoint's id: whk_...

Answer

Answers 200 with Webhook.

Example answer
{  "id": "whk_X4llUGp4sGFkmDEl",  "url": "https://api.example.com/relayfor/events",  "events": [    "launch.confirmed",    "payout.credited",    "account.low_balance"  ],  "created_at": "2026-10-07T09:01:00.000Z",  "rotated_at": null}
Its fields
  • idstringRequired

    The endpoint's id: whk_ and 16 characters.

  • urlstringRequired

    Where events are sent.

  • events"launch.confirmed" | "launch.failed" | "token.imported" | "token.graduated" | "payout.credited" | "account.low_balance" | "key.limit_reached" | "route.changed"[]Required

    The event types it receives; empty for all of them.

  • created_atstringRequired

    When it was made, in UTC.

  • rotated_atstring | nullRequired

    When its secret was last replaced.

Errors

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

Rotate the signing secret

POST

The answer carries the new secret, and gives it again to a retry with the same Idempotency-Key. For 24 hours deliveries carry a signature under each secret, so the receiver can switch without missing one.

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/webhooks/whk_X4llUGp4sGFkmDEl/rotate \  -H "Authorization: Bearer $RELAYFOR_SECRET_KEY" \  -H "Idempotency-Key: $(uuidgen)"

Path

  • idstringRequired

    The endpoint's id: whk_...

Answer

Answers 200 with NewWebhook.

Example answer
{  "id": "whk_X4llUGp4sGFkmDEl",  "url": "https://api.example.com/relayfor/events",  "events": [    "launch.confirmed",    "payout.credited",    "account.low_balance"  ],  "created_at": "2026-10-07T09:01:00.000Z",  "rotated_at": "2026-10-07T15:30:00.000Z",  "secret": "whsec_8Pk1Lm5Qx9Ws2Vt7Nd4Hc3Yr6Bz0Fg1Ja"}
Its fields
  • idstringRequired

    The endpoint's id: whk_ and 16 characters.

  • urlstringRequired

    Where events are sent.

  • events"launch.confirmed" | "launch.failed" | "token.imported" | "token.graduated" | "payout.credited" | "account.low_balance" | "key.limit_reached" | "route.changed"[]Required

    The event types it receives; empty for all of them.

  • created_atstringRequired

    When it was made, in UTC.

  • rotated_atstring | nullRequired

    When its secret was last replaced.

  • secretstring | nullRequired

    The signing secret, whsec_...: shown in this answer, and again to a retry with the same Idempotency-Key within 24 hours. Null only if it can't be given back: then rotate it.

Errors

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

Send a test event

POST

Answers once the attempt is made, with how it went.

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/webhooks/whk_X4llUGp4sGFkmDEl/test \  -H "Authorization: Bearer $RELAYFOR_SECRET_KEY" \  -H "Idempotency-Key: $(uuidgen)"

Path

  • idstringRequired

    The endpoint's id: whk_...

Answer

Answers 201 with Delivery.

Example answer
{  "id": "dlv_fTVsO4UwhIn2defC",  "webhook": "whk_X4llUGp4sGFkmDEl",  "event": {    "id": "evt_4c9LGfliJda80U3V",    "type": "payout.credited"  },  "status": "delivered",  "attempts": 1,  "next_attempt_at": null,  "last_attempt_at": "2026-10-07T13:40:02.000Z",  "last_status": 200,  "last_error": null,  "delivered_at": "2026-10-07T13:40:02.000Z",  "created_at": "2026-10-07T13:40:01.000Z"}
Its fields
  • idstringRequired

    The delivery's id: dlv_ and 16 characters.

  • webhookstringRequired

    The endpoint: whk_...

  • eventobjectRequired

    The event it carries.

    • idstringRequired

      The event's id, evt_..., as its body names it.

    • typestringRequired

      The event's type, such as payout.credited.

  • status"pending" | "delivered" | "failed"Required

    pending: sent again later; delivered: answered 2xx; failed: given up.

  • attemptsintegerRequired

    How many times it was sent.

  • next_attempt_atstring | nullRequired

    When it is sent again; null once delivered or given up.

  • last_attempt_atstring | nullRequired

    When it was last sent; null before the first try.

  • last_statusinteger | nullRequired

    The HTTP status it last answered.

  • last_errorstring | nullRequired

    Why the last try failed, such as "answered 500".

  • delivered_atstring | nullRequired

    When the endpoint answered 2xx; null until then.

  • created_atstringRequired

    When it was made, in UTC.

Errors

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

List deliveries

GET

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

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

Query

  • webhookstring

    Only this endpoint's deliveries: whk_...

  • limitinteger

    1 to 100; default 20.

  • cursorstring

    next_cursor from the page before.

Answer

Answers 200 with DeliveryList.

Example answer
{  "data": [    {      "id": "dlv_fTVsO4UwhIn2defC",      "webhook": "whk_X4llUGp4sGFkmDEl",      "event": {        "id": "evt_4c9LGfliJda80U3V",        "type": "payout.credited"      },      "status": "delivered",      "attempts": 1,      "next_attempt_at": null,      "last_attempt_at": "2026-10-07T13:40:02.000Z",      "last_status": 200,      "last_error": null,      "delivered_at": "2026-10-07T13:40:02.000Z",      "created_at": "2026-10-07T13:40:01.000Z"    }  ],  "next_cursor": null}
Its fields
  • dataobject[]Required

    The items, newest first.

    • idstringRequired

      The delivery's id: dlv_ and 16 characters.

    • webhookstringRequired

      The endpoint: whk_...

    • eventobjectRequired

      The event it carries.

      • idstringRequired

        The event's id, evt_..., as its body names it.

      • typestringRequired

        The event's type, such as payout.credited.

    • status"pending" | "delivered" | "failed"Required

      pending: sent again later; delivered: answered 2xx; failed: given up.

    • attemptsintegerRequired

      How many times it was sent.

    • next_attempt_atstring | nullRequired

      When it is sent again; null once delivered or given up.

    • last_attempt_atstring | nullRequired

      When it was last sent; null before the first try.

    • last_statusinteger | nullRequired

      The HTTP status it last answered.

    • last_errorstring | nullRequired

      Why the last try failed, such as "answered 500".

    • delivered_atstring | nullRequired

      When the endpoint answered 2xx; null until then.

    • 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.

Send a delivery again

POST

Due now, with 24 hours of retries from now. The event keeps its id, so a receiver that handled it already can tell.

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/webhooks/deliveries/dlv_fTVsO4UwhIn2defC/replay \  -H "Authorization: Bearer $RELAYFOR_SECRET_KEY" \  -H "Idempotency-Key: $(uuidgen)"

Path

  • idstringRequired

    The delivery's id: dlv_...

Answer

Answers 200 with Delivery.

Example answer
{  "id": "dlv_fTVsO4UwhIn2defC",  "webhook": "whk_X4llUGp4sGFkmDEl",  "event": {    "id": "evt_4c9LGfliJda80U3V",    "type": "payout.credited"  },  "status": "delivered",  "attempts": 1,  "next_attempt_at": null,  "last_attempt_at": "2026-10-07T13:40:02.000Z",  "last_status": 200,  "last_error": null,  "delivered_at": "2026-10-07T13:40:02.000Z",  "created_at": "2026-10-07T13:40:01.000Z"}
Its fields
  • idstringRequired

    The delivery's id: dlv_ and 16 characters.

  • webhookstringRequired

    The endpoint: whk_...

  • eventobjectRequired

    The event it carries.

    • idstringRequired

      The event's id, evt_..., as its body names it.

    • typestringRequired

      The event's type, such as payout.credited.

  • status"pending" | "delivered" | "failed"Required

    pending: sent again later; delivered: answered 2xx; failed: given up.

  • attemptsintegerRequired

    How many times it was sent.

  • next_attempt_atstring | nullRequired

    When it is sent again; null once delivered or given up.

  • last_attempt_atstring | nullRequired

    When it was last sent; null before the first try.

  • last_statusinteger | nullRequired

    The HTTP status it last answered.

  • last_errorstring | nullRequired

    Why the last try failed, such as "answered 500".

  • delivered_atstring | nullRequired

    When the endpoint answered 2xx; null until then.

  • created_atstringRequired

    When it was made, in UTC.

Errors

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

Events

Every event relayfor.si posts, and what its data holds. Deliveries are signed: see checking a signature.

Every event

Each delivery is a POST of this envelope. data holds what the event is about, as the entries below show.

  • idstringRequired

    The event's id: evt_ and 16 characters. The same event may arrive twice.

  • typestringRequired

    The event's type.

  • created_atstringRequired

    When it happened, in UTC.

  • projectstringRequired

    The project's id: prj_...

launch.confirmed

A launch the chain confirmed: its token is on its route.

data holdslaunch
  • launchobjectRequired

    The launch or import, as GET /launches/{id} answers it.

    • 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.

launch.failed

A launch the chain refused, or whose route came out other than prepared.

data holdslaunch
  • launchobjectRequired

    The launch or import, as GET /launches/{id} answers it.

    • 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.

token.imported

An import the chain confirmed: the existing token is on its route.

data holdslaunch
  • launchobjectRequired

    The launch or import, as GET /launches/{id} answers it.

    • 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.

token.graduated

A token's curve completed: it trades on PumpSwap, its fees still on its route.

data holdstokengraduated_at
  • tokenobjectRequired

    The token that graduated.

    • mintstringRequired

      The token's mint address.

    • namestringRequired

      The token's name.

    • symbolstringRequired

      The token's ticker.

  • graduated_atstringRequired

    When its curve completed, in UTC.

payout.credited

A payout of a token's creator fees became AI credit.

data holdspayout
  • payoutobjectRequired

    The payout, and the credit it became.

    • tokenstringRequired

      The token's mint.

    • accountstringRequired

      The credit account it was credited to: acc_...

    • signaturestringRequired

      The payout's transaction.

    • eventstringRequired

      Which of the transaction's payout events: a transaction may carry several.

    • slotstringRequired

      The slot the payout landed in.

    • quote_mintstringRequired

      What it was paid in: wrapped SOL for SOL, else the token's quote.

    • distributed_lamportsstringRequired

      What the payout shared among every shareholder, in the quote's base units.

    • ai_bpsintegerRequired

      The AI's share of the route, in basis points.

    • ai_lamportsstringRequired

      What reached the token's vault, in the quote's base units.

    • sol_usdobject | nullRequired

      Pyth's SOL/USD price the payout was valued at, credited at the price less its confidence; null for a payout in a token.

      • pricestringRequired

        Dollars per SOL.

      • confidencestringRequired

        Pyth's stated uncertainty, in dollars.

      • published_atstringRequired

        When Pyth published the price.

    • credited_usdstring | nullRequired

      The credit it became, in dollars; null while a token payout waits to be sold for USDC.

    • created_atstringRequired

      When it was made, in UTC.

account.low_balance

An account's spendable credit fell under the threshold: once, until a credit lifts it back.

data holdsaccountthreshold_usd
  • accountobjectRequired

    The account as it stands now.

    • idstringRequired

      The account's id: acc_ and 16 characters.

    • tokenobject | nullRequired

      The token whose AI share lands here.

      • mintstringRequired

        The token's mint address.

      • namestringRequired

        The token's name.

      • symbolstringRequired

        The token's ticker.

    • spendable_usdstringRequired

      What new calls can reserve now: the balance less what is reserved.

    • balance_usdstringRequired

      Credit left, what running calls reserved included.

    • reserved_usdstringRequired

      Held by calls still running or waiting on their cost.

    • credited_usdstringRequired

      Every credit the account ever received.

    • spent_usdstringRequired

      Everything its calls were charged.

    • running_callsintegerRequired

      Calls running on it now: it allows 8 at once.

    • created_atstringRequired

      When it was made, in UTC.

  • threshold_usdstringRequired

    The threshold: $5.

key.limit_reached

A router key's call was refused for its spending limit: once in each of the limit's periods.

data holdskey
  • keyobjectRequired

    The key refused, with its limit.

    • idstringRequired

      The key's id: key_ and 16 characters.

    • namestringRequired

      What uses it, such as the agent's name.

    • hintstringRequired

      The key's first characters: enough to tell keys apart.

    • accountstringRequired

      The account it spends: acc_...

    • limitobject | nullRequired

      Its spending limit and what this period used of it; null for none.

      • limit_usdstringRequired

        Dollars it may spend each period.

      • reset"daily" | "weekly" | "monthly"Required

        When the limit starts over, at 00:00 UTC.

      • spent_usdstringRequired

        Charged to its calls that started this period.

      • reserved_usdstringRequired

        Held by its calls of this period still open.

      • remaining_usdstringRequired

        What it may still start this period.

      • resets_atstringRequired

        00:00 UTC; a week starts on Monday.

    • created_atstringRequired

      When it was made, in UTC.

    • last_used_atstring | nullRequired

      When it last started a call; null if never.

    • revoked_atstring | nullRequired

      When it was revoked; null while it works.

route.changed

A token's creator fees no longer follow the route relayfor locked (a takeover on pump.fun): its payouts stop.

data holdstokenreasondetected_at
  • tokenobjectRequired

    The token whose fees moved.

    • mintstringRequired

      The token's mint address.

    • namestringRequired

      The token's name.

    • symbolstringRequired

      The token's ticker.

  • reasonstringRequired

    What the chain shows instead.

  • detected_atstringRequired

    When relayfor saw it, in UTC.

ping

A test event, sent only to the endpoint tested (POST /webhooks/{id}/test).

data holdsmessage
  • messagestringRequired

    A line saying it is a test.

On this page