---
title: "List participants"
method: GET
path: "/v1/participants"
tags: ["Participants"]
---

# List participants

`GET /v1/participants`

## Request

- Base URL: `https://api.scrip.dev`
- URL: `https://api.scrip.dev/v1/participants`
- Auth: HTTP bearer

Returns a paginated list of participants. When `external_id` is provided, it is treated as an exact-match filter and the response shape remains the same list envelope.

## Query parameters

- `external_id` string
- `limit` integer
- `cursor` string
- `program_id` string, uuid
- `status` 'ACTIVE' | 'SUSPENDED' | 'CLOSED'
- `search` string
- `created_after` string, date-time
- `created_before` string, date-time
- `sort_by` 'created_at' | 'external_id' | 'status'
- `sort_dir` 'asc' | 'desc'

## Response `200`

Paginated participant list

- ParticipantListResponse: One page of participants, with the pagination details for the next page.
  - `data` ParticipantResponse[]: The participants on this page.
    - `created_at` string, date-time: When the participant was created
    - `display_name` string: The name to show for the participant.
    - `email` string: Contact email
    - `external_id` string: Your application's identifier for this participant
    - `first_name` string: The participant's first name.
    - `id` string, uuid: The id of the participant. Use it in `participant_id` fields and paths.
    - `last_name` string: The participant's last name.
    - `phone` string: Contact phone
    - `status` 'ACTIVE' | 'SUSPENDED' | 'CLOSED': The participant's lifecycle state.
    - `updated_at` string, date-time: When the participant was last modified
  - `pagination` PaginationResponse: Cursor details for a list. `has_more` says whether another page exists, and `next_cursor` is the value to send to get it.
    - `has_more` boolean, required: Whether more results are available beyond this page
    - `next_cursor` string, nullable, required: Cursor to fetch the next page. Null on the last page

## Other responses

- `400`: Invalid query parameters (code: validation_error)
- `401`: The API key is missing or not valid. See [Authentication](https://docs.scrip.dev/authentication).
- `429`: Too many requests. Wait the number of seconds in the `Retry-After` header, then retry. See [Limits and durations](https://docs.scrip.dev/limits#rate-limits).
- `500`: Something failed on Scrip's side. Retry the request, and quote `request_id` if it keeps failing. [Errors](https://docs.scrip.dev/errors) lists every code, and the [API introduction](https://docs.scrip.dev/api-reference/introduction) describes the error format.

---

[API](https://skmtc.dev/scrip/apis/scrip-api.md) · [All operations](https://skmtc.dev/scrip/apis/scrip-api/llms.txt) · [OpenAPI document](https://skmtc.dev/scrip/apis/scrip-api/revisions/c52d35da8d97?raw)
