Skip to content
LogoLogo

wallet_getPermissions

Get all permissions for an account.

Authentication Required: No (if address provided)

Request

await jaw.provider.request({
  method: 'wallet_getPermissions',
  params: [{ address: '0x1234...' }],
});

Parameters

NameTypeRequiredDescription
addressstringNo*Account address to query
chainIdstringNoHex chain ID to filter by (e.g. "0x2105"); omit to get all chains

*Required if not authenticated. Auto-injected if authenticated and not provided.

Example

[{ "address": "0x1234567890123456789012345678901234567890" }]

Or when authenticated (auto-injects address):

[]

Response

Returns an array of permission objects.

Type: array

Example

[
  {
    "permissionId": "0xabc123...",
    "account": "0x1234567890123456789012345678901234567890",
    "spender": "0x5678901234567890123456789012345678901234",
    "start": 1704067200,
    "end": 1735689600,
    "salt": "0x1a2b3c...",
    "calls": [
      {
        "target": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
        "selector": "0xa9059cbb",
        "checker": "0x0000000000000000000000000000000000000000"
      }
    ],
    "spends": [
      {
        "token": "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",
        "allowance": "0x16345785d8a0000",
        "unit": "day",
        "multiplier": 1
      }
    ],
    "chainId": "0x1"
  }
]

Permission Object Fields

FieldTypeDescription
permissionIdstringUnique permission identifier (hash)
accountstringAccount that granted the permission
spenderstringAddress that received permissions
startnumberUnix timestamp when permission becomes valid
endnumberUnix timestamp when permission expires
saltstringSalt for permission uniqueness (hex)
callsarrayGranted call permissions
spendsarrayGranted spend limits
chainIdstringChain ID (hex)

Behavior

  • Can be called without authentication if address provided
  • Auto-injects connected address if authenticated
  • Returns empty array if no permissions found
  • Returns permissions unfiltered: expired and not-yet-started permissions are included so clients can render those states (e.g. offer a re-grant for an expired permission, or show when a future one activates)
  • On-chain, a permission is only executable inside its [start, end) window — executing outside it reverts. Always validate start <= now < end before executing; treat end <= now as expired and start > now as not yet active

Errors

CodeDescription
-32602Invalid params (address required when not authenticated)

Example

const permissions = await jaw.provider.request({
  method: 'wallet_getPermissions',
});