Turnkey
Wallet
Enterprise
MPC
Best for: Enterprise with strict security requirements; policy engine for automated signing rules; high-compliance environments
Not ideal for: Simple use cases where TEE overhead is unnecessary; small teams without security expertise
Key Signals
Key Management
TEE (Trusted Execution Environment)
Chain Support
EVM + Solana + BTC + 30+ chains
Integration
REST API + SDK
Features
🔒
TEE-Based Key Isolation
Private keys are generated and used exclusively inside hardware-backed Trusted Execution Environments (Intel SGX). Not even Turnkey employees can access key material — cryptographic attestation proves TEE integrity on every signing request.
📋
Programmable Policy Engine
Define granular signing rules — e.g., "allow agents to sign ERC-20 transfers under $500 automatically; require human approval above that threshold." Policies are evaluated inside the TEE before any signing occurs, enforcing rules without trusting the calling application.
🌐
30+ Chain Support
Turnkey supports EVM chains, Solana, Bitcoin, Cosmos, Sui, Aptos, and more — one of the broadest chain coverage sets in the agent wallet space. All chains share the same policy engine and API surface.
✅
SOC 2 Type II Certified
Turnkey holds SOC 2 Type II certification, providing audited assurance of security controls. Required by many enterprise and financial services customers as a procurement prerequisite.
Ratings
Security Architecture
4.9/5
Ratings based on Turnkey documentation, policy engine reference, and SOC 2 report summary — not end-to-end production testing. Ease of setup reflects the learning curve of TEE attestation and policy authoring for new teams.
Integration
npm install @turnkey/sdk-server
import { Turnkey } from "@turnkey/sdk-server";
const turnkey = new Turnkey({
apiBaseUrl: "https://api.turnkey.com",
apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!,
apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!,
defaultOrganizationId: process.env.TURNKEY_ORGANIZATION_ID!,
});
const { walletId } = await turnkey.api.createWallet({
walletName: "agent-treasury-001",
accounts: [{ curve: "CURVE_SECP256K1", pathFormat: "PATH_FORMAT_BIP32",
path: "m/44'/60'/0'/0/0", addressFormat: "ADDRESS_FORMAT_ETHEREUM" }],
});
const { signedTransaction } = await turnkey.api.signTransaction({
signWith: walletAddress,
unsignedTransaction: serializedTx,
type: "TRANSACTION_TYPE_ETHEREUM",
});