# Bundler Endpoint

As per [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337), Bundler is a node (block builder) that can handle UserOperations, create a valid an EntryPoint.handleOps() transaction, and add it to the block while it is still valid. This can be achieved by a number of ways:

* Bundler can act as a block builder itself
* If the bundler is not a block builder, it MUST work with the block building infrastructure such as `mev-boost` or other kind of PBS (proposer-builder separation)
* The `bundler` can also rely on an experimental `eth_sendRawTransactionConditional` RPC API if it is available.

### Utilize the following API to send the bundle of user operations to the bundler.

## /senduserops

## Prepare the data, to send the bundle of user operations, to the bundler.

<mark style="color:green;">`POST`</mark> `https://api.expand.network/aa/senduserops`

#### Request Body

| Name                                                   | Type   | Description                                                                                                                              |
| ------------------------------------------------------ | ------ | ---------------------------------------------------------------------------------------------------------------------------------------- |
| rpc                                                    | String | Remote procedural call URL.                                                                                                              |
| chainId                                                | String | Refer to the [Chain ID ](/ids/chain-ids.md)page for details.                                                                             |
| signature<mark style="color:red;">\*</mark>            | String | Data passed into the account along with the nonce during the verification step.                                                          |
| paymasterAndData<mark style="color:red;">\*</mark>     | String | Address of paymaster sponsoring the transaction, followed by extra data to send to the paymaster. (empty for self-sponsored transaction) |
| maxPriorityFeePerGas<mark style="color:red;">\*</mark> | String | Maximum priority fee per gas. (similar to EIP-1559 `max_priority_fee_per_gas`)                                                           |
| maxFeePerGas<mark style="color:red;">\*</mark>         | String | Maximum fee per gas. (similar to [EIP-1559](https://eips.ethereum.org/EIPS/eip-1559) `max_fee_per_gas`)                                  |
| preVerificationGas<mark style="color:red;">\*</mark>   | String | The amount of gas to pay for to compensate the bundler for pre-verification execution and calldata.                                      |
| verificationGasLimit<mark style="color:red;">\*</mark> | String | The amount of gas to allocate for the verification step.                                                                                 |
| gasLimit<mark style="color:red;">\*</mark>             | String | Maximum gas limit provided by the sender, for the transaction.                                                                           |
| callGasLimit<mark style="color:red;">\*</mark>         | String | The amount of gas to allocate the main execution call.                                                                                   |
| callData<mark style="color:red;">\*</mark>             | String | The data to pass to the `sender` during the main execution call.                                                                         |
| initCode<mark style="color:red;">\*</mark>             | String | The initCode of the account. (needed if and only if the account is not yet on-chain and needs to be created)                             |
| sender<mark style="color:red;">\*</mark>               | String | The account making the operation.                                                                                                        |
| userOps<mark style="color:red;">\*</mark>              | Array  | The user operation object as per [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337).                                                    |
| chainSymbol                                            | String | Refer to the [Chain ID ](/ids/chain-ids.md)page for details.                                                                             |
| bundler<mark style="color:red;">\*</mark>              | String | Beneficiary address for bundle execution.                                                                                                |
| gas<mark style="color:red;">\*</mark>                  | String | Gas limit for bundler transaction.                                                                                                       |

{% tabs %}
{% tab title="Sample Request" %}

```json
{
    "userOps": [
        {
            "sender": "0x03D3a52d79eeB5014dFe28258e8c0978Ecd8e65c",
            "nonce": "0",
            "initCode": "0x",
            "callData": "0x38ed173900000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000063056e00436da25bcf48a40dfbbdcc708935100600000000000000000000000000000000000000000000000000000000634d00ee0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b4fbf271143f4fbf7b91a5ded31805e42b2208d600000000000000000000000011fe4b6ae13d2a6055c8d9cf65c55bac32b5d844",
            "callGasLimit": "260611",
            "gasLimit": "362451",
            "verificationGasLimit": "362451",
            "preVerificationGas": "53576",
            "maxFeePerGas": "29964445250",
            "maxPriorityFeePerGas": "100000000",
            "paymasterAndData": "0x",
            "signature": "0x06ba793e154877ba4beff535372f70be6d2ebb5503f374297658caa13a114b5b29b5a45cd4835176e637018823bba5990b6f043f93fe792a5bdb2a09958ecca61c"
        }
    ],
    "bundler": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
    "gas": "516124"
}
```

{% endtab %}

{% tab title="Sample Response" %}

```json
{
    "status": 200,
    "msg": "success",
    "data": {
        "from": "0x6Fb447Ae94F5180254D436A693907a1f57696900",
        "to": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
        "gas": "516124",
        "data": "0x1fad948c00000000000000000000000000000000000000000000000000000000000000400000000000000000000000006fb447ae94f5180254d436a693907a1f576969000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000003d3a52d79eeb5014dfe28258e8c0978ecd8e65c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000003fa0300000000000000000000000000000000000000000000000000000000000587d3000000000000000000000000000000000000000000000000000000000000d14800000000000000000000000000000000000000000000000000000006fa0526420000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000002e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010438ed173900000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000063056e00436da25bcf48a40dfbbdcc708935100600000000000000000000000000000000000000000000000000000000634d00ee0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b4fbf271143f4fbf7b91a5ded31805e42b2208d600000000000000000000000011fe4b6ae13d2a6055c8d9cf65c55bac32b5d844000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004106ba793e154877ba4beff535372f70be6d2ebb5503f374297658caa13a114b5b29b5a45cd4835176e637018823bba5990b6f043f93fe792a5bdb2a09958ecca61c00000000000000000000000000000000000000000000000000000000000000",
        "value": "0"
    }
}
```

{% endtab %}
{% endtabs %}


---

# 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.expand.network/account-abstraction/overview/bundler-endpoint.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.
