Skip to main content
Every session key carries two independent scope sets, enforced by two different layers:
  • Protocol scopes — on-chain authority. Signed into each action and re-validated by the protocol state machine. These decide what state-changing actions the key can authorize.
  • Off-chain scopes — server-side capabilities. Never signed, never seen by the protocol; enforced only by the server before a request is processed.
All of the steps in this guide can be done through the UX or SDKs.

Protocol scopes

Protocol scopes form a tree. A grant for a branch covers everything under it, so trade:all covers trade:orderbook:all and trade:rfq:option alike, and all at any level covers its children. A request is checked by asking whether one of the key’s grants allows the specific scope the action requires.
Diagram of the Derive protocol scope tree. The root grant `admin` sits above the branches trade, transfer, withdraw, liquidate, set_session_key, and vault; a grant on any node implicitly covers all of its descendants (for example `trade:all` covers `trade:orderbook:all` and `trade:rfq:option`, and `all` at any level covers its children). The trade branch nests by venue (orderbook, rfq) and then instrument (perp, option, spot), and each node is labeled with the exact wire string a key is granted (e.g. `trade:orderbook:all`, `transfer:existing_subaccount`). A session key with no protocol scopes is read-only. A request is authorized by checking whether one of the key's grants allows the specific scope the action requires.

admin and owner special powers

These are actions only the admin or owner wallet can do:
  • can call private/update_whitelisted_recipients to add or remove whitelisted recipients for external transfers and withdrawals.
  • can withdraw and transfer to any recipient without setting a whitelist recipient.
  • can modify the ip whitelist for a session key

Off-chain scopes

Off-chain scopes are exact-match only — no tree, no hierarchy.

How scopes are set

Creator must specify the exact scopes for a session key. A session key with no scopes is a purely read-only session key. The “owner” wallet by default has all scopes.
See Session keys for the full create / edit / list lifecycle and Authentication for how a session resolves to protocol and off-chain scopes. Amounts and constants referenced by signed actions live on Action signing.