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

# Roles and permissions

> What each role includes, the complete permission catalog, which console areas each permission unlocks, how location and warehouse access narrows it, and what muveya hides without permission.

What a person can do in a dental clinic comes from three things, all set on the **Team** screens (see [Team](/docs/en/account/team)):

1. **Role:** **Owner**, **Administrator** or **Member**. A role is a template: it includes a few permissions and a few extra powers over the team.
2. **Permissions:** the actions and information the person can use, granted one by one.
3. **Locations and warehouses:** the sites where those permissions apply.

<Warning>
  Permissions are **not** inherited from role names. An **Owner** does not see inventory, orders, approvals, deliveries or reports until someone ticks those permissions for them, often on their own page. Always check the permission list, not the role.
</Warning>

## How access is decided

A person's **effective permissions** are:

* the permissions their role includes, **plus**
* the permissions granted to them on the Team screens, **plus**
* the permissions that a granted permission includes: `inventory.adjust` (**Adjust and count stock**) includes `inventory.receive`, `inventory.consume` and `inventory.transfer`.

muveya checks the effective permissions and the site access on the server, for every request. The console hides what you cannot use, but hiding is only a convenience: if you reach a screen anyway, the server refuses the action (**Your account does not have permission for this action.**), returns the item as not found, or leaves out the information you cannot see.

Changes to permissions and site access apply from the person's next action. They do not need to sign in again.

## Role templates

| Role | Permissions included | Extra powers |
| - | - | - |
| **Owner** | `catalog.read`, `catalog.manage`, `members.manage`, `settings.manage` | Invite administrators, change roles, transfer ownership, and suspend, reactivate, remove or change the site access of other owners. Import and export the catalog as CSV. |
| **Administrator** | `catalog.read`, `catalog.manage`, `members.manage`, `settings.manage` | Import and export the catalog as CSV. |
| **Member** | `catalog.read` | None. |

* The person who creates a dental clinic is its first **Owner**, with access to all locations and warehouses.
* Nobody can be invited as **Owner**: ownership is transferred. A clinic always keeps at least one active owner.
* Only an owner changes roles, and only between **Administrator** and **Member**.
* Starting a catalog CSV import or export requires the **Owner** or **Administrator** role; `catalog.manage` alone is not enough, even though the console shows the buttons to members who hold it.
* No role includes any inventory, orders, approvals, delivery, report, cost, order value or patient reference permission.

## Permission catalog

These are all 26 permissions. The label is what the Team screens show.

### Catalog

| Permission | Label | What it allows |
| - | - | - |
| `catalog.read` | **Read the catalog** | Read supplies, categories, presentations and codes. Every role includes it, so every member can read the catalog. |
| `catalog.manage` | **Manage the catalog** | Create and edit supplies and categories, activate and deactivate supplies, add and retire presentations and codes, and set supply costs (together with `catalog.cost.read`). |
| `catalog.cost.read` | **View supply costs** | See supply costs in the catalog, in the catalog CSV export and on order lines. Without it, cost fields are removed. |

### Inventory

| Permission | Label | What it allows |
| - | - | - |
| `inventory.read` | **View inventory** | See stock, boxes, lots, stock alerts, counts, replenishment, usage by room, stock correction requests and box history. |
| `inventory.receive` | **Receive deliveries** | Record received stock on the **Receive** screen. |
| `inventory.consume` | **Record usage** | Record usage from a box and attribute an exit to a room or area. |
| `inventory.transfer` | **Move boxes between warehouses** | Move a box to another warehouse and separate part of a box. |
| `inventory.adjust` | **Adjust and count stock** | Correct a box, decide stock correction requests, set minimums, run counts and count campaigns, take a box out of use (quarantine, expired, disposed) and quarantine a lot. Includes receive, record usage and move. |

### Orders

| Permission | Label | What it allows |
| - | - | - |
| `orders.create` | **Create supply orders** | Create, edit, submit and cancel your own orders, and see your own orders. |
| `orders.read.all` | **View all orders** | See every order of your locations, not only your own. |
| `orders.value.read` | **View order values** | See order totals, the value an approval rule evaluated, and the value limits of approval rules. Without it, those values are removed. |
| `orders.clinical.create` | **Create clinical orders** | Mark an order as **It is for a patient's treatment** and add a **Patient reference (optional)**. Also needs `orders.create`. |
| `orders.patient_ref.read` | **View external patient references** | See the patient reference on orders and the care reference on usage records. Without it, they are removed. |

