Skip to main content
The dashboard and SDK are the developer-facing tools for managing keys, policies, and monitoring agent activity. They are convenience layers over the onchain contracts.

Dashboard

A web application where developers manage their Functor-protected accounts visually.

Key management

  • Register new passkeys (triggers WebAuthn browser flow + KeyStore registration)
  • View all keys per account with activation status
  • Rotate keys - register a new key, deactivate the old one
  • Revoke compromised keys immediately

Policy management

  • Create policy sets from templates (DeFi, NFT trading, treasury management)
  • Assign policies to specific keyIds
  • Edit live policies without creating new session keys
  • View current policy configuration per key

Agent overview

  • Active keys and their policies
  • Current spending against time-windowed limits
  • Rate limit usage per window
  • Fee spend summary

Audit explorer

  • Full transaction history from onchain FunctorTxExecuted events
  • Blocked transaction log from FunctorTxBlocked events
  • Filter by keyId, date range, contract, or policy result
  • Exportable for compliance or debugging

SDK

A TypeScript library that talks directly to the onchain contracts via viem. No Functor server is involved.

Installation

import { FunctorClient } from '@functor/sdk'

const functor = new FunctorClient({
  chain: base,
  account: smartAccountAddress,
})

Key management

// Register a new passkey
await functor.registerKey(passkey)

// Rotate to a new key
await functor.rotateKey(oldKeyId, newPasskey)

// Revoke a compromised key
await functor.revokeKey(keyId)

// List active keys
const keys = await functor.getActiveKeys()

Policy management

// Set policies for a key
await functor.setPolicies(keyId, [
  { type: 'spending_limit', token: USDC, amount: '1000', window: '24h' },
  { type: 'allowed_contracts', addresses: [UNISWAP_ROUTER] },
  { type: 'rate_limit', max: 10, window: '1h' },
])

// Update a single policy
await functor.updatePolicies(keyId, [
  { type: 'spending_limit', token: USDC, amount: '2000', window: '24h' },
])

// Remove a policy
await functor.removePolicies(keyId, ['rate_limit'])

Reading state

// Check spending against limits
const spending = await functor.getSpending(keyId)
// { usdc: { spent: '450', limit: '1000', window: '24h', resetsAt: 1712534400 } }

// Get rate limit usage
const rate = await functor.getRateUsage(keyId)
// { used: 3, max: 10, window: '1h', resetsAt: 1712530800 }

// Query audit log
const log = await functor.getAuditLog(account, {
  from: '2026-04-01',
  to: '2026-04-06',
})

Module installation

// Install both Functor modules on a smart account
await functor.install(smartAccount)
// → installs WebAuthnValidator + FunctorPolicyHook
The SDK generates the module installation calldata. The developer signs and submits the transaction through their preferred smart account SDK (permissionless.js, ZeroDev, Biconomy, etc.).