# Token Restrictions

By default, every POS terminal shows **all tokens** -- both hardcoded tokens and any custom tokens the merchant has added. Token restrictions let the merchant limit which tokens appear on a specific terminal.

***

## Why Restrict Tokens?

Common reasons:

* **Simplify the cashier experience:** A coffee shop only wants to accept USDT and USDC -- no need to show 10 other tokens.
* **Per-terminal configuration:** Register 1 accepts stablecoins only, Register 2 accepts everything.
* **Compliance:** The merchant only wants to accept tokens with reliable pricing (Alchemy-tracked).

***

## How It Works

Each terminal has a toggle: **Restrict Available Tokens**.

| Toggle State      | Behavior                                                    |
| ----------------- | ----------------------------------------------------------- |
| **OFF** (default) | All hardcoded tokens + all merchant custom tokens are shown |
| **ON**            | Only the tokens the merchant explicitly selected are shown  |

When the toggle is ON:

* **Networks are filtered too.** If no tokens are selected for Polygon, Polygon doesn't appear in the network list at all.
* **Cashiers cannot add custom tokens.** They can only use what the merchant configured.

When the toggle is OFF:

* All tokens are available (current default behavior).

***

## Setting Up Token Restrictions

### When Creating a Terminal

1. Go to **Dashboard > POS > Terminals > Create Terminal**
2. Fill in the name, code, and wallet address
3. Toggle **Restrict Available Tokens** to ON
4. A token picker appears, grouped by network:
   * **Ethereum:** USDT, USDC, MAKA, etc.
   * **Polygon:** USDT, USDC, etc.
   * **Custom Tokens:** Any custom tokens the merchant has added (labeled with "Custom")
5. Check the tokens you want this terminal to accept
6. The counter at the bottom shows how many tokens are selected (e.g., "4 tokens selected")
7. Click **Create Terminal**

### When Editing a Terminal

1. Go to **Dashboard > POS > Terminals**
2. Click **Edit** on the terminal
3. Scroll down to the **Restrict Available Tokens** section (below Cashier Access)
4. Toggle ON/OFF and select tokens as needed
5. Click **Save Changes**

***

## What the Cashier Sees

### With Restrictions ON (e.g., USDT on Ethereum + USDC on Polygon)

| Step                       | What Appears                                                     |
| -------------------------- | ---------------------------------------------------------------- |
| Network selection          | Only **Ethereum** and **Polygon** (networks with allowed tokens) |
| Token selection (Ethereum) | Only **USDT**                                                    |
| Token selection (Polygon)  | Only **USDC**                                                    |

### With Restrictions OFF

| Step              | What Appears                                                   |
| ----------------- | -------------------------------------------------------------- |
| Network selection | All supported networks                                         |
| Token selection   | All hardcoded tokens + merchant custom tokens for that network |

***

## Custom Tokens in the Picker

If the merchant has added custom tokens (via **Dashboard > Custom Tokens**), those tokens appear in the restriction picker alongside the built-in tokens. They are labeled with **(Custom)** so the merchant can tell them apart.

Custom tokens show with their logo (if available) or a placeholder icon.

***

## Important Notes

* **Default is OFF:** Existing terminals are not affected. All tokens remain available unless the merchant explicitly enables restrictions.
* **At least one token required:** If you enable restrictions, you must select at least one token. The system prevents saving with zero tokens selected.
* **Changes take effect immediately:** After saving, the next time a cashier opens the terminal, they will see the updated token list.
* **Address casing:** Token addresses are stored in lowercase for consistent matching. You don't need to worry about uppercase/lowercase.

***

## Troubleshooting

### "No tokens available" on the terminal

**Cause:** Token restrictions are enabled but the allowed tokens list is empty, or all allowed tokens were removed.

**Fix:**

1. Go to **Dashboard > POS > Terminals**
2. Edit the terminal
3. Either add tokens to the allowed list, or toggle off token restrictions
4. Save

### A custom token doesn't show in the picker

**Cause:** The custom token may not have been added yet, or it was added on a chain that isn't supported.

**Fix:**

1. Go to **Dashboard > Custom Tokens**
2. Add the token for the correct chain
3. Return to the terminal editor -- the token now appears in the picker

### Cashier can't see a token they need

**Cause:** The terminal has token restrictions enabled and that token isn't in the allowed list.

**Fix:** Edit the terminal and add the token to the allowed list, or disable token restrictions entirely.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.makapay.io/point-of-sale-pos/token-restrictions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
