<!-- tempo-docs-context -->
> Source: [/docs/accounts/create](https://tempo.xyz/developers/docs/accounts/create.md)
> Section: [Accounts](https://tempo.xyz/developers/docs/accounts.md). Create accounts, connect wallets, read balances, send and receive payments, and reconcile deposits.
> [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.

# Create an account

Create a Tempo account for your backend or your customers. Choose a signer, derive the account address, and save the public details your application needs.

## Choose a signer

| Who authorizes transactions | Start here |
| --- | --- |
| Your backend sends payouts or moves business funds | Use a [wallet provider](https://tempo.xyz/developers/docs/accounts/providers) or [backend signing key](#create-an-account-from-a-signing-key). |
| Customers approve transactions inside your application | Use an [embedded wallet provider](https://tempo.xyz/developers/docs/accounts/providers) or [passkey account](#create-a-passkey-account). |
| Customers approve transactions in a wallet they already use | [Connect their wallet](https://tempo.xyz/developers/docs/accounts/integrate). |

The account address is derived from its root public key. Store the address against the corresponding customer or business record in your application.

<span id="try-a-passkey-account" />

## Create the account

Create a passkey for this site and inspect its account address. Use the [signing-key example](#create-an-account-from-a-signing-key) for backend signing, or the [passkey example](#create-a-passkey-account) to build this browser flow into your application.

In the interactive web page, create a passkey account or reconnect an existing passkey, inspect and copy its address, and disconnect. Creating the account does not move or fund stablecoins.

### Create an account from a signing key

Use the [CLI, Viem, and Wagmi setup](https://tempo.xyz/developers/docs/accounts/examples#choose-your-tools) to create a local signer or connect a customer wallet. Python needs `python -m pip install eth-account`:

:::code-group
```ts [Viem]
import { generatePrivateKey } from 'viem/accounts'
import { Account } from 'viem/tempo'

const privateKey = generatePrivateKey()
const account = Account.fromSecp256k1(privateKey)
console.log(account.address)
```

```bash [CLI]
cast wallet new
```

```tsx [Wagmi]
import { useConnect, useConnectors } from 'wagmi'
const { mutate: connect } = useConnect()
const connector = useConnectors().find((item) => item.id === 'xyz.tempo')
const connectWallet = () => connector && connect({ connector })
```

```python [Python]
from eth_account import Account

account = Account.create()
print(account.address)
```
:::

Wagmi uses the configured Tempo Wallet connector: call `connectWallet` from a button inside your React component. The wallet creates or selects the account. CLI and Viem generate a key locally.

Creating a key is a local operation; there is no hosted create-account endpoint. Use a [wallet provider](https://tempo.xyz/developers/docs/accounts/providers) if your application delegates key management.

This example creates a new key each time it runs. To keep the account, save the key in your application's secret storage and load it when constructing the signer.

For a signer that uses raw P-256 keys, use `Account.fromP256` with `P256.randomPrivateKey()` from `viem/tempo`. Choose the method your signing environment supports:

| Signing method | What it means |
| --- | --- |
| secp256k1 | The ECDSA curve commonly used by Ethereum wallets. |
| P-256 | Another ECDSA curve, supported by many device and platform signing systems. |
| WebAuthn | A passkey authentication ceremony that uses P-256 signatures and additional authentication data. |

ECDSA is the signature algorithm; secp256k1 and P-256 are curves. WebAuthn wraps a P-256 signature with authentication data. See the [signature specification](https://tempo.xyz/developers/docs/protocol/transactions/spec-tempo-transaction#signature-types) for each encoding.

### Create a passkey account

This browser example uses WebAuthn to create a passkey and derives a Tempo account from its public key. It uses the same Viem package.

Run this code from a user action, such as a **Create account** button, on an HTTPS origin or localhost:

```ts [Viem]
import { Account, WebAuthnP256 } from 'viem/tempo'

const credential = await WebAuthnP256.createCredential({
  label: 'My Tempo account',
  userId: crypto.getRandomValues(new Uint8Array(32)),
})
const account = Account.fromWebAuthnP256(credential)
```

The [complete passkey function](https://tempo.xyz/developers/docs/accounts/examples#passkey-creation) returns the account and public credential details. Passkey creation uses browser WebAuthn; CLI requests cannot trigger the user’s authenticator. React applications can call this same Viem function from a button; Wagmi manages the wallet connection rather than creating raw passkeys.

Save the credential ID and public key in the customer's account record. On a later visit, pass them to `Account.fromWebAuthnP256` to reconnect the signer. Signing still requires access to the original passkey and the same WebAuthn relying-party configuration.

The passkey signs Tempo transaction requests; your application handles customer login. For a device or application session, authorize a [limited access key](https://tempo.xyz/developers/docs/accounts/access-keys) with the permissions it needs.

<span id="fund-and-use-the-account" />

## Get its address

Read `account.address` from either example and save it against the corresponding customer or business record. Do not store private keys in that record.

Choose the [network](https://tempo.xyz/developers/docs/quickstart/connection-details) before requesting funds. Use the [faucet](https://tempo.xyz/developers/docs/quickstart/faucet) for Moderato testnet, or a [funding path](https://tempo.xyz/developers/docs/guide/getting-funds) for mainnet.

Then [read the balance](https://tempo.xyz/developers/docs/accounts/balances) and [send a payment](https://tempo.xyz/developers/docs/guide/payments/send-a-payment).