### Approvals

| Permission | Label | What it allows |
| - | - | - |
| `approvals.policy.manage` | **Manage approval rules** | Open and publish the **Approval policy**. |
| `approvals.decide` | **Decide approvals** | See the approval inbox, approve and reject orders, and see decision history. Also lets the person see all orders of their locations. |

### Fulfillment (deliveries)

| Permission | Label | What it allows |
| - | - | - |
| `fulfillment.pick` | **Prepare orders** | Open the pick list and record the boxes picked for an order. |
| `fulfillment.dispatch` | **Dispatch orders** | Dispatch a prepared order. |
| `delivery.confirm` | **Confirm delivery** | Confirm that a dispatched order was delivered, or report a delivery problem. |
| `receipt.confirm` | **Confirm receipt** | Confirm or dispute the receipt of delivered boxes at the destination. |
| `fulfillment.close` | **Close fulfillment** | Close an order whose custody is complete. |
| `fulfillment.read` | **View fulfillment** | Follow an order's custody and history, see **Delivery problems**, and receive box by box. |

Any of these six permissions also lets the person see all orders of their locations.

### Reports and audit

| Permission | Label | What it allows |
| - | - | - |
| `reports.read` | **View reports** | Open the consumption report. |
| `audit.read` | **View audit history** | Reserved. No screen or API reads the audit history yet, so granting it changes nothing today. |

### Administration

| Permission | Label | What it allows |
| - | - | - |
| `members.manage` | **Manage team access** | Use the Team screens: list, invite, change permissions and site access, suspend, reactivate and remove. Owner-only actions stay owner-only. |
| `settings.manage` | **Manage clinic configuration** | Create, rename, activate and deactivate locations, warehouses, and rooms and areas. |
| `integrations.manage` | **Manage integrations and API keys** | Reserved. The console has no screen to create or revoke API keys yet, so granting it changes nothing today. |

## What each console area needs

| Menu item | Shown to | What the permissions change |
| - | - | - |
| **Home** | Everyone | **To start operating** cards: **Create the first location** and **Create a warehouse** with `settings.manage`; **Add your first supply** and **Add how your supplies are packaged** with `catalog.manage`; **Invite your team** with `members.manage`; the approval policy warning with `approvals.policy.manage`. **Pending work** cards: **Orders waiting for your approval** (`approvals.decide`), **Orders to prepare** (`fulfillment.pick` or `fulfillment.dispatch`), **Deliveries to confirm** (`delivery.confirm`), **Orders to receive** (`receipt.confirm`), **Orders to close** (`fulfillment.close`), **Order drafts** (`orders.create`), **Open stock alerts** and **Boxes due for a count** (`inventory.read`). |
| **Orders** | Anyone with `orders.create`, `orders.read.all`, `approvals.decide` or any fulfillment permission | **New order** and editing your drafts need `orders.create`. The clinical option needs `orders.clinical.create`. **Order value** and **Patient reference** appear only with their permissions. |
| **Order approvals** | Anyone with `approvals.decide` or `approvals.policy.manage` | The inbox, **Approve**, **Reject** and **Decisions** need `approvals.decide`; **Approval policy** needs `approvals.policy.manage`. The value fields of the policy need `orders.value.read`. |
| **Deliveries** | Anyone with any fulfillment permission | Sections **To prepare** (pick or dispatch), **To deliver** (`delivery.confirm`), **To receive** (`receipt.confirm`), **To close** (`fulfillment.close`) and **Delivery problems** (`fulfillment.read`). |
| **Locations** and **Warehouses** | Everyone | **New location**, **New warehouse**, **New room or area**, renaming and activating need `settings.manage`. |
| **Catalog** | Everyone | **New supply**, **New category**, editing, **Add presentation**, **Import CSV** and **Export CSV** need `catalog.manage` (CSV also needs the Owner or Administrator role). The **Cost** column needs `catalog.cost.read`; **Supply cost** editing needs both. |
| **Inventory**, **Replenishment**, **Stock corrections** | Everyone | The content needs `inventory.read`. **Receive** needs `inventory.receive`. **Consume** and **Attribute** need `inventory.consume`. **Move** and **Separate part of this box** need `inventory.transfer`. **Correct this box**, **Take the box out of use**, **Set a minimum**, counts and count campaigns need `inventory.adjust`. |
| **Reports** | Anyone with `reports.read` | Without it, the screen says **You need the View reports permission**. |
| **Team** | Anyone with `members.manage` | See [Team](/docs/en/account/team). |

