From aa679ac42f41883dcc73cc4ffe0bfde282913b0d Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 11:40:19 -0600 Subject: [PATCH 01/47] EBW first stab --- docs.json | 3 +- .../embedded-business-wallets/overview.mdx | 234 ++++++++++++++++++ 2 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 products/embedded-business-wallets/overview.mdx diff --git a/docs.json b/docs.json index ee68eeca..dcecbf70 100644 --- a/docs.json +++ b/docs.json @@ -222,7 +222,8 @@ ] } ] - } + }, + "products/embedded-business-wallets/overview" ] }, { diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx new file mode 100644 index 00000000..706f81b8 --- /dev/null +++ b/products/embedded-business-wallets/overview.mdx @@ -0,0 +1,234 @@ +--- +title: "Embedded Business Wallets" +description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." +--- + +> Traditional enterprise wallet solutions force organizations to choose between security and usability. Multisig wallets provide security through multiple approvals but are operationally complex and slow. Centralized treasury tools offer convenience but create single points of failure. Turnkey's Embedded Business Wallets eliminate this tradeoff by combining programmable policy controls with a seamless operational experience. + +## Why Embedded Business Wallets? + +Embedded wallets are typically associated with consumer applications, where each end user gets their own wallet. But the same infrastructure that powers millions of consumer wallets is equally powerful for internal enterprise use cases: + +- **Treasury management**: Centralize organizational funds with granular access controls +- **Payroll and contractor payments**: Automate recurring disbursements without manual signing +- **Vendor payments**: Maintain contact lists and streamline accounts payable workflows +- **Operational wallets**: Delegate specific payment authorities to teams or individuals + +With Turnkey, you get the security benefits of multisig (multiple approvals, separation of duties) combined with the programmability and automation that traditional multisig solutions lack. + +## Multisig Security, Without the Multisig Complexity + +Traditional multisig wallets require coordinating multiple signers for every transaction. This creates operational friction: + +- Signers must be available simultaneously +- Gas costs increase with signature count +- Adding or removing signers requires on-chain transactions +- No granular control over what transactions require approval + +Turnkey's policy engine delivers equivalent security guarantees with superior flexibility: + +``` +┌─────────────────────────────────────────────────────────────────────────┐ +│ TRADITIONAL MULTISIG │ +│ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ Signer │ + │ Signer │ + │ Signer │ → On-chain execution │ +│ │ A │ │ B │ │ C │ │ +│ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +│ • All signers required for every transaction │ +│ • No conditional logic │ +│ • On-chain coordination overhead │ +└─────────────────────────────────────────────────────────────────────────┘ + +┌─────────────────────────────────────────────────────────────────────────┐ +│ TURNKEY POLICY ENGINE │ +│ │ +│ ┌─────────────────────────────────────────────────────────────┐ │ +│ │ POLICY RULES │ │ +│ │ │ │ +│ │ Transaction < $1,000 → Single approval (Operator) │ │ +│ │ Transaction < $10,000 → Two approvals (Finance team) │ │ +│ │ Transaction >= $10,000 → CFO + CEO approval │ │ +│ │ Recipient in allowlist → Auto-approve │ │ +│ │ Scheduled payment → Auto-execute on date │ │ +│ └─────────────────────────────────────────────────────────────┘ │ +│ │ +│ • Conditional approval requirements │ +│ • Role-based access control │ +│ • Off-chain policy evaluation, on-chain execution │ +└─────────────────────────────────────────────────────────────────────────┘ +``` + +## Key Capabilities + +### Role-Based Access Control + +Assign different permissions to different team members using user tags: + +```json +{ + "policyName": "Finance team can sign transactions up to $5,000", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('finance-team'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 5000000000000000000000" +} +``` + +| Role | Permissions | +| :--- | :--- | +| **Operator** | Sign transactions up to $1,000 to pre-approved addresses | +| **Finance** | Sign transactions up to $10,000, add recipients to allowlist | +| **Treasury** | Sign any transaction with single approval | +| **Executive** | Required for transactions over $50,000 | + +### Multi-Approval Workflows + +Require multiple approvers for high-value transactions, just like multisig, but with programmable thresholds: + +```json +{ + "policyName": "Require 2 finance approvers for transactions over $10,000", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" +} +``` + +Unlike on-chain multisig: +- Add or remove approvers instantly (no on-chain transactions) +- Different approval requirements for different transaction types +- Approval collection happens off-chain (no coordination overhead) + +### Delegated Permissions + +Grant specific, limited permissions to individuals or teams without giving them full wallet access: + +```json +{ + "policyName": "Contractor can withdraw up to $500/day to their registered address", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.to == '' && eth.tx.value <= 500000000000000000000" +} +``` + +Use cases: +- **Petty cash**: Operators can make small purchases without approval +- **Contractor advances**: Allow contractors to withdraw earned funds +- **Department budgets**: Each department controls their allocation + +### Recipient Allowlists + +Maintain a contact list of approved payment recipients. Payments to allowlisted addresses can be auto-approved or require fewer approvals: + +```json +{ + "policyName": "Auto-approve payments to verified vendors", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('finance-team'))", + "condition": "eth.tx.to in ['', '', '']" +} +``` + +Common patterns: +- Vendor payment addresses (accounts payable) +- Contractor wallet addresses (payroll) +- Exchange deposit addresses (treasury operations) +- Internal wallet addresses (inter-account transfers) + +### Automated Scheduled Payments + +Set up recurring payments that execute automatically based on your policy rules: + + + + Configure recurring payments in your application: amount, recipient, frequency (weekly, monthly, etc.). + + + Create a policy that allows your backend service to sign scheduled transactions: + + ```json + { + "policyName": "Backend can execute scheduled payroll", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to in ['', '', ''] && eth.tx.value <= 10000000000000000000000" + } + ``` + + + Your backend triggers payments on schedule. No manual signing required for pre-approved recipients and amounts. + + + +Example: Pay contractors on the last business day of each month for the next 6 months, without requiring manual approval for each payment. + +### Spending Controls + +Implement organizational spending limits and controls that would be impossible with traditional wallets: + +| Control Type | Example | +| :--- | :--- | +| **Per-transaction limits** | No single transaction over $50,000 | +| **Daily/weekly limits** | Maximum $100,000 in outflows per day | +| **Recipient restrictions** | Only send to verified addresses | +| **Time-based controls** | No transactions outside business hours | +| **Asset restrictions** | Only USDC transfers from this wallet | + +## Real-World Implementation: Mural Pay + +[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments) demonstrates how Turnkey's infrastructure powers enterprise-grade payment operations at scale. + +### The Challenge + +Mural Pay needed to simplify cryptocurrency payments for non-crypto-native organizations. Their platform initially required users to understand blockchain mechanics, limiting their addressable market. + +### The Solution + +By integrating Turnkey's wallet infrastructure, Mural Pay delivers a fintech-like payment experience: + +- **Simplified authentication**: Non-custodial embedded wallets via passkey or email, eliminating seed phrase management +- **Secure infrastructure**: Turnkey's secure enclaves protect organizational funds +- **High-speed transactions**: 50-100ms transaction signing for seamless payment experiences + +### The Results + +| Metric | Value | +| :--- | :--- | +| Monthly stablecoin payments | 5,000+ | +| Transaction volume (12 months) | $200M+ | +| Monthly infrastructure savings | $3,000 | +| Integration time | 3 weeks | + +> "Turnkey strikes that rare balance between uncompromising security and an intuitive user experience." +> +> Chris Fernandes, Co-founder and CTO, Mural Pay + +## Getting Started + + + + Sign up for Turnkey and create your parent organization. This will be your administrative control plane. + + + Create one or more wallets for your business operations: treasury, payroll, vendor payments, etc. + + + Create user tags that represent roles in your organization (finance, operations, executive, etc.). + + + Write policies that encode your approval workflows and spending controls. + + + Integrate Turnkey's API to build payment workflows, approval interfaces, and automation. + + + +## Resources + +- [Policy Engine Overview](/concepts/policies/overview): Learn the fundamentals of Turnkey policies +- [Access Control Examples](/concepts/policies/examples/access-control): Sample RBAC policies +- [Signing Control Examples](/concepts/policies/examples/signing-control): Policies for transaction signing +- [Transaction Automation](/signing-automation/overview): Building automated signing workflows +- [Mural Pay Case Study](https://www.turnkey.com/customers/mural-pay-cross-border-payments): Enterprise payments at scale From 587c686102a00b367253cb084230c405f1b17bbf Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 11:50:32 -0600 Subject: [PATCH 02/47] Update language --- .../embedded-business-wallets/overview.mdx | 210 ++++-------------- 1 file changed, 48 insertions(+), 162 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 706f81b8..c6c09090 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -3,232 +3,118 @@ title: "Embedded Business Wallets" description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." --- -> Traditional enterprise wallet solutions force organizations to choose between security and usability. Multisig wallets provide security through multiple approvals but are operationally complex and slow. Centralized treasury tools offer convenience but create single points of failure. Turnkey's Embedded Business Wallets eliminate this tradeoff by combining programmable policy controls with a seamless operational experience. +## Embedded Business Wallets -## Why Embedded Business Wallets? +Manage organizational wallets with programmable controls. Define approval workflows, spending limits, and access policies. Private keys stay in hardware-backed enclaves. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. -Embedded wallets are typically associated with consumer applications, where each end user gets their own wallet. But the same infrastructure that powers millions of consumer wallets is equally powerful for internal enterprise use cases: +## Why Turnkey for Embedded Business Wallets? -- **Treasury management**: Centralize organizational funds with granular access controls -- **Payroll and contractor payments**: Automate recurring disbursements without manual signing -- **Vendor payments**: Maintain contact lists and streamline accounts payable workflows -- **Operational wallets**: Delegate specific payment authorities to teams or individuals +Business wallets are organization-controlled wallets for internal operations: treasury, payroll, vendor payments, and operational funds. Unlike consumer wallets where each end user owns their wallet, business wallets require coordinated access across teams with configurable approval requirements. -With Turnkey, you get the security benefits of multisig (multiple approvals, separation of duties) combined with the programmability and automation that traditional multisig solutions lack. +Turnkey runs wallet infrastructure for business operations. Create wallets for your organization. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private keys stay in hardware-backed enclaves, secured through Turnkey's [verifiable security architecture](/security/our-approach). -## Multisig Security, Without the Multisig Complexity +Use the policy engine to encode your approval workflows. No smart contract deployments. No on-chain coordination. Update rules instantly. -Traditional multisig wallets require coordinating multiple signers for every transaction. This creates operational friction: +## Typical use cases -- Signers must be available simultaneously -- Gas costs increase with signature count -- Adding or removing signers requires on-chain transactions -- No granular control over what transactions require approval +| Need | Turnkey solution | +| :--- | :--- | +| Treasury management | Centralized funds with role-based access and multi-approval requirements | +| Payroll automation | Scheduled payments to allowlisted recipients without manual signing | +| Vendor payments | Contact lists with pre-approved addresses and spending limits | +| Delegated spending | Grant limited payment authority to teams or individuals | +| Multi-approval workflows | Require 2+ approvers for high-value transactions | +| Spending controls | Per-transaction limits, daily caps, recipient restrictions | -Turnkey's policy engine delivers equivalent security guarantees with superior flexibility: +## Core capabilities -``` -┌─────────────────────────────────────────────────────────────────────────┐ -│ TRADITIONAL MULTISIG │ -│ │ -│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ -│ │ Signer │ + │ Signer │ + │ Signer │ → On-chain execution │ -│ │ A │ │ B │ │ C │ │ -│ └─────────┘ └─────────┘ └─────────┘ │ -│ │ -│ • All signers required for every transaction │ -│ • No conditional logic │ -│ • On-chain coordination overhead │ -└─────────────────────────────────────────────────────────────────────────┘ - -┌─────────────────────────────────────────────────────────────────────────┐ -│ TURNKEY POLICY ENGINE │ -│ │ -│ ┌─────────────────────────────────────────────────────────────┐ │ -│ │ POLICY RULES │ │ -│ │ │ │ -│ │ Transaction < $1,000 → Single approval (Operator) │ │ -│ │ Transaction < $10,000 → Two approvals (Finance team) │ │ -│ │ Transaction >= $10,000 → CFO + CEO approval │ │ -│ │ Recipient in allowlist → Auto-approve │ │ -│ │ Scheduled payment → Auto-execute on date │ │ -│ └─────────────────────────────────────────────────────────────┘ │ -│ │ -│ • Conditional approval requirements │ -│ • Role-based access control │ -│ • Off-chain policy evaluation, on-chain execution │ -└─────────────────────────────────────────────────────────────────────────┘ -``` +**Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. + +**Role-based access control**: Assign permissions via user tags. Finance team signs up to $10k. Executives required above $50k. Operators handle day-to-day transactions. + +**Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. -## Key Capabilities +**Automated scheduled payments**: Backend services sign recurring transactions (payroll, subscriptions) based on policy rules. No manual intervention required. -### Role-Based Access Control +**Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. -Assign different permissions to different team members using user tags: +## Policy examples + +### Role-based signing limits ```json { - "policyName": "Finance team can sign transactions up to $5,000", + "policyName": "Finance team can sign transactions up to $10,000", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.tags.contains('finance-team'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 5000000000000000000000" + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 10000000000000000000000" } ``` -| Role | Permissions | -| :--- | :--- | -| **Operator** | Sign transactions up to $1,000 to pre-approved addresses | -| **Finance** | Sign transactions up to $10,000, add recipients to allowlist | -| **Treasury** | Sign any transaction with single approval | -| **Executive** | Required for transactions over $50,000 | - -### Multi-Approval Workflows - -Require multiple approvers for high-value transactions, just like multisig, but with programmable thresholds: +### Multi-approval for high-value transactions ```json { - "policyName": "Require 2 finance approvers for transactions over $10,000", + "policyName": "Require 2 approvers for transactions over $10,000", "effect": "EFFECT_ALLOW", "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" } ``` -Unlike on-chain multisig: -- Add or remove approvers instantly (no on-chain transactions) -- Different approval requirements for different transaction types -- Approval collection happens off-chain (no coordination overhead) - -### Delegated Permissions - -Grant specific, limited permissions to individuals or teams without giving them full wallet access: +### Automated payments to allowlisted recipients ```json { - "policyName": "Contractor can withdraw up to $500/day to their registered address", + "policyName": "Backend can execute scheduled payroll", "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.to == '' && eth.tx.value <= 500000000000000000000" + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to in ['', '', ''] && eth.tx.value <= 10000000000000000000000" } ``` -Use cases: -- **Petty cash**: Operators can make small purchases without approval -- **Contractor advances**: Allow contractors to withdraw earned funds -- **Department budgets**: Each department controls their allocation - -### Recipient Allowlists - -Maintain a contact list of approved payment recipients. Payments to allowlisted addresses can be auto-approved or require fewer approvals: - -```json -{ - "policyName": "Auto-approve payments to verified vendors", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('finance-team'))", - "condition": "eth.tx.to in ['', '', '']" -} -``` - -Common patterns: -- Vendor payment addresses (accounts payable) -- Contractor wallet addresses (payroll) -- Exchange deposit addresses (treasury operations) -- Internal wallet addresses (inter-account transfers) - -### Automated Scheduled Payments - -Set up recurring payments that execute automatically based on your policy rules: - - - - Configure recurring payments in your application: amount, recipient, frequency (weekly, monthly, etc.). - - - Create a policy that allows your backend service to sign scheduled transactions: - - ```json - { - "policyName": "Backend can execute scheduled payroll", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to in ['', '', ''] && eth.tx.value <= 10000000000000000000000" - } - ``` - - - Your backend triggers payments on schedule. No manual signing required for pre-approved recipients and amounts. - - - -Example: Pay contractors on the last business day of each month for the next 6 months, without requiring manual approval for each payment. - -### Spending Controls - -Implement organizational spending limits and controls that would be impossible with traditional wallets: - -| Control Type | Example | -| :--- | :--- | -| **Per-transaction limits** | No single transaction over $50,000 | -| **Daily/weekly limits** | Maximum $100,000 in outflows per day | -| **Recipient restrictions** | Only send to verified addresses | -| **Time-based controls** | No transactions outside business hours | -| **Asset restrictions** | Only USDC transfers from this wallet | - -## Real-World Implementation: Mural Pay - -[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments) demonstrates how Turnkey's infrastructure powers enterprise-grade payment operations at scale. - -### The Challenge - -Mural Pay needed to simplify cryptocurrency payments for non-crypto-native organizations. Their platform initially required users to understand blockchain mechanics, limiting their addressable market. - -### The Solution +See [Policy Language](/concepts/policies/language) for the full policy syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. -By integrating Turnkey's wallet infrastructure, Mural Pay delivers a fintech-like payment experience: +## Trusted by leading businesses -- **Simplified authentication**: Non-custodial embedded wallets via passkey or email, eliminating seed phrase management -- **Secure infrastructure**: Turnkey's secure enclaves protect organizational funds -- **High-speed transactions**: 50-100ms transaction signing for seamless payment experiences +Turnkey's infrastructure powers enterprise payment operations at scale. See [Turnkey Customers](https://www.turnkey.com/customers) for more examples. -### The Results +**[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments)**: Cross-border stablecoin payments for non-crypto-native organizations. | Metric | Value | | :--- | :--- | | Monthly stablecoin payments | 5,000+ | | Transaction volume (12 months) | $200M+ | -| Monthly infrastructure savings | $3,000 | | Integration time | 3 weeks | > "Turnkey strikes that rare balance between uncompromising security and an intuitive user experience." > > Chris Fernandes, Co-founder and CTO, Mural Pay -## Getting Started +## Implementation workflow - Sign up for Turnkey and create your parent organization. This will be your administrative control plane. + Sign up for Turnkey and create your parent organization. This serves as your administrative control plane. - Create one or more wallets for your business operations: treasury, payroll, vendor payments, etc. + Create wallets for your business operations: treasury, payroll, vendor payments. See [Wallets Concept](/concepts/wallets) for HD wallet structure. - Create user tags that represent roles in your organization (finance, operations, executive, etc.). + Create user tags representing roles in your organization (finance, operations, executive). Add users and assign appropriate tags. - Write policies that encode your approval workflows and spending controls. + Write policies encoding your approval workflows and spending controls. See [Policy Quickstart](/concepts/policies/quickstart) for setup guidance. - - Integrate Turnkey's API to build payment workflows, approval interfaces, and automation. + + Integrate Turnkey's API to build approval interfaces, payment automation, and operational dashboards. See [Transaction Automation](/signing-automation/overview) for backend signing patterns. ## Resources -- [Policy Engine Overview](/concepts/policies/overview): Learn the fundamentals of Turnkey policies +- [Policy Engine Overview](/concepts/policies/overview): Fundamentals of Turnkey policies - [Access Control Examples](/concepts/policies/examples/access-control): Sample RBAC policies -- [Signing Control Examples](/concepts/policies/examples/signing-control): Policies for transaction signing +- [Signing Control Examples](/concepts/policies/examples/signing-control): Transaction signing policies +- [Delegated Access](/concepts/policies/delegated-access-overview): Backend automation patterns - [Transaction Automation](/signing-automation/overview): Building automated signing workflows -- [Mural Pay Case Study](https://www.turnkey.com/customers/mural-pay-cross-border-payments): Enterprise payments at scale From 59cdede37769bcdcdfaa64fd5bc24b2b9ded7ddd Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 11:56:32 -0600 Subject: [PATCH 03/47] Add examples back --- .../embedded-business-wallets/overview.mdx | 111 +++++++++++++++--- 1 file changed, 97 insertions(+), 14 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index c6c09090..fc8827e5 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,9 +9,9 @@ Manage organizational wallets with programmable controls. Define approval workfl ## Why Turnkey for Embedded Business Wallets? -Business wallets are organization-controlled wallets for internal operations: treasury, payroll, vendor payments, and operational funds. Unlike consumer wallets where each end user owns their wallet, business wallets require coordinated access across teams with configurable approval requirements. +The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. -Turnkey runs wallet infrastructure for business operations. Create wallets for your organization. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private keys stay in hardware-backed enclaves, secured through Turnkey's [verifiable security architecture](/security/our-approach). +Turnkey runs wallet infrastructure for business operations. Create wallets for your organization. Optionally define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private keys stay in hardware-backed enclaves, secured through Turnkey's [verifiable security architecture](/security/our-approach). Use the policy engine to encode your approval workflows. No smart contract deployments. No on-chain coordination. Update rules instantly. @@ -38,42 +38,125 @@ Use the policy engine to encode your approval workflows. No smart contract deplo **Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. -## Policy examples +## Example: Contractor and vendor payments -### Role-based signing limits +Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements or other payments. + +**Set up recipient allowlist policy:** + +```json +{ + "policyName": "Auto-approve payments to verified vendors", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('accounts-payable'))", + "condition": "eth.tx.to in ['', '', '']" +} +``` + +Payments to known recipients execute with single approval. Add new vendors by updating the policy. No on-chain changes required. + +## Example: Scheduled recurring payments + +Set up automated payments that execute on a schedule without manual signing. Pay contractors on the last business day of each month for the next 6 months. + + + + Define recurring payments in your application: recipient, amount, frequency, duration. + + + Allow your backend service to sign transactions to specific recipients up to specified amounts: + + ```json + { + "policyName": "Backend can execute monthly contractor payments", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to in ['', ''] && eth.tx.value <= 5000000000000000000000" + } + ``` + + + Your backend executes payments when due. No manual approval required for pre-authorized recipients and amounts. + + + +## Example: Delegated spending authority + +Grant limited payment permissions to individuals or teams without giving full wallet access. + +### Petty cash for operators + +```json +{ + "policyName": "Operators can make small purchases", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('operator'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 500000000000000000000" +} +``` + +### Contractor self-service withdrawals + +```json +{ + "policyName": "Contractor can withdraw earned funds to registered address", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to == '' && eth.tx.value <= 2000000000000000000000" +} +``` + +### Department budgets + +Assign each department a spending limit. Marketing can spend up to $25k without executive approval: ```json { - "policyName": "Finance team can sign transactions up to $10,000", + "policyName": "Marketing team budget authority", "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('finance-team'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 10000000000000000000000" + "consensus": "approvers.any(user, user.tags.contains('marketing-team'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 25000000000000000000000" } ``` -### Multi-approval for high-value transactions +## Example: Multi-approval workflows + +Require multiple approvers for high-value or sensitive transactions. + +### Two finance approvers for large payments ```json { - "policyName": "Require 2 approvers for transactions over $10,000", + "policyName": "Require 2 finance approvers for transactions over $10,000", "effect": "EFFECT_ALLOW", "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" } ``` -### Automated payments to allowlisted recipients +### Executive approval for major transactions ```json { - "policyName": "Backend can execute scheduled payroll", + "policyName": "CFO required for transactions over $50,000", "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to in ['', '', ''] && eth.tx.value <= 10000000000000000000000" + "consensus": "approvers.any(user, user.tags.contains('cfo'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 50000000000000000000000" } ``` -See [Policy Language](/concepts/policies/language) for the full policy syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. +## Example: Spending controls + +Implement organizational controls beyond simple approval requirements. + +| Control | Policy approach | +| :--- | :--- | +| **Per-transaction limits** | Set `eth.tx.value` ceiling in condition | +| **Recipient restrictions** | Allowlist addresses with `eth.tx.to in [...]` | +| **Role-based limits** | Different `consensus` rules per spending tier | +| **Asset restrictions** | Filter by contract address for token transfers | + +See [Policy Language](/concepts/policies/language) for the full syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. ## Trusted by leading businesses From 2fd2a54614cef099aac43a45ce3f666f57451638 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 12:09:51 -0600 Subject: [PATCH 04/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index fc8827e5..4e9ae1dc 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -5,15 +5,15 @@ description: "Use Turnkey's embedded wallet infrastructure for internal enterpri ## Embedded Business Wallets -Manage organizational wallets with programmable controls. Define approval workflows, spending limits, and access policies. Private keys stay in hardware-backed enclaves. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. +Manage organizational wallets with programmable controls. Define approval workflows, spending limits, and access policies. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. ## Why Turnkey for Embedded Business Wallets? The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. -Turnkey runs wallet infrastructure for business operations. Create wallets for your organization. Optionally define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private keys stay in hardware-backed enclaves, secured through Turnkey's [verifiable security architecture](/security/our-approach). +Let Turnkey run your wallet infrastructure for business operations. Optionally define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are secured through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to encode your approval workflows. No smart contract deployments. No on-chain coordination. Update rules instantly. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination are necessary. ## Typical use cases @@ -30,7 +30,7 @@ Use the policy engine to encode your approval workflows. No smart contract deplo **Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. -**Role-based access control**: Assign permissions via user tags. Finance team signs up to $10k. Executives required above $50k. Operators handle day-to-day transactions. +**Role-based access control**: User tags create groups that policies apply to. Tag users as "finance-team" or "executive", then write policies that grant specific permissions to those groups. **Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. From 9e85aecde81c87a54031bfa497a151ecf8e76f6d Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 16:53:19 -0600 Subject: [PATCH 05/47] Wording edits --- products/embedded-business-wallets/overview.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 4e9ae1dc..463cfd79 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -5,17 +5,17 @@ description: "Use Turnkey's embedded wallet infrastructure for internal enterpri ## Embedded Business Wallets -Manage organizational wallets with programmable controls. Define approval workflows, spending limits, and access policies. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. +Manage your organization's wallets with programmable controls. Define approval workflows, spending limits, and access policies. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. ## Why Turnkey for Embedded Business Wallets? The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. -Let Turnkey run your wallet infrastructure for business operations. Optionally define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are secured through Turnkey's [verifiable security architecture](/security/our-approach). +Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination are necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. -## Typical use cases +## Common use cases | Need | Turnkey solution | | :--- | :--- | @@ -30,7 +30,7 @@ Use the policy engine to define your approval workflows. No contract deployments **Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. -**Role-based access control**: User tags create groups that policies apply to. Tag users as "finance-team" or "executive", then write policies that grant specific permissions to those groups. +**Role-based access control (RBAC)**: Tag users as "finance-team" or "executive", then use Turnkey's policy engine to grant specific permissions to those groups. **Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. From d6d4e1d86d7fac786fdaada6aa4043565b04f207 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 16:58:29 -0600 Subject: [PATCH 06/47] Add example --- .../embedded-business-wallets/overview.mdx | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 463cfd79..564de187 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -19,12 +19,13 @@ Use the policy engine to define your approval workflows. No contract deployments | Need | Turnkey solution | | :--- | :--- | +| Merchant deposit addresses | Instant wallet provisioning with policy-enforced sweeping to omnibus | | Treasury management | Centralized funds with role-based access and multi-approval requirements | | Payroll automation | Scheduled payments to allowlisted recipients without manual signing | | Vendor payments | Contact lists with pre-approved addresses and spending limits | | Delegated spending | Grant limited payment authority to teams or individuals | | Multi-approval workflows | Require 2+ approvers for high-value transactions | -| Spending controls | Per-transaction limits, daily caps, recipient restrictions | +| Asset restrictions | Only approved tokens (e.g., USDC) can be transferred | ## Core capabilities @@ -38,9 +39,51 @@ Use the policy engine to define your approval workflows. No contract deployments **Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. +## Example: Merchant deposit addresses with automated sweeping + +Provision deposit addresses instantly for merchants or customers. Enforce that funds can only move to your omnibus wallet, and only approved assets (like USDC) can be transferred. + +**Architecture:** + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ Merchant A │ │ Merchant B │ │ Merchant C │ +│ Deposit Addr │ │ Deposit Addr │ │ Deposit Addr │ +└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ + │ │ │ + │ USDC-only policy │ │ + └───────────────────────┼───────────────────────┘ + │ + ▼ + ┌────────────────────────┐ + │ Omnibus Wallet │ + │ (Consolidated) │ + └────────────────────────┘ +``` + +**Policy: Restrict transfers to USDC only, omnibus destination only** + +```json +{ + "policyName": "USDC transfers to omnibus only", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('sweep-service'))", + "condition": "eth.tx.to == '' && eth.tx.data[34..74] == ''" +} +``` + +All other transfer attempts are implicitly denied. Wrong token? Denied. Wrong destination? Denied. The policy engine enforces your rules at signing time. + +**Transaction flow:** +1. Create merchant wallet instantly via API (under 2 seconds) +2. Customer deposits funds to merchant's address +3. Backend sweep service lists balances across all merchant wallets +4. Sweep service signs transfers to omnibus wallet +5. Policy enforces USDC-only, omnibus-only at signing time + ## Example: Contractor and vendor payments -Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements or other payments. +Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements. **Set up recipient allowlist policy:** From 3c6e6fc0e9e7ac4458df5d2c940532143497159a Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 17:01:42 -0600 Subject: [PATCH 07/47] Fix use cases --- products/embedded-business-wallets/overview.mdx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 564de187..a151e86f 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -19,13 +19,13 @@ Use the policy engine to define your approval workflows. No contract deployments | Need | Turnkey solution | | :--- | :--- | -| Merchant deposit addresses | Instant wallet provisioning with policy-enforced sweeping to omnibus | -| Treasury management | Centralized funds with role-based access and multi-approval requirements | -| Payroll automation | Scheduled payments to allowlisted recipients without manual signing | -| Vendor payments | Contact lists with pre-approved addresses and spending limits | -| Delegated spending | Grant limited payment authority to teams or individuals | -| Multi-approval workflows | Require 2+ approvers for high-value transactions | -| Asset restrictions | Only approved tokens (e.g., USDC) can be transferred | +| [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | +| [Treasury management](#example-multi-approval-workflows) | Centralized funds with role-based access and multi-approval requirements | +| [Payroll automation](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | +| [Vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | +| [Delegated spending](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | +| [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | +| [Asset restrictions](#example-merchant-deposit-addresses-with-automated-sweeping) | Only approved tokens (e.g., USDC) can be transferred | ## Core capabilities From dd8e0ef61a30f18b1ea3425dd91f185fa6e4efa4 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Wed, 18 Feb 2026 12:35:46 -0600 Subject: [PATCH 08/47] Reframe --- .../embedded-business-wallets/overview.mdx | 353 +++++++----------- 1 file changed, 130 insertions(+), 223 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index a151e86f..7917cd4a 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -3,244 +3,151 @@ title: "Embedded Business Wallets" description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." --- -## Embedded Business Wallets +# Embedded Business Wallets -Manage your organization's wallets with programmable controls. Define approval workflows, spending limits, and access policies. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. +Business embedded wallets: custody model, approval workflows, access controls, and operational architecture. Turnkey provides secure key infrastructure in TEEs while you control roles, policies, automation, and spending guardrails. -## Why Turnkey for Embedded Business Wallets? +## Why business embedded wallets? -The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. +Embedded business wallets let organizations manage treasury, payroll, vendor payments, and internal spending without handling private keys directly. -Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). +Turnkey runs the wallet infrastructure inside hardware-backed [Trusted Execution Environments (TEEs)](/security/our-approach). Keys never leave the enclave. All signing is policy-controlled and verifiable. -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Unlike consumer wallets, business wallets typically require: -## Common use cases +- Multi-user access +- Approval workflows +- Spending limits and budgets +- Recipient allowlists +- Backend automation +- Auditability and control -| Need | Turnkey solution | -| :--- | :--- | -| [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | -| [Treasury management](#example-multi-approval-workflows) | Centralized funds with role-based access and multi-approval requirements | -| [Payroll automation](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | -| [Vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | -| [Delegated spending](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | -| [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | -| [Asset restrictions](#example-merchant-deposit-addresses-with-automated-sweeping) | Only approved tokens (e.g., USDC) can be transferred | +Turnkey’s policy engine lets you define who can sign, what they can sign, how many approvals are required, and under what conditions — without deploying contracts or coordinating onchain logic. + +See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. + +--- + +## Key implementation decisions + +For a full map of embedded wallet capabilities, see the [Features overview](/embedded-wallets/features/overview). + +| Decision | Summary | Learn more | +| :-- | :-- | :-- | +| **Custody model** | Team-controlled, backend-controlled, or delegated/hybrid. Configure via policies and organizational roles. | [Policy Quickstart](/concepts/policies/quickstart), [Delegated Access](/concepts/policies/delegated-access-overview) | +| **Authentication** | Passkeys, OAuth/email, SSO, or API keys for backend services. | [Authentication Overview](/authentication/overview) | +| **Session management** | Operator sessions vs service credentials; configurable expiration and storage. | [Sessions](/authentication/sessions) | +| **Wallet architecture** | Key-based (HD) or smart contract wallets depending on treasury requirements. | [Wallets Concept](/concepts/wallets) | +| **Transaction management** | Policy-enforced approvals, spending caps, allowlists, and automation. | [Transaction Management](/concepts/transaction-management) | +| **Key portability** | Optional import/export for migration, DR, or governance controls. | [Export](/embedded-wallets/code-examples/export), [Import](/embedded-wallets/code-examples/import) | + +--- + +## Custody model + +Choose how control is distributed across your organization: + +| Model | Description | +| :-- | :-- | +| **Team-controlled** | Multiple users authorize actions under role or quorum rules. | +| **Backend-controlled** | Automated services sign within scoped permissions. | +| **Delegated / hybrid** | Humans and automation share scoped authority. | + +Policies define exactly who can sign what, with what limits. + +--- + +## Authentication + +Business wallets often mix interactive and automated access: + +- **Passkeys / OAuth / SSO:** For operators and finance teams. +- **API keys:** For backend services (sweeps, payroll, rebalancing). +- **Email-based auth:** For smaller teams or transitional setups. + +Authentication binds each request to an approved identity. Signing cannot occur without a valid, policy-approved request. + +See [Authentication Overview](/authentication/overview). + +--- + +## Session management + +Choose how operators and services stay authorized: + +- **Operator sessions:** Read-write sessions for finance or operations teams. +- **Service credentials:** API-based authentication for backend automation. +- **Session duration:** Default 15 minutes (configurable). +- **Storage:** IndexedDB (web), SecureStorage (mobile), or LocalStorage depending on architecture. + +See [Sessions](/authentication/sessions). + +--- + +## Wallet architecture + +| Approach | Pros | Considerations | +| :-- | :-- | :-- | +| **Key-based (HD wallets)** | Simple, chain-agnostic, broad compatibility. | Standard derivation and signing. | +| **Smart contract wallets** | Advanced permissions, batching, sponsorship. | Requires deployment and infrastructure. | + +Turnkey supports both. See [Wallets Concept](/concepts/wallets). + +--- + +## Transaction management + +Business operations require programmable guardrails: + +- Multi-approval workflows +- Spending caps (per transaction or daily) +- Role-based limits +- Recipient allowlists +- Asset restrictions (e.g., USDC-only) +- Automated recurring payments + +All enforced at signing time by the policy engine. + +See [Transaction Management](/concepts/transaction-management). + +--- ## Core capabilities -**Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. +### Programmable approval requirements + +Define thresholds and quorum rules. +Small payments auto-approve. Large transfers require multiple signers. -**Role-based access control (RBAC)**: Tag users as "finance-team" or "executive", then use Turnkey's policy engine to grant specific permissions to those groups. +### Role-based access control (RBAC) -**Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. +Assign tags such as `finance-team`, `executive`, or `operations`. +Policies reference those tags to grant scoped permissions. -**Automated scheduled payments**: Backend services sign recurring transactions (payroll, subscriptions) based on policy rules. No manual intervention required. - -**Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. +### Recipient allowlists -## Example: Merchant deposit addresses with automated sweeping +Maintain approved vendor addresses. +Transactions outside the allowlist are denied automatically. -Provision deposit addresses instantly for merchants or customers. Enforce that funds can only move to your omnibus wallet, and only approved assets (like USDC) can be transferred. +### Automated scheduled payments + +Backend services sign recurring transactions within defined limits. + +### Spending limits + +Enforce transaction ceilings, daily caps, and asset restrictions at the policy layer. + +--- -**Architecture:** - -``` -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ Merchant A │ │ Merchant B │ │ Merchant C │ -│ Deposit Addr │ │ Deposit Addr │ │ Deposit Addr │ -└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ - │ │ │ - │ USDC-only policy │ │ - └───────────────────────┼───────────────────────┘ - │ - ▼ - ┌────────────────────────┐ - │ Omnibus Wallet │ - │ (Consolidated) │ - └────────────────────────┘ -``` - -**Policy: Restrict transfers to USDC only, omnibus destination only** - -```json -{ - "policyName": "USDC transfers to omnibus only", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('sweep-service'))", - "condition": "eth.tx.to == '' && eth.tx.data[34..74] == ''" -} -``` - -All other transfer attempts are implicitly denied. Wrong token? Denied. Wrong destination? Denied. The policy engine enforces your rules at signing time. - -**Transaction flow:** -1. Create merchant wallet instantly via API (under 2 seconds) -2. Customer deposits funds to merchant's address -3. Backend sweep service lists balances across all merchant wallets -4. Sweep service signs transfers to omnibus wallet -5. Policy enforces USDC-only, omnibus-only at signing time - -## Example: Contractor and vendor payments - -Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements. - -**Set up recipient allowlist policy:** - -```json -{ - "policyName": "Auto-approve payments to verified vendors", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('accounts-payable'))", - "condition": "eth.tx.to in ['', '', '']" -} -``` - -Payments to known recipients execute with single approval. Add new vendors by updating the policy. No on-chain changes required. - -## Example: Scheduled recurring payments - -Set up automated payments that execute on a schedule without manual signing. Pay contractors on the last business day of each month for the next 6 months. - - - - Define recurring payments in your application: recipient, amount, frequency, duration. - - - Allow your backend service to sign transactions to specific recipients up to specified amounts: +## Example: Treasury-style wallet - ```json - { - "policyName": "Backend can execute monthly contractor payments", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to in ['', ''] && eth.tx.value <= 5000000000000000000000" - } - ``` - - - Your backend executes payments when due. No manual approval required for pre-authorized recipients and amounts. - - +Typical requirements and how Turnkey addresses them: -## Example: Delegated spending authority - -Grant limited payment permissions to individuals or teams without giving full wallet access. - -### Petty cash for operators - -```json -{ - "policyName": "Operators can make small purchases", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('operator'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 500000000000000000000" -} -``` - -### Contractor self-service withdrawals - -```json -{ - "policyName": "Contractor can withdraw earned funds to registered address", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to == '' && eth.tx.value <= 2000000000000000000000" -} -``` - -### Department budgets - -Assign each department a spending limit. Marketing can spend up to $25k without executive approval: - -```json -{ - "policyName": "Marketing team budget authority", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('marketing-team'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 25000000000000000000000" -} -``` - -## Example: Multi-approval workflows - -Require multiple approvers for high-value or sensitive transactions. - -### Two finance approvers for large payments - -```json -{ - "policyName": "Require 2 finance approvers for transactions over $10,000", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" -} -``` - -### Executive approval for major transactions - -```json -{ - "policyName": "CFO required for transactions over $50,000", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('cfo'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 50000000000000000000000" -} -``` - -## Example: Spending controls - -Implement organizational controls beyond simple approval requirements. - -| Control | Policy approach | -| :--- | :--- | -| **Per-transaction limits** | Set `eth.tx.value` ceiling in condition | -| **Recipient restrictions** | Allowlist addresses with `eth.tx.to in [...]` | -| **Role-based limits** | Different `consensus` rules per spending tier | -| **Asset restrictions** | Filter by contract address for token transfers | - -See [Policy Language](/concepts/policies/language) for the full syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. - -## Trusted by leading businesses - -Turnkey's infrastructure powers enterprise payment operations at scale. See [Turnkey Customers](https://www.turnkey.com/customers) for more examples. - -**[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments)**: Cross-border stablecoin payments for non-crypto-native organizations. - -| Metric | Value | -| :--- | :--- | -| Monthly stablecoin payments | 5,000+ | -| Transaction volume (12 months) | $200M+ | -| Integration time | 3 weeks | - -> "Turnkey strikes that rare balance between uncompromising security and an intuitive user experience." -> -> Chris Fernandes, Co-founder and CTO, Mural Pay - -## Implementation workflow - - - - Sign up for Turnkey and create your parent organization. This serves as your administrative control plane. - - - Create wallets for your business operations: treasury, payroll, vendor payments. See [Wallets Concept](/concepts/wallets) for HD wallet structure. - - - Create user tags representing roles in your organization (finance, operations, executive). Add users and assign appropriate tags. - - - Write policies encoding your approval workflows and spending controls. See [Policy Quickstart](/concepts/policies/quickstart) for setup guidance. - - - Integrate Turnkey's API to build approval interfaces, payment automation, and operational dashboards. See [Transaction Automation](/signing-automation/overview) for backend signing patterns. - - - -## Resources - -- [Policy Engine Overview](/concepts/policies/overview): Fundamentals of Turnkey policies -- [Access Control Examples](/concepts/policies/examples/access-control): Sample RBAC policies -- [Signing Control Examples](/concepts/policies/examples/signing-control): Transaction signing policies -- [Delegated Access](/concepts/policies/delegated-access-overview): Backend automation patterns -- [Transaction Automation](/signing-automation/overview): Building automated signing workflows +| Requirement | Turnkey capability | +| :-- | :-- | +| Multi-user approvals | Quorum-based consensus rules | +| Vendor allowlists | `eth.tx.to in [...]` policies | +| Department budgets | Value ceilings scoped by user tags | +| Automated sweeps | Backend service with restricted signing scope | +| Asset controls | Restrict by token contract address | +| No key exposure | Keys remain inside secure e From 520b86d41dd941739e0038abcfb9048933c8e40a Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Wed, 18 Feb 2026 12:42:11 -0600 Subject: [PATCH 09/47] remove redundant header --- .../embedded-business-wallets/overview.mdx | 355 +++++++++++------- 1 file changed, 222 insertions(+), 133 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 7917cd4a..ba4419d8 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -1,153 +1,242 @@ --- title: "Embedded Business Wallets" -description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." +description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart." --- -# Embedded Business Wallets +## Why Turnkey for Embedded Business Wallets? -Business embedded wallets: custody model, approval workflows, access controls, and operational architecture. Turnkey provides secure key infrastructure in TEEs while you control roles, policies, automation, and spending guardrails. +The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. -## Why business embedded wallets? +Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Embedded business wallets let organizations manage treasury, payroll, vendor payments, and internal spending without handling private keys directly. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. -Turnkey runs the wallet infrastructure inside hardware-backed [Trusted Execution Environments (TEEs)](/security/our-approach). Keys never leave the enclave. All signing is policy-controlled and verifiable. +## Common use cases -Unlike consumer wallets, business wallets typically require: - -- Multi-user access -- Approval workflows -- Spending limits and budgets -- Recipient allowlists -- Backend automation -- Auditability and control - -Turnkey’s policy engine lets you define who can sign, what they can sign, how many approvals are required, and under what conditions — without deploying contracts or coordinating onchain logic. - -See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. - ---- - -## Key implementation decisions - -For a full map of embedded wallet capabilities, see the [Features overview](/embedded-wallets/features/overview). - -| Decision | Summary | Learn more | -| :-- | :-- | :-- | -| **Custody model** | Team-controlled, backend-controlled, or delegated/hybrid. Configure via policies and organizational roles. | [Policy Quickstart](/concepts/policies/quickstart), [Delegated Access](/concepts/policies/delegated-access-overview) | -| **Authentication** | Passkeys, OAuth/email, SSO, or API keys for backend services. | [Authentication Overview](/authentication/overview) | -| **Session management** | Operator sessions vs service credentials; configurable expiration and storage. | [Sessions](/authentication/sessions) | -| **Wallet architecture** | Key-based (HD) or smart contract wallets depending on treasury requirements. | [Wallets Concept](/concepts/wallets) | -| **Transaction management** | Policy-enforced approvals, spending caps, allowlists, and automation. | [Transaction Management](/concepts/transaction-management) | -| **Key portability** | Optional import/export for migration, DR, or governance controls. | [Export](/embedded-wallets/code-examples/export), [Import](/embedded-wallets/code-examples/import) | - ---- - -## Custody model - -Choose how control is distributed across your organization: - -| Model | Description | -| :-- | :-- | -| **Team-controlled** | Multiple users authorize actions under role or quorum rules. | -| **Backend-controlled** | Automated services sign within scoped permissions. | -| **Delegated / hybrid** | Humans and automation share scoped authority. | - -Policies define exactly who can sign what, with what limits. - ---- - -## Authentication - -Business wallets often mix interactive and automated access: - -- **Passkeys / OAuth / SSO:** For operators and finance teams. -- **API keys:** For backend services (sweeps, payroll, rebalancing). -- **Email-based auth:** For smaller teams or transitional setups. - -Authentication binds each request to an approved identity. Signing cannot occur without a valid, policy-approved request. - -See [Authentication Overview](/authentication/overview). - ---- - -## Session management - -Choose how operators and services stay authorized: - -- **Operator sessions:** Read-write sessions for finance or operations teams. -- **Service credentials:** API-based authentication for backend automation. -- **Session duration:** Default 15 minutes (configurable). -- **Storage:** IndexedDB (web), SecureStorage (mobile), or LocalStorage depending on architecture. - -See [Sessions](/authentication/sessions). - ---- - -## Wallet architecture - -| Approach | Pros | Considerations | -| :-- | :-- | :-- | -| **Key-based (HD wallets)** | Simple, chain-agnostic, broad compatibility. | Standard derivation and signing. | -| **Smart contract wallets** | Advanced permissions, batching, sponsorship. | Requires deployment and infrastructure. | - -Turnkey supports both. See [Wallets Concept](/concepts/wallets). - ---- - -## Transaction management - -Business operations require programmable guardrails: - -- Multi-approval workflows -- Spending caps (per transaction or daily) -- Role-based limits -- Recipient allowlists -- Asset restrictions (e.g., USDC-only) -- Automated recurring payments - -All enforced at signing time by the policy engine. - -See [Transaction Management](/concepts/transaction-management). - ---- +| Need | Turnkey solution | +| :--- | :--- | +| [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | +| [Treasury management](#example-multi-approval-workflows) | Centralized funds with role-based access and multi-approval requirements | +| [Payroll automation](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | +| [Vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | +| [Delegated spending](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | +| [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | +| [Asset restrictions](#example-merchant-deposit-addresses-with-automated-sweeping) | Only approved tokens (e.g., USDC) can be transferred | ## Core capabilities -### Programmable approval requirements - -Define thresholds and quorum rules. -Small payments auto-approve. Large transfers require multiple signers. +**Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. -### Role-based access control (RBAC) +**Role-based access control (RBAC)**: Tag users as "finance-team" or "executive", then use Turnkey's policy engine to grant specific permissions to those groups. -Assign tags such as `finance-team`, `executive`, or `operations`. -Policies reference those tags to grant scoped permissions. +**Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. -### Recipient allowlists +**Automated scheduled payments**: Backend services sign recurring transactions (payroll, subscriptions) based on policy rules. No manual intervention required. + +**Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. -Maintain approved vendor addresses. -Transactions outside the allowlist are denied automatically. +## Example: Merchant deposit addresses with automated sweeping -### Automated scheduled payments - -Backend services sign recurring transactions within defined limits. - -### Spending limits - -Enforce transaction ceilings, daily caps, and asset restrictions at the policy layer. - ---- +Provision deposit addresses instantly for merchants or customers. Enforce that funds can only move to your omnibus wallet, and only approved assets (like USDC) can be transferred. -## Example: Treasury-style wallet +**Architecture:** + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ Merchant A │ │ Merchant B │ │ Merchant C │ +│ Deposit Addr │ │ Deposit Addr │ │ Deposit Addr │ +└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ + │ │ │ + │ USDC-only policy │ │ + └───────────────────────┼───────────────────────┘ + │ + ▼ + ┌────────────────────────┐ + │ Omnibus Wallet │ + │ (Consolidated) │ + └────────────────────────┘ +``` + +**Policy: Restrict transfers to USDC only, omnibus destination only** + +```json +{ + "policyName": "USDC transfers to omnibus only", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('sweep-service'))", + "condition": "eth.tx.to == '' && eth.tx.data[34..74] == ''" +} +``` + +All other transfer attempts are implicitly denied. Wrong token? Denied. Wrong destination? Denied. The policy engine enforces your rules at signing time. + +**Transaction flow:** +1. Create merchant wallet instantly via API (under 2 seconds) +2. Customer deposits funds to merchant's address +3. Backend sweep service lists balances across all merchant wallets +4. Sweep service signs transfers to omnibus wallet +5. Policy enforces USDC-only, omnibus-only at signing time + +## Example: Contractor and vendor payments + +Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements. + +**Set up recipient allowlist policy:** + +```json +{ + "policyName": "Auto-approve payments to verified vendors", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('accounts-payable'))", + "condition": "eth.tx.to in ['', '', '']" +} +``` + +Payments to known recipients execute with single approval. Add new vendors by updating the policy. No on-chain changes required. + +## Example: Scheduled recurring payments + +Set up automated payments that execute on a schedule without manual signing. Pay contractors on the last business day of each month for the next 6 months. + + + + Define recurring payments in your application: recipient, amount, frequency, duration. + + + Allow your backend service to sign transactions to specific recipients up to specified amounts: -Typical requirements and how Turnkey addresses them: + ```json + { + "policyName": "Backend can execute monthly contractor payments", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to in ['', ''] && eth.tx.value <= 5000000000000000000000" + } + ``` + + + Your backend executes payments when due. No manual approval required for pre-authorized recipients and amounts. + + -| Requirement | Turnkey capability | -| :-- | :-- | -| Multi-user approvals | Quorum-based consensus rules | -| Vendor allowlists | `eth.tx.to in [...]` policies | -| Department budgets | Value ceilings scoped by user tags | -| Automated sweeps | Backend service with restricted signing scope | -| Asset controls | Restrict by token contract address | -| No key exposure | Keys remain inside secure e +## Example: Delegated spending authority + +Grant limited payment permissions to individuals or teams without giving full wallet access. + +### Petty cash for operators + +```json +{ + "policyName": "Operators can make small purchases", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('operator'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 500000000000000000000" +} +``` + +### Contractor self-service withdrawals + +```json +{ + "policyName": "Contractor can withdraw earned funds to registered address", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to == '' && eth.tx.value <= 2000000000000000000000" +} +``` + +### Department budgets + +Assign each department a spending limit. Marketing can spend up to $25k without executive approval: + +```json +{ + "policyName": "Marketing team budget authority", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('marketing-team'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 25000000000000000000000" +} +``` + +## Example: Multi-approval workflows + +Require multiple approvers for high-value or sensitive transactions. + +### Two finance approvers for large payments + +```json +{ + "policyName": "Require 2 finance approvers for transactions over $10,000", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" +} +``` + +### Executive approval for major transactions + +```json +{ + "policyName": "CFO required for transactions over $50,000", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('cfo'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 50000000000000000000000" +} +``` + +## Example: Spending controls + +Implement organizational controls beyond simple approval requirements. + +| Control | Policy approach | +| :--- | :--- | +| **Per-transaction limits** | Set `eth.tx.value` ceiling in condition | +| **Recipient restrictions** | Allowlist addresses with `eth.tx.to in [...]` | +| **Role-based limits** | Different `consensus` rules per spending tier | +| **Asset restrictions** | Filter by contract address for token transfers | + +See [Policy Language](/concepts/policies/language) for the full syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. + +## Trusted by leading businesses + +Turnkey's infrastructure powers enterprise payment operations at scale. See [Turnkey Customers](https://www.turnkey.com/customers) for more examples. + +**[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments)**: Cross-border stablecoin payments for non-crypto-native organizations. + +| Metric | Value | +| :--- | :--- | +| Monthly stablecoin payments | 5,000+ | +| Transaction volume (12 months) | $200M+ | +| Integration time | 3 weeks | + +> "Turnkey strikes that rare balance between uncompromising security and an intuitive user experience." +> +> Chris Fernandes, Co-founder and CTO, Mural Pay + +## Implementation workflow + + + + Sign up for Turnkey and create your parent organization. This serves as your administrative control plane. + + + Create wallets for your business operations: treasury, payroll, vendor payments. See [Wallets Concept](/concepts/wallets) for HD wallet structure. + + + Create user tags representing roles in your organization (finance, operations, executive). Add users and assign appropriate tags. + + + Write policies encoding your approval workflows and spending controls. See [Policy Quickstart](/concepts/policies/quickstart) for setup guidance. + + + Integrate Turnkey's API to build approval interfaces, payment automation, and operational dashboards. See [Transaction Automation](/signing-automation/overview) for backend signing patterns. + + + +## Resources + +- [Policy Engine Overview](/concepts/policies/overview): Fundamentals of Turnkey policies +- [Access Control Examples](/concepts/policies/examples/access-control): Sample RBAC policies +- [Signing Control Examples](/concepts/policies/examples/signing-control): Transaction signing policies +- [Delegated Access](/concepts/policies/delegated-access-overview): Backend automation patterns +- [Transaction Automation](/signing-automation/overview): Building automated signing workflows From afb1c4790c8a931a5618162d31ab29f48f82b50c Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Wed, 18 Feb 2026 12:46:00 -0600 Subject: [PATCH 10/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index ba4419d8..0a63ac3b 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -1,6 +1,6 @@ --- title: "Embedded Business Wallets" -description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart." +description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." --- ## Why Turnkey for Embedded Business Wallets? From f8fde17412583127eb61f5dbf873b8202d157450 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 11:38:58 -0600 Subject: [PATCH 11/47] Signing test --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 0a63ac3b..fb14dc81 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. ## Common use cases From c55bba535a50478523fa89607b276380a075943f Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 11:39:54 -0600 Subject: [PATCH 12/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index fb14dc81..0a63ac3b 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. ## Common use cases From 3c26933461ca83a3468189cfb1974c4d19e55d17 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 11:40:19 -0600 Subject: [PATCH 13/47] EBW first stab --- docs.json | 3 +- .../embedded-business-wallets/overview.mdx | 234 ++++++++++++++++++ 2 files changed, 236 insertions(+), 1 deletion(-) create mode 100644 products/embedded-business-wallets/overview.mdx diff --git a/docs.json b/docs.json index 9c87f6a5..e0f47d74 100644 --- a/docs.json +++ b/docs.json @@ -224,7 +224,8 @@ ] } ] - } + }, + "products/embedded-business-wallets/overview" ] }, { diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx new file mode 100644 index 00000000..706f81b8 --- /dev/null +++ b/products/embedded-business-wallets/overview.mdx @@ -0,0 +1,234 @@ +--- +title: "Embedded Business Wallets" +description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." +--- + +> Traditional enterprise wallet solutions force organizations to choose between security and usability. Multisig wallets provide security through multiple approvals but are operationally complex and slow. Centralized treasury tools offer convenience but create single points of failure. Turnkey's Embedded Business Wallets eliminate this tradeoff by combining programmable policy controls with a seamless operational experience. + +## Why Embedded Business Wallets? + +Embedded wallets are typically associated with consumer applications, where each end user gets their own wallet. But the same infrastructure that powers millions of consumer wallets is equally powerful for internal enterprise use cases: + +- **Treasury management**: Centralize organizational funds with granular access controls +- **Payroll and contractor payments**: Automate recurring disbursements without manual signing +- **Vendor payments**: Maintain contact lists and streamline accounts payable workflows +- **Operational wallets**: Delegate specific payment authorities to teams or individuals + +With Turnkey, you get the security benefits of multisig (multiple approvals, separation of duties) combined with the programmability and automation that traditional multisig solutions lack. + +## Multisig Security, Without the Multisig Complexity + +Traditional multisig wallets require coordinating multiple signers for every transaction. This creates operational friction: + +- Signers must be available simultaneously +- Gas costs increase with signature count +- Adding or removing signers requires on-chain transactions +- No granular control over what transactions require approval + +Turnkey's policy engine delivers equivalent security guarantees with superior flexibility: + +``` +┌─────────────────────────────────────────────────────────────────────────┐ +│ TRADITIONAL MULTISIG │ +│ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ +│ │ Signer │ + │ Signer │ + │ Signer │ → On-chain execution │ +│ │ A │ │ B │ │ C │ │ +│ └─────────┘ └─────────┘ └─────────┘ │ +│ │ +│ • All signers required for every transaction │ +│ • No conditional logic │ +│ • On-chain coordination overhead │ +└─────────────────────────────────────────────────────────────────────────┘ + +┌─────────────────────────────────────────────────────────────────────────┐ +│ TURNKEY POLICY ENGINE │ +│ │ +│ ┌─────────────────────────────────────────────────────────────┐ │ +│ │ POLICY RULES │ │ +│ │ │ │ +│ │ Transaction < $1,000 → Single approval (Operator) │ │ +│ │ Transaction < $10,000 → Two approvals (Finance team) │ │ +│ │ Transaction >= $10,000 → CFO + CEO approval │ │ +│ │ Recipient in allowlist → Auto-approve │ │ +│ │ Scheduled payment → Auto-execute on date │ │ +│ └─────────────────────────────────────────────────────────────┘ │ +│ │ +│ • Conditional approval requirements │ +│ • Role-based access control │ +│ • Off-chain policy evaluation, on-chain execution │ +└─────────────────────────────────────────────────────────────────────────┘ +``` + +## Key Capabilities + +### Role-Based Access Control + +Assign different permissions to different team members using user tags: + +```json +{ + "policyName": "Finance team can sign transactions up to $5,000", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('finance-team'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 5000000000000000000000" +} +``` + +| Role | Permissions | +| :--- | :--- | +| **Operator** | Sign transactions up to $1,000 to pre-approved addresses | +| **Finance** | Sign transactions up to $10,000, add recipients to allowlist | +| **Treasury** | Sign any transaction with single approval | +| **Executive** | Required for transactions over $50,000 | + +### Multi-Approval Workflows + +Require multiple approvers for high-value transactions, just like multisig, but with programmable thresholds: + +```json +{ + "policyName": "Require 2 finance approvers for transactions over $10,000", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" +} +``` + +Unlike on-chain multisig: +- Add or remove approvers instantly (no on-chain transactions) +- Different approval requirements for different transaction types +- Approval collection happens off-chain (no coordination overhead) + +### Delegated Permissions + +Grant specific, limited permissions to individuals or teams without giving them full wallet access: + +```json +{ + "policyName": "Contractor can withdraw up to $500/day to their registered address", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.to == '' && eth.tx.value <= 500000000000000000000" +} +``` + +Use cases: +- **Petty cash**: Operators can make small purchases without approval +- **Contractor advances**: Allow contractors to withdraw earned funds +- **Department budgets**: Each department controls their allocation + +### Recipient Allowlists + +Maintain a contact list of approved payment recipients. Payments to allowlisted addresses can be auto-approved or require fewer approvals: + +```json +{ + "policyName": "Auto-approve payments to verified vendors", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('finance-team'))", + "condition": "eth.tx.to in ['', '', '']" +} +``` + +Common patterns: +- Vendor payment addresses (accounts payable) +- Contractor wallet addresses (payroll) +- Exchange deposit addresses (treasury operations) +- Internal wallet addresses (inter-account transfers) + +### Automated Scheduled Payments + +Set up recurring payments that execute automatically based on your policy rules: + + + + Configure recurring payments in your application: amount, recipient, frequency (weekly, monthly, etc.). + + + Create a policy that allows your backend service to sign scheduled transactions: + + ```json + { + "policyName": "Backend can execute scheduled payroll", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to in ['', '', ''] && eth.tx.value <= 10000000000000000000000" + } + ``` + + + Your backend triggers payments on schedule. No manual signing required for pre-approved recipients and amounts. + + + +Example: Pay contractors on the last business day of each month for the next 6 months, without requiring manual approval for each payment. + +### Spending Controls + +Implement organizational spending limits and controls that would be impossible with traditional wallets: + +| Control Type | Example | +| :--- | :--- | +| **Per-transaction limits** | No single transaction over $50,000 | +| **Daily/weekly limits** | Maximum $100,000 in outflows per day | +| **Recipient restrictions** | Only send to verified addresses | +| **Time-based controls** | No transactions outside business hours | +| **Asset restrictions** | Only USDC transfers from this wallet | + +## Real-World Implementation: Mural Pay + +[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments) demonstrates how Turnkey's infrastructure powers enterprise-grade payment operations at scale. + +### The Challenge + +Mural Pay needed to simplify cryptocurrency payments for non-crypto-native organizations. Their platform initially required users to understand blockchain mechanics, limiting their addressable market. + +### The Solution + +By integrating Turnkey's wallet infrastructure, Mural Pay delivers a fintech-like payment experience: + +- **Simplified authentication**: Non-custodial embedded wallets via passkey or email, eliminating seed phrase management +- **Secure infrastructure**: Turnkey's secure enclaves protect organizational funds +- **High-speed transactions**: 50-100ms transaction signing for seamless payment experiences + +### The Results + +| Metric | Value | +| :--- | :--- | +| Monthly stablecoin payments | 5,000+ | +| Transaction volume (12 months) | $200M+ | +| Monthly infrastructure savings | $3,000 | +| Integration time | 3 weeks | + +> "Turnkey strikes that rare balance between uncompromising security and an intuitive user experience." +> +> Chris Fernandes, Co-founder and CTO, Mural Pay + +## Getting Started + + + + Sign up for Turnkey and create your parent organization. This will be your administrative control plane. + + + Create one or more wallets for your business operations: treasury, payroll, vendor payments, etc. + + + Create user tags that represent roles in your organization (finance, operations, executive, etc.). + + + Write policies that encode your approval workflows and spending controls. + + + Integrate Turnkey's API to build payment workflows, approval interfaces, and automation. + + + +## Resources + +- [Policy Engine Overview](/concepts/policies/overview): Learn the fundamentals of Turnkey policies +- [Access Control Examples](/concepts/policies/examples/access-control): Sample RBAC policies +- [Signing Control Examples](/concepts/policies/examples/signing-control): Policies for transaction signing +- [Transaction Automation](/signing-automation/overview): Building automated signing workflows +- [Mural Pay Case Study](https://www.turnkey.com/customers/mural-pay-cross-border-payments): Enterprise payments at scale From 8c9bf5ffef2549bebf3c385c48f36cb5ddcce2a5 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 11:50:32 -0600 Subject: [PATCH 14/47] Update language --- .../embedded-business-wallets/overview.mdx | 210 ++++-------------- 1 file changed, 48 insertions(+), 162 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 706f81b8..c6c09090 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -3,232 +3,118 @@ title: "Embedded Business Wallets" description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." --- -> Traditional enterprise wallet solutions force organizations to choose between security and usability. Multisig wallets provide security through multiple approvals but are operationally complex and slow. Centralized treasury tools offer convenience but create single points of failure. Turnkey's Embedded Business Wallets eliminate this tradeoff by combining programmable policy controls with a seamless operational experience. +## Embedded Business Wallets -## Why Embedded Business Wallets? +Manage organizational wallets with programmable controls. Define approval workflows, spending limits, and access policies. Private keys stay in hardware-backed enclaves. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. -Embedded wallets are typically associated with consumer applications, where each end user gets their own wallet. But the same infrastructure that powers millions of consumer wallets is equally powerful for internal enterprise use cases: +## Why Turnkey for Embedded Business Wallets? -- **Treasury management**: Centralize organizational funds with granular access controls -- **Payroll and contractor payments**: Automate recurring disbursements without manual signing -- **Vendor payments**: Maintain contact lists and streamline accounts payable workflows -- **Operational wallets**: Delegate specific payment authorities to teams or individuals +Business wallets are organization-controlled wallets for internal operations: treasury, payroll, vendor payments, and operational funds. Unlike consumer wallets where each end user owns their wallet, business wallets require coordinated access across teams with configurable approval requirements. -With Turnkey, you get the security benefits of multisig (multiple approvals, separation of duties) combined with the programmability and automation that traditional multisig solutions lack. +Turnkey runs wallet infrastructure for business operations. Create wallets for your organization. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private keys stay in hardware-backed enclaves, secured through Turnkey's [verifiable security architecture](/security/our-approach). -## Multisig Security, Without the Multisig Complexity +Use the policy engine to encode your approval workflows. No smart contract deployments. No on-chain coordination. Update rules instantly. -Traditional multisig wallets require coordinating multiple signers for every transaction. This creates operational friction: +## Typical use cases -- Signers must be available simultaneously -- Gas costs increase with signature count -- Adding or removing signers requires on-chain transactions -- No granular control over what transactions require approval +| Need | Turnkey solution | +| :--- | :--- | +| Treasury management | Centralized funds with role-based access and multi-approval requirements | +| Payroll automation | Scheduled payments to allowlisted recipients without manual signing | +| Vendor payments | Contact lists with pre-approved addresses and spending limits | +| Delegated spending | Grant limited payment authority to teams or individuals | +| Multi-approval workflows | Require 2+ approvers for high-value transactions | +| Spending controls | Per-transaction limits, daily caps, recipient restrictions | -Turnkey's policy engine delivers equivalent security guarantees with superior flexibility: +## Core capabilities -``` -┌─────────────────────────────────────────────────────────────────────────┐ -│ TRADITIONAL MULTISIG │ -│ │ -│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ -│ │ Signer │ + │ Signer │ + │ Signer │ → On-chain execution │ -│ │ A │ │ B │ │ C │ │ -│ └─────────┘ └─────────┘ └─────────┘ │ -│ │ -│ • All signers required for every transaction │ -│ • No conditional logic │ -│ • On-chain coordination overhead │ -└─────────────────────────────────────────────────────────────────────────┘ - -┌─────────────────────────────────────────────────────────────────────────┐ -│ TURNKEY POLICY ENGINE │ -│ │ -│ ┌─────────────────────────────────────────────────────────────┐ │ -│ │ POLICY RULES │ │ -│ │ │ │ -│ │ Transaction < $1,000 → Single approval (Operator) │ │ -│ │ Transaction < $10,000 → Two approvals (Finance team) │ │ -│ │ Transaction >= $10,000 → CFO + CEO approval │ │ -│ │ Recipient in allowlist → Auto-approve │ │ -│ │ Scheduled payment → Auto-execute on date │ │ -│ └─────────────────────────────────────────────────────────────┘ │ -│ │ -│ • Conditional approval requirements │ -│ • Role-based access control │ -│ • Off-chain policy evaluation, on-chain execution │ -└─────────────────────────────────────────────────────────────────────────┘ -``` +**Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. + +**Role-based access control**: Assign permissions via user tags. Finance team signs up to $10k. Executives required above $50k. Operators handle day-to-day transactions. + +**Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. -## Key Capabilities +**Automated scheduled payments**: Backend services sign recurring transactions (payroll, subscriptions) based on policy rules. No manual intervention required. -### Role-Based Access Control +**Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. -Assign different permissions to different team members using user tags: +## Policy examples + +### Role-based signing limits ```json { - "policyName": "Finance team can sign transactions up to $5,000", + "policyName": "Finance team can sign transactions up to $10,000", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.tags.contains('finance-team'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 5000000000000000000000" + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 10000000000000000000000" } ``` -| Role | Permissions | -| :--- | :--- | -| **Operator** | Sign transactions up to $1,000 to pre-approved addresses | -| **Finance** | Sign transactions up to $10,000, add recipients to allowlist | -| **Treasury** | Sign any transaction with single approval | -| **Executive** | Required for transactions over $50,000 | - -### Multi-Approval Workflows - -Require multiple approvers for high-value transactions, just like multisig, but with programmable thresholds: +### Multi-approval for high-value transactions ```json { - "policyName": "Require 2 finance approvers for transactions over $10,000", + "policyName": "Require 2 approvers for transactions over $10,000", "effect": "EFFECT_ALLOW", "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" } ``` -Unlike on-chain multisig: -- Add or remove approvers instantly (no on-chain transactions) -- Different approval requirements for different transaction types -- Approval collection happens off-chain (no coordination overhead) - -### Delegated Permissions - -Grant specific, limited permissions to individuals or teams without giving them full wallet access: +### Automated payments to allowlisted recipients ```json { - "policyName": "Contractor can withdraw up to $500/day to their registered address", + "policyName": "Backend can execute scheduled payroll", "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.to == '' && eth.tx.value <= 500000000000000000000" + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to in ['', '', ''] && eth.tx.value <= 10000000000000000000000" } ``` -Use cases: -- **Petty cash**: Operators can make small purchases without approval -- **Contractor advances**: Allow contractors to withdraw earned funds -- **Department budgets**: Each department controls their allocation - -### Recipient Allowlists - -Maintain a contact list of approved payment recipients. Payments to allowlisted addresses can be auto-approved or require fewer approvals: - -```json -{ - "policyName": "Auto-approve payments to verified vendors", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('finance-team'))", - "condition": "eth.tx.to in ['', '', '']" -} -``` - -Common patterns: -- Vendor payment addresses (accounts payable) -- Contractor wallet addresses (payroll) -- Exchange deposit addresses (treasury operations) -- Internal wallet addresses (inter-account transfers) - -### Automated Scheduled Payments - -Set up recurring payments that execute automatically based on your policy rules: - - - - Configure recurring payments in your application: amount, recipient, frequency (weekly, monthly, etc.). - - - Create a policy that allows your backend service to sign scheduled transactions: - - ```json - { - "policyName": "Backend can execute scheduled payroll", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to in ['', '', ''] && eth.tx.value <= 10000000000000000000000" - } - ``` - - - Your backend triggers payments on schedule. No manual signing required for pre-approved recipients and amounts. - - - -Example: Pay contractors on the last business day of each month for the next 6 months, without requiring manual approval for each payment. - -### Spending Controls - -Implement organizational spending limits and controls that would be impossible with traditional wallets: - -| Control Type | Example | -| :--- | :--- | -| **Per-transaction limits** | No single transaction over $50,000 | -| **Daily/weekly limits** | Maximum $100,000 in outflows per day | -| **Recipient restrictions** | Only send to verified addresses | -| **Time-based controls** | No transactions outside business hours | -| **Asset restrictions** | Only USDC transfers from this wallet | - -## Real-World Implementation: Mural Pay - -[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments) demonstrates how Turnkey's infrastructure powers enterprise-grade payment operations at scale. - -### The Challenge - -Mural Pay needed to simplify cryptocurrency payments for non-crypto-native organizations. Their platform initially required users to understand blockchain mechanics, limiting their addressable market. - -### The Solution +See [Policy Language](/concepts/policies/language) for the full policy syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. -By integrating Turnkey's wallet infrastructure, Mural Pay delivers a fintech-like payment experience: +## Trusted by leading businesses -- **Simplified authentication**: Non-custodial embedded wallets via passkey or email, eliminating seed phrase management -- **Secure infrastructure**: Turnkey's secure enclaves protect organizational funds -- **High-speed transactions**: 50-100ms transaction signing for seamless payment experiences +Turnkey's infrastructure powers enterprise payment operations at scale. See [Turnkey Customers](https://www.turnkey.com/customers) for more examples. -### The Results +**[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments)**: Cross-border stablecoin payments for non-crypto-native organizations. | Metric | Value | | :--- | :--- | | Monthly stablecoin payments | 5,000+ | | Transaction volume (12 months) | $200M+ | -| Monthly infrastructure savings | $3,000 | | Integration time | 3 weeks | > "Turnkey strikes that rare balance between uncompromising security and an intuitive user experience." > > Chris Fernandes, Co-founder and CTO, Mural Pay -## Getting Started +## Implementation workflow - Sign up for Turnkey and create your parent organization. This will be your administrative control plane. + Sign up for Turnkey and create your parent organization. This serves as your administrative control plane. - Create one or more wallets for your business operations: treasury, payroll, vendor payments, etc. + Create wallets for your business operations: treasury, payroll, vendor payments. See [Wallets Concept](/concepts/wallets) for HD wallet structure. - Create user tags that represent roles in your organization (finance, operations, executive, etc.). + Create user tags representing roles in your organization (finance, operations, executive). Add users and assign appropriate tags. - Write policies that encode your approval workflows and spending controls. + Write policies encoding your approval workflows and spending controls. See [Policy Quickstart](/concepts/policies/quickstart) for setup guidance. - - Integrate Turnkey's API to build payment workflows, approval interfaces, and automation. + + Integrate Turnkey's API to build approval interfaces, payment automation, and operational dashboards. See [Transaction Automation](/signing-automation/overview) for backend signing patterns. ## Resources -- [Policy Engine Overview](/concepts/policies/overview): Learn the fundamentals of Turnkey policies +- [Policy Engine Overview](/concepts/policies/overview): Fundamentals of Turnkey policies - [Access Control Examples](/concepts/policies/examples/access-control): Sample RBAC policies -- [Signing Control Examples](/concepts/policies/examples/signing-control): Policies for transaction signing +- [Signing Control Examples](/concepts/policies/examples/signing-control): Transaction signing policies +- [Delegated Access](/concepts/policies/delegated-access-overview): Backend automation patterns - [Transaction Automation](/signing-automation/overview): Building automated signing workflows -- [Mural Pay Case Study](https://www.turnkey.com/customers/mural-pay-cross-border-payments): Enterprise payments at scale From cc1fc9552f2229e57edf5f4e60f14e04109bb51b Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 11:56:32 -0600 Subject: [PATCH 15/47] Add examples back --- .../embedded-business-wallets/overview.mdx | 111 +++++++++++++++--- 1 file changed, 97 insertions(+), 14 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index c6c09090..fc8827e5 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,9 +9,9 @@ Manage organizational wallets with programmable controls. Define approval workfl ## Why Turnkey for Embedded Business Wallets? -Business wallets are organization-controlled wallets for internal operations: treasury, payroll, vendor payments, and operational funds. Unlike consumer wallets where each end user owns their wallet, business wallets require coordinated access across teams with configurable approval requirements. +The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. -Turnkey runs wallet infrastructure for business operations. Create wallets for your organization. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private keys stay in hardware-backed enclaves, secured through Turnkey's [verifiable security architecture](/security/our-approach). +Turnkey runs wallet infrastructure for business operations. Create wallets for your organization. Optionally define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private keys stay in hardware-backed enclaves, secured through Turnkey's [verifiable security architecture](/security/our-approach). Use the policy engine to encode your approval workflows. No smart contract deployments. No on-chain coordination. Update rules instantly. @@ -38,42 +38,125 @@ Use the policy engine to encode your approval workflows. No smart contract deplo **Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. -## Policy examples +## Example: Contractor and vendor payments -### Role-based signing limits +Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements or other payments. + +**Set up recipient allowlist policy:** + +```json +{ + "policyName": "Auto-approve payments to verified vendors", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('accounts-payable'))", + "condition": "eth.tx.to in ['', '', '']" +} +``` + +Payments to known recipients execute with single approval. Add new vendors by updating the policy. No on-chain changes required. + +## Example: Scheduled recurring payments + +Set up automated payments that execute on a schedule without manual signing. Pay contractors on the last business day of each month for the next 6 months. + + + + Define recurring payments in your application: recipient, amount, frequency, duration. + + + Allow your backend service to sign transactions to specific recipients up to specified amounts: + + ```json + { + "policyName": "Backend can execute monthly contractor payments", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to in ['', ''] && eth.tx.value <= 5000000000000000000000" + } + ``` + + + Your backend executes payments when due. No manual approval required for pre-authorized recipients and amounts. + + + +## Example: Delegated spending authority + +Grant limited payment permissions to individuals or teams without giving full wallet access. + +### Petty cash for operators + +```json +{ + "policyName": "Operators can make small purchases", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('operator'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 500000000000000000000" +} +``` + +### Contractor self-service withdrawals + +```json +{ + "policyName": "Contractor can withdraw earned funds to registered address", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to == '' && eth.tx.value <= 2000000000000000000000" +} +``` + +### Department budgets + +Assign each department a spending limit. Marketing can spend up to $25k without executive approval: ```json { - "policyName": "Finance team can sign transactions up to $10,000", + "policyName": "Marketing team budget authority", "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('finance-team'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 10000000000000000000000" + "consensus": "approvers.any(user, user.tags.contains('marketing-team'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 25000000000000000000000" } ``` -### Multi-approval for high-value transactions +## Example: Multi-approval workflows + +Require multiple approvers for high-value or sensitive transactions. + +### Two finance approvers for large payments ```json { - "policyName": "Require 2 approvers for transactions over $10,000", + "policyName": "Require 2 finance approvers for transactions over $10,000", "effect": "EFFECT_ALLOW", "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" } ``` -### Automated payments to allowlisted recipients +### Executive approval for major transactions ```json { - "policyName": "Backend can execute scheduled payroll", + "policyName": "CFO required for transactions over $50,000", "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to in ['', '', ''] && eth.tx.value <= 10000000000000000000000" + "consensus": "approvers.any(user, user.tags.contains('cfo'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 50000000000000000000000" } ``` -See [Policy Language](/concepts/policies/language) for the full policy syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. +## Example: Spending controls + +Implement organizational controls beyond simple approval requirements. + +| Control | Policy approach | +| :--- | :--- | +| **Per-transaction limits** | Set `eth.tx.value` ceiling in condition | +| **Recipient restrictions** | Allowlist addresses with `eth.tx.to in [...]` | +| **Role-based limits** | Different `consensus` rules per spending tier | +| **Asset restrictions** | Filter by contract address for token transfers | + +See [Policy Language](/concepts/policies/language) for the full syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. ## Trusted by leading businesses From 8bb1e4d01d3d97fa748b68892dcaf21e5c853021 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 12:09:51 -0600 Subject: [PATCH 16/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index fc8827e5..4e9ae1dc 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -5,15 +5,15 @@ description: "Use Turnkey's embedded wallet infrastructure for internal enterpri ## Embedded Business Wallets -Manage organizational wallets with programmable controls. Define approval workflows, spending limits, and access policies. Private keys stay in hardware-backed enclaves. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. +Manage organizational wallets with programmable controls. Define approval workflows, spending limits, and access policies. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. ## Why Turnkey for Embedded Business Wallets? The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. -Turnkey runs wallet infrastructure for business operations. Create wallets for your organization. Optionally define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private keys stay in hardware-backed enclaves, secured through Turnkey's [verifiable security architecture](/security/our-approach). +Let Turnkey run your wallet infrastructure for business operations. Optionally define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are secured through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to encode your approval workflows. No smart contract deployments. No on-chain coordination. Update rules instantly. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination are necessary. ## Typical use cases @@ -30,7 +30,7 @@ Use the policy engine to encode your approval workflows. No smart contract deplo **Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. -**Role-based access control**: Assign permissions via user tags. Finance team signs up to $10k. Executives required above $50k. Operators handle day-to-day transactions. +**Role-based access control**: User tags create groups that policies apply to. Tag users as "finance-team" or "executive", then write policies that grant specific permissions to those groups. **Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. From 2e66503673cb9b1af9119d6e34c3b10e7b1716bf Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 16:53:19 -0600 Subject: [PATCH 17/47] Wording edits --- products/embedded-business-wallets/overview.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 4e9ae1dc..463cfd79 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -5,17 +5,17 @@ description: "Use Turnkey's embedded wallet infrastructure for internal enterpri ## Embedded Business Wallets -Manage organizational wallets with programmable controls. Define approval workflows, spending limits, and access policies. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. +Manage your organization's wallets with programmable controls. Define approval workflows, spending limits, and access policies. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. ## Why Turnkey for Embedded Business Wallets? The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. -Let Turnkey run your wallet infrastructure for business operations. Optionally define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are secured through Turnkey's [verifiable security architecture](/security/our-approach). +Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination are necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. -## Typical use cases +## Common use cases | Need | Turnkey solution | | :--- | :--- | @@ -30,7 +30,7 @@ Use the policy engine to define your approval workflows. No contract deployments **Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. -**Role-based access control**: User tags create groups that policies apply to. Tag users as "finance-team" or "executive", then write policies that grant specific permissions to those groups. +**Role-based access control (RBAC)**: Tag users as "finance-team" or "executive", then use Turnkey's policy engine to grant specific permissions to those groups. **Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. From 327a665e9cde6e12cd499386136aff5a1ba03ed5 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 16:58:29 -0600 Subject: [PATCH 18/47] Add example --- .../embedded-business-wallets/overview.mdx | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 463cfd79..564de187 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -19,12 +19,13 @@ Use the policy engine to define your approval workflows. No contract deployments | Need | Turnkey solution | | :--- | :--- | +| Merchant deposit addresses | Instant wallet provisioning with policy-enforced sweeping to omnibus | | Treasury management | Centralized funds with role-based access and multi-approval requirements | | Payroll automation | Scheduled payments to allowlisted recipients without manual signing | | Vendor payments | Contact lists with pre-approved addresses and spending limits | | Delegated spending | Grant limited payment authority to teams or individuals | | Multi-approval workflows | Require 2+ approvers for high-value transactions | -| Spending controls | Per-transaction limits, daily caps, recipient restrictions | +| Asset restrictions | Only approved tokens (e.g., USDC) can be transferred | ## Core capabilities @@ -38,9 +39,51 @@ Use the policy engine to define your approval workflows. No contract deployments **Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. +## Example: Merchant deposit addresses with automated sweeping + +Provision deposit addresses instantly for merchants or customers. Enforce that funds can only move to your omnibus wallet, and only approved assets (like USDC) can be transferred. + +**Architecture:** + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ Merchant A │ │ Merchant B │ │ Merchant C │ +│ Deposit Addr │ │ Deposit Addr │ │ Deposit Addr │ +└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ + │ │ │ + │ USDC-only policy │ │ + └───────────────────────┼───────────────────────┘ + │ + ▼ + ┌────────────────────────┐ + │ Omnibus Wallet │ + │ (Consolidated) │ + └────────────────────────┘ +``` + +**Policy: Restrict transfers to USDC only, omnibus destination only** + +```json +{ + "policyName": "USDC transfers to omnibus only", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('sweep-service'))", + "condition": "eth.tx.to == '' && eth.tx.data[34..74] == ''" +} +``` + +All other transfer attempts are implicitly denied. Wrong token? Denied. Wrong destination? Denied. The policy engine enforces your rules at signing time. + +**Transaction flow:** +1. Create merchant wallet instantly via API (under 2 seconds) +2. Customer deposits funds to merchant's address +3. Backend sweep service lists balances across all merchant wallets +4. Sweep service signs transfers to omnibus wallet +5. Policy enforces USDC-only, omnibus-only at signing time + ## Example: Contractor and vendor payments -Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements or other payments. +Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements. **Set up recipient allowlist policy:** From b56df5f685289dd657fd0402877036cab6ffb546 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Tue, 17 Feb 2026 17:01:42 -0600 Subject: [PATCH 19/47] Fix use cases --- products/embedded-business-wallets/overview.mdx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 564de187..a151e86f 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -19,13 +19,13 @@ Use the policy engine to define your approval workflows. No contract deployments | Need | Turnkey solution | | :--- | :--- | -| Merchant deposit addresses | Instant wallet provisioning with policy-enforced sweeping to omnibus | -| Treasury management | Centralized funds with role-based access and multi-approval requirements | -| Payroll automation | Scheduled payments to allowlisted recipients without manual signing | -| Vendor payments | Contact lists with pre-approved addresses and spending limits | -| Delegated spending | Grant limited payment authority to teams or individuals | -| Multi-approval workflows | Require 2+ approvers for high-value transactions | -| Asset restrictions | Only approved tokens (e.g., USDC) can be transferred | +| [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | +| [Treasury management](#example-multi-approval-workflows) | Centralized funds with role-based access and multi-approval requirements | +| [Payroll automation](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | +| [Vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | +| [Delegated spending](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | +| [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | +| [Asset restrictions](#example-merchant-deposit-addresses-with-automated-sweeping) | Only approved tokens (e.g., USDC) can be transferred | ## Core capabilities From d5d68040a3b919645ea4f5c74175be26032aac88 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Wed, 18 Feb 2026 12:35:46 -0600 Subject: [PATCH 20/47] Reframe --- .../embedded-business-wallets/overview.mdx | 353 +++++++----------- 1 file changed, 130 insertions(+), 223 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index a151e86f..7917cd4a 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -3,244 +3,151 @@ title: "Embedded Business Wallets" description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." --- -## Embedded Business Wallets +# Embedded Business Wallets -Manage your organization's wallets with programmable controls. Define approval workflows, spending limits, and access policies. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. +Business embedded wallets: custody model, approval workflows, access controls, and operational architecture. Turnkey provides secure key infrastructure in TEEs while you control roles, policies, automation, and spending guardrails. -## Why Turnkey for Embedded Business Wallets? +## Why business embedded wallets? -The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. +Embedded business wallets let organizations manage treasury, payroll, vendor payments, and internal spending without handling private keys directly. -Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). +Turnkey runs the wallet infrastructure inside hardware-backed [Trusted Execution Environments (TEEs)](/security/our-approach). Keys never leave the enclave. All signing is policy-controlled and verifiable. -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Unlike consumer wallets, business wallets typically require: -## Common use cases +- Multi-user access +- Approval workflows +- Spending limits and budgets +- Recipient allowlists +- Backend automation +- Auditability and control -| Need | Turnkey solution | -| :--- | :--- | -| [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | -| [Treasury management](#example-multi-approval-workflows) | Centralized funds with role-based access and multi-approval requirements | -| [Payroll automation](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | -| [Vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | -| [Delegated spending](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | -| [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | -| [Asset restrictions](#example-merchant-deposit-addresses-with-automated-sweeping) | Only approved tokens (e.g., USDC) can be transferred | +Turnkey’s policy engine lets you define who can sign, what they can sign, how many approvals are required, and under what conditions — without deploying contracts or coordinating onchain logic. + +See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. + +--- + +## Key implementation decisions + +For a full map of embedded wallet capabilities, see the [Features overview](/embedded-wallets/features/overview). + +| Decision | Summary | Learn more | +| :-- | :-- | :-- | +| **Custody model** | Team-controlled, backend-controlled, or delegated/hybrid. Configure via policies and organizational roles. | [Policy Quickstart](/concepts/policies/quickstart), [Delegated Access](/concepts/policies/delegated-access-overview) | +| **Authentication** | Passkeys, OAuth/email, SSO, or API keys for backend services. | [Authentication Overview](/authentication/overview) | +| **Session management** | Operator sessions vs service credentials; configurable expiration and storage. | [Sessions](/authentication/sessions) | +| **Wallet architecture** | Key-based (HD) or smart contract wallets depending on treasury requirements. | [Wallets Concept](/concepts/wallets) | +| **Transaction management** | Policy-enforced approvals, spending caps, allowlists, and automation. | [Transaction Management](/concepts/transaction-management) | +| **Key portability** | Optional import/export for migration, DR, or governance controls. | [Export](/embedded-wallets/code-examples/export), [Import](/embedded-wallets/code-examples/import) | + +--- + +## Custody model + +Choose how control is distributed across your organization: + +| Model | Description | +| :-- | :-- | +| **Team-controlled** | Multiple users authorize actions under role or quorum rules. | +| **Backend-controlled** | Automated services sign within scoped permissions. | +| **Delegated / hybrid** | Humans and automation share scoped authority. | + +Policies define exactly who can sign what, with what limits. + +--- + +## Authentication + +Business wallets often mix interactive and automated access: + +- **Passkeys / OAuth / SSO:** For operators and finance teams. +- **API keys:** For backend services (sweeps, payroll, rebalancing). +- **Email-based auth:** For smaller teams or transitional setups. + +Authentication binds each request to an approved identity. Signing cannot occur without a valid, policy-approved request. + +See [Authentication Overview](/authentication/overview). + +--- + +## Session management + +Choose how operators and services stay authorized: + +- **Operator sessions:** Read-write sessions for finance or operations teams. +- **Service credentials:** API-based authentication for backend automation. +- **Session duration:** Default 15 minutes (configurable). +- **Storage:** IndexedDB (web), SecureStorage (mobile), or LocalStorage depending on architecture. + +See [Sessions](/authentication/sessions). + +--- + +## Wallet architecture + +| Approach | Pros | Considerations | +| :-- | :-- | :-- | +| **Key-based (HD wallets)** | Simple, chain-agnostic, broad compatibility. | Standard derivation and signing. | +| **Smart contract wallets** | Advanced permissions, batching, sponsorship. | Requires deployment and infrastructure. | + +Turnkey supports both. See [Wallets Concept](/concepts/wallets). + +--- + +## Transaction management + +Business operations require programmable guardrails: + +- Multi-approval workflows +- Spending caps (per transaction or daily) +- Role-based limits +- Recipient allowlists +- Asset restrictions (e.g., USDC-only) +- Automated recurring payments + +All enforced at signing time by the policy engine. + +See [Transaction Management](/concepts/transaction-management). + +--- ## Core capabilities -**Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. +### Programmable approval requirements + +Define thresholds and quorum rules. +Small payments auto-approve. Large transfers require multiple signers. -**Role-based access control (RBAC)**: Tag users as "finance-team" or "executive", then use Turnkey's policy engine to grant specific permissions to those groups. +### Role-based access control (RBAC) -**Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. +Assign tags such as `finance-team`, `executive`, or `operations`. +Policies reference those tags to grant scoped permissions. -**Automated scheduled payments**: Backend services sign recurring transactions (payroll, subscriptions) based on policy rules. No manual intervention required. - -**Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. +### Recipient allowlists -## Example: Merchant deposit addresses with automated sweeping +Maintain approved vendor addresses. +Transactions outside the allowlist are denied automatically. -Provision deposit addresses instantly for merchants or customers. Enforce that funds can only move to your omnibus wallet, and only approved assets (like USDC) can be transferred. +### Automated scheduled payments + +Backend services sign recurring transactions within defined limits. + +### Spending limits + +Enforce transaction ceilings, daily caps, and asset restrictions at the policy layer. + +--- -**Architecture:** - -``` -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ Merchant A │ │ Merchant B │ │ Merchant C │ -│ Deposit Addr │ │ Deposit Addr │ │ Deposit Addr │ -└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ - │ │ │ - │ USDC-only policy │ │ - └───────────────────────┼───────────────────────┘ - │ - ▼ - ┌────────────────────────┐ - │ Omnibus Wallet │ - │ (Consolidated) │ - └────────────────────────┘ -``` - -**Policy: Restrict transfers to USDC only, omnibus destination only** - -```json -{ - "policyName": "USDC transfers to omnibus only", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('sweep-service'))", - "condition": "eth.tx.to == '' && eth.tx.data[34..74] == ''" -} -``` - -All other transfer attempts are implicitly denied. Wrong token? Denied. Wrong destination? Denied. The policy engine enforces your rules at signing time. - -**Transaction flow:** -1. Create merchant wallet instantly via API (under 2 seconds) -2. Customer deposits funds to merchant's address -3. Backend sweep service lists balances across all merchant wallets -4. Sweep service signs transfers to omnibus wallet -5. Policy enforces USDC-only, omnibus-only at signing time - -## Example: Contractor and vendor payments - -Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements. - -**Set up recipient allowlist policy:** - -```json -{ - "policyName": "Auto-approve payments to verified vendors", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('accounts-payable'))", - "condition": "eth.tx.to in ['', '', '']" -} -``` - -Payments to known recipients execute with single approval. Add new vendors by updating the policy. No on-chain changes required. - -## Example: Scheduled recurring payments - -Set up automated payments that execute on a schedule without manual signing. Pay contractors on the last business day of each month for the next 6 months. - - - - Define recurring payments in your application: recipient, amount, frequency, duration. - - - Allow your backend service to sign transactions to specific recipients up to specified amounts: +## Example: Treasury-style wallet - ```json - { - "policyName": "Backend can execute monthly contractor payments", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to in ['', ''] && eth.tx.value <= 5000000000000000000000" - } - ``` - - - Your backend executes payments when due. No manual approval required for pre-authorized recipients and amounts. - - +Typical requirements and how Turnkey addresses them: -## Example: Delegated spending authority - -Grant limited payment permissions to individuals or teams without giving full wallet access. - -### Petty cash for operators - -```json -{ - "policyName": "Operators can make small purchases", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('operator'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 500000000000000000000" -} -``` - -### Contractor self-service withdrawals - -```json -{ - "policyName": "Contractor can withdraw earned funds to registered address", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to == '' && eth.tx.value <= 2000000000000000000000" -} -``` - -### Department budgets - -Assign each department a spending limit. Marketing can spend up to $25k without executive approval: - -```json -{ - "policyName": "Marketing team budget authority", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('marketing-team'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 25000000000000000000000" -} -``` - -## Example: Multi-approval workflows - -Require multiple approvers for high-value or sensitive transactions. - -### Two finance approvers for large payments - -```json -{ - "policyName": "Require 2 finance approvers for transactions over $10,000", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" -} -``` - -### Executive approval for major transactions - -```json -{ - "policyName": "CFO required for transactions over $50,000", - "effect": "EFFECT_ALLOW", - "consensus": "approvers.any(user, user.tags.contains('cfo'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 50000000000000000000000" -} -``` - -## Example: Spending controls - -Implement organizational controls beyond simple approval requirements. - -| Control | Policy approach | -| :--- | :--- | -| **Per-transaction limits** | Set `eth.tx.value` ceiling in condition | -| **Recipient restrictions** | Allowlist addresses with `eth.tx.to in [...]` | -| **Role-based limits** | Different `consensus` rules per spending tier | -| **Asset restrictions** | Filter by contract address for token transfers | - -See [Policy Language](/concepts/policies/language) for the full syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. - -## Trusted by leading businesses - -Turnkey's infrastructure powers enterprise payment operations at scale. See [Turnkey Customers](https://www.turnkey.com/customers) for more examples. - -**[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments)**: Cross-border stablecoin payments for non-crypto-native organizations. - -| Metric | Value | -| :--- | :--- | -| Monthly stablecoin payments | 5,000+ | -| Transaction volume (12 months) | $200M+ | -| Integration time | 3 weeks | - -> "Turnkey strikes that rare balance between uncompromising security and an intuitive user experience." -> -> Chris Fernandes, Co-founder and CTO, Mural Pay - -## Implementation workflow - - - - Sign up for Turnkey and create your parent organization. This serves as your administrative control plane. - - - Create wallets for your business operations: treasury, payroll, vendor payments. See [Wallets Concept](/concepts/wallets) for HD wallet structure. - - - Create user tags representing roles in your organization (finance, operations, executive). Add users and assign appropriate tags. - - - Write policies encoding your approval workflows and spending controls. See [Policy Quickstart](/concepts/policies/quickstart) for setup guidance. - - - Integrate Turnkey's API to build approval interfaces, payment automation, and operational dashboards. See [Transaction Automation](/signing-automation/overview) for backend signing patterns. - - - -## Resources - -- [Policy Engine Overview](/concepts/policies/overview): Fundamentals of Turnkey policies -- [Access Control Examples](/concepts/policies/examples/access-control): Sample RBAC policies -- [Signing Control Examples](/concepts/policies/examples/signing-control): Transaction signing policies -- [Delegated Access](/concepts/policies/delegated-access-overview): Backend automation patterns -- [Transaction Automation](/signing-automation/overview): Building automated signing workflows +| Requirement | Turnkey capability | +| :-- | :-- | +| Multi-user approvals | Quorum-based consensus rules | +| Vendor allowlists | `eth.tx.to in [...]` policies | +| Department budgets | Value ceilings scoped by user tags | +| Automated sweeps | Backend service with restricted signing scope | +| Asset controls | Restrict by token contract address | +| No key exposure | Keys remain inside secure e From 3b434ad5686aa88d2d766a13cb2f4c1fbabc577f Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Wed, 18 Feb 2026 12:42:11 -0600 Subject: [PATCH 21/47] remove redundant header --- .../embedded-business-wallets/overview.mdx | 355 +++++++++++------- 1 file changed, 222 insertions(+), 133 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 7917cd4a..ba4419d8 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -1,153 +1,242 @@ --- title: "Embedded Business Wallets" -description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." +description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart." --- -# Embedded Business Wallets +## Why Turnkey for Embedded Business Wallets? -Business embedded wallets: custody model, approval workflows, access controls, and operational architecture. Turnkey provides secure key infrastructure in TEEs while you control roles, policies, automation, and spending guardrails. +The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. -## Why business embedded wallets? +Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Embedded business wallets let organizations manage treasury, payroll, vendor payments, and internal spending without handling private keys directly. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. -Turnkey runs the wallet infrastructure inside hardware-backed [Trusted Execution Environments (TEEs)](/security/our-approach). Keys never leave the enclave. All signing is policy-controlled and verifiable. +## Common use cases -Unlike consumer wallets, business wallets typically require: - -- Multi-user access -- Approval workflows -- Spending limits and budgets -- Recipient allowlists -- Backend automation -- Auditability and control - -Turnkey’s policy engine lets you define who can sign, what they can sign, how many approvals are required, and under what conditions — without deploying contracts or coordinating onchain logic. - -See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart. - ---- - -## Key implementation decisions - -For a full map of embedded wallet capabilities, see the [Features overview](/embedded-wallets/features/overview). - -| Decision | Summary | Learn more | -| :-- | :-- | :-- | -| **Custody model** | Team-controlled, backend-controlled, or delegated/hybrid. Configure via policies and organizational roles. | [Policy Quickstart](/concepts/policies/quickstart), [Delegated Access](/concepts/policies/delegated-access-overview) | -| **Authentication** | Passkeys, OAuth/email, SSO, or API keys for backend services. | [Authentication Overview](/authentication/overview) | -| **Session management** | Operator sessions vs service credentials; configurable expiration and storage. | [Sessions](/authentication/sessions) | -| **Wallet architecture** | Key-based (HD) or smart contract wallets depending on treasury requirements. | [Wallets Concept](/concepts/wallets) | -| **Transaction management** | Policy-enforced approvals, spending caps, allowlists, and automation. | [Transaction Management](/concepts/transaction-management) | -| **Key portability** | Optional import/export for migration, DR, or governance controls. | [Export](/embedded-wallets/code-examples/export), [Import](/embedded-wallets/code-examples/import) | - ---- - -## Custody model - -Choose how control is distributed across your organization: - -| Model | Description | -| :-- | :-- | -| **Team-controlled** | Multiple users authorize actions under role or quorum rules. | -| **Backend-controlled** | Automated services sign within scoped permissions. | -| **Delegated / hybrid** | Humans and automation share scoped authority. | - -Policies define exactly who can sign what, with what limits. - ---- - -## Authentication - -Business wallets often mix interactive and automated access: - -- **Passkeys / OAuth / SSO:** For operators and finance teams. -- **API keys:** For backend services (sweeps, payroll, rebalancing). -- **Email-based auth:** For smaller teams or transitional setups. - -Authentication binds each request to an approved identity. Signing cannot occur without a valid, policy-approved request. - -See [Authentication Overview](/authentication/overview). - ---- - -## Session management - -Choose how operators and services stay authorized: - -- **Operator sessions:** Read-write sessions for finance or operations teams. -- **Service credentials:** API-based authentication for backend automation. -- **Session duration:** Default 15 minutes (configurable). -- **Storage:** IndexedDB (web), SecureStorage (mobile), or LocalStorage depending on architecture. - -See [Sessions](/authentication/sessions). - ---- - -## Wallet architecture - -| Approach | Pros | Considerations | -| :-- | :-- | :-- | -| **Key-based (HD wallets)** | Simple, chain-agnostic, broad compatibility. | Standard derivation and signing. | -| **Smart contract wallets** | Advanced permissions, batching, sponsorship. | Requires deployment and infrastructure. | - -Turnkey supports both. See [Wallets Concept](/concepts/wallets). - ---- - -## Transaction management - -Business operations require programmable guardrails: - -- Multi-approval workflows -- Spending caps (per transaction or daily) -- Role-based limits -- Recipient allowlists -- Asset restrictions (e.g., USDC-only) -- Automated recurring payments - -All enforced at signing time by the policy engine. - -See [Transaction Management](/concepts/transaction-management). - ---- +| Need | Turnkey solution | +| :--- | :--- | +| [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | +| [Treasury management](#example-multi-approval-workflows) | Centralized funds with role-based access and multi-approval requirements | +| [Payroll automation](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | +| [Vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | +| [Delegated spending](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | +| [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | +| [Asset restrictions](#example-merchant-deposit-addresses-with-automated-sweeping) | Only approved tokens (e.g., USDC) can be transferred | ## Core capabilities -### Programmable approval requirements - -Define thresholds and quorum rules. -Small payments auto-approve. Large transfers require multiple signers. +**Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. -### Role-based access control (RBAC) +**Role-based access control (RBAC)**: Tag users as "finance-team" or "executive", then use Turnkey's policy engine to grant specific permissions to those groups. -Assign tags such as `finance-team`, `executive`, or `operations`. -Policies reference those tags to grant scoped permissions. +**Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. -### Recipient allowlists +**Automated scheduled payments**: Backend services sign recurring transactions (payroll, subscriptions) based on policy rules. No manual intervention required. + +**Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. -Maintain approved vendor addresses. -Transactions outside the allowlist are denied automatically. +## Example: Merchant deposit addresses with automated sweeping -### Automated scheduled payments - -Backend services sign recurring transactions within defined limits. - -### Spending limits - -Enforce transaction ceilings, daily caps, and asset restrictions at the policy layer. - ---- +Provision deposit addresses instantly for merchants or customers. Enforce that funds can only move to your omnibus wallet, and only approved assets (like USDC) can be transferred. -## Example: Treasury-style wallet +**Architecture:** + +``` +┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ +│ Merchant A │ │ Merchant B │ │ Merchant C │ +│ Deposit Addr │ │ Deposit Addr │ │ Deposit Addr │ +└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ + │ │ │ + │ USDC-only policy │ │ + └───────────────────────┼───────────────────────┘ + │ + ▼ + ┌────────────────────────┐ + │ Omnibus Wallet │ + │ (Consolidated) │ + └────────────────────────┘ +``` + +**Policy: Restrict transfers to USDC only, omnibus destination only** + +```json +{ + "policyName": "USDC transfers to omnibus only", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('sweep-service'))", + "condition": "eth.tx.to == '' && eth.tx.data[34..74] == ''" +} +``` + +All other transfer attempts are implicitly denied. Wrong token? Denied. Wrong destination? Denied. The policy engine enforces your rules at signing time. + +**Transaction flow:** +1. Create merchant wallet instantly via API (under 2 seconds) +2. Customer deposits funds to merchant's address +3. Backend sweep service lists balances across all merchant wallets +4. Sweep service signs transfers to omnibus wallet +5. Policy enforces USDC-only, omnibus-only at signing time + +## Example: Contractor and vendor payments + +Maintain a contact list of approved payment recipients. Store each contractor's preferred wallet address for USDC disbursements. + +**Set up recipient allowlist policy:** + +```json +{ + "policyName": "Auto-approve payments to verified vendors", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('accounts-payable'))", + "condition": "eth.tx.to in ['', '', '']" +} +``` + +Payments to known recipients execute with single approval. Add new vendors by updating the policy. No on-chain changes required. + +## Example: Scheduled recurring payments + +Set up automated payments that execute on a schedule without manual signing. Pay contractors on the last business day of each month for the next 6 months. + + + + Define recurring payments in your application: recipient, amount, frequency, duration. + + + Allow your backend service to sign transactions to specific recipients up to specified amounts: -Typical requirements and how Turnkey addresses them: + ```json + { + "policyName": "Backend can execute monthly contractor payments", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to in ['', ''] && eth.tx.value <= 5000000000000000000000" + } + ``` + + + Your backend executes payments when due. No manual approval required for pre-authorized recipients and amounts. + + -| Requirement | Turnkey capability | -| :-- | :-- | -| Multi-user approvals | Quorum-based consensus rules | -| Vendor allowlists | `eth.tx.to in [...]` policies | -| Department budgets | Value ceilings scoped by user tags | -| Automated sweeps | Backend service with restricted signing scope | -| Asset controls | Restrict by token contract address | -| No key exposure | Keys remain inside secure e +## Example: Delegated spending authority + +Grant limited payment permissions to individuals or teams without giving full wallet access. + +### Petty cash for operators + +```json +{ + "policyName": "Operators can make small purchases", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('operator'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 500000000000000000000" +} +``` + +### Contractor self-service withdrawals + +```json +{ + "policyName": "Contractor can withdraw earned funds to registered address", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.id == '')", + "condition": "eth.tx.to == '' && eth.tx.value <= 2000000000000000000000" +} +``` + +### Department budgets + +Assign each department a spending limit. Marketing can spend up to $25k without executive approval: + +```json +{ + "policyName": "Marketing team budget authority", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('marketing-team'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 25000000000000000000000" +} +``` + +## Example: Multi-approval workflows + +Require multiple approvers for high-value or sensitive transactions. + +### Two finance approvers for large payments + +```json +{ + "policyName": "Require 2 finance approvers for transactions over $10,000", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" +} +``` + +### Executive approval for major transactions + +```json +{ + "policyName": "CFO required for transactions over $50,000", + "effect": "EFFECT_ALLOW", + "consensus": "approvers.any(user, user.tags.contains('cfo'))", + "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 50000000000000000000000" +} +``` + +## Example: Spending controls + +Implement organizational controls beyond simple approval requirements. + +| Control | Policy approach | +| :--- | :--- | +| **Per-transaction limits** | Set `eth.tx.value` ceiling in condition | +| **Recipient restrictions** | Allowlist addresses with `eth.tx.to in [...]` | +| **Role-based limits** | Different `consensus` rules per spending tier | +| **Asset restrictions** | Filter by contract address for token transfers | + +See [Policy Language](/concepts/policies/language) for the full syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. + +## Trusted by leading businesses + +Turnkey's infrastructure powers enterprise payment operations at scale. See [Turnkey Customers](https://www.turnkey.com/customers) for more examples. + +**[Mural Pay](https://www.turnkey.com/customers/mural-pay-cross-border-payments)**: Cross-border stablecoin payments for non-crypto-native organizations. + +| Metric | Value | +| :--- | :--- | +| Monthly stablecoin payments | 5,000+ | +| Transaction volume (12 months) | $200M+ | +| Integration time | 3 weeks | + +> "Turnkey strikes that rare balance between uncompromising security and an intuitive user experience." +> +> Chris Fernandes, Co-founder and CTO, Mural Pay + +## Implementation workflow + + + + Sign up for Turnkey and create your parent organization. This serves as your administrative control plane. + + + Create wallets for your business operations: treasury, payroll, vendor payments. See [Wallets Concept](/concepts/wallets) for HD wallet structure. + + + Create user tags representing roles in your organization (finance, operations, executive). Add users and assign appropriate tags. + + + Write policies encoding your approval workflows and spending controls. See [Policy Quickstart](/concepts/policies/quickstart) for setup guidance. + + + Integrate Turnkey's API to build approval interfaces, payment automation, and operational dashboards. See [Transaction Automation](/signing-automation/overview) for backend signing patterns. + + + +## Resources + +- [Policy Engine Overview](/concepts/policies/overview): Fundamentals of Turnkey policies +- [Access Control Examples](/concepts/policies/examples/access-control): Sample RBAC policies +- [Signing Control Examples](/concepts/policies/examples/signing-control): Transaction signing policies +- [Delegated Access](/concepts/policies/delegated-access-overview): Backend automation patterns +- [Transaction Automation](/signing-automation/overview): Building automated signing workflows From f32e9cc1e441ed32cb4c0ee0867d0c3d74d0e8ac Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Wed, 18 Feb 2026 12:46:00 -0600 Subject: [PATCH 22/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index ba4419d8..0a63ac3b 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -1,6 +1,6 @@ --- title: "Embedded Business Wallets" -description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls. See [Embedded Wallets Overview](/embedded-wallets/overview) for the consumer-facing counterpart." +description: "Use Turnkey's embedded wallet infrastructure for internal enterprise operations: treasury management, payroll automation, vendor payments, and organizational spending controls." --- ## Why Turnkey for Embedded Business Wallets? From e5a3bd39ddd09027c35003323003cc7f384633c8 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 11:38:58 -0600 Subject: [PATCH 23/47] Signing test --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 0a63ac3b..fb14dc81 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. ## Common use cases From 36e7d1afb0c7cd2bfb3f50414815648a88ac325b Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 11:39:54 -0600 Subject: [PATCH 24/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index fb14dc81..0a63ac3b 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. ## Common use cases From 4ed65073b7bc4215bfa59afe8acace313eba4f3e Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 11:43:59 -0600 Subject: [PATCH 25/47] Update docs.json --- docs.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs.json b/docs.json index e0f47d74..d58bce35 100644 --- a/docs.json +++ b/docs.json @@ -171,6 +171,7 @@ "pages": [ "category/code-examples", "embedded-wallets/code-examples/embedded-consumer-wallet", + "products/embedded-business-wallets/overview", "embedded-wallets/code-examples/create-sub-org-passkey", "embedded-wallets/code-examples/authenticate-user-passkey", "embedded-wallets/code-examples/create-passkey-session", @@ -224,8 +225,7 @@ ] } ] - }, - "products/embedded-business-wallets/overview" + } ] }, { From 42ecf9c2cd6d9675630c4fb1f68ab3f4bc84df98 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 11:54:08 -0600 Subject: [PATCH 26/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 0a63ac3b..fb14dc81 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. ## Common use cases From 8b812a369cc0cdd98c99a12279f08b58eaa86e6b Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 11:54:18 -0600 Subject: [PATCH 27/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index fb14dc81..0a63ac3b 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. ## Common use cases From b766a2b7b6a50a4f237f3e36b7f6a178c4a73764 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 11:57:18 -0600 Subject: [PATCH 28/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 0a63ac3b..ce869f3d 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. Test ## Common use cases From fea002a49c6d11480c05b6bd350b7f25a81133fb Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 12:00:46 -0600 Subject: [PATCH 29/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index ce869f3d..0a63ac3b 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. Test +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. ## Common use cases From a0a69e93792bd3e8a18e736277c609d2f28d8ccb Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 12:01:38 -0600 Subject: [PATCH 30/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 0a63ac3b..ce869f3d 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. Test ## Common use cases From 862d896bf6ddb3253eb79eb644fe5e934a334926 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 12:01:45 -0600 Subject: [PATCH 31/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index ce869f3d..0a63ac3b 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -9,7 +9,7 @@ The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. Test +Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. ## Common use cases From ee9af35ab1a9577ac27e88696bd82766e7c6f95e Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 13:45:24 -0600 Subject: [PATCH 32/47] unscuff USDC transfer thing --- products/embedded-business-wallets/overview.mdx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 0a63ac3b..37b03b3e 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -25,7 +25,7 @@ Use the policy engine to define your approval workflows. No contract deployments ## Core capabilities -**Programmable approval requirements**: Define how many approvals each transaction type needs. Small payments auto-approve. Large transfers require multiple signers. Update thresholds without code changes. +**Programmable approval requirements**: Define how many approvals each transaction type needs. For example, small payments auto-approve, large transfers require multiple signers. **Role-based access control (RBAC)**: Tag users as "finance-team" or "executive", then use Turnkey's policy engine to grant specific permissions to those groups. @@ -59,12 +59,14 @@ Provision deposit addresses instantly for merchants or customers. Enforce that f **Policy: Restrict transfers to USDC only, omnibus destination only** +First, upload the USDC contract ABI as a [smart contract interface](/concepts/policies/smart-contract-interfaces) via the dashboard or API. Then create a policy that references the parsed contract call arguments: + ```json { "policyName": "USDC transfers to omnibus only", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.tags.contains('sweep-service'))", - "condition": "eth.tx.to == '' && eth.tx.data[34..74] == ''" + "condition": "eth.tx.to == '' && eth.tx.function_name == 'transfer' && eth.tx.contract_call_args['_to'] == ''" } ``` From 399fed77bdaf62c01fb92c361f014d48b7836cc8 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 13:48:06 -0600 Subject: [PATCH 33/47] contract abi and wording fix --- products/embedded-business-wallets/overview.mdx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 37b03b3e..e0e0f92f 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -73,8 +73,8 @@ First, upload the USDC contract ABI as a [smart contract interface](/concepts/po All other transfer attempts are implicitly denied. Wrong token? Denied. Wrong destination? Denied. The policy engine enforces your rules at signing time. **Transaction flow:** -1. Create merchant wallet instantly via API (under 2 seconds) -2. Customer deposits funds to merchant's address +1. Create a unique merchant address in instantly via API (~100ms) +2. Customer deposits funds to merchant's unique address 3. Backend sweep service lists balances across all merchant wallets 4. Sweep service signs transfers to omnibus wallet 5. Policy enforces USDC-only, omnibus-only at signing time @@ -85,12 +85,14 @@ Maintain a contact list of approved payment recipients. Store each contractor's **Set up recipient allowlist policy:** +With the USDC ABI uploaded as a [smart contract interface](/concepts/policies/smart-contract-interfaces), you can restrict payments to approved recipients: + ```json { "policyName": "Auto-approve payments to verified vendors", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.tags.contains('accounts-payable'))", - "condition": "eth.tx.to in ['', '', '']" + "condition": "eth.tx.to == '' && eth.tx.function_name == 'transfer' && eth.tx.contract_call_args['_to'] in ['', '', '']" } ``` From 7fa1c6bd2d5a9bfcb440ca42e5629bb21ed20af1 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 13:50:08 -0600 Subject: [PATCH 34/47] rm priv key --- .../embedded-business-wallets/overview.mdx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index e0e0f92f..fd509850 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -66,7 +66,7 @@ First, upload the USDC contract ABI as a [smart contract interface](/concepts/po "policyName": "USDC transfers to omnibus only", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.tags.contains('sweep-service'))", - "condition": "eth.tx.to == '' && eth.tx.function_name == 'transfer' && eth.tx.contract_call_args['_to'] == ''" + "condition": "wallet.id == '' && eth.tx.to == '' && eth.tx.function_name == 'transfer' && eth.tx.contract_call_args['_to'] == ''" } ``` @@ -92,7 +92,7 @@ With the USDC ABI uploaded as a [smart contract interface](/concepts/policies/sm "policyName": "Auto-approve payments to verified vendors", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.tags.contains('accounts-payable'))", - "condition": "eth.tx.to == '' && eth.tx.function_name == 'transfer' && eth.tx.contract_call_args['_to'] in ['', '', '']" + "condition": "wallet.id == '' && eth.tx.to == '' && eth.tx.function_name == 'transfer' && eth.tx.contract_call_args['_to'] in ['', '', '']" } ``` @@ -114,7 +114,7 @@ Set up automated payments that execute on a schedule without manual signing. Pay "policyName": "Backend can execute monthly contractor payments", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to in ['', ''] && eth.tx.value <= 5000000000000000000000" + "condition": "wallet.id == '' && eth.tx.to == '' && eth.tx.function_name == 'transfer' && eth.tx.contract_call_args['_to'] in ['', '']" } ``` @@ -134,7 +134,7 @@ Grant limited payment permissions to individuals or teams without giving full wa "policyName": "Operators can make small purchases", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.tags.contains('operator'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 500000000000000000000" + "condition": "wallet.id == '' && activity.action == 'SIGN' && eth.tx.value <= 500000000000000000000" } ``` @@ -145,7 +145,7 @@ Grant limited payment permissions to individuals or teams without giving full wa "policyName": "Contractor can withdraw earned funds to registered address", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.id == '')", - "condition": "eth.tx.to == '' && eth.tx.value <= 2000000000000000000000" + "condition": "wallet.id == '' && eth.tx.to == '' && eth.tx.value <= 2000000000000000000000" } ``` @@ -158,7 +158,7 @@ Assign each department a spending limit. Marketing can spend up to $25k without "policyName": "Marketing team budget authority", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.tags.contains('marketing-team'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value <= 25000000000000000000000" + "condition": "wallet.id == '' && activity.action == 'SIGN' && eth.tx.value <= 25000000000000000000000" } ``` @@ -173,7 +173,7 @@ Require multiple approvers for high-value or sensitive transactions. "policyName": "Require 2 finance approvers for transactions over $10,000", "effect": "EFFECT_ALLOW", "consensus": "approvers.filter(user, user.tags.contains('finance-team')).count() >= 2", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" + "condition": "wallet.id == '' && activity.action == 'SIGN' && eth.tx.value > 10000000000000000000000" } ``` @@ -184,7 +184,7 @@ Require multiple approvers for high-value or sensitive transactions. "policyName": "CFO required for transactions over $50,000", "effect": "EFFECT_ALLOW", "consensus": "approvers.any(user, user.tags.contains('cfo'))", - "condition": "activity.resource == 'PRIVATE_KEY' && activity.action == 'SIGN' && eth.tx.value > 50000000000000000000000" + "condition": "wallet.id == '' && activity.action == 'SIGN' && eth.tx.value > 50000000000000000000000" } ``` @@ -195,7 +195,7 @@ Implement organizational controls beyond simple approval requirements. | Control | Policy approach | | :--- | :--- | | **Per-transaction limits** | Set `eth.tx.value` ceiling in condition | -| **Recipient restrictions** | Allowlist addresses with `eth.tx.to in [...]` | +| **Recipient restrictions** | Allowlist addresses with `eth.tx.contract_call_args['_to'] in [...]` | | **Role-based limits** | Different `consensus` rules per spending tier | | **Asset restrictions** | Filter by contract address for token transfers | From 335578b70b95d795b4bb1d019c14ebda9dca5580 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 13:52:29 -0600 Subject: [PATCH 35/47] remove quote, link to tk signup --- products/embedded-business-wallets/overview.mdx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index fd509850..e2776008 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -213,15 +213,11 @@ Turnkey's infrastructure powers enterprise payment operations at scale. See [Tur | Transaction volume (12 months) | $200M+ | | Integration time | 3 weeks | -> "Turnkey strikes that rare balance between uncompromising security and an intuitive user experience." -> -> Chris Fernandes, Co-founder and CTO, Mural Pay - ## Implementation workflow - Sign up for Turnkey and create your parent organization. This serves as your administrative control plane. + [Sign up for Turnkey](https://app.turnkey.com/dashboard/auth/initial) and create your parent organization. Create wallets for your business operations: treasury, payroll, vendor payments. See [Wallets Concept](/concepts/wallets) for HD wallet structure. From 848af888c0ae235f9eb91d7280a6c2054e4638ee Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 13:56:09 -0600 Subject: [PATCH 36/47] fix table order --- products/embedded-business-wallets/overview.mdx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index e2776008..d69fa876 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -16,12 +16,11 @@ Use the policy engine to define your approval workflows. No contract deployments | Need | Turnkey solution | | :--- | :--- | | [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | -| [Treasury management](#example-multi-approval-workflows) | Centralized funds with role-based access and multi-approval requirements | -| [Payroll automation](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | -| [Vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | +| [Contractor and vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | +| [Scheduled recurring payments](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | | [Delegated spending](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | | [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | -| [Asset restrictions](#example-merchant-deposit-addresses-with-automated-sweeping) | Only approved tokens (e.g., USDC) can be transferred | +| [Spending controls](#example-spending-controls) | Per-transaction limits, asset restrictions, and role-based rules | ## Core capabilities From f39b01087a6ad0c8a1965a5655afe0c4f2cdb6fe Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 14:00:29 -0600 Subject: [PATCH 37/47] unslop --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index d69fa876..cc93ef05 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -32,7 +32,7 @@ Use the policy engine to define your approval workflows. No contract deployments **Automated scheduled payments**: Backend services sign recurring transactions (payroll, subscriptions) based on policy rules. No manual intervention required. -**Spending limits**: Enforce per-transaction maximums, daily outflow caps, and asset restrictions at the policy level. +**Spending limits**: Enforce per-transaction maximums, asset restrictions, or destination restrictions at the policy level. ## Example: Merchant deposit addresses with automated sweeping From 70a51a0a425408db54261e435af2fedc0450eb42 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 14:11:20 -0600 Subject: [PATCH 38/47] Remove EBW at top level products --- docs.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs.json b/docs.json index e9fd8696..d58bce35 100644 --- a/docs.json +++ b/docs.json @@ -225,8 +225,7 @@ ] } ] - }, - "products/embedded-business-wallets/overview" + } ] }, { From b65450678ac69cd20bb9e02266def6e903764734 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 15:44:21 -0600 Subject: [PATCH 39/47] better arch diagram --- .../embedded-business-wallets/overview.mdx | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index cc93ef05..e0f93e3f 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -41,19 +41,37 @@ Provision deposit addresses instantly for merchants or customers. Enforce that f **Architecture:** ``` -┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ -│ Merchant A │ │ Merchant B │ │ Merchant C │ -│ Deposit Addr │ │ Deposit Addr │ │ Deposit Addr │ -└────────┬────────┘ └────────┬────────┘ └────────┬────────┘ - │ │ │ - │ USDC-only policy │ │ - └───────────────────────┼───────────────────────┘ - │ - ▼ - ┌────────────────────────┐ - │ Omnibus Wallet │ - │ (Consolidated) │ - └────────────────────────┘ + MERCHANTS DEPOSIT ADDRESSES (Turnkey wallets) +┌─────────────┐ ┌─────────────────┐ +│ Merchant A │───────────────────▶│ Deposit Addr A │──┐ +└─────────────┘ └─────────────────┘ │ +┌─────────────┐ ┌─────────────────┐ │ +│ Merchant B │───────────────────▶│ Deposit Addr B │──┤ +└─────────────┘ └─────────────────┘ │ +┌─────────────┐ ┌─────────────────┐ │ +│ Merchant C │───────────────────▶│ Deposit Addr C │──┤ +└─────────────┘ └─────────────────┘ │ + │ + Sweep service initiates │ + transfer to omnibus │ + ▼ + ┌──────────────────────────────────┐ + │ TURNKEY POLICY ENGINE │ + │ │ + │ Is token USDC? │ + │ YES ──▶ continue │ + │ NO ──▶ DENIED │ + │ │ + │ Is destination omnibus wallet? │ + │ YES ──▶ APPROVED │ + │ NO ──▶ DENIED │ + └───────────────┬──────────────────┘ + │ + ▼ APPROVED + ┌──────────────────────────────┐ + │ Omnibus Wallet │ + │ (Consolidated treasury) │ + └──────────────────────────────┘ ``` **Policy: Restrict transfers to USDC only, omnibus destination only** From 1a348dcde248299bab9f3de3021f43b6ed4b156c Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 17:02:02 -0600 Subject: [PATCH 40/47] better diagram --- .../embedded-business-wallets/overview.mdx | 65 ++++++++++--------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index e0f93e3f..3187c243 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -41,37 +41,40 @@ Provision deposit addresses instantly for merchants or customers. Enforce that f **Architecture:** ``` - MERCHANTS DEPOSIT ADDRESSES (Turnkey wallets) -┌─────────────┐ ┌─────────────────┐ -│ Merchant A │───────────────────▶│ Deposit Addr A │──┐ -└─────────────┘ └─────────────────┘ │ -┌─────────────┐ ┌─────────────────┐ │ -│ Merchant B │───────────────────▶│ Deposit Addr B │──┤ -└─────────────┘ └─────────────────┘ │ -┌─────────────┐ ┌─────────────────┐ │ -│ Merchant C │───────────────────▶│ Deposit Addr C │──┤ -└─────────────┘ └─────────────────┘ │ - │ - Sweep service initiates │ - transfer to omnibus │ - ▼ - ┌──────────────────────────────────┐ - │ TURNKEY POLICY ENGINE │ - │ │ - │ Is token USDC? │ - │ YES ──▶ continue │ - │ NO ──▶ DENIED │ - │ │ - │ Is destination omnibus wallet? │ - │ YES ──▶ APPROVED │ - │ NO ──▶ DENIED │ - └───────────────┬──────────────────┘ - │ - ▼ APPROVED - ┌──────────────────────────────┐ - │ Omnibus Wallet │ - │ (Consolidated treasury) │ - └──────────────────────────────┘ +┌──────────────────────────────────────────────────────────────────────────────┐ +│ YOUR TURNKEY ORGANIZATION │ +│ │ +│ ┌────────────────────────────────────────────────────────────────────────┐ │ +│ │ HD Wallet │ │ +│ │ │ │ +│ │ createWalletAccounts() │ │ +│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ +│ │ │ Deposit Addr A │ │ Deposit Addr B │ │ Deposit Addr C │ ... │ │ +│ │ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │ │ +│ └───────────┼────────────────────┼────────────────────┼─────────────────┘ │ +│ │ │ │ │ +│ MERCHANTS │ │ │ │ +│ ┌───────────┴──┐ ┌─────────────┴──┐ ┌─────────────┴──┐ │ +│ │ Merchant A │ │ Merchant B │ │ Merchant C │ │ +│ │ (customer) │ │ (customer) │ │ (customer) │ │ +│ └──────────────┘ └────────────────┘ └────────────────┘ │ +│ │ +│ Sweep service initiates transfer to omnibus │ +│ │ │ +│ ▼ │ +│ ┌────────────────────────────────────────────────────────────────────────┐ │ +│ │ TURNKEY POLICY ENGINE │ │ +│ │ │ │ +│ │ Is token USDC? Is destination omnibus wallet? │ │ +│ │ YES ──▶ continue YES ──▶ APPROVED │ │ +│ │ NO ──▶ DENIED NO ──▶ DENIED │ │ +│ └───────────────────────────────────┬────────────────────────────────────┘ │ +│ │ │ +│ ▼ APPROVED │ +│ ┌────────────────────────────────────────────────────────────────────────┐ │ +│ │ Omnibus Wallet (Consolidated treasury) │ │ +│ └────────────────────────────────────────────────────────────────────────┘ │ +└──────────────────────────────────────────────────────────────────────────────┘ ``` **Policy: Restrict transfers to USDC only, omnibus destination only** From 8a2b379c3953b0b1d4f23ac79a9483f85e974843 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Thu, 19 Feb 2026 17:05:55 -0600 Subject: [PATCH 41/47] More sane diagram --- .../embedded-business-wallets/overview.mdx | 45 +++++-------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 3187c243..b1642de8 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -41,40 +41,17 @@ Provision deposit addresses instantly for merchants or customers. Enforce that f **Architecture:** ``` -┌──────────────────────────────────────────────────────────────────────────────┐ -│ YOUR TURNKEY ORGANIZATION │ -│ │ -│ ┌────────────────────────────────────────────────────────────────────────┐ │ -│ │ HD Wallet │ │ -│ │ │ │ -│ │ createWalletAccounts() │ │ -│ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ -│ │ │ Deposit Addr A │ │ Deposit Addr B │ │ Deposit Addr C │ ... │ │ -│ │ └────────┬────────┘ └────────┬────────┘ └────────┬────────┘ │ │ -│ └───────────┼────────────────────┼────────────────────┼─────────────────┘ │ -│ │ │ │ │ -│ MERCHANTS │ │ │ │ -│ ┌───────────┴──┐ ┌─────────────┴──┐ ┌─────────────┴──┐ │ -│ │ Merchant A │ │ Merchant B │ │ Merchant C │ │ -│ │ (customer) │ │ (customer) │ │ (customer) │ │ -│ └──────────────┘ └────────────────┘ └────────────────┘ │ -│ │ -│ Sweep service initiates transfer to omnibus │ -│ │ │ -│ ▼ │ -│ ┌────────────────────────────────────────────────────────────────────────┐ │ -│ │ TURNKEY POLICY ENGINE │ │ -│ │ │ │ -│ │ Is token USDC? Is destination omnibus wallet? │ │ -│ │ YES ──▶ continue YES ──▶ APPROVED │ │ -│ │ NO ──▶ DENIED NO ──▶ DENIED │ │ -│ └───────────────────────────────────┬────────────────────────────────────┘ │ -│ │ │ -│ ▼ APPROVED │ -│ ┌────────────────────────────────────────────────────────────────────────┐ │ -│ │ Omnibus Wallet (Consolidated treasury) │ │ -│ └────────────────────────────────────────────────────────────────────────┘ │ -└──────────────────────────────────────────────────────────────────────────────┘ +┌─────────────────────────────────────────────────┐ +│ TURNKEY ORGANIZATION │ +│ │ +│ Wallet ──▶ Unique deposit address per merchant │ +│ │ │ +│ ▼ │ +│ Policy Engine ──▶ Sweep to omnibus (USDC only) │ +│ │ │ +│ ▼ │ +│ Omnibus Wallet (consolidated treasury) │ +└─────────────────────────────────────────────────┘ ``` **Policy: Restrict transfers to USDC only, omnibus destination only** From ffe0bdd695f0dae2e23604fc0107f007ad8bec7b Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Fri, 27 Feb 2026 12:12:40 -0500 Subject: [PATCH 42/47] Fix table, steps, etc --- .../embedded-business-wallets/overview.mdx | 114 ++++++++++++++---- 1 file changed, 93 insertions(+), 21 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index b1642de8..ed38f6d9 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -5,40 +5,54 @@ description: "Use Turnkey's embedded wallet infrastructure for internal enterpri ## Why Turnkey for Embedded Business Wallets? -The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations: treasury, payroll, vendor payments, and operational funds. +The same [Embedded Wallet Kit](/embedded-wallets/overview) that powers consumer applications works equally well for internal business operations such as treasury, payroll, vendor payments, and operational funds. Let Turnkey run your wallet infrastructure for business operations. Define who can sign, what they can sign, and how many approvals are required. Set spending limits and recipient allowlists. Private key material and sensitive operations are protected through Turnkey's [verifiable security architecture](/security/our-approach). -Use the policy engine to define your approval workflows. No contract deployments or on-chain coordination necessary. +Use the [policy engine](/concepts/policies/overview) to define your approval workflows. No contract deployments or on-chain coordination necessary. -## Common use cases +## Common Operational Workflows -| Need | Turnkey solution | +| Need | Common Operational Workflow | | :--- | :--- | -| [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | -| [Contractor and vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | -| [Scheduled recurring payments](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | -| [Delegated spending](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | -| [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | -| [Spending controls](#example-spending-controls) | Per-transaction limits, asset restrictions, and role-based rules | +| Provision unique deposit addresses and automatically consolidate funds into a single wallet, ensuring only approved assets move to approved destinations. | **Merchant deposit addresses** — Instant wallet provisioning with policy-enforced sweeping to omnibus | +| Pay known vendors and contractors without manual approval on every transaction, while controlling who can receive payments. | **Contractor and vendor payments** — Contact lists with pre-approved addresses and spending limits | +| Recurring payments should execute automatically on a schedule without requiring manual sign-off each time. | **Scheduled recurring payments** — Scheduled payments to allowlisted recipients without manual signing | +| Individuals or teams should only have limited spending authority, without full wallet access. | **RBAC** — Grant limited payment authority to teams or individuals | +| Prevent high-value transactions from being executed unilaterally by requiring sign-off from multiple stakeholders or specific roles. | **Multi-approval workflows** — Require 2+ approvers for high-value transactions | +| Enforce organization-wide guardrails on transaction size, approved assets, and role-based limits without relying on manual oversight. | **Transaction restrictions** — Per-transaction limits, asset restrictions, and role-based rules | +| Sponsor gas fees so users and services don't need native tokens, while managing the full transaction lifecycle. | **Transaction management** — Gas sponsorship, construction, broadcast, and status tracking | -## Core capabilities +## Core Capabilities -**Programmable approval requirements**: Define how many approvals each transaction type needs. For example, small payments auto-approve, large transfers require multiple signers. +**Instant wallet provisioning** +Create secure wallets programmatically during onboarding with familiar authentication and a white-labeled interface using [Embedded Wallet Kit](/embedded-wallets/overview). -**Role-based access control (RBAC)**: Tag users as "finance-team" or "executive", then use Turnkey's policy engine to grant specific permissions to those groups. +**Programmable approval requirements** +Define how many approvals each transaction type needs. For example, small payments auto-approve, large transfers require multiple signers. -**Recipient allowlists**: Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. +**Role-based access control (RBAC)** +Tag users as “finance-team” or “executive,” then use Turnkey's policy engine to grant specific permissions to those groups. -**Automated scheduled payments**: Backend services sign recurring transactions (payroll, subscriptions) based on policy rules. No manual intervention required. +**Recipient allowlists** +Maintain approved vendor and contractor addresses. Payments to known recipients can bypass additional approval steps. -**Spending limits**: Enforce per-transaction maximums, asset restrictions, or destination restrictions at the policy level. +**Automated scheduled payments** +Backend services sign recurring transactions (payroll, subscriptions) based on policy rules. No manual intervention required. -## Example: Merchant deposit addresses with automated sweeping +**Spending controls** +Enforce per-transaction maximums, asset restrictions, or destination restrictions at the policy level. + +**Transaction Management with Gas Sponsorship** +Sponsor gas fees and manage the transaction lifecycle end-to-end — construction, nonce sequencing, gas estimation and payment, signing, broadcast, and status tracking. See [Transaction Management](/concepts/transaction-management). + +--- + +## Example: Merchant Deposit Addresses with Automated Sweeping Provision deposit addresses instantly for merchants or customers. Enforce that funds can only move to your omnibus wallet, and only approved assets (like USDC) can be transferred. -**Architecture:** +### Architecture ``` ┌─────────────────────────────────────────────────┐ @@ -67,10 +81,10 @@ First, upload the USDC contract ABI as a [smart contract interface](/concepts/po } ``` -All other transfer attempts are implicitly denied. Wrong token? Denied. Wrong destination? Denied. The policy engine enforces your rules at signing time. +All other transfer attempts are implicitly denied, such as an incorrect token or destination. The policy engine enforces your rules at signing time. **Transaction flow:** -1. Create a unique merchant address in instantly via API (~100ms) +1. Create a unique merchant address instantly via API (~100ms) 2. Customer deposits funds to merchant's unique address 3. Backend sweep service lists balances across all merchant wallets 4. Sweep service signs transfers to omnibus wallet @@ -120,7 +134,7 @@ Set up automated payments that execute on a schedule without manual signing. Pay -## Example: Delegated spending authority +## Example: Role Based Access Control (RBAC) Grant limited payment permissions to individuals or teams without giving full wallet access. @@ -198,6 +212,64 @@ Implement organizational controls beyond simple approval requirements. See [Policy Language](/concepts/policies/language) for the full syntax and [Access Control Examples](/concepts/policies/examples/access-control) for more patterns. +## Example: Transaction management with gas sponsorship + +Use Turnkey's [transaction management](/concepts/transaction-management) to handle the full transaction lifecycle, including gas sponsorship so your users and backend services never need to hold native tokens for fees. + + + + Use `ethSendTransaction` with `sponsor: true` to send a USDC transfer on Base. Turnkey handles construction, nonce management, gas estimation, signing, and broadcast. + + ```ts + import { Turnkey } from "@turnkey/sdk-server"; + + const client = new Turnkey({ + apiBaseUrl: "https://api.turnkey.com/", + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY, + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY, + defaultOrganizationId: process.env.TURNKEY_ORGANIZATION_ID, + }).apiClient(); + + const sendTransactionStatusId = await client.ethSendTransaction({ + transaction: { + from: walletAccount.address, + to: "", + caip2: "eip155:8453", // Base mainnet + sponsor: true, + value: "0", + data: "", + nonce: "0", + }, + }); + ``` + + + Monitor the transaction until it's included in a block or fails: + + ```ts + const pollResult = await client.pollTransactionStatus({ + sendTransactionStatusId, + }); + + const txHash = pollResult?.eth?.txHash; + console.log("Transaction:", `https://basescan.org/tx/${txHash}`); + ``` + + + Check your sponsorship spend against configured limits: + + ```ts + const resp = await client.getGasUsage({}); + if (resp?.usageUsd! > resp?.windowLimitUsd!) { + console.error("Gas usage limit exceeded"); + return; + } + ``` + + + +Policies apply to sponsored transactions the same way as standard transactions. Set `sponsor: false` (or omit the field) to have the sender pay gas instead. See [Transaction Management](/concepts/transaction-management) for the full conceptual overview. + ## Trusted by leading businesses Turnkey's infrastructure powers enterprise payment operations at scale. See [Turnkey Customers](https://www.turnkey.com/customers) for more examples. From fa28629323051201a1adf3a40902c394274e5b8a Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Fri, 27 Feb 2026 13:15:47 -0500 Subject: [PATCH 43/47] revert table --- products/embedded-business-wallets/overview.mdx | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index ed38f6d9..1acaa7cf 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -13,15 +13,14 @@ Use the [policy engine](/concepts/policies/overview) to define your approval wor ## Common Operational Workflows -| Need | Common Operational Workflow | +| Need | Turnkey solution | | :--- | :--- | -| Provision unique deposit addresses and automatically consolidate funds into a single wallet, ensuring only approved assets move to approved destinations. | **Merchant deposit addresses** — Instant wallet provisioning with policy-enforced sweeping to omnibus | -| Pay known vendors and contractors without manual approval on every transaction, while controlling who can receive payments. | **Contractor and vendor payments** — Contact lists with pre-approved addresses and spending limits | -| Recurring payments should execute automatically on a schedule without requiring manual sign-off each time. | **Scheduled recurring payments** — Scheduled payments to allowlisted recipients without manual signing | -| Individuals or teams should only have limited spending authority, without full wallet access. | **RBAC** — Grant limited payment authority to teams or individuals | -| Prevent high-value transactions from being executed unilaterally by requiring sign-off from multiple stakeholders or specific roles. | **Multi-approval workflows** — Require 2+ approvers for high-value transactions | -| Enforce organization-wide guardrails on transaction size, approved assets, and role-based limits without relying on manual oversight. | **Transaction restrictions** — Per-transaction limits, asset restrictions, and role-based rules | -| Sponsor gas fees so users and services don't need native tokens, while managing the full transaction lifecycle. | **Transaction management** — Gas sponsorship, construction, broadcast, and status tracking | +| [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | +| [Contractor and vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | +| [Scheduled recurring payments](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | +| [Role Based Access Control](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | +| [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | +| [Spending controls](#example-spending-controls) | Per-transaction limits, asset restrictions, and role-based rules | ## Core Capabilities From 79829942c5c3c688087ce78715b5afa8c0fc18d9 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Fri, 27 Feb 2026 13:16:56 -0500 Subject: [PATCH 44/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 1acaa7cf..c8eaace0 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -11,7 +11,7 @@ Let Turnkey run your wallet infrastructure for business operations. Define who c Use the [policy engine](/concepts/policies/overview) to define your approval workflows. No contract deployments or on-chain coordination necessary. -## Common Operational Workflows +## Common Solutions | Need | Turnkey solution | | :--- | :--- | From ed9cc3c06d953e1d5154d4cd94e1e019e1837c8d Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Fri, 27 Feb 2026 13:25:18 -0500 Subject: [PATCH 45/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index c8eaace0..68394c4f 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -18,7 +18,7 @@ Use the [policy engine](/concepts/policies/overview) to define your approval wor | [Merchant deposit addresses](#example-merchant-deposit-addresses-with-automated-sweeping) | Instant wallet provisioning with policy-enforced sweeping to omnibus | | [Contractor and vendor payments](#example-contractor-and-vendor-payments) | Contact lists with pre-approved addresses and spending limits | | [Scheduled recurring payments](#example-scheduled-recurring-payments) | Scheduled payments to allowlisted recipients without manual signing | -| [Role Based Access Control](#example-delegated-spending-authority) | Grant limited payment authority to teams or individuals | +| [Role Based Access Control](#example-role-based-access-control-rbac) | Grant limited payment authority to teams or individuals | | [Multi-approval workflows](#example-multi-approval-workflows) | Require 2+ approvers for high-value transactions | | [Spending controls](#example-spending-controls) | Per-transaction limits, asset restrictions, and role-based rules | From 058b798c7bdabd1ad6a002703e09d4aa2fc7a3a2 Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Fri, 27 Feb 2026 13:33:43 -0500 Subject: [PATCH 46/47] Update overview.mdx --- products/embedded-business-wallets/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index 68394c4f..a0438195 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -11,7 +11,7 @@ Let Turnkey run your wallet infrastructure for business operations. Define who c Use the [policy engine](/concepts/policies/overview) to define your approval workflows. No contract deployments or on-chain coordination necessary. -## Common Solutions +## Turnkey Solutions | Need | Turnkey solution | | :--- | :--- | From 321775e64fc1f53a7b837f28a8eb43a3ca4c704d Mon Sep 17 00:00:00 2001 From: Lacrosse Date: Mon, 2 Mar 2026 21:45:31 -0600 Subject: [PATCH 47/47] Update graphic --- .../embedded-business-wallets.png | Bin 0 -> 177152 bytes .../embedded-business-wallets/overview.mdx | 16 +++------------- 2 files changed, 3 insertions(+), 13 deletions(-) create mode 100644 images/embedded-wallets/embedded-business-wallets.png diff --git a/images/embedded-wallets/embedded-business-wallets.png b/images/embedded-wallets/embedded-business-wallets.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf3834b6d01d55cc652c41ef7b213239a212183 GIT binary patch literal 177152 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 jI6&6)L{nr|F0@ZrI0yS1I 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 literal 0 HcmV?d00001 diff --git a/products/embedded-business-wallets/overview.mdx b/products/embedded-business-wallets/overview.mdx index a0438195..2d821602 100644 --- a/products/embedded-business-wallets/overview.mdx +++ b/products/embedded-business-wallets/overview.mdx @@ -53,19 +53,9 @@ Provision deposit addresses instantly for merchants or customers. Enforce that f ### Architecture -``` -┌─────────────────────────────────────────────────┐ -│ TURNKEY ORGANIZATION │ -│ │ -│ Wallet ──▶ Unique deposit address per merchant │ -│ │ │ -│ ▼ │ -│ Policy Engine ──▶ Sweep to omnibus (USDC only) │ -│ │ │ -│ ▼ │ -│ Omnibus Wallet (consolidated treasury) │ -└─────────────────────────────────────────────────┘ -``` + + Embedded business wallets architecture showing wallet provisioning, policy engine, and omnibus sweeping + **Policy: Restrict transfers to USDC only, omnibus destination only**