Overview
Delegated access works by creating a specialized business-controlled user within each end-user’s sub-organization that has carefully scoped permissions to perform only specific actions, such as signing transactions to designated addresses. This can enable your backend to do things like:- Automate common transactions (e.g., staking, redemptions)
- Sign transactions to whitelisted addresses without user involvement
- Perform scheduled operations
- Respond to specific onchain events programmatically
Implementation flow
Here’s how to implement delegated access for an embedded wallet setup:- Create a sub-organization with two root users: The end user and your “Delegated User” with an API key authenticator that you control
- Enable the Delegated Account to take particular actions by setting policies explicitly allowing those specific actions
- Update the root quorum to ensure only the end-user retains root privileges
Step-by-step implementation
Step 1: Create a sub-organization with two root users
- Create your sub-organization with the two root users being:
- The end-user
- A user you control (we’ll call it the ‘Delegated Account’)
Step 2: Limit the permissions of the Delegated Account user via policies
- Create a custom policy granting the Delegated Account specific permissions. You might grant that user permissions to:
- Sign any transaction
- Sign only transactions to a specific address
- Create new users in the sub-org
- Or any other activity you want to be able to take using your Delegated Account
Step 3: Remove the Delegated Account from the root quorum using the Delegated Account’s credentials:
Delegated access code example
Below is a code example outlining the implementation of the delegated access setup flow described aboveFrequently Asked Questions
Policy Design and Creation
Can I create policies on behalf of a user without their explicit approval?
Can I create policies on behalf of a user without their explicit approval?
When does the user 'approve' a delegated access setup?
When does the user 'approve' a delegated access setup?
After a limit order is filled, how can I remove/null a policy programmatically?
After a limit order is filled, how can I remove/null a policy programmatically?
Security & Risk Management
If a delegated API key is leaked, does that allow someone to act on behalf of the user?
If a delegated API key is leaked, does that allow someone to act on behalf of the user?
Is this the same risk as having a master delegate account?
Is this the same risk as having a master delegate account?
What are best practices for storing and rotating Delegate Access API keys?
What are best practices for storing and rotating Delegate Access API keys?
- Using short-lived keys whenever viable
- Rotating API keys regurarly
- Monitoring the usage
- Secure storage (e.g. in HSMs or vaults)
Best Practices
How do I scope a delegated access policy to reduce signing risk?
How do I scope a delegated access policy to reduce signing risk?
- Recipient address restrictions (ie allowlisting addresses)
- Contract method selectors
- Transaction structure invariants
- Blockhash constraints (on Solana)
Can I dynamically add policies per limit order without user friction?
Can I dynamically add policies per limit order without user friction?
What are common implementation patterns among Turnkey clients using Delegated Access?
What are common implementation patterns among Turnkey clients using Delegated Access?
- Using broad policies with business-controlled API keys
- Using **fine-grained policies, **scoped to predictable transaction shapes
- Using delegated access to implement limit orders, automation flows, or advanced trading logic (e.g. perps, TWAPs)
- Ensuring strong operational security (e.g. tight scoping & expiring keys) is increasingly common
EVM and SVM-Specific Strategies
Are time-bound transactions supported?
Are time-bound transactions supported?
solana.tx.recent_blockhash, which restricts a transaction’s validity to a ~60–90 second window. Not ideal for delayed executions (e.g. limit orders), but useful for immediate, single-use actions.For EVM transactions, can I enforce token-specific or contract-specific limits?
For EVM transactions, can I enforce token-specific or contract-specific limits?
eth.tx.data[...]) and enforce conditions like:Is it safe to whitelist routers (e.g. Jupiter) in delegated access policies?
Is it safe to whitelist routers (e.g. Jupiter) in delegated access policies?
Suggestion: Only allow DA keys to interact with contracts you fully trust or control. Limit scope as much as possible (e.g., to specific instructions, amounts, or recipients).