# Bundler Endpoints

All bundler endpoints follow the JSON-RPC 2.0 specification and are available at:

```text
https://api.openfort.io/rpc/{chainId}
```

Include your Openfort publishable key in the `Authorization` header:

```http
Authorization: Bearer YOUR_OPENFORT_PUBLISHABLE_KEY
```

## eth\_sendUserOperation

Submits a UserOperation to be included on-chain. Returns the `userOpHash` if successful.

:::warning[EntryPoint v0.8 & v0.9]
The EntryPoint v0.8 & v0.9 API expects an `UnpackedUserOperation` instead of a `PackedUserOperation`. The bundler is responsible for packing the UserOperation before sending it to the EntryPoint.
:::

### Request (EntryPoint v0.8 & v0.9)

```json
{
  "jsonrpc": "2.0",
  "method": "eth_sendUserOperation",
  "params": [
    {
      "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149",
      "nonce": "0x845ADB2C711129D4F3966735ED98A9F09FC4CE5700000000000000000000",
      "factory": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5",
      "factoryData": "0xc5265d5d...",
      "callData": "0xe9ae5c53...",
      "callGasLimit": "0x13880",
      "verificationGasLimit": "0x60B01",
      "preVerificationGas": "0xD3E3",
      "maxPriorityFeePerGas": "0x3B9ACA00",
      "maxFeePerGas": "0x7A5CF70D5",
      "paymaster": "0x...",
      "paymasterVerificationGasLimit": "0x0",
      "paymasterPostOpGasLimit": "0x0",
      "paymasterData": "0x...",
      "signature": "0xa6cc6589..."
    },
    "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108"
  ],
  "id": 1
}
```

### Request (EntryPoint v0.6)

```json
{
  "jsonrpc": "2.0",
  "method": "eth_sendUserOperation",
  "params": [
    {
      "sender": "0xb341FEAFaF71b09089d03B7D114599f8F491EE45",
      "nonce": "0x0",
      "initCode": "0x5de4839a76cf55d0c90e2061ef4386d962E15ae3...",
      "callData": "0x51945447...",
      "callGasLimit": "0x115b5c0",
      "verificationGasLimit": "0x249f0",
      "preVerificationGas": "0xeb11",
      "maxPriorityFeePerGas": "0x12a05f200",
      "maxFeePerGas": "0x5b08082fa",
      "paymasterAndData": "0x",
      "signature": "0xa6cc6589..."
    },
    "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"
  ],
  "id": 1
}
```

### Response

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x4c31ae84205a9c862dd8d0822f427fb516448451850ee6f65351951f6a2b2154"
}
```

### Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `sender` | Address | The account making the operation |
| `nonce` | Hex | Unique identifier for the request |
| `factory` | Address | (v0.8+) Factory contract for account deployment |
| `factoryData` | Hex | (v0.8+) Data for factory contract |
| `initCode` | Hex | (v0.6) Initialization code for the smart account |
| `callData` | Hex | Data to pass during main execution |
| `callGasLimit` | Hex | Gas for main execution |
| `verificationGasLimit` | Hex | Gas for verification step |
| `preVerificationGas` | Hex | Gas for pre-verification |
| `maxFeePerGas` | Hex | Maximum fee per gas (EIP-1559) |
| `maxPriorityFeePerGas` | Hex | Maximum priority fee per gas |
| `paymaster` | Address | (v0.8+) Paymaster contract address |
| `paymasterVerificationGasLimit` | Hex | (v0.8+) Gas for paymaster verification |
| `paymasterPostOpGasLimit` | Hex | (v0.8+) Gas for paymaster post-op |
| `paymasterData` | Hex | (v0.8+) Data for paymaster |
| `paymasterAndData` | Hex | (v0.6) Combined paymaster address and data |
| `signature` | Hex | Signature authorizing the operation |

***

## eth\_estimateUserOperationGas

Estimates gas values for a UserOperation. Returns the estimated `preVerificationGas`, `verificationGasLimit`, and `callGasLimit`.

### Request

```json
{
  "jsonrpc": "2.0",
  "method": "eth_estimateUserOperationGas",
  "params": [
    {
      "sender": "0x...",
      "nonce": "0x0",
      "callData": "0x...",
      "signature": "0x..."
    },
    "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108"
  ],
  "id": 1
}
```

### Response

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "preVerificationGas": "0xd3e3",
    "verificationGasLimit": "0x60b01",
    "callGasLimit": "0x13880"
  }
}
```

***

## eth\_getUserOperationReceipt

Returns the receipt of a UserOperation after it has been included on-chain.

### Request

```json
{
  "jsonrpc": "2.0",
  "method": "eth_getUserOperationReceipt",
  "params": [
    "0x4c31ae84205a9c862dd8d0822f427fb516448451850ee6f65351951f6a2b2154"
  ],
  "id": 1
}
```

### Response

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "userOpHash": "0x4c31ae84205a9c862dd8d0822f427fb516448451850ee6f65351951f6a2b2154",
    "entryPoint": "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
    "sender": "0x5a6b47F4131bf1feAFA56A05573314BcF44C9149",
    "nonce": "0x0",
    "paymaster": "0x...",
    "actualGasCost": "0x5208",
    "actualGasUsed": "0x5208",
    "success": true,
    "logs": [],
    "receipt": {
      "transactionHash": "0x...",
      "blockNumber": "0x...",
      "blockHash": "0x..."
    }
  }
}
```

***

## eth\_getUserOperationByHash

Retrieves a UserOperation by its hash.

### Request

```json
{
  "jsonrpc": "2.0",
  "method": "eth_getUserOperationByHash",
  "params": [
    "0x4c31ae84205a9c862dd8d0822f427fb516448451850ee6f65351951f6a2b2154"
  ],
  "id": 1
}
```

### Response

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "userOperation": {
      "sender": "0x...",
      "nonce": "0x0",
      "callData": "0x..."
    },
    "entryPoint": "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
    "blockNumber": "0x...",
    "blockHash": "0x...",
    "transactionHash": "0x..."
  }
}
```

***

## eth\_supportedEntryPoints

Returns the list of EntryPoint contracts supported on the current chain.

### Request

```json
{
  "jsonrpc": "2.0",
  "method": "eth_supportedEntryPoints",
  "params": [],
  "id": 1
}
```

### Response

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": [
    "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
    "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
    "0x433709009B8330FDa32311DF1C2AFA402eD8D009"
  ]
}
```
