> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kuru.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Signer Reference

> Root-wide permission bits, administration, and authorization epochs.

All signer grants belong to a root and cover its current and future children. There are no per-child grants.

| Permission | Bit | Effective authority |
| - | - | - |
| `TRADE` | `1 << 0` | Trade, manage passive liquidity and permitted hooks, create children |
| `INTERNAL_TRANSFER` | `1 << 2` | Move free balances inside the family |
| `WITHDRAW` | `1 << 3` | Root withdrawals to an explicit recipient; includes internal transfers |
| `ADMIN` | `1 << 4` | Manage signers; includes all defined roles |

An expiry of zero means no expiry. A nonzero expiry is a Unix timestamp evaluated at execution. Stored grants and events contain the exact granted bits; authority checks apply the implications above.

## Administration

Use `authorizeAccountSigner` and `revokeAccountSigner` with `account: rootOwner`. Signed variants use the AccountCore version-1 EIP-712 domain and the current owner-address authorization nonce. Anyone may submit a valid signature, but the authorizer must still have authority when it executes.

Each successful grant or revocation advances the root epoch. Read it for any family member with `getAccountAuthorizationEpoch({ accountId })`. For signer administration, `getSignerAuthorizationNonce({ account: rootOwner })` returns the same root state, or zero before registration.

Creating a child does not change the epoch. Reauthorizing a revoked signer does not revive its previous intents or stored triggers.

## Check live authority

```typescript theme={null}
const allowed = await kuru.account.isAuthorizedAccountSignerById({
  accountId,
  signer,
  permission: AccountPermission.TRADE,
});
const authNonce = await kuru.account.getAccountAuthorizationEpoch({ accountId });
```

Check `TRADE` against the actual target root or child ID. For a delegated signer, child-ID queries mask out non-trading permissions; check `ADMIN`, `WITHDRAW`, and `INTERNAL_TRANSFER` against the root ID. Internal transfers and signer administration also authorize against the root. Check one permission bit at a time. A signed message, Relay JWT, or installed EIP-7702 delegation is not proof of live AccountCore permission.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.