<!-- tempo-docs-context -->
> Source: [/docs/accounts/wallets/add-tempo-to-your-wallet](https://tempo.xyz/developers/docs/accounts/wallets/add-tempo-to-your-wallet.md)
> Section: [Accounts](https://tempo.xyz/developers/docs/accounts.md). Create accounts, set up signing methods, policies, access keys, key rotation, and fees, and follow guides for users, automations, agents, and teams.
> [Documentation index](https://tempo.xyz/developers/llms.txt) · [Docs skill](https://tempo.xyz/developers/SKILL.md)

> Tempo MCP: Use `search`, `find_pages`, `read_page`, and `code` at `https://mcp.tempo.xyz` for Tempo and related documentation.
> If an indexed page is missing or reflects an older site, read this site’s [documentation index](https://tempo.xyz/developers/llms.txt) and Markdown pages directly.

# Add Tempo to Your Wallet

Support Tempo in your wallet, from network settings to Tempo Transactions.

## Overview

Any wallet, such as a browser extension, mobile wallet, or hardware wallet, already signs standard Ethereum transactions on Tempo. Tempo has no native gas token, so [balance checks and fee quotes need changes](https://tempo.xyz/developers/docs/quickstart/wallet-developers). [Tempo Transactions](https://tempo.xyz/developers/docs/guide/tempo-transaction) give your users stablecoin fee selection, sponsored fees, batched calls, and access keys. Everything on this page is live on mainnet and testnet.

## Setup

::::steps
### Add the Tempo Networks

Add mainnet for production and Moderato testnet for development. Both use `USD` as the currency symbol, because fees are denominated in USD.

| Network | Chain ID | HTTP RPC | WebSocket RPC | Explorer |
| --- | --- | --- | --- | --- |
| Tempo Mainnet | `4217` | `https://rpc.tempo.xyz` | `wss://rpc.tempo.xyz` | [explore.tempo.xyz](https://explore.tempo.xyz) |
| Tempo Testnet (Moderato) | `42431` | `https://rpc.moderato.tempo.xyz` | `wss://rpc.moderato.tempo.xyz` | [explore.testnet.tempo.xyz](https://explore.testnet.tempo.xyz) |

In Viem, use the `tempo` and `tempoModerato` chains from `viem/chains`.

### Show Stablecoin Balances

Don't show a native balance. `eth_getBalance` [returns a large placeholder value](https://tempo.xyz/developers/docs/quickstart/evm-compatibility#handling-eth-native-token-balance-checks) so existing balance checks don't block users. The `BALANCE` opcode returns 0. Read each stablecoin's TIP-20 balance instead. Remove any check that blocks a transaction on the native balance.

:::code-group
```ts [balance.ts]
import { client } from './client'

const balance = await client.token.getBalance({
  account: '0x742d35cc6634c0532925a3b844bc9e7595f0bebb',
  token: '0x20c0000000000000000000000000000000000001', // a Moderato test stablecoin
})
// { amount: bigint; decimals: number; formatted: string }
```

```ts [client.ts]
import { tempoModerato } from 'viem/chains'
import { Account, createClient } from 'viem/tempo'

const privateKey = process.env.TEMPO_PRIVATE_KEY
if (!privateKey || !/^0x[0-9a-fA-F]{64}$/.test(privateKey)) {
  throw new Error('Set TEMPO_PRIVATE_KEY to your funded test account private key')
}

export const client = createClient({
  account: Account.fromSecp256k1(privateKey as `0x${string}`),
  chain: tempoModerato,
  feeToken: '0x20c0000000000000000000000000000000000001',
})
```
:::

Pull token names, symbols, and icons from the [tokenlist](https://tempo.xyz/developers/docs/quickstart/tokenlist), at `tokenlist.tempo.xyz/list/4217` for mainnet and `tokenlist.tempo.xyz/list/42431` for testnet.

<span id="let-users-pay-fees-in-stablecoins" />

### Let Users Choose Fee Tokens

Each transaction pays its fee in a USD stablecoin, its [fee token](https://tempo.xyz/developers/docs/accounts/fees/fee-tokens). Quote fees in the transaction's fee token, and let users choose it in your confirmation screen or account settings. Pass `feeToken` for one transaction, or set the account's default with `setUserTokenSync`.

:::code-group
```ts [fee-token.ts]
import { client } from './client'

// Pay this transaction's fee in a different stablecoin
await client.token.transferSync({
  amount: { formatted: '100' },
  feeToken: '0x20c0000000000000000000000000000000000002', // [!code hl]
  to: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEbb',
  token: '0x20c0000000000000000000000000000000000001',
})

// Or set the account's default fee token
await client.fee.setUserTokenSync({
  token: '0x20c0000000000000000000000000000000000001',
})
```

```ts [client.ts]
import { tempoModerato } from 'viem/chains'
import { Account, createClient } from 'viem/tempo'

const privateKey = process.env.TEMPO_PRIVATE_KEY
if (!privateKey || !/^0x[0-9a-fA-F]{64}$/.test(privateKey)) {
  throw new Error('Set TEMPO_PRIVATE_KEY to your funded test account private key')
}

export const client = createClient({
  account: Account.fromSecp256k1(privateKey as `0x${string}`),
  chain: tempoModerato,
  feeToken: '0x20c0000000000000000000000000000000000001',
})
```
:::

Without a default, Tempo follows the [fee token precedence](https://tempo.xyz/developers/docs/accounts/fees#fee-token-precedence). It can fall back to pathUSD, a stablecoin the user might not hold. Setting a fee token for each transaction needs a Tempo Transaction.

### Send Tempo Transactions

Replace your EIP-1559 (type 2) envelope with the Tempo Transaction envelope (type `0x76`). Use a [Tempo SDK](https://tempo.xyz/developers/docs/guide/tempo-transaction#integration-guides) for TypeScript, Rust, Go, Python, or Foundry. With Tempo Transactions, your wallet can:

* [Batch calls](https://tempo.xyz/developers/docs/guide/tempo-transaction#batch-calls) that succeed or fail together, such as an approval and a swap.
* Accept [sponsored fees](https://tempo.xyz/developers/docs/accounts/fees/fee-sponsorship), so an app pays the fee for your user.
* Authorize [access keys](https://tempo.xyz/developers/docs/accounts/access-keys) that let an app or agent pay from the user's account. Each key has a spending limit, scopes, and an expiry.
* Sign with a [passkey](https://tempo.xyz/developers/docs/accounts/authentication/passkeys), and send [concurrent transactions](https://tempo.xyz/developers/docs/guide/payments/send-parallel-transactions) or [expiring nonces](https://tempo.xyz/developers/docs/guide/tempo-transaction#expiring-nonces) without tracking one nonce sequence.

If you already use EIP-7702 or EIP-4337 for batching or sponsorship, Tempo Transactions [include both in the protocol](https://tempo.xyz/developers/docs/protocol/transactions/eip-7702#feature-comparison).
::::

<span id="after-you-add-tempo" />

<span id="backup-signers-and-listing" />

## Add Backup Signers

Your users hold [single-key accounts](https://tempo.xyz/developers/docs/development/single-key-accounts), so a lost key still loses the account. A user adds backup signers at the same address through an [account upgrade](https://tempo.xyz/developers/docs/accounts/account-configuration/account-upgrade). The wallet signs it as a Tempo Transaction. Until [T14](https://tempo.xyz/developers/docs/protocol/upgrades/t14), upgrades run only on the [Tempo Accounts devnet](https://tempo.xyz/developers/docs/accounts/create#connect-to-the-devnet).

## List Your Wallet

To list your wallet in [Wallet partners](https://tempo.xyz/developers/docs/partners/wallets), [tell us about your integration](https://tempo.xyz/developers/docs/partners/join).

## Related

[Use Tempo Transactions](https://tempo.xyz/developers/docs/guide/tempo-transaction): Use for batched calls, sponsored fees, access keys, and the Tempo SDKs.

[Fee Tokens](https://tempo.xyz/developers/docs/accounts/fees/fee-tokens): Covers which stablecoin pays each transaction's fee.

[Integrating Wallet Support for Tempo](https://tempo.xyz/developers/docs/quickstart/wallet-developers): Covers balance checks and fee quotes without a native gas token.

[Account Upgrade](https://tempo.xyz/developers/docs/accounts/account-configuration/account-upgrade): Use for adding backup signers at the same address. Devnet until T14.

[Partner With Tempo](https://tempo.xyz/developers/docs/partners/join): Use for listing your wallet in Wallet partners.
