# Welcome to bloXroute

**bloXroute** provides a high-performance networking layer for blockchain transactions and data.

bloXroute reduces latency and variance in transaction and block propagation by routing traffic through a globally distributed Blockchain Distribution Network (BDN), rather than relying solely on the public internet. This enables faster and more predictable delivery for latency-sensitive trading and execution systems.

The **BDN** is a globally distributed network of high-capacity relays optimized for propagating blockchain transactions and blocks with minimal latency and variance.

bloXroute is used by professional traders, searchers, and validators operating on **Solana, BNB Chain, Base, Ethereum, X Layer, Hyperliquid, Polygon and Monad.**


# Why bloXroute?

Blockchain performance is constrained not only by on-chain execution, but by how quickly information reaches the network. Delays, congestion, and inconsistent routing at the networking layer directly impact execution quality, block inclusion, and strategic decision-making.

bloXroute addresses this by operating a high-capacity, low-latency global network of servers (relays) optimized for rapid propagation of transactions and blocks across multiple blockchain systems. By reducing hops and bypassing common bottlenecks of the public internet, the BDN improves both speed and determinism without changing consensus or compromising decentralization.

Faster and more reliable propagation enables:

* **Traders and searchers** to submit transactions sooner and with higher confidence in execution timing
* **Trading infrastructure** teams to build lower-latency, more predictable execution paths
* **Validators** to receive transactions and blocks earlier, improving participation and rewards
* **Applications and wallets** to access fresher data and deliver more responsive user experiences

The result is improved execution quality, better decision-making under competition, and more efficient use of network resources.


# Products

bloXroute provides execution and data services built on top of a globally distributed Blockchain Distribution Network (BDN).

All services use the same underlying infrastructure to reduce latency and variance in transaction and data propagation across supported blockchains. Services are grouped by the primary task they enable.

### Execution Services (Transaction & Propagation)

Execution services are designed for submitting transactions and bundles with minimal latency and improved propagation characteristics. These services are used by traders, searchers, and infrastructure teams that require fast and predictable delivery into the network.

Execution capabilities include:

* **Transaction submission**\
  Submit single transactions or bundles with optimized propagation paths across supported chains.
* **Bundle and strategy execution**\
  Support for bundled submission and backrun-style execution where applicable.
* **Chain-specific execution APIs**\
  Execution interfaces tailored to the mechanics of each supported blockchain.

Execution services are available across Solana, BNB Chain, Base, Ethereum, Monad, Hyperliquid, and X Layer, with chain-specific behavior documented in the relevant sections.

### Data Services (Streams & Feeds)

Data services provide low-latency access to real-time blockchain data required for decision-making and execution logic. These services are designed to deliver fresher data with lower variance than standard public endpoints.

Data capabilities include:

* **Real-time streams**\
  Access live transaction, block, and event data across supported blockchains with minimal delay.
* **Optimized Feed Relay (OFR)**\
  Reduced-latency delivery of critical data used in trading and execution pipelines.

Data services are commonly used alongside execution services to build closed-loop trading and execution systems.

### Shared Infrastructure

All execution and data services are powered by the Blockchain Distribution Network (BDN) — a high-capacity, low-latency global network of relays optimized for blockchain traffic.

The BDN is not a standalone product, but the foundational layer that enables consistent performance across all bloXroute services. Documentation for accessing and operating on the BDN is available in the infrastructure sections of the docs.

### Next Steps

bloXroute products are exposed through chain-specific documentation.

Start by selecting the blockchain you’re building on, then explore the available execution and data services for that network, including APIs, integration guides, and operational details.

<br>


# Contact Us

#### Sales & Product Inquiries

