# Bundle Submission

A **bundle** typically consists of two or more transactions that must be executed together in a specific order. In the block building ecosystem, it is a widely respected convention that bundles are treated atomically — they should not be frontrun or separated by other transactions ("un-bundled").

You can submit bundles to bloXroute using the endpoint below. The bundle is validated and then forwarded to MEV relays and builders for inclusion.

This service is available via **Cloud API** only.

## Submission Endpoint

* Method: `blxr_submit_bundle`
* Endpoint: `api.blxrbdn.com`
* Request type: *`HTTPS,WSS`*

### Parameters

<table><thead><tr><th width="290.5">Parameter</th><th>Description</th></tr></thead><tbody><tr><td><strong><code>transaction</code></strong></td><td>A list of raw transaction bytes without a <strong><code>0x</code></strong> prefix.</td></tr><tr><td><strong><code>block_number</code></strong></td><td>Block number of a future block to include this bundle in, in hex value. For traders who would like more than one block to be targeted, please send multiple requests targeting each specific block.</td></tr><tr><td><strong><code>min_timestamp</code></strong></td><td><em>[Optional]</em> The minimum timestamp that the bundle is valid on, an integer in unix epoch format. Default value is None.</td></tr><tr><td><strong><code>max_timestamp</code></strong></td><td><em>[Optional]</em> The maximum timestamp that the bundle is valid on, an integer in unix epoch format. Default value is None.</td></tr><tr><td><strong><code>reverting_hashes</code></strong></td><td><em>[Optional]</em> A list of transaction hashes within the bundle that are allowed to revert. Default is empty list: the whole bundle would be excluded if any transaction reverts.</td></tr><tr><td><strong><code>dropping_hashes</code></strong></td><td><em>[Optional]</em> A list of transaction hashes within the bundle that can be removed from the bundle if it's deemed useful (but not revert). For example, when transaction is invalid. Default is empty list: the whole bundle would be excluded if any transaction fails.</td></tr><tr><td><strong><code>uuid</code></strong></td><td><em>[Optional]</em> A unique identifier of the bundle. This field can be used for bundle replacement and bundle cancellation. Some builders like <code>bloxroute</code>, <code>builder0x69</code> and <code>flashbots</code> support this field. After receiving a new UUID bundle, the builder would replace the previous bundle that has the same UUID. When the list of transactions is empty in new UUID bundle, the previous bundle associated with the same UUID would be effectively canceled. The response is empty/null instead of bundle hash when UUID is provided in the request.</td></tr><tr><td><a href="/pages/-M_faZJFaAIFBTtCusDP"><strong><code>enable_backrunme</code></strong></a></td><td><em>[Optional, default: True]</em> A boolean flag indicating if the bundle should be enrolled in the BackRunMe service.</td></tr><tr><td><strong><code>backrunme_reward_address</code></strong></td><td><em>[Optional]</em> When the bundle is enrolled in the BackRunMe service, the transaction's from address collects backrun reward by default. The reward address can be overwritten with this parameter.</td></tr><tr><td><strong><code>refund_recipient</code></strong></td><td><em>[Optional]</em> A string representing the wallet address to receive refund when <code>priority_fee_refund</code> flag is enabled. Users who do not want to specify the <code>refund_recipient</code> parameter must contact bloXroute to enable their refund address.</td></tr><tr><td><strong><code>blocks_count</code></strong></td><td><em>[Optional, default: 1]</em> An integer that specifies the number of subsequent blocks that the bundle is valid for. The maximum value allowed for this parameter is 20. For example, when <strong><code>block_number</code></strong> parameter is 1000, and <strong><code>blocks_count</code></strong> is 3, then the current bundle would be processed with block numbers 1000, 1001, 1002.</td></tr><tr><td><strong><code>mev_builders</code></strong></td><td><p><em>[Optional, default:</em> <code>all</code> <em>builder]</em> A dictionary of MEV builders that should receive the bundle. For each MEV builder, a signature (which can be an empty string) is required.<br>For any builder, searchers can provide either empty string, or the signature used in <code>X-Flashbots-Signature</code> header, which can be constructed based on request payload <code>{"jsonrpc":"2.0","id":"1","method":"eth_sendBundle","params":[...]}</code>. For other builders, please provide empty string as signature.<br>Possible MEV builders are:</p><ul><li><code>flashbots</code>: flashbots builder</li><li><code>beaverbuild</code>: <a href="https://beaverbuild.org/">beaverbuild.org</a></li><li><code>rsync-builder</code> : <a href="https://rsync-builder.xyz">rsync-builder.xyz</a></li><li><code>all</code>: all builders</li></ul><p>Traders can refer to <a href="/pages/bW8Ii2GXp6IY1Uk60tWS">List of External Builders page</a> for a full list.</p></td></tr></tbody></table>

