> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.vitablehealth.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.vitablehealth.com/_mcp/server.

# List Qualifying Life Events

GET https://api.vitablehealth.com/v1/members/{member_id}/qualifying-life-events

Lists a member's qualifying life events, including events already used for another enrollment. Returns all statuses by default; pass the status query param to filter to one (e.g. approved). Events are ordered newest submission first with stable paging. Custom text is present only when submitted and is otherwise null. A member not visible to the caller returns a 404. API keys and unbound access tokens have organization-wide access. Employer-bound tokens require employment at the bound employer, and employee-bound tokens require the exact employee-member relationship. Organization or scope mismatches return a 404 before pagination is validated.

Reference: https://developer.vitablehealth.com/api/members/list-qualifying-life-events

## Authentication

- `Authorization` header (bearer token, required) — API Key or Access Token authentication using Bearer token in Authorization header. API keys use the vit_apk_ prefix, access tokens use the vit_at_ prefix.

## Servers

- `https://api.vitablehealth.com` (Production, default)
- `https://api.uat.vitablehealth.com` (UAT)

## Request

### Path parameters

- `member_id` (string, required) — Unique member identifier (mbr_*)

### Query parameters

- `limit` (integer, optional, default: 20) — Items per page (default: 20, max: 100)
- `page` (integer, optional, default: 1) — Page number (default: 1)
- `status` (enum, optional) — Optional. Filter to a single QLE status; omit to return all statuses.
  - Allowed values: `approved`, `denied`, `pending`

### Headers

- `X-Vitable-Organization` (string, optional) — Organization to act as for this request (e.g. `org_SGVsbG8gV29ybGQ`). Optional when your credentials reach a single organization. Required when they reach several — omitting it then returns 400 `organization_required`. A malformed value returns 400 `invalid_organization_header`, and naming an organization you do not have access to returns 403 `organization_access_denied`.

## Response

### 200

- `data` (list of MemberQualifyingLifeEvent, required) — This page of qualifying life events.
- `pagination` (Pagination, required) — Page metadata. Request the next page by incrementing `page`.

## Errors

### 400 Bad Request Error

Invalid request.

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 401 Unauthorized Error

Unauthorized - Invalid or missing API key

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 403 Forbidden Error

Forbidden - Insufficient permissions for this resource

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 404 Not Found Error

Resource not found.

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 409 Conflict Error

Conflict - Resource already exists or conflicts with current state

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 429 Too Many Requests Error

Too Many Requests - Rate limit exceeded

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 500 Internal Server Error

Internal Server Error - An unexpected error occurred

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

### 502 Bad Gateway Error

Bad Gateway - External service error

- `timestamp` (datetime, required) — ISO 8601 timestamp when the error occurred
- `message` (string, required) — Human-readable error message
- `error` (string, required) — Error message (same as message, for backwards compatibility)
- `trace_id` (string, required) — Unique trace ID for debugging and support requests
- `app_error_code` (string, optional, nullable) — Application-specific error code for programmatic handling

## Types

### MemberQualifyingLifeEvent

- `id` (string, required) — Opaque qualifying life event identifier
- `event_type` (enum, required) — The member-submitted qualifying life event type * `lost_job_based_coverage` - Losing job-based health insurance * `aged_off_parent_plan` - Aging off a parent's plan at age 26 * `lost_medicaid_chip_medicare` - Losing Medicaid, CHIP, or Medicare eligibility * `lost_decertified_individual_plan` - Losing individual coverage because a plan was decertified * `married` - Getting married * `divorced` - Getting divorced or legally separated * `had_baby` - Having a baby * `adopted_child` - Adopting a child * `foster_care_placement` - Foster-care placement * `death_of_spouse_or_dependent` - Death of a covered spouse or dependent * `court_ordered` - Court order to add a dependent * `moved_to_new_coverage_area` - Moving to a new ZIP code, county, or state where different plans are available * `moved_to_us` - Moving to the U.S. from another country * `moved_to_or_from_school_housing` - Moving to or from school housing * `moved_to_or_from_seasonal_work_housing` - Moving to or from housing for seasonal work * `became_us_citizen` - Becoming a U.S. citizen * `left_incarceration` - Leaving incarceration * `gained_tribal_status` - Gaining status as a member of a federally recognized tribe or Alaska Native corporation * `started_or_ended_americorps_service` - Starting or ending AmeriCorps service * `new_child` - New child * `other` - Other
  - Allowed values: `lost_job_based_coverage`, `aged_off_parent_plan`, `lost_medicaid_chip_medicare`, `lost_decertified_individual_plan`, `married`, `divorced`, `had_baby`, `adopted_child`, `foster_care_placement`, `death_of_spouse_or_dependent`, `court_ordered`, `moved_to_new_coverage_area`, `moved_to_us`, `moved_to_or_from_school_housing`, `moved_to_or_from_seasonal_work_housing`, `became_us_citizen`, `left_incarceration`, `gained_tribal_status`, `started_or_ended_americorps_service`, `new_child`, `other`
- `event_type_label` (string, required) — Human-readable label for event_type
- `other_event` (string, required, nullable) — Custom event description when event_type is Other; otherwise normally null
- `status` (enum, required) — Review status of the qualifying life event * `pending` - Pending * `approved` - Approved * `denied` - Denied
  - Allowed values: `pending`, `approved`, `denied`
- `submitted_at` (datetime, required) — When the member submitted the event

### Pagination

Pagination metadata for list responses.

- `page` (integer, required) — Current page number
- `limit` (integer, required) — Items per page
- `total` (integer, required) — Total number of items
- `total_pages` (integer, required) — Total number of pages

## Examples

**Response**

```json
{
  "data": [
    {
      "id": "qle_AAAAAAAAAAAAAAAAAAAAAQ",
      "event_type": "other",
      "event_type_label": "Other",
      "other_event": "Relocation",
      "status": "approved",
      "submitted_at": "2026-07-01T14:30:00Z"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 1,
    "total_pages": 1
  }
}
```

**SDK Code**

```python Member Qualifying Life Events
import requests

url = "https://api.vitablehealth.com/v1/members/mbr_abc123def456/qualifying-life-events"

headers = {"Authorization": "Bearer <apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript Member Qualifying Life Events
const url = 'https://api.vitablehealth.com/v1/members/mbr_abc123def456/qualifying-life-events';
const options = {method: 'GET', headers: {Authorization: 'Bearer <apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Member Qualifying Life Events
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.vitablehealth.com/v1/members/mbr_abc123def456/qualifying-life-events"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Member Qualifying Life Events
require 'uri'
require 'net/http'

url = URI("https://api.vitablehealth.com/v1/members/mbr_abc123def456/qualifying-life-events")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <apiKey>'

response = http.request(request)
puts response.read_body
```

```java Member Qualifying Life Events
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.vitablehealth.com/v1/members/mbr_abc123def456/qualifying-life-events")
  .header("Authorization", "Bearer <apiKey>")
  .asString();
```

```php Member Qualifying Life Events
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.vitablehealth.com/v1/members/mbr_abc123def456/qualifying-life-events', [
  'headers' => [
    'Authorization' => 'Bearer <apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Member Qualifying Life Events
using RestSharp;

var client = new RestClient("https://api.vitablehealth.com/v1/members/mbr_abc123def456/qualifying-life-events");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <apiKey>");
IRestResponse response = client.Execute(request);
```

```swift Member Qualifying Life Events
import Foundation

let headers = ["Authorization": "Bearer <apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.vitablehealth.com/v1/members/mbr_abc123def456/qualifying-life-events")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```