> **Can't find what you're looking for?** Use `search_docs` on the docs MCP server at `https://ensforge.com/api/mcp` to find what you need.

# Sending calls

ENS `.call(...)` methods describe work without sending a transaction. Pass those calls to
`executeHcaCalls` to execute them as the HCA. Raw `{ to, data, value }` calls are also accepted where
the account and authorization permit them.

## Send through the owner

First [deploy the account and grant resolver permission](/hca/guides/accounts). Without an
`execution` adapter, the SDK sends through the configured owner wallet.

:::code-group
```ts [owner-calls.ts]
// [!include ~/snippets/hca/guides/owner-calls.ts]
```

```ts [account.ts]
// [!include ~/snippets/hca/guides/account.ts]
```

```ts [client.ts]
// [!include ~/snippets/hca/guides/client.ts]
```
:::

The owner pays transaction gas. An HCA value transfer spends the HCA's balance. ENS registration
prices and any tokens consumed by a call are separate from execution gas.

## Add a provider

Pass `execution` to use [Pimlico](/hca/pimlico/usage) or [Rhinestone](/hca/rhinestone/usage).
Pimlico uses owner authorization. Rhinestone uses an enabled session and its confirmed enable
transaction. A session cannot be used with the direct owner path.

## Review and batch

Prepare a plan before submitting if your application needs a review screen. A batch can contain
multiple ENS intents; the HCA must be authorized for every record in the batch.

```ts [review.ts]
import { hca, salt } from "./account";
import { sdk } from "./client";

const plan = await sdk.hca.prepareHcaCalls({
  hca,
  salt,
  authorization: { kind: "owner" },
  calls: [
    sdk.records.setText.call({ name: "your-name.eth", key: "description", value: "My app" }),
    sdk.records.setText.call({ name: "your-name.eth", key: "url", value: "https://example.com" }),
  ],
});
```

`executeHcaCalls` prepares the inputs again; it does not take this plan as a parameter. Provider
adapters also review fees, calls and authorization before obtaining a signature.

## Confirm or reconcile

A submission reference is not a successful execution. Inspect the status returned by
`waitForHcaExecution`. If observation times out, call `getHcaExecutionStatus` with the saved submission
and the same adapter. Do not create another submission just because the first wait ended.

Use dedicated actions for [deposits](/sdk/api/hca/add-hca-deposit),
[withdrawals](/sdk/api/hca/withdraw-hca-deposit) and [upgrades](/sdk/api/hca/upgrade-hca).
Generic self-calls and arbitrary module installation are not supported by this account generation.

For a different execution provider, see [Custom adapters](/hca/api/create-execution-adapter).
