Overview

Helius Sender is a specialized service for ultra-low latency transaction submission. It optimizes transaction latency by sending to both Solana validators and Jito simultaneously, providing multiple pathways for your transactions to be included in blocks.

Dual Routing

Sends to both validators and Jito for optimal speed

Global Endpoints

Multiple geographic locations for minimal latency

No Credits

Available on all plans without consuming API credits

High Throughput

Default 1 TPS, contact us for higher limits

Requirements

Mandatory Requirements: All transactions must include Jito tips (minimum 0.001 SOL), priority fees, and skip preflight checks.

1. Skip Preflight (Mandatory)

The skipPreflight parameter must be set to true. Sender is optimized for traders who prioritize speed over transaction validation.

{
  "skipPreflight": true  // Required: must be true
}

Since preflight checks are skipped, ensure your transactions are properly constructed and funded before submission. Invalid transactions will be rejected by the network after submission.

2. Tips and Priority Fees Required

All transactions submitted through Sender must include both Jito tips and priority fees:

  • Jito Tips: Minimum 0.001 SOL transfer to a designated tip account (required for Jito auction)
  • Priority Fees: Compute unit pricing via ComputeBudgetProgram.setComputeUnitPrice to prioritize your transaction in the validator queue

Why Both Are Required

  • Jito Tips: Enable access to Jito’s MEV infrastructure and auction-based transaction inclusion.
  • Priority Fees: Signal to validators your willingness to pay for priority processing through Solana’s native prioritization system.
  • Dual Benefit: Tips give you access to Jito’s MEV auction, while priority fees improve your transaction’s priority with validators—together they maximize inclusion probability.

Tip and Priority Fee Guidelines

Jito Tips: Minimum 0.001 SOL is mandatory for auction participation. For current best-practice tip sizing, see the Jito tip guidelines.

Priority Fees: Use the Helius Priority Fee API for real-time fee recommendations.

Endpoints

Sender endpoints are available in multiple regions for optimal latency:

http://slc-sender.helius-rpc.com/fast      # Salt Lake City
http://ewr-sender.helius-rpc.com/fast      # Newark
http://pitt-sender.helius-rpc.com/fast     # Pittsburgh  
http://fra-sender.helius-rpc.com/fast      # Frankfurt
http://ams-sender.helius-rpc.com/fast      # Amsterdam
http://sg-sender.helius-rpc.com/fast       # Singapore
http://tyo-sender.helius-rpc.com/fast      # Tokyo

These endpoints only support HTTP connections (not HTTPS). Choose the endpoint closest to your infrastructure for optimal performance.

Usage

The Sender endpoint uses the same sendTransaction method as standard RPC endpoints but with specific requirements for optimal performance. All transactions must include both Jito tips (minimum 0.001 SOL) and priority fees, plus skip preflight checks.

Basic Request Format

{
  "id": "unique-request-id",
  "jsonrpc": "2.0", 
  "method": "sendTransaction",
  "params": [
    "BASE64_ENCODED_TRANSACTION", // Must include both tip and priority fee instructions
    {
      "encoding": "base64",
      "skipPreflight": true,       // Required: must be true
      "maxRetries": 0
    }
  ]
}

The BASE64_ENCODED_TRANSACTION above must contain both a SOL transfer instruction with minimum 0.001 SOL tip to designated tip accounts AND a compute unit price instruction. Without both requirements, your transaction will be rejected.

Simple Example

import { 
  Connection, 
  TransactionMessage,
  VersionedTransaction,
  SystemProgram, 
  PublicKey,
  Keypair,
  LAMPORTS_PER_SOL,
  ComputeBudgetProgram
} from '@solana/web3.js';
import bs58 from 'bs58';

const PRIV_B58 = 'Your Private Key';
const RECIPIENT = 'Random Recipient';
const HELIUS_API_KEY = 'Your API Key';
const TIP_ACCOUNTS = [
  "4ACfpUFoaSD9bfPdeu6DBt89gB6ENTeHBXCAi87NhDEE",
  "D2L6yPZ2FmmmTKPgzaMKdhu6EWZcTpLy1Vhx8uvZe7NZ", 
  "9bnz4RShgq1hAnLnZbP8kbgBg1kEmcJBYQq3gQbmnSta",
  "5VY91ws6B2hMmBFRsXkoAAdsPHBJwRfBht4DXox3xkwn",
  "2nyhqdwKcJZR2vcqCyrYsaPVdAnFoJjiksCXJ7hfEYgD",
  "2q5pghRs6arqVjRvT5gfgWfWcHWmw1ZuCzphgd5KfWGJ",
  "wyvPkWjVZz1M8fHQnMMCDTQDbkManefNNhweYk5WkcF",
  "3KCKozbAaF75qEU33jtzozcJ29yJuaLJTy2jFdzUY8bT",
  "4vieeGHPYPG2MmyPRcYjdiDmmhN3ww7hsFNap8pVN3Ey",
  "4TQLFNWK8AovT1gFvda5jfw2oJeRMKEmw7aH6MGBJ3or"
];

