---
# System prepended metadata

title: wallet_fetchPermissions Proposal

---

# wallet_fetchPermissions Proposal

As we've been building out session keys for Coinbase Smart Wallet, we've felt that there has been something missing: the ability for developers to fetch information about previously granted permissions. This document proposes a new RPC that interacts with the [wallet server](https://hackmd.io/@lsr/H1ALRaPsR#The-Wallet-Server-Model) to provide this information.

## Specification

Accepts a user's address and a signer ID. A signer ID is obtainted by:

```typescript!
keccak256(
  utf8ToHex(
    JSON.stringify(
      canonicalize(
        permissionsRequest.signer
      )
    )
  )
)
```
where `canonicalize` is an [RFC 8785](https://www.rfc-editor.org/rfc/rfc8785) canonicalization.

The rationale for the specified `signerId` is:
- Wallet servers will want to query for permissions given a specific signer.
- Querying will be made easier if we can assume all signers can be identified by a uniform 32 byte string.

#### Parameters

```typescript!
type FetchPermissionsParams = {
  address: `0x${string}`
  signerId: `0x${string}`
}
```

##### Example Parameters

```typescript!
wallet_fetchPermissions({
  address: '0x...',
  signerId: '0x...'
})
```

#### Return Value

```typescript!
type FetchPermissionsReturnValue = (PermissionResponse & {
  state: { type: string; data: Record<string, any> }
})[]
```

##### Example Return Value

```typescript!
[
  {
    signer: {
      type: 'key',
      data: {
        ...
      }
    },
    permissions: [
      {
        type: 'native-token-recurring-allowance',
        data: {
          allowance: '0x...',
          start: 124,
          period: 125
        },
      },
      {
        type: 'erc20-recurring-allowance',
        data: {
          token: '0x...',
          allowance: '0x...',
          start: 124,
          period: 125
        }
      }
    ],
    context: '0x...',
    state: [
      {
        type: 'native-token-recurring-allowance',
        data: {
          remainingAllowance: '0x...',
          cycleStart: 123,
          cycleEnd: 124
        }
      },
      {
        type: 'erc20-recurring-allowance',
        data: {
          token: '0x...',
          remainingAllowance: '0x...',
          cycleStart: 123,
          cycleEnd: 124
        }
      }
    ]
  }
]
```

The above example shows a single granted permission along with its state. If applicable, every permission type definition should include a definition for its state.