* [Book a demo](https://linktr.ee/bloxroute) or DM @BaleyGabel\_bloXroute on Telegram

#### Support

* Join our [Discord server](https://discordapp.com/invite/mB95H7s)
* Email: <support@bloxroute.com>

#### General Questions

* Email: <hello@bloxroute.com>

#### Useful Links

* [Linktree](https://linktr.ee/bloxroute)
* [X / Twitter](https://x.com/bloxroute)
* [Website](https://bloxroute.com/)
* [Pricing](https://bloxroute.com/pricing/)


# bloXroute MCP

The bloXroute MCP server connects your AI agent directly to bloXroute's knowledge base across all supported chains - Solana, BNB Smart Chain, Base, Ethereum, Polygon, and more. Ask Claude, Cursor, ChatGPT, or any MCP-compatible AI agent to find endpoints, understand services, and generate integration code without leaving your chat window.

**No API key required. Just add the URL and start.**

> **Read-only access only.** This server provides access to bloXroute's public knowledge base. No customer data, account data, internal docs, or private systems are accessible.

#### Server URL

```
https://mcp.blxrbdn.com
```

> Note: this is an API endpoint — opening it in a browser will return an error. Use the connection instructions below.
>
> Transport: Streamable HTTP

#### Connect Your AI Agent

**Claude Desktop**

> Note: Requires Node.js and npm installed on your machine.

Open **Settings → Developer → Edit Config** and add under `mcpServers`:

```json
{
  "mcpServers": {
    "bloxroute": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.blxrbdn.com"]
    }
  }
}
```

Restart Claude Desktop to apply.

**Claude Code (CLI)**

```bash
claude mcp add bloxroute https://mcp.blxrbdn.com
```

**Cursor**

Go to **Settings → Features → MCP → + Add new MCP server** and enter:

* **Name:** `bloxroute`  · **URL:** `https://mcp.blxrbdn.com`

**VS Code**

Open the Command Palette with ⇧⌘P / Ctrl+Shift+P and run MCP: Add Server to add a server through a guided flow, choosing either Workspace or Global as the target with the following URL:

```
https://mcp.blxrbdn.com
```

**ChatGPT**

In **ChatGPT → Settings → Apps → Advanced Settings → Create Apps**:

* **Name:** `bloxroute`
* **Connection:** `https://mcp.blxrbdn.com`
* **Authentication:** No Auth


# Create An Account

Creating an account with bloXroute is fast and easy – simply follow the steps below.

1. Either click "Getting started on bloXroute's website, or go directly to the registration page of the [Account Portal](https://portal.bloxroute.com/registration).

<figure><img src="/files/QLvxdUj74kAU6gpbAycq" alt="" width="375"><figcaption></figcaption></figure>

2. Fill out the fields, verify humanity (if prompted), and click “Sign Up"
3. Go to your email inbox and click the link in the verification link that was sent to you.

**That’s it, your registration is complete!**

You are now on the **Introductory** plan, which allows you to send transactions on all supported chains and begin connecting to bloXroute services.

From here, you can enhance your setup by adding the services you need, such as real-time data streams, gateways, or additional execution services. Review the [pricing page](https://bloxroute.com/pricing/) for a breakdown of available bundles and services.

You can view and configure available services anytime in the Account Portal.


# Authorization

Every request to our service must include an `Authorization` header.

You can retrieve your Authorization header from the **Account Portal** under **Account Details**. Use this header for submitting transactions, accessing streams, and checking your account usage.

![](/files/-MPgczW2RdtjCw59_ZnA)


# Pricing

bloXroute pricing is modular and predictable. Customers begin with transaction-submission access and add chain-specific services, capacity, and optional features as needed. Longer commitments qualify for discounted pricing.

### What You Start With

All accounts include **transaction submission access across all supported chains**, without requiring additional services.

Supported chains include:

* Solana
* BNB Smart Chain
* Base
* Ethereum
* Polygon
* X Layer
* Hyperliquid
* Monad

#### Rate Limiting and Credits

Some chains enforce rate limits on transaction submission. For these chains, usage may be governed by a **credit-based system**. Credit requirements and limits vary by chain.

### Pricing Dimensions

Pricing is determined by four components:

1. **Chain** – Services are provisioned per blockchain network.
2. **Service Type** – Streams, gateways, or add-ons.
3. **Concurrency** – Concurrent streams, connections, or gateway instances.
4. **Term Length** – Contract duration.

### Service Types

#### Streams (APIs)

Real-time data streams delivered via supported protocols (e.g., Cloud API, gRPC). Each stream is purchased per chain and priced by concurrency.

#### Gateways

Gateways provide low-latency access to transactions, blocks, and receipts via the bloXroute BDN. Gateways are provisioned per instance and do not include Cloud API streams by default.

#### Add-Ons

Optional add-ons extend functionality or deployment options, such as:

* Standalone gateway deployments
* Private regional routing
* Additional submission or throughput capacity

### Concurrency

Most services are priced by **concurrent streams or connections**.

* Each unit allows a defined number of simultaneous connections
* Capacity can be increased incrementally per service and chain

### Commitment & Term Length

Customers may choose longer contract terms to lock in pricing and receive discounted rates. Services can still be added or modified during an active term.


# Technical Support

Need help? We’re here for you.

* Join our [Discord server ](https://discordapp.com/invite/mB95H7s)for the fastest support.
* Our team is active **Monday–Friday, 9am–6pm EST**, and available on weekends for emergencies.
* You can also email us at <support@bloxroute.com>.

Customers with Enterprise plans and above are eligible for a dedicated support group. Please direct message someone from the team with your Account email and Account ID and they will setup a group for you.


# Cloud API Health

**Health Dashboard**

This portal displays the health status of all endpoints across all regions and services:

<https://portal.bloxroute.com/cloud-api/health>


# Blockchain Distribution Network (BDN)

In this section, we’ll walk through the core concepts and functionality of the BDN:

* **Overview** – What the BDN is and who it's for.
* **Architecture** – The key components that power the network.
* **Mechanism** – How the BDN achieves low-latency propagation.
* **Best Practices** – Tips to get the best performance from your setup.


# Overview

The bloXroute Blockchain Distribution Network (BDN) is a Layer-0 network designed to accelerate how blocks and transactions move across blockchain networks. It provides a faster, more efficient alternative to traditional peer-to-peer propagation by leveraging a globally optimized relay infrastructure.

The BDN is currently live on:

* **Ethereum (ETH)**
* **BNB Chain (BSC)**

#### **Key Benefits**

* **Speed**: Propagate blocks and transactions in milliseconds.
* **Scalability**: Support high-throughput use cases without affecting consensus.
* **Efficiency**: Improve responsiveness for validators, trading systems, and infrastructure services.

#### **Who It's For**

* **DeFi Traders**: Achieve faster market access and lower slippage.
* **Validators**: Receive new blocks earlier, improving block inclusion and performance.
* **Infrastructure Providers**: Enhance reliability and reduce end-to-end data delays.


# Architecture

The bloXroute BDN is built on a globally distributed infrastructure designed to deliver low-latency propagation of blockchain data. This section introduces the core components of the network and explains how they work together to accelerate transaction and block delivery across supported chains.

#### Gateway

Each participant in the BDN runs a Gateway alongside their blockchain full node. The Gateway serves as the connection point between your node and bloXroute’s network.

* Communicates using the native protocol of your blockchain (e.g., Ethereum).
* Forwards blocks and transactions to and from the BDN.
* Does not validate the blockchain or store its state.

#### Control Plane

The Control Plane ensures the network remains performant and resilient by coordinating connections between Gateways and Relays.

* Determines optimal Relay connections based on the Gateway's IP geolocation.
* Continuously manages network topology.
* Provides peer discovery to maintain Gateway connectivity even if the Control Plane is unavailable.

#### Relays

Relays are high-performance servers that act as distribution hubs within the BDN. They’re globally distributed and optimized for minimal propagation delay.

* **Transaction Relays**: Propagate transactions across the network.
* **Block Relays**: Propagate compressed blocks.
* The split-relay architecture keeps transaction and block traffic separate and efficient.

#### Remote Blockchain Nodes

Gateways occasionally need access to blockchain data they cannot validate. In these cases, bloXroute provides remote full nodes to fulfill such requests.

* Used for fallback queries from your full node.
* Ensures uninterrupted service when local data isn’t sufficient.


# Mechanism

The BDN achieves performance gains through a combination of protocol-level optimizations and network-level design choices. Here’s how it works:

#### Compressed Blocks

Rather than forwarding full blocks, the BDN sends a compressed version by referencing transactions using short IDs (SIDs).

* Transactions are indexed and cached across the network.
* Gateways replace full transaction data with 4-byte SIDs when sending blocks.
* Receiving Gateways reconstruct the original block from cached data.

#### Cut-Through Routing

The BDN reduces propagation delay by forwarding block data as it arrives, rather than waiting for the full block to be received and validated.

* Enables real-time streaming of blocks between Relays and Gateways.
* Reduces per-hop delay compared to traditional peer-to-peer networks.

#### Optimized Topology

The BDN avoids the inefficiencies of random p2p connections by using a smart, latency-aware topology.

* Relays are strategically deployed in key regions.
* Gateways connect to Relays based on ping latency and server load.
* Redundant links ensure failover paths in case of disconnection or degradation.

#### Relay Selection Process

When a Gateway starts, it follows a discovery and selection process to optimize its Relay connections.

* Detects its public IP address (auto or user-defined).
* Contacts the Control Plane for a list of suggested Relays.
* Measures latency and selects the lowest-latency Transaction and Block Relay.
* Stores a backup Relay pair for redundancy.


# Best Practices

The bloXroute BDN is built for speed — but performance can vary based on how you connect to the network. Follow these best practices to minimize latency and get the most out of your setup.

#### **1. Deploy Close to Relay Locations**

Reduce round-trip time by locating your trading bots, validator nodes, or infrastructure near one of bloXroute’s globally distributed Relays. The closer you are, the faster your data will propagate.

* Use cloud regions near Relay hubs (e.g., Virginia, Frankfurt, Tokyo).
* For colocated bots, prioritize latency to Transaction Relays.


# BDN Explorer

The [BDN Explorer](https://www.bdn-explorer.com/) is a real-time monitoring tool that provides visibility into the health and activity of the bloXroute network itself.

It helps users and developers understand how blocks and transactions are propagating across bloXroute’s infrastructure.

#### Key Features

* **Network Overview**: View the status of bloXroute’s global Relay infrastructure.
* **Block and Transaction Propagation**: Monitor how quickly data moves through the BDN.
* **Performance Insights**: Identify delays or underperforming regions in real time.

Use the BDN Explorer to validate network behavior, track propagation metrics, and monitor the health of the BDN infrastructure.


# Accessing the BDN

There are two main ways to access the bloXroute Blockchain Distribution Network (BDN), depending on your infrastructure and latency requirements:

#### **1. Gateway-API**

Run a local Gateway alongside your node for the lowest-latency access to the BDN. This method is ideal for high-frequency traders, validators, or any user needing private, fast access.

#### **2. Cloud-API**

Connect directly to bloXroute’s hosted infrastructure — no Gateway installation required. Suitable for users who want fast integration without managing local components.

For optimal performance, advanced users may combine both the Gateway-API and Cloud-API.


# Gateway API

The **Gateway API** connects your local blockchain node to the bloXroute BDN via a bloXroute Gateway. This setup offers the **lowest-latency** access to the network and is ideal for latency-sensitive applications such as trading bots or validator nodes.

#### **Why Use the Gateway API?**

* **Private connection** to the BDN
* **Fastest propagation** of blocks and transactions
* **Full control** over node and Gateway placement

#### **How It Works**

* The Gateway sits alongside your full node (e.g., Geth, Erigon, BSC node).
* It peers with the node using the native protocol (e.g., Ethereum's devp2p).
* The Gateway connects to bloXroute’s global Relay network for fast propagation.
* You send and receive data through the Gateway’s local WebSocket interface.

#### **Recommended: gRPC Streaming**

To ensure high performance, use **gRPC** for subscriptions:

* Supported on Gateways with `--grpc` flag.
* TLS is required for secure connections.

**Enable TLS in Go**

```go
creds := credentials.NewClientTLSFromCert(nil, "")
conn, err := grpc.Dial(url, grpc.WithTransportCredentials(creds))
```

**Using the bloXroute SDK**

```go
creds := credentials.NewClientTLSFromCert(nil, "")

config := &sdk.Config{
    AuthHeader: "<header>",
    GRPCGatewayURL: "virginia.eth.blxrbdn.com:5005",
    GRPCDialOptions: []grpc.DialOption{grpc.WithTransportCredentials(creds)},
}

c, err := sdk.NewClient(context.Background(), config)
```


# Cloud API

The **Cloud API** allows users to access the bloXroute **Blockchain Distribution Network (BDN)** without installing or maintaining a local Gateway. It’s ideal for applications that require fast, reliable access to transaction and block data at scale.

### **Endpoints**

**Transaction Submission**\
Use: `https://api.blxrbdn.com`\
DNS automatically routes requests to the instance closest to your application.

**Streaming Data**\
Use a regional endpoint based on your deployment:

* **Ethereum:** `<REGION>.eth.blxrbdn.com`
* **BSC:** `<REGION>.bsc.blxrbdn.com`

#### **Available Regions**

These apply to streaming endpoints and are resolved automatically unless specified:

| Region Name      | DNS Prefix  | Location             |
| ---------------- | ----------- | -------------------- |
| US - Virginia    | `virginia`  | US East (AWS)        |
| England - London | `uk`        | Europe (AWS)         |
| Singapore        | `singapore` | Asia Pacific (AWS)   |
| Germany          | `germany`   | Europe Central (AWS) |
| Japan            | `tokyo`     | Asia Pacific (AWS)   |

#### **Recommended: gRPC Streaming**

For each region, streaming is available via **WebSocket (WS)** or **gRPC**.\
gRPC may provide better performance and lower latency compared to WebSocket.

**Example (Virginia – Ethereum):**

* **WebSocket:**\
  `wss://virginia.eth.blxrbdn.com/ws`
* **gRPC:**\
  `virginia.eth.blxrbdn.com:5005`


# Solana Core Solutions

bloXroute provides high-performance infrastructure on Solana designed for professional traders, market makers, and latency-sensitive applications. Our Solana suite focuses on two core needs:

* **Transaction execution and protection -** [**Solana Trader API**](/solana/trader-api)
* **Low-latency market data access -** [**Optimized Feed Relay (OFR)**](/solana/optimized-feed-relay)

Together, these solutions help you execute faster, reduce risk, and gain a competitive edge in highly dynamic on-chain markets.

### Solana Trader API

**Ultra-low-latency transaction submission and execution optimization for Solana.**

Solana Trader API is built for traders and applications that require the fastest possible transaction propagation, advanced routing logic, and protection mechanisms in competitive environments.

#### Key Capabilities

* **Optimized Transaction Submission**
  * High-speed propagation to Solana validators
  * Multi-path routing for improved landing probability
  * Designed for high-frequency and arbitrage strategies
* **Front-Running Protection**
  * Private and protected submission paths
  * Reduces exposure to mempool-based MEV strategies
* **Revert Protection**
  * Optional protection mechanisms to prevent failed transactions
  * Helps reduce unnecessary gas and execution costs
* **Advanced Execution Control**
  * Fine-tuned submission parameters
  * Priority fee and tip optimization support

#### Who It’s For

* Trading bots and automated strategies
* Arbitrage traders
* MEV searchers
* Market makers
* Infrastructure providers requiring deterministic execution

Solana Trader API helps you maximize transaction landing rates while minimizing execution risk in competitive conditions.

### Solana Optimized Feed Relay (OFR)

**Low-latency, high-reliability real-time data delivery for Solana.**

Solana OFR (Optimized Feed Relay) provides fast and efficient streaming access to critical on-chain and market data, enabling trading systems to react with minimal delay.

#### Key Capabilities

* **Ultra-Low Latency Data Streams**
  * Optimized relay architecture
  * Faster delivery compared to standard public RPC or WebSocket feeds
* **High Reliability**
  * Stable, production-grade infrastructure
  * Designed for continuous, high-throughput consumption
* **Real-Time Market & Transaction Data**
  * Transaction streams
  * Block and slot updates
  * Relevant execution signals for trading strategies
* **Infrastructure-Grade Performance**
  * Built for systems processing high message volumes
  * Suitable for automated and latency-sensitive strategies

#### Who It’s For

* High-frequency traders
* Quant funds
* Market makers
* Analytics platforms
* Execution engines requiring real-time signals

Solana OFR ensures your systems receive actionable on-chain data as quickly as possible, enabling better decision-making and faster execution.

### How They Work Together

For latency-sensitive trading systems:

* **OFR delivers the earliest possible signals**
* **Trader API executes with optimized propagation and protection**

Used together, they create a full trading stack:

1. Detect opportunity
2. React immediately
3. Submit with protection
4. Maximize landing probability


# RPC Service

bloXroute RPC services offer a wide range of functionality tailored to different user needs — from protecting transactions against MEV attacks to optimizing for fast inclusion and reliable data access. Instead of broadcasting transactions through the public mempool, bloXroute routes them through a private, high-performance relay network.

When using a standard RPC, transactions are broadcast across peer‑to‑peer nodes and become immediately visible to MEV bots. This exposure opens the door to frontrunning, sandwiching, and other value-extracting behaviors that degrade execution quality.

bloXroute RPC keeps transactions private until they are ready for inclusion in a block, significantly reducing the risk of MEV exploitation and improving the performance of latency-sensitive workflows.

bloXroute currently offers three types of RPC endpoints, each designed for a specific use case:

| RPC Type            | Description                                                                                                   |
| ------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Protect RPC**     | Protects transactions from frontrunning and sandwich attacks by keeping them private until included on-chain. |
| **Gas Protect RPC** | Adds gas-revert protection using Flashbots bundles, preventing wasted gas on failed transactions.             |
| **Fast RPC**        | Optimized for fast landing and block inclusion in latency-sensitive workflows.                                |


# Protect RPC

**Protect RPC** routes transactions through bloXroute’s private relay network, keeping them hidden from the public mempool until they are confirmed on-chain. This prevents frontrunning and sandwich attacks by MEV bots, improving execution quality for users.

#### **Key Features**

* **Frontrunning protection** – Transactions are not visible in the public mempool.
* **No setup required** – Works by simply replacing your RPC endpoint in supported wallets like MetaMask.
* **Direct to block proposers** – Transactions are sent privately to validators for inclusion.

#### **How It Works**

When you use Protect RPC, your transaction bypasses the public P2P network and is delivered directly to block proposers via bloXroute’s global Relay network. This ensures:

* No visibility to MEV bots before inclusion
* No sandwiching or frontrunning
* Higher likelihood of receiving the intended execution price

#### **MetaMask Setup**

You can use **Protect RPC** by adding it as a custom network in MetaMask. Here's how:

1. Open **MetaMask** in your browser.
2. Click the **network dropdown** at the top.
3. Select **“Add network”** or **“Add network manually”**.
4. In the form, fill in the fields using the details from the table below.
5. Click **“Save”**.
6. Switch to the new network — transactions will now route through bloXroute’s Protect RPC.

#### **Supported Chains & Endpoints**

<table><thead><tr><th>Network</th><th width="104.4453125">Chain ID</th><th>RPC URL</th></tr></thead><tbody><tr><td>Ethereum</td><td>1</td><td><code>https://eth-protect.rpc.blxrbdn.com</code></td></tr><tr><td>BNB Smart Chain</td><td>56</td><td><code>https://bsc.rpc.blxrbdn.com</code></td></tr></tbody></table>


# Gas Protect RPC

**Gas Protect RPC** offers advanced protection for Ethereum transactions by combining frontrunning prevention with gas efficiency. It converts each transaction into a **Flashbots single-transaction bundle**, ensuring that the transaction stays private and won’t consume gas if it would revert.

#### **Key Features**

* **Frontrunning protection** – Transactions are not broadcast to the public mempool.
* **Gas protection** – Reverting transactions are not included, avoiding wasted gas fees.
* **Flashbots integration** – Transactions are bundled and sent to block proposers privately.

#### **How It Works**

When a transaction is sent to the Gas Protect RPC:

1. It’s immediately wrapped into a one-transaction Flashbots bundle.
2. It’s **simulated** off-chain — if it’s likely to revert, it is not sent.
3. If valid, it is sent privately to Ethereum block proposers for inclusion.
4. It remains hidden from the public mempool until mined.

This protects against:

* **Wasting gas** on failed or reverted transactions.
* **Frontrunning and sandwich attacks** by MEV bots.

#### **Supported Chains & Endpoints**

<table><thead><tr><th>Network</th><th width="108.801513671875">Chain ID</th><th>RPC URL</th></tr></thead><tbody><tr><td>ETH</td><td>1</td><td><code>https://eth.rpc.blxrbdn.com</code></td></tr></tbody></table>


# Fast RPC

**Fast RPC** is optimized for ultra-low latency and rapid transaction inclusion. It’s ideal for users who need their transactions to land in blocks as quickly as possible — such as traders, liquidators, bridge operators, or anyone running latency-sensitive applications.

#### **Key Features**

* **Fastest propagation path** to validators
* **Optimized for inclusion**, not just privacy
* **Available across multiple emerging chains**

#### **When to Use**

* Time-sensitive trading strategies
* Bridging, minting, or liquidation transactions
* Services that depend on rapid confirmation

#### **How It Works**

Fast RPC routes your transaction through bloXroute’s high-speed relay network. It prioritizes getting the transaction to block proposers as quickly as possible using regional infrastructure and direct connections with validators where available.

Unlike Protect RPC, it **does not hide the transaction** — it prioritizes **speed over privacy**.

#### **Supported Chains & Endpoints**

<table><thead><tr><th>Blockchain</th><th width="108.549560546875">Chain ID</th><th>RPC URL</th></tr></thead><tbody><tr><td>Base</td><td>8453</td><td><code>https://base.rpc.blxrbdn.com</code></td></tr><tr><td>X Layer</td><td>196</td><td><code>https://xlayer.rpc.blxrbdn.com</code></td></tr><tr><td>HyperLiquid</td><td>999</td><td><code>https://hyperliquid.rpc.blxrbdn.com</code></td></tr><tr><td>Monad</td><td>143</td><td><code>https://monad.rpc.blxrbdn.com</code></td></tr></tbody></table>


# Overview

This page summarizes the services available on Solana and links to the relevant sections

bloXroute provides execution and data services for Solana, optimized for low-latency and predictable propagation using the Blockchain Distribution Network (BDN).

### Available services

#### Execution services

bloXroute supports high-performance transaction submission on Solana through execution APIs designed for latency-sensitive trading workflows.

Execution capabilities include:

* **Solana Trader API**\
  Execution-focused APIs for submitting Solana transactions with optimized propagation paths and reduced latency, designed for professional traders and automated systems.\
  → See: [Trader API](/solana/trader-api)

Visit [Best Performance for Landing Transactions](/solana/trader-api/best-performance-for-landing-transactions)for a practical guide for optimizing Solana transaction submission paths to maximize inclusion probability and minimize end-to-end latency.

#### Data services

bloXroute provides low-latency access to real-time Solana data for execution logic and decision-making.

Data capabilities include:

* **Optimized Feed Relay (OFR)**\
  Reduced-latency delivery of critical Solana data used in trading and execution pipelines.\
  → See: [Optimized Feed Relay (OFR)](/solana/optimized-feed-relay)
* **Shred stream**\
  Real-time access to Solana block shreds as they propagate through bloXroute’s OFR. This is the earliest point at which block data becomes available, making it essential for low-latency trading, order flow analysis, and block reconstruction.\
  → See: [Shred Stream](/solana/optimized-feed-relay/shred-stream)


# Trader API

The bloXroute Trader API helps traders **land transactions faster**, with ultra-low latency API streams and better block inclusion.

### What we offer:

* The best trading performance on Solana, so you can land transactions faster, with a higher success rate.
* Easily configurable API endpoints & data stream feeds.
* CEX-like API with real-time event feeds.
* Multi-protocol transaction submission support.
  * HTTP/HTTPS
  * gRPC
  * WebSocket
  * QUIC
* Multi-language SDK support.
  * [Go SDK](/solana/trader-api/quick-start/go-sdk)
  * [Python SDK](/solana/trader-api/quick-start/python-sdk)
  * [Typescript SDK](/solana/trader-api/quick-start/typescript-sdk)
  * [Rust SDK](/solana/trader-api/quick-start/rust-sdk)
* Multiple DEX and AMM options:
  * [Pump.fun](https://pump.fun/)
  * [Jupiter](https://jup.ag/)

### Quick links

* [Get started](https://portal.bloxroute.com/registration) with a free Introductory account.
* Check out the available [Regions](/solana/trader-api/introduction/regions).
* Learn how to achieve the [Best Performance for Landing Transactions](/solana/trader-api/best-performance-for-landing-transactions).


# Introduction

bloXroute Solana Trader API has over 40 unique endpoints and even more on the way. Our product follows bloXroute’s mission to provide a DeFi infrastructure that helps the user “Listen faster, and act faster.” We sorted our endpoints based on the DeFi project we supported.

You can find all the bloXroute Trader API-supported DEX projects and the correlated endpoints [here](/solana/trader-api/api-endpoints).

### What You Can Do

* Submit signed transactions with low-latency routing and optional protection modes.
* Build unsigned swap transactions through Pump.fun / PumpSwap and Jupiter.
* Monitor balances, blockhashes, transaction status, tracing, and fee data.
* Stream live on-chain data and events backed by our own [OFR shred-stream](/solana/optimized-feed-relay).

### Get Started

* [`Quick Start`](/solana/trader-api/quick-start) to build your first request
* [`Regions`](/solana/trader-api/introduction/regions) to choose the best endpoint
* [`Rate Limits`](/solana/trader-api/introduction/rate-limits) to understand credit consumption
* [`Tip and Tipping Addresses`](/solana/trader-api/introduction/tip-and-tipping-addresses) to see our public tip wallets and requirements

### SDKs

* [`Go SDK`](/solana/trader-api/quick-start/go-sdk)
* [`Python SDK`](/solana/trader-api/quick-start/python-sdk)
* [`Typescript SDK`](/solana/trader-api/quick-start/typescript-sdk)
* [`Rust SDK`](/solana/trader-api/quick-start/rust-sdk)
* [`QUIC SDK`](/solana/trader-api/quick-start/quic-sdk)

### API Categories

* [`Transaction Submission`](/solana/trader-api/api-endpoints/transaction-submisson) for low-latency send paths
* [`Utilities`](/solana/trader-api/api-endpoints/core-endpoints) for balances, blockhashes, tracing, and real-time fee data
* [`Pump.fun / PumpSwap`](https://github.com/bloXroute-Labs/gitbook-docs/blob/master/solana/trader-api/api-endpoints/pump.fun) for quoting, transaction building, and streams on Pump.fun
* [`Jupiter`](/solana/trader-api/api-endpoints/jupiter) for Jupiter quotes and swap transaction construction


# Regions

Trader API is deployed across multiple bare-metal providers within each region and automatically routes requests to the optimal data center based on observed client latency.

{% hint style="info" %}
To ensure accurate routing, use a public DNS resolver that supports EDNS Client Subnet (ECS), such as Google DNS (8.8.8.8) or OpenDNS (208.67.222.222 / 208.67.220.220). Resolvers without ECS support (e.g., Cloudflare) may obscure the client ASN, leading to suboptimal routing.
{% endhint %}

### Submission Endpoints

These endpoints support **only** transaction submission, and are optimized for low-latency transaction propagation.

<table><thead><tr><th width="349.921875">Region</th><th>Endpoint</th></tr></thead><tbody><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f1ec-1f1e7">🇬🇧</span> England</td><td><code>uk.solana.dex.blxrbdn.com</code></td></tr><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f1fa-1f1f8">🇺🇸</span> New York</td><td><code>ny.solana.dex.blxrbdn.com</code></td></tr><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f1e9-1f1ea">🇩🇪</span> Frankfurt</td><td><code>germany.solana.dex.blxrbdn.com</code></td></tr><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f1f3-1f1f1">🇳🇱</span> Amsterdam</td><td><code>amsterdam.solana.dex.blxrbdn.com</code></td></tr><tr><td><span data-gb-custom-inline data-tag="emoji" data-code="1f1ef-1f1f5">🇯🇵</span> Tokyo</td><td><code>tokyo.solana.dex.blxrbdn.com</code></td></tr></tbody></table>

Additionally, we offer a global edge endpoint that automatically routes requests to the nearest transaction submission endpoint or satellite instances around the globe. This improves performance for users who are not co-located with bare-metal data center hubs, such as those running from residential networks or cloud environments like AWS.

| Region    | Endpoint                        |
| --------- | ------------------------------- |
| 🌎 Global | `global.solana.dex.blxrbdn.com` |

{% hint style="info" %}
We recommend sending to your closest submission region and the global endpoint in parallel to receive the best landing performance. Submit to all regions simultaneously for the best performance.
{% endhint %}

### Full Service Endpoints

These endpoints support all API endpoints excluding Pump.fun, which has dedicated endpoints below.

| Region              | Endpoint                    |
| ------------------- | --------------------------- |
| :flag\_gb: England  | `uk.solana.dex.blxrbdn.com` |
| :flag\_us: New York | `ny.solana.dex.blxrbdn.com` |

### Pump.fun Endpoints

These endpoint support our Pump.fun API and are optimized with low-latency feeds from shreds for the fastest data delivery.

| Region              | Endpoint                         |
| ------------------- | -------------------------------- |
| :flag\_gb: England  | `pump-uk.solana.dex.blxrbdn.com` |
| :flag\_us: New York | `pump-ny-solana.dex.blxrbdn.com` |

### Swagger

Access our Swagger docs below for the latest up-to-date API specifications.

<table><thead><tr><th width="150">Region</th><th>Swagger</th></tr></thead><tbody><tr><td>England</td><td><a href="https://uk.solana.dex.blxrbdn.com/swagger/">https://uk.solana.dex.blxrbdn.com/swagger/</a></td></tr><tr><td>New York</td><td><a href="https://ny.solana.dex.blxrbdn.com/swagger/">https://ny.solana.dex.blxrbdn.com/swagger/</a></td></tr></tbody></table>


# Authorization

{% hint style="info" %}
Each request to any Trader API endpoint should include your authorization header. For HTTP, gRPC, and WebSocket connections, your authorization should be included in the request headers. For QUIC/HTTP3 connections, your authorization is derived from your account's certificate over mTLS.
{% endhint %}

## Obtaining an Auth Header

If you're an existing bloXroute customer, you can use the same authorization header as you would use for any other Cloud API offering from bloXroute.

If you are not a bloXroute customer, you can create an account and you can find your header from our [account portal](https://portal.bloxroute.com/).

<figure><img src="/files/MnfHQpoBlXggW5SSl8wZ" alt=""><figcaption></figcaption></figure>

### Using the header

You should include the authorization header upon establishing any connection with the Trader API.

{% tabs %}
{% tab title="HTTP" %}

```http
curl --header "Authorization: <YOUR-AUTHORIZATION-HEADER" https://ny.solana.dex.blxrbdn.com/api/v2/rate-limit
```

{% endtab %}

{% tab title="WebSocket" %}

```zsh
wscat -c wss://ny.solana.dex.blxrbdn.com/ws --header "Authorization: <YOUR-AUTHORIZATION-HEADER>"
```

{% endtab %}

{% tab title="gRPC" %}

```zsh
# Protobuf definitions available at https://github.com/bloXroute-Labs/solana-trader-proto/tree/develop
grpcurl -plaintext -import-path . \
  -proto api.proto \
  -H "Authorization: <YOUR-AUTHORIZATION-HEADER>" \
  -d '{}' \
  ny.solana.dex.blxrbdn.com:80 api.Api/GetRateLimit
```

{% endtab %}

{% tab title="QUIC" %}
{% hint style="info" %}
QUIC connections use mTLS authentication via your account's certificate/key pair, downloadable from your user portal. Please refer to our QUIC documentation for more information.
{% endhint %}
{% endtab %}
{% endtabs %}

### Client SDKs

By default, you can set the environment variable `AUTH_HEADER` to have our client SDKs automatically load the value for connections you make to the Trader API. You can also specify this manually –– consult each SDK's documentation for more details.


# Rate Limits (Trader API Credits)

## Overview

All rate limits are subject to change and enforced by your bloXroute account tier.

A credit-based rate limit system is used to limit spamming and usage, to provide the best service to our paid customers.

### How is credit consumption calculated?

Every API call will consume Trader API Credits.

* Users' credit resets every 60 seconds. The request submitted at 00:01:23.456 counts towards the 00:01:00 minute limit. Once the 00:02:00 minute starts, the count will reset to zero again.
* The cost for a single transaction submission is **1 credit**.
* Requests fail with a status `429` when rate limits are violated.
* Each user will have assigned credits based on the bloXroute account tier. You can find how much credit you will be assigned using the table below.

<table><thead><tr><th width="268.31040564373893">Account Bundle</th><th width="444">Credit every 60sec</th></tr></thead><tbody><tr><td>Introductory</td><td>60</td></tr><tr><td>Enterprise</td><td>60 + 600</td></tr><tr><td>Enterprise-Elite</td><td>60 + 3000</td></tr><tr><td>Ultra</td><td>60 + 9900</td></tr><tr><td>Build Your Own</td><td>60 + 150 * X ($250/month * X)</td></tr></tbody></table>

### Check your current rate limit

We provided a real-time endpoint for you to check your current rate-limit usage. Please refer to the [Get Rate Limit](/solana/trader-api/api-endpoints/core-endpoints/rate-limit) page for more information.

## Endpoint Credit Costs

### Method Endpoints

<table><thead><tr><th>Endpoint</th><th data-type="number">Credit Cost</th><th>Notes</th></tr></thead><tbody><tr><td><code>submit</code></td><td>1</td><td>Per request</td></tr><tr><td><code>submit-plain-text</code></td><td>1</td><td>Per request</td></tr><tr><td><code>submit-snipe</code></td><td>1</td><td>Per request</td></tr><tr><td><code>submit-batch</code></td><td>1</td><td>Per request</td></tr><tr><td><code>submit-paladin</code></td><td>1</td><td>Per request</td></tr><tr><td><code>balance</code></td><td>10</td><td>Per request</td></tr><tr><td><code>rate-limit</code></td><td>1</td><td>Per request</td></tr><tr><td><code>transaction</code></td><td>10</td><td>Per request</td></tr><tr><td><code>slot-info</code></td><td>1</td><td>Per request</td></tr><tr><td><code>trace</code></td><td>5</td><td>Per request</td></tr><tr><td><code>priority-fee</code></td><td>1</td><td>Per request</td></tr><tr><td><code>blockhash</code></td><td>1</td><td>Per request</td></tr><tr><td><code>time</code></td><td>1</td><td>Per request</td></tr><tr><td><code>quotes</code> (Pump.fun)</td><td>1</td><td>Per request</td></tr><tr><td><code>swap</code> (Pump.fun)</td><td>1</td><td>Per request</td></tr><tr><td><code>swap-sol</code></td><td>1</td><td>Per request</td></tr><tr><td><code>amm/quotes</code></td><td>1</td><td>Per request</td></tr><tr><td><code>amm/swap</code></td><td>1</td><td>Per request</td></tr><tr><td><code>quotes</code> (Jupiter)</td><td>5</td><td>Per request</td></tr><tr><td><code>swap</code> (Jupiter)</td><td>5</td><td>Per request</td></tr><tr><td><code>swap-instructions</code></td><td>5</td><td>Per request</td></tr><tr><td><code>route-swap</code></td><td>5</td><td>Per request</td></tr></tbody></table>

### Stream Endpoints

<table><thead><tr><th>Endpoint</th><th data-type="number">Credit Cost</th><th>Notes</th></tr></thead><tbody><tr><td><code>GetRecentBlockHashStream</code></td><td>100</td><td>Per subscription</td></tr><tr><td><code>GetPriorityFeeStream</code></td><td>100</td><td>Per subscription</td></tr><tr><td><code>GetPriorityFeeByProgramStream</code></td><td>100</td><td>Per subscription</td></tr><tr><td><code>GetBundleTipStream</code></td><td>100</td><td>Per subscription</td></tr><tr><td><code>GetPumpFunNewTokensStream</code></td><td>100</td><td>Per subscription</td></tr><tr><td><code>GetPumpFunNewAmmPoolStream</code></td><td>100</td><td>Per subscription</td></tr><tr><td><code>GetPumpFunSwapsStream</code></td><td>100</td><td>Scales with filter count</td></tr><tr><td><code>GetPumpFunAMMSwapStream</code></td><td>100</td><td>Scales with filter count</td></tr></tbody></table>


# Tip and Tipping Addresses

## Requirements

All transactions submitted through the **bloXroute Trader API** must include a **system transfer instruction** to one of the official **bloXroute tipping addresses**.

* The **minimum required tip** is **0.001 SOL** (1,000,000 lamports) per transaction.
* **Higher tip amounts may improve your transaction’s inclusion speed.**

{% hint style="info" %}
Trader API **does** support using address lookup tables (ALTs) in your tip instruction, however, we recommend avoiding this as they can possibly introduce additional lookup overhead that may impact transaction landing performance.
{% endhint %}

## Tipping Addresses

Below are the publicly available **bloXroute tip-receiving addresses**.

{% hint style="info" %}
To reduce account write-lock contention and maximize performance, we recommend **rotating among these addresses** when submitting your transactions.
{% endhint %}

<table><thead><tr><th data-type="number">Address #</th><th width="505.58984375">Address</th></tr></thead><tbody><tr><td>1</td><td><strong><code>3UQUKjhMKaY2S6bjcQD6yHB7utcZt5bfarRCmctpRtUd</code></strong></td></tr><tr><td>2</td><td><strong><code>FogxVNs6Mm2w9rnGL1vkARSwJxvLE8mujTv3LK8RnUhF</code></strong></td></tr><tr><td>3</td><td><strong><code>bLx7MvxGaKdKL7mEbpk9tC79z6MnBSJoJkuaEAPu6Nd</code></strong></td></tr><tr><td>4</td><td><strong><code>bLx7XBqSg3LUPVf1bRgCnkJmgVZR8QEgDJBPqcRLHvp</code></strong></td></tr><tr><td>5</td><td><strong><code>bLx8KeZxinPwy6kkUgyzMLeqb2ARNsWjADG1dhSsVba</code></strong></td></tr><tr><td>6</td><td><strong><code>bLxADBknoNj8WAGw2W6GBYeq848Xx6ajhaymV1YvrHm</code></strong></td></tr><tr><td>7</td><td><strong><code>bLxAc88vRBwvcUQJEgcxNfBLvHPikY4csNsUmPeWea2</code></strong></td></tr><tr><td>8</td><td><strong><code>bLxQ88oCiTsL8Xj4YWekKi1hjrgmbE3J3FFZ2xZHR3h</code></strong></td></tr><tr><td>9</td><td><strong><code>bLxS7NoLuynNRJ4mCnEE2YbtwJFttYsEyp2ME7rp2yt</code></strong></td></tr><tr><td>10</td><td><strong><code>bLxW6mCov7VEbrKc3S9tcBRcfSzRnLCbNp3Dfn3SJG5</code></strong></td></tr><tr><td>11</td><td><strong><code>bLxXSGXs4mYPTC5okZXed1qzvjNwNJ48QJ82hT2V7w7</code></strong></td></tr><tr><td>12</td><td><strong><code>bLxYi3vojbbB7hVzVDVTdBLVPhp7GJ3ZB3BwdK5sFXi</code></strong></td></tr><tr><td>13</td><td><strong><code>bLxhLPgBXtUpX4b1bH3HatuMGMSKT9GnwtuCGiMSAqe</code></strong></td></tr><tr><td>14</td><td><strong><code>bLxpY1mniuFW4PgkNA4JiNxoeKHFszryi6tNgyZAiAA</code></strong></td></tr><tr><td>15</td><td><strong><code>bLxuETxd2tgWxBALNwPzAfHhsik4BzD3nrEBCiPNZQD</code></strong></td></tr><tr><td>16</td><td><strong><code>bLxuL2gK5FW7xfahvwLrxLyW76vcCpNsKQY2CmnE6kV</code></strong></td></tr><tr><td>17</td><td><strong><code>bLxv4Hnub7nDJWHs8s17o9bGU65Bnx6Yqp2fqtMgHmm</code></strong></td></tr></tbody></table>

## Private Tipping Wallets

Please reach out through our support channels if you require private tipping wallets.


# Quick Start

To start landing transactions faster, get started with:

* [Transaction Submission Overview](/solana/trader-api/quick-start/transaction-submission)
* [Best Performance for Landing Transactions](/solana/trader-api/best-performance-for-landing-transactions)

### SDK Libraries

* [Go](/solana/trader-api/quick-start/go-sdk)
* [Python](/solana/trader-api/quick-start/python-sdk)
* [Typescript](/solana/trader-api/quick-start/typescript-sdk)
* [Rust](/solana/trader-api/quick-start/rust-sdk)
* [QUIC](/solana/trader-api/quick-start/quic-sdk)

### API Protobuf Definitions

{% embed url="<https://github.com/bloXroute-Labs/solana-trader-proto/blob/develop/proto/api.proto>" %}


# Transaction Submission

This page guides you on submitting transactions using bloXroute's Solana Trader API and optimizing for speed and reliability.

## **How It Works**

The Trader API broadcasts your transactions through multiple paths simultaneously to ensure the best possible performance. Possible paths include:

* Custom RPCs for low-latency processing
* Block engines
* Staked connections
* Private relay infrastructure for improved cross-regional routing
* Dedicated low-latency network links across bare-metal infrastructure

### Tips

Transaction submission requires a **system transfer** instruction with a minimum tip of **0.001** SOL (1,000,000 Lamports) to one of our public tipping wallets. You can refer to our tip and tipping wallet documentation [here](/solana/trader-api/introduction/tip-and-tipping-addresses).

### Priority Fees

While higher tips ensure faster processing through Trader API to reach the leader, priority fees incentivize the validator to prioritize your transaction *within* the slot. Use the [**Priority Fee Stream**](/solana/trader-api/api-endpoints/core-endpoints/priority-fee) to get real-time market data and determine the optimal fee.

### Intelligent Retries

Trader API automatically retries submitted transactions until they either land on chain or expire, so users **do not** need to repeatedly resubmit the same transaction to improve landing odds. Repeatedly sending the same transaction to the same region does not improve propagation and may increase the likelihood of triggering internal spam protection systems.

### Submission Endpoints

* [submit](/solana/trader-api/api-endpoints/transaction-submisson/submit)
* [submit-plain-text](/solana/trader-api/api-endpoints/transaction-submisson/submit-plain-text)
* [submit-snipe](/solana/trader-api/api-endpoints/transaction-submisson/submit-snipe)
* [submit-batch](/solana/trader-api/api-endpoints/transaction-submisson/submit-batch)

### Submission Modes

#### Staked

Trader API's **fastest** mode of propagation, using staked connections directly to the leader for ensuring the lowest latency and most stable path to landing on chain. Submit with `useStakedRPCs` to enable this mode of propagation.

{% hint style="info" %}
The `useStakedRPCs` flag cannot be used in combination with `frontRunningProtection` or `revertProtection`.
{% endhint %}

#### Front Running Protection

Our infrastructure scores current and upcoming slot leaders in real time, identifying validators with elevated risk of malicious ordering using internal and external analytics. When transactions are submitted with our `frontRunningProtection` flag enabled, they are withheld from propagation to these leaders.

Use `submitProtection` to control the safe slot window Trader API requires before submitting protected transactions. Higher settings require a larger safe window in the upcoming leader schedule and can increase latency.

Available levels:

* `SP_LOW`: targets a 1-slot safety window
* `SP_MEDIUM`: targets a 3-slot safety window
* `SP_HIGH`: targets an 8-slot safety window

If omitted, `submitProtection` defaults to `SP_MEDIUM`.

{% hint style="info" %}
While submitting transactions with this flag does not guarantee the prevention of attacks, we advise users to set strict slippage tolerance limits within your transactions for greater protection.
{% endhint %}

#### Revert Protection

Submit transactions using our `revertProtection` flag to exclusively propagate your transaction through block engines to prevent failures on chain consuming priority fees.

{% hint style="info" %}
Using front running protection or revert protection **can often introduce latency** in landing due to targeting transactions for curated validators or validators who accept ingress through block engines. Use only when latency is not a factor.
{% endhint %}

### Batch Submission

Trader API supports submitting up to **25** **transactions** within one singular request to reduce the overhead of repeated sequential calls when using our [submit-batch](/solana/trader-api/api-endpoints/transaction-submisson/submit-batch) endpoint. Use batched submission when sending a small group of related transactions together is more efficient than submitting each transaction individually.

### Sniping

Trader API supports a **token sniping** endpoint [submit-snipe](/solana/trader-api/api-endpoints/transaction-submisson/submit-snipe), designed to maximize your landing speed for a pair of transactions that compete with each other to land first.

### Supported Protocols

Trader API supports transaction submission over multiple protocols, so you can choose the integration path that best fits your setup.

**HTTP**

* Recommended users: Simple request/response scripts for quick integration
* Stream support: **No**

**WebSocket**

* Recommended users: Persistent connections for always-on bots and stateful trading systems
* Stream support: **Yes**

**gRPC**

* Recommended users: Typed, high-throughput backend integrations using protobuf-generated clients
* Stream support: **Yes**

{% hint style="info" %}
Customers looking to interact with Trader API endpoints over gRPC can find our protobuf definitions in the `bloXroute-Labs/solana-trader-api-proto` Github repository [here](https://github.com/bloXroute-Labs/solana-trader-proto/tree/develop/proto).
{% endhint %}

**QUIC**

* Recommended users: Advanced, latency-sensitive transaction propagation for performance-oriented clients
* Stream support: **No**

➡️ **Next Steps**: [Submit a transaction](/solana/trader-api/api-endpoints/transaction-submisson/submit) or [submit a bundle of transactions](/solana/trader-api/api-endpoints/transaction-submisson/submit-batch)


# Go SDK

### Objective

This SDK is designed to make it easy for you to use the bloXroute Labs API in Go. You must use Go 1.18 or higher.

[Source](https://github.com/bloXroute-Labs/serum-client-go)

### Installation

```
$ go get github.com/bloXroute-Labs/solana-trader-client-go
```

### Usage

This library supports HTTP, websockets, and GRPC interfaces. You must use websockets or GRPC for any streaming methods, but any simple request/response calls are universally supported.

For any methods involving transaction creation you will need to provide your Solana private key. You can provide this via the environment variable `PRIVATE_KEY`, or specify it via the provider configuration if you want to load it with some other mechanism. See samples for more information. As a general note on this: methods named `Post*` (e.g. `PostOrder`) typically do not sign/submit the transaction, only return the raw unsigned transaction. This isn't very useful to most users (unless you want to write a signer in a different language), and you'll typically want the similarly named `Submit*` methods (e.g. `SubmitOrder`). These methods generate, sign, and submit the transaction all at once.

You will also need your bloXroute authorization header to use these endpoints. By default, this is loaded from the `AUTH_HEADER` environment variable.

#### Request sample:

```go
package main

import (
	"context"
	"fmt"
	"github.com/bloXroute-Labs/solana-trader-client-go/provider"
	pb "github.com/bloXroute-Labs/solana-trader-client-go/proto"
)

func main() {
	// GPRC
	g, err := provider.NewGRPCClient()
	if err != nil {
		panic(err)
	}

	orderbook, err := g.GetOrderbook(context.Background(), "ETH/USDT", 5) // in this case limit to 5 bids and asks. 0 for no limit
	if err != nil {
		panic(err)
	}
	fmt.Println(orderbook)

	// HTTP
	h := provider.NewHTTPClient()
	tickers, err := h.GetTickers("ETHUSDT")
	if err != nil {
		panic(err)
	}
	fmt.Println(tickers)
	
	// WS
	w, err := provider.NewWSClient()
	if err != nil {
		panic(err)
	}
	// note that open orders is a slow function call
	openOrders, err := w.GetOpenOrders(context.Background(), "ETH/USDT", "4raJjCwLLqw8TciQXYruDEF4YhDkGwoEnwnAdwJSjcgv", "")
	if err != nil {
		panic(err)
	}
	fmt.Println(openOrders)
}

```

**Stream (only in GRPC/WS):**

```go
package main

import (
	"fmt"
	"github.com/bloXroute-Labs/solana-trader-client-go/provider"
	pb "github.com/bloXroute-Labs/solana-trader-client-go/proto"
	"context"
)

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	g, err := provider.NewGRPCClient() // replace this with `NewWSClient()` to use WebSockets
	if err != nil {
		panic(err)
	}

	stream, err := g.GetOrderbookStream(ctx, []string{"SOL/USDT"}, 5)
	if err != nil {
		panic(err)
	}
	
	// wrap result in channel for easy of use
	orderbookCh := make(chan *pb.GetOrderbooksStreamResponse)
	stream.Into(orderbookCh)
	for i := 0; i < 3; i++ {
		orderbook := <-orderbookCh
		fmt.Println(orderbook)
	}
}

```

More code samples are provided in the `examples/` directory.

**A quick note on market names:** You can use a couple of different formats, with restrictions:

1. `A/B` (only for GRPC/WS clients) --> `ETH/USDT`
2. `A:B` --> `ETH:USDT`
3. `A-B` --> `ETH-USDT`
4. `AB` --> `ETHUSDT`


# Python SDK

### Objective

This SDK is designed to make it easy for you to use the bloXroute Labs API in Python.

[Source](https://github.com/bloXroute-Labs/serum-client-python)

### Installation

```
$ pip install bxsolana-trader
```

### Usage

This library supports HTTP, websockets, and GRPC interfaces. You can use it with a context manager or handle open/closing yourself.

For any methods involving transaction creation you will need to provide your Solana private key. You can provide this via the environment variable `PRIVATE_KEY`, or specify it via the provider configuration if you want to load it with some other mechanism. See samples for more information. As a general note on this: methods named `post_*` (e.g. `post_order`) typically do not sign/submit the transaction, only return the raw unsigned transaction. This isn't very useful to most users (unless you want to write a signer in a different language), and you'll typically want the similarly named `submit_*` methods (e.g. `submit_order`). These methods generate, sign, and submit the transaction all at once.

You will also need your bloXroute authorization header to use these endpoints. By default, this is loaded from the `AUTH_HEADER` environment variable.

**Context manager:**

```python
from bxsolana import provider

async with provider.http() as api:
    print(await api.get_orderbook(market="ETHUSDT"))
    
async with provider.ws() as api:
    async for update in api.get_orderbooks_stream(market="ETHUSDT"):
        print(update)
```

**Manual**:

```python
import bxsolana

from bxsolana import provider

p = provider.grpc()
api = await bxsolana.trader_api(p)

try:
    await api.get_orderbook(market="ETHUSDT")
finally:
    await p.close()
```

Refer to the `examples/` for more info.


# Typescript SDK

### Objective

This SDK is designed to make it easy for you to use the bloXroute Labs API in Typescript.

This library is exposes HTTP, websockets, and GRPC interfaces, and is compatible with both modern browser and node.js environments. Note that some methods and the GRPC interface is only available in node.js run-times, since some aspects of these functions are incompatible with browsers (e.g. http/2 requirement for GRPC, loading from environment, etc.)

[Source](https://github.com/bloXroute-Labs/serum-client-ts)

### Installation

```
$ npm install @bloxroute/solana-trader-client-ts
```

### Usage

First, you will need an `AUTH_HEADER` from bloXroute (see [the BDN user portal](https://portal.bloxroute.com/)) . If you wish to create transactions you will also need your Solana `PRIVATE_KEY` available.

In `node.js` environments, you can specify both of these values in a `.env` file, or export them manually yourself. In the browser, you'll want to define them during run-time from user input, and probably use some wallet provider to handle the transaction signing.

A simple example:

```typescript
import {
    MAINNET_API_GRPC_PORT,
    MAINNET_API_NY_GRPC,
    GrpcProvider,
    GetRecentBlockHashRequest,
    loadFromEnv
} from "@bloxroute/solana-trader-client-ts";

// Calls to provider must be made inside async function
async function main(): Promise<void> {
    try {
        // Load configuration from environment variables
        const config = loadFromEnv();

        // Initialize the GrpcProvider with necessary credentials and endpoint
        const provider = new GrpcProvider(
            config.authHeader,
            config.privateKey,
            `${MAINNET_API_NY_GRPC}:${MAINNET_API_GRPC_PORT}`,
            true
        );

        // Prepare the request for fetching the recent block hash
        const request: GetRecentBlockHashRequest = {};

        // Fetch the recent block hash from the provider
        const response = await provider.getRecentBlockHash(request);

        // Log the response
        console.info("Recent Block Hash Response: ");
        console.info(JSON.stringify(response, null, 2));
    } catch (error) {
        console.error("Error fetching recent block hash:", error);
    }
}

// Execute the main function
main();
```

Refer to the `examples/` for more info. As mentioned above, you'll need an `.env` file for exported variables to execute the full suite. A proper `.env` file looks like something like this.

```
AUTH_HEADER="ZDIxYzE0NmItZWYxNi00ZmFmLTg5YWUtMzYwMTk4YzUyZmM4OjEwOWE5MzEzZDc2Yjg3M......................"
PRIVATE_KEY="3EhZ4Epe6QrcDKQRucdftv6vWXMnpTKDV4mekSPWZEcZnJV4huzesLHwASdVUzo......................"
```

A general note on transaction submission: methods named `post*` (e.g. `postOrder`) typically do not sign/submit the transaction, only return the raw unsigned transaction. This is mainly useful for generating transaction in browsers or if you want to handle your signing manually. You may also want to use the similarly named `submit*` methods (e.g. `submitOrder`), which generate, sign, and submit the transaction all at once.


# Rust SDK

### Objective

This SDK is designed to make it easy for you to use the bloXroute Labs API in Rust.

Source:

{% embed url="<https://github.com/bloXroute-Labs/solana-trader-client-rust>" %}

{% embed url="<https://crates.io/crates/solana-trader-client-rust>" %}

### <https://crates.io/crates/solana-trader-client-rust> Installation

```
cargo add solana-trader-client-rust
```

or

```rust
[dependencies]
solana-trader-client-rust = "0.1.0"
```

### Usage

The SDK provides access to Solana Trader API through:

* gRPC: High-performance RPC calls
* HTTP: Simple REST requests
* WebSocket: Real-time streaming data

#### Client Initialization

Refer to **SETUP.md** for available networks, regions IDE setup and notes on testing.

Create and populate your `.env` file with something like this:

```rust
PUBLIC_KEY="...."
PRIVATE_KEY="......."
AUTH_HEADER="......"
NETWORK=MAINNET
REGION=NY
```

Please refer to the `tests` directory for more examples.


# QUIC SDK

### Objective

This SDK is designed to make it easy to submit transactions to bloXroute Trader API over QUIC protocol using the Rust programming language.

Using QUIC to submit transactions provides several advantages:

* Reduced serialization overhead from sending raw bytes
* Improved handling of head-of-line blocking through independent stream multiplexing
* Faster connection setup times

{% embed url="<https://github.com/bloXroute-Labs/solana-trader-quic-client-rust>" %}

{% hint style="info" %}
Although our official QUIC submission SDK is built in Rust, customers can use any programming language to submit transactions over QUIC, provided they adhere to the same connection and submission protocol.
{% endhint %}

### Requirements

Unlike HTTP/WebSocket/gRPC, QUIC authenticates using **mTLS**, which requires passing a certificate on connection establishment. These credentials are easily downloadable within your bloXroute portal.

1. Visit the bloXroute portal and log in at <https://portal.bloxroute.com/login>
2. Navigate to the *Account* Tab
3. Under the *Setup Instructions* panel, click the hyperlink to "Download the artifacts", which include your certificate and secret hash.

<figure><img src="/files/KfeTrPtwe0r6jPwgUEYo" alt=""><figcaption></figcaption></figure>

### Support

Trader API supports QUIC submission across three QUIC paradigms:

* Bidirectional streams *(with response)*
* Unidirectional streams *(no response)*
* Datagram *(no response)*

We recommend starting with bidirectional streams when testing your initial setup, as they provide responses to help verify that connections and submissions are working correctly. Once propagation is confirmed, you can switch to unidirectional streams or QUIC datagrams to achieve lower overhead and reduced latency.

{% hint style="info" %}
QUIC transaction submission is currently supported only on regional endpoints and is not yet available on the global edge endpoint. Support for the global edge endpoint is coming soon.
{% endhint %}

### Usage

Once you have downloaded your credentials (certificate and key file), you can initialize our SDK client by passing the file paths to these credentials. The initialized client should be re-used for all transaction submissions, and has keep-alive configurations managed for you to ensure a long-lived healthy connection.

```rust
// client configuration
let config = TraderApiQuicClientConfig::new_from_pem_files(
	BlxEndpoint::XYZ, // replace with desired endpoint
	"/path/to/external_gateway_cert.pem",
	"/path/to/external_gateway_key.pem",
)?;

// create client and connect
let client = TraderApiQuicClient::connect(config).await?;
```

To submit a transaction, pass the raw signed transaction bytes (not base64) to any of the supported submission methods — **one stream/datagram per transaction**.

**Datagram:**

```rust
client.send_transaction_datagram(&tx_bytes)?;
```

**Unidirectional stream:**

```rust
client.send_transaction_uni(&tx_bytes).await?;
```

**Bidirectional stream:**

```rust
let signature = client.send_transaction_bi(&tx_bytes).await?;
let signature = std::str::from_utf8(&signature)?;
```

The repository also includes a runable example.

```zsh
cargo run --example quic_submit_example -- \
  --mode uni \
  --tx-file /tmp/txBase64.txt \
  --client-cert /path/to/external_gateway_cert.pem \
  --client-key /path/to/external_gateway_key.pem
```


# API Endpoints

Explore our endpoint categories below, along with examples for each workflow. For more detailed technical specifications, refer to our protobuf definitions and Swagger UI documentation.

## Browse by Category

#### [`Transaction Submission`](/solana/trader-api/api-endpoints/transaction-submisson)

Low-latency transaction submission endpoints for standard, batched, and sniping workflows.

***

#### [`Utilities`](/solana/trader-api/api-endpoints/core-endpoints)

Endpoints for balance checks, transaction status, tracing, rate limit usage, and network fee insight.

***

#### [`Pump.fun / PumpSwap`](/solana/trader-api/api-endpoints/pump.fun)

Endpoints for quoting, swapping, and streaming Pump.fun and PumpSwap activity.

***

#### [`Jupiter`](/solana/trader-api/api-endpoints/jupiter)

Endpoints for quoting, transaction building, and route-aware swap construction through Jupiter.

## Protobuf Definitions

Download the Protocol Buffers schema (`api.proto`) from GitHub to integrate with the API and inspect message definitions.

{% embed url="<https://github.com/bloXroute-Labs/solana-trader-proto>" %}

## Swagger Documentation

Explore our Swagger UI docs for request and response schemas, parameters, and example payloads.

<table><thead><tr><th width="150">Region</th><th>Swagger UI</th></tr></thead><tbody><tr><td>England</td><td><a href="https://uk.solana.dex.blxrbdn.com/swagger/">https://uk.solana.dex.blxrbdn.com/swagger/</a></td></tr><tr><td>New York</td><td><a href="https://ny.solana.dex.blxrbdn.com/swagger/">https://ny.solana.dex.blxrbdn.com/swagger/</a></td></tr></tbody></table>


# Transaction Submisson

Endpoints used for low-latency transaction sending.

## Methods

#### [`submit`](/solana/trader-api/api-endpoints/transaction-submisson/submit)

Our original fast path for low-latency transaction submission.

***

#### [`submit-plain-text`](/solana/trader-api/api-endpoints/transaction-submisson/submit-plain-text)

Browser-friendly transaction submission endpoint designed to avoid `OPTIONS` preflight requests.

***

#### [`submit-snipe`](/solana/trader-api/api-endpoints/transaction-submisson/submit-snipe)

Specialized transaction submission endpoint for token sniping workflows.

***

#### [`submit-batch`](/solana/trader-api/api-endpoints/transaction-submisson/submit-batch)

Specialized transaction submission endpoint for batched transaction workflows.


# submit

This endpoint is used to submit signed singular transaction.

{% hint style="info" %}
Customers with a Free Tier subscription (or higher) are able to submit transactions through the Solana Trader API.

Learn more about all the regions you can submit transactions to by checking the [Regions](/solana/trader-api/introduction/regions) page.
{% endhint %}

## Request

#### Method:

`POST ./api/v2/submit`

#### Parameters:

<table><thead><tr><th width="190">Parameter</th><th width="216.2">type</th><th width="449">Description</th></tr></thead><tbody><tr><td><code>transaction</code></td><td><code>TransactionMessage</code></td><td>See <code>TransactionMesssage</code> below</td></tr><tr><td><code>skipPreFlight</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Useful for disabling transaction simulation before actual submission. <code>true</code> or <code>false</code>, Default <code>False</code></td></tr><tr><td><code>frontRunningProtection</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Our infrastructure scores current and upcoming slot leaders in real time, identifying validators with an elevated risk of malicious ordering. High-risk leaders (identified through sandwich correlations and validator behaviour analytics) are delayed or skipped. Low-risk leaders receive accelerated submission through staked connections, improving both protection and time-to-land. Default <code>False</code>.</td></tr><tr><td><code>revertProtection</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Enable revertProtection=true to prevent failed transactions from landing on-chain — useful for atomic or conditional strategies, though it introduces latency.</td></tr><tr><td><code>submitProtection</code></td><td>enum</td><td><p><strong>OPTIONAL.</strong> Specifies the desired level of MEV protection for the transaction. <strong>Accepted Values:</strong><code>SP_LOW</code>, <code>SP_MEDIUM</code> (default), and <code>SP_HIGH</code></p><p><strong>Behaviour by Level:</strong></p><ul><li><strong><code>SP_LOW</code></strong>: No MEV protection is applied. Transactions are submitted directly to Jito without delay, even if a known malicious validator is active.<br>Ideal for transactions that are not vulnerable to sandwich attacks, but still benefit from Jito’s revert protection.</li><li><p><strong><code>SP_MEDIUM</code></strong>: Provides moderate protection.</p><ul><li>If the current slot is at least three slots away from any known malicious validator, the transaction is submitted immediately.</li><li>If a malicious validator is the current leader or will become the leader in fewer than 3 slots, the system waits until four consecutive safe slots are observed before submitting.</li></ul></li><li><p><strong><code>SP_HIGH</code></strong>: Provides maximum protection.</p><ul><li>Transactions are delayed until eight consecutive safe slots have passed, ensuring the highest level of avoidance from malicious validators.</li></ul></li></ul></td></tr><tr><td><code>useStakedRPCs</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> An <strong><code>tip</code></strong> instruction with a minimum of 0.001 SOL is required and <code>frontRunningProtection</code> must be set to False to use this feature. When enabled, Trader API will use weighted stake QoS to submit your transaction to the Leader.</td></tr><tr><td><code>allowBackRun</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Specify if you would like to enable OFA(Order Flow Auction) submission option. Transaction will be sent to OFA MEV searcher. If there was any MEV profit, you will receive part of the MEV profit back as a rebate.</td></tr><tr><td><code>revenueAddress</code></td><td>string</td><td><strong>OPTIONAL.</strong> Specify this field ONLY when you enable the <code>allowBackRun</code> parameter. The MEV rebate will be send to the specified address.</td></tr></tbody></table>

`TransactionMessage`

<table><thead><tr><th width="236">Parameter</th><th width="194.2">type</th><th width="369">Description</th></tr></thead><tbody><tr><td><code>content</code></td><td>txbase64Payload</td><td>Raw bytes of signed transaction.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

<pre class="language-bash"><code class="lang-bash"><strong># USE HTTP, NOT HTTPS, FOR THE BEST PERFORMANCE
</strong># THE FOLLOWING IS THE CONFIGURATION FOR FASTEST PROPAGATION

<strong>curl -X 'POST' \
</strong>  'http://ny.solana.dex.blxrbdn.com/api/v2/submit' \
  -H "Authorization: $AUTH_HEADER" \
  -d '{
    "transaction": {"content": "AjF+...CQ=="}, 
    "frontRunningProtection": false,
    "submitProtection": "SP_LOW",
    "useStakedRPCs": true,
    "allowBackRun": true,
    "revenueAddress": "6d...FY"
}'
</code></pre>

{% endtab %}

{% tab title="WebSocket" %}

```bash
wscat -c ws://ny.solana.dex.blxrbdn.com/ws --execute '{"jsonrpc": "2.0", "id": 1, "method": "PostSubmit", "params": {
  "transaction": {"content": "AjF+Br...Q=="}
}}'
```

{% endtab %}

{% tab title="Python" %}

```python
# submitting raw transactions
await api.post_submit("AjF+B...Q==")
```

{% endtab %}

{% tab title="TypeScript" %}

```typescript
await provider.postSubmit({
    transaction: { content: encodedTxn, isCleanup: false },
    skipPreFlight: true,
})
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="214">Parameter</th><th width="110">Type</th><th width="422">Description</th></tr></thead><tbody><tr><td><code>signature</code></td><td>string</td><td>Solana signature of the submitted transaction</td></tr></tbody></table>

#### Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
  "signature":"zPiAEU8...ak3Fq"
}
```

{% endtab %}
{% endtabs %}

You can look up this signature in a Solana Explorer like [SolScan](https://solscan.io/) or [Solana Explorer](https://explorer.solana.com/).


# submit-plain-text

{% hint style="info" %}
This endpoint is used to submit a signed singular transaction with plain text. Customers with a Free Tier subscription (or higher) are able to submit transactions through the Solana Trader API.

**Note**: Only regional endpoints can be used for this method at the moment. Learn more about all the regions you can submit transactions to by checking the [Regions](/solana/trader-api/introduction/regions) page.
{% endhint %}

### Benefit

Submitting using plain text instead of a JSON payload will reduce the body size, which will reduce bandwidth usage, network overhead, and additionally remove the overhead from JSON parsing. The plaintext endpoint also skips the OPTIONS preflight request for users making submissions through browsers.

## Request

**Content-Type**: `text/plain`

**HTTP Method**: `POST ./api/v2/submit-plain-text`

**Body Format**: `<txbase64Payload>`

Authorization: `<Authorization Header>`

#### URI Parameters:

<table><thead><tr><th width="190">Parameter</th><th width="216.2">type</th><th width="449">Description</th></tr></thead><tbody><tr><td><code>skipPreFlight</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Useful for disabling transaction simulation before actual submission. <code>true</code> or <code>false</code>, Default <code>True</code></td></tr><tr><td><code>frontRunningProtection</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Our infrastructure scores current and upcoming slot leaders in real time, identifying validators with an elevated risk of malicious ordering. High-risk leaders (identified through sandwich correlations and validator behaviour analytics) are delayed or skipped. Low-risk leaders receive accelerated submission through staked connections, improving both protection and time-to-land. Default <code>False</code>.</td></tr><tr><td><code>revertProtection</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Enable revertProtection=true to prevent failed transactions from landing on-chain — useful for atomic or conditional strategies, though it introduces latency.</td></tr><tr><td><code>submitProtection</code></td><td>string</td><td><p><strong>OPTIONAL.</strong> Specifies the desired level of MEV protection for the transaction. <strong>Accepted Values:</strong><code>low</code>, <code>medium</code>(default), and <code>high</code></p><p><strong>Behaviour by Level:</strong></p><ul><li><strong><code>low</code></strong>: No MEV protection is applied. Transactions are submitted directly to Jito without delay, even if a known malicious validator is active.<br>Ideal for transactions that are not vulnerable to sandwich attacks, but still benefit from Jito’s revert protection.</li><li><p><strong><code>medium</code></strong>: Provides moderate protection.</p><ul><li>If the current slot is at least three slots away from any known malicious validator, the transaction is submitted immediately.</li><li>If a malicious validator is the current leader or will become the leader in fewer than 3 slots, the system waits until four consecutive safe slots are observed before submitting.</li></ul></li><li><p><strong><code>high</code></strong>: Provides maximum protection.</p><ul><li>Transactions are delayed until eight consecutive safe slots have passed, ensuring the highest level of avoidance from malicious validators.</li></ul></li></ul></td></tr><tr><td><code>useStakedRPCs</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> An <strong><code>tip</code></strong> instruction with a minimum of 0.001 SOL is required and <code>frontRunningProtection</code> must be set to False to use this feature. When enabled, Trader API will use weighted stake QoS to submit your transaction to the Leader.</td></tr><tr><td><code>allowBackRun</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Specify if you would like to enable OFA(Order Flow Auction) submission option. Transaction will be sent to OFA MEV searcher. If there was any MEV profit, you will receive part of the MEV profit back as a rebate.</td></tr><tr><td><code>revenueAddress</code></td><td>string</td><td><strong>OPTIONAL.</strong> Specify this field ONLY when you enable the <code>allowBackRun</code> parameter. The MEV rebate will be send to the specified address.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl -X POST "http://ny.solana.dex.blxrbdn.com/api/v2/submit-plain-text?frontRunningProtection=true&useStakedRpcs=true&revertProtection=true&skipPreflight=true&submitProtection=medium" \
			  -H "Content-Type: text/plain" \
			  -H "Authorization: $AUTH_HEADER" \
			  --data 'AjF+...CQ=='
			
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="214">Parameter</th><th width="110">Type</th><th width="422">Description</th></tr></thead><tbody><tr><td><code>signature</code></td><td>string</td><td>Solana signature of the submitted transaction</td></tr></tbody></table>

#### Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
  "signature":"zPiAEU8...ak3Fq"
}
```

{% endtab %}
{% endtabs %}

You can look up this signature in a Solana Explorer like [SolScan](https://solscan.io/) or [Solana Explorer](https://explorer.solana.com/).


# submit-snipe

This endpoint is designed to maximize your landing speed for a pair of transactions that compete with each other (mainly token sniping use case).

This endpoint accepts a pair of competing transactions and submits the first to the Jito block engine while sending the second through bloXroute staked connections. Both transactions must include a minimum bloXroute tip of `0.001` SOL, and the first transaction must also include a valid tip to one of Jito’s tipping [wallets](https://jito-foundation.gitbook.io/mev/mev-payment-and-distribution/on-chain-addresses).

Since the first transaction is submitted through Jito-protected flow, a priority fee is generally not required, while the second transaction sent through staked connections should include a competitive priority fee.

{% hint style="info" %}
If you do not want both sniping transactions to land successfully, you are responsible for making them mutually exclusive, such as by using the same durable nonce so that the first landing transaction invalidates the other.
{% endhint %}

## Request <a href="#request" id="request"></a>

**Method:**

`POST ./api/v2/submit-snipe`

**Parameters:**

| Parameter       | Type                         | Description                                                                                                                                             |
| --------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `entries`       | `PostSubmitRequestEntry` \[] | A list of signed transaction. See `PostSubmitRequestEntry` below                                                                                        |
| `useStakedRPCs` | boolean                      | **OPTIONAL.** Specify if you would like to send transactions using staked RPCs. If not provided or if `False`, fastBestEffort is used. Default `False`. |

`PostSubmitRequestEntry`

| Parameter     | Text                 | Description                    |
| ------------- | -------------------- | ------------------------------ |
| `transaction` | `TransactionMessage` | See `TransactionMessage` below |

`TransactionMessage`

| Parameter | Text            | Description                      |
| --------- | --------------- | -------------------------------- |
| `content` | txbase64Payload | Raw bytes of signed transaction. |

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl -X 'POST' \
  'http://ny.solana.dex.blxrbdn.com/api/v2/submit-snipe' \
  -header "Authorization: $AUTH_HEADER" \
  -d '{
 "entries": [{transaction": {"content": "AjF+...AAABCQ=="}}, {transaction": {"content": "Bdej+...AdsaCQ=="}}],
 "useStakedRPCs": true
}'
```

{% endtab %}
{% endtabs %}

## **Response:**

**Fields:**

| Field          | Type | Description          |
| -------------- | ---- | -------------------- |
| `transactions` | list | A list of signature. |

| Field       | Type   | Description                                   |
| ----------- | ------ | --------------------------------------------- |
| `signature` | string | Solana signature of the submitted transaction |
| `error`     | string | Return error message.                         |
| `submitted` | boolem | If the transaction has been submitted.        |

**Example**:

{% tabs %}
{% tab title="JSON" %}

```bash
{
    "transactions": [
        {
            "signature": "AvuWl0d...AABoEA", 
            "submitted": true
        }, 
        {
            "signature": "AVfRxLb...gYnkgY", 
            "submitted": true
        }
    ]
}
```

{% endtab %}
{% endtabs %}

You can look up this signature in a Solana Explorer like [SolScan](https://solscan.io/) or [Solana Explorer](https://explorer.solana.com/).


# submit-batch

This endpoint allows you to submit multiple signed transactions under a single request to reduce network call overhead. Additionally supports block engine bundles.

{% hint style="info" %}
Enabling `useBundle=true` may introduce additional latency because transactions are routed through bundle engines across multiple hops. Use it **only** when revert protection is required or execution speed is not critical.
{% endhint %}

The maximum batch size is **25** signed transactions. If `useBundle=true`, the maximum batch size is reduced to **4** signed transactions to adhere to third-party block engine requirements.

Each signed transaction in the batch must satisfy the standard tip requirements described in our tip documentation [here](/solana/trader-api/introduction/tip-and-tipping-addresses). When `useBundle=true`, the tip should only be included in the final transaction in the batch.

## Request

#### Method:

`POST ./api/v2/submit-batch`

#### Parameters:

<table><thead><tr><th width="222.87353515625">Parameter</th><th width="251.2">Type</th><th width="445">Description</th></tr></thead><tbody><tr><td><code>entries</code></td><td><code>PostSubmitRequestEntry</code><br>[]</td><td>A list of signed transactions. See <code>PostSubmitRequestEntry</code> below</td></tr><tr><td><code>useBundle</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Specify if you would like to send transactions as a bundle only (all transactions land or none at all). Default <code>false</code>.</td></tr><tr><td><code>frontRunningProtection</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Our infrastructure scores current and upcoming slot leaders in real time, identifying validators with an elevated risk of malicious ordering. High-risk leaders (identified through sandwich correlations and validator behaviour analytics) are delayed or skipped. Low-risk leaders receive accelerated submission through staked connections, improving both protection and time-to-land. Default <code>False</code>.</td></tr></tbody></table>

`PostSubmitRequestEntry`

<table><thead><tr><th width="192">Parameter</th><th width="218.2"></th><th width="445">Description</th></tr></thead><tbody><tr><td><code>transaction</code></td><td><code>TransactionMessage</code></td><td>See <code>TransactionMessage</code> below</td></tr><tr><td><code>skipPreFlight</code></td><td>boolean</td><td><strong>OPTIONAL.</strong> Useful for disabling transaction simulation before actual submission. Default <code>false</code>.</td></tr></tbody></table>

`TransactionMessage`

<table><thead><tr><th width="181">Parameter</th><th width="166.2"></th><th width="390">Description</th></tr></thead><tbody><tr><td><code>content</code></td><td>txbase64Payload</td><td>Base64 signed transaction bytes</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl -X POST "http://ny.solana.dex.blxrbdn.com/api/v2/submit-batch" \
  -H "Authorization: $AUTH_HEADER" \
  -H "Content-Type: application/json" \
  -d '{
    "entries": [
      {
        "transaction": {
          "content": "AayHbuFlHrJV5V53CAyBW0IM6PHeqfbIF2PegMEU..."
        },
        "skipPreFlight": false
      },
      {
        "transaction": {
          "content": "AeNTbB0vnGNSGVybg/mzbtfZzmwvNPJsWgmQJshxK..."
        },
        "skipPreFlight": false
      },
      {
        "transaction": {
          "content": "AUTTE4Oa9qKhimePjDHGpnh9F5FtRfMwuPuVGyxytt..."
        },
        "skipPreFlight": false
      }
    ],
    "useBundle": false,
    "frontRunningProtection": false
  }'
```

{% endtab %}

{% tab title="WebSocket" %}

```bash
• wscat -c ws://ny.solana.dex.blxrbdn.com/ws --execute '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "PostSubmitBatchV2",
    "params": {
      "entries": [
        {
          "transaction": {
            "content": "AayHbuFlHrJV5V53CAyBW0IM6PHeqfbIF2PegMEUOzc1gQ7Qe8NDgk1XnpKLIwwO..."
          },
          "skipPreFlight": false
        },
        {
          "transaction": {
            "content": "AeNTbB0vnGNSGVybg/mzbtfZzmwvNPJsWgmQJshxKp6aAxu3wAaWPmZUupbBat0u..."
          },
          "skipPreFlight": false
        },
        {
          "transaction": {
            "content": "AUTTE4Oa9qKhimePjDHGpnh9F5FtRfMwuPuVGyxyttlIuIwSrW8KLbqjsGtPzGDH..."
          },
          "skipPreFlight": false
        }
      ],
      "useBundle": false,
      "frontRunningProtection": false
    }
  }'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="214">Field</th><th width="110">Type</th><th width="422">Description</th></tr></thead><tbody><tr><td><code>transactions</code></td><td>list</td><td>A list of signatures.</td></tr></tbody></table>

<table><thead><tr><th width="214">Field</th><th width="110">Type</th><th width="422">Description</th></tr></thead><tbody><tr><td><code>signature</code></td><td>string</td><td>Solana signature of the submitted transaction</td></tr><tr><td><code>error</code></td><td>string</td><td>Return error message.</td></tr><tr><td><code>submitted</code></td><td>boolean</td><td>If the transaction has been submitted.</td></tr></tbody></table>

#### Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
	"transactions": [
		{
			"signature": "4T4ou8LBZ3y8mDvJQyv6FwzWYyrVun6imocEJPTsZ8sqM6BwzhjErujAyj3xMD1SDjysxVP2pAopKR8yHkCGUhon",
			"submitted": true
		},
		{
			"signature": "5YcHd1LwkzfPACWBdBq7rfb1pRMf9ypyp4tJrngMpN8nTJnG11NGLA8KMaoUrWivWtVRyCcjXP9oaGmJSsJhpGBk",
			"submitted": true
		},
		{
			"signature": "2NowWRYoqFibBrz7b8iivtyhoc6WRx1WSN9ZusbEcXk4Waw5a1udYkBbK7x5eYVfLyQsN116ND1VmVoeHUgyNh7b",
			"submitted": true
		}
	]
}
```

{% endtab %}
{% endtabs %}

You can look up this signature in a Solana Explorer like [SolScan](https://solscan.io/) or [Solana Explorer](https://explorer.solana.com/).


# Utilities

Supporting endpoints for balances, transaction status, rate limits, slot intelligence, tracing, and fee data.

## Methods

#### [`balance`](/solana/trader-api/api-endpoints/core-endpoints/balance)

Get token balance information for a Solana account address.

***

#### [`blockhash`](/solana/trader-api/api-endpoints/core-endpoints/blockhash)

Get a recent blockhash for transaction construction with an optional offset value.

***

#### [`rate-limit`](/solana/trader-api/api-endpoints/core-endpoints/rate-limit)

Get current API rate limit usage information.

***

#### [`transaction`](/solana/trader-api/api-endpoints/core-endpoints/transaction)

Get transaction status together with transaction metadata.

***

#### [`slot-info`](/solana/trader-api/api-endpoints/core-endpoints/slot-info)

Get information about previous or upcoming slots.

***

#### [`trace`](/solana/trader-api/api-endpoints/core-endpoints/trace)

Get time/slot related tracing details for your submitted transactions.

***

#### [`priority-fee`](/solana/trader-api/api-endpoints/core-endpoints/priority-fee)

Get recent priority fee percentile data by project across the last 100 slots.

## Streams

#### [`GetPriorityFeeStream`](/solana/trader-api/api-endpoints/core-endpoints/getpriorityfeestream)

Stream recent priority fee percentile data by project across the last 100 slots.

***

#### [`GetBundleTipStream`](/solana/trader-api/api-endpoints/core-endpoints/getbundletipstream)

Stream recent bundle tip percentile data.


# balance

Get token balance information based on Solana account address.

### Request

#### Method:

`GET ./api/v2/balance`

#### Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>ownerAddress</code></td><td>string</td><td>Address to fetch token balance details.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --header "Authorization: $AUTH_HEADER" \
'https://ny.solana.dex.blxrbdn.com/api/v2/balance'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="155.02020202020208">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokens</code></td><td>array</td><td>See below for details</td></tr></tbody></table>

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="155.02020202020208">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>symbol</code></td><td>string</td><td>Symbol of the token.</td></tr><tr><td><code>tokenMin</code></td><td>string</td><td>Token program address.</td></tr><tr><td><code>settledAmount</code></td><td>number</td><td>The token amount available. This is what you are looking for in most cases.</td></tr><tr><td><code>unsettledAmount</code></td><td>number</td><td>Token amount which is unsettled. <strong>*Apply only to Openbook.</strong></td></tr><tr><td><code>openOrderAmount</code></td><td>number</td><td>Token amount which is in open order. <strong>*Apply only to Openbook.</strong></td></tr></tbody></table>

#### Response Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
   "tokens":[
      {
         "symbol":"SRM",
         "token_mint":"SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt",
         "settled_amount":0.0,
         "unsettled_amount":0.0,
         "open_orders_amount":0.0
      },
      {
         "symbol":"SOL",
         "token_mint":"So11111111111111111111111111111111111111112",
         "settled_amount":3.435929722,
         "unsettled_amount":0.0,
         "open_orders_amount":0.0
      }
   ]
}
```

{% endtab %}
{% endtabs %}


# blockhash

Get a recent blockhash for transaction construction with an optional offset value.

### Request

#### Method:

`GET ./api/v2/system/blockhash`

#### Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>offeset</code></td><td>uint64</td><td><strong>OPTIONAL</strong>. Slot offset from the most recent cached blockhash. Default <code>0</code>.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --header "Authorization: $AUTH_HEADER" \
'https://ny.solana.dex.blxrbdn.com/api/v2/system/blockhash?offset=5'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="155.02020202020208">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>blockHash</code></td><td>string</td><td>The recent Solana blockhash with the applied offset.</td></tr><tr><td><code>timestamp</code></td><td>google.protobuf.Timestamp</td><td>Time stamp of the event.</td></tr></tbody></table>

#### Response Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
  "blockHash": "14hCT6G6XwE4EPEQUTyv5ZP6v5ySRXKRajfLydKt6XnU",
  "timestamp": null
}
```

{% endtab %}
{% endtabs %}


# time

Return the current server time from Trader API.

### Request

#### Method:

`GET ./api/v1/system/time`

#### Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>-</code></td><td>-</td><td><strong>-</strong></td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --header "Authorization: $AUTH_HEADER" \
'https://ny.solana.dex.blxrbdn.com/api/v1/system/time'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="155.02020202020208">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>timestamp</code></td><td>google.protobuf.Timestamp</td><td>Current server timestamp in RFC 3339 format.</td></tr></tbody></table>

Response Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
   "timestamp":"2026-04-16T20:21:16Z"
}
```

{% endtab %}
{% endtabs %}


# rate-limit

Get API rate limit usage information.

### Request

#### Method:

`GET ./api/v2/rate-limit`

#### Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="211.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>-</code></td><td>-</td><td>-</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --header "Authorization: $AUTH_HEADER" \
'https://ny.solana.dex.blxrbdn.com/api/v2/rate-limit'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="155.02020202020208">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>accountID</code></td><td>string</td><td>Your bloXroute account ID</td></tr><tr><td><code>tier</code></td><td>string</td><td>Your current account tier.</td></tr><tr><td><code>interval</code></td><td>string</td><td>Rate limit interval.</td></tr><tr><td><code>intervalNum</code></td><td>unit64</td><td>Rate limit interval multiplier. <em>*If the <code>interval</code> is sec and <code>intervalNum</code> is 60, which means the rate limit refreshes every 60 seconds.</em></td></tr><tr><td><code>limit</code></td><td>unit64</td><td>This is your current rate limit which is based on your account tier.</td></tr><tr><td><code>count</code></td><td>unit64</td><td>This is your current rate limit usage. If the <code>count</code> is higher than the <code>limit</code>, you will be limited.</td></tr><tr><td><code>reset</code></td><td>unit64</td><td>Timestamp when the rate limite gets reset.</td></tr></tbody></table>

#### Response Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
  "accountID":"555399c7-...56", 
  "tier":"Introductory", 
  "interval":"second", 
  "intervalNum":"60", 
  "limit":"60", 
  "count":"50", 
  "reset":"1708635900"
}
```

{% endtab %}
{% endtabs %}


# transaction

Get transaction status and the metadata of the transaction.

{% hint style="warning" %}
Be aware that this endpoint only fetches transactions that were recently landed on the chain. Depending on the level of activities on the chain, this endpoint may be able to get transactions as far as serval hours. Fetching older transactions may return the status 'not\_found'.
{% endhint %}

### Request

#### Method:

`GET ./api/v2/transaction`

#### Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>signature</code></td><td>string</td><td>Signature of a Solana transaction.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --header "Authorization: $AUTH_HEADER" \
'https://ny.solana.dex.blxrbdn.com/api/v2/transaction?signature=...'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="316.0202020202021">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>status</code></td><td>string</td><td>Status of target transaction. Expected value "<code>not_found</code>", "<code>success"</code>, and "<code>failed</code>".</td></tr><tr><td><code>metadata</code></td><td><code>TransactionMeta</code></td><td>The metadata of the transaction. See below for more details</td></tr><tr><td><code>slot</code></td><td>uint64</td><td>Slot in which the transaction is included</td></tr><tr><td><code>block_time</code></td><td>uint64</td><td>Time at which transaction landed on chain</td></tr><tr><td><code>version</code></td><td>int32</td><td>Version of the transaction (represents either Legacy or Version)</td></tr></tbody></table>

`TransactionMeta`

<table><thead><tr><th width="347">Parameter</th><th width="358.2"></th><th width="369">Description</th></tr></thead><tbody><tr><td><code>err</code></td><td>string</td><td>description of error in transaction</td></tr><tr><td><code>errored</code></td><td>uint64</td><td>did transaction error?</td></tr><tr><td><code>fee</code></td><td>uint64</td><td>transaction fee</td></tr><tr><td><code>pre_balances</code></td><td>uint64</td><td>balance in wallet before transaction</td></tr><tr><td><code>post_balances</code></td><td>uint64</td><td>balance in wallet after transaction</td></tr><tr><td><code>inner_instructions</code></td><td>[] <code>TransactionMetaInnerInstruction</code></td><td>inner instructions inside of transaction</td></tr><tr><td><code>log_messages</code></td><td>string</td><td>any logs related to transaction</td></tr><tr><td><code>pre_token_balances</code></td><td>[] <code>TransactionMetaTokenBalance</code></td><td>token balances in wallet before transaction</td></tr><tr><td><code>post_token_balances</code></td><td>[] <code>TransactionMetaTokenBalance</code></td><td>token balances in wallet after transaction</td></tr></tbody></table>

Response Example:

{% tabs %}
{% tab title="JSON" %}

<pre class="language-json"><code class="lang-json"># Signature has not been found
{
  "status":"not_found", 
  "metadata":{"err":"tx not found", "errored":true}
}

# Transaction is successfully landed on chain
{
  "status":"success",
  "metadata":{"preBalances":...},
  "slot":"242622328",
  "blockTime":"1705605064",
  "version":-1
<strong>}
</strong>
# Transaction is failed
{
  "status":"failed", 
  "metadata":{"err":"tx not found", "errored":false...}
}
</code></pre>

{% endtab %}
{% endtabs %}


# slot-info

The GetSlotInfo endpoint can be used to determine whether the leader of a slot is malicious or non-malicious.  Data is supported for the past two historic epochs, the current one, and the future one.

{% hint style="warning" %}
Use this endpoint’s data with caution. The maliciousness determination relies on historical block-building behavior during the leader’s previous slots. The data may be unreliable for newly staked validators without historical activity or if the validator is engaging in new, previously unseen MEV behaviours.

Note: This endpoint is available exclusively to whitelisted customers only.
{% endhint %}

### Request

#### Method:

`GET ./api/v2/system/slot-info`

#### Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td>slot</td><td>uint64</td><td>The target slot number.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --header "Authorization: $AUTH_HEADER" \
'http://ny.solana.dex.blxrbdn.com/api/v2/system/slot-info?slot=361549233'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="212.68682799676458">Type</th><th>Description</th></tr></thead><tbody><tr><td>slot</td><td>unit64</td><td>The target slot number.</td></tr><tr><td>leader</td><td>string</td><td>Leader identifier address.</td></tr><tr><td>malicious</td><td>boolean</td><td>The determination whether malicious or not.</td></tr></tbody></table>

Response Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
   "slot":"361549233",
   "leader":"8uPW9msN75rfaKiwy8y8NxEX5zSk2WejtVv5YhZr3jCo",
   "malicious":false
}
```

{% endtab %}
{% endtabs %}


# trace

This endpoint provides details about when a transaction was received by our systems, when it was released, and whether it was delayed (including the number of slots delayed).

{% hint style="warning" %}
Note: This endpoint is available exclusively to whitelisted customers only.
{% endhint %}

### Request:

#### Method:

`GET ./api/v2/system/trace`

#### Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>signature</code></td><td>string</td><td>Signature of a submitted transaction.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --header "Authorization: $AUTH_HEADER" \
'http://ny.solana.dex.blxrbdn.com/api/v2/system/trace?signature=...'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="164.90911803582708">Type</th><th>Description</th></tr></thead><tbody><tr><td>signature</td><td>string</td><td>The target transaction signature.</td></tr><tr><td>firstReceivedTime</td><td>google.protobuf.Timestamp</td><td>The timestamp when the Trader API backend first received the transaction.</td></tr><tr><td>firstReleasedTime</td><td>google.protobuf.Timestamp</td><td>The timestamp when the Trader API backend first released the transaction.</td></tr><tr><td>firstReceivedSlot</td><td>int64</td><td>The slot number when the Trader API backend first received the transaction.</td></tr><tr><td>firstReleasedSlot</td><td>int64</td><td>The slot number when the Trader API backend first released the transaction.</td></tr><tr><td>firstReceivedRegion</td><td>string</td><td>The first region which received the transaction.</td></tr><tr><td>firstReleasedRegion</td><td>string</td><td>The first region which released the transaction.</td></tr><tr><td>delayed</td><td>boolean</td><td>Whether the transaction propagation was delayed due to malicious leader detection. Transaction delay will only be affected when <code>submitProtection</code> is set to <code>SP_MEDIUM</code> or <code>SP_HIGH</code>.</td></tr><tr><td>delayedSlots</td><td>int64</td><td>Number of slots delayed.</td></tr></tbody></table>

Response Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
   "signature": "K2UvcQkB5o2...Xvhi8kakUKiroP",
   "firstReceivedTime": "2025-08-28T07:41:31.805125000",
   "firstReleasedTime": "2025-08-28T07:41:31.811762000",
   "firstReceivedSlot": "363028450",
   "firstReleasedSlot": "363028450",
   "firstReceivedRegion": "NY",
   "firstReleasedRegion": "NY",
   "delayed": false,
   "delayedSlots": "0"
}
```

{% endtab %}
{% endtabs %}


# priority-fee

This endpoint gives you the top percentile of the recent priority fee based on the project over the last 100 slots.

{% hint style="warning" %}
Be aware that using a suggested priority fee does not guarantee your transaction will be included in the future slot.
{% endhint %}

### Request:

#### Method:

`GET ./api/v2/system/priority-fee`

#### Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>project</code></td><td>enum</td><td>Define which project to fetch the recent priority fee. Potential value: <code>"P_ALL"</code> , <code>"P_JUPITER"</code>, <code>"P_RAYDIUM"</code></td></tr><tr><td><code>percentile</code></td><td>double</td><td><strong>OPTIONAL.</strong> Define how much percentile of the previous <strong>100</strong> slot's priority fee. Type <code>90</code>, if you want the top 90% percentile. Default <code>55</code>.</td></tr></tbody></table>

#### \* Recommended fees are capped at 0.1 SOL.

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --header "Authorization: $AUTH_HEADER" \
'https://ny.solana.dex.blxrbdn.com/api/v2/system/priority-fee?project=P_JUPITER'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="316.0202020202021">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>project</code></td><td>enum</td><td>Name of the project fetching.</td></tr><tr><td><code>percentile</code></td><td>double</td><td>How much percentile of the previous <strong>100</strong> slot's priority fee.</td></tr><tr><td><code>feeAtPercentile</code></td><td>uint64</td><td>The priority fee at the defined percentile. In micro lamport.</td></tr></tbody></table>

Response Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
    project: 'P_JUPITER', 
    percentile: 55, 
    feeAtPercentile: '71428' 
}
```

{% endtab %}
{% endtabs %}


# GetPriorityFeeStream

This channel provides you with the top percentile of the recent priority fee based on the project over the last 100 slots.

{% hint style="warning" %}
Be aware that using a suggested priority fee does not guarantee your transaction will be included in the future slot.
{% endhint %}

### Method: `subscribe`

### Primary Parameter: `GetPriorityFeeStream`

### Additional Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>project</code></td><td>enum</td><td>Define which project to fetch the recent priority fee. Potential value: <code>"P_JUPITER"</code>, <code>"P_RAYDIUM"</code></td></tr><tr><td><code>percentile</code></td><td>double</td><td><strong>OPTIONAL.</strong> Define how much percentile of the previous <strong>100</strong> slot's priority fee. Type <code>90</code>, if you want the top 90% percentile. Default <code>55</code>.</td></tr></tbody></table>

#### \* Recommended fees are capped at 0.1 SOL.

#### Subscribe sample:

{% tabs %}
{% tab title="WebSocket" %}

```bash
wscat --header "Authorization: $AUTH_HEADER" \
-c wss://ny.solana.dex.blxrbdn.com/ws \ 
-execute '{"jsonrpc": "2.0", "id": 1, "method": "subscribe", "params": ["GetPriorityFeeStream", {"project": "P_RAYDIUM", "percentile": 55}]}'\
-wait 10000
```

{% endtab %}
{% endtabs %}

**Event Result Details:**

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="316.0202020202021">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>project</code></td><td>enum</td><td>Name of the project fetching.</td></tr><tr><td><code>percentile</code></td><td>double</td><td>How much percentile of the previous <strong>100</strong> slot's priority fee.</td></tr><tr><td><code>feeAtPercentile</code></td><td>uint64</td><td>The priority fee at the defined percentile. In micro lamport.</td></tr></tbody></table>

#### Sample event:

<pre class="language-json"><code class="lang-json">{
    "method":"subscribe",
    "params":{
        "subscription":"f29bc4fa-1c0a-42e2-b9b0-1684e6fa8b63",
        "result":{
            project: 'P_JUPITER', 
            percentile: 55, 
            feeAtPercentile: '71428' 
<strong>            }
</strong>        }
    },
    "jsonrpc":"2.0"
}
</code></pre>


# GetBundleTipStream

This channel provides you with percentiles for recent Jito bundle tips.

{% hint style="warning" %}
Be aware that using a suggested tip does not guarantee your transaction will be included in the future slot.
{% endhint %}

### Method: `subscribe`

### Primary Parameter: `GetBundleTipStream`

### Additional Parameters: {none}

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>-</code></td><td>-</td><td><strong>-</strong></td></tr></tbody></table>

#### Subscribe sample:

{% tabs %}
{% tab title="WebSocket" %}

```bash
wscat --header "Authorization: $AUTH_HEADER" \
-c wss://ny.solana.dex.blxrbdn.com/ws --execute '{"jsonrpc": "2.0", "id": 1, "method": "subscribe", "params": ["GetBundleTipStream", {}]}' --wait 10000
```

{% endtab %}
{% endtabs %}

**Event Result Details:**

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="147.02020202020208">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>timestamp</code></td><td>string</td><td>The timestamp when the sample was taken.</td></tr><tr><td><code>percentile25</code></td><td>uint64</td><td>How much tip was paid at the 25th percentile.</td></tr><tr><td><code>percentile50</code></td><td>uint64</td><td>How much tip was paid at the 50th percentile.</td></tr><tr><td><code>percentile75</code></td><td>uint64</td><td>How much tip was paid at the 75th percentile.</td></tr><tr><td><code>percentile95</code></td><td>uint64</td><td>How much tip was paid at the 95th percentile.</td></tr><tr><td><code>percentile99</code></td><td>uint64</td><td>How much tip was paid at the 99th percentile.</td></tr><tr><td><code>emaPrcentile50</code></td><td>uint64</td><td>The 1-minute Exponential Moving Average (EMA) for the 50th percentile tip.</td></tr></tbody></table>

#### Sample event:

<pre class="language-json"><code class="lang-json">{
    "jsonrpc":"2.0",
    "method":"subscribe",
    "params":{
        "subscription":"8df27f43-7cce-4d39-a343-34d95adce1c6",
        "result":{
            "timestamp":"2024-04-16T16:24:00Z",
            "percentile25":8249950000,
            "percentile50":30500000000,
            "percentile75":169589750000,
            "percentile95":748082600000,
            "percentile99":1771670918000,
            "emaPercentile50":30500000000           
<strong>        }
</strong>    }
}
</code></pre>


# GetRecentBlockHashStream

This channel provides you with the latest blockhash from the Solana network for transaction construction.

### Method: `subscribe`

### Primary Parameter: `GetRecentBlockHashStream`

### Additional Parameters:

<table><thead><tr><th width="179.32569366693275">Parameter</th><th width="139.23125339579434">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>-</code></td><td>-</td><td>-</td></tr></tbody></table>

#### Subscribe sample:

{% tabs %}
{% tab title="WebSocket" %}

```bash
wscat -H "Authorization:$AUTH_HEADER" -c wss://ny.solana.dex.blxrbdn.com/ws --wait 1000 --execute '{"jsonrpc":"2.0","id":1,"method":"subscribe","params":["GetRecentBlockHashStream",{}]}'
```

{% endtab %}
{% endtabs %}

**Event Result Details:**

<table><thead><tr><th width="206.12060301507535">Fields</th><th width="316.0202020202021">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>blockhash</code></td><td>enum</td><td>The latest blockhash.</td></tr><tr><td><code>timestamp</code></td><td>google.protobuf.Timestamp</td><td>The timestamp of the event.</td></tr></tbody></table>

#### Sample event:

```json
{
   "jsonrpc":"2.0",
   "method":"subscribe",
   "params":{
      "subscription":"261ebab5-4d13-421e-b124-8cd7ed1f8ede",
      "result":{
         "blockHash":"4CNkQfwhPbR7orycgyjaTKGDZpHrJTNFQhZ8K3uvYCHn",
         "timestamp":"2026-04-16T20:14:44.270883625Z"
      }
   }
}
```


# Pump.fun

Endpoints for quoting, swapping, and streaming Pump.fun and PumpSwap activity, powered by our ultra-fast OFR shred stream.

{% hint style="info" %}
Our Pump.fun and PumpSwap endpoints use dedicated regional DNS entries optimized for fast data ingress through the OFR shred stream. You can find those endpoints [here](/solana/trader-api/introduction/regions#pumpfun-endpoints).
{% endhint %}

## Methods

#### [`quotes`](/solana/trader-api/api-endpoints/pump.fun/quotes)

Get a Pump.fun price quote for the specified tokens.

***

#### [`swap`](/solana/trader-api/api-endpoints/pump.fun/swap)

Create an unsigned transaction for the best available Pump.fun swap across the specified tokens.

***

#### [`swap-sol`](/solana/trader-api/api-endpoints/pump.fun/swap-sol)

Create an unsigned transaction for the best available Pump.fun swap using SOL-based input or output tokens.

***

#### [`amm/quotes`](/solana/trader-api/api-endpoints/pump.fun/amm-quotes)

Get a price quote from the native `swap.pump.fun` liquidity pool for the specified tokens.

***

#### [`amm/swap`](/solana/trader-api/api-endpoints/pump.fun/amm-swap)

Create an unsigned transaction for the best available swap through the native `swap.pump.fun` liquidity pool.

## Streams

#### [`GetPumpFunNewTokensStream`](/solana/trader-api/api-endpoints/pump.fun/getpumpfunnewtokensstream)

Stream new Pump.fun token creation events.

***

#### [`GetPumpFunSwapsStream`](/solana/trader-api/api-endpoints/pump.fun/getpumpfunswapsstream)

Stream Pump.fun swap events.

***

#### [`GetPumpFunAMMSwapsStream`](/solana/trader-api/api-endpoints/pump.fun/getpumpfunammswapsstream)

Stream Pump.fun AMM swap events.

***

#### [`GetPumpFunNewAmmPoolStream`](/solana/trader-api/api-endpoints/pump.fun/getpumpfunnewammpoolstream)

Stream Pump.fun AMM new pool events.


# quotes

Get a price quote by providing the specified tokens information through Pump.fun.

### Request

#### Method:

`GET ./api/v2/pumpfun/quotes`

#### Parameters:

<table><thead><tr><th width="196.71896910191123">Parameter</th><th width="92">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>quoteType</code></td><td>string</td><td>Type of the quote. Potential value could be <code>"BUY"</code> or <code>"SELL"</code></td></tr><tr><td><code>mintAddress</code></td><td>string</td><td>Token mint address.</td></tr><tr><td><code>bondingCurveAddress</code></td><td>string</td><td>Bonding Curve program address.</td></tr><tr><td><code>amount</code></td><td>double</td><td>The amount of token users expected to swap.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl -X 'GET' \
  -H "Authorization: $AUTH_HEADER" \
  -H 'Content-Type: application/json' \
  'https://pump-ny.solana.dex.blxrbdn.com/api/v2/pumpfun/quotes?quoteType=BUY&mintAddress=2DEsbYgW94AtZxgUfYXoL8DqJAorsLrEWZdSfriipump&bondingCurveAddress=Fh8fnZUVEpPStJ2hKFNNjMAyuyvoJLMouENawg4DYCBc&amount=1'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="177.5236885968357">Field</th><th width="245">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>transaction</code></td><td><code>TransactionMessage</code></td><td>See <code>TransactionMessage</code> below for details</td></tr></tbody></table>

`TransactionMessage`

<table><thead><tr><th width="236">Parameter</th><th width="261.2"></th><th width="369">Description</th></tr></thead><tbody><tr><td><code>content</code></td><td>string</td><td>Raw bytes of signed transaction (should be in base64)</td></tr></tbody></table>

#### Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
    "id": 1,
    "result": {
        "quoteType":"BUY",
        "inTokenAddress":"So11111111111111111111111111111111111111112",
        "inAmount":0.0001,
        "outTokenAddress":"2DEsbYgW94AtZxgUfYXoL8DqJAorsLrEWZdSfriipump",
        "outAmount":3575.4061235515865
        }
    },
    "jsonrpc": "2.0"
}
```

{% endtab %}
{% endtabs %}


# swap

Creates an unsigned transaction for the best possible swap through the specified tokens provided by Pump.fun.

{% hint style="warning" %}
This endpoint does not submit the transaction to the network.
{% endhint %}

The endpoint allows you to specify priority fees and tips to later control the transaction inclusion and propagation. Refer to the[ Transaction Submission ](/solana/trader-api/quick-start/transaction-submission)& [Front-Running Protection, Revert Protection, & Transaction Bundle](broken://pages/m1AKjUIvurlMSeFEAkVv) page for additional information about these parameters.

### Request

#### Method:

`POST ./api/v2/pumpfun/swap`

#### Parameters:

<table><thead><tr><th width="196.71896910191123">Parameter</th><th width="92">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>userAddress</code></td><td>string</td><td>Solana address which is placing swap.</td></tr><tr><td><code>bondingCurveAddress</code></td><td>string</td><td>Bonding Curve program address.</td></tr><tr><td><code>tokenAddress</code></td><td>string</td><td>Token address.</td></tr><tr><td><code>tokenAmount</code></td><td>double</td><td>The amount of token users expected to swap.</td></tr><tr><td><code>solThreshold</code></td><td>double</td><td>The amount of SOL to determine if executing the transaction will be failed or not. When it is a buy token transaction, this is the maximum SOL users will spend. When it is a sell token transaction, this is the minimum SOL users will receive.</td></tr><tr><td><code>isBuy</code></td><td>boolean</td><td>Specify if this is a buy or sell transaction.</td></tr><tr><td><code>slippage</code></td><td>double</td><td>The maximum slippage tolerance in percentage. Can be from 0-1000. (E.g. 1 = 1%)</td></tr><tr><td><code>creator</code></td><td>string</td><td>The token creator address.</td></tr><tr><td><code>computeLimit</code></td><td>uint64</td><td><strong>OPTIONAL</strong>. Specifies total compute limit to be allocated for all instructions within the created tx</td></tr><tr><td><code>computePrice</code></td><td>uint64</td><td><strong>OPTIONAL</strong>. Specifies compute price in Lamport (0.000001 SOL = 1,000 Lamport) to be included as a part of instruction, known as priority fee.</td></tr><tr><td><code>tip</code></td><td>unit64</td><td><strong>OPTIONAL.</strong> Specifies a tip amount.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl -X 'POST' \
  -H "Authorization: $AUTH_HEADER"" \
  -H 'Content-Type: application/json' \
  'https://pump-ny.solana.dex.blxrbdn.com/api/v2/pumpfun/swap' \
  -d '{
    "userAddress": "9VUYmJa8NAB8uDe9P9aiFw3DEfezdkg5P5nQH6gcK5Kq", 
    "bondingCurveAddress": "BcVzydVqA4C9c3u4NJhkJZs3BBkqzwa2cqAkMUqfgHV9", 
    "tokenAddress": "Ds37SDZNukQj1aQYKgyWDkDz5xvpNx7PhiwE58TApump", 
    "tokenAmount": 22002, 
    "solThreshold": 0.0001, 
    "isBuy": false, 
    "creator": "JBYTEiKue7TdNMWtSKUZwyyRpHpTV9UKgkioQP4JttPn", 
    "slippage": 1
}'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="177.5236885968357">Field</th><th width="245">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>transaction</code></td><td><code>TransactionMessage</code></td><td>See <code>TransactionMessage</code> below for details</td></tr></tbody></table>

`TransactionMessage`

<table><thead><tr><th width="236">Parameter</th><th width="261.2"></th><th width="369">Description</th></tr></thead><tbody><tr><td><code>content</code></td><td>string</td><td>Raw bytes of signed transaction (should be in base64)</td></tr></tbody></table>

#### Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
    "id": 1,
    "result": {
        "transaction": {
            "content": "AQAA...QXBp"
        }
    },
    "jsonrpc": "2.0"
}
```

{% endtab %}
{% endtabs %}


# swap-sol

Creates an unsigned transaction for the best possible swap through the specified tokens provided by Pump.fun.

{% hint style="warning" %}
This endpoint does not submit the transaction to the network.
{% endhint %}

The endpoint allows you to specify priority fees and tips to later control the transaction inclusion and propagation. Refer to the[ Transaction Submission ](/solana/trader-api/quick-start/transaction-submission)& [Front-Running Protection, Revert Protection, & Transaction Bundle](broken://pages/m1AKjUIvurlMSeFEAkVv) page for additional information about these parameters.

### Request

#### Method:

`POST ./api/v2/pumpfun/swap-sol`

#### Parameters:

<table><thead><tr><th width="196.71896910191123">Parameter</th><th width="92">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>userAddress</code></td><td>string</td><td>Solana address which is placing swap.</td></tr><tr><td><code>bondingCurveAddress</code></td><td>string</td><td>Bonding Curve program address.</td></tr><tr><td><code>tokenAddress</code></td><td>string</td><td>Token address.</td></tr><tr><td><code>solAmount</code></td><td>double</td><td>The SOL amount users expected to swap.</td></tr><tr><td><code>creator</code></td><td>string</td><td>The token creator address.</td></tr><tr><td><code>computeLimit</code></td><td>uint32</td><td>OPTIONAL. Specifies total compute limit to be allocated for all instructions within the created tx</td></tr><tr><td><code>computePrice</code></td><td>uint64</td><td>OPTIONAL. Specifies compute price in Lamport (0.000001 SOL = 1,000 Lamport) to be included as a part of instruction, known as priority fee.</td></tr><tr><td><code>tip</code></td><td>unit64</td><td><strong>OPTIONAL.</strong> Specifies a tip amount.</td></tr><tr><td><code>slippage</code></td><td>double</td><td>Specify the slippage of your transaction. Can be from 0-1000. (E.g. 1 = 1%)</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl -X 'POST' \
  -H "Authorization: $AUTH_HEADER" \
  -H 'Content-Type: application/json' \
  'https://pump-ny.solana.dex.blxrbdn.com/api/v2/pumpfun/swap-sol' \
  -d '{
    "userAddress": "9VUYmJa8NAB8uDe9P9aiFw3DEfezdkg5P5nQH6gcK5Kq",
    "bondingCurveAddress": "BcVzydVqA4C9c3u4NJhkJZs3BBkqzwa2cqAkMUqfgHV9",
    "tokenAddress": "Ds37SDZNukQj1aQYKgyWDkDz5xvpNx7PhiwE58TApump",
    "creator": "JBYTEiKue7TdNMWtSKUZwyyRpHpTV9UKgkioQP4JttPn"
    "solAmount": 1
    "slippage" : 1
}'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="177.5236885968357">Field</th><th width="245">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>transaction</code></td><td><code>TransactionMessage</code></td><td>See <code>TransactionMessage</code> below for details</td></tr></tbody></table>

`TransactionMessage`

<table><thead><tr><th width="184">Parameter</th><th width="178.2"></th><th width="369">Description</th></tr></thead><tbody><tr><td><code>content</code></td><td>string</td><td>Raw bytes of unsigned transaction (should be in base64)</td></tr></tbody></table>

#### Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
    "transaction": {
        "content": "AQAA...QXBp"
    }
}
```

{% endtab %}
{% endtabs %}


# amm/quotes

Get a price quote by providing the specified tokens information through native swap.pump.fun liquidity pool.

### Request

#### Method:

`GET ./api/v2/pumpfun/amm/quotes`

#### Parameters:

<table><thead><tr><th width="196.71896910191123">Parameter</th><th width="92">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>inToken</code></td><td>string</td><td>Address of the swap-in token.</td></tr><tr><td><code>inAmount</code></td><td>double</td><td>The amount of token wants to be swapped from.</td></tr><tr><td><code>outToken</code></td><td>string</td><td>Address of the swap-out token.</td></tr><tr><td><code>pool</code></td><td>string</td><td>Specify exact which liquidity pool wants to interact with.</td></tr><tr><td><code>slippage</code></td><td>double</td><td>The maximum slippage tolerance in percentage.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --location 'https://pump-ny.solana.dex.blxrbdn.com/api/v2/pumpfun/amm/quotes' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: $AUTH_HEADER' \
--data '{
  "inToken": "So11111111111111111111111111111111111111112",
  "inAmount": 0.01,
  "outToken": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  "pool": "Gf7sXMoP8iRw4iiXmJ1nq4vxcRycbGXy5RL8a8LnTd3v",
  "slippage": 1
}'
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields: <a href="#fields" id="fields"></a>

<table><thead><tr><th width="156.2619698468357">Field</th><th width="132.03125">Type</th><th width="457.76103551319363">Description</th></tr></thead><tbody><tr><td><code>quoteType</code></td><td>string</td><td>The type of the swap, which is either a 'BUY' or a 'SELL'.</td></tr><tr><td><code>inToken</code></td><td>string</td><td>Address of the swap-in token.</td></tr><tr><td><code>inAmount</code></td><td>double</td><td>The amount of token wanted to be swapped from.</td></tr><tr><td><code>outToken</code></td><td>string</td><td>Address of the swap-out token.</td></tr><tr><td><code>outAmount</code></td><td>string</td><td>The amount of token expected to be received.</td></tr></tbody></table>

Response Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
    "quoteType":"BUY", 
    "inToken":"So11111111111111111111111111111111111111112", 
    "inAmount":0.0101, 
    "outToken":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", 
    "outAmount":1.740342
}
```

{% endtab %}
{% endtabs %}


# amm/swap

Creates an unsigned transaction for the best possible swap by providing the specified tokens information through native swap.pump.fun liquidity pool.

{% hint style="warning" %}
This endpoint does not submit the transaction to the network.
{% endhint %}

The endpoint allows you to specify priority fees and tips to later control the transaction inclusion and propagation. Refer to the[ Transaction Submission ](/solana/trader-api/quick-start/transaction-submission)& [Front-Running Protection & Transaction Bundle](broken://pages/l1XxJpEiTHNboMs62P4Y) page for additional information about these parameters.

### Request

#### Method:

`POST ./api/v2/pumpfun/amm/swap`

#### Parameters:

<table><thead><tr><th width="196.71896910191123">Parameter</th><th width="92">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>ownerAddress</code></td><td>string</td><td>Solana address which is placing swap.</td></tr><tr><td><code>inToken</code></td><td>string</td><td>Address of the swap-in token.</td></tr><tr><td><code>outToken</code></td><td>string</td><td>Address of the swap-out token.</td></tr><tr><td><code>pool</code></td><td>string</td><td>Specify exact which liquidity pool wants to interact with.</td></tr><tr><td><code>inAmount</code></td><td>double</td><td>The amount of token wants to be swapped from.</td></tr><tr><td><code>slippage</code></td><td>double</td><td>The maximum slippage tolerance in percentage.</td></tr><tr><td><code>computeLimit</code></td><td>uint64</td><td><strong>OPTIONAL</strong>. Specifies total compute limit to be allocated for all instructions within the created tx</td></tr><tr><td><code>computePrice</code></td><td>uint64</td><td><strong>OPTIONAL</strong>. Specifies compute price in Lamport (0.000001 SOL = 1,000 Lamport) to be included as a part of instruction, known as priority fee.</td></tr><tr><td><code>tip</code></td><td>unit64</td><td><strong>OPTIONAL.</strong> Specifies a tip amount that will be used to pay for front-running protection or bundle submission services. <a href="/pages/l1XxJpEiTHNboMs62P4Y">What is <code>tip</code>?</a></td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --location 'https://pump-ny.solana.dex.blxrbdn.com/api/v2/pumpfun/amm/swap' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: $AUTH_HEADER' \
--data '{
  "ownerAddress": "3RshvockaPKfPYZzsr6oxphcjQRbdhzCmQ11LSNxqkb2",
  "inToken": "So11111111111111111111111111111111111111112",
  "outToken": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  "pool": "Gf7sXMoP8iRw4iiXmJ1nq4vxcRycbGXy5RL8a8LnTd3v",
  "inAmount": 0.01,
  "slippage": 1,
  "computeLimit": 130000,
  "computePrice": 100000,
  "tip": 10000
}'
```

{% endtab %}
{% endtabs %}

### Response:

#### Example:

{% tabs %}
{% tab title="JSON" %}

<pre class="language-json"><code class="lang-json"><strong>{
</strong>    "transactions":[{
        "content":"AQAA...AAA==",
        "isCleanup":false
    }],
    "buyQuoteAmountIn":0.009970089,
    "buyUserQuoteAmountIn":0.01,
    "buyMaxQuoteAmountIn":0.0101,
    "buyBaseAmountOut":1.722171,
    "sellBaseAmountIn":0,
    "sellMinQuoteAmountOut":0,
    "sellQuoteAmountOut":0,
    "sellUserQuoteAmountOut":0,
    "fees":[{
        "amount":0.000029911,
        "mint":"So11111111111111111111111111111111111111112",
        "percent":0.3
    }]
}
</code></pre>

{% endtab %}
{% endtabs %}


# GetPumpFunNewTokensStream

This channel provides information on any new Pump.fun token events.

### Subscribe

#### Method

```
GetPumpFunNewTokensStream
```

#### Parameters:

<table><thead><tr><th width="202.71896910191123">Parameter</th><th width="136">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>-</code></td><td>-</td><td>-</td></tr></tbody></table>

#### Subscribe sample:

{% tabs %}
{% tab title="WebSocket" %}

```bash
wscat -H "Authorization:$AUTH_HEADER" -c wss://pump-ny.solana.dex.blxrbdn.com/ws --wait 1000 --execute '{"jsonrpc": "2.0", "id": 1, "method": "subscribe", "params": [  "GetPumpFunNewTokensStream", {} ]}'
```

{% endtab %}
{% endtabs %}

**Event Result Details:**

<table><thead><tr><th width="178">Field</th><th width="168">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>slot</code></td><td>int64</td><td>The slot number</td></tr><tr><td><code>txnHash</code></td><td>string</td><td>The signature of the new token transaction.</td></tr><tr><td><code>name</code></td><td>string</td><td>The name of the token.</td></tr><tr><td><code>symbol</code></td><td>string</td><td>The symbol of the token.</td></tr><tr><td><code>uri</code></td><td>string</td><td>Uniform Resource Identifier for token information.</td></tr><tr><td><code>mint</code></td><td>string</td><td>Token mint address.</td></tr><tr><td><code>bondingCurve</code></td><td>string</td><td>Bonding Cureve program address.</td></tr><tr><td><code>creator</code></td><td>string</td><td>The token creator address.</td></tr><tr><td><code>creatorVault</code></td><td>string</td><td>The valut address.</td></tr><tr><td><code>timestamp</code></td><td>google.protobuf.Timestamp</td><td>The timestamp of the event.</td></tr></tbody></table>

Sample event:

```json
{
  "jsonrpc":"2.0",
  "method":"subscribe",
  "params":{
    "subscription":"e7c9302c-0c2e-4d2c-aa3b-402260c4743c",
    "result":{
      "slot":"339818412",
      "txnHash":"4QksBZUDFMtV89EaQosxgEPJUiVNNDeH5PPtG81As4LhivRuToA3i9oDcP5r191xUeKVeMzFrUvDzWewoWTcThH9",
      "name":"TESLA NEW MASCOT",
      "symbol":"HAHAYES",
      "uri":"https://ipfs.io/ipfs/QmcPNuJDVAdx7bnLXghCQtkq5FFHHxaDr879MXsGGke7JA",
      "mint":"Ds37SDZNukQj1aQYKgyWDkDz5xvpNx7PhiwE58TApump",
      "bondingCurve":"BcVzydVqA4C9c3u4NJhkJZs3BBkqzwa2cqAkMUqfgHV9",
      "creator":"JBYTEiKue7TdNMWtSKUZwyyRpHpTV9UKgkioQP4JttPn",
      "timestamp":"2025-05-13T20:50:59.067563312Z",
      "creatorVault":"GwthYZPC771TwxiAAhczwFdD2iThB9QCbnVNrycEwjwW"
    }
  }
}
```


# GetPumpFunNewAmmPoolStream

This channel provides information on any new Pump.fun AMM pool creation events.

### Subscribe

#### Method

```
GetPumpFunNewAmmPoolStream
```

#### Parameters:

<table><thead><tr><th width="202.71896910191123">Parameter</th><th width="136">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>-</code></td><td>-</td><td>-</td></tr></tbody></table>

#### Subscribe sample:

{% tabs %}
{% tab title="WebSocket" %}

```bash
wscat -H "Authorization:$AUTH_HEADER" -c wss://pump-ny.solana.dex.blxrbdn.com/ws --wait 1000 --execute '{"jsonrpc": "2.0", "id": 1, "method": "subscribe", "params": [ "GetPumpFunNewAmmPoolStream", {} ]}'
```

{% endtab %}
{% endtabs %}

**Event Result Details:**

<table><thead><tr><th width="178">Field</th><th width="168">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>slot</code></td><td>int64</td><td>The slot number</td></tr><tr><td><code>creator</code></td><td>string</td><td>The address that created the AMM pool.</td></tr><tr><td><code>pool</code></td><td>string</td><td>The Pump.fun AMM pool address.</td></tr><tr><td><code>baseMint</code></td><td>string</td><td>The base token mint address for the pool.</td></tr><tr><td><code>quoteMint</code></td><td>string</td><td>The quote token mint address for the pool.</td></tr><tr><td><code>lpMint</code></td><td>string</td><td>The liquidity provider token mint address for the pool.</td></tr><tr><td><code>timestamp</code></td><td>google.protobuf.Timestamp</td><td>The timestamp of the event.</td></tr><tr><td><code>coinCreator</code></td><td>string</td><td>The creator address associated with the coin for this pool.</td></tr></tbody></table>

Sample event:

```json
{
   "jsonrpc":"2.0",
   "method":"subscribe",
   "params":{
      "subscription":"74611482-8b92-4706-adea-1886ca788355",
      "result":{
         "slot":"413668778",
         "creator":"EFRHqrNZvA7xSaA9qvTjcWEsowns5pNhKnjZNPbJJHHM",
         "pool":"BEceeEw6QmquEv4URKFCGYnyrMu28zBFQ4Tv5yMhXGop",
         "baseMint":"So11111111111111111111111111111111111111112",
         "quoteMint":"Dx6wjwgZZNj5Q3X7op3L5251HvGCYcdKypttGs1rEY9q",
         "lpMint":"6HeiuyxuozR9Ku7tfEFpNxooZun5xZgEHb8SUG3AkpVK",
         "timestamp":"2026-04-16T19:54:06.495944920Z",
         "coinCreator":"EFRHqrNZvA7xSaA9qvTjcWEsowns5pNhKnjZNPbJJHHM"
      }
   }
}
```


# GetPumpFunSwapsStream

This channel provides information on any Pump.fun swaps events.

### Subscribe

#### Method

```
GetPumpFunSwapsStream
```

#### Parameters:

<table><thead><tr><th width="202.71896910191123">Parameter</th><th width="136">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>tokens</code></td><td>repeated string</td><td>A list of tokens to track swap events. Please provide token addresses instead of token symbols.</td></tr></tbody></table>

#### Subscribe sample:

{% tabs %}
{% tab title="WebSocket" %}

```bash
wscat -H "Authorization:$AUTH_HEADER" -c wss://pump-ny.solana.dex.blxrbdn.com/ws --wait 1000 --execute '{"jsonrpc": "2.0", "id": 1, "method": "subscribe", "params": [  "GetPumpFunSwapsStream", {"tokens":["2nGeHVJKXV8tZ7ZFwGCH5uGYQVxWejQMDkHUAECFpump"]} ]}'
```

{% endtab %}
{% endtabs %}

**Event Result Details:**

<table><thead><tr><th width="178">Field</th><th width="180">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>slot</code></td><td>int64</td><td>The slot number</td></tr><tr><td><code>txnHash</code></td><td>string</td><td>Transaction information of the found transaction</td></tr><tr><td><code>mintAddress</code></td><td>string</td><td>Meta information of the found transaction</td></tr><tr><td><code>userAddress</code></td><td>string</td><td>Swap transaction owner's address.</td></tr><tr><td><code>userTokenAccountAddress</code></td><td>string</td><td>Swap transaction owner's token address.</td></tr><tr><td><code>bondingCurveAddress</code></td><td>string</td><td>Bonding Cureve program address.</td></tr><tr><td><code>tokenVaultAddress</code></td><td>string</td><td>Token valut program address.</td></tr><tr><td><code>solAmount</code></td><td>unit64</td><td>SOL amount in this swap transaction. In lamport.</td></tr><tr><td><code>tokenAmount</code></td><td>unit64</td><td>Token amount in this swap transaction. Unit is based on token decimal.</td></tr><tr><td><code>isBuy</code></td><td>boolean</td><td>Identify if the transaction is a token purchase transaction.</td></tr><tr><td><code>virtualSolReserves</code></td><td>unit64</td><td>Amount of virtual SOL reserve.</td></tr><tr><td><code>virtualTokenReserves</code></td><td>unit64</td><td>Amount of virtual Token reserve.</td></tr><tr><td><code>creator</code></td><td>string</td><td>The token creator address.</td></tr><tr><td><code>timestamp</code></td><td>google.protobuf.Timestamp</td><td>Time stamp of the event.</td></tr></tbody></table>

Sample event:

```json
{
  "jsonrpc":"2.0",
  "method":"subscribe",
  "params":{
    "subscription":"a8d3b82e-6e2c-4631-8b53-0ff4a2292530",
    "result":{
      "slot":"339822983",
      "txnHash":"2gBJ7iiEGPYzjiJXoVqd7UvLzQWgnb94t99bWu4B1WD6qdUAZNUXEAdWthViKWA6BkTaFWmqivc43FQqqDL7oRdE","mintAddress":"2nGeHVJKXV8tZ7ZFwGCH5uGYQVxWejQMDkHUAECFpump",
      "userAddress":"3WJqDiQdyeZBpwFGMVd6AG3UXodwGjtvZMRLG7urnPEc",
      "userTokenAccountAddress":"EDnqaZMhAezighoSeYHDqozJLR2GbGwR2sPVUnRzmhRL",
      "bondingCurveAddress":"2AWNkXawcUes2Vdhk2zsECsda1535dbi3Lu8BbwG3knJ",
      "tokenVaultAddress":"DUqSefi8ktNab2UXsLqhUbVhZ5EYtVUQym1obfhCKk6E",
      "solAmount":"49004807",
      "tokenAmount":"438913413686",
      "isBuy":false,
      "virtualSolReserves":"59925670539",
      "virtualTokenReserves":"537165453949301",
      "timestamp":"2025-05-13T21:21:15.134205329Z",
      "creator":"AmNMqM5VbPwtG14gLBdtrqZpQrhSzavLkQPufS8CQ7LB"
    }
  }
}
```


# GetPumpFunAMMSwapStream

This channel provides information on any Pump.fun AMM swaps events.

### Subscribe

#### Method

```
GetPumpFunAMMSwapStream
```

#### Parameters:

<table><thead><tr><th width="202.71896910191123">Parameter</th><th width="136">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>pools</code></td><td>repeated string</td><td>A list of pool addresses to track swap events.</td></tr></tbody></table>

#### Subscribe sample:

{% tabs %}
{% tab title="WebSocket" %}

```bash
wscat -H "Authorization:$AUTH_HEADER" -c wss://pump-ny.solana.dex.blxrbdn.com/ws --wait 1000  --execute ' {"jsonrpc": "2.0", "id": 1, "method": "subscribe", "params": ["GetPumpFunAMMSwapStream", {"pools": ["6WwcmiRJFPDNdFmtgVQ8eY1zxMzLKGLrYuUtRy4iZmye"]}] }]}'
```

{% endtab %}
{% endtabs %}

**Event Result Details:**

<table><thead><tr><th width="178">Field</th><th width="180">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>slot</code></td><td>int64</td><td>The slot number</td></tr><tr><td><code>pool</code></td><td>string</td><td>Pool address.</td></tr><tr><td><code>user</code></td><td>string</td><td>Swap transaction owner's address.</td></tr><tr><td><code>isBuy</code></td><td>boolean</td><td>Identify if the transaction is a token purchase transaction.</td></tr><tr><td><code>quoteMint</code></td><td>string</td><td>The quote token address.</td></tr><tr><td><code>baseMint</code></td><td>string</td><td>The base token address.</td></tr><tr><td><code>inAmount</code></td><td>unit64</td><td>In-token amount in this swap transaction. Unit is based on token decimal.</td></tr><tr><td><code>outAmount</code></td><td>unit64</td><td>Out-token amount in this swap transaction. Unit is based on token decimal.</td></tr><tr><td><code>txHash</code></td><td>string</td><td>Transaction signature.</td></tr><tr><td><code>timestamp</code></td><td>google.protobuf.Timestamp</td><td>Time stamp of the event.</td></tr></tbody></table>

Sample event:

```json
{
  "jsonrpc": "2.0",
  "method": "subscribe",
  "params": {
    "subscription": "309cf033-f340-4928-b3d5-d25f28114300",
    "result":{
      "slot": '335658832',
      "pool":"6WwcmiRJFPDNdFmtgVQ8eY1zxMzLKGLrYuUtRy4iZmye",
      "user":"2Bjgpc23KTQq6bJR39ESCRHdc3LzpKML1jpGssFg4Kbu",
      "isBuy":false,
      "quoteMint":"So11111111111111111111111111111111111111112",
      "baseMint":"8ncucXv6U6epZKHPbgaEBcEK399TpHGKCquSt4RnmX4f",
      "inAmount":74470530751,
      "outAmount":245838031,
      "txHash":"w2X3xBrAVnKcDq7T9aMNS4joAY7bfATecTv7wvaNDxFc3rocupZLYrZwTkpZUWx8hbbbbDHowv5CKoK4A8SSKkg",
      "timestamp":"2025-04-24T20:19:19.918922598Z"
    }
  }
}
```


# Jupiter

Endpoints for quoting, transaction building, and route-aware swap construction through Jupiter.

## Methods

#### [`quotes`](/solana/trader-api/api-endpoints/jupiter/quotes)

Get Jupiter quotes for the specified swap parameters.

***

#### [`swap`](/solana/trader-api/api-endpoints/jupiter/swap)

Create an unsigned transaction for the best available swap through Jupiter.

***

#### [`swap-instructions`](/solana/trader-api/api-endpoints/jupiter/swap-instructions)

Create Jupiter swap instructions that can be used to build a transaction.

***

#### [`route-swap`](/solana/trader-api/api-endpoints/jupiter/route-swap)

Create an unsigned transaction for a swap along a specified Jupiter route.


# quotes

Get quotes from Jupiter by specifying required parameters.

{% hint style="info" %}
This version contains experimental support for Jupiter in the `Quotes` endpoint and `Prices` stream endpoint. Note that the endpoints in Trader API are powered by Geyser, which is faster but will also result in subtly different state representations than what you'd normally get over Solana RPC. We welcome any feedback you have on these results.
{% endhint %}

### Request

#### Method:

`GET ./api/v2/jupiter/quotes`

#### Parameters:

<table><thead><tr><th width="177.5236885968357">Parameter</th><th width="150">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>inToken</code></td><td>string</td><td>Symbol of the swap-in token.</td></tr><tr><td><code>outToken</code></td><td>string</td><td>Symbol of the swap-out token.</td></tr><tr><td><code>inAmount</code></td><td>double</td><td>The amount of token wanted to be swapped from.</td></tr><tr><td><code>slippage</code></td><td>double</td><td>The maximum slippage tolerance in percentage.</td></tr><tr><td><code>fastMode</code></td><td>boolean</td><td>OPTIONAL. Lower latency option that excludes Raydium Pools.</td></tr></tbody></table>

{% hint style="info" %}
Jupiter support for this endpoint is still experimental as we incorporate Geyser streams into Jupiter's aggregation algorithms. We welcome any feedback here.
{% endhint %}

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl --header "Authorization: $AUTH_HEADER" \
"https://ny.solana.dex.blxrbdn.com/api/v2/jupiter/quotes?inToken=SOL&outToken=USDC&inAmount=0.1&slippage=0.1",
```

{% endtab %}

{% tab title="WebSocket" %}

```bash
wscat --header "Authorization: $AUTH_HEADER" 
-c wss://ny.solana.dex.blxrbdn.com/ws --execute '{"jsonrpc": "2.0", "id": 1, "method": "GetJupiterQuotes", "params": {"inToken": "SOL", "outToken": "USDC", "inAmount":0.1, "slippage": 0.1}}'/
```

{% endtab %}

{% tab title="Go" %}

```go
//missing
```

{% endtab %}

{% tab title="TypeScript" %}

<pre class="language-typescript"><code class="lang-typescript">await provider.getQuotes({
    inToken: "SOL",
<strong>    outToken: "USDC",
</strong>    inAmount: 1,
<strong>    slippage: 5,
</strong>    limit: 5,
    projects: ["P_RAYDIUM", "P_JUPITER"],
})
</code></pre>

{% endtab %}
{% endtabs %}

### Response:

#### Fields: <a href="#fields" id="fields"></a>

<table><thead><tr><th width="206.5236885968357">Field</th><th width="186">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>inToken</code></td><td>string</td><td>Symbol of the swap-in token.</td></tr><tr><td><code>inTokenAddress</code></td><td>string</td><td>The program address for the swap-in token.</td></tr><tr><td><code>outToken</code></td><td>string</td><td>Symbol of the swap-out token.</td></tr><tr><td><code>outTokenAddress</code></td><td>string</td><td>The program address for the swap-out token.</td></tr><tr><td><code>inAmount</code></td><td>double</td><td>The amount of token wanted to be swapped from.</td></tr><tr><td><code>quotes</code></td><td>[] <code>ProjectQuote</code></td><td>See <code>ProjectQuote</code> below for details.</td></tr></tbody></table>

`ProjectQuote`

<table><thead><tr><th width="177.5236885968357">Field</th><th width="150">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>project</code></td><td>string</td><td>Symbol of the swap-in token.</td></tr><tr><td><code>routes</code></td><td>[]<code>QuoteRoute</code></td><td>See <code>QuoteRoute</code> below for details.</td></tr></tbody></table>

`QuoteRoute`

<table><thead><tr><th width="177.5236885968357">Field</th><th width="150">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>inAmount</code></td><td>double</td><td>Number of the swap-in token.</td></tr><tr><td><code>outAmount</code></td><td>double</td><td>Number of the swap-out token.</td></tr><tr><td><code>steps</code></td><td>[]<code>QuoteStep</code></td><td>See <code>QuoteStep</code> below for details.</td></tr></tbody></table>

`QuoteStep`

<table><thead><tr><th width="177.5236885968357">Field</th><th width="274.6918703848952">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>inToken</code></td><td>string</td><td>Symbol of the swap-in token for the current step.</td></tr><tr><td><code>inTokenAddress</code></td><td>string</td><td>The program address for the swap-in token for the current step.</td></tr><tr><td><code>outToken</code></td><td>string</td><td>Symbol of the swap-out token for the current step.</td></tr><tr><td><code>outTokenAddress</code></td><td>string</td><td>The program address for the swap-out token for the current step.</td></tr><tr><td><code>inAmount</code></td><td>double</td><td>Number of the swap-in token for the current step.</td></tr><tr><td><code>outAmount</code></td><td>double</td><td>Number of the swap-out token for the current step.</td></tr><tr><td><code>slippage</code></td><td>double</td><td>The maximum slippage tolerance in percentage.</td></tr><tr><td><code>priceImpact</code></td><td><code>PriceImpactPercent</code></td><td><code>"percent"</code> Percentage impact on price.<br><code>"infinity"</code> Indicates possible infinity values: <code>INF_NOT</code>, <code>INF_POSITIVE</code>, <code>INF_NEGATIVE</code>. Usually <code>INF_NOT</code>.</td></tr><tr><td><code>fee</code></td><td>Fee</td><td><code>"amount"</code> Amount paid to AMM project.<br><code>"mint"</code> Token currency the fee is paid in.<br><code>"percent"</code> Percentage of the swap consumed by the fee.</td></tr></tbody></table>

`PriceImpactPercent`

<table><thead><tr><th width="177.5236885968357">Field</th><th width="150">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>percent</code></td><td>number</td><td>Percentage impact on price.</td></tr><tr><td><code>infinity</code></td><td>string</td><td>Indicates possible infinity values: <code>INF_NOT</code>, <code>INF_POSITIVE</code>, <code>INF_NEGATIVE</code>. Usually <code>INF_NOT</code>.</td></tr></tbody></table>

`Fee`

<table><thead><tr><th width="173.5236885968357">Field</th><th width="150">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>amount</code></td><td>number</td><td>Amount paid to AMM project</td></tr><tr><td><code>mint</code></td><td>string</td><td>Token currency the fee is paid in</td></tr><tr><td><code>percent</code></td><td>number</td><td>Percentage of the swap consumed by the fee</td></tr></tbody></table>

Response Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
    "inToken": "SOL",
    "inTokenAddress": "So11111111111111111111111111111111111111112",
    "outToken": "USDC",
    "outTokenAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "inAmount": 0.1,
    "quotes": [
        {
            "routes": [
                {
                    "inAmount": 0.1,
                    "outAmount": 5.843859,
                    "steps": [
                        {
                            "project": {
                                "label": "Raydium",
                                "id": ""
                            },
                            "inToken": "SOL",
                            "inTokenAddress": "So11111111111111111111111111111111111111112",
                            "outToken": "",
                            "outTokenAddress": "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R",
                            "inAmount": 0.1,
                            "outAmount": 3.328617,
                            "slippage": 0.1,
                            "priceImpactPercent": {
                                "percent": 9.899955638899446e-7,
                                "infinity": "INF_NOT"
                            },
                            "fee": {
                                "amount": 0.00025,
                                "mint": "",
                                "percent": 0
                            }
                        }
                    ]
                }
            ]
        }
    ]
}
```

{% endtab %}
{% endtabs %}


# swap

Creates an unsigned transaction for the best possible swap through the specified tokens provided by Jupiter.

{% hint style="warning" %}
This endpoint does not submit the transaction to the network.
{% endhint %}

### Request

#### Method:

`POST ./api/v2/jupiter/swap`

The **`tip`** parameter is currently not supported. You can create an additional transaction with an **`tip`** instruction and submit the swap & tip transactions as a Bundle.

#### Parameters:

<table><thead><tr><th width="177.5236885968357">Parameter</th><th width="106.69187038489522">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>ownerAddress</code></td><td>string</td><td>Solana address which is placing swap.</td></tr><tr><td><code>inToken</code></td><td>string</td><td>Symbol or token program address of the swap-in token for the current step.</td></tr><tr><td><code>outToken</code></td><td>string</td><td>Symbol or token program address of the swap-out token.</td></tr><tr><td><code>inAmount</code></td><td>number</td><td>The amount of token wanted to be swapped from.</td></tr><tr><td><code>slippage</code></td><td>number</td><td>The maximum slippage tolerance in percentage.</td></tr><tr><td><code>computePrice</code></td><td>number</td><td><strong>OPTIONAL</strong>. Specifies compute price in Lamport (0.000001 SOL = 1,000 Lamport) to overwrite default Jupiter compute price.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```bash
curl -X 'POST' \
  -H "Authorization: $AUTH_HEADER" \
  -H 'Content-Type: application/json' \
  'https://ny.solana.dex.blxrbdn.com/api/v2/jupiter/swap' \
  -d '{
  "ownerAddress": "AFT8VayE7qr8MoQsW3wHsDS83HhEvhGWdbNSHRKeUDfQ",
  "inToken": "SOL",
  "outToken": "USDC",
  "inAmount": 0.1,
  "slippage": 0.001
}'
```

{% endtab %}

{% tab title="WebSocket" %}

```bash
wscat --header "Authorization: $AUTH_HEADER" 
-c wss://ny.solana.dex.blxrbdn.com/ws 
--execute '{"jsonrpc": "2.0", "id": 1, 
"method": "PostTradeSwap", 
"params": {"Owner": "2JJQHAYdogfB1fE1ftcvFcsQAXSgQQKkafCwZczWdSWd", 
"inToken": "USDC", 
"outToken":"SOL", 
"inAmount": 0.1, 
"slippage": 5, 
"project": "P_JUPITER"}}'
```

{% endtab %}

{% tab title="Go" %}

```go
g.PostTradeSwap(context.Background(), "AFT8VayE7qr8MoQsW3wHsDS83HhEvhGWdbNSHRKeUDfQ", "SOL", "USDC", 0.1, 0.001, pb.Project_P_JUPITER)
```

{% endtab %}

{% tab title="TypeScript" %}

```typescript
await provider.postTradeSwap({
    ownerAddress: ownerAddress,
    inToken: "USDC",
    outToken: "SOL",
    inAmount: 0.01,
    slippage: 0.1,
    project: "P_JUPITER",
})
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="199.5236885968357">Field</th><th width="265">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>transaction</code></td><td>[]<code>TransactionMessage</code></td><td>Raw bytes of unsigned transaction. See <code>TransactionMessage</code> below</td></tr><tr><td><code>outAmount</code></td><td>double</td><td>Amount of tokens expected from the swap</td></tr><tr><td><code>outAmountMin</code></td><td>double</td><td>Minimum amount of tokens allowed from swap given slippage</td></tr><tr><td><code>priceImpact</code></td><td><code>PriceImpactPercentV2</code></td><td>Impact of swap upon the pool's liquidity. See <code>PriceImpactPercentV2</code> below.</td></tr><tr><td><code>fee</code></td><td><code>Fee</code></td><td>Fee paid to AMM project. See <code>Fee</code> below.</td></tr></tbody></table>

`PriceImpactPercentV2`

<table><thead><tr><th width="177.5236885968357">Field</th><th width="150">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>percent</code></td><td>double</td><td>Percentage impact on price.</td></tr><tr><td><code>infinity</code></td><td>string</td><td>Indicates possible infinity values: <code>INF_NOT</code>, <code>INF_POSITIVE</code>, <code>INF_NEGATIVE</code>. Usually <code>INF_NOT</code>.</td></tr></tbody></table>

`fee`

<table><thead><tr><th width="173.5236885968357">Field</th><th width="150">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>amount</code></td><td>float</td><td>Amount paid to AMM project</td></tr><tr><td><code>mint</code></td><td>string</td><td>Token currency the fee is paid in</td></tr><tr><td><code>percent</code></td><td>float</td><td>Percentage of the swap consumed by the fee</td></tr></tbody></table>

#### Example:

{% tabs %}
{% tab title="JSON" %}

```json
{
    "transactions":[
        "AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg1Lo4g1hEH0nZ/T5G7nTAttcpmpseiXTXm0014hV7EHwEHh2GMqr0U7fduiXRYJGJhJ0CpV6kxeccTVonDvECAgAJF4ls26fgpAnCYufUzDrXMMpDjMYkf2Y2FHuxqKE+2+Ir73zZ7a97axh2Uh16NmlxFpyIf8w7yNqLsuZ/bbJoAJM9bkcuZ6RuprS9C6ud/TXitMcvHW1Zwuq5XJQlc60i8fQRtdRejGa7LPcbb0X1rADKVzfxp2IFx3sK/viF6uXHq+Q8fB4h6qb5fIvTVeIb0SeWdHVsHI4QbG5xK6EW2XC4cOEt03mJFWHS6fqPJkMYNOtzby8k/CoqTf8f1dyk3/LLubdg7dsYVwYwMGOtM9e1cpbqAtTgM14xzq+kzELdhML7GK7WGfVGYyZT7wYCnwKoZL84KYZxgbsg3x1xXDAA9CbhbrjPAxGRdfmAUUNElVzjcOdllA88KUOVRftFqabf0VxQdwX5M5uVPBpN/bycwYbdL2LfSKlYBF4qdlJZQCCJRlPP3fp7fmDJZmgnNqLbD4OFZJJbEQd6IeA215cfJvXwRhxAEL1cyMpwZt2lhKbucXk0xnet9MJfvRVqLWrj7TJ6D4hJp3KUHZcFDzpujLjdOrzbFHCIfIK1TT82K7AOSM28B8gwNuoiq44hs2cvrKE9TfLl8AjQJIG18IIGm4hX/quBhPtof2NGGMA12sQ53BrrO1WYoPAAAAAAAQan1RcZLFxRIYzJTD1K8X9Y2u4Im6H9ROPb2YoAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKlBV7BYDzHF/ORKYlgtvPnXjudZQ6CEo5OzUDaNIomTCIUPLW4CpHr4JNCatp3ELXDLKMv6JJ+37le50lbBJ2Lv7BOKeAgUWPsd/ZDPmI9XmYqos8e4j1u2K4WnhlVcz30AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEvZScQ2AsM/IHeQ7RajUkyhuZdc8SGiqQz/7H34torN86EED9glv4WMHdJchvP2ZZvDPQq6PniaYqUsrsmZ94EZ8+1v+p9XMyTSHFcQqqY1KB217YyB72dA2rGwMEftogUUAgABNAAAAACAd44GAAAAAKUAAAAAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkQBAEOAA8BARUSEAIRAwQFBhIHCAkKCwwTAQ0AEQkA4fUFAAAAAMaAAAAAAAAAEAMBAAABCRYAH1Bvd2VyZWQgYnkgYmxvWHJvdXRlIFRyYWRlciBBcGk="
    ],
    "outAmount":3.296703,
    "outAmountMin":0.032966,
    "priceImpact":{
        "percent":4.5386233671508175e-7,
        "infinity":"INF_NOT"
    },
    "fee":{
        "amount":0.00025,
        "mint":"",
        "percent":0
    }
}
```

{% endtab %}
{% endtabs %}


# swap-instructions

Creates Jupiter swap instruction which can be used to build a transaction. Internally, this uses the return of Jupiter Quote to generate instructions.

The instructions can be used by a user to then generate your own transaction. The benefit of this endpoint is that you can add more custom instructions into the transaction if you would like to do so.

### Request

#### Method:

`POST ./api/v2/jupiter/swap-instructions`

#### Parameters:

<table><thead><tr><th width="177.5236885968357">Parameter</th><th width="106.69187038489522">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>ownerAddress</code></td><td>string</td><td>Solana address which is placing swap.</td></tr><tr><td><code>inToken</code></td><td>string</td><td>Symbol or token program address of the swap-in token for the current step.</td></tr><tr><td><code>outToken</code></td><td>string</td><td>Symbol or token program address of the swap-out token.</td></tr><tr><td><code>inAmount</code></td><td>number</td><td>The amount of token wanted to be swapped from.</td></tr><tr><td><code>slippage</code></td><td>number</td><td>The maximum slippage tolerance in percentage.</td></tr><tr><td><code>computePrice</code></td><td>uint64</td><td><strong>OPTIONAL</strong>. Specifies compute price in Lamport (0.000001 SOL = 1,000 Lamport) to overwrite default Jupiter compute price.</td></tr><tr><td><code>tip</code></td><td>uint64</td><td><strong>OPTIONAL.</strong> Specifies a tip amount.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

```sh
curl -X 'POST' \
  -H "Authorization: $AUTH_HEADER" \
  -H 'Content-Type: application/json' \
  'https://ny.solana.dex.blxrbdn.com/api/v2/jupiter/swap-instructions' \
  -d '{
  "ownerAddress": "AFT8VayE7qr8MoQsW3wHsDS83HhEvhGWdbNSHRKeUDfQ",
  "inToken": "SOL",
  "outToken": "USDC",
  "inAmount": 0.1,
  "slippage": 0.001
  "computePrice": 2000,
  "tip": 2000,
}'
```

{% endtab %}

{% tab title="WebSocket" %}

```bash
wscat --header "Authorization: $AUTH_HEADER" 
-c wss://ny.solana.dex.blxrbdn.com/ws 
--execute '{"jsonrpc": "2.0", "id": 1, 
"method": "PostTradeSwap", 
"params": {"Owner": "2JJQHAYdogfB1fE1ftcvFcsQAXSgQQKkafCwZczWdSWd", 
"inToken": "USDC", 
"outToken":"SOL", 
"inAmount": 0.1, 
"slippage": 5,
"computePrice": 2000,
"tip": 1500, 
"project": "P_JUPITER"}}'
```

{% endtab %}

{% tab title="Go" %}

```go
g.PostJupiterSwapInstructions(ctx, &pb.PostJupiterSwapInstructionsRequest{
		OwnerAddress: ownerAddr,
		InToken:      "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
		OutToken:     "So11111111111111111111111111111111111111112",
		Slippage:     0.4,
		InAmount:     0.01,
		Tip:          1100,
	}, useBundle, provider.SubmitOpts{
		SubmitStrategy: pb.SubmitStrategy_P_SUBMIT_ALL,
		SkipPreFlight:  config.BoolPtr(false),
	})
```

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="271.5236885968357">Field</th><th width="258">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>transaction</code></td><td>[] <code>InstructionJupiter</code></td><td>List of jupiter instructions that can be used to compile a transaction</td></tr><tr><td><code>addressLookupTables</code></td><td>map&#x3C;string, <code>PublicKeys</code>></td><td>Amount of tokens expected from the swap</td></tr><tr><td><code>outAmount</code></td><td>number</td><td>Minimum amount of tokens allowed from swap given slippage</td></tr><tr><td><code>priceImpact</code></td><td><code>priceImpact</code></td><td>Impact of swap upon the pool's liquidity. See <code>priceImpact</code> below for details.</td></tr><tr><td><code>fees</code></td><td>[] <code>Fee</code></td><td>Fee paid to AMM project. See <code>fee</code> below for details.</td></tr></tbody></table>

`InstructionJupiter`

<table><thead><tr><th width="177.5236885968357">Field</th><th width="199">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>programID</code></td><td>string</td><td>The program ID of the instruction</td></tr><tr><td><code>accounts</code></td><td>[] <code>AccountMeta</code></td><td>A list of AccountMeta objects, that give more information about accounts associated with instruction</td></tr><tr><td><code>data</code></td><td>bytes</td><td>encoded byte data for instruction</td></tr></tbody></table>

`PublicKeys`

<table><thead><tr><th width="173.5236885968357">Field</th><th width="154">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>pks</code></td><td>[]string</td><td>array of public keys</td></tr></tbody></table>

`AccountMeta`

<table><thead><tr><th width="177.5236885968357">Field</th><th width="150">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>programID</code></td><td>string</td><td>Solana programID of account</td></tr><tr><td><code>isSigner</code></td><td>bool</td><td>is account a signer</td></tr><tr><td><code>isWritable</code></td><td>bool</td><td>is account writable</td></tr></tbody></table>

`fee`

<table><thead><tr><th width="177.5236885968357">Field</th><th width="150">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>amount</code></td><td>number</td><td>Amount paid to AMM project</td></tr><tr><td><code>mint</code></td><td>string</td><td>Token currency the fee is paid in</td></tr><tr><td><code>percent</code></td><td>number</td><td>Percentage of the swap consumed by the fee</td></tr></tbody></table>

`priceImpact`

<table><thead><tr><th width="148.5236885968357">Field</th><th width="150">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>percent</code></td><td>number</td><td>Percentage impact on price.</td></tr><tr><td><code>infinity</code></td><td>string</td><td>Indicates possible infinity values: <code>INF_NOT</code>, <code>INF_POSITIVE</code>, <code>INF_NEGATIVE</code>. Usually <code>INF_NOT</code>.</td></tr></tbody></table>

#### Example:

{% tabs %}
{% tab title="JSON" %}

```json
instructions:{programID:"ComputeBudget111111111111111111111111111111"  data:"\x02\xe3\x07\x03\x00"}  instructions:{programID:"ComputeBudget111111111111111111111111111111"  data:"\x03t\xe9\x01\x00\x00\x00\x00\x00"}  instructions:{programID:"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"  accounts:{programID:"7p5Y1RkUZLfXhX592XhDevvYXvc6o81NguhQWQkSqCtG"  isSigner:true  isWritable:true}  accounts:{programID:"CtmpZNVw8h9yyxZpeHxiJLgDjbD7Vc93fhWGy4zhox5f"  isWritable:true}  accounts:{programID:"7p5Y1RkUZLfXhX592XhDevvYXvc6o81NguhQWQkSqCtG"}  accounts:{programID:"So11111111111111111111111111111111111111112"}  accounts:{programID:"11111111111111111111111111111111"}  accounts:{programID:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}  data:"\x01"}  instructions:{programID:"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"  accounts:{programID:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}  accounts:{programID:"CapuXNQoDviLvU1PxFiizLgPNQCxrsag1uMeyk6zLVps"}  accounts:{programID:"7p5Y1RkUZLfXhX592XhDevvYXvc6o81NguhQWQkSqCtG"  isSigner:true}  accounts:{programID:"4bR8p5VD1zc36aL9q8yvnZXmtkm6rUoRvozUovZK6ejK"  isWritable:true}  accounts:{programID:"Gjmjory7TWKJXD2Jc6hKzAG991wWutFhtbXudzJqgx3p"  isWritable:true}  accounts:{programID:"91bUbswo6Di8235jAPwim1At4cPZLbG2pkpneyqKg4NQ"  isWritable:true}  accounts:{programID:"CtmpZNVw8h9yyxZpeHxiJLgDjbD7Vc93fhWGy4zhox5f"  isWritable:true}  accounts:{programID:"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}  accounts:{programID:"So11111111111111111111111111111111111111112"}  accounts:{programID:"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"}  accounts:{programID:"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"}  accounts:{programID:"D8cy77BBepLMngZx6ZukaTff5hCt1HrWyKk3Hnd9oitf"}  accounts:{programID:"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"}  accounts:{programID:"CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"}  accounts:{programID:"CapuXNQoDviLvU1PxFiizLgPNQCxrsag1uMeyk6zLVps"}  accounts:{programID:"4BLNHtVe942GSs4teSZqGX24xwKNkqU7bGgNn3iUiUpw"}  accounts:{programID:"EXHyQxMSttcvLPwjENnXCPZ8GmLjJYHtNBnAkcFeFKMn"  isWritable:true}  accounts:{programID:"Gjmjory7TWKJXD2Jc6hKzAG991wWutFhtbXudzJqgx3p"  isWritable:true}  accounts:{programID:"91bUbswo6Di8235jAPwim1At4cPZLbG2pkpneyqKg4NQ"  isWritable:true}  accounts:{programID:"9PeQs7co3NtYnkV2CuWCSC6MXxwrMgHBX1E2qNEUj7MY"  isWritable:true}  accounts:{programID:"G5uMMdPTeaafVVEnp3SLNLARarJXjHd5JaKuG3ojMPig"  isWritable:true}  accounts:{programID:"BidNmgznWp3ERbuemvdPANYmF2ePMHzGvbqjhMpRZYrn"  isWritable:true}  accounts:{programID:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"}  accounts:{programID:"8WTecm2xTbPxf26XdY9Gh8FqSbbm74dDxPGRFea13sta"  isWritable:true}  accounts:{programID:"BD13Hf2ZThRL3v6wUDcVwhmsK5Eg5qJPR3CRtwkp5o6e"  isWritable:true}  accounts:{programID:"EixuZuv6oEAq3CDNC8XMUKhZs5LhJezzSQ93EkUUwrZV"  isWritable:true}  accounts:{programID:"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"}  data:"\xc1 \x9b3A֜\x81\x05\x01\x00\x00\x00\x1ad\x00\x01\x10'\x00\x00\x00\x00\x00\x00\x8eg\x01\x00\x00\x00\x00\x00(\x00\x00"}  instructions:{programID:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  accounts:{programID:"CtmpZNVw8h9yyxZpeHxiJLgDjbD7Vc93fhWGy4zhox5f"  isWritable:true}  accounts:{programID:"7p5Y1RkUZLfXhX592XhDevvYXvc6o81NguhQWQkSqCtG"  isWritable:true}  accounts:{programID:"7p5Y1RkUZLfXhX592XhDevvYXvc6o81NguhQWQkSqCtG"  isSigner:true}  data:"\t"}  instructions:{programID:"HQ2UUt18uJqKaQFJhgV9zaTdQxUZjNrsKFgoEDquBkcx"  data:"Powered by bloXroute Trader Api"}  addressLookupTableAddresses:{key:"9H4ZSJv3qdj6LPaCTz61epbrXavAEgYPgfEfuzg8xFkS"  value:{pks:"9eeeqQLCm7QBqhQoWDs5NL7ZugCUsXKRpYeD5VwJ9LeQ"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"9tGvPeMCEpf6RL717F1zfz6mAAqUqboTdsgrpboWoHwY"  pks:"H6SczTxVq3ecUzBJodiv4ZymtsVuEJvd66d2omNzkEF3"  pks:"Bj8Tec1XKeeKvoNkokfFqh6HM8NibwDFzj6Lm8Mo5sHY"  pks:"5Tt9W9pKnxRpe2urEdBG41YFVZzEM7thG3SUpFwnYU5P"  pks:"76Nm7GYgHJEUMpvvu3x5Q8hxkjgv2BYoQJPzpbFVenFo"  pks:"2nt5wux4HsBUhpwT8Wiuiq92m9ErfqcRFreuy2mHWtkn"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"E9jsTjQQaaaDr1Ws8mew7xmwHGug7Q28EUcZsGRdKeRD"  pks:"Hvh89ZfMTAYxsMCo7t62YRNVScFidpQAHa2ym5HHo2sf"  pks:"VKwC1oddvEv1zoz8a7BejSoWCHnEUTy3wABru2zXBnx"  pks:"37RBuoJYu4nke2Z5NmyDSntf977YuNVwFhefBgL8DBrd"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"9zremXwXsN46dvXnQ5d1x51fwiTft9RV6uE4WqLDfViE"  pks:"qm6i47S4D6AQ5ECHDqDyDoAwrGt7MDDnY96SpopDeD9"  pks:"J39TUv5RdLKPSrahm3PrJTGFjm8UCWKUE9oZPy7EzPXr"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"4oBVmTitEYrpE22wkFtodPjb9L3rryhr4x22Hu79cpMk"  pks:"89MqfGde4LRvPDwwBqasCexNFcv1HEmX1s2uzynCmSaU"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"2CYJMnBZ8EnVhNzV8XKG46KAEAecWB4BkAD8zxtU2B4w"  pks:"7dQUvFHPVRW8hPUSvDGroTzh5gA9akBooKbyPgNggKEX"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"6FG9eX85K28aoJMgtnYvAqWtRzNPgXj23GLsHpTWhe4q"  pks:"AUdEVtjbXuocg69aLo9Eedfq4yejwgAr3NDBd5YgCBsV"  pks:"ETaffsGZjtBK6L5ytWqvEtx4QDedaGULdAXTqtCqSbxj"  pks:"Des9S7tCZFpg7EUMFqkuy2Nv4EdbqaPn27sHboAJzjWK"  pks:"2UcG5cXda9UMXJrrG8ax4NkopgZwGTC1MyBdfNFELpMp"  pks:"9fuSRLMKMECfkQVh5kFLCRC2XjpA7TxKaPJhS44XKnP6"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"9MrPyibWwvBpVvwUzMfRwApSyepc9jjikjKJK8sXFwqx"  pks:"BvuoFfRiGEukREefMD5bJBqgXM941pxYKgmnYz4jaVRo"  pks:"BARfiF5coK8EcRPUKx1qS7D1Tn8iim4bLwuD2h9QK5qp"  pks:"D9jF4WexWLJxYKS87rModEYh9W3Ef53gATqohYRVQ7t7"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"BBWZ84wzpscDeqWPoTPnSocz9wFt9apgKyBTaAwQhqrV"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"CVauw3XGaXhgvAhfi8SyDL4kL4ABTDsDbcDsZ79BzQzX"  pks:"5Sh58GXnqVrDiYF3LH5MDg4rqdVvnCL9ZoJd5EiTT6ki"  pks:"AcQB7bAWNw9krwTRgJeTm43YMtpEz52AbQuenE5L6SMT"  pks:"EiPDVUCwj84YbobLBDNw35AUcdsmknZwmHq9kNc9uSHe"  pks:"BYwtDkTGgoaHxkTZKL9wojbRjUqGYPawphSei5yn3f7s"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"BoXj7rfYXLguUAeKGRj44TVkDeUJD5ysUKdjtvVZdrCM"  pks:"GUtT73ek2tZkVstQZb34Rj5rfWjJQetRpGcgx12uyCxp"  pks:"B1AmPdQRA9EMN3XiVQ6ztkCiWJAF4t41kyAneDekqDwP"  pks:"D2gcvTptdd9ntw1f26Vk9imxx4c8Y4uMjKYjbJGmGppU"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"6GVYL6G2qtdtpVLzpgLc9Jz9EGkQ6F9SA9BUQToyP8Q5"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"DQdaCaJ7W1KbkLo3wkWmg7rfWaQa89vW3zyWFGJWXpWo"  pks:"DekKDyMugPZHh2t2wzAmoJA6VZEKZEPFWeDAcc3nyJSM"  pks:"HQhjB1cA7f3KpxtrAdtuvjVQBP44FHe9ZWDL9x64JE75"  pks:"59x5rVpqnk2J4NzgYQs4iDzNZmTYd8GHYgLCCkpRxe6e"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"HtUjxAy8f9PrPWPCLqK1brcKJGGLuMW8Nvs5AZMRJiRy"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"BPqje1ViRTCqiNPsrvsp1kNy4XjpcY6sAqd7aRSd533E"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"5gYx4KzRPA8s95BJPpPc3hKWocQrav5AoirDbd5NqXiP"  pks:"54LXj7hJdYbtbghgfC61Kurs5JwxpwETnqCGpfxoS19z"  pks:"AHnYBA96ihK9zhzNadZ1QYXhZ68DuEag7cBB4MSegRgV"  pks:"HZsN7Gc8aozc48qevaNtJtHcprHDGgUXZVsfE8VhJXSV"  pks:"XZLrZoLDqFoEMtDpe6r9bYLR5Y8XyfzShQL5N1NZm7N"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"46nPctzY2hwmWxe2dHHm1zCCTD9W8FrddpJoPomDS4sD"  pks:"8LBGwaxQYxH2b5n3bH51rK4kWJzCrada75di7eaNjMs6"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"FcaE4id9ktTiRHQdfsxXEvVTr2TQNYE9EBYGRFVfykER"  pks:"6sCwR6KueJcpvzFZpp1jT5bs83dGxQjMRKmQmhM3w4Qq"  pks:"FyK22yv31a1ApxJd4NAkr2u1gMPrCjDkbeVN9YubK2rJ"  pks:"6b7ZqM7XBFbC83c87XwZ6nUyNJKpePozRhuYEzD7RhBs"  pks:"AkhUDsaG3jhZTbHCEgYJWr54T7DmTYJ3ridP4v82zLhK"  pks:"8tpYBk9z9vvFK6XkYRei58GTCfNg4jxxvaWa1RkJhGbs"  pks:"Gfk4X9nzjz1Kt2G37ovJu83z96FZ3m362iLwGdiNsLru"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"3sj4TViwkC7648tFYVYVoPeGFCimCxMDMtSQPJDPDT3x"  pks:"28jZQ7mnHmtvJ7SKnMDeeddgyA2ogieHDhXgMcH5CDT1"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"96tNVg2t1f8jToKUZTdUwPN28FCmvXeguCHK9WuAeeXh"  pks:"GGqpeNsVLBhQeE7DhEWPFE9sLstWgJxndDcv9eFvNMaS"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"CPDq1xkybqNgDrKuFDVYf3yWAXEbYsK1BfNnVxLBHhEg"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"CPKasecBM1YFAhgNgwqgp2DPYkYcsfCEPJFR2CTNSBWk"  pks:"EtEvAn5U34RML6UkuUVTbsJAMnAiSAfuVvKaH2Lu6wXX"  pks:"Efm12hmQurBdnVb2aayWgbTqrcFqqe8aQWjCeyf2xDQL"  pks:"BJho8a8ipN4xZe3CGSXgx6NMb5dAJVMo3eEvuGoWaG1X"  pks:"7QzBbJPMMESa7fUaxLArovxfyg8QnMomKoRP7f5DdEno"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"63ifhTtzgokWUpAVnBS4xLWbbDAJTWbYL3DDJSFNbxR8"  pks:"D9S65S4wNgYRdcXuMtoKieTdbNWFA6s4N4Dw5PBkTb3o"  pks:"FQU3uAbkGqSmJgwZAVkRgLyuz6wrpe7z2aV8vCdDng2u"  pks:"6GaDxWng9GfuSihdn7RC6T6pu5MjjFYn3Xan6D9dPAiq"  pks:"6D8jYZbAL589FGkNtvGpn4fGTDfE4mH54pThZMq6VQXM"  pks:"5taMK2vEG2YGjnoczD25MMg58foPy6kEQDPNMAi2Bz7x"  pks:"8bSwbdnCbHUSeuG39vNeAUyetb2bUdqFo7W3jt7YXV6"  pks:"HcfxNVmGbszSeuibNzhEdQzWrEePoWcvRuWBYQfpsR2z"  pks:"CoswfKSzYKuxh7LfJHo4HkDF5nkufJmRTEajCDiGXEgh"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"GMo5FvCh1DtF6ccQgWokGLSsNAw1mqMoLrtwuQnm8wFr"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"BdX1eKskyrXJe5ZkZ6TLt2sLgyjf1Dv3MXAac6CcunDb"  pks:"6A4sSPkjbRUrrKciGwTCSqvgyQxsCou4QwLF3WcPVPrr"  pks:"Go7xQroRZhtptLgSoGc6HsrQqfxYhoV7rgrErgvNfuiJ"  pks:"GB9pGy8nzjm1A5iUeQ5Jc8M1AT6Utg38cX7VyB3vGBSK"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"3rYTQHKjj2etpX3L6cwzFXhZLBZENQXeCfHQLZcukMCL"  pks:"CSZj14nnkrJm5EwBFCDYcFkBxEsuKPUBiz8vTiXZ3E5M"  pks:"WqVDxuAFDDPzQV15yhFPdoMTHz91L6q1V8sroHtFT2m"  pks:"2nXeNEKT9csgKkc7hs9yBfNyHBy9MCLm5KPXdHvxvpKy"  pks:"HbCG8Snrzi53Y9Ts6Qf9cnHHN8QVxjSncUtxdXikcQ2y"  pks:"8WTecm2xTbPxf26XdY9Gh8FqSbbm74dDxPGRFea13sta"  pks:"BD13Hf2ZThRL3v6wUDcVwhmsK5Eg5qJPR3CRtwkp5o6e"  pks:"CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"  pks:"4BLNHtVe942GSs4teSZqGX24xwKNkqU7bGgNn3iUiUpw"  pks:"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"  pks:"9eDiF8pAgXsiSo79Z28Z5rYGmep4xmXgLc5bS3tCp2yy"  pks:"BidNmgznWp3ERbuemvdPANYmF2ePMHzGvbqjhMpRZYrn"  pks:"G5uMMdPTeaafVVEnp3SLNLARarJXjHd5JaKuG3ojMPig"  pks:"EXHyQxMSttcvLPwjENnXCPZ8GmLjJYHtNBnAkcFeFKMn"  pks:"9PeQs7co3NtYnkV2CuWCSC6MXxwrMgHBX1E2qNEUj7MY"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"7EcjGGU2YhtbJGEaUeaGwECVxd2kwcvWbDgQsXFwf1fU"  pks:"GSUVJHJCJ2CYq75FeKUcMaQX2FhrwR7cmecNqDqdYLrD"  pks:"6LxB5LHuo4yL2rm32N9rArCgJ66urBXJnCxCiP9y2G3X"  pks:"Cs1wPmLrefAUX7tKvadEi5d1d2sdgWqRtcqxzNjGkycF"  pks:"BuYLiQJFnuTzGT3hgz7vu9RaDzyyxouPPMvFy8YaUDJW"  pks:"AGYEq8k4em6rVCGEdGVPKUszcYHQuet4kw3pymTkLJjG"  pks:"JAp7EBNrcMnHHMd52Azc3D9pYdckUuAw7snvf1gqY5Gs"  pks:"D4h1EorECXg2tWnBfLSArjoBbZpc5rJHSwS62YTKYSJz"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"ASAk3f2aUWacdajLcuZedkVF4wt8fMfgGCJJ9i8ctEHG"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"EsbKufxrBq7UmP7QgraARb2YRY4JjgSKQS9wPpQhzUwj"  pks:"GHFb1MuwxMvPLxzJXi1MYFxSCScjLcEv5CAoP73RiB3o"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"F8aK5XFk2f5QFBr2VBPSwWHQw3SeUTZcTYLgVtB4mV5B"  pks:"4p4kB2PFXP5TB2ZScy6VQ7VyBUVbeeqqcS6ZufaVG2k5"  pks:"9BGykd4JUu5XsGdhs3pQD7tNqZG6r7mNipdccZamsxz9"  pks:"CEgQV79woJyW7Ttp82ryx7M29UtaRUxtN4YPGVVfrAds"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"8KwznMPV1wsym5VL55xJ9TVN21rYYFd3peeNYCsRiqGq"  pks:"A893oFuVRRY7xjmALt4LFpBUnhpg6qsqhEmo1egPvvUX"  pks:"6hiPCWbNe1uAjovSDFPN7SztHCLEHUVhy1mkvkYpFrML"  pks:"8B3ipJLSAkBed5X5L5RqQgK8nYfD2BuwZgkWUcNYZBa9"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"2KgDqgfgyCo3b5RkULZvgTFM1VnLUaSWPpBULppgU5oT"  pks:"H2HCLYPePmmEBbXTEZ6xjknRRr5GzS3hvTKR4EKgKiNT"  pks:"J1kdrZ2yLiF7huY234hK1xnZoZEGyDSLUvrG2rNfp2QR"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"CspN55WQP9ViRuZKsUd5VvEb8tK6BqSRxsipxxV266Ag"  pks:"2ygWeBDk62sLTaTxF32zp5xy5GMmewoYBHiskhHdYmLE"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"2FCyE8rVMmeZAEhf76o941y94tzmEYPXHe8gTjrRpx9b"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"2Ly5C9qoeAXz8erFZn7TDyAEgfft1UQ5qcQARtoaf2Rm"  pks:"J3ExLioscxfKivkifStNKJ5cWb4y37nDpCmWf4Y2iMQ5"  pks:"27zLLoGvZpGVw24EMM9Bj4Rb6VKbCj1dxuWrPjiUYNrG"  pks:"AQvQPFTQhvSSDyFfRjDbXSd1hd1dyJKFgWYTAm18Qc5n"  pks:"5fhZknT8mZkfPg2jwo6QuJcw497KKeeSBDMuncDWrPh1"  pks:"9CCtrf3uVcdJLhe8YphuHLSGF7uEUdhac63fFBFDNx2Y"  pks:"6N6UVj4s7GmyiBuBbwcPfnvzTP95HS2YWrytkZGrzPFY"  pks:"3wRkGgvSuYRT2xPwJMEmV3cRgRFLaVyeaaYFzfq6fNEf"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"CwdgictsuNbiAT1D7JcrwKqseGwRQTLqKb3x4geUQh8e"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"FsqpH9M4Yeu9DQv8KBS3Q1xRcPD5zH6F8VLe11Nhg5fH"  pks:"BLEVWxQb2pushx8aUCSpvxJeCSmG452ZFWS4htPXpusT"  pks:"ArTAFTSFkUjxKRu1kdMHW9XoRMPmUjYd2cS155K3SxVT"  pks:"9eHDniBWZoDxRmsAcpsVzt1UJteV2AzVt1X7sBhJ8Nm5"  pks:"8pHucDN1T5q8DuqSmDwc3VfPgVK7UL2CijGdu9H39mjm"  pks:"9Zqc2fJXimfSGKcakkQ9eG6qzdvvFkrVrN6PSrYDDp6Q"  pks:"5daByXKtE2C6hXAzp1y4PSY5EGpQwj2LYkzL4dBpGNKX"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"6UoGdDjS2MYvmgaJY4ANSEbSKFStzdNanFs3vgHhE1wf"  pks:"J9DqUQ3c3912AbED7mYAbB9nzh5ket1RhK8CQW4jXhH6"  pks:"D5Z68sPMNJn8wHb8ozXhAowbNXsURC7UDpewZ1soTDbm"  pks:"8PZVsBpHsnfCTL6EnxWHWw1wRgVhJYxi58ZtjpaSU7q3"  pks:"DHgTpDdcCuoZeG5aiu9AhZ9DgUWJzkLM8skpJQ9eLjFE"  pks:"Fhw8hmJDqNHscUuohN46RvkNYuqqUgX6vpaCYqRD1ubS"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"onhDmNixGCuXqzdxfMxWZUmnRejHiZj6nv1q4FDHLmX"  pks:"BH9qfPDBgqvodEJWCskUMp92UuQAGUVGfFaZJ8WRFTy9"  pks:"GKWuPMYLQnneGvTc5vK64SwpVAaNCMev36gAiCNb7kB"  pks:"C691SPi35YPUVBXcYnw4gc6cMjQ1vbuuQtj9KjfLRZAR"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"9aKQN4sXCfXi4kWdkpfkm43RvxKs8tWsBg6cR5ntKxZB"  pks:"6kKGSDGBSpNZnHXxWvd4pSawoQFZR1MXKBdJT5dqPDaT"  pks:"7BWfogfEBQMRoM7PTbwxw4dchv3qh9P5zQbTZitzk4XT"  pks:"GHL6fUV2YFxq6nVK5Hzt24eAX1aUUPH1bXRf8SDuzSiK"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"Chmq2E6fMERcNGGvSVsZQk1E8c1R4X1MAmpegotoYdSN"  pks:"5CedTxQ2KF7jSPRGjixPJhvZCvBNKdEHsJs7yiLCBRip"  pks:"srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX"  pks:"3gKesj8pvsJejYumFtaBAbVfqaFwMnhA8PFLJj8YLZhR"  pks:"13H1B5CQFRN9tNtcRNiSbckAZ3zzQRUW6Zvao551T4jV"  pks:"6756XbRwGxkFPTHq9sn32AwEsGb7Dha9v1TsQvx2ShX"  pks:"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"  pks:"B9UMQ2mNZNNjimSoKaxyfzotfPLaUuSLqayYuHMtCyqe"  pks:"BDz96DiuVDoWWq1mibVJxa68MsunqQ7UX5dUHfkTdvqy"  pks:"5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"  pks:"T8wbwQPAaxyQgDCA9ABCm1rjnUv1hrP9mXmUHComAJx"  pks:"DcX4atzJRciKZn5x5CtX8yxBvtci9WWEXe5M5RqQYRVQ"  pks:"AFdkfEYkAuodsLtXiNpwwUw2kv28S8aNVL9wmgKMTf1F"  pks:"2wdiK9WSqXHnptuX6nDV5UrMwqJdqq7mJr2utTtzw9DF"  pks:"EzGBbrwbC25JTrj9SSy2YLRwc2Fac3hcUsQccLumWtNe"  pks:"6p9ruuicAqdebPK4HmCqvkeHGh9CfYVBM3YHZBotcSiT"  pks:"CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK"  pks:"GXJLxstBBuPnAXKRzGCqUuMSRjrEf8h1QDTMRYfXVWhc"  pks:"HFuKP6AnsMmzZ6HEafZvun2BwJyvpGFhuDTfSzvN86wS"  pks:"GSJd4VNJWAEuk3x2XGSuWe145nD8GqrJHNuogbGBT4BE"  pks:"25b8seN1sX5A91KdZfCB5AjUnxSftjKHNMeWKQkNFuuP"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"6bCVo6hrefvrSzyjQ9LQLrHdVmZkx3433ygMVJnwMfqp"  pks:"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4"  pks:"4BLNHtVe942GSs4teSZqGX24xwKNkqU7bGgNn3iUiUpw"  pks:"FERjPVNEa7Udq8CEv68h6tPL46Tq7ieE49HrE2wea3XT"  pks:"B2b945dXLsZz4nVce5cJtKmcaiHDP3A4R9qnNAbAUQAF"  pks:"HZeLxbZ9uHtSpwZC3LBr4Nubd14iHwz7bRSghRZf5VCG"  pks:"3RkffPKTwoabXvibKza8bmN4GAbiEgiRgCxRKBKrFRfC"  pks:"24Uqj9JCLxUeoC3hGfh5W3s9FM9uCHDS2SG3LYwBpyTi"  pks:"mzyxg4e5gQ7kWA8bZ4suXpvBTfdAPuW7E6h1xaSpbyJ"  pks:"GWt39j6MTjYAgekJGQzUGne1HQU1jfKpf33HpHKseC9c"  pks:"Eo7WjKq67rjJQSZxS6z3YkapzY3eMj6Xy8X5EQVn5UaB"  pks:"G5jGgYBYzXxjE2g37CYJtEQgbmh1etHLUHf83FmpBe9X"  pks:"XqYAUFeTxszGQFWB3FopdWuecQcjuVZXCDFioNc6Txv"  pks:"DbYM4mDkGYcFpuUZb2kDJH3F45srvcobRLN4mM3Gthgo"  pks:"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"  pks:"FZN7QZ8ZUUAxMPfxYEYkH3cXUASzH8EqA6B4tyCL8f1j"  pks:"DuFXxPxAyJhHj4gMpE8As1Ta4nSSVXv8xfEDRrWQmJ9G"  pks:"8ZkBesxcH4evmmauJDUrsaBaehu4X9XWfKttxJSuxWJU"  pks:"6LqMcyQduxzK791Yh7VuNa72YB1mPEoZevwLAzkX9kHG"}}  outAmount:9.2046e-05  outAmountMin:9.1678e-05  priceImpact:{percent:0.0020522189083663827  infinity:"NotInfinite"}  fees:{amount:1e-06  mint:"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"  percent:0.0001}

```

{% endtab %}
{% endtabs %}


# route-swap

Creates an unsigned transaction for a swap along the provided route using Jupiter.

{% hint style="warning" %}
This endpoint does not submit the transaction to the network.
{% endhint %}

This endpoint is intended for advanced usage. A simple application of this endpoint would be to use [Get Quotes](/solana/trader-api/api-endpoints/jupiter/quotes) to compute several routes, and then use the best route to create the steps in this endpoint.

### Request

#### Method:

`POST ./api/v2/jupiter/route-swap`

The **`tip`** parameter is currently not supported. You can create an additional transaction with an **`tip`** instruction and submit the swap & tip transactions as a Bundle.

#### Parameters:

<table><thead><tr><th width="196.71896910191123">Parameter</th><th width="218">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>ownerAddress</code></td><td>string</td><td>Solana address which is placing swap.</td></tr><tr><td><code>steps</code></td><td>[]<code>JupiterRouteStep</code></td><td>Route definition for each swap step.</td></tr><tr><td><code>slippage</code></td><td>double</td><td>The maximum slippage tolerance in percentage.</td></tr><tr><td><code>computePrice</code></td><td>uint64</td><td><strong>OPTIONAL</strong>. Specifies compute price in Lamport (0.000001 SOL = 1,000 Lamport) to overwrite default Jupiter compute price.</td></tr></tbody></table>

`JupiterRouteStep`

<table><thead><tr><th width="207.33333333333331">Parameter</th><th width="186">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>inToken</code></td><td>string</td><td>Symbol or token program address of the swap-in token for the current step.</td></tr><tr><td><code>outToken</code></td><td>string</td><td>Symbol or token program address of the swap-out token for the current step. Mutually exclusive with <code>project.id</code></td></tr><tr><td><code>inAmount</code></td><td>double</td><td>Amount of the swap-in token for the current step.</td></tr><tr><td><code>outAmount</code></td><td>double</td><td>Amount of the swap-out token for the current step.</td></tr><tr><td><code>fee</code></td><td><code>Fee</code></td><td>Fee information. See <code>fee</code> for detail.</td></tr><tr><td>project</td><td><code>StepProject</code></td><td>See <code>StepProject</code> below</td></tr></tbody></table>

`StepProject`

<table><thead><tr><th width="207.33333333333331">Parameter</th><th width="125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>label</code></td><td>string</td><td>Cosmetic label describing containing project. Not necessary for this usage.</td></tr><tr><td><code>id</code></td><td>string</td><td>Pool address to swap through for this step. Mandatory for Jupiter swaps, to distinguish between different AMM projects available in Jupiter.</td></tr></tbody></table>

`Fee`

<table><thead><tr><th width="207.33333333333331">Parameter</th><th width="125">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>amount</code></td><td>float</td><td>Amount of the fee being charged off.</td></tr><tr><td><code>mint</code></td><td>string</td><td>Token mint address of the token being charged off.</td></tr><tr><td><code>percent</code></td><td>float</td><td>Percentage of the swap was charged as fee.</td></tr></tbody></table>

#### Request example:

{% tabs %}
{% tab title="HTTP" %}

<pre class="language-bash"><code class="lang-bash"><strong>curl --header "Authorization: $AUTH_HEADER" -X 'POST' \
</strong>  'https://ny.solana.dex.blxrbdn.com/api/v2/jupiter/route-swap' \
  -H 'Content-Type: application/json' \
  -d '{
    "ownerAddress": "AFT8...UDfQ",
    "steps": [
        {
            "project": {
                "label": "Invariant",
                "id": "2SgUGxYDczrB6wUzXHPJH65pNhWkEzNMEx3km4xTYUTC"
            },
            "inToken": "So11111111111111111111111111111111111111112",
            "outToken": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
            "inAmount": 0.1,
            "outAmount": 0.000099274,
            "fee": {
                "amount": 0.000001,
                "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
                "percent": 0.0001
            }
        }
    ]
}'
</code></pre>

{% endtab %}
{% endtabs %}

### Response:

#### Fields:

<table><thead><tr><th width="177.5236885968357">Field</th><th width="235">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>transactions</code></td><td>[] <code>TransactionMessage</code></td><td>See <code>TransactionMesasge below</code> below for details.</td></tr><tr><td><code>outAmount</code></td><td>double</td><td>Amount of tokens expected from the swap</td></tr><tr><td><code>outAmountMin</code></td><td>double</td><td>Minimum amount of tokens allowed from swap given slippage</td></tr><tr><td><code>priceImpact</code></td><td><code>PriceImpactV2</code></td><td>Impact of swap upon the pool's liquidity. See <code>PriceImpactV2</code> below for details.</td></tr><tr><td><code>fee</code></td><td>[]<code>Fee</code></td><td>Fee paid to AMM project. See <code>Fee</code> below for details.</td></tr></tbody></table>

`TransactionMessage`

<table><thead><tr><th width="204">Parameter</th><th width="171.2"></th><th width="369">Description</th></tr></thead><tbody><tr><td><code>content</code></td><td>txbase64Payload</td><td>Raw bytes of signed transaction.</td></tr></tbody></table>

`PriceImpactV2`

<table><thead><tr><th width="148.5236885968357">Field</th><th width="150">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>percent</code></td><td>double</td><td>Percentage impact on price.</td></tr><tr><td><code>infinity</code></td><td>string</td><td>Indicates possible infinity values: <code>INF_NOT</code>, <code>INF_POSITIVE</code>, <code>INF_NEGATIVE</code>. Usually <code>INF_NOT</code>.</td></tr></tbody></table>

`Fee`

<table><thead><tr><th width="177.5236885968357">Field</th><th width="150">Type</th><th width="419.58916051319363">Description</th></tr></thead><tbody><tr><td><code>amount</code></td><td>float</td><td>Amount paid to AMM project</td></tr><tr><td><code>mint</code></td><td>string</td><td>Token currency the fee is paid in</td></tr><tr><td><code>percent</code></td><td>float</td><td>Percentage of the swap consumed by the fee</td></tr></tbody></table>

#### Example:

{% tabs %}
{% tab title="JSON" %}

```json
```

{% endtab %}
{% endtabs %}


# Best Performance for Landing Transactions

Guidelines for improving transaction landing speed through priority fees, tips, and optimized submission flow.

## **Optimizing Transaction Performance**

{% hint style="info" %}
For paid tiers, bloXroute automatically enhances transaction propagation using multiple advanced features.
{% endhint %}

To ensure high speed and inclusion rate for singular transactions, follow these guidelines:

### **1. Priority Fee:**

* Add a compute price instruction to improve validator prioritization within the slot.
* Total priority fee is calculated as: `compute unit limit × compute unit price`
* Use the [Priority Fee Stream](/solana/trader-api/api-endpoints/core-endpoints/getpriorityfeestream) to fetch current market recommendations and pair them with a realistic compute unit limit for your transaction.

{% tabs %}
{% tab title="TypeScript" %}

```typescript
const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({ 
  units: 1000000 
});

const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({ 
  microLamports: 1 
});

const transaction = new Transaction()
.add(modifyComputeUnits)
.add(addPriorityFee)
...
  );
```

{% endtab %}

{% tab title="Rust" %}

```rust
let txn = submit_transaction(
  &connection,
  &wallet_signer,
  // Array of instructions: 0: Set Compute Unit Limt, 1: Set Prioritization Fee, 
  // 2: Do something, 3: Do something else
  [ComputeBudgetInstruction::set_compute_unit_limit(1_000_000u32),
  ComputeBudgetInstruction::set_compute_unit_price(1u32),
  ...
)?;
```

{% endtab %}
{% endtabs %}

### **2. Include a Tip Instruction**:

* Ensure your transaction includes a tip for enhanced propagation.
* Larger tips increase the your transactions priority when propagating through our systems.
* Avoid using address lookup tables (ALTs) in your bloXroute tip instruction to avoid potential lookup overhead.

{% tabs %}
{% tab title="Go" %}

```go
import (
	"github.com/gagliardetto/solana-go"
	"github.com/gagliardetto/solana-go/programs/system"
)

const (
	// BloxrouteTipAddress is from here and may fall out of date from time to time. Check our docs:
	// https://docs.bloxroute.com/solana/trader-api-v2/front-running-protection-and-transaction-bundle
	BloxrouteTipAddress = "HWEoBxYs7ssKuudEjzjmpfJVX7Dvi7wescFsVx2L5yoY"
)

// CreateBloxrouteTipTransactionToUseBundles creates a transaction you can use to when using PostSubmitBundle endpoints.
// This transaction should be the LAST transaction in your submission bundle
func CreateBloxrouteTipTransactionToUseBundles(privateKey solana.PrivateKey, tipAmount uint64, recentBlockHash solana.Hash) (*solana.Transaction, error) {
	recipient := solana.MustPublicKeyFromBase58(BloxrouteTipAddress)

	tx, err := solana.NewTransaction([]solana.Instruction{
		system.NewTransferInstruction(tipAmount, privateKey.PublicKey(), recipient).Build()}, recentBlockHash)
	if err != nil {
		return nil, err
	}

	signatures, err := tx.Sign(func(key solana.PublicKey) *solana.PrivateKey {
		if key.Equals(privateKey.PublicKey()) {
			return &privateKey
		}
		return nil
	})
	if err != nil {
		return nil, err
	}

	tx.Signatures = signatures

	return tx, nil
}
```

{% endtab %}

{% tab title="TypeScript" %}

```typescript
import {
    Keypair,
    PublicKey,
    Transaction,
    TransactionInstruction,
    MessageCompiledInstruction,
    VersionedTransaction,
    SystemProgram,
} from "@solana/web3.js"

// check documentation for latest tip wallet, and how to send tip transactions
// https://docs.bloxroute.com/solana/trader-api-v2/front-running-protection-and-transaction-bundle
const TRADER_API_TIP_WALLET = "HWEoBxYs7ssKuudEjzjmpfJVX7Dvi7wescFsVx2L5yoY"

// createTraderAPIMemoInstruction generates a transaction instruction that places a memo in the transaction log
// Having a memo instruction with signals Trader-API usage is required
export function CreateTraderAPITipInstruction(
    senderAddress: PublicKey,
    tipAmount: number
): TransactionInstruction {
    const tipAddress = new PublicKey(TRADER_API_TIP_WALLET)

    return SystemProgram.transfer({
        fromPubkey: senderAddress,
        toPubkey: tipAddress,
        lamports: tipAmount,
    })
}
```

{% endtab %}

{% tab title="Python" %}

```python
from numpy import uint64
from solders import pubkey as pk
from solders import instruction as inst
from solders import transaction as solders_tx
from solders.hash import Hash
from solders.keypair import Keypair
from solders.message import Message
from solders.pubkey import Pubkey
from solders.system_program import transfer, TransferParams
from solders.transaction import Transaction

# as of 2/12/2024, this is the bloxRoute tip wallet... check docs to see latest up to date tip wallet:
# https://docs.bloxroute.com/solana/trader-api-v2/front-running-protection-and-transaction-bundle
BloxrouteTipWallet = pk.Pubkey.from_string(
    "HWEoBxYs7ssKuudEjzjmpfJVX7Dvi7wescFsVx2L5yoY"
)


# create_trader_api_tip_instruction creates a tip instruction to send to bloxRoute. This is used if a user wants to send
# bundles or wants front running protection. If using bloXroute API, this instruction must be included in the last
# transaction sent to the API
def create_trader_api_tip_instruction(
    tip_amount: uint64,
    sender_address: Pubkey,
) -> inst.Instruction:
    instruction = transfer(
        TransferParams(
            from_pubkey=sender_address,
            to_pubkey=BloxrouteTipWallet,
            lamports=int(tip_amount),
        )
    )

    return instruction
```

{% endtab %}
{% endtabs %}

If your language of choice is not included above, you can create an instruction referencing our [tip-receiving addresses](/solana/trader-api/introduction/tip-and-tipping-addresses)

### **3. Submission Endpoint Configuration**:

* Use the [submit endpoint](/solana/trader-api/api-endpoints/transaction-submisson/submit)
* Disable TLS to prevent encryption overhead
* Use the following parameters for best performance:
  * `frontRunningProtection: false`
  * `useStakedRPCs: true`
  * `submitProtection: SP_LOW`

{% tabs %}
{% tab title="HTTP" %}

<pre class="language-bash"><code class="lang-bash"># USE HTTP, NOT HTTPS, FOR THE BEST PERFORMANCE

<strong>curl -X 'POST' \
</strong>  'http://ny.solana.dex.blxrbdn.com/api/v2/submit' \
  -header "Authorization: $AUTH_HEADER" \
  -d '{
 "transaction": {"content": "AjF+Br2CUIENJqV1...BAAABCQ=="},
 "frontRunningProtection": false,
 "useStakedRPCs": true,
 "submitProtection": SP_LOW
}'
</code></pre>

{% endtab %}

{% tab title="WebSocket" %}

```bash
wscat -c ws://ny.solana.dex.blxrbdn.com/ws --execute '{"jsonrpc": "2.0", "id": 1, "method": "PostSubmit", "params": {
  "transaction": {"content": "AjF+Br2CU...AMBAAABCQ=="},
   "frontRunningProtection": false,
   "useStakedRPCs": true,
   "submitProtection": SP_LOW
}}'
```

{% endtab %}

{% tab title="Python" %}

```python
# submitting raw transactions
await api.post_submit(
    post_submit_request=proto.PostSubmitRequest(
        transaction=proto.TransactionMessage(content=signed_tx),
        front_running_protection=False,
        use_staked_RPCs=True,
        submit_protection=SP_LOW
)

```

{% endtab %}

{% tab title="TypeScript" %}

```typescript
await provider.postSubmit({
    transaction: { content: encodedTxn, isCleanup: false },
    frontRunningProtection: false,
    useStakedRPCs: true,
    submitProtection: SP_LOW
})
```

{% endtab %}
{% endtabs %}

### **4. Send to the Right Regions**

We recommend that users at minimum submit their transactions to **both** the global edge endpoint **and** your closest regional endpoint. Send to all regions in parallel to achieve optimal landing speeds.

#### Global endpoint (recommended, submit-only)

Our global edge endpoint will automatically route your transaction submissions to the closest Trader API transaction-handling instances. This reduces end-to-end-latency and improves landing performance. This is especially for users who are not co-located to common bare-metal provider regional hubs, such as residential or AWS users.

How to use

* **Primary target:** Point your Trader API base URL/host to the Global endpoint
* **Parallelization**: Also send the same transaction to your nearest regional endpoint(s) in parallel to maximize time-to-first-land.
* **No other config changes needed.**
* **Global supports `http, https, ws, wss, and gRPC`**

| Region    | Host                            |
| --------- | ------------------------------- |
| 🌎 Global | `global.solana.dex.blxrbdn.com` |

{% hint style="success" %}
To ensure accurate routing, use a public DNS resolver that supports EDNS Client Subnet (ECS), such as Google DNS (8.8.8.8) or OpenDNS (208.67.222.222 / 208.67.220.220). Resolvers without ECS support (e.g., Cloudflare) may obscure the client ASN, leading to suboptimal routing.
{% endhint %}

#### Choose your closest region

For consistent best performance, pair the Global endpoint with the closest region to where your bot runs.

* **Find regions & hosts:** See the full, always-updated list [here](/solana/trader-api/introduction/regions)
* **Pick the nearest region:** Choose the region with the lowest RTT from your bot host. If you’re already \~2 ms from a Trader API region, the Global endpoint will typically select it—and parallel sends ensure you still catch the fastest path.
* **Practical tip:** Measure latency from the same machine that runs your bot.

Latency check examples

```sh
# Quick TCP connect timing (good proxy for RTT)
curl -s -o /dev/null -w "connect:%{time_connect}\n" http://<region-host>

# ICMP ping (if enabled on your network)
ping -c 5 <region-host>
```

Parallel submit pattern (pseudo-code)

{% tabs %}
{% tab title="HTTP" %}

```
# Send once to Global, and in parallel to your nearest region(s)
targets = [
  "http://global.solana.dex.blxrbdn.com", # Global Endpoint HTTP version
  "http://<your-nearest-region-host>"  # from the Regions page above
]


# Fire in parallel; accept the first success
first_ok = race([submit_tx(t, tx_bytes) for t in targets])
return first_ok
```

{% endtab %}

{% tab title="HTTPS" %}

```
# HTTPS – Global over HTTPS, region over HTTP
targets = [
  "https://global.solana.dex.blxrbdn.com", # Global HTTPS endpoint
  "https://<your-nearest-region-host>",     # from the Regions page above
]

first_ok = race([submit_tx(t, tx_bytes) for t in targets])
return first_ok

```

{% endtab %}

{% tab title="wscat (WSS)" %}

```
# WSS – Global over WSS, region over HTTP (REST)
targets = [
  "wss://global.solana.dex.blxrbdn.com/ws", # Global secure WebSocket endpoint
  "wss://<your-nearest-region-host>",     # from the Regions page above
]

first_ok = race([submit_tx(t, tx_bytes) for t in targets])
return first_ok

```

{% endtab %}

{% tab title="wscat (WS)" %}

```
# WS – Global over WS, region over HTTP (REST)
targets = [
  "ws://global.solana.dex.blxrbdn.com/ws", # Global WebSocket endpoint
  "ws://<your-nearest-region-host>",     # from the Regions page above
]

first_ok = race([submit_tx(t, tx_bytes) for t in targets])
return first_ok

```

{% endtab %}

{% tab title="gRPC" %}

```
# gRPC – Global over gRPC, region over HTTP (REST)
targets = [
  "global.solana.dex.blxrbdn.com", # Global gRPC endpoint
  "<your-nearest-region-host>",         # from the Regions page above
]

first_ok = race([submit_tx(target, tx_bytes) for target in targets])
return first_ok
```

{% endtab %}
{% endtabs %}

Guidance

* Always include **Global** in your send set.
* Add **1–2 closest regions** in parallel for resilience and the best possible landing time.
* Keep your region list current using the Regions page linked above.

### **5. Use Long-Lived connections with Keep-Alive**

Avoid opening a new connection for every submission. Reusing warm HTTP, WebSocket, or gRPC connections reduces TCP/TLS handshake overhead and removes connection setup latency from the critical path.

* For **HTTP/HTTPS**, use a client with connection pooling and keep-alive enabled so requests reuse existing connections. Trader API uses a server timeout of about **60 seconds**, so clients should send keep-alive requests at a higher interval (we recommend every 30-seconds) to ensure their connections stay warm.
* For **WebSocket**, maintain a persistent session instead of reconnecting for each submission. If your client may sit idle for extended periods, send periodic heartbeats or reconnect proactively before the next latency-sensitive send.
* For **gRPC**, use a long-lived channel and enable client keepalive. Trader API explicitly supports keepalive without active streams and is configured with **server** keepalive parameters of roughly 20-seconds keep-alive time and 5s timeout.
* For **QUIC**, keep a persistent QUIC session open and reuse it for multiple submissions instead of reconnecting for every transaction. Our [QUIC client SDK](/solana/trader-api/quick-start/quic-sdk) is built around this model and supports submission over bidirectional streams, unidirectional streams, and datagrams. Reusing a warm QUIC session avoids repeated TLS and connection setup overhead on latency-sensitive sends.

As a general rule, your submission path should already be connected **before** the transaction is ready to send.

### 6. Rotate Tipping Wallets

Because Solana transactions lock writable accounts during execution, repeatedly tipping the same wallet can create unnecessary contention under heavy flow. Rotating across multiple bloXroute tip wallets helps distribute that load and can improve landing performance.

If your order flow is especially high frequency and public tip wallets may still become a point of contention, reach out to our support team to have private tipping wallets created and enabled for your account.

### 7. Choosing the Right Protocol

For most users, HTTP, WebSocket, or gRPC are sufficient and easier to integrate. Users submitting over HTTP or HTTPS should prefer the [submit-plain-text](/solana/trader-api/api-endpoints/transaction-submisson/submit-plain-text) endpoint to minimize unnecessary request overhead on those transports. For users optimizing for absolute minimum submission latency, QUIC is the preferred choice.

Instead of sending JSON or protobuf-framed API requests through a general-purpose interface, QUIC submission **sends raw signed transaction bytes** over a transport designed specifically for low-latency delivery, reducing serialization, framing, and request-processing overhead and gives performance-sensitive clients the leanest submission path supported by Trader API.

Refer to our [QUIC SDK](/solana/trader-api/quick-start/quic-sdk) for learning how to submit transactions over QUIC.

***

### Commonly Used Submission Modes.

This table summarizes different submission modes by different parameter configurations.

<table><thead><tr><th width="135.78515625">Mode - Nickname</th><th width="191">Parameter config</th><th width="128">Minimum Tip</th><th>Description</th></tr></thead><tbody><tr><td>Fastest mode</td><td><code>frontRunningProtection: False,</code><br><code>useStakedRPCs: True, submitProtection: SP_LOW</code></td><td>0.001 SOL</td><td><ul><li><strong>Max speed</strong> by leveraging staked RPC connections.</li><li>Ideal for time-sensitive transactions.</li></ul></td></tr><tr><td>MEV-protected mode</td><td><code>frontRunningProtection: True, submitProtection: SP_MEDIUM</code></td><td>0.001 SOL</td><td><ul><li>Protects against MEV attacks based on the bloXroute Malicious Leader detection system.</li><li>Slightly slower if consecutive flagged malicious validators are present.</li><li><code>submitProtection: SP_HIGH</code> can be used to further the MEV protection level.</li></ul></td></tr><tr><td>Transaction Revert Protection</td><td><code>frontRunningProtection: True, reverProtection: True</code></td><td>0.001 SOL</td><td><ul><li>Transactions will only be sent to the Jito block engine and the Paladin leader.</li><li>Failed transactions won't land on the chain.</li><li>This method is the slowest method as no public RPC propagation channels will be used. If consecutive non-Jito nor non-Paladin validators are present, it could be even slower.</li></ul></td></tr></tbody></table>


# Support


# API Health

### Health Dashboard

You can check the status of all our API servers at:

[**https://portal.bloxroute.com/sol/health**](https://portal.bloxroute.com/sol/health)

This portal displays the health status of all endpoints across all regions and services.

### Individual Endpoint Health Checks

For programmatic access or specific endpoint monitoring, you can use the individual health URLs:

**General endpoints:**

```
https://<region>.solana.dex.blxrbdn.com/health
```

*(Replace `<region>` with your connected region)*

**Pump.fun-specific endpoints:**

* UK: `https://pump-uk.solana.dex.blxrbdn.com/health`
* NY: `https://pump-ny.solana.dex.blxrbdn.com/health`

For a full list of supported regions, refer to the [Regions](/solana/trader-api/introduction/regions) section.


# Changelog

Find the latest version and historical changes information here.

### Current Major Version <a href="#current-major-version" id="current-major-version"></a>

<details>

<summary>Version v2.0 (07/26/2023)</summary>

Major updates. All endpoints are now grouped by project. See documentation for details.

Solana Trader API v1 will be continuously supported until further notice.

</details>

### Historical Version <a href="#historical-version" id="historical-version"></a>

<details>

<summary>Version v1.8 (05/22/2023)</summary>

Minor updates.

New:

* Adding new [Drift.trade](https://www.drift.trade/) endpoints:
  * POST Delete user

Updates:

* Handle dynamic Jupiter accounts
* Update Drift SDK
* Include slot information

</details>

<details>

<summary>Version v1.7 (05/15/2023)</summary>

Some updates and bug fixing.

New:

* Adding new [Drift.trade](https://www.drift.trade/) endpoints:
  * Get market depth.

Updates:

* API performance improvement.

Bugs:

* Fixed drift perp orderbook response sorting issue and limit issue.

</details>

<details>

<summary>Version v1.6 (03/16/2023)</summary>

We have made some major updates and introduced a new DEX project during this new version. Please see below for details.

New:

* Support the most fundamental features on this new perpetual DEX project, [Drift.trade](https://www.drift.trade/):
  * Market data, GET/ Stream Orderbook.
  * Managing collateral: deposit/ withdrawal.
  * Get position status.
  * Open/ Close position.
  * Cancel open order.

Updates:

* Jupiter version update to v4. This will fix the "bad" quote issue.
* Support multiple-step route swap transactions.
* Stabilize data stream overload issue.
* Add support for versioned transactions.

Bugs:

* Fixed data stream overflow which led to the downgrade of Solana nodes.
* Fixed recent block hash issue.

</details>

<details>

<summary>Version v1.5 (02/02/2023)</summary>

New:

* Adding support for trading unknown pool address swaps.

Bugs:

* Fixing quote handling bug.

</details>

<details>

<summary>Version v1.4 (01/11/2023)</summary>

New:

* Update Jupiter V2 to V3.
* Full support to **Openbook**.

Bugs:

* Fix "inAmount" and "outAmount", "inToken", "outToken" in swap stream.
* Fix Raydium swap bug.
* Fix Price streaming bug.

</details>

<details>

<summary>Version v1.3 (12/13/2022)</summary>

* A new parameter and/or field "**`project`**" has been added to most of the orderbook-based endpoints, in order to support the new Serum fork, **Openbook**.
* We have updated our TypeScript SDK to support AMM-related endpoints.
* Bugs fix.

**New endpoints:**

* Create route swap (Raydium)

</details>

<details>

<summary>Version v1.2 (11/15/2022)</summary>

Added two new streams: price and swaps. Contains breaking changes to transaction submission mechanisms, which enables submitting batches of transactions. Transactions will also now be propagated to all nodes in the BDN for redundancy.

This version contains experimental support for Jupiter in the `Quotes` endpoint and `Prices` stream endpoint. Note that the endpoints in Trader API are powered by Geyser, which is faster but will also result in subtly different state representations than what you'd normally get over Solana RPC. We welcome any feedback you have on these results.

**New endpoints:**

**API Streams**

* Prices
* Swaps

</details>

<details>

<summary>Version v1.1 (10/10/2022)</summary>

We added multiple new endpoints to support Raydium (AMM project) and Jupiter (AMM aggregator). Renamed the Serum API to Solana Trader API. Check below for details.

**New endpoints:**

**Market API**

* GET Price
* GET Pools
* GET Quotes

**Trade API**

* POST Create Swap Transaction (Raydium)
* POST Create Swap Transaction (Jupiter)

**API Streams**

* Pool Reserves

</details>

<details>

<summary>Version v1.0 (08/30/2022)</summary>

This is our first release, supporting the essential Serum trading functions. Check below for supported endpoints and feeds.

An authentication header is now required to access our API tool. Please refer to Quick Start for more details about getting a header. (Added on 08/10/2022)

**Market API**

* GET Markets
* GET Orderbook
* GET Tickers (Limited)

**Trade API**

* GET OpenOrders
* GET Unsettled
* POST CreateSettleTransaction
* POST CreateOrderTransaction
* POST CreateCancelOrderTransaction
* POST CreateCancelOrderTransactionByClientId
* POST SubmitSignedTransaction
* POST CancelAll (Added on 08/10/2022)
* POST Replace (Added on 08/10/2022)
* POST ReplaceByClientID (Added on 08/10/2022)

**API Streams**

* Orderbook (Updated on 07/12/2022)
* Tickers
* Trades

**System API**

* GET API Server Time

</details>


# Contact us

Have a question? We’re happy to help!

The best place for support is through our [**Discord**](https://discord.com/invite/mB95H7s).

Customers with Enterprise plans and above are eligible for a dedicated support group. Please direct message someone from the team with your Account email and Account ID and they will setup a group for you.

The team is active Monday - Friday 9am - 6pm EST & available on Weekends in emergency circumstances.

You can also email [**support@bloxroute.com**](mailto:support@bloxroute.com).


# Wiki


# Terms & Concepts

### Trading Type

* [The Central Limit Order Book (CLOB)](#the-central-limit-order-book-clob)
  * [Spot Market / Spot Trading](#spot-market-spot-trading)
* [Automated Market Maker (AMM)](#automated-market-maker-amm)
* [Derivatives](#derivatives)
  * [Crypto futures, dated futures](#crypto-futures-dated-futures)
  * [Perpetual Contracts](#perpetual-contracts)

### **Projects**

| Spot                  | AMM                 | Derivatives - Future |
| --------------------- | ------------------- | -------------------- |
| [Openbook](#openbook) | [Raydium](#raydium) | Drift.trade (perp)   |
| Drift.trade (margin)  | Jupiter             |                      |

### Endpoints

***

#### Fee Transaction Priority

Additional fees were introduced to transactions as a method to allow users to bid for priority for their transactions in the leader's queue. To read more about this: <https://docs.solana.com/proposals/fee_transaction_priority>

#### The Central Limit Order Book (CLOB)

Central limit order book (CLOB) is a trade execution model that matches orders from buyers and sellers based on a set of rules. The difference between the highest bid and the lowest ask is called the spread. Markets with high liquidity have much smaller spreads, since the depth of demand and supply at each price level is high.

#### Spot Market / Spot Trading

Spot trading is a simple concept in which traders buy crypto assets and wait for them to rise in value. For example, when trader Sue buys a position in SOL, she hopes that she will be able to sell it for profit at a later stage.

In spot trading, you buy the asset with your own money. This means you can only buy as much as you can afford, and nothing more. For this reason, it is considered relatively safer than other trading markets. In the worst-case scenario, you lose all the money you invested. Other trading methods, such as margin trading, can cost you even more. In this market, even when the token becomes worthless, you will never be forced to sell.

#### Derivatives

A derivative is a financial contract between two or more parties based on the future price of an underlying asset.

Financial derivatives are discussed a lot when it comes to the crypto industry, especially concerning futures contracts for Bitcoin or altcoins. It is worth noting that the derivative is one of the oldest forms of a financial contract that exists on the market. The history of this type of deal can be traced to antiquity: In medieval times, derivatives were used to facilitate trades among merchants who traded all over Europe and participated in periodical fairs, an early form of markets in the Middle Ages.

Derivatives have evolved for centuries to become one of the most popular financial tools. Nowadays, a derivative is understood as a security that derives its value from an underlying asset or benchmark. The contract can be signed between two or more parties that want to buy or sell a particular asset for a specific price in the future. The value of the contract will therefore be determined by changes or fluctuations in the price of the benchmark it derives its value from.

#### Crypto futures, dated futures

Futures involve an agreement between a buyer and a seller to sell an asset in the future. The specific date and amount are also agreed on ahead of time. Contract details may vary, but the terms are usually similar.

Futures are a popular type of crypto derivative commonly used by institutional investors. Data from futures are typically used to predict future price movements and market sentiment.

Traders may either gain or lose depending on future price changes.

#### Perpetual Contracts

A perpetual contract, also called a perpetual futures contract or perpetual swap, is the most prolific type of crypto derivative, especially among day traders. In traditional finance, the equivalent of a perpetual contract would be contracted for difference (CFD).

The main difference between perpetual contracts vs. futures and options is that perpetual contracts do not have an expiry date. Positions can be kept for as long as the trader wants, provided they pay holding fees, called the funding rate. The account must also contain a minimum amount, called the margin.

Underlying assets typically change in price, which means that the difference between the index price and the price of perpetual futures contracts is typically huge. If, for example, the price of the perpetual contract is higher than the index, those who chose to “go long” would normally pay the funding rate to cover the price difference.

#### Automated Market Maker (AMM)

Unlike an order book that specifies prices at which buyers and sellers wish to trade, an AMM exchange aggregates liquidity for both sides of a trading pair into a pool. The AMM pool then determines a single market price according to a deterministic algorithm. The price formula is usually based on the pool’s current liquidity, or in other words the availability of an asset in the pool.

#### **Openbook**

Openbook is a fork of Serum v3, on a newly deployed program ID, deployed by a multi-sig. The reason why fork Serum code is that FTX had access to Serum and funds could be stolen by the "hacker", a forked program with multisig control on [Realms](https://app.realms.today/dao/OPENBOOK).

#### Raydium

Raydium is an automated market maker (AMM) built on the Solana blockchain which leverages a central limit order book to enable lightning-fast trades, shared liquidity and new features for earning yield.


# Resources

#### Documentation:

* bloXroute Documentation: <https://docs.bloxroute.com/>
* Solana RPC Reference: [JSON RPC API | Solana Docs](https://docs.solana.com/developing/clients/jsonrpc-api#getaccountinfo)
* Jupiter Documentation: <https://docs.jup.ag/>
* Raydium Documentation: <https://raydium.gitbook.io/raydium/>

#### Tools

* Solana Scan: [Explorer | Solana](https://explorer.solana.com/)

#### GitHub Repositories

* bloXroute Trader API SDK Github:
  * Go <https://github.com/bloXroute-Labs/solana-trader-client-go>
  * Python <https://github.com/bloXroute-Labs/solana-trader-client-python>
  * TypeScript <https://github.com/bloXroute-Labs/solana-trader-client-ts>


# FAQ

### Most asked questions:

* [**Q: What do I have to do before I start trading on a DEX?**](#q-what-do-i-have-to-do-before-i-start-trading-on-a-dex-1)
* [**Q: What is an open orders account? Why should I include my open orders account in the request?**](#q-what-is-an-open-orders-account-why-should-i-include-my-open-orders-account-in-the-request-1)
* [**Q: What are the benefits of sending transactions through bloXroute Solana Trader API?**](#q-what-are-the-benefits-of-sending-transactions-through-bloxroute-solana-trader-api-1)
* [**Q: My funds disappeared after the order was filled or canceled. Where is my money?**](#q-my-funds-disappeared-after-the-order-was-filled-or-canceled.-where-is-my-money-1)
* [**Q: I'm always getting** `{"code":5, "message":"Not Found", "details":[]}` **from HTTP endpoints. Why doesn't this work?**](#q-im-always-getting-code-5-message-not-found-details-from-http-endpoints.-why-doesnt-this-work)
* [**Q: Why does my transaction always fail in a simulation?**](#q-why-does-my-transaction-always-fail-in-a-simulation)

### Details

#### Q: What do I have to do before I start trading on a DEX?

A: You need a Solana wallet ([Phantom](https://phantom.app/) or [Solflare](https://solflare.com/) are good options) and enough SOL for transaction fees. Try to keep your balance above 0.1 SOL at all times.

#### Q: What is an open orders account? Why should I include my open orders account in the request?

A: In order to interact with the Serum DEX, users must create an intermediary open orders account. This accounts stores funds used for placing or filling orders and tracks all of a given user's open orders. Technically, you can have multiple open order accounts for any target market. Our API looks up your open orders accounts (identified by your Solana address) and uses the first returned account by default. **You should specify your account to skip this extra step, which can be time-consuming.**

#### **Q: What are the benefits of sending transactions through bloXroute Solana Trader API?**

A: How is our Solana API faster than any other Solana RPC node out there? All transactions submitted through our Solana Trader API utilize the following technologies to get the best performance.\
**bloXroute Solana BDN**\
bloXroute Solana BDN is a network of servers optimized for sending data fast on blockchains. It offers reduced latency shred propagation, working alongside the existing Turbine protocol. In early stage testing, we observed the following mertrics：

* Listen faster / React faster - 30/50ms advantage
* Transaction routes to leader via BDN - 5-30ms speed advantage

Learn more about [Solana BDN here](https://bloxroutelabs.medium.com/bloxroute-releases-solana-bdn-94a664c6ee64).\
**Marinade integration**\
All Solana Trader API transactions are routed through Marinade mTransaction. mTransaction provides the service of sending the Solana transaction on behalf of the staked nodes and gets stake weighted QoS priority (Validators running an mTransaction client have 11M SOL in total.).

#### Q: My funds disappeared after the order was filled or canceled. Where is my money?

A: Your funds are safe. All trades done on the orderbook-based DEX uses an intermediary account (the open orders account, as mentioned above) for each pair. Filled or canceled funds must to be settled back into your wallet. You can use [**`GET Unsettled`**](broken://pages/RDGdU3OJ81Hy3ozEoF3Y) to check your balance and [**`POST Settle`**](broken://pages/heVl1NH06eKPbghM8AD3) to move funds to your wallet.

#### **Q: I'm always getting** `{"code":5, "message":"Not Found", "details":[]}` **from HTTP endpoints. Why doesn't this work?**

A: Make sure you're not including an `/` in your market name. For example, `SOL/USDC` must be specified as `SOLUSDC`, `SOL:USDC` or `SOL-USDC` in HTTP endpoints.

#### **Q: Why does my transaction always fail in a simulation?**

A: Before we submit a transaction to the network, we simulate the transaction execution and don't send it if execution fails to save you the transaction fee. Sometimes this behavior is not desirable. For example, if you are writing a high frequency application, the Solana transaction simulation might lag too far behind for your purposes. You might also want to see the failed transaction in an explorer like [SolScan](https://solscan.io/) to get a visual sense of what's happening. In those cases you can set the `skipPreflight` flag to be `false` to skip the simulation and send the transaction directly.

Debugging actual execution failures can be fairly complicated. We have work planned to try and make these error messages more helpful but you'll have to take some manual steps in the meantime. Error messages are specific to the relevant instruction's program, so you'll most likely want to set the `skipPreflight` flag to see the transaction in SolScan and the exact instruction/program that failed, after which you should search for the error definition file for the failed program or the line of code in the program that failed.

Here are some useful links:

* [SPL Token Program Errors](https://github.com/solana-labs/solana-program-library/blob/aef1e239b37f5547c2c86390f204da41b0965adb/token/program/src/error.rs#L9)
* [Serum Program Errors](https://github.com/project-serum/serum-dex/blob/4bddbbc3649d6257dc363be579a31b8fd9210677/dex/src/error.rs#L37)
* [Serum Program File](https://github.com/project-serum/serum-dex/blob/4bddbbc3649d6257dc363be579a31b8fd9210677/dex/src/state.rs)

Some examples:

`"Transaction simulation failed: Error processing Instruction 0: custom program error: 0x1"`

This typically indicates insufficient funds (see first link). [SolScan example](https://solscan.io/tx/2stRXxoLYcg6eP8EC8wEH6q7evqkYxzQSSLsSvfkfbccDPRPQgkADvBxydKy1ejbbWShwt32wDdaAnrijgN87mGt)

`"Transaction simulation failed: Error processing Instruction 0: custom program error: 0x29"`

When canceling orders this indicates that the client ID is not found (see second link). [SolScan example](https://solscan.io/tx/4hLMmhjG3kxB8k6G1VtssmGcGMVYQqcKTbCC1MAddW53obj6onAya9LBCyeLnGRFQjvqBuaRukyHzqqKHkyCjYWM)

`"Transaction simulation failed: Error processing Instruction 1: custom program error: 0x10005d3"`

This one's more complicated –– this longer error code indicates that a lookup is required from the program. You'll want to take off the leading part to get `0x5d3`, which translates to line 1491 in the program code (see third link).

```rust
    declare_validated_account_wrapper!(TokenAccount, |account: &AccountInfo| {
        check_assert_eq!(*account.owner, spl_token::ID)?;  // <- this line
        let data = account.try_borrow_data()?;
        check_assert_eq!(data.len(), spl_token::state::Account::LEN)?;

        let is_initialized = data[0x6c];
        check_assert_eq!(is_initialized, 1u8)?;
        Ok(())
    });
```

This indicates that the account owner was specified incorrectly. [SolScan example](https://solscan.io/tx/4jbF1f31CBxQ58QpaWDfvhkUxWGWBJktpuE39S2bnpxf8jX4Trn8qTFcfFyopctURm8tchK7LV8GkQf8iqSQn5Su)


# Optimized Feed Relay (OFR)

The bloXroute Optimized Feed Relay (OFR), pronounced "Offer", delivers shreds with exceptional speed, offering latency improvements of 30-50+ ms when compared to default Turbine propagation . The OFR provides significant benefits to all nodes, including Staked Validators and RPC nodes, Trading Bots, HFTs, Market Makers & DeFi Traders.

Chains supported: SOL

### Benefits of Connecting to the OFR

* **Faster Geyser Notifications for Traders**: Traders using a local node with the Geyser plugin will experience significantly faster notifications, improving decision-making and responsiveness.
* **Increased APY for Validators**: Validators can expect higher APY due to reduced forks and improved voting efficiency.
* **Enhanced Endpoints for RPC Providers**: RPC providers will deliver faster, more reliable endpoints to their users, improving overall service quality.

### How to Connect

Leverage OFR by [connecting](/solana/optimized-feed-relay/shred-stream) to bloXroute's Optimized Feed Relay (OFR) through Shred Stream. Once connected, the Stream enables your local client (identified with ip and port) to efficiently receive shreds across the OFR, maximizing performance.

### Stay Updated

For the latest information about the OFR, join our [Discord community](https://discordapp.com/invite/mB95H7s).


# Shred Stream

### Overview

The **Shred Stream** provides real-time access to Solana block shreds as they propagate through bloXroute’s Optimized Feed Relay (OFR).\
This is the **earliest point** at which block data becomes available - making it essential for low-latency trading, order flow analysis, and block reconstruction.

By subscribing to the Shred Stream, users receive raw shreds directly from bloXroute’s OFR infrastructure in the selected region.

### Getting Started

1. **Navigate to&#x20;*****Account*****&#x20;on the bloXroute portal**

* Log in to your bloXroute
* On the top right of the portal, click on [***Account***](https://portal.bloxroute.com/details)

<figure><img src="/files/1PqOuf9eAL0kyhXThGAG" alt=""><figcaption></figcaption></figure>

2. **Create a Subscription**

* Scroll down to ***Shred Stream***

<figure><img src="/files/3UOoem61P3EWPUf4B7UQ" alt=""><figcaption></figcaption></figure>

* ***Create New Shred Stream***, select the **region** closest to your machine:

<figure><img src="/files/tsIjUxe6KXk40ilpVTy8" alt="" width="563"><figcaption></figcaption></figure>

Please see the **Available Regions** section below for more details on supported locations.

* Enter your receiving endpoint (IP:Port) where the UDP packets (i.e. shreds) should be streamed

{% hint style="danger" %}
Ensure that your configured port is open to receive inbound **UDP** traffic
{% endhint %}

* Click **Confirm** to add your stream

{% hint style="danger" %}
Note: Please note that domain names are not allowed - only ip v4 format is supported (i.e. not ip v6)
{% endhint %}

3. **Monitor Active Streams**

* The dashboard will show your current Shred Stream subscriptions, region, and creation time
* You can delete a stream at any time<br>

  <figure><img src="/files/J22nfIMhMaAN8jLDTiNJ" alt=""><figcaption></figcaption></figure>

You will now be able to receive shreds by listening to the port that you configured.

### Available regions

For Solana, we would recommend <https://www.validators.app/> as a solid external source for regional and data center insights about Solana validators. On our side, we track the data centers with the higher stake closely.

| Available regions | Bare-metal Provider                |
| ----------------- | ---------------------------------- |
| 🇩🇪 Frankfurt    | Teraswitch (FRA2), Latitude (FRA2) |
| 🇳🇱 Amsterdam    | Teraswitch (AMS2)                  |
| 🇯🇵 Tokyo        | Teraswitch (TKY1)                  |
| 🇺🇸 New York     | Teraswitch (EWR2), Latitude (NYC)  |
| 🇸🇬 Singapore    | Latitude (SGP)                     |


# Transaction Streamer

The `StreamTransactions` method is a gRPC-based stream that returns all transactions on the Solana network in real-time. It supports optional filtering by account addresses.

This method is ideal for users who want access to all observed transactions (or transactions involving specific accounts) for monitoring, analytics, or MEV use cases.

{% hint style="info" %}
The Transaction Streamer can be purchased either as an individual service or part of Elite/Ultra bundle.
{% endhint %}

## Available Endpoints

Select the DNS that corresponds to the region closest to you:

* Amsterdam: `amsterdam.solana-txs.blxrbdn.com:50051`
* Frankfurt: `frankfurt.solana-txs.blxrbdn.com:50051`
* New York: `ny.solana-txs.blxrbdn.com:50051`
* Tokyo: `tokyo.solana-txs.blxrbdn.com:50051`

{% hint style="success" %}
To ensure accurate routing, use a public DNS resolver that supports EDNS Client Subnet (ECS), such as Google DNS (8.8.8.8) or OpenDNS (208.67.222.222 / 208.67.220.220). Resolvers without ECS support (e.g., Cloudflare) may obscure the client ASN, leading to suboptimal routing.
{% endhint %}

## Request

The `StreamTransactions` method is invoked over gRPC using the proto definition available in the [solana-tx-streamer-proto GitHub repository](https://github.com/bloXroute-Labs/solana-tx-streamer-proto).

* **Endpoint:** [select DNS based on region](#available-endpoints)
* **Protocol:** gRPC
* **Encryption:** plaintext
* **Authorization:** Required — pass an `authorization` header

### Parameters

| Name     | Type      | Required | Description                                                                                                                                                                |
| -------- | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| accounts | string\[] | No       | Optional list of Solana account addresses (base58). If provided, the stream returns only transactions involving these accounts. If omitted, all transactions are streamed. |

### Headers

<table><thead><tr><th>Header</th><th width="215.654541015625">Value</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>authorization</td><td><code>&#x3C;AUTH_HEADER></code></td><td>Yes</td><td>Authorization header</td></tr></tbody></table>

### Example Request, with account filtering

{% tabs %}
{% tab title="grpcurl" %}

```bash
grpcurl \
  -H 'authorization: <AUTH_HEADER>' \
  -proto proto/tx_streamer.proto \
  -d '{
    "accounts": [
      "srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX",
      "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8",
      "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1"
    ]
  }' \
  -plaintext \
  frankfurt.solana-txs.blxrbdn.com:50051 \
  tx_streamer.TxStreamerService/StreamTransactions
```

{% endtab %}
{% endtabs %}

### Example Request, without account filtering (receive all transactions)

```bash
grpcurl \
  -H 'authorization: <AUTH_HEADER>' \
  -proto proto/tx_streamer.proto \
  -plaintext \
  frankfurt.solana-txs.blxrbdn.com:50051 \
  tx_streamer.TxStreamerService/StreamTransactions
```

### Response

| Field Name         | Description                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `signature`        | Transaction signature                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `data`             | Raw transaction bytes in base 64 encoding format                                                                                                                                                                                                                                                                                                                                                                                             |
| `slot`             | Slot number                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `unverified_match` | <p>Boolean flag indicating that the streamer <strong>can</strong> <strong>not precisely confirm</strong> this message matches the provided filter (e.g. <code>accounts</code>).<br>If <code>true</code>, the transaction might still meet the filter condition, but the streamer cannot yet verify it due to incomplete data or timing.<br>If <code>false</code>, the streamer has confirmed the transaction meets the filter condition.</p> |
| `number`           | Index position of this transaction within the block.                                                                                                                                                                                                                                                                                                                                                                                         |

The response is a stream of raw Solana transactions serialized according to the `.proto` schema. These can be parsed using the Solana SDK or other compatible decoding tools. More information about the response message format can be found in the [`tx_streamer.proto`](https://github.com/bloXroute-Labs/solana-tx-streamer-proto/blob/develop/proto/tx_streamer.proto) file.


# Troubleshooting

If you are experiencing errors, need to report an issue, or want to ask a question, please refer to our [Solana BDN dedicated Discord channel](https://discord.gg/gUBHG82HKP).


# Overview

**BackRunMe** is bloXroute’s backrun arbitrage system that enables MEV searchers to extract value from private transactions submitted through bloXroute’s RPC services. These transactions remain hidden from the public mempool. If a transaction creates an arbitrage opportunity, the sender may receive a rebate from the resulting profit.

The program is available on the following chains: ETH, BSC, Base, X Layer, Hyperliquid, and Monad.

### **How It Works**

* A private transaction is submitted through bloXroute — either via our RPC service or by using the private transaction or bundle submission endpoints.
* If the transaction creates an arbitrage opportunity, it is forwarded (anonymized) to MEV searchers via the `arbOnlyMEV` stream.
* Searchers submit backrun-only bundles that reference the private transaction.
* If successful, profits are distributed among the transaction sender, the searcher, block proposer, and bloXroute.

### **How to Participate**

BackRunMe supports two user types:

#### **Private Transaction Senders**

Participation is seamless when using bloXroute’s RPC services. Transactions are automatically protected and eligible for rebates when they create MEV opportunities.\
If submitting via bundle or private transaction, include:

* `enable_backrunme = true`
* `backrunme_reward_address = <your address>`

#### **MEV Searchers**

To get access to the arbOnlyMEV stream and submit backrun-only bundles, [Contact Us](/introduction/contact-us) to request enrollment.


# arbOnlyMEV Stream

The `arbOnlyMEV` stream provides real-time access to private transactions that carry arbitrage potential. These transactions are submitted privately via bloXroute’s and are not visible in the public mempool or standard transaction feeds.

Searchers use this stream to identify MEV opportunities and submit backrun-only bundles.

Service available via Cloud API only.

## **Stream Endpoint**

* **Method**: `arbOnlyMEV`
* **Endpoint**: `backrunme.blxrbdn.com`

### Parameters

| **`include`** | Fields to include in the transaction stream. | **`transactions`** |
| ------------- | -------------------------------------------- | ------------------ |

### **Examples**

{% tabs %}
{% tab title="wscat" %}

```bash
wscat -c wss://backrunme.blxrbdn.com/ws --no-check --header "Authorization: <YOUR-AUTHORIZATION-HEADER>"
> {"id": 1, "method": "subscribe", "params": ["arbOnlyMEV", {"include": ["transactions"]}]}
< ......
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
var fs = require('fs');
const WebSocket = require('ws');

const ws = new WebSocket(
  "wss://backrunme.blxrbdn.com/ws", 
  {
    headers: { 
      "Authorization" : <YOUR-AUTHORIZATION-HEADER> 
    },
    rejectUnauthorized: false,
  }
);

function proceed() {
    ws.send(`{"jsonrpc": "2.0", "id": 1, "method": "subscribe", "params": ["arbOnlyMEV", {"include": ["transactions"]}]}`);
}


function handle(nextNotification) {
    console.log(nextNotification.toString()); // or process it generally
}

ws.on('open', proceed);
ws.on('message', handle);

```

{% endtab %}

{% tab title="Python" %}

```python
import asyncio, json, websockets

async def main():
    auth_key = "YOUR_AUTHORIZATION_HEADER"
    uri = 'wss://backrunme.blxrbdn.com/ws'
    async with websockets.connect(
            uri,
            header=["Authorization:{}".format(auth_key)],            
            sslopt={"cert_reqs": ssl.CERT_NONE},
    ) as websocket:
        subscribe_request = {
            "jsonrpc": "2.0",
            "id": 1,
            "method": "subscribe",
            "params": ["arbOnlyMEV", {"include": ["transactions"]}]
        }
        await websocket.send(json.dumps(subscribe_request))
        response = await websocket.recv()
        subscription_id = json.loads(response)["result"]

        while True:
            next_notification = await websocket.recv()
            print(next_notification)  # or process it generally

        unsubscribe_request = {
            "jsonrpc": "2.0",
            "id": 2,
            "method": "unsubscribe",
            "params": [subscription_id]
        }
        await websocket.send(json.dumps(unsubscribe_request))

if __name__ == '__main__':
    asyncio.run(main())    
```

{% endtab %}

{% tab title="Golang" %}

```go
package main

import (
	"crypto/tls"
	"fmt"
	"github.com/gorilla/websocket"
	"net/http"
)

func main() {
  tlsConfig := &tls.Config{
  	InsecureSkipVerify: true,
  }
  dialer := websocket.DefaultDialer
  dialer.TLSClientConfig = tlsConfig
  wsSubscriber, _, err := dialer.Dial("wss://backrunme.blxrbdn.com/ws", http.Header{"Authorization": []string{<YOUR-AUTHORIZATION-HEADER>}})

	if err != nil {
		fmt.Println(err)
		return
	}

	subRequest := `{"id": 1, "method": "subscribe", "params": ["arbOnlyMEV", {"include": ["transactions"]}]}`
	err = wsSubscriber.WriteMessage(websocket.TextMessage, []byte(subRequest))
	if err != nil {
		fmt.Println(err)
		return
	}

	for {
		_, nextNotification, err := wsSubscriber.ReadMessage()
		if err != nil {
			fmt.Println(err)
		}
		fmt.Println(string(nextNotification)) // or process it generally
	}
}
```

{% endtab %}
{% endtabs %}

#### Response

{% tabs %}
{% tab title="Transaction Event" %}

```bash
<<< {
  "jsonrpc": "2.0",
  "id": null,
  "method": "subscribe",
  "params": {
    "subscription": "3c87cccd-0df5-4938-947e-b24f7602f147",
    "result": {
      "transactions": [
          {
          "txHash": "0x88b...296",
          "txContents": {
            "from": "0x6e9...f89",
            "gas": "0x299b6",
            "gasPrice": "0xf9982de00",
            "hash": "0x88b...296",
            "input": "0x18...cc2",
            "nonce": "0xf",
            "value": "0x0",
            "type": "0x0",
            "to": "0x7a2...88d"
          },
          "localRegion": true
        }
      ]
    }
  }
}
```

{% endtab %}
{% endtabs %}


# Submission

The BackRunMe bundle submission system allows searchers that are part of the Backrunme program to submit arbitrage bundles referencing private transactions from the arbOnlyMEV stream. These bundles must strictly backrun the target transaction (from the stream) and cannot be used for frontrunning.

Service available via Cloud API only.

To learn more or request access to the program, please [Contact Us](/introduction/contact-us)


# Overview

This page summarizes the services available on BSC and links to the relevant sections

bloXroute provides execution and data services for BNB Smart Chain (BSC), optimized for low-latency and predictable transaction propagation using the Blockchain Distribution Network (BDN).

### Available services

#### Execution services

bloXroute supports transaction and bundle submission on BSC, enabling faster and more reliable propagation for latency-sensitive execution workflows.

Execution capabilities include:

* **Submit transactions**\
  Low-latency submission of individual BSC transactions with optimized propagation paths.\
  → See: [Submit Transactions](/bsc/submit-transactions)
* **Submit bundles**\
  Support for bundled transaction submission for advanced execution and strategy workflows.\
  → See: [Submit Bundles](/bsc/submit-bundles)
* **Backrun arbitrage**\
  Execution primitives designed for backrun and MEV-aware strategies on BSC.
* **Running a local gateway**\
  Operate a local bloXroute gateway for direct network access and improved execution control.\
  → See: [Running a Gateway](/bsc/gateway)

#### Data services

bloXroute provides low-latency access to real-time BSC data for execution logic and decision-making.

Data capabilities include:

* **Streams**\
  Access live BSC transaction, block, and event data with minimal delay.\
  → See: [Streams](/bsc/streams)

#### Utilities

bloXroute provides additional tools for interacting with and inspecting BSC activity.

* **BSC Block Explorer**\
  Explore BSC blocks, transactions, and network activity.\
  → See: [BSC Block Explorer](/bsc/block-explorer)


# Running a Gateway

The **bloXroute Gateway** is open-source software that connects to the **Blockchain Distribution Network (BDN)**, giving users high-performance access to blockchain data and transaction propagation.

A Gateway enables two key capabilities:

* **Fast transaction submission** into the BDN
* **Real-time streaming** of blocks and transactions from the BDN

Gateways are typically deployed alongside a full blockchain node, using the node’s native peer-to-peer protocol (e.g., Ethereum’s devp2p). However, **Enterprise-tier clients** may run a Gateway **without operating their own node**, instead connecting through a remote proxy maintained by bloXroute.

Note that Gateways do **not** validate chain state or store blockchain data. They serve purely as a communication layer between your infrastructure and the BDN.

#### **What You'll Find in This Section**

This section explains how to run a bloXroute Gateway, including:

* **Supported Clients** – Which blockchain nodes and networks are compatible
* **Requirements** – Hardware, bandwidth, and latency expectations
* **Authentication** – API keys and certificates required for BDN access
* **Installation** – Deploying via GitHub or Docker
* **Configuration & Startup** – Connecting your Gateway to the BDN and (optionally) your full node
* **Operation & Maintenance** – Monitoring, logs, upgrades, and best practices


# Requirements

To run a local bloXroute Gateway and connect to the BDN, your setup needs to meet a few basic requirements. This section outlines supported clients and everything you need to get started.

**Access Requirements**

To run a Gateway, you’ll need:

* Access to the bloXroute Certificate Portal
* A server or instance running a supported blockchain node (or use bloXroute’s remote node option)

When planning your infrastructure, you can refer to our [BDN Explorer](https://bdn-explorer.bloxroute.com/?network=bsc\&type=network) for insight into network locations.

#### **Client Setup**

Gateway should support latest client version by default. If any issues please contact support.

| Blockchain Client      | Layer           |
| ---------------------- | --------------- |
| **Go Ethereum (geth)** | Execution Layer |


# Authentication & Certificates

To run a Gateway, you’ll need to authenticate using a certificate package and an authorization header. These credentials allow your Gateway to connect securely to the BDN and access bloXroute services.

#### **Steps to Retrieve Authentication Files**

1. Register and purchase a paid service
2. Log in to the bloXroute Customer Portal → <https://portal.bloxroute.com>
3. Navigate to the "Account" section. On this page, you’ll find:
   * Your authorization header (for API calls)
   * A “Download” button to obtain your certificate package
   * **Please follow the setup instructions shown on the page.**
4. Download and extract the certificate ZIP package
   * Do not rename the extracted folder
   * Save the contents in a known location (e.g., `/usr/local/bloxroute-certificate`)
5. Your certificate package includes:
   * `gateway.crt` – Your public cert
   * `gateway.key` – Your private key
   * `secret_hash` – Used for Gateway authentication


# Installation Options

Users can run the bloXroute Local Gateway as a Docker container or use a local build based on the [GitHub repository](https://github.com/bloXroute-Labs/gateway).

If you are running a blockchain node, to ensure that your Gateway will be able to connect to it, we recommended you [add the Gateway as a trusted peer](broken://pages/-MIUhNlba_qzxp6pjk24) of your execution layer client.

After a successful installation, the will Gateway provide your node access to the BDN and will speed up block and transaction propagation to and from the node that it is peered with.

#### GitHub repository option

Pull the latest gateway version from our GitHub repository and install it locally.

{% embed url="<https://github.com/bloXroute-Labs/gateway>" %}

Building the gateway requires using Go (version 1.19 or later). You can install it using your favorite package manager. Once the dependencies are installed, run `make gateway`.

#### Docker container option

To pull the latest gateway version, run the following command:

```markup
docker pull bloxroute/bloxroute-gateway-go:latest
```

**Running your gateway**

To run your gateway, copy the command below and modify it as needed.

A full list of start up arguments is available in the [Startup Arguments page](broken://pages/-MlNxudohX6lybndPN4n).

```
docker run --name bxgateway-go -d \
-v <LOG_FILE_PATH>:/app/bloxroute/logs \
-v <SSL_CERT_PATH>:/app/bloxroute/ssl \
-p 1801:1801 -p 28333:28333 bloxroute/bloxroute-gateway-go:latest \
--blockchain-network BSC-Mainnet \
--ws --port 1801 \
--enodes enode://<BLOCKCHAIN_NODE_PUBLIC_KEY>@<NODE_IP>:<NODE_PORT> \
--private-key <YOUR_PRIVATE_KEY> \
--eth-ws-uri ws://<ETH node IP address>:8546
```


# Configuration & Startup


# Startup Script

Use the startup script below to bypass manual configuration when starting your Gateway.

Follow the steps below to modify the script to suit your specific configuration and needs. Once initiated, the script will create a Docker container named bxgateway-go that will running in the background, setting up your Local Gateway.

1. Modify the startup command below to include your gateway's `enode` and `multiaddr`

```bash
./run_gateway.sh /home/ubuntu/gw/ssl \
                 /home/ubuntu/gw/logs \
                 /home/ubuntu/gw/datadir \
                 Mainnet \
                 enode://123..abc@127.0.0.1:30303 \
                 multiaddr:/ip4/<IP_address>/tcp/<port>/p2p/<Peer_ID>
```

2. Specify input arguments at the beginning of the script below
   * **`CERT_PATH`**`: Your SSL certificates from the portal. This should be a path to the parent directory of the external_gateway folder. The external_gateway folder should contain a registration_only folder with certs inside.`
   * **`LOGS_PATH`**`: Where you want a logs folder to be created with a gateway.log file inside`
   * **`DATADIR_PATH`**`: The directory for storing various persistent files such as gateway private key file`
   * **`BLOCKCHAIN_NETWORK`**`:BSC-Mainnet`
   * **`ENODES`**`: Local blockchain node (Enterprise clients must start the gateway with local node connection.)`
   * **`MULTIADDR`**`: multiaddr has replaced enr as the argument to indicate the node address because it is human-readable. It has the following format:`\
     `/ip4/<IPv4_NETWORK_ADDRESS>/tcp/<LISTENING_PORT>/p2p/<NODE_ID>`
3. Copy the script to an executable file (example below)
4. Run the `run_gateway.sh` command from step 1

```bash
#usr/bin/env bash

CERT_PATH=${1:-/home/ec2-user/ssl}
LOGS_PATH=${2:-/home/ec2-user/logs}
DATADIR_PATH=${3:-/home/ec2-user/datadir}
BLOCKCHAIN_NETWORK=${4:-"Mainnet"}  
ENODES=${5:-""}
MULTIADDR=${6:-""}

LOG_LEVEL="info"
LOG_FILE_LEVEL="debug"
IMAGE_TAG="latest"
EXTERNAL_IP=""

CA_CERT_URL="https://s3.amazonaws.com/credentials.blxrbdn.com/ca/ca_cert.pem"
mkdir -p "$CERT_PATH"/external_gateway/ca
curl $CA_CERT_URL -o "$CERT_PATH"/external_gateway/ca/ca_cert.pem

ARGS="--ws --port 1801"
if [[ "${EXTERNAL_IP}" != "" ]]; then
  ARGS="${ARGS} --external-ip ${EXTERNAL_IP}"
fi

if [[ "${LOG_LEVEL}" != "" ]]; then
  ARGS="${ARGS} --log-level ${LOG_LEVEL}"
fi

if [[ "${LOG_FILE_LEVEL}" != "" ]]; then
   ARGS="${ARGS} --log-file-level ${LOG_FILE_LEVEL}"
fi

if [[ "${ENODES}" != "" ]]; then
  ARGS="${ARGS} --enodes ${ENODES}"
fi

if [[ ${MULTIADDR} != "" ]]; then
  ARGS="${ARGS} --multiaddr ${MULTIADDR}"
fi

if [[ ${BLOCKCHAIN_NETWORK} == "Mainnet" && "${MULTIADDR}" != "" ]]; then
  ARGS="${ARGS} --multiaddr ${MULTIADDR}"
fi


ARGS="${ARGS} --blockchain-network ${BLOCKCHAIN_NETWORK}"

docker pull bloxroute/bloxroute-gateway-go:$IMAGE_TAG
docker rm -f bxgateway-go
docker run --name bxgateway-go --restart=on-failure -d -v "$LOGS_PATH":/app/bloxroute/logs \
  -v "$CERT_PATH":/app/bloxroute/ssl -v "$DATADIR_PATH":/app/bloxroute/datadir \
  -p 1801:1801 -p 127.0.0.1:6060:6060 \
  -blockchain-network BSC-Mainnet \
  -p 28333:28333 bloxroute/bloxroute-gateway-go:$IMAGE_TAG "$ARGS"
```

{% hint style="info" %}
Note that WebSockets are accessible at ws\://localhost:28333/ws. To test it, you can use wscat -c ws\://localhost:28333/ws -H "Authorization:\<your auth header here>"
{% endhint %}


# Startup Arguments

The full lists of startup arguments you may use to configure your Local Gateway. The following arguments can be used to configure your Local Gateway, regardless of the installation method chosen

### Parameters

<table><thead><tr><th width="189">Parameter</th><th width="272">Description</th><th width="370">Options/ Additional notes</th><th width="104">Default</th><th width="182">Example</th></tr></thead><tbody><tr><td><strong><code>enodes</code></strong></td><td>Enode of the blockchain node. Example: enode://&#x3C;node_public_key>@&#x3C;ip>:&#x3C;port></td><td>Optional when using Standalone Gateway add-on.</td><td></td><td></td></tr><tr><td><strong><code>blockchain-network</code></strong></td><td>Blockchain network name.</td><td><strong><code>BSC-Mainnet</code></strong></td><td></td><td></td></tr><tr><td><strong><code>private-key</code></strong></td><td>Private key for encrypted communication with BSC node</td><td>[Optional]</td><td>N/A</td><td>294549…97dfba3</td></tr><tr><td><strong><code>ws</code></strong></td><td>Enables WebSockets RPC server</td><td>[Optional]</td><td>false</td><td>true</td></tr><tr><td><strong><code>ws-port</code></strong></td><td>WebSockets server port</td><td>[Optional]</td><td>28333</td><td>28334</td></tr><tr><td><p><strong><code>relay-ip</code></strong></p><p>(alias <strong><code>relays</code></strong> )</p></td><td>Specifies relay IP for the gateway to connect to</td><td>Available with Private Regions add-on</td><td>N/A</td><td>13.213.141.24</td></tr><tr><td><strong><code>log-file-level</code></strong></td><td><p>The log level of the log file (found in the <code>logs</code> directory). Examples:</p><p>TRACE, DEBUG, INFO, WARN/WARNING, ERROR, FATAL, PANIC</p></td><td>[Optional]</td><td>INFO</td><td>TRACE</td></tr><tr><td><strong><code>log-max-size</code></strong></td><td>Maximum size of a log file (in megabytes) before it is rotated</td><td>[Optional]</td><td>100</td><td>50</td></tr><tr><td><strong><code>log-max-age</code></strong></td><td>Maximum age of an old log file (in days) before it is removed</td><td>[Optional]</td><td>10</td><td>5</td></tr><tr><td><strong><code>log-max-backups</code></strong></td><td>Maximum number of old log files to keep</td><td>[Optional]</td><td>10</td><td>5</td></tr><tr><td><strong><code>port</code></strong></td><td>The external port, which the gateway uses to exchange messages with the relay network</td><td>[Optional]</td><td>1809</td><td>1801</td></tr><tr><td><strong><code>external-ip</code></strong></td><td>The public IP address of the gateway - Please specify your IP address using external-ip if the gateway cannot access the url.</td><td>[Optional]. Use <a href="http://checkip.dyndns.org/">http://checkip.dyndns.org/</a> to automatically detect IP address.</td><td>Automatically tries to find the IP address of the machine</td><td>24.8.18.29</td></tr><tr><td><strong><code>eth-ws-uri</code></strong></td><td>Ethereum WebSockets endpoint for syncing block and transaction content</td><td>[Optional]. You need to configure your Ethereum node to enable the Ethereum WebSockets. For more information see <a href="/pages/-MJmvKcIEm4JZrR2PZEj">Enable Ethereum Websocket</a>.</td><td>N/A</td><td>ws://127.0.0.1:8546</td></tr><tr><td><strong><code>registration-cert-dir</code></strong></td><td>File path of the private Gateway certificate - It can be a local or remote directory.</td><td>[Optional]</td><td>/ssl</td><td>/usr/local/ssl</td></tr><tr><td><strong><code>txtrace</code></strong></td><td>Enables <a href="/pages/6DnygwFVM0aUZrdjF8F5">TxTrace logging</a></td><td>[Optional]</td><td>false</td><td>true</td></tr><tr><td><strong><code>txtrace-max-file-size</code></strong></td><td>Maximum file size (in megabytes) for TxTrace log files</td><td>[Optional]</td><td>100</td><td>50</td></tr><tr><td><strong><code>txtrace-max-files</code></strong></td><td>Maximum number of TxTrace log files</td><td>[Optional]</td><td>10</td><td>5</td></tr><tr><td><strong><code>disable-profiling</code></strong></td><td>Disables the pprof http server</td><td>[Optional]</td><td>false</td><td>true</td></tr><tr><td><strong><code>blocks-only</code></strong></td><td>Send only paid blocks and transactions to node</td><td>[Optional]</td><td>false</td><td>true</td></tr><tr><td><strong><code>data-dir</code></strong></td><td>Directory to store configuration, status, SSL certificates, and log files</td><td>[Optional]</td><td>/datadir</td><td>/home/[user]/gateway</td></tr><tr><td><strong><code>grpc</code></strong></td><td>Enables gRPC server</td><td>[Optional]</td><td>false</td><td>true</td></tr><tr><td><strong><code>grpc-host</code></strong></td><td>gRPC server host ip address</td><td>[Optional]</td><td>127.0.0.1</td><td>0.0.0.0</td></tr><tr><td><strong><code>grpc-port</code></strong></td><td>gRPC server port</td><td>[Optional]</td><td>5001</td><td>5002</td></tr><tr><td><strong><code>all-txs</code></strong></td><td>Set this flag to propagate all transactions from the BDN to the connected node (warning: may result in worse performance and propagation times).</td><td>[Optional]</td><td>false</td><td>true</td></tr><tr><td><strong><code>enable-blockchain-rpc</code></strong></td><td>Set this flag to enable the gateway to serve as a proxy for your blockchain RPC node.</td><td>[Optional]. Find a detailed guide to using this feature <a href="https://docs.bloxroute.com/introduction/guides/gateway-as-web3-bridge">here</a>.</td><td>false</td><td>true</td></tr><tr><td><strong><code>tx-include-sender-in-feed</code></strong></td><td>Set this flag if you want extract sender of the transaction into Websocket or gRPC feed.</td><td>[Optional]. <strong><code>From</code></strong> field is deprecated and will be removed in the future. This made to improve performance and shift responsibility to feed client. In versions up to <code>v2.128.14.1</code> it is <strong>true</strong> by default, after it will be <strong>false</strong>, which means you need to set it explicitly if you want to get <code>from</code>.</td><td>true</td><td><code>--tx-include-sender-in-feed=false</code></td></tr></tbody></table>


# Add Your Gateway as a Trusted Peer to the Execution Layer Client

To keep your Gateway reliably connected to your execution client, you must add it as a **trusted peer**. The bloXroute Gateway connects as a peer to your node. If your node hits its peer limit, untrusted connections (like the Gateway) can be dropped unless explicitly allowed.

#### Why This Matters

Without adding the Gateway to your trusted peers:

* Your node may reject the connection.
* You risk losing access to the BDN for transaction/block propagation.

#### Step 1: Get Your Gateway Enode

Each time the Gateway starts, it generates a new enode unless a private key is specified. To make the enode persistent, use the `--private-key` flag when starting your Gateway.

**Generate Keys (Before Starting the Gateway)**

* To make your Gateway’s enode persistent across restarts, you’ll need to generate a private/public key pair.

  * Use this guide to generate your key pair:\
    👉 [Generate Gateway Keys (gist)](https://gist.github.com/miguelmota/3793b160992b4ea0b616497b8e5aee2f)

  Once generated, supply the private key using the `--private-key` flag when starting the Gateway to ensure the enode stays consistent.

**Get Your Enode (If Gateway Is Already Running)**

* **Option 1:** Check startup logs\
  Look for a line like:\
  `Started P2P networking self=enode://<GW_PUBLIC_KEY>`
* **Option 2:** Use `bxcli` with gRPC\
  Run:

  ```bash
  docker exec -it bxgateway-go bxcli status
  ```

  Look under `gateway_info → gateway_public_key`.

#### Step 2: Add Gateway as a Trusted Peer in Your Node

You can choose from the following options:

* **Temporary (does not persist after restart):**
  * Use JSON-RPC:

    ```bash
    curl -H 'Content-Type: application/json' \
    -d '{"method": "admin_addTrustedPeer", "params": ["enode://<GATEWAY_PUBLIC_KEY>"], "id":1}' \
    http://localhost:8545
    ```
  * Use Geth console:

    ```
    geth attach
    admin.addTrustedPeer("enode://<GATEWAY_PUBLIC_KEY>")
    ```
* **Recommended (persistent):**\
  Edit your Geth config file and add the enode under the `[Node.P2P]` section:

  ```toml
  [Node.P2P]
  TrustedNodes = ["enode://<GATEWAY_PUBLIC_KEY>"]
  ```

  You can generate a config from your current setup using:

  ```bash
  geth dumpconfig
  ```


# Operation & Maintenance


# Upgrading your Gateway

bloXroute regularly releases new versions of the gateway to support changes in the Blockchain Network protocols, improve performance and more.

#### Upgrading using Docker container

```bash
docker pull bloxroute/bloxroute-gateway-go:latest
```

#### Upgrading via GitHub

Pull the latest gateway version from our GitHub repository and install it locally.

{% embed url="<https://github.com/bloXroute-Labs/gateway>" %}


# Logging

You can ensure your gateway is actively exchanging messages with your local blockchain node and the BDN network by monitoring your gateway and inspecting logs.

### **Setting log level**

Use the parameter **`log-file-level`** to configure the amount of data logged in the Gateway log file, and use **`log-level`** to configure the amount of data logged to standard output.

The Gateway’s common log levels and the possible values for these two flags are listed below in order from most verbose (TRACE) to least verbose (ERROR). The default log level is INFO.

```
TRACE, DEBUG, INFO, WARN, ERROR
```

#### **Accessing the log files**

The log files can be found in the **`logs`** directory of the Docker container (as specified with the Docker command or the startup script). The most recent log file is named `gateway-[external port of gateway].log`.

Older log files are named `gateway-[external port of gateway]-[end timestamp].log`**.**

### **Analyzing transaction receipt**

Your Local Gateway includes a logging utility that helps you analyze when the gateway received important transactions and the source of such transactions.

For each transaction received, the utility records the time the transaction is first received by the gateway and the source from which the gateway received it. To enable this utility, add the parameter `txtrace` to your startup argument when you start the gateway.

{% tabs %}
{% tab title="Docker Argument" %}

```bash
docker run --name bxgateway-go -d \
  -v <LOG_FILE_PATH>:/app/bloxroute/logs \
  -v <SSL_CERT_PATH>:/app/bloxroute/ssl \
  -p 1801:1801 -p 28333:28333 bloxroute/bloxroute-gateway-go \ 
  --blockchain-network <Mainnet, or BSC-Mainnet> \
  --ws --port 1801 \ 
  --txtrace \
  --enodes enode://<BLOCKCHAIN_NODE_PUBLIC_KEY>@<NODE_IP>:<NODE_PORT>
  
```

{% endtab %}
{% endtabs %}

#### **Log format and size**

Each `txtrace` entry is logged in the following format:

`time="[Time Tx Received]" level=trace msg="[Tx Hash] - [Blockchain or BDN] [Source IP]"`

The `txtrace` utility has additional parameters that allow you to control the size of the log file:

<table><thead><tr><th>Gateway Parameter</th><th width="351.3333333333333">Description</th><th>Value</th></tr></thead><tbody><tr><td><strong><code>txtrace-max-file-size</code></strong></td><td>Sets max size (megabytes) of individual log files</td><td>integer<br><em>[Default: 100]</em></td></tr><tr><td><strong><code>txtrace-max-files</code></strong></td><td>Sets max number of log files stored</td><td>integer<br><em>[Default: 3]</em></td></tr></tbody></table>

#### **Accessing `txtrace` log files**

Similar to other logs, the `txtrace` log files are also located in the **`logs`** directory.

The most recent file is named `txtrace-gateway-[external port of gateway].log`.

Older `txtrace` log files are named `txtrace-gateway-[external port of gateway]-[end timestamp].log`**.**

{% hint style="info" %}
The txtrace log is not a substitute for the Tx-Trace service which allows traders to gain insight on transaction propagation by the BDN.

More information about this service, can be found [here](/eth/sending-transactions/tx-trace).
{% endhint %}


# General Connectivity Troubleshooting

When configuring the Gateway, it is important to verify that the blockchain node is reachable from the machine where the Gateway will be running and that it can accept its connection.

### Gateway connectivity issue troubleshooting steps:

1\. Verify the IP address of the blockchain node specified by the **`--enodes`** Gateway startup argument. Let’s assume that this IP is **`225.23.22.156`.**

2\. Verify that the gateway is using the correct port. This port is established by the **`--enodes`** Gateway startup argument. Let’s assume that this port is 30303.

3\. Use **`netcat`** to test connectivity to the blockchain node:

```bash
$ nc 225.23.22.156 30303
Connection to 225.23.22.156 30303 port [tcp/ssh] succeeded!
```

A connectivity problem will result in a connection refused or connection timed out error:

```bash
connect to 225.23.22.156 port 30303 (tcp) failed: Connection refused
connect to 225.23.22.156 port 30303 (tcp) failed: Connection timed out
```

To verify that the node is indeed listening on the correct port, you can run the **`netcat`** command locally on the node server. If you get a “succeeded!” message, this means the port is correct, but might not be open for external connections. In this case, a firewall may be blocking the connection.

***Wrong IP address for the blockchain node*****:** If you provide an IP address in the arguments **`--enodes`** that doesn’t match the IP of your node, the Gateway will not be able to connect.

***Wrong node public key*****:** For Ethereum nodes, specifying an incorrec&#x74;**`--enodes`** Gateway startup argument will lead to the Ethereum node closing the Gateway connection. To verify that the Gateway is using the correct node public key, you can run the following command:

```bash
>> admin.nodeInfo
{
enode:"enode://1a6b4a7347b2fc95c7b7db5badb4998d8a4a4cec2a0e43baaee4ed04bf862fd456521e5d2edd7854485406371ff400b51289a137104176a5296358d0c503ca73@172.10.0.1:30303”,
[...]
}

```

The public key in the above command is: "1a6b4a7347b2fc95c7b7db5badb4998d8a4a4cec2a0e43baaee4ed04bf862fd456521e5d2edd7854485406371ff400b51289a137104176a5296358d0c503ca73"

***Node not completely synced:*** Until the blockchain node is fully synced, it may not accept a connection from the Gateway.

***Unsupported node sync mode:*** The Gateway is not compatible with a node started with the **light sync mode**, which can't interpret some p2p messages supported in the default sync mode.

***The blockchain node’s peer list is full:*** Unless customized, Ethereum nodes have a maximum of 25 peers, while Bitcoin nodes have a maximum of 117 peers. If your node has been running for a while, there may be no space for the Gateway to connect. To work around this, please see the section [Adding the Gateway As a Trusted Peer](broken://pages/-MIUhNlba_qzxp6pjk24).

***Node machine unreachable:*** bloXroute recommends running the Gateway on a separate machine with low latency to your blockchain node. Make sure that the machine you are trying to connect to is reachable.

To verify this, please check that:

* The node’s machine is reachable using ping
* You are using the standard ports, or otherwise that you have specified the non-standard port in the **`--enodes`** argument. The default p2p port is 30303 for Ethereum clients.
* The ports you are using are open in the node machine. Check firewall rules and verify that they meet the requirements specified in the section above.




---

[Next Page](/llms-full.txt/1)

