This feature is accessible via sendTransaction method. Gateway delivers transactions simultaneously across multiple delivery methods, maximizing transaction success rates. Effortlessly switch between delivery channels from your dashboard—no code changes or redeployments required. Once you have your optimized transaction ready along with the tip transfer included, you can now send it via the sendTransaction method.
Gateway expects an additional tip of 25% of the priority fees for delivery. Please ensure your transaction includes a transfer instruction to one of our Tip destinations

Supported Encoding Formats

Transactions are accepted in both base64 and base58 encoding formats.
base58 is being deprecated from Solana and could be removed as an acceptable encoding in the future. It it advised to use base64

Tracking Slot Latency

As we route your transaction through your chosen delivery methods, we record the slot at which each transaction is sent. This allows us to accurately calculate slot latency for your transactions. For even more precise end-to-end latency tracking from your application, you can include a startSlot value in your request body. We’ll use this value to determine the slot latency on your behalf.

Request Example

import {
  getBase64Encoder,
  getTransactionDecoder,
  getBase64EncodedWireTransaction
} from "@solana/kit";

// Continued from `optimizeTransaction`...
const optimizedTxString = optimizeBody.result[0].transaction;
const optimizedTx = getTransactionDecoder()
    .decode(getBase64Encoder().encode(optimizedTxString));

const signedTx = await signTransaction([keyPair], optimizedTx);

const deliveryResponse = await fetch(`${GATEWAY_URL}/mainnet?apiKey=${apiKey}`, {
  method: 'POST',
  headers: {'Content-Type': 'application/json'}
  body: JSON.stringify({
    id: "test-id",
    jsonrpc: "2.0",
    method: "sendTransaction",
    params: [getBase64EncodedWireTransaction(signedTx), {
        encoding: "base64",
		startSlot: 361082604
    }]
  }),
});

Response Example

The response contains results from each delivery method indexed using its URL.
type DeliveryResult = {
  result?: string; // Transaction signature
  error?: {
    code: number,
	message: string
  }
};
{
  "jsonrpc": "2.0",
  "id": "test-id",
  "result": "E7oKpwds2h4xxcrGoccrizTEVWvgu6k8u..."
}
In this example:
  • Responses are indexed by delivery method URLs.
  • Each URL contains an array of results (one per transaction).
  • Each result includes either a result field with the transaction signature or an error field with error details.
  • The deliveryMethod field identifies the method used.