> ## 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 Events

> Retrieves a paginated list of the scheduled events in your account — studio sessions and live webinars — with optional filtering.

**HTTP Method**: GET

**URL**: `/api/v3/events`

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

**Authorization**: Account-level. Returns every scheduled event in the account associated with the API token.

**Query Parameters**:

| Parameter       | Type    | Default | Description                                                                                                                                           |
| :-------------- | :------ | :------ | :---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `event_type`    | string  | —       | Filter by event type. Allowed values: `session`, `webinar`. A `session` is a scheduled studio session with no registration form; a `webinar` has one. |
| `status`        | string  | —       | Filter by event state. Allowed values: `upcoming`, `live`, `ended`.                                                                                   |
| `from`          | string  | —       | ISO-8601 timestamp. Only events whose `start_time` is at or after this instant. Example: `2026-10-01T00:00:00Z`                                       |
| `to`            | string  | —       | ISO-8601 timestamp. Only events whose `start_time` is at or before this instant. Example: `2026-10-31T23:59:59Z`                                      |
| `studio_id`     | string  | —       | Only events scheduled in this studio. Studio IDs are returned by [List Workspace](/endpoints-reference/v3/list-workspace).                            |
| `updated_after` | string  | —       | ISO-8601 timestamp. Only events created or updated after this instant. Useful for incremental syncing. Example: `2026-09-01T00:00:00Z`                |
| `cursor`        | string  | —       | Opaque cursor from `next_cursor` of a previous response. Used for pagination.                                                                         |
| `limit`         | integer | 20      | Number of items per page (1–500)                                                                                                                      |

All filters are optional and can be combined.

**Response**: Paginated list of event objects, newest scheduled start first.

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

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

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

Keep every filter identical across the pages of a single walk. A cursor is only valid for the filter set it was issued with.

**Status Codes**:

* `200 OK` Events retrieved successfully.
* `400 Bad Request` Invalid query parameter, or a cursor that was not issued by this endpoint.
* `401 Unauthorized` Authentication failed (missing or invalid API token).
* `404 Not Found` The endpoint is not enabled for this account.
* `429 Too Many Requests` Rate limit exceeded.
* `500 Internal Server Error` Unexpected server error.

> **Notes:**
>
> * Results are ordered by `start_time` descending — the newest scheduled event first, past events further down the list.
> * Recurring events return **one object per occurrence**, each with its own `id`. Every occurrence `id` is valid input to [Get Registrants](/endpoints-reference/v3/get-registrants) and [Create Webinar Registrant](/endpoints-reference/v3/create-registrant).
> * Deleted events are never returned.
> * **On-demand webinars are not scheduled events and are not listed by this endpoint.** Their IDs still work with the registrant endpoints — copy the ID from the on-demand webinars list.
> * `status` is derived at request time: `upcoming` before the scheduled start, `live` between the scheduled start and end, and `ended` after the scheduled end or once the session has been recorded.
> * `updated_after` tracks changes to the event itself — title, schedule, studio. New registrations do not change an event's update timestamp, so use [Get Registrants](/endpoints-reference/v3/get-registrants) to sync audience data.
> * `livestream_destinations` is populated as soon as the destination is scheduled, before the event goes live. Custom RTMP destinations are not included — they are not part of event scheduling.
> * Access is granted per account. If the endpoint returns `404` with a valid API key, speak to your customer success manager.

### **Sample Request**

```bash theme={null}
GET /api/v3/events HTTP/1.1
Host: platform.riverside.com
Authorization: Bearer YOUR_API_KEY
```

### **Sample Request with filters**

```bash theme={null}
GET /api/v3/events?event_type=webinar&status=upcoming&limit=50 HTTP/1.1
Host: platform.riverside.com
Authorization: Bearer YOUR_API_KEY
```

### **Sample Request for a date range in one studio**

```bash theme={null}
GET /api/v3/events?from=2026-10-01T00:00:00Z&to=2026-10-31T23:59:59Z&studio_id=507f1f77bcf86cd799439011 HTTP/1.1
Host: platform.riverside.com
Authorization: Bearer YOUR_API_KEY
```

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

```bash theme={null}
GET /api/v3/events?updated_after=2026-09-01T00:00:00Z HTTP/1.1
Host: platform.riverside.com
Authorization: Bearer YOUR_API_KEY
```

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

```bash theme={null}
GET /api/v3/events?limit=50&cursor=eyJzIjoiMjAyNi0wOS0yNFQxNDowMDowMC4wMDBaIiwiaSI6IjlmMWM0YjJlLTBkM2EtNGM3Ny1iMWU1LTJhNmY4YzBkNGU5MSJ9 HTTP/1.1
Host: platform.riverside.com
Authorization: Bearer YOUR_API_KEY
```

### **Sample Response**

