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

# Company Wallets quickstart

> Get from zero to a signed transaction with Turnkey's Company Wallets. Initialize the server SDK, create a wallet, and sign your first Ethereum transaction using Viem or Ethers.

export const SolutionCard = ({title, description, icon, href}) => {
  return <a href={href} className="not-prose font-normal group ring-0 ring-transparent cursor-pointer block rounded-lg border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-transparent p-5 no-underline hover:border-primary/40 transition-colors">
      <div style={{
    display: 'flex',
    alignItems: 'flex-start',
    gap: '16px'
  }}>
        <img src={`/images/solutions/light/${icon}.svg`} className="tk-card-icon-img block dark:hidden" alt="" />
        <img src={`/images/solutions/dark/${icon}.svg`} className="tk-card-icon-img hidden dark:block" alt="" />
        <div>
          <div className="font-semibold text-sm text-zinc-950 dark:text-white group-hover:text-primary transition-colors">
            {title}
          </div>
          <div className="text-sm text-zinc-500 dark:text-zinc-400 mt-1">
            {description}
          </div>
        </div>
      </div>
    </a>;
};

export const FeatureCard = ({title, description, icon, logo, href}) => {
  return <a href={href} className="not-prose font-normal group ring-0 ring-transparent cursor-pointer block rounded-lg border border-zinc-950/10 dark:border-white/10 bg-white dark:bg-transparent p-5 no-underline hover:border-primary/40 transition-colors">
      <div className="tk-card-row">
        <span className="tk-card-icon-wrap">
          {logo ? <img src={`/images/networks/${logo}.svg`} className="tk-card-network-logo" alt="" /> : <span className="tk-card-icon" style={{
    maskImage: `url(/images/icons/${icon}.svg)`,
    WebkitMaskImage: `url(/images/icons/${icon}.svg)`
  }} />}
        </span>
        <div>
          <div className="font-semibold text-sm text-zinc-950 dark:text-white group-hover:text-primary transition-colors">
            {title}
          </div>
          {description && <div className="text-sm text-zinc-500 dark:text-zinc-400 mt-1">
              {description}
            </div>}
        </div>
      </div>
    </a>;
};

## Prerequisites

This guide assumes you've completed the steps to create an account, organization, and API keypair as described in the [account setup](/get-started/quickstart) section. This guide uses the TypeScript server SDK (`@turnkey/sdk-server`). For other languages, see [Server SDKs](/sdks/introduction).

## Installation

Install the server SDK and your preferred Ethereum library:

<CodeGroup>
  ```bash Viem theme={"system"}
  npm install @turnkey/sdk-server @turnkey/viem viem
  ```

  ```bash Ethers theme={"system"}
  npm install @turnkey/sdk-server @turnkey/ethers ethers
  ```
</CodeGroup>

<Tip>
  This quickstart uses Ethereum, but Turnkey supports all EVM and SVM chains, along with Bitcoin, Tron, and [more](/features/networks/overview). To sign Solana transactions, derive a Solana address using `ADDRESS_FORMAT_SOLANA` with `CURVE_ED25519` and use [`@turnkey/solana`](https://www.npmjs.com/package/@turnkey/solana) or the server SDK's [`solSendTransaction`](/features/networks/solana) method.
</Tip>

## Sign your first transaction

<Steps>
  <Step title="Initialize the Turnkey client">
    Add your API credentials to a `.env` file:

    ```bash theme={"system"}
    TURNKEY_ORGANIZATION_ID=<your-organization-id>
    TURNKEY_API_PRIVATE_KEY=<your-api-private-key>
    TURNKEY_API_PUBLIC_KEY=<your-api-public-key>
    ```

    Then initialize the client in your application:

    ```ts theme={"system"}
    import { Turnkey } from "@turnkey/sdk-server";

    const turnkeyClient = new Turnkey({
      apiBaseUrl: "https://api.turnkey.com",
      defaultOrganizationId: process.env.TURNKEY_ORGANIZATION_ID!,
      apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!,
      apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!,
    });
    ```
  </Step>

  <Step title="Create a wallet">
    Create a wallet and derive an Ethereum address in a single call:

    ```ts theme={"system"}
    const { walletId, addresses } = await turnkeyClient.apiClient().createWallet({
      walletName: "default",
      accounts: [
        {
          curve: "CURVE_SECP256K1",
          pathFormat: "PATH_FORMAT_BIP32",
          path: "m/44'/60'/0'/0/0",
          addressFormat: "ADDRESS_FORMAT_ETHEREUM",
        },
      ],
    });

    const ethereumAddress = addresses[0];
    console.log("Ethereum address:", ethereumAddress);
    ```
  </Step>

  <Step title="Initialize a wallet signer">
    <Tabs>
      <Tab title="Viem">
        ```ts theme={"system"}
        import { createAccount } from "@turnkey/viem";
        import { createWalletClient, http } from "viem";
        import { mainnet } from "viem/chains";

        const turnkeyAccount = await createAccount({
          client: turnkeyClient.apiClient(),
          organizationId: process.env.TURNKEY_ORGANIZATION_ID!,
          signWith: ethereumAddress,
        });

        const walletClient = createWalletClient({
          account: turnkeyAccount,
          chain: mainnet,
          transport: http(),
        });
        ```
      </Tab>

      <Tab title="Ethers">
        ```ts theme={"system"}
        import { ethers } from "ethers";
        import { TurnkeySigner } from "@turnkey/ethers";

        const provider = new ethers.JsonRpcProvider("YOUR_RPC_URL");
        const turnkeySigner = new TurnkeySigner({
          client: turnkeyClient.apiClient(),
          organizationId: process.env.TURNKEY_ORGANIZATION_ID!,
          signWith: ethereumAddress,
        });
        const connectedSigner = turnkeySigner.connect(provider);
        ```
      </Tab>
    </Tabs>
  </Step>

  <Step title="Send a transaction">
    <Tabs>
      <Tab title="Viem">
        ```ts theme={"system"}
        import { parseEther } from "viem";

        const txHash = await walletClient.sendTransaction({
          to: "<destination address>",
          value: parseEther("<amount to send>"),
        });
        console.log("Transaction hash:", txHash);
        ```
      </Tab>

      <Tab title="Ethers">
        ```ts theme={"system"}
        const txHash = await connectedSigner.sendTransaction({
          to: "<destination address>",
          value: ethers.parseEther("<amount to send>"),
          type: 2,
        });
        console.log("Transaction hash:", txHash.hash);
        ```
      </Tab>
    </Tabs>
  </Step>
</Steps>

## Next steps

<div style={{display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: '12px'}}>
  <SolutionCard title="Payment Orchestration" icon="payment-orchestration" href="/solutions/company-wallets/payment-orchestration" description="Build deposit wallets, sweep automations, and treasury flows with policy-enforced access control." />

  <SolutionCard title="Smart Contract Management" icon="smart-contract-management" href="/solutions/company-wallets/smart-contract-management" description="Secure the full contract lifecycle from deployment to upgrades with granular RBAC." />

  <FeatureCard title="Policies" icon="file-shield-02" href="/features/policies/quickstart" description="Define who can sign what with Turnkey's default-deny policy engine." />

  <FeatureCard title="Server SDKs" icon="server-04" href="/sdks/introduction" description="Explore server SDKs for TypeScript, Go, Ruby, Rust, and Python." />
</div>
