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

# Allowance Checking

> Check ERC-20 approval allowances for deposits and withdrawals

The SDK's `client.core.authorization.detect(...)` returns `'permit' | 'approval' | 'already_approved'`. The `ERC20.allowance(owner, spender)` check shown below only differentiates between `'already_approved'` (allowance ≥ amount) and `'approval'` (allowance \< amount). The `'permit'` branch is returned by the SDK only after additional on-chain permit metadata reads succeed (nonces, DOMAIN\_SEPARATOR, name, version). Direct-contract callers who only need the approval path can use allowance alone.

## Contract Method

### `allowance(owner, spender)`

Returns the amount of tokens the `spender` is approved to transfer on behalf of the `owner`.

| Parameter | Type      | Description                      |
| --------- | --------- | -------------------------------- |
| `owner`   | `address` | The token holder's address       |
| `spender` | `address` | The contract authorized to spend |

**Returns**: `uint256` — approved amount in the token's smallest unit

## ABI

```json theme={null}
[
  {
    "inputs": [
      { "name": "owner", "type": "address" },
      { "name": "spender", "type": "address" }
    ],
    "name": "allowance",
    "outputs": [{ "name": "", "type": "uint256" }],
    "stateMutability": "view",
    "type": "function"
  }
]
```

## Usage

| Check                  | Token contract             | Owner          | Spender                                                           |
| ---------------------- | -------------------------- | -------------- | ----------------------------------------------------------------- |
| Deposit token approval | Deposit token (e.g., USDC) | User's address | `vault.communityCodeDepositorModuleId` (DistributorCodeDepositor) |
| Account share approval | BoringVault                | User's address | `vault.withdrawQueueModuleId` (WithdrawQueue)                     |

If the returned allowance is less than the amount you intend to deposit or withdraw, you need to call `approve()` first. See the [Deposits](/v1.0.0/intro/products/earn/developers/guides/direct-contract/deposits) or [Withdrawals](/v1.0.0/intro/products/earn/developers/guides/direct-contract/withdrawals) guides for the full flow.

Contract addresses are obtained via [Account Discovery](/v1.0.0/intro/products/earn/developers/guides/direct-contract/vault-queries/vault-discovery).