**Account security** (`console.muveya.com/account/security`) needs no permission.

Screens that say you lack a permission:

| Screen | Missing permission | Message |
| - | - | - |
| **Receive** | `inventory.receive` | **You don’t have permission to receive deliveries. Ask an administrator for “Receive deliveries”.** |
| **Lot recall** | `inventory.read` | **You don’t have permission to view stock. Ask an administrator for access.** |
| Minimums and brief count | `inventory.adjust` | **Only a member who can correct stock can set minimums.** / **Only a member who can correct stock can count it.** |
| **New order** | `orders.create` | **You cannot create orders. Ask your clinic's administrator for permission to request supplies.** |
| **Order approvals** | `approvals.decide` | **You do not decide order approvals. If you should, ask your clinic's administrator for the permission.** |
| **Approval policy** | `approvals.policy.manage` | **You cannot change the approval policy. Ask your clinic's administrator for the permission.** |
| **Deliveries** | all six | **You do not take part in deliveries. Ask your clinic's administrator if you should prepare, deliver or receive orders.** |
| Picking | `fulfillment.pick` | **You cannot prepare orders. Ask your clinic's administrator for permission to pick.** |
| Delivery | `delivery.confirm` | **You cannot confirm deliveries. Ask your clinic's administrator for the permission.** |
| Receipt | `receipt.confirm`, then `fulfillment.read` | **You cannot receive orders. Ask your clinic's administrator for the permission.** / **To receive box by box you also need permission to view deliveries. Ask your clinic's administrator.** |
| Order tracking | `fulfillment.read` | **You cannot view deliveries. Ask your clinic's administrator for the permission.** |
| **Team** | `members.manage` | **You do not have access to team management. Ask your clinic administrator.** |

<Note>
  The **Dispatch order** button is on the picking screen, which requires `fulfillment.pick`. Give **Prepare orders** to anyone who dispatches. Without `inventory.read`, **Stock alerts**, **Counts** and count campaigns show only their loading message.
</Note>

## Site scope

Each person has one setting for locations and one for warehouses:

| Setting | Meaning |
| - | - |
| **All locations in this account** / **All warehouses in this account** | Every site, including the ones created later. |
| **Selected locations** / **Selected warehouses** | Exactly the ticked sites. |
| **No location** / **No warehouse** | None. |

Location access applies to orders, approvals and custody. Warehouse access applies to stock. The permission decides **what** a person can do; the site access decides **where**.

| Area | How site access narrows it |
| - | - |
| **Orders** | Lists show only orders of your locations. An order of another location reads as not found. To create an order, you need its location and its destination warehouse (**You have no locations assigned to create orders. Ask an administrator for access.**, **You have no warehouse of this clinic assigned. Ask an administrator for access.**). |
| **Order approvals** | The inbox shows only orders of your locations. Deciding an order of another location reads as not found. |
| **Deliveries** | Picking and following an order are checked against the order's location. Dispatching and confirming delivery are checked against the location of the warehouse that supplies the order (the order's own location when the stock comes from a central warehouse). Confirming receipt and closing are checked against the destination location; if your selected locations include both the supplying and the destination location of that order, you cannot confirm its receipt or close it (people with all locations can). A scanned box outside your warehouses does not match. |
| **Inventory** | Stock, boxes, counts, alerts, replenishment and usage show only your warehouses. Acting on a box or warehouse outside them reads as not found. With no warehouse, the screens say **You have no warehouses assigned. Ask an administrator for access.** |
| **Reports** | With selected warehouses, the consumption report says **Only includes the warehouses assigned to you, not the whole clinic.** |
| **Catalog** | Not narrowed: the catalog belongs to the whole dental clinic. |
| **Locations** and **Warehouses** lists | Not narrowed: every member sees every location and warehouse of the clinic, whatever their access. |
| **Team** | You can only grant sites you reach yourself, and never change your own. |

