# Wallet integration overview

> Connect any embedded wallet or key management solution to Wallet APIs.

> For the complete documentation index, see [llms.txt](/docs/llms.txt).

A **signer** is the service or key that controls a wallet — it authenticates users and signs transactions on their behalf. Wallet APIs are signer-agnostic: anything that produces a valid signature works.

<Note>
  Wallet APIs work with embedded wallets and server-managed keys. External browser wallets (MetaMask, Rabby, Ledger) are not yet supported.
</Note>

## Recommended: Privy

For most teams, we recommend **[Privy](/docs/wallets/third-party/signers/privy)** as the embedded wallet provider. Privy handles key creation, social/email login, and recovery, and exposes a viem `LocalAccount` that drops straight into `createSmartWalletClient`.

<Card title="Privy integration guide" icon="bolt" href="/docs/wallets/third-party/signers/privy">
  Step-by-step setup for Privy with Wallet APIs.
</Card>

## Bring your own signer

Already have an auth stack or key custody solution? Plug it in directly. Any signer that implements viem's [`LocalAccount`](https://viem.sh/docs/accounts/local) or [`WalletClient`](https://viem.sh/docs/clients/wallet) interface works with `createSmartWalletClient` — no extra adapters.

```ts
import { privateKeyToAccount } from "viem/accounts";
import { arbitrumSepolia } from "viem/chains";
import { createSmartWalletClient, alchemyWalletTransport } from "@alchemy/wallet-apis";

const client = createSmartWalletClient({
  signer: privateKeyToAccount("0xYOUR_PRIVATE_KEY"),
  transport: alchemyWalletTransport({ apiKey: "YOUR_ALCHEMY_API_KEY" }),
  chain: arbitrumSepolia,
});
```

Common signers that work out of the box:

| Provider | Type | Guide |
|----------|------|-------|
| Privy | Embedded wallet (recommended) | [Guide →](/docs/wallets/third-party/signers/privy) |
| Turnkey | Key management | [Guide →](/docs/wallets/third-party/signers/turnkey) |
| Dynamic | Embedded wallet | [Guide →](/docs/wallets/third-party/signers/custom-integration) |
| Openfort | Embedded wallet | [Guide →](/docs/wallets/third-party/signers/openfort) |
| Custom / any viem signer | Any | [Guide →](/docs/wallets/third-party/signers/custom-integration) |

## What your signer choice determines

| Concern | What it means |
|---------|---------------|
| **Onboarding UX** | Email/social login (embedded) vs. server-side key (custodial) |
| **Custody model** | Who holds the private key — user, shared (MPC), or your backend |
| **Recovery** | What happens when a user loses access to their device |

For a deeper comparison of custody models and provider trade-offs, see [Choosing a signer](/docs/wallets/signer/what-is-a-signer).

## EIP-7702 compatibility

[EIP-7702](/docs/wallets/transactions/using-eip-7702) lets an existing EOA delegate to a smart wallet — unlocking gas sponsorship, batching, and session keys without changing addresses. It's enabled by default on Wallet APIs.

<Warning>
  **EIP-7702 requires the signer to expose `signAuthorization`.** Embedded wallet providers like Privy support this. External browser and hardware wallets — MetaMask, Rabby, Ledger — do **not** support it today.
</Warning>

## Next steps

<CardGroup cols={2}>
  <Card title="Quickstart" icon="bolt" href="/docs/wallets/quickstart">
    Send your first transaction end-to-end.
  </Card>

  <Card title="Bring your own signer" icon="link" href="/docs/wallets/third-party/signers/custom-integration">
    Full guide for plugging in any viem-compatible signer.
  </Card>

  <Card title="EIP-7702" icon="chevron-up" href="/docs/wallets/transactions/using-eip-7702">
    Upgrade existing EOAs into smart accounts.
  </Card>

  <Card title="Choosing a signer" icon="book" href="/docs/wallets/signer/what-is-a-signer">
    Deep dive into custody models and provider comparison.
  </Card>
</CardGroup>