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

# Get Registrants

> Retrieves a paginated list of registrants for a specific webinar event, with optional filtering and sorting.

**HTTP Method**: GET

**URL**: `/api/v3/events/{eventId}/registrants`

**Authentication**: Requires API Key in the request header.

**Authorization**: The event must belong to the account associated with the API token. Returns 403 if the event belongs to a different account.

**Path Parameters**:

| Parameter | Type   | Description                                                                                                            |
| :-------- | :----- | :--------------------------------------------------------------------------------------------------------------------- |
| `eventId` | string | ID of the webinar event. To find this value, visit the schedule page and click “Copy event ID” in the three dots menu. |

**Query Parameters**:

| Parameter       | Type    | Default        | Description                                                                                                                    |
| :-------------- | :------ | :------------- | :----------------------------------------------------------------------------------------------------------------------------- |
| `limit`         | integer | 100            | Number of items per page (1–500)                                                                                               |
| `cursor`        | string  | —              | Opaque cursor from `page.next_cursor` of a previous response. Used for pagination.                                             |
| `sort`          | string  | `registeredAt` | Field to sort by. Allowed values: `registeredAt`, `email`, `name`                                                              |
| `order`         | string  | `desc`         | Sort direction. Allowed values: `asc`, `desc`                                                                                  |
| `approved`      | boolean | —              | Filter by approval status (`true` / `false`)                                                                                   |
| `participated`  | boolean | —              | Filter by whether the registrant joined the live session                                                                       |
| `search`        | string  | —              | Free-text search across email, name, and last name                                                                             |
| `updated_after` | string  | —              | Only return registrants registered after this date (ISO-8601). Useful for incremental syncing. Example: `2026-01-01T00:00:00Z` |

**Response**: Paginated list of registrant objects for the specified event.

**Rate limit**: Once every 1 second for unique requests.

**Pagination**: This endpoint uses **cursor-based pagination** with a default page size of 100 registrants. To iterate through all results:

1. Make the first request without a `cursor` parameter
2. If `page.next_cursor` is not `null`, make another request with `cursor` set to that value
3. Repeat until `page.next_cursor` is `null`

**Status Codes**:

* `200 OK` Registrants retrieved successfully.
* `401 Unauthorized` Authentication failed (missing or invalid API token).
* `403 Forbidden` Event does not belong to this account.
* `404 Not Found` Event not found.
* `500 Internal Server Error` Unexpected server error.

### **Sample Request**

```bash highlight={2-3} theme={null}
GET /api/v3/events/69b5f9f8788fcc3897fd60e8/registrants HTTP/1.1
Host: platform.riverside.fm
Authorization: Bearer YOUR_API_KEY
```

### **Sample Request with filters**

```bash theme={null}
GET /api/v3/events/69b5f9f8788fcc3897fd60e8/registrants?limit=50&approved=true&sort=email&order=asc HTTP/1.1
Host: platform.riverside.fm
Authorization: Bearer YOUR_API_KEY
```

### **Sample Request for incremental sync**

```bash theme={null}
GET /api/v3/events/69b5f9f8788fcc3897fd60e8/registrants?updated_after=2026-03-15T00:00:00Z HTTP/1.1
Host: platform.riverside.fm
Authorization: Bearer YOUR_API_KEY
```

### **Sample Request with cursor pagination**

```bash theme={null}
GET /api/v3/events/69b5f9f8788fcc3897fd60e8/registrants?limit=50&cursor=MjAyNi0wMy0xNlQxNzo0Mzo1MC4wMDBaOjoxODYwNQ== HTTP/1.1
Host: platform.riverside.fm
Authorization: Bearer YOUR_API_KEY
```

### **Sample Response**

```json theme={null}
{
  "event_id": "69b5f9f8788fcc3897fd60e8",
  "items": [
    {
      "first_name": "Ada",
      "last_name": "Lovelace",
      "email": "ada@example.com",
      "registered_at": "2026-01-12T10:15:30.000Z",
      "approved": true,
      "join_url": "https://riverside.fm/studio/my-studio?audienceToken=abc-123",
      "participated": false,
      "attendance_rate": 87.5,
      "duration": "52:31",
      "referrer": "https://www.linkedin.com",
      "utm": {
        "source": "google",
        "medium": "cpc",
        "campaign": "webinar_launch",
        "term": "webinar",
        "content": "banner"
      },
      "custom_fields": {
        "Company": "Acme",
        "Phone": { "countryCode": "+1", "phoneNumber": "555555555" }
      }
    }
  ],
  "page": {
    "limit": 100,
    "next_cursor": "MjAyNi0wMy0xNlQxNzo0Mzo1MC4wMDBaOjoxODYwNQ==",
    "total_items": 350
  }
}
```

### **Response Fields**

| Field              | Type           | Description                                                                                 |
| :----------------- | :------------- | :------------------------------------------------------------------------------------------ |
| `event_id`         | string         | The event ID from the request                                                               |
| `items`            | array          | List of registrant objects for this page                                                    |
| `page`             | object         | Pagination metadata                                                                         |
| `page.limit`       | number         | The page size used for this request                                                         |
| `page.next_cursor` | string \| null | Opaque cursor to pass as `?cursor=` for the next page. `null` when there are no more pages. |
| `page.total_items` | number         | Total number of registrants matching the filters                                            |

### **Registrant Object Fields**

| Field             | Type    | Nullable | Description                                                                                                   |
| :---------------- | :------ | :------- | :------------------------------------------------------------------------------------------------------------ |
| `first_name`      | string  | No       | Registrant's first name                                                                                       |
| `last_name`       | string  | Yes      | Registrant's last name                                                                                        |
| `email`           | string  | No       | Registrant's email address                                                                                    |
| `registered_at`   | string  | No       | Timestamp when the registrant signed up (ISO-8601)                                                            |
| `approved`        | boolean | No       | Whether the registrant is approved to attend                                                                  |
| `join_url`        | string  | Yes      | Unique join URL for this registrant                                                                           |
| `participated`    | boolean | No       | Whether the registrant actually joined the live session                                                       |
| `attendance_rate` | number  | Yes      | Percentage of the event the registrant attended (0–100)                                                       |
| `duration`        | string  | Yes      | Time spent in the session, formatted as `MM:SS`                                                               |
| `referrer`        | string  | Yes      | Referrer URL if available                                                                                     |
| `utm`             | object  | Yes      | UTM tracking parameters (only present if any UTM value exists)                                                |
| `utm.source`      | string  | Yes      | UTM source                                                                                                    |
| `utm.medium`      | string  | Yes      | UTM medium                                                                                                    |
| `utm.campaign`    | string  | Yes      | UTM campaign                                                                                                  |
| `utm.term`        | string  | Yes      | UTM term                                                                                                      |
| `utm.content`     | string  | Yes      | UTM content                                                                                                   |
| `custom_fields`   | object  | Yes      | Key-value map of custom registration fields. Values can be string, boolean, or `{ countryCode, phoneNumber }` |

### **Error Responses**

**Unauthorized (401)**

```json theme={null}
{
  "message": "Unauthorized"
}
```

**Forbidden (403)**

```json theme={null}
{
  "message": "Event does not belong to this account"
}
```

**Event Not Found (404)**

```json theme={null}
{
  "message": "Event not found"
}
```
