Skip to article
relayOpen console
Transaction bundles
On this page

APIs

Transaction bundles

Submit a signed group of transactions and check its outcome using your Relay key.

Check your bundle allowance

Bundle methods use the same Mainnet HTTP /rpc endpoint and Relay authentication as ordinary RPC. Submission requires a positive purchased bundle limit in addition to active RPC access. Check Solana RPC in your console for your access.

PlanBundle submissions / sec
DeveloperNot included
Business5
Professional5

Business and Professional offers can include 5 bundle submissions per second when configured. Your purchased allowance is authoritative. Bundle submission also counts against your general RPC rate limit and costs 1 credit per forwarded bundle.

Submit 1–5 signed transactions

Prepare and sign the transactions in your own application. Include the required Helius bundle tip of at least 5,000 lamports to a supported tip account. The tip and network fees are paid on-chain and are separate from Relay credits. Use the current account list in the Helius bundle guide.

sendBundle request shape
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "sendBundle",
  "params": [
    [
      "SIGNED_TRANSACTION_1_BASE64",
      "SIGNED_TRANSACTION_2_BASE64"
    ],
    {
      "encoding": "base64"
    }
  ]
}

Replace the placeholders with 1–5 fully signed, serialized transactions. Supported encodings are base64 and base58; the default is base58. Unsigned transactions, unsupported options, and malformed wire data are rejected.

Send sendBundle as a standalone JSON-RPC request. Do not place it inside an outer JSON-RPC batch. A returned bundle ID means the provider accepted the submission; it does not mean the bundle landed.

Simulate before submission

simulateBundle accepts 1–5 serialized transactions without broadcasting them. The default transaction encoding is base64.

simulateBundle request shape
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "simulateBundle",
  "params": [
    {
      "encodedTransactions": [
        "SIGNED_TRANSACTION_BASE64"
      ]
    },
    {
      "transactionEncoding": "base64",
      "skipSigVerify": false,
      "replaceRecentBlockhash": false
    }
  ]
}

Configuration accepts transactionEncoding (base64 or base58), skipSigVerify, and replaceRecentBlockhash (booleans). Optional preExecutionAccountsConfigs and postExecutionAccountsConfigs must each contain one null per transaction; account-state capture is not supported. This route accepts legacy and v0 transaction wire formats, up to 1,232 bytes per transaction.

Successful simulation does not guarantee later inclusion. Transactions can become stale or encounter different chain state before landing.

Check status before retrying

getBundleStatuses request shape
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "getBundleStatuses",
  "params": [
    [
      "BUNDLE_ID_HEX"
    ]
  ]
}

Replace the placeholder with a returned 64-character hexadecimal bundle ID. Query at most five IDs per request. An unavailable status is not evidence that a submission cannot later land; reconcile the underlying transaction signatures as well.

Search documentation

Find what you need

Search article headings, methods, and explanations.