Users API
Everyone the gateway knows for your organization, one entry per email: people in your synced identity directory, people named in gateway configuration, and people seen only in gateway requests. Use it to review access, find inactive users, or see what one person uses.
App access here is console app visibility, self-service grants and personal-key ownership. This is not a request-time authorization evaluation; policies, model access and limits can still restrict calls.
The API is read-only: people are added through your identity provider or the console. Try it in the Management API playground.
List users
Each entry has:
Results can be up to 60 seconds old; generated_at says when the data was read. When request history is unavailable, the list is still returned with usage.available: false and null usage fields; sorting by usage or filtering by active_since then answers 503 data_unavailable, and 503 query_timeout when usage exceeds its time or read limits. Very large organizations can exceed a read limit: usage.complete: false means usage is partial, and truncated: true means some people or personal keys may be missing from the directory or key data.
export API="$MANAGEMENT_URL/llmgateway/management/v1"
auth=(-H "Authorization: Bearer $MANAGEMENT_KEY")
# Top 10 spenders over the last 30 days (first page only)
curl -s "$API/users?sort=cost&limit=10" "${auth[@]}" \
| jq -r '.items[] | [.email, .requests_30d, .cost_usd_30d] | @tsv'
# People granted Support Bot who were not active since October 1 (first page of up to 500;
# follow next_cursor for more)
curl -s "$API/users?app=Support%20Bot&limit=500" "${auth[@]}" \
| jq -r '.items[] | select((.last_active_at // "") < "2026-10-01") | .email'
Read one user
GET /users/{email} (URL-encode the email) returns:
app_access: each app in the person's console app visibility, self-service grants or personal-key ownership, with every grant ingranted_by(for example an app's allowed users, self-service access through a smart group, or a personal key), whether their email domain is allowed, and whether self-service denies them. This is not a request-time authorization evaluation; policies, model access and limits can still restrict calls. An app saved without a name appears asUnnamed appand has no link.self_service_keys: personal key metadata with status, creation, expiry and last use. Key values are never returned.smart_groupsanddirectory: group memberships and directory details.usage: totals for the last 30 days (last_30d) and all time (all_time), plus up to 5 top models and per-app totals (by_app), both covering the last 30 days.nullwhen request history is unavailable;complete: falsewhen the person's history exceeded its read limit and the totals are partial. Requests whose identity data retention removed are not counted for the person. Request counts exclude rejected requests and background cache-refresh requests; cost includes the background cache-refresh requests the provider bills.links: related management paths, including the person's budget subject for Read a budget subject.
Results can be up to 60 seconds old. The answer is 404 when the email is neither configured nor seen in requests, 503 query_timeout when the query exceeds its time or read limits (retry), and 503 data_unavailable when the data cannot be read right now.
Endpoints
/usersList gateway users
Everyone the gateway knows for your tenant, one entry per email (matched case-insensitively): people in your synced identity directory, people named in gateway configuration (allowed users, smart groups, self-service access, personal keys) and people seen only in gateway requests. Each entry summarizes console app visibility, self-service grants and personal-key ownership (not a request-time authorization evaluation; policies, model access and limits can still restrict calls), active personal keys, last activity and the last 30 days of requests and cost. Filters: `q` (email or department substring), `app` (people granted that app or with requests to it), `active_since` (inclusive; a date means UTC midnight). Sort with `sort`. Page with `limit` (1 to 500, default 100) and `cursor`. Results can be up to 60 seconds old. When request history is unavailable the list is still returned with `usage.available` false and null usage fields; sorting by usage or filtering by `active_since` then answers 503 `data_unavailable`, and 503 `query_timeout` when usage exceeds its time or read limits. `usage.complete` false or `truncated` true mean the history or the configuration was larger than its read limit and the list is partial. Read-only: people are added through your identity provider or the console.
readPath, query & header parameters 6
limit (query)integeroptionalPage size: 1 to 500, default 100.
cursor (query)stringoptionalnext_cursor from the previous page; send the same other parameters.
q (query)stringoptionalCase-insensitive substring of the email or directory department.
app (query)stringoptionalApp name (case-insensitive): people granted this app specifically, or with requests to it. People who see every app only by default are not included.
active_since (query)stringoptionalPeople active at or after this time (inclusive, like from on the other reports): a date (YYYY-MM-DD, UTC midnight) or an RFC 3339 timestamp with a timezone.
sort (query)stringoptionalemail (A to Z), last_active (most recent first), requests or cost (last 30 days, highest first).
"email""last_active""requests""cost"No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/users?limit=100' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
/users/{email}Read a gateway user
One person by email (case-insensitive; URL-encode it): directory details, smart groups, their console app visibility, self-service grants and personal-key ownership per app and every way each is granted, personal key metadata (never key values), usage for the last 30 days and all time, with top models and per-app totals for the last 30 days, and links to related management endpoints, such as the budget subject for GET /budget-subjects/{kind}/{value}. This is not a request-time authorization evaluation; policies, model access and limits can still restrict calls. `usage` is null when request history is unavailable, and `usage.complete` false when it was capped. Results can be up to 60 seconds old. 404 when the email is neither configured nor seen in requests. 503 `query_timeout` when the query exceeds its time or read limits (narrow it and retry); 503 `data_unavailable` when the data cannot be read right now.
readPath, query & header parameters 1
email (path)stringrequiredEmail address, case-insensitive, URL-encoded.
No request body.
curl --request GET \
'https://guardrails-usa-1.quilr.ai/llmgateway/management/v1/users/alice%40example.com' \
--header 'Authorization: Bearer <management-key>'
Authentication, errors & retry rules Try it in the playground
Related
- Usage API - group usage by user over any range.
- Budgets API - per-user budgets, usage and grants.
- Apps and credentials API - app access lists and gateway keys.
- Management API - authentication, errors and retry rules.