Management API Reference

Using session keys

Create, manage and configure session keys for controlled wallet access

Session keys are programmable access tokens with specific permissions, designed for controlled interactions. Examples include:

  • Granting access to specific areas or features.
  • Limiting usage to a set amount of resources (e.g., 1000 units of currency).
  • Time-bound validity (e.g., expiring after 3 days). Permissions can be combined, enabling fine-tuned, context-specific capabilities.

Session Keys streamline interactions by:

  • Seamless Interactions: Reducing the need for repeated confirmations by delegating specific permissions to locally stored keys, enhancing user experience.
  • Automated Processes: Enabling automation through server-bound keys with defined permissions for tasks like recurring actions, resource management, or condition-based triggers.

Check out our sample registering a session key with an account with a non-custodial signer: GitHub source.

Configuration#

This section will guide you through the process of registering a session key and using it to mint an asset with a player's smart account. You can choose to create the session key using a web3 libraries or using the Openfort native method.

Using EIP-7715. The request method of the EIP-1193 provider can be used to request signatures. First, get the provider:

client.tsx
openfortConfig.ts

_10
import openfort from "./openfortConfig"
_10
// This example assumes you have already checked that Openfort 'embeddedState' is
_10
// `ready` and the user is `authenticated`
_10
const provider = openfort.getEthereumProvider();

Smart wallets support sending a batch of transactions in a single, atomic submission to the network.

To register a session key with a smart wallet, call the wallet_grantPermissions method.

As an example, you might batch together a transaction to approve a USDC spender and to transfer USDC like so:


_29
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
_29
_29
const sessionKey = generatePrivateKey();
_29
const accountSession = privateKeyToAccount(sessionKey).address;
_29
_29
await provider.request({
_29
method: 'wallet_grantPermissions',
_29
params: [
_29
{
_29
signer:{
_29
type: "account",
_29
data:{
_29
id: accountSession
_29
}
_29
},
_29
expiry: 60 * 60 * 24,
_29
permissions: [
_29
{
_29
type: 'contract-call',
_29
data: {
_29
address: '0x2522f4fc9af2e1954a3d13f7a5b2683a00a4543a',
_29
calls: []
_29
},
_29
policies: []
_29
}
_29
],
_29
},
_29
],
_29
});

Popular web3 libraries provide convenient methods for registering session keys:

LibraryMethod
ViemUse the wallet_grantPermissions action