# 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 ](https://docs.expand.network/ids/chain-ids)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 ](https://docs.expand.network/ids/chain-ids)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 %}