async function sendWithSender(
  keypair: Keypair, 
  recipientAddress: string
): Promise<string> {
  const connection = new Connection(
    `https://mainnet.helius-rpc.com/?api-key=${HELIUS_API_KEY}`
  );
  
  const { value: { blockhash } } = await connection.getLatestBlockhashAndContext('confirmed');
  
  // Build transaction with tip transfer and transfer to recipient
  const transaction = new VersionedTransaction(
    new TransactionMessage({
      instructions: [
        ComputeBudgetProgram.setComputeUnitLimit({ units: 100_000 }),
        ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 200_000 }),
        SystemProgram.transfer({
          fromPubkey: keypair.publicKey,
          toPubkey: new PublicKey(recipientAddress),
          lamports: 0.001 * LAMPORTS_PER_SOL,
        }),
        SystemProgram.transfer({
          fromPubkey: keypair.publicKey,
          toPubkey: new PublicKey(TIP_ACCOUNTS[Math.floor(Math.random() * TIP_ACCOUNTS.length)]),
          lamports: 0.001 * LAMPORTS_PER_SOL,
        })
      ],
      payerKey: keypair.publicKey,
      recentBlockhash: blockhash,
    }).compileToV0Message()
  );

  // Sign transaction
  transaction.sign([keypair]);
  console.log('Sending transaction via Sender endpoint...');

  const SENDER_ENDPOINT = 'http://slc-sender.helius-rpc.com/fast'; // choose the region closest to your servers
  const response = await fetch(SENDER_ENDPOINT, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: Date.now().toString(),
      method: 'sendTransaction',
      params: [
        Buffer.from(transaction.serialize()).toString('base64'),
        {
          encoding: 'base64',
          skipPreflight: true, // Required for Sender
          maxRetries: 0
        }
      ]
    })
  });
  const json = await response.json();
  if (json.error) {
    throw new Error(json.error.message);
  }
  const signature = json.result;
  console.log('Transaction sent:', signature);
  
  // Confirmation check
  for (let i = 0; i < 30; i++) {
    const status = await connection.getSignatureStatuses([signature]);
    console.log('Status:', status?.value[0]?.confirmationStatus || 'pending');
    
    if (status?.value[0]?.confirmationStatus === "confirmed") {
      console.log('Transaction confirmed!');
      return signature;
    }
    
    await new Promise(resolve => setTimeout(resolve, 500));
  }
  
  console.log('Transaction may have succeeded but confirmation timed out');
  return signature;
}

// Send transaction
sendWithSender(Keypair.fromSecretKey(bs58.decode(PRIV_B58)), RECIPIENT);

Advanced Example with Dynamic Optimization

The advanced example improves on the simple version with dynamic Jito tips (75th percentile), automatic compute unit calculation, dynamic priority fees, and retry logic.

Best Practices

Endpoint Selection

  • Salt Lake City: slc-sender.helius-rpc.com/fast
  • Newark: ewr-sender.helius-rpc.com/fast
  • Pittsburgh: pitt-sender.helius-rpc.com/fast
  • Frankfurt: fra-sender.helius-rpc.com/fast
  • Amsterdam: ams-sender.helius-rpc.com/fast
  • Singapore: sg-sender.helius-rpc.com/fast
  • Tokyo: tyo-sender.helius-rpc.com/fast

For optimal latency, consider co-locating with Helius servers in Frankfurt or Pittsburgh.

Transaction Setup

  • Use skipPreflight: true and maxRetries: 0
  • Implement your own retry logic
  • Include minimum 0.001 SOL tip to designated accounts
  • Fetch blockhash with 'confirmed' commitment
  • Set appropriate compute unit limits

Rate Limits and Scaling

  • Default Rate Limit: 1 transaction per second
  • No Credit Usage: Sender transactions don’t consume API credits from your plan

Support and Scaling

For production deployments requiring higher throughput:

  1. Create a Support Ticket: Include your expected TPS and use case details
  2. Provide Metrics: Share your current transaction patterns

Contact support through the Helius Dashboard or join our Discord community.