---
title: "Listing all Users"
method: GET
path: "/v1/users"
tags: ["Users"]
---

# Listing all Users

`GET /v1/users`

Currently, there are no paging or filtering options, so listing `User`s will get you every User in the system, every time.

Optionally, a `q` querystring parameter may be provided to filter the returned users by any given string. The search is performed via a [trigram similarity index](https://www.postgresql.org/docs/14/pgtrgm.html) over both the Email and Display Name fields, and results are ordered by match score, best matches first. Note that short search terms (less than 4 or 5 characters) may not return any results. Try a longer search if nothing is appearing.

If a `q` parameter is given, and it exactly matches an email address that exists in the system, that user's details will always be returned, even for actors who cannot `user.list`. The request must still authenticate as a valid Actor. This allows non-Administrators to choose a user for an action (eg grant rights) without allowing full search.

Actors who cannot `user.list` will always receive `[]` with a `200 OK` response.

## Query parameters

- `q` string

## Response `200`

OK

- User[]
  - `createdAt` string, required — ISO date format
  - `displayName` string, required — All `Actor`s, regardless of type, have a display name
  - `id` number, required
  - `type` 'user' | 'field_key' | 'public_link' | 'singleUse', required — The type of actor
  - `updatedAt` string — ISO date format
  - `deletedAt` string — ISO date format
  - `email` string — The email address of the user
  - `lastLoginAt` string, date-time, nullable — The timestamp of when the user last logged in. Will be null if the user has never logged in.

## Changes

- **2025-12-20** `022694254f0d` — 1 info
  - api operation id `Listing all Users` removed and replaced with `listAllUsers`
- **2025-10-27** `b11b54eea487` — 1 info
  - removed the non-success response with the status `403`
- **2025-09-24** `17bb5681fead` — 1 info
  - added the optional property `items/allOf[subschema #2]/lastLoginAt` to the response with the `200` status
- **2025-03-13** `e8c2858fd4eb` — 1 warning, 2 info
  - removed the optional property `items/allOf[subschema #2]/lastLoginAt` from the response with the `200` status
  - api operation id `listAllUsers` removed and replaced with `Listing all Users`
  - added the non-success response with the status `403`

[Change history](https://skmtc.dev/getodk/apis/odk-central-api/changes/v1/users/get.md)

---

[API](https://skmtc.dev/getodk/apis/odk-central-api.md) · [All operations](https://skmtc.dev/getodk/apis/odk-central-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getodk/odk-central-api/revisions/d4f5ba77f644/schema)
