# /account-abstraction/operations

{% hint style="info" %}
You need an API key for this call.\
\
Please reach out to the Blessnet team to get setup.
{% endhint %}

<mark style="color:green;">`POST`</mark>`/account-abstraction/operations`

The `/account-abstraction/operations` endpoint allows the posting of ERC-4337 operations to abstract accounts via the singleton on-chain entrypoint.

### **Headers**

| Name        | Value        |
| ----------- | ------------ |
| `x-api-key` | Your API key |

### **Params**

<table><thead><tr><th width="215">Name</th><th width="130">Mandatory?</th><th width="119">Default</th><th>Value</th></tr></thead><tbody><tr><td><code>chain</code></td><td>No</td><td><code>mainnet</code></td><td>The chain type we are working with, either <code>mainnet</code> or <code>sepolia</code></td></tr></tbody></table>

### Request Body

* required: true
* content: application/json:&#x20;
* schema:&#x20;

  * `type: array`&#x20;

  ```postman_json
  {
    "ops": [
      {
        "account": <the account the operations is for>,
        "target": <the address target for the call>,
        "calldata": <the calldata to pass to the target>,
      }
    ]
  }
  ```
* description: An array of valid operations.

### **Response Body**

| Name               | Type       | Description                                                               |
| ------------------ | ---------- | ------------------------------------------------------------------------- |
| `message`          | `string`   | Message response from the endpoint                                        |
| `requestOwner`     | `array`    | The owner of the API key that made the operation request.                 |
| `for`              | `array`    | Array of operations requested, with account, target and calldata for each |
| `destinationChain` | `number`   | The target chain for the operation                                        |
| `deliveryIds`      | `string[]` | Unique Ids for the execution of the operations.                           |

### **Example Request**

```
POST /account-abstraction/operations?chain=sepolia HTTP/1.1
Host: api.bless.net
x-api-key: <>
Content-Type: application/json
Content-Length: 763

{
  "ops": [
    {
      "account": "0xa8C46f79c72DbfE885e54b5527002c515F860875",
      "target": "0x4995423334127293b31d8c810Bb183809f82Be55",
      "calldata": "0x62a61351000000000000000000000000a8C46f79c72DbfE885e54b5527002c515F860875000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
    }
  ]
}
```

### **Response**

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

```json
{
    "message": "Ops requested",
    "requestOwner": "omnus",
    "for": [
        {
            "account": "0xa8C46f79c72DbfE885e54b5527002c515F860875",
            "target": "0x4995423334127293b31d8c810Bb183809f82Be55",
            "calldata": "0x62a61351000000000000000000000000a8C46f79c72DbfE885e54b5527002c515F860875000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
        }
    ],
    "destinationChain": 11145513,
    "deliveryIds": ["67c8c05d179b8cbc49505f4e"]
}
```

{% endtab %}

{% tab title="400" %}

```json
{
  "message": "Please provide chainId and delegate address as query parameters."
}
```

{% endtab %}
{% endtabs %}

### Example uses

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

<pre class="language-typescript"><code class="lang-typescript"><strong>import ethers from "ethers"
</strong><strong>
</strong><strong>const interface = new ethers.Interface(myABI)
</strong>const calldata = interface.encodeFunctionData("myFunction", [arg1, arg2])
const ops = [{
    account: myUserAccount,
    target: myContract,
    calldata,
}]

fetch("https://api.bless.net/account-abstraction/operations", {
    method: "POST",
    body: { ops }
})
</code></pre>

{% endtab %}

{% tab title="viem" %}

```typescript
import { encodeFunctionData } from "viem"

const interface = new ethers.Interface(myABI)
const calldata = encodeFunctionData({
    abi: myABI,
    args: [arg1, arg2],
    functionName: "myFunction",
})
const ops = [{
    account: myUserAccount,
    target: myContract,
    calldata,
}]

fetch("https://api.bless.net/account-abstraction/operations", {
    method: "POST",
    body: { ops }
})
```

{% 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.bless.net/blessnet-api/account-abstraction-operations.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.
