> ## Documentation Index
> Fetch the complete documentation index at: https://docs.walletkit.com/llms.txt
> Use this file to discover all available pages before exploring further.

# EOA Wallet

> Create a secure EOA wallet controlled by the user

<Steps>
  <Step title="Add WalletKit to your app">
    Get your SDK setup as usual using [Get Started](/wallets-api/overview#get-started).
  </Step>

  <Step title="Authenticate to WalletKit">
    Get your SDK authenticated or get the API key if server-side app follwoing [Authentication guide](/wallets-api/authentication/overview).
  </Step>

  <Step title="Obtain user pincode">
    In your app, ask the user for a 6-digit pincode. This pincode will be used to encrypt the user's share of the signing key.

    <Warning>
      You must never store the `user pin` on your servers.
    </Warning>
  </Step>

  <Step title="Create a EOA wallet">
    Create a wallet with the `userPin`, `controlMode` set to `user` and `type` set to `eoa`.

    <CodeGroup>
      ```typescript Typescript theme={null}
      const createWalletResp = await wk.wallets.create({
          network: Network.Base,
          name: "<walelt name>",
          ownerId: userId, // optional
          controlMode: WalletControlMode.User,
          type: WalletType.Eoa,
          userPin: "<user pin>",
      });

      if (!createWalletResp.ok) {
      // handle error
      }

      const walletAddress = createWalletResp.body.address;
      ```

      ```bash Curl theme={null}
      curl --request POST \
        --url https://testnet.walletkit.com/wallets \
        --header 'X-WalletKit-Project-ID: <Project ID>' \
        --header 'Authorization: Bearer <User Access Token or Your API Key>' \
        --data 
        '{
          "network": "Base",
          "name": "<wallet name>",
          "owner_id": "<user id>",
          "control_mode": "user",
          "type": "eoa",
          "user_pin": "<user pin>"
        }'
      ```
    </CodeGroup>

    `ownerId` is automatically set to the user id when authenticated with [email login](/wallets-api/authentication/email), you can safely ignore it in this case.
    If you are making server-side requests using your API Key, you can optionally set the owner id to a user id corresponding to your authentication system.
  </Step>
</Steps>
