From 41c1af75e6114fd752d74f925839d89124ed9c56 Mon Sep 17 00:00:00 2001 From: alchemy-bot <80712764+alchemy-bot@users.noreply.github.com> Date: Wed, 5 Aug 2026 12:13:07 +0000 Subject: [PATCH 1/8] [docs-agent] Add Solana Jito bundle methods (sendBundle, getBundleStatuses, getTipAccounts, getInflightBundleStatuses) Documents 4 Jito bundle methods that Alchemy will proxy on the Solana JSON-RPC endpoint (`solana-mainnet.g.alchemy.com/v2/{apiKey}`), each costing 40 CU: - `sendBundle`: submit a bundle of up to 5 signed transactions for atomic, sequential execution. - `getBundleStatuses`: query the on-chain landing status of one or more bundle IDs. - `getTipAccounts`: retrieve the 8 static Jito tip accounts. - `getInflightBundleStatuses`: query in-flight status (Pending/Landed/Failed/Invalid) within the block engine's 5-minute look-back window. Each method has request/response examples and links out to Jito's canonical docs. The methods are guarded by `x-bot-ignore` so Daikon's daily sync does not strip them before chain-config catches up. Refs DOCS-176 Requested-by: @victorbware --- .../pricing/compute-unit-costs.mdx | 4 + .../solana/solana-api-overview.mdx | 9 + .../chains/_components/solana/methods.yaml | 202 ++++++++++++++++++ .../_components/solana/transaction.yaml | 99 +++++++++ src/openrpc/chains/solana/solana.yaml | 9 + 5 files changed, 323 insertions(+) diff --git a/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx b/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx index c026d3868..35589138d 100644 --- a/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx +++ b/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx @@ -146,10 +146,14 @@ For more details, check out the [Compute Units](/docs/reference/compute-units#wh | simulateBundle | 20 | | | simulateTransaction | 20 | | | getBlock | 40 | | +| getBundleStatuses | 40 | | | getFirstAvailableBlock | 40 | | | getInflationReward | 40 | 300 | +| getInflightBundleStatuses | 40 | | | getSignaturesForAddress | 40 | | +| getTipAccounts | 40 | | | getTransaction | 40 | | +| sendBundle | 40 | | | getTransactionsForAddress | 100 | | | getSupply | 160 | 800 | | getLargestAccounts | 3000 | | diff --git a/content/api-reference/solana/solana-api-overview.mdx b/content/api-reference/solana/solana-api-overview.mdx index e1c805b6f..7d7f8c977 100644 --- a/content/api-reference/solana/solana-api-overview.mdx +++ b/content/api-reference/solana/solana-api-overview.mdx @@ -40,6 +40,15 @@ slug: docs/solana/solana-api-overview | [`requestAirdrop`](/docs/chains/solana/solana-api-endpoints/request-airdrop) | [`sendTransaction`](/docs/chains/solana/solana-api-endpoints/send-transaction) | | [`simulateBundle`](/docs/chains/solana/solana-api-endpoints/simulate-bundle) | [`simulateTransaction`](/docs/chains/solana/solana-api-endpoints/simulate-transaction) | +## Jito bundle methods + +Alchemy proxies four of [Jito's](https://docs.jito.wtf/lowlatencytxnsend/#bundles-api-v1) low-latency bundle methods on the Solana endpoint. Bundles are groups of up to 5 transactions that execute sequentially and atomically (all-or-nothing) in a single slot. A tip to one of the [`getTipAccounts`](/docs/chains/solana/solana-api-endpoints/get-tip-accounts) pubkeys is required for a bundle to be considered by the block engine (minimum 1,000 lamports). + +| | | +| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| [`sendBundle`](/docs/chains/solana/solana-api-endpoints/send-bundle) | [`getBundleStatuses`](/docs/chains/solana/solana-api-endpoints/get-bundle-statuses) | +| [`getTipAccounts`](/docs/chains/solana/solana-api-endpoints/get-tip-accounts) | [`getInflightBundleStatuses`](/docs/chains/solana/solana-api-endpoints/get-inflight-bundle-statuses) | + ## Related APIs The following Alchemy APIs are also supported on Solana: diff --git a/src/openrpc/chains/_components/solana/methods.yaml b/src/openrpc/chains/_components/solana/methods.yaml index 07ba1ae47..5bbf7564f 100644 --- a/src/openrpc/chains/_components/solana/methods.yaml +++ b/src/openrpc/chains/_components/solana/methods.yaml @@ -1082,6 +1082,208 @@ components: schema: $ref: "./transaction.yaml#/components/schemas/SimulatedBundleResult" + sendBundle: + name: sendBundle + summary: Submit a Jito bundle to the block engine. + description: >- + Submits a bundle of signed transactions to the Jito block engine for atomic + processing. Transactions are processed sequentially in the order given; if any + transaction fails, the entire bundle is rejected (all-or-nothing). Returns a + `bundle_id` immediately once the bundle is accepted; this does not guarantee + the bundle lands on-chain. Use [`getBundleStatuses`](/docs/chains/solana/solana-api-endpoints/get-bundle-statuses) + or [`getInflightBundleStatuses`](/docs/chains/solana/solana-api-endpoints/get-inflight-bundle-statuses) + to poll the bundle's status. + + + A tip is required for the bundle to be considered. The tip can be any + instruction (top-level or CPI) that transfers SOL to one of the 8 Jito tip + accounts. Use [`getTipAccounts`](/docs/chains/solana/solana-api-endpoints/get-tip-accounts) + to retrieve them, and randomize the selection to reduce contention. The + minimum tip is 1,000 lamports; competitive MEV opportunities may require + significantly higher tips. + + + See Jito's [Low Latency Transaction Send](https://docs.jito.wtf/lowlatencytxnsend/#sendbundle) + docs for background on bundle mechanics. + x-compute-units: 40 + params: + - name: Encoded transactions + required: true + description: >- + Fully-signed transactions as base64 (recommended) or base58 (deprecated) + encoded strings. Maximum of 5 transactions. + schema: + type: array + maxItems: 5 + items: + type: string + - name: Configuration + required: false + description: Optional configuration object specifying the encoding used for the transactions. + schema: + $ref: "./transaction.yaml#/components/schemas/SendBundleConfig" + examples: + - name: sendBundle example + params: + - name: Encoded transactions + value: + - "AT2AqtlokikUWgGNnSX5xrmdvBjSaiIPxvFz6zc5Abn5Z0CPFW5GO+Y3rXceLnqLgQFnGw0yTk3NtJdFNsbrwwQBAAIEsXPDJ9cMVbpFQYClVM7PGLh8JOfCD6E2vz5VNmBCF+p4Uhyxec67hYm1VqLV7JTSSYaC/fm7KvWtZOSRzEFT2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI1i3Wzl2VfewCI8oYXParnP78725sKFzYheTEn8v865YQIDABhqaXRvIGJ1bmRsZSAwOiBqaXRvIHRlc3QCAgABDAIAAACghgEAAAAAAA==" + - "AS6fOZuGDsmyYdd+RC0fiFUgNe1BYTOYT+1hkRXHAeroC8R60h3g34EPF5Ys8sGzVBMP9MDSTVgy1/SSTqpCtA4BAAIEsXPDJ9cMVbpFQYClVM7PGLh8JOfCD6E2vz5VNmBCF+p4Uhyxec67hYm1VqLV7JTSSYaC/fm7KvWtZOSRzEFT2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUpTWpkpIQZNJOhxYNo4fHw1td28kruB5B+oQEEFRI1i3Wzl2VfewCI8oYXParnP78725sKFzYheTEn8v865YQIDABhqaXRvIGJ1bmRsZSAxOiBqaXRvIHRlc3QCAgABDAIAAACghgEAAAAAAA==" + - name: Configuration + value: + encoding: base64 + result: + name: Bundle ID + value: "2id3YC2jK9G5Wo2phDx4gJVAew8DcY5NAojnVuao8rkxwPYPe8cSwE5GzhEgJA2y8fVjDEo6iR6ykBvDxrTQrtpb" + result: + name: Bundle ID + description: The bundle ID, used to identify the bundle. This is the SHA-256 hash of the bundle's transaction signatures. + schema: + type: string + + getBundleStatuses: + name: getBundleStatuses + summary: Get the status of submitted Jito bundles. + description: >- + Returns the status of one or more previously submitted Jito bundles. + Behaves similarly to Solana's `getSignatureStatuses` but keyed on `bundle_id`. + If a bundle is not found or has not landed, its entry is omitted from the + `value` array. + + + Internally the block engine calls `getSignatureStatuses` with the default + `searchTransactionHistory: false`, so only recent slots plus up to + `MAX_RECENT_BLOCKHASHES` (currently 300) rooted slots are searched. + + + See Jito's [getBundleStatuses](https://docs.jito.wtf/lowlatencytxnsend/#getbundlestatuses) + docs for the underlying block engine behavior. + x-compute-units: 40 + params: + - name: Bundle IDs + required: true + description: An array of bundle IDs to confirm. Maximum of 5. + schema: + type: array + maxItems: 5 + items: + type: string + examples: + - name: getBundleStatuses example + params: + - name: Bundle IDs + value: + - "892b79ed49138bfb3aa5441f0df6e06ef34f9ee8f3976c15b323605bae0cf51d" + result: + name: Bundle statuses + value: + context: + slot: 242806119 + value: + - bundle_id: "892b79ed49138bfb3aa5441f0df6e06ef34f9ee8f3976c15b323605bae0cf51d" + transactions: + - "3bC2M9fiACSjkTXZDgeNAuQ4ScTsdKGwR42ytFdhUvikqTmBheUxfsR1fDVsM5ADCMMspuwGkdm1uKbU246x5aE3" + - "8t9hKYEYNbLvNqiSzP96S13XF1C2f1ro271Kdf7bkZ6EpjPLuDff1ywRy4gfaGSTubsM2FeYGDoT64ZwPm1cQUt" + slot: 242804011 + confirmation_status: "finalized" + err: + Ok: null + result: + name: Bundle statuses + description: The status of each submitted bundle, or an empty `value` array if none of the requested bundles are found in recent slots. + schema: + $ref: "./transaction.yaml#/components/schemas/BundleStatusesResult" + + getTipAccounts: + name: getTipAccounts + summary: Get the Jito tip accounts. + description: >- + Returns the 8 Jito tip accounts designated to receive bundle tips. To reduce + contention, pick one at random for each bundle. The tip account addresses + remain constant. + + + See Jito's [getTipAccounts](https://docs.jito.wtf/lowlatencytxnsend/#gettipaccounts) + docs for background. + x-compute-units: 40 + params: [] + examples: + - name: getTipAccounts example + params: [] + result: + name: Tip accounts + value: + - "96gYZGLnJYVFmbjzopPSU6QiEV5fGqZNyN9nmNhvrZU5" + - "HFqU5x63VTqvQss8hp11i4wVV8bD44PvwucfZ2bU7gRe" + - "Cw8CFyM9FkoMi7K7Crf6HNQqf4uEMzpKw6QNghXLvLkY" + - "ADaUMid9yfUytqMBgopwjb2DTLSokTSzL1zt6iGPaS49" + - "DfXygSm4jCyNCybVYYK6DwvWqjKee8pbDmJGcLWNDXjh" + - "ADuUkR4vqLUMWXxW9gh6D6L8pMSawimctcNZ5pGwDcEt" + - "DttWaMuVvTiduZRnguLF7jNxTgiMBZ1hyAumKUiL2KRL" + - "3AVi9Tg9Uo68tJfuvoKvqKNWKkC5wPdSSdeBnizKZ6jT" + result: + name: Tip accounts + description: The list of 8 Jito tip accounts as base-58 encoded pubkey strings. + schema: + type: array + items: + $ref: "./base-types.yaml#/components/schemas/Pubkey" + + getInflightBundleStatuses: + name: getInflightBundleStatuses + summary: Get the in-flight status of Jito bundles from the last 5 minutes. + description: >- + Returns the in-flight status of one or more Jito bundles submitted within + the last 5 minutes. Up to 5 bundle IDs may be queried in a single request. + Statuses are one of: + + + * `Failed`: every region that received the bundle has marked it as failed and it has not been forwarded. + + * `Pending`: the bundle has not failed, landed, or been marked invalid. + + * `Landed`: the bundle has landed on-chain, verified via RPC or the `bundles_landed` table. + + * `Invalid`: the bundle is no longer in the block engine's 5-minute look back window. + + + See Jito's [getInflightBundleStatuses](https://docs.jito.wtf/lowlatencytxnsend/#getinflightbundlestatuses) + docs for background. + x-compute-units: 40 + params: + - name: Bundle IDs + required: true + description: An array of bundle IDs to confirm. Maximum of 5. + schema: + type: array + maxItems: 5 + items: + type: string + examples: + - name: getInflightBundleStatuses example + params: + - name: Bundle IDs + value: + - "b31e5fae4923f345218403ac1ab242b46a72d4f2a38d131f474255ae88f1ec9a" + - "e3c4d7933cf3210489b17307a14afbab2e4ae3c67c9e7157156f191f047aa6e8" + result: + name: Inflight bundle statuses + value: + context: + slot: 280999028 + value: + - bundle_id: "b31e5fae4923f345218403ac1ab242b46a72d4f2a38d131f474255ae88f1ec9a" + status: "Invalid" + landed_slot: null + - bundle_id: "e3c4d7933cf3210489b17307a14afbab2e4ae3c67c9e7157156f191f047aa6e8" + status: "Invalid" + landed_slot: null + result: + name: Inflight bundle statuses + description: The in-flight status of each queried bundle. + schema: + $ref: "./transaction.yaml#/components/schemas/InflightBundleStatusesResult" + getSignaturesForAddress: name: getSignaturesForAddress description: Returns signatures for confirmed transactions that include the given address. diff --git a/src/openrpc/chains/_components/solana/transaction.yaml b/src/openrpc/chains/_components/solana/transaction.yaml index 188f2c975..abc7c553e 100644 --- a/src/openrpc/chains/_components/solana/transaction.yaml +++ b/src/openrpc/chains/_components/solana/transaction.yaml @@ -542,3 +542,102 @@ components: $ref: "./base-types.yaml#/components/schemas/Commitment" minContextSlot: $ref: "./base-types.yaml#/components/schemas/MinContextSlot" + SendBundleConfig: + title: SendBundle Configuration + type: object + properties: + encoding: + type: string + description: Encoding used for the transaction data. `base64` is recommended; `base58` is deprecated. + enum: + - base64 + - base58 + default: base58 + BundleStatus: + title: Bundle Status + type: object + properties: + bundle_id: + type: string + description: The bundle ID. + transactions: + type: array + items: + type: string + description: The list of base-58 encoded transaction signatures in the bundle. The list will not be empty. + slot: + type: integer + description: The slot in which this bundle was processed. + confirmation_status: + type: string + description: The bundle transactions' cluster confirmation status; either `processed`, `confirmed`, or `finalized`. + enum: + - processed + - confirmed + - finalized + err: + type: object + nullable: true + description: The retryable or non-retryable error encountered when getting the bundle status. If retryable, query again. + BundleStatusesResult: + title: Bundle Statuses Result + type: object + nullable: true + description: An RPC response containing the bundle statuses, or `null` if none of the requested bundles are found. + properties: + context: + type: object + properties: + slot: + type: integer + description: The slot at which the request was processed. + value: + type: array + description: An array of bundle status objects. Empty if none of the requested bundles are found. + items: + $ref: "#/components/schemas/BundleStatus" + InflightBundleStatus: + title: Inflight Bundle Status + type: object + properties: + bundle_id: + type: string + description: The bundle ID. + status: + type: string + description: >- + The inflight status of the bundle. + + `Invalid`: bundle ID is not in the block engine's 5-minute look back window. + + `Pending`: bundle has not failed, landed, or been marked invalid. + + `Failed`: every region that received the bundle has marked it as failed and it has not been forwarded. + + `Landed`: bundle has landed on-chain, verified via RPC or the `bundles_landed` table. + enum: + - Invalid + - Pending + - Failed + - Landed + landed_slot: + type: integer + nullable: true + description: The slot the bundle landed in, or `null` if the bundle is `Invalid`, `Pending`, or `Failed`. + InflightBundleStatusesResult: + title: Inflight Bundle Statuses Result + type: object + nullable: true + description: An RPC response containing the inflight bundle statuses, or `null` if none of the requested bundles are found. + properties: + context: + type: object + properties: + slot: + type: integer + description: The slot at which the request was processed. + value: + type: array + description: An array of inflight bundle status objects. + items: + $ref: "#/components/schemas/InflightBundleStatus" diff --git a/src/openrpc/chains/solana/solana.yaml b/src/openrpc/chains/solana/solana.yaml index 783b1a9aa..4243443bd 100644 --- a/src/openrpc/chains/solana/solana.yaml +++ b/src/openrpc/chains/solana/solana.yaml @@ -79,6 +79,11 @@ methods: - $ref: ../_components/solana/methods.yaml#/components/methods/minimumLedgerSlot - $ref: ../_components/solana/methods.yaml#/components/methods/requestAirdrop - $ref: ../_components/solana/methods.yaml#/components/methods/simulateBundle + - $ref: ../_components/solana/methods.yaml#/components/methods/sendBundle + - $ref: ../_components/solana/methods.yaml#/components/methods/getBundleStatuses + - $ref: ../_components/solana/methods.yaml#/components/methods/getTipAccounts + - $ref: >- + ../_components/solana/methods.yaml#/components/methods/getInflightBundleStatuses - $ref: >- ../_components/solana/methods.yaml#/components/methods/getTokenAccountsByOwnerAtSlot - $ref: ../_components/solana/methods.yaml#/components/methods/getHealth @@ -87,6 +92,10 @@ methods: ../_components/solana/methods.yaml#/components/methods/simulateTransaction - $ref: ../_components/solana/methods.yaml#/components/methods/getTransaction x-bot-ignore: + - sendBundle + - getBundleStatuses + - getTipAccounts + - getInflightBundleStatuses - getAsset - getAsset_v2 - getAssetBatch_v2 From 7360877d28e8b1e991eaf169937cbf2ddfddef84 Mon Sep 17 00:00:00 2001 From: alchemy-bot <80712764+alchemy-bot@users.noreply.github.com> Date: Wed, 5 Aug 2026 12:22:48 +0000 Subject: [PATCH 2/8] [docs-agent] Restructure Solana Jito bundle methods into dedicated section (like Photon) Moves the 4 Jito bundle methods (`sendBundle`, `getBundleStatuses`, `getTipAccounts`, `getInflightBundleStatuses`) out of the standard Solana JSON-RPC spec into their own alchemy/solana-jito product spec + overview page, matching the Solana Photon API pattern per Victor's request. Changes vs prior commit: - New `src/openrpc/alchemy/solana-jito/solana-jito.yaml` product spec (mirrors solana-photon layout). - New `content/api-reference/solana/solana-jito-bundles-overview.mdx` overview page with background, auction explainer, endpoints, methods table, and related-methods section. - `content/docs.yml` gets a new `section: Solana Jito Bundles and Transactions` under the Solana tab, placed right after Solana Photon API. - Method $refs and x-bot-ignore entries reverted in `src/openrpc/chains/solana/solana.yaml` (methods now live only in the alchemy product spec, alchemy specs aren't managed by Daikon). - "Jito bundle methods" table reverted from `solana-api-overview.mdx`. - 4 CU rows moved from the Solana Standard JSON-RPC Methods table into a new "Solana: Jito Bundles and Transactions" CU section on compute-unit-costs.mdx (marker `cu:auto product="solana-jito"`). - Cross-links in method descriptions updated to the new Photon-style URL pattern (`/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/`). Refs DOCS-176 Requested-by: @victorbware --- .../pricing/compute-unit-costs.mdx | 17 ++++++-- .../solana/solana-api-overview.mdx | 9 ---- .../solana/solana-jito-bundles-overview.mdx | 43 +++++++++++++++++++ content/docs.yml | 7 +++ .../alchemy/solana-jito/solana-jito.yaml | 23 ++++++++++ .../chains/_components/solana/methods.yaml | 6 +-- src/openrpc/chains/solana/solana.yaml | 9 ---- 7 files changed, 89 insertions(+), 25 deletions(-) create mode 100644 content/api-reference/solana/solana-jito-bundles-overview.mdx create mode 100644 src/openrpc/alchemy/solana-jito/solana-jito.yaml diff --git a/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx b/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx index 35589138d..8beb55292 100644 --- a/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx +++ b/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx @@ -146,14 +146,10 @@ For more details, check out the [Compute Units](/docs/reference/compute-units#wh | simulateBundle | 20 | | | simulateTransaction | 20 | | | getBlock | 40 | | -| getBundleStatuses | 40 | | | getFirstAvailableBlock | 40 | | | getInflationReward | 40 | 300 | -| getInflightBundleStatuses | 40 | | | getSignaturesForAddress | 40 | | -| getTipAccounts | 40 | | | getTransaction | 40 | | -| sendBundle | 40 | | | getTransactionsForAddress | 100 | | | getSupply | 160 | 800 | | getLargestAccounts | 3000 | | @@ -224,6 +220,19 @@ The [Solana Account Archive](/docs/solana/account-archive) is served through the | getValidityProofV2 | 1200 | 500 | {/* cu:auto end */} +# Solana: Jito Bundles and Transactions + +Alchemy proxies Jito's [low-latency bundle methods](/docs/chains/solana/solana-jito-bundles-and-transactions) on the standard Solana RPC endpoint. Bundles execute atomically and sequentially, with a tip to one of the Jito tip accounts required for inclusion. + +{/* cu:auto product="solana-jito" */} +| Method | CU | Throughput CU | +| -------------------------- | --- | ------------- | +| getBundleStatuses | 40 | | +| getInflightBundleStatuses | 40 | | +| getTipAccounts | 40 | | +| sendBundle | 40 | | +{/* cu:auto end */} + # Solana: Yellowstone gRPC [Yellowstone gRPC](/docs/reference/yellowstone-grpc-overview) is a high-performance streaming service for Solana that delivers real-time blockchain data via gRPC. Pricing is based on **bandwidth:** the amount of data delivered as part of the stream. diff --git a/content/api-reference/solana/solana-api-overview.mdx b/content/api-reference/solana/solana-api-overview.mdx index 7d7f8c977..e1c805b6f 100644 --- a/content/api-reference/solana/solana-api-overview.mdx +++ b/content/api-reference/solana/solana-api-overview.mdx @@ -40,15 +40,6 @@ slug: docs/solana/solana-api-overview | [`requestAirdrop`](/docs/chains/solana/solana-api-endpoints/request-airdrop) | [`sendTransaction`](/docs/chains/solana/solana-api-endpoints/send-transaction) | | [`simulateBundle`](/docs/chains/solana/solana-api-endpoints/simulate-bundle) | [`simulateTransaction`](/docs/chains/solana/solana-api-endpoints/simulate-transaction) | -## Jito bundle methods - -Alchemy proxies four of [Jito's](https://docs.jito.wtf/lowlatencytxnsend/#bundles-api-v1) low-latency bundle methods on the Solana endpoint. Bundles are groups of up to 5 transactions that execute sequentially and atomically (all-or-nothing) in a single slot. A tip to one of the [`getTipAccounts`](/docs/chains/solana/solana-api-endpoints/get-tip-accounts) pubkeys is required for a bundle to be considered by the block engine (minimum 1,000 lamports). - -| | | -| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| [`sendBundle`](/docs/chains/solana/solana-api-endpoints/send-bundle) | [`getBundleStatuses`](/docs/chains/solana/solana-api-endpoints/get-bundle-statuses) | -| [`getTipAccounts`](/docs/chains/solana/solana-api-endpoints/get-tip-accounts) | [`getInflightBundleStatuses`](/docs/chains/solana/solana-api-endpoints/get-inflight-bundle-statuses) | - ## Related APIs The following Alchemy APIs are also supported on Solana: diff --git a/content/api-reference/solana/solana-jito-bundles-overview.mdx b/content/api-reference/solana/solana-jito-bundles-overview.mdx new file mode 100644 index 000000000..43e44ecb0 --- /dev/null +++ b/content/api-reference/solana/solana-jito-bundles-overview.mdx @@ -0,0 +1,43 @@ +--- +title: Solana Jito Bundles and Transactions +description: Alchemy's Jito bundle APIs for low-latency, atomic transaction execution on Solana. +subtitle: Alchemy's Jito bundle APIs for low-latency, atomic transaction execution on Solana. +--- + +## Background + +Alchemy proxies [Jito's](https://docs.jito.wtf/lowlatencytxnsend/) low-latency bundle methods on the standard Solana RPC endpoints, so you can submit atomic multi-transaction bundles through the same endpoint you already use for Solana Core RPC. + +A **bundle** is a group of up to 5 signed Solana transactions that execute: + +* **Sequentially** — in the exact order you list them. +* **Atomically** — within a single slot, all-or-nothing. If any transaction fails, none of them commit to the chain. + +Bundles are the standard MEV primitive on Solana today: multi-leg arbitrage, backrunning, atomic setup-and-cleanup, and launch sniping with revert guards all rely on the atomicity a bundle provides. + +## How the auction works + +Bundles do not go through Solana's normal gossip path. They go to the [Jito Block Engine](https://docs.jito.wtf/lowlatencytxnsend/#how-does-the-system-work), which collects bundles from searchers, simulates them, runs a sealed-bid auction per block, and forwards winners to the current leader when that leader runs `Jito-Solana` (about 95% of Solana stake at time of writing). + +Your bid in that auction is the **Jito tip** — a plain SOL transfer to one of the [8 tip accounts](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-tip-accounts) returned by `getTipAccounts`, included in one of your bundle's transactions. The minimum tip is 1,000 lamports; contested MEV opportunities can require substantially higher tips. See Jito's [tip amount guidance](https://docs.jito.wtf/lowlatencytxnsend/#tip-amount) for current recommendations. + +## Endpoints + +These methods are served through the standard Solana Alchemy endpoints (`https://solana-mainnet.g.alchemy.com/v2/{apiKey}` and `https://solana-devnet.g.alchemy.com/v2/{apiKey}`), so you can call them with the same client you already use for Solana Core RPC. + +## Methods + +| Method | Function | CU cost | +| --- | --- | --- | +| [sendBundle](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/send-bundle) | Submit a bundle of up to 5 signed transactions to the block engine for atomic execution. | 40 | +| [getBundleStatuses](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-bundle-statuses) | Return the on-chain landing status of one or more submitted bundle IDs. | 40 | +| [getTipAccounts](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-tip-accounts) | Retrieve the 8 Jito tip accounts designated to receive bundle tips. | 40 | +| [getInflightBundleStatuses](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-inflight-bundle-statuses) | Query the in-flight status (`Pending`, `Landed`, `Failed`, `Invalid`) of bundles submitted in the last 5 minutes. | 40 | + +For deeper background on bundle mechanics, tip strategy, sandwich mitigation via `jitodontfront`, and Jito's own SDKs (Python, JS/TS, Rust, Go), see Jito's [Low Latency Transaction Send docs](https://docs.jito.wtf/lowlatencytxnsend/#bundles-api-v1). + +## Related + +* [`simulateBundle`](/docs/chains/solana/solana-api-endpoints/simulate-bundle) — simulate a Jito bundle before submitting it, without paying a tip. +* [`sendTransaction`](/docs/chains/solana/solana-api-endpoints/send-transaction) — standard Solana single-transaction submission. +* [MEV Protection](/docs/reference/mev-protection) — Alchemy's built-in MEV protection for standard Solana transactions. diff --git a/content/docs.yml b/content/docs.yml index f6c9f0319..63aa3b3e2 100644 --- a/content/docs.yml +++ b/content/docs.yml @@ -346,6 +346,13 @@ navigation: - api: Solana Photon API api-name: solana-photon flattened: true + - section: Solana Jito Bundles and Transactions + path: >- + api-reference/solana/solana-jito-bundles-overview.mdx + contents: + - api: Solana Jito Bundles and Transactions + api-name: solana-jito + flattened: true - section: Tutorials contents: - link: Hello World Solana Application diff --git a/src/openrpc/alchemy/solana-jito/solana-jito.yaml b/src/openrpc/alchemy/solana-jito/solana-jito.yaml new file mode 100644 index 000000000..279bd1de7 --- /dev/null +++ b/src/openrpc/alchemy/solana-jito/solana-jito.yaml @@ -0,0 +1,23 @@ +# yaml-language-server: $schema=https://meta.open-rpc.org/ + +$schema: https://meta.open-rpc.org/ +openrpc: 1.2.4 +info: + title: Alchemy Solana Jito Bundles and Transactions Specification + description: |- + JSON-RPC specification for the [Jito](https://docs.jito.wtf/lowlatencytxnsend/#bundles-api-v1) + low-latency bundle methods proxied through Alchemy's Solana RPC endpoints. + Bundles are groups of up to 5 transactions that execute sequentially and + atomically in a single slot, with a tip to one of the Jito tip accounts to + incentivize inclusion. + version: 0.0.0 +servers: + - url: https://solana-mainnet.g.alchemy.com/v2 + name: Solana Mainnet + - url: https://solana-devnet.g.alchemy.com/v2 + name: Solana Devnet +methods: + - $ref: ../../chains/_components/solana/methods.yaml#/components/methods/sendBundle + - $ref: ../../chains/_components/solana/methods.yaml#/components/methods/getBundleStatuses + - $ref: ../../chains/_components/solana/methods.yaml#/components/methods/getTipAccounts + - $ref: ../../chains/_components/solana/methods.yaml#/components/methods/getInflightBundleStatuses diff --git a/src/openrpc/chains/_components/solana/methods.yaml b/src/openrpc/chains/_components/solana/methods.yaml index 5bbf7564f..6d653b2cb 100644 --- a/src/openrpc/chains/_components/solana/methods.yaml +++ b/src/openrpc/chains/_components/solana/methods.yaml @@ -1090,14 +1090,14 @@ components: processing. Transactions are processed sequentially in the order given; if any transaction fails, the entire bundle is rejected (all-or-nothing). Returns a `bundle_id` immediately once the bundle is accepted; this does not guarantee - the bundle lands on-chain. Use [`getBundleStatuses`](/docs/chains/solana/solana-api-endpoints/get-bundle-statuses) - or [`getInflightBundleStatuses`](/docs/chains/solana/solana-api-endpoints/get-inflight-bundle-statuses) + the bundle lands on-chain. Use [`getBundleStatuses`](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-bundle-statuses) + or [`getInflightBundleStatuses`](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-inflight-bundle-statuses) to poll the bundle's status. A tip is required for the bundle to be considered. The tip can be any instruction (top-level or CPI) that transfers SOL to one of the 8 Jito tip - accounts. Use [`getTipAccounts`](/docs/chains/solana/solana-api-endpoints/get-tip-accounts) + accounts. Use [`getTipAccounts`](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-tip-accounts) to retrieve them, and randomize the selection to reduce contention. The minimum tip is 1,000 lamports; competitive MEV opportunities may require significantly higher tips. diff --git a/src/openrpc/chains/solana/solana.yaml b/src/openrpc/chains/solana/solana.yaml index 4243443bd..783b1a9aa 100644 --- a/src/openrpc/chains/solana/solana.yaml +++ b/src/openrpc/chains/solana/solana.yaml @@ -79,11 +79,6 @@ methods: - $ref: ../_components/solana/methods.yaml#/components/methods/minimumLedgerSlot - $ref: ../_components/solana/methods.yaml#/components/methods/requestAirdrop - $ref: ../_components/solana/methods.yaml#/components/methods/simulateBundle - - $ref: ../_components/solana/methods.yaml#/components/methods/sendBundle - - $ref: ../_components/solana/methods.yaml#/components/methods/getBundleStatuses - - $ref: ../_components/solana/methods.yaml#/components/methods/getTipAccounts - - $ref: >- - ../_components/solana/methods.yaml#/components/methods/getInflightBundleStatuses - $ref: >- ../_components/solana/methods.yaml#/components/methods/getTokenAccountsByOwnerAtSlot - $ref: ../_components/solana/methods.yaml#/components/methods/getHealth @@ -92,10 +87,6 @@ methods: ../_components/solana/methods.yaml#/components/methods/simulateTransaction - $ref: ../_components/solana/methods.yaml#/components/methods/getTransaction x-bot-ignore: - - sendBundle - - getBundleStatuses - - getTipAccounts - - getInflightBundleStatuses - getAsset - getAsset_v2 - getAssetBatch_v2 From 9d5aa04a8696dde58282d19ce3a076a01290abec Mon Sep 17 00:00:00 2001 From: alchemy-bot <80712764+alchemy-bot@users.noreply.github.com> Date: Wed, 5 Aug 2026 12:43:13 +0000 Subject: [PATCH 3/8] [docs-agent] Reword Jito bundles overview: drop 'Alchemy proxies' framing, Mainnet-only Per Victor's follow-up: - Overview page background no longer opens with "Alchemy proxies Jito's ... methods" framing; it opens directly with what a bundle IS. - 'Endpoints' section renamed to 'Endpoint' (single URL) and updated to state Mainnet only, with Devnet explicitly called out as unsupported. - `src/openrpc/alchemy/solana-jito/solana-jito.yaml` drops the Solana Devnet server entry and drops the 'proxied through Alchemy' phrasing in the info description. - Compute Unit Costs blurb for the Jito section similarly reworded to describe bundles directly rather than Alchemy's proxy role. Refs DOCS-176 Requested-by: @victorbware --- .../pricing-resources/pricing/compute-unit-costs.mdx | 2 +- .../solana/solana-jito-bundles-overview.mdx | 12 ++++++++---- src/openrpc/alchemy/solana-jito/solana-jito.yaml | 10 ++++------ 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx b/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx index 8beb55292..d427524d4 100644 --- a/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx +++ b/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx @@ -222,7 +222,7 @@ The [Solana Account Archive](/docs/solana/account-archive) is served through the # Solana: Jito Bundles and Transactions -Alchemy proxies Jito's [low-latency bundle methods](/docs/chains/solana/solana-jito-bundles-and-transactions) on the standard Solana RPC endpoint. Bundles execute atomically and sequentially, with a tip to one of the Jito tip accounts required for inclusion. +[Jito bundles](/docs/chains/solana/solana-jito-bundles-and-transactions) are groups of up to 5 signed transactions that execute sequentially and atomically in a single slot on Solana Mainnet. A tip to one of the Jito tip accounts is required for inclusion. {/* cu:auto product="solana-jito" */} | Method | CU | Throughput CU | diff --git a/content/api-reference/solana/solana-jito-bundles-overview.mdx b/content/api-reference/solana/solana-jito-bundles-overview.mdx index 43e44ecb0..f945b06bc 100644 --- a/content/api-reference/solana/solana-jito-bundles-overview.mdx +++ b/content/api-reference/solana/solana-jito-bundles-overview.mdx @@ -6,8 +6,6 @@ subtitle: Alchemy's Jito bundle APIs for low-latency, atomic transaction executi ## Background -Alchemy proxies [Jito's](https://docs.jito.wtf/lowlatencytxnsend/) low-latency bundle methods on the standard Solana RPC endpoints, so you can submit atomic multi-transaction bundles through the same endpoint you already use for Solana Core RPC. - A **bundle** is a group of up to 5 signed Solana transactions that execute: * **Sequentially** — in the exact order you list them. @@ -21,9 +19,15 @@ Bundles do not go through Solana's normal gossip path. They go to the [Jito Bloc Your bid in that auction is the **Jito tip** — a plain SOL transfer to one of the [8 tip accounts](/docs/chains/solana/solana-jito-bundles-and-transactions/solana-jito-bundles-and-transactions/get-tip-accounts) returned by `getTipAccounts`, included in one of your bundle's transactions. The minimum tip is 1,000 lamports; contested MEV opportunities can require substantially higher tips. See Jito's [tip amount guidance](https://docs.jito.wtf/lowlatencytxnsend/#tip-amount) for current recommendations. -## Endpoints +## Endpoint + +Jito bundle methods are available on **Solana Mainnet only** through the standard Alchemy Solana RPC endpoint: + +``` +https://solana-mainnet.g.alchemy.com/v2/{apiKey} +``` -These methods are served through the standard Solana Alchemy endpoints (`https://solana-mainnet.g.alchemy.com/v2/{apiKey}` and `https://solana-devnet.g.alchemy.com/v2/{apiKey}`), so you can call them with the same client you already use for Solana Core RPC. +Devnet is not supported. ## Methods diff --git a/src/openrpc/alchemy/solana-jito/solana-jito.yaml b/src/openrpc/alchemy/solana-jito/solana-jito.yaml index 279bd1de7..709e2d885 100644 --- a/src/openrpc/alchemy/solana-jito/solana-jito.yaml +++ b/src/openrpc/alchemy/solana-jito/solana-jito.yaml @@ -6,16 +6,14 @@ info: title: Alchemy Solana Jito Bundles and Transactions Specification description: |- JSON-RPC specification for the [Jito](https://docs.jito.wtf/lowlatencytxnsend/#bundles-api-v1) - low-latency bundle methods proxied through Alchemy's Solana RPC endpoints. - Bundles are groups of up to 5 transactions that execute sequentially and - atomically in a single slot, with a tip to one of the Jito tip accounts to - incentivize inclusion. + low-latency bundle methods on Solana. Bundles are groups of up to 5 + transactions that execute sequentially and atomically in a single slot, with + a tip to one of the Jito tip accounts to incentivize inclusion. Available on + Solana Mainnet only. version: 0.0.0 servers: - url: https://solana-mainnet.g.alchemy.com/v2 name: Solana Mainnet - - url: https://solana-devnet.g.alchemy.com/v2 - name: Solana Devnet methods: - $ref: ../../chains/_components/solana/methods.yaml#/components/methods/sendBundle - $ref: ../../chains/_components/solana/methods.yaml#/components/methods/getBundleStatuses From 06a600aa6c441004e5214c842327e56d54e2fe4d Mon Sep 17 00:00:00 2001 From: alchemy-bot <80712764+alchemy-bot@users.noreply.github.com> Date: Wed, 5 Aug 2026 12:53:20 +0000 Subject: [PATCH 4/8] [docs-agent] Call out that Jito bundle methods are paid-plan only Per Victor's follow-up: make it clear these 4 methods are not available on the free tier. - Overview page: new `` callout at the top of the page above the fold noting paid-plan requirement, plus a mention in the Endpoint section. - Each method's description (`sendBundle`, `getBundleStatuses`, `getTipAccounts`, `getInflightBundleStatuses`) now opens with an explicit "Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier." line, so users who deep-link to a method endpoint page see it too. - Compute Unit Costs blurb for the Jito section notes the paid-plan requirement. Refs DOCS-176 Requested-by: @victorbware --- .../pricing-resources/pricing/compute-unit-costs.mdx | 2 +- .../solana/solana-jito-bundles-overview.mdx | 6 +++++- src/openrpc/chains/_components/solana/methods.yaml | 12 ++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx b/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx index d427524d4..8272854a2 100644 --- a/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx +++ b/content/api-reference/pricing-resources/pricing/compute-unit-costs.mdx @@ -222,7 +222,7 @@ The [Solana Account Archive](/docs/solana/account-archive) is served through the # Solana: Jito Bundles and Transactions -[Jito bundles](/docs/chains/solana/solana-jito-bundles-and-transactions) are groups of up to 5 signed transactions that execute sequentially and atomically in a single slot on Solana Mainnet. A tip to one of the Jito tip accounts is required for inclusion. +[Jito bundles](/docs/chains/solana/solana-jito-bundles-and-transactions) are groups of up to 5 signed transactions that execute sequentially and atomically in a single slot on Solana Mainnet. A tip to one of the Jito tip accounts is required for inclusion. These methods are available on paid Alchemy plans only. {/* cu:auto product="solana-jito" */} | Method | CU | Throughput CU | diff --git a/content/api-reference/solana/solana-jito-bundles-overview.mdx b/content/api-reference/solana/solana-jito-bundles-overview.mdx index f945b06bc..6913068b2 100644 --- a/content/api-reference/solana/solana-jito-bundles-overview.mdx +++ b/content/api-reference/solana/solana-jito-bundles-overview.mdx @@ -4,6 +4,10 @@ description: Alchemy's Jito bundle APIs for low-latency, atomic transaction exec subtitle: Alchemy's Jito bundle APIs for low-latency, atomic transaction execution on Solana. --- + + Jito bundle methods are available on **paid plans only** (pay-as-you-go and enterprise). Free-tier accounts cannot call these endpoints. [Upgrade your account](https://dashboard.alchemy.com/settings/billing) to enable Jito bundles. + + ## Background A **bundle** is a group of up to 5 signed Solana transactions that execute: @@ -27,7 +31,7 @@ Jito bundle methods are available on **Solana Mainnet only** through the standar https://solana-mainnet.g.alchemy.com/v2/{apiKey} ``` -Devnet is not supported. +Devnet is not supported. These endpoints require a paid Alchemy plan (pay-as-you-go or enterprise); they are not available on the free tier. ## Methods diff --git a/src/openrpc/chains/_components/solana/methods.yaml b/src/openrpc/chains/_components/solana/methods.yaml index 6d653b2cb..e4e596971 100644 --- a/src/openrpc/chains/_components/solana/methods.yaml +++ b/src/openrpc/chains/_components/solana/methods.yaml @@ -1086,6 +1086,9 @@ components: name: sendBundle summary: Submit a Jito bundle to the block engine. description: >- + Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier. + + Submits a bundle of signed transactions to the Jito block engine for atomic processing. Transactions are processed sequentially in the order given; if any transaction fails, the entire bundle is rejected (all-or-nothing). Returns a @@ -1145,6 +1148,9 @@ components: name: getBundleStatuses summary: Get the status of submitted Jito bundles. description: >- + Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier. + + Returns the status of one or more previously submitted Jito bundles. Behaves similarly to Solana's `getSignatureStatuses` but keyed on `bundle_id`. If a bundle is not found or has not landed, its entry is omitted from the @@ -1198,6 +1204,9 @@ components: name: getTipAccounts summary: Get the Jito tip accounts. description: >- + Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier. + + Returns the 8 Jito tip accounts designated to receive bundle tips. To reduce contention, pick one at random for each bundle. The tip account addresses remain constant. @@ -1233,6 +1242,9 @@ components: name: getInflightBundleStatuses summary: Get the in-flight status of Jito bundles from the last 5 minutes. description: >- + Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier. + + Returns the in-flight status of one or more Jito bundles submitted within the last 5 minutes. Up to 5 bundle IDs may be queried in a single request. Statuses are one of: From 3cb2477f324fe284367555556bdd477ef3a7c804 Mon Sep 17 00:00:00 2001 From: alchemy-bot <80712764+alchemy-bot@users.noreply.github.com> Date: Wed, 5 Aug 2026 13:04:01 +0000 Subject: [PATCH 5/8] [docs-agent] Use YOUR_API_KEY placeholder for Solana Jito Try It (no docs-demo) Per Victor's follow-up: Jito bundle methods are paid-plan only, so the Try It form should not pre-populate a working demo key. Users need to plug in their own API key on a paid plan. - `src/utils/generateRpcSpecs.ts`: preserve `x-auth-params` from the source spec if it's already declared (as a non-empty array). Previously the generator unconditionally injected the `docs-demo` default, clobbering any per-spec override. Other specs unaffected: they still get the `docs-demo` default because they don't declare `x-auth-params` in the source. - `src/openrpc/alchemy/solana-jito/solana-jito.yaml`: declare `x-auth-params` with `default: YOUR_API_KEY` and a description that points at the paid signup flow. Try It form now shows `YOUR_API_KEY` instead of `docs-demo`, so users have to swap it out before making a real request. Refs DOCS-176 Requested-by: @victorbware --- src/openrpc/alchemy/solana-jito/solana-jito.yaml | 11 +++++++++++ src/utils/generateRpcSpecs.ts | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/openrpc/alchemy/solana-jito/solana-jito.yaml b/src/openrpc/alchemy/solana-jito/solana-jito.yaml index 709e2d885..243a20ee1 100644 --- a/src/openrpc/alchemy/solana-jito/solana-jito.yaml +++ b/src/openrpc/alchemy/solana-jito/solana-jito.yaml @@ -14,6 +14,17 @@ info: servers: - url: https://solana-mainnet.g.alchemy.com/v2 name: Solana Mainnet +x-auth-params: + - name: apiKey + in: path + required: true + schema: + type: string + default: YOUR_API_KEY + description: >- + Jito bundle methods are available on paid Alchemy plans only. [Create + an API key](https://dashboard.alchemy.com/signup) on a paid plan (pay-as-you-go + or enterprise) to call these endpoints. methods: - $ref: ../../chains/_components/solana/methods.yaml#/components/methods/sendBundle - $ref: ../../chains/_components/solana/methods.yaml#/components/methods/getBundleStatuses diff --git a/src/utils/generateRpcSpecs.ts b/src/utils/generateRpcSpecs.ts index ff92b37d8..6ab0f2711 100644 --- a/src/utils/generateRpcSpecs.ts +++ b/src/utils/generateRpcSpecs.ts @@ -27,10 +27,14 @@ const generateOpenRpcSpecFromSource = async ( })) as DerefedOpenRpcDoc & { [SERVER_URL_FINAL_KEY]?: boolean }; const skipApiKeyParam = spec[SERVER_URL_FINAL_KEY] === true; + const hasCustomAuthParams = + Array.isArray((spec as Record)["x-auth-params"]) && + ((spec as Record)["x-auth-params"] as unknown[]).length > + 0; const { [SERVER_URL_FINAL_KEY]: _skipKey, ...specWithoutKey } = spec; const fullSpec = { ...specWithoutKey, - ...(skipApiKeyParam + ...(skipApiKeyParam || hasCustomAuthParams ? {} : { "x-auth-params": [ From e4ff4be9b468b0ed328a20245c0611f97dfcd171 Mon Sep 17 00:00:00 2001 From: alchemy-bot <80712764+alchemy-bot@users.noreply.github.com> Date: Wed, 5 Aug 2026 13:08:55 +0000 Subject: [PATCH 6/8] [docs-agent] Add placeholder param to getTipAccounts so Try It sends non-empty params Fern strips `params: []` from the JSON-RPC body when an OpenRPC method declares zero params (confirmed by inspecting the rendered curl for Solana Core `getHealth` on prod). Solana Core RPC tolerates missing `params`; the Alchemy Jito proxy's serde is strict and returns `-32600 missing field 'params'`. Docs-side workaround: give `getTipAccounts` a single optional `Placeholder` param with schema `type: object, default: {}`, and add `{}` to the example's params array. Fern now serializes the request as: {"jsonrpc":"2.0","id":1,"method":"getTipAccounts","params":[{}]} Verified against Jito's block engine directly (`mainnet.block-engine.jito.wtf/api/v1/getTipAccounts`) that `params: [{}]` returns the 8 tip accounts. Alchemy's proxy forwards to Jito so the same shape should work through the proxy. Placeholder param is optional with a default, so the form field shows pre-filled `{}` and the description tells users to leave it alone. Not the prettiest UX, but the alternative is fixing the proxy backend to accept missing `params` (per JSON-RPC 2.0 spec, which says params is optional). Refs DOCS-176 Requested-by: @victorbware --- src/openrpc/chains/_components/solana/methods.yaml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/openrpc/chains/_components/solana/methods.yaml b/src/openrpc/chains/_components/solana/methods.yaml index e4e596971..d6da34f73 100644 --- a/src/openrpc/chains/_components/solana/methods.yaml +++ b/src/openrpc/chains/_components/solana/methods.yaml @@ -1215,10 +1215,20 @@ components: See Jito's [getTipAccounts](https://docs.jito.wtf/lowlatencytxnsend/#gettipaccounts) docs for background. x-compute-units: 40 - params: [] + params: + - name: Placeholder + required: false + description: >- + Not read by the server. Included so the JSON-RPC `params` field is + present in the request body. Leave the pre-filled empty object as-is. + schema: + type: object + default: {} examples: - name: getTipAccounts example - params: [] + params: + - name: Placeholder + value: {} result: name: Tip accounts value: From 2b3f922a86230019e755c2b925d428f2fc771304 Mon Sep 17 00:00:00 2001 From: alchemy-bot <80712764+alchemy-bot@users.noreply.github.com> Date: Wed, 5 Aug 2026 13:13:47 +0000 Subject: [PATCH 7/8] [docs-agent] Use Jito's verbatim descriptions for getBundleStatuses, getTipAccounts, getInflightBundleStatuses Per Victor's follow-up: swap the paraphrased descriptions on the three non-sendBundle Jito methods for Jito's own docs wording. - `getBundleStatuses`: full Jito description including the `getSignatureStatuses` + `searchTransactionHistory: false` + `MAX_RECENT_BLOCKHASHES` (300) explainer. - `getTipAccounts`: Jito's exact wording ("Retrieves the tip accounts designated for tip payments for bundles. The tip accounts have remained constant..."). - `getInflightBundleStatuses`: Jito's exact wording plus the four Failed / Pending / Landed / Invalid bullet definitions. Also expanded the `getInflightBundleStatuses` example from 2 to 5 bundle IDs to match Jito's canonical example verbatim. Kept the paid-plan opener line on each method (from the earlier paid-plan gating pass) and the reference link to Jito's docs. sendBundle description was already based on Jito's text and wasn't in Victor's list, so left as-is. Refs DOCS-176 Requested-by: @victorbware --- .../chains/_components/solana/methods.yaml | 52 ++++++++++++------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/src/openrpc/chains/_components/solana/methods.yaml b/src/openrpc/chains/_components/solana/methods.yaml index d6da34f73..59ae6c998 100644 --- a/src/openrpc/chains/_components/solana/methods.yaml +++ b/src/openrpc/chains/_components/solana/methods.yaml @@ -1151,19 +1151,23 @@ components: Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier. - Returns the status of one or more previously submitted Jito bundles. - Behaves similarly to Solana's `getSignatureStatuses` but keyed on `bundle_id`. - If a bundle is not found or has not landed, its entry is omitted from the - `value` array. + Returns the status of submitted bundle(s). This function operates similarly + to the Solana RPC method `getSignatureStatuses`. If a `bundle_id` is not + found or has not landed, it returns `null`. If found and processed, it + returns context information including the slot at which the request was + made and results with the `bundle_id(s)` and the transactions along with + their slot and confirmation status. - Internally the block engine calls `getSignatureStatuses` with the default - `searchTransactionHistory: false`, so only recent slots plus up to - `MAX_RECENT_BLOCKHASHES` (currently 300) rooted slots are searched. + We use `getSignatureStatuses` with the default value of + `searchTransactionHistory` set to `false` to check transaction statuses + on-chain. This means the RPC call will search only its recent history, + including all recent slots plus up to `MAX_RECENT_BLOCKHASHES` rooted slots + for the transactions. Currently, `MAX_RECENT_BLOCKHASHES` is 300. See Jito's [getBundleStatuses](https://docs.jito.wtf/lowlatencytxnsend/#getbundlestatuses) - docs for the underlying block engine behavior. + docs for background. x-compute-units: 40 params: - name: Bundle IDs @@ -1207,9 +1211,10 @@ components: Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier. - Returns the 8 Jito tip accounts designated to receive bundle tips. To reduce - contention, pick one at random for each bundle. The tip account addresses - remain constant. + Retrieves the tip accounts designated for tip payments for bundles. The + tip accounts have remained constant and can also be found in the + [example response](https://docs.jito.wtf/lowlatencytxnsend/#response-example-tips) + of Jito's docs. See Jito's [getTipAccounts](https://docs.jito.wtf/lowlatencytxnsend/#gettipaccounts) @@ -1255,18 +1260,17 @@ components: Available on paid Alchemy plans (pay-as-you-go or enterprise); not available on the free tier. - Returns the in-flight status of one or more Jito bundles submitted within - the last 5 minutes. Up to 5 bundle IDs may be queried in a single request. - Statuses are one of: + Returns the status of submitted bundles within the last five minutes, + allowing up to five bundle IDs per request. - * `Failed`: every region that received the bundle has marked it as failed and it has not been forwarded. + * **Failed**: Indicates that all regions have marked the bundle as failed, and it has not been forwarded. - * `Pending`: the bundle has not failed, landed, or been marked invalid. + * **Pending**: Indicates the bundle has not failed, landed, or been deemed invalid. - * `Landed`: the bundle has landed on-chain, verified via RPC or the `bundles_landed` table. + * **Landed**: Signifies the bundle has successfully landed on-chain, verified through RPC or the `bundles_landed` table. - * `Invalid`: the bundle is no longer in the block engine's 5-minute look back window. + * **Invalid**: Means the bundle is no longer in the system. See Jito's [getInflightBundleStatuses](https://docs.jito.wtf/lowlatencytxnsend/#getinflightbundlestatuses) @@ -1288,6 +1292,9 @@ components: value: - "b31e5fae4923f345218403ac1ab242b46a72d4f2a38d131f474255ae88f1ec9a" - "e3c4d7933cf3210489b17307a14afbab2e4ae3c67c9e7157156f191f047aa6e8" + - "a7abecabd9a165bc73fd92c809da4dc25474e1227e61339f02b35ce91c9965e2" + - "e3934d2f81edbc161c2b8bb352523cc5f74d49e8d4db81b222c553de60a66514" + - "2cd515429ae99487dfac24b170248f6929e4fd849aa7957cccc1daf75f666b54" result: name: Inflight bundle statuses value: @@ -1300,6 +1307,15 @@ components: - bundle_id: "e3c4d7933cf3210489b17307a14afbab2e4ae3c67c9e7157156f191f047aa6e8" status: "Invalid" landed_slot: null + - bundle_id: "a7abecabd9a165bc73fd92c809da4dc25474e1227e61339f02b35ce91c9965e2" + status: "Invalid" + landed_slot: null + - bundle_id: "e3934d2f81edbc161c2b8bb352523cc5f74d49e8d4db81b222c553de60a66514" + status: "Invalid" + landed_slot: null + - bundle_id: "2cd515429ae99487dfac24b170248f6929e4fd849aa7957cccc1daf75f666b54" + status: "Invalid" + landed_slot: null result: name: Inflight bundle statuses description: The in-flight status of each queried bundle. From 75a21900c62c9765625b16a01b964f70e46040f0 Mon Sep 17 00:00:00 2001 From: alchemy-bot <80712764+alchemy-bot@users.noreply.github.com> Date: Wed, 5 Aug 2026 15:23:45 +0000 Subject: [PATCH 8/8] [docs-agent] Fix remark-lint warning: add language tag to fenced code block The bare ``` fenced code block for the endpoint URL was hitting `remark-lint-fenced-code-flag` ("Unexpected missing fenced code language flag in info string, expected keyword"). Added `text` as the language tag. Refs DOCS-176 Requested-by: @victorbware --- content/api-reference/solana/solana-jito-bundles-overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/api-reference/solana/solana-jito-bundles-overview.mdx b/content/api-reference/solana/solana-jito-bundles-overview.mdx index 6913068b2..edf9047b2 100644 --- a/content/api-reference/solana/solana-jito-bundles-overview.mdx +++ b/content/api-reference/solana/solana-jito-bundles-overview.mdx @@ -27,7 +27,7 @@ Your bid in that auction is the **Jito tip** — a plain SOL transfer to one of Jito bundle methods are available on **Solana Mainnet only** through the standard Alchemy Solana RPC endpoint: -``` +```text https://solana-mainnet.g.alchemy.com/v2/{apiKey} ```