```json theme={null}
{
  "data": [
    {
      "id": "69b5f9f8788fcc3897fd60e8",
      "name": "Q4 Product Launch",
      "event_type": "webinar",
      "status": "upcoming",
      "start_time": "2026-10-01T16:00:00.000Z",
      "end_time": "2026-10-01T17:00:00.000Z",
      "studio_id": "507f1f77bcf86cd799439011",
      "studio_name": "Main Studio",
      "registration_enabled": true,
      "registrants_count": 142,
      "registration_url": "https://riverside.fm/webinar/registration/eyJldmVudElkIjoiNjliNWY5Zjg3ODhmY2MzODk3ZmQ2MGU4Iiwic2x1ZyI6InByb2R1Y3Qtd2ViaW5hcnMifQ==",
      "livestream_destinations": [
        { "platform": "youtube", "url": "https://youtube.com/watch?v=abc123" },
        { "platform": "linkedin", "url": "https://linkedin.com/events/7250000000000000000" }
      ],
      "created_date": "2026-09-01T12:00:00.000Z"
    },
    {
      "id": "69b5fa41788fcc3897fd6104",
      "name": "Weekly Team Recording",
      "event_type": "session",
      "status": "ended",
      "start_time": "2026-09-24T14:00:00.000Z",
      "end_time": "2026-09-24T15:00:00.000Z",
      "studio_id": "507f1f77bcf86cd799439011",
      "studio_name": "Main Studio",
      "registration_enabled": false,
      "registrants_count": null,
      "registration_url": null,
      "livestream_destinations": [],
      "created_date": "2026-08-12T09:30:00.000Z"
    }
  ],
  "next_cursor": "eyJzIjoiMjAyNi0wOS0yNFQxNDowMDowMC4wMDBaIiwiaSI6IjlmMWM0YjJlLTBkM2EtNGM3Ny1iMWU1LTJhNmY4YzBkNGU5MSJ9"
}
```

### **Response Fields**

| Field         | Type           | Description                                                                                 |
| :------------ | :------------- | :------------------------------------------------------------------------------------------ |
| `data`        | array          | List of event objects for this page                                                         |
| `next_cursor` | string \| null | Opaque cursor to pass as `?cursor=` for the next page. `null` when there are no more pages. |

### **Event Object Fields**

| Field                                | Type    | Nullable | Description                                                                                                                                                                                                                                                                      |
| :----------------------------------- | :------ | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                                 | string  | No       | Event ID. Valid input to the registrant endpoints. Matches the ID shown by "Copy event ID" in the Planner.                                                                                                                                                                       |
| `name`                               | string  | No       | Event title as set in the Planner                                                                                                                                                                                                                                                |
| `event_type`                         | string  | No       | `session` or `webinar`                                                                                                                                                                                                                                                           |
| `status`                             | string  | No       | `upcoming`, `live`, or `ended`                                                                                                                                                                                                                                                   |
| `start_time`                         | string  | No       | Scheduled start (ISO-8601, UTC)                                                                                                                                                                                                                                                  |
| `end_time`                           | string  | No       | Scheduled end (ISO-8601, UTC)                                                                                                                                                                                                                                                    |
| `studio_id`                          | string  | No       | ID of the studio hosting the event                                                                                                                                                                                                                                               |
| `studio_name`                        | string  | Yes      | Name of the hosting studio. `null` if the studio is no longer available.                                                                                                                                                                                                         |
| `registration_enabled`               | boolean | No       | Whether the event has a registration form. Always `false` for sessions.                                                                                                                                                                                                          |
| `registrants_count`                  | number  | Yes      | Number of registrants on the event's audience list. `null` when `registration_enabled` is `false`.                                                                                                                                                                               |
| `registration_url`                   | string  | Yes      | Public sign-up page for the webinar — the same link the `webinar.created` webhook delivers. Points at the direct-join page when the webinar does not require registration. Safe to publish; it is never a per-attendee join link. `null` when `registration_enabled` is `false`. |
| `livestream_destinations`            | array   | No       | Social destinations scheduled for this event. Empty array when none are configured.                                                                                                                                                                                              |
| `livestream_destinations[].platform` | string  | No       | Destination platform, e.g. `youtube`, `linkedin`, `facebook`                                                                                                                                                                                                                     |
| `livestream_destinations[].url`      | string  | Yes      | Public viewing URL of the scheduled broadcast, when the platform provides one                                                                                                                                                                                                    |
| `created_date`                       | string  | No       | When the event was created (ISO-8601)                                                                                                                                                                                                                                            |

### **Error Responses**

**Invalid query parameter or cursor (400)**

```json theme={null}
{
  "statusCode": 400,
  "message": "Invalid cursor",
  "error": "Bad Request"
}
```

**Unauthorized (401)**

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

**Endpoint not enabled for this account (404)**

```json theme={null}
{
  "statusCode": 404,
  "message": "Not Found"
}
```

**Rate limit exceeded (429)**

```json theme={null}
{
  "statusCode": 429,
  "message": "ThrottlerException: Too Many Requests"
}
```