### Example

#### Cloud API

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

```
curl http://api.blxrbdn.com \
    --insecure \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: <YOUR-AUTHORIZATION-HEADER>" \
    -d '{
         "id": "1", 
         "method": "blxr_submit_bundle", 
         "params": {
            "transaction": ["ab..ab", "cd..cd"],
            "block_number": "0xba10d0",
            "min_timestamp": 1616511391,
            "max_timestamp": 1617806320,
            "reverting_hashes": ["0xd8..ce", "0x50..d3"],
            "dropping_hashes": ["0xea..c1", "0x66..e4"],
            "uuid": "05e33611-a415-425b-b9ca-ca0ef6773461",
            "priority_fee_refund": true,
            "refund_recipient": "0x000...111",
            "mev_builders": {
                "flashbots": "<signature>",
                "beaverbuild": "",
                "all": ""
	     }
          }
        }'
 
```

{% endtab %}

{% tab title="HTTPS POST" %}

```bash
curl https://api.blxrbdn.com \
    --insecure \
    -X POST \
    -H "Content-Type: application/json" \
    -H "Authorization: <YOUR-AUTHORIZATION-HEADER>" \
    -d '{
         "id": "1", 
         "method": "blxr_submit_bundle", 
         "params": {
            "transaction": ["ab..ab", "cd..cd"],
            "block_number": "0xba10d0",
            "min_timestamp": 1616511391,
            "max_timestamp": 1617806320,
            "reverting_hashes": ["0xd8..ce", "0x50..d3"],
            "dropping_hashes": ["0xea..c1", "0x66..e4"],
            "uuid": "05e33611-a415-425b-b9ca-ca0ef6773461",
            "priority_fee_refund": true,
            "refund_recipient": "0x000...111",
            "mev_builders": {
                "flashbots": "<signature>",
                "beaverbuild": "",
                "all": ""
	     }
          }
        }'
 
```

{% endtab %}

{% tab title="wscat" %}

```bash
wscat -c wss://api.blxrbdn.com/ws --header "Authorization: <YOUR-AUTHORIZATION-HEADER>" --no-check 
> {
         "jsonrpc": "2.0", 
         "id": "1",
         "method": "blxr_submit_bundle", 
         "params": {
                  "transaction": ["ab..ab", "cd..cd"],
                  "block_number": "0xba10d0",
                  "min_timestamp": 1616511391,
                  "max_timestamp": 1617806320,
                  "reverting_hashes": ["0xd8..ce", "0x50..d3"],
                  "dropping_hashes": ["0xea..c1", "0x66..e4"],
                  "priority_fee_refund": true,
                  "refund_recipient": "0x000...111",
                  "mev_builders": {
                      "bloxroute": "",
                      "flashbots": "<signature>",
                      "beaverbuild": "",
                      "all": ""
	          }
         }
}

```

{% endtab %}
{% endtabs %}

#### Response:

```
{"id":"1","result":{"bundleHash":"0x6c345cec7b125a10590130aff7c93323951406face2b95aecfea05bf59e6ea95"},"jsonrpc":"2.0"}
```

(Response will not include a bundle hash if UUID is included in request.)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.bloxroute.com/eth/submit-bundles/bundle-submission.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