API keys are not people: they always reach every site of the clinic.

## What muveya hides without permission

muveya removes this information on the server before it reaches the console, the API or MCP. The field is absent, not blank.

| Information | Needs | Where it is removed |
| - | - | - |
| Supply cost (cost, currency, cost status and unit) | `catalog.cost.read` | Catalog screens, catalog CSV export (the cost columns are left out), unit cost on order lines. |
| Order value (total and currency), the value an approval rule evaluated, and the value limits of a rule | `orders.value.read` | Orders, order details, approval inbox, approval policy summary. In the policy editor, a person without it sees **This rule also has conditions you cannot change here; they are kept.** |
| Patient reference (`patientRef`) | `orders.patient_ref.read` | Order details. It is stored encrypted and only decrypted for people with this permission. |
| Care reference on usage | `orders.patient_ref.read` | **Usage by room** shows that a reference exists, without its value. |

Some places never show these values to anyone: custody history, pick lists, stock alerts, analytics reports and exports, and WhatsApp messages. API keys can never read order values or patient references. See [Security and privacy](/docs/en/trust/security-and-privacy).

## API scopes and permissions

API keys carry **scopes**, written with a colon. Each scope maps to one permission:

| API scope | Permission it grants | Used by |
| - | - | - |
| `clinics:read` | `clinics.read` (API only) | `GET /v1/clinics`, `GET /v1/warehouses` |
| `catalog:read` | `catalog.read` | Catalog items and categories |
| `catalog.cost:read` | `catalog.cost.read` | Cost fields on catalog items |
| `inventory:read` | `inventory.read` | Inventory balances, boxes and movements |
| `orders:read` | `orders.read.all` | Orders |
| `fulfillment:read` | `fulfillment.read` | Fulfillments |
| `analytics:read` | `reports.read` | Analytics, including `POST /v1/analytics/exports` |

* There is no scope for `orders.value.read` or `orders.patient_ref.read`: those values are always removed for API keys.
* There are no write scopes and no wildcard.
* The console has no screen to create or revoke API keys yet; write to [team@muveya.com](mailto:team@muveya.com). See [API scopes](/docs/en/api-reference/scopes).

## Common setups

These combinations work with how muveya checks access today. Adjust the sites to each person.

| Person | Role | Permissions to tick |
| - | - | - |
| Assistant who records usage | **Member** | **View inventory**, **Record usage** |
| Person who receives deliveries at a warehouse | **Member** | **View inventory**, **Receive deliveries** |
| Warehouse lead who corrects and counts stock | **Member** | **View inventory**, **Adjust and count stock** |
| Dentist or coordinator who requests supplies | **Member** | **Create supply orders** (plus **Create clinical orders** and **View external patient references** for patient orders) |
| Approver | **Member** | **Decide approvals** (plus **View order values** if your rules use values, and any permission a rule's step requires) |
| Central warehouse operator | **Member** | **View inventory**, **Prepare orders**, **Dispatch orders**, **Confirm delivery**, **View fulfillment** |
| Person who receives orders at a location | **Member** | **Confirm receipt**, **View fulfillment**, **Close fulfillment** |
| Owner who runs the whole clinic | **Owner** | Everything they need, on their own page: for example **View inventory**, **Adjust and count stock**, **Create supply orders**, **View all orders**, **View order values**, **Manage approval rules**, **Decide approvals** and **View reports** |

An approver cannot approve their own order, and an approval rule's step can require an extra permission from its approvers. See [Approval policy](/docs/en/orders/approval-policy).

## Related pages

<CardGroup cols={2}>
  <Card title="Team" icon="users" href="/docs/en/account/team">
    Change roles, permissions and site access.
  </Card>

  <Card title="Security and privacy" icon="lock" href="/docs/en/trust/security-and-privacy">
    Isolation, redaction and audit.
  </Card>

  <Card title="Locations" icon="building" href="/docs/en/locations/clinics">
    The sites you assign to people.
  </Card>

  <Card title="API scopes" icon="code" href="/docs/en/api-reference/scopes">
    Scopes for API keys.
  </Card>
</CardGroup>


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