---
title: "Endpoints a tenant can reach"
description: "Every broker route, classified into the seven classes the gateway enforces: produce, consume, queue admin, read, gated, operator, blocked."
---

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

# Endpoints a tenant can reach

The gateway does not forward a request it cannot name. Every broker-bound path is
matched against one classifier, which returns exactly one class, and the class decides
three things at once: which credential may use the route, which limits apply to it, and
which usage class it meters as.

The classifier is the enforcement spec. It runs on the URL path only, never the query
string, and it is written to fail closed.

## How a path is classified

1. **The operator subset is checked first**, because the prefix blocks below would
   otherwise swallow two of its entries. It is a closed list of seven paths. Matching
   it opens nothing on its own: reaching one still needs a live operator principal, and
   on a cell with `QUEEN_PROXY_OPERATOR_ENABLED` off the route answers `404` before
   authentication runs at all.

2. **Hard blocks.** Everything under `/api/v1/migration`, `/api/v1/system`, and
   `/internal`, plus `/api/v1/stats/refresh`, bare `/metrics`, the broker's own
   `/status`, and the queue-less discovery pop `GET /api/v1/pop`. Blocked for every
   principal on every cell.

3. **Data plane, then queue admin, then gated features, then reads**, by exact path or
   prefix, and for some routes by method: a `DELETE` under `/api/v1/resources/queues/`
   is queue admin, while a `GET` on the same prefix is a read.

4. **Anything else under `/api/` is blocked.** An unrecognised API-shaped path is never
   forwarded, so a broker route added upstream does not become reachable by accident.
   It has to be classified here first.

5. **Everything else is a read.** That is the dashboard and static-asset fallback.

A blocked or unauthorized-operator route answers `404 {"code":"route_blocked"}`, not
`403`. A tenant learns that a path does not exist for them rather than that it exists
and is forbidden.

## Two classes with extra behaviour

**`produce`** is the only class whose request body is parsed. The body is buffered so
items can be counted, per-item payload sizes checked, each `(queue, partition)` admitted
against the plan caps, and message tokens taken. It is forwarded byte for byte: the
proxy never rewrites a body.

**`consume`** with `wait=true` holds a parked-consumer slot for the duration of the
upstream call, and the long-poll timeout is recomputed as the client's requested wait,
clamped to `QUEEN_PROXY_LONGPOLL_MAX_MS`, plus `QUEEN_PROXY_LONGPOLL_MARGIN_MS`.

## The table

## Reading it in practice

- A tenant's normal working set is `produce`, `consume`, `queue admin` and `read`.
  Those four cover the whole documented HTTP API for building on Queen.
- `gated` routes exist on the broker for every tenant and are opened by the plan's
  `features` object, not by the credential's scopes.
- `operator` and `blocked` are the two classes a tenant can never reach. They are
  cell-wide surfaces that the broker does not tenant-scope, which is precisely why the
  proxy exists. [Isolation](/selfhost/multi-tenant/isolation) explains what each of
  them would leak.

## Related

- [Credentials and authorization](/selfhost/multi-tenant/auth): the matrix of class
  against principal.
- [Quotas and rate limits](/selfhost/multi-tenant/quotas): which limits attach to
  which class.
- The broker's own route table, with the access level each route requires, is in the
  [reference](/reference).

Source: https://queenmq.com/selfhost/multi-tenant/endpoints/index.mdx
