---
title: "List Users"
method: GET
path: "/api/v1/users"
tags: ["External: Users"]
---

# List Users

`GET /api/v1/users`

List users with pagination, sorting, and search.

## Query parameters

- `page` integer — Page number (1-based)
- `limit` integer — Number of results per page
- `sort_by` 'created_at' | 'email' | 'first_name' | 'last_name' | 'last_synced_at', nullable — Field to sort by
- `sort_order` 'asc' | 'desc' — Sort order
- `search` string, nullable — Search across first_name, last_name, and email (partial match)
- `email` string, email, nullable — Filter by exact email
- `external_user_id` string, nullable — Filter by external user ID. Deprecated: no data-fetching endpoint (timeseries, workouts, sleep, summaries, health-scores, etc.) accepts external_user_id - they all require the Open Wearables UUID. This field was added early in the project but never wired into those endpoints, so it only works as a filter on GET /users. Store the UUID returned by POST /users in your own system instead.

## Headers

- `X-Open-Wearables-API-Key` string, nullable

## Response `200`

Successful Response

- OldPaginatedResponseUserRead
  - `items` UserRead[], required
    - `id` string, uuid, required
    - `created_at` string, date-time, required
    - `first_name` string, nullable
    - `last_name` string, nullable
    - `email` string, email, nullable
    - `external_user_id` string, nullable — Deprecated: no data-fetching endpoint (timeseries, workouts, sleep, summaries, health-scores, etc.) accepts external_user_id - they all require the Open Wearables UUID. This field was added early in the project but never wired into those endpoints, so it only works as a filter on GET /users. Store the UUID returned by POST /users in your own system instead.
    - `last_synced_at` string, date-time, nullable
    - `last_synced_provider` string, nullable
    - `has_active_connection` boolean
  - `total` integer, required — Total number of items matching the query
  - `page` integer, required — Current page number (1-based)
  - `limit` integer, required — Number of items per page
  - `pages` integer, required — Total number of pages.
  - `has_next` boolean, required — Whether there is a next page.
  - `has_prev` boolean, required — Whether there is a previous page.

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/openwearables/apis/open-wearables-api.md) · [All operations](https://skmtc.net/openwearables/apis/open-wearables-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openwearables/open-wearables-api/versions/37c1c527cd8f/schema)
