{"openapi":"3.1.0","info":{"title":"API Reference","version":"1.0.0"},"paths":{"/v1/auth/access-tokens":{"post":{"operationId":"auth_issue_access_token","summary":"Issue access token","description":"Issues a short-lived access token from the authenticated API key. Access tokens can optionally be bound to a specific employer or employee for scoped access. Tokens expire after 15 minutes.","tags":["Auth"],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessTokenResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueAccessTokenRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employees/{employee_id}":{"get":{"operationId":"employees_get","summary":"Get employee","description":"Retrieves detailed information for a specific employee by ID. Returns employee details including personal information, employment status, classification and compensation-type effective dates, compensation type, and payroll deductions from the most recent statement period. Deductions reflect a snapshot of the current period and are replaced when a new statement is generated.","tags":["Employees"],"parameters":[{"name":"employee_id","in":"path","description":"Unique employee identifier (empl_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployeeId"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployeeResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"patch":{"operationId":"employees_update","summary":"Update employee","description":"Updates employee personal, contact, address, and employment fields. This endpoint currently supports email, phone, gender, address, employee_class, start_date, and compensation_type. effective_date is required and applies to employee_class and compensation_type when those fields are included in the request.","tags":["Employees"],"parameters":[{"name":"employee_id","in":"path","description":"Unique employee identifier (empl_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployeeId"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployeeResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedUpdateEmployeeRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employees/{employee_id}/enrollments":{"get":{"operationId":"employees_list_enrollments","summary":"List employee enrollments","description":"Retrieves a paginated list of benefit enrollments for an employee.","tags":["Employees"],"parameters":[{"name":"employee_id","in":"path","description":"Unique employee identifier (empl_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployeeId"}},{"name":"limit","in":"query","description":"Items per page (default: 20, max: 100)","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollmentListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/employees":{"post":{"operationId":"employees_create_employee","summary":"Create employee","description":"Adds an employee to an employer. The caller must be authorized for the employer; an unknown or unauthorized employer returns 404, and so do credentials scoped to a single employee. A person who already exists in Vitable is linked to the employer rather than duplicated. Eligibility and enrollment are not immediate: they are recalculated periodically and can take a few hours to reflect a new employee.\n\n409 `app_error_code` values: `employer_has_hris_connection` (an active, pending or inactive HRIS connection manages this roster; paused connections do not block), `employer_has_no_active_subscription`, and `employee_already_exists` (the person is already on this employer's roster, including former employees).\n\n422 `app_error_code` values: `email_taken` (the email belongs to another person's Vitable account) and `invalid_account_update` (another account detail, such as the phone, belongs to another person).\n\n400 is returned for malformed input and for data the employee record rejects (`invalid_employee_update`, the same code PATCH uses), such as an employee under 18 or a start date after today in US Eastern time.","tags":["Employees"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployeeResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict with the current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmployeeRequest"}}}},"security":[{"APIKeyAuth":[]}]},"get":{"operationId":"employers_list_employees","summary":"List employees","description":"Retrieves a paginated list of employees for a specific employer. The caller must be authorized for the employer; an unknown or unauthorized employer returns 404. Results are paginated using page and limit parameters and can be narrowed with a case-insensitive `search` (first name, last name, or email) and an `employment_status` filter (active or terminated). Each employee includes payroll deductions from the most recent statement period. When a new deduction statement is generated, previous period deductions are replaced.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"employment_status","in":"query","description":"Filter by employment status (active or terminated)","required":false,"schema":{"$ref":"#/components/schemas/EmployeeStatus"}},{"name":"limit","in":"query","description":"Items per page (default: 20, max: 100)","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}},{"name":"search","in":"query","description":"Case-insensitive search across employee first name, last name, and email","required":false,"schema":{"$ref":"#/components/schemas/EmployeeSearch"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployeeListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers":{"get":{"operationId":"employers_list","summary":"List employers","description":"Returns the caller's employer book — every employer with its computed columns (enrollment-rate summary, benefit-family tags, HRIS connection, benefit-lifecycle stage) merged with the employer's flat CRM fields (legal name, EIN, contact, address, timestamps). The book is derived from the authenticated principal: one organization's employers, or every organization's for a caller whose reach is not a single organization. Supports search by display name, legal name, or exact EIN, employer id or contact email, benefit-family/lifecycle/HRIS filters, and page/limit pagination.","tags":["Employers"],"parameters":[{"name":"benefit_family","in":"query","description":"Filter to employers with at least one active benefit in these families.","required":false,"schema":{"$ref":"#/components/schemas/BenefitFamilyParam","default":[]}},{"name":"benefit_lifecycle_stage","in":"query","description":"Filter to employers in one of these computed benefit-lifecycle stages.","required":false,"schema":{"$ref":"#/components/schemas/BenefitLifecycleStage","default":[]}},{"name":"hris_provider","in":"query","description":"Filter to employers whose HRIS connection is with one of these payroll providers (e.g. `ADP RUN`). Matched case-insensitively; free text, so read the available values from the HRIS-providers endpoint rather than assuming a fixed set.","required":false,"schema":{"$ref":"#/components/schemas/HrisProvider","default":[]}},{"name":"hris_status","in":"query","description":"Filter to employers whose HRIS connection is in one of these statuses.","required":false,"schema":{"$ref":"#/components/schemas/HrisStatus","default":[]}},{"name":"include_cancelled","in":"query","description":"Include cancelled employers (hidden by default unless their stage is explicitly requested).","required":false,"schema":{"$ref":"#/components/schemas/IncludeCancelled","default":false}},{"name":"limit","in":"query","description":"Items per page.","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number.","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}},{"name":"search","in":"query","description":"Employer filter. Matches the display name or the legal name case-insensitively as a substring, or one of these exactly: the EIN (with or without its dash), the employer id, or the contact email of one of the employer's non-disabled admins.","required":false,"schema":{"$ref":"#/components/schemas/Search"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationEmployerListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"post":{"operationId":"employers_create","summary":"Create employer","description":"Creates a new employer for the authenticated organization. Requires employer name, legal name, EIN, email, and address information. Returns the created employer with its assigned ID.","tags":["Employers"],"parameters":[{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"A unique field collides with an existing employer. The `error.code` is one of: `EIN_ALREADY_EXISTS`, `NAME_ALREADY_EXISTS`, `LEGAL_NAME_ALREADY_EXISTS`, `EMAIL_ALREADY_EXISTS`, `PHONE_ALREADY_EXISTS`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"PO Box address submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmployerRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}":{"get":{"operationId":"employers_get","summary":"Get employer","description":"Retrieves detailed information for a specific employer by ID. The employer must belong to the authenticated organization.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"put":{"operationId":"employers_update","summary":"Update employer","description":"Updates an existing employer. All fields are optional — only provided fields are updated. PO Box addresses are rejected.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"PO Box address submitted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmployerRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/census-sync":{"post":{"operationId":"employers_submit_census_sync","summary":"Submit census sync","description":"Submits a census sync payload for the specified employer. The employees in the payload will be queued for processing. Returns an accepted response with the timestamp of acceptance.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}}],"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusSyncDetailResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusSyncRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/settings":{"put":{"operationId":"employers_update_settings","summary":"Update employer settings","description":"Updates configuration settings for a specific employer. The employer must belong to the authenticated organization.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerSettingsResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmployerSettingsRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/hris-providers":{"get":{"operationId":"employers_list_hris_providers","summary":"List HRIS providers","description":"Returns the distinct HRIS/payroll providers across the same book `GET /v1/employers` returns, sorted for display. Use these as the values for the employers list's `hris_provider` filter — filter on `provider`, show `provider_label`. The stored providers are free text, so they cannot be enumerated in advance.","tags":["Employers"],"parameters":[{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationHrisProvidersResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/hris":{"get":{"operationId":"employers_get_hris","summary":"Get an employer's HRIS connection","description":"Returns the employer's HRIS connection — provider, status, last sync, and synced row count — or null when the employer has no integration. The caller must be authorized for the employer; an unknown or unauthorized employer returns 404.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerHrisResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/benefit-plan-years":{"get":{"operationId":"employers_list_benefit_plan_years","summary":"List an employer's benefit plan years","description":"Returns the employer's benefit plan years (all years, or one when `year` is given), each with its benefits, offered states, benefit families, and the year-level enrollment roll-up. The caller must be authorized for the employer; an unknown or unauthorized employer returns 404.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerBenefitPlanYearsListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/benefit-plan-years/{benefit_plan_year_id}":{"get":{"operationId":"employers_get_benefit_plan_year","summary":"Get one of an employer's benefit plan years","description":"Returns one benefit plan year in full — its benefit details plus the per-benefit enrollment rate and SPD link — addressed by its `benefit_plan_year_id`. The caller must be authorized for the employer; an unknown or unauthorized plan year returns 404.","tags":["Employers"],"parameters":[{"name":"benefit_plan_year_id","in":"path","description":"Unique benefit-plan-year identifier (plyr_*).","required":true,"schema":{"$ref":"#/components/schemas/BenefitPlanYearId"}},{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerBenefitPlanYearResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/benefit-plan-years/{benefit_plan_year_id}/enrollments":{"get":{"operationId":"employers_list_benefit_plan_year_enrollments","summary":"List a benefit plan year's enrollments","description":"Returns a paginated list of every member with an enrollment in one of an employer's plan years, any election status: what they elected, where their coverage stands, dependent count, carrier, plan, tier, and the plan's total monthly cost. The caller must be authorized for the employer `empr_<...>`; an unknown or unauthorized employer, or an unknown plan year `plyr_<...>`, returns 404.","tags":["Employers"],"parameters":[{"name":"benefit_plan_year_id","in":"path","description":"Unique benefit-plan-year identifier (plyr_*).","required":true,"schema":{"$ref":"#/components/schemas/BenefitPlanYearId"}},{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*).","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"election_status","in":"query","description":"Filter by election status. Repeat the parameter to match several.","required":false,"schema":{"$ref":"#/components/schemas/ElectionStatus"}},{"name":"limit","in":"query","description":"Items per page (default: 20, max: 100)","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}},{"name":"search","in":"query","description":"Case-insensitive search. Matches member name partially, and the `member_id` exactly — either your own reference id or the prefixed `grpmbr_<...>` id.","required":false,"schema":{"$ref":"#/components/schemas/EmployerSearch"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanYearEnrollmentListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/invoices":{"get":{"operationId":"employers_list_invoices","summary":"List an employer's billing invoices","description":"Returns a cursor-paginated page of the employer's billing invoices, newest first. Pass the `next_offset` from a previous page as `offset` to fetch the next page. The caller must be authorized for the employer; an unknown or unauthorized employer returns 404.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"limit","in":"query","description":"Maximum number of invoices per page","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"offset","in":"query","description":"Opaque cursor from a previous page's next_offset","required":false,"schema":{"$ref":"#/components/schemas/Offset"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerInvoicesListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/invoices/{invoice_id}/pdf":{"get":{"operationId":"employers_get_invoice_pdf","summary":"Get an employer invoice's PDF download link","description":"Returns the time-limited PDF download link for a single invoice belonging to the employer's billing customer. `invoice_id` is the external Chargebee id (not a prefixed UUID). The caller must be authorized for the employer; an unknown or unauthorized employer or invoice returns 404.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"invoice_id","in":"path","description":"External Chargebee invoice id (not a prefixed UUID).","required":true,"schema":{"$ref":"#/components/schemas/InvoiceId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerInvoicePdfResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/payroll-access-setup":{"get":{"operationId":"employers_get_payroll_access_setup","summary":"Get Payroll Access Setup","description":"Return whether the employer has submitted payroll access setup.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayrollAccessSetupStatusResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"put":{"operationId":"employers_submit_payroll_access_setup","summary":"Submit Payroll Access Setup","description":"Submit the employer's payroll access setup answers.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayrollAccessSetupStatusResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitPayrollAccessSetupRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/payroll-deduction-statements":{"get":{"operationId":"employers_list_payroll_deduction_statements","summary":"List an employer's payroll-deduction statements","description":"Returns a paginated list of the employer's payroll-deduction statements, newest period first, each with its period, generation date, distinct employee count, total deduction, change-file link, and deduction frequency. Statements superseded by a later correction are excluded. The caller must be authorized for the employer; an unknown or unauthorized employer returns 404.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"limit","in":"query","description":"Maximum number of statements per page","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number to retrieve (starts at 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerPayrollDeductionStatementListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/payroll-integration-email":{"put":{"operationId":"employers_ensure_payroll_integration_email","summary":"Ensure Payroll Integration Email","description":"Provision and return the employer's payroll integration email.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayrollIntegrationEmailResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/employers/{employer_id}/aca-full-time-employees":{"get":{"operationId":"employers_list_employer_aca_full_time_employees","summary":"List an employer's ACA full-time employees","description":"Returns the employer's employees who currently have an ACA full-time determination, with their designated (payroll) and ACA classifications, required coverage start date, and measurement/stability period windows.caller must be authorized for the employer. Responds 422 with `app_error_code` `aca_autopilot_not_entitled` when the employer's plan doesn't include ACA Autopilot, or `aca_policy_not_configured` when it does but no ACA policy is set up.","tags":["Employers"],"parameters":[{"name":"employer_id","in":"path","description":"Unique employer identifier (empr_*)","required":true,"schema":{"$ref":"#/components/schemas/EmployerId"}},{"name":"aca_classification","in":"query","description":"Filters to an exact ACA classification.","required":false,"schema":{"$ref":"#/components/schemas/AcaClassificationParam"}},{"name":"limit","in":"query","description":"Items per page (default: 20, max: 100)","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"name","in":"query","description":"Filters to employees whose first or last name contains this text (case-insensitive).","required":false,"schema":{"$ref":"#/components/schemas/Name"}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployerACAFullTimeEmployeesListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/enrollments/{enrollment_id}":{"get":{"operationId":"enrollments_get","summary":"Get enrollment details","description":"Retrieves a single enrollment: the employee and employer it belongs to, the benefit product, its status, the coverage period, the employee payroll deduction and employer contribution, and the enrolled plan's Summary of Benefits and Coverage document when one is on file. An enrollment the caller cannot reach is indistinguishable from one that does not exist.","tags":["Enrollments"],"parameters":[{"name":"enrollment_id","in":"path","description":"Unique enrollment identifier (enrl_*)","required":true,"schema":{"$ref":"#/components/schemas/EnrollmentId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollmentResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/enrollments/{enrollment_id}/reissue":{"post":{"operationId":"enrollments_reissue","summary":"Reissue an enrollment","description":"Closes the targeted enrollment and creates a new unanswered enrollment for the same member and plan year. VPC never requires a qualifying life event; other products require an accepted, member-owned event outside open enrollment. User-backed callers must provide a reason; it is optional for organization API-key callers. Tenant mismatches return a non-disclosing 404 before the request body is validated.","tags":["Enrollments"],"parameters":[{"name":"enrollment_id","in":"path","description":"Unique enrollment identifier (enrl_*)","required":true,"schema":{"$ref":"#/components/schemas/EnrollmentId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReissueEnrollmentResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict with the current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReissueEnrollmentRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/enrollments/{enrollment_id}/terminate":{"post":{"operationId":"enrollments_terminate","summary":"Terminate an enrollment","description":"Terminates enrolled coverage immediately. An accepted qualifying life event owned by the enrollment member is required unless the plan is VPC or ICHRA. User-backed callers must provide a reason; it is optional for organization API-key callers. API keys may act across the caller organization's book. Tenant mismatches return the same non-disclosing 404 before the request body is validated.","tags":["Enrollments"],"parameters":[{"name":"enrollment_id","in":"path","description":"Unique enrollment identifier (enrl_*)","required":true,"schema":{"$ref":"#/components/schemas/EnrollmentId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"204":{"description":"No response body","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TerminateEnrollmentRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/enrollments/{enrollment_id}/carrier-question-responses":{"get":{"operationId":"enrollments_get_carrier_question_responses","summary":"Get carrier questions and saved responses","description":"Returns the carrier questionnaire and any saved responses for the selected enrollment plan.","tags":["Enrollments"],"parameters":[{"name":"enrollment_id","in":"path","description":"Unique enrollment identifier (enrl_*)","required":true,"schema":{"$ref":"#/components/schemas/EnrollmentId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierQuestionResponsesReadResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"put":{"operationId":"enrollments_save_carrier_question_responses","summary":"Save carrier-question responses","description":"Replaces the saved carrier-question responses for the selected enrollment plan.","tags":["Enrollments"],"parameters":[{"name":"enrollment_id","in":"path","description":"Unique enrollment identifier (enrl_*)","required":true,"schema":{"$ref":"#/components/schemas/EnrollmentId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierQuestionResponsesResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict with the current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveCarrierQuestionResponsesRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/enrollments/{enrollment_id}/selected-plan":{"put":{"operationId":"enrollments_select_enrollment_plan","summary":"Select or revalidate an enrollment plan","description":"Selects an available enrollment plan and creates or replaces its carrier-question draft.","tags":["Enrollments"],"parameters":[{"name":"enrollment_id","in":"path","description":"Unique enrollment identifier (enrl_*)","required":true,"schema":{"$ref":"#/components/schemas/EnrollmentId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierQuestionResponsesResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict with the current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SelectEnrollmentPlanRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/webhook-events":{"get":{"operationId":"webhookEvents_list","summary":"List webhook events","description":"Retrieves a paginated list of webhook events for the authenticated organization. Supports filtering by event name, resource type, resource ID, and date range.","tags":["webhookEvents"],"parameters":[{"name":"created_after","in":"query","required":false,"schema":{"$ref":"#/components/schemas/CreatedAfter"}},{"name":"created_before","in":"query","required":false,"schema":{"$ref":"#/components/schemas/CreatedBefore"}},{"name":"event_name","in":"query","description":"* `enrollment.accepted` - Enrollment Accepted\n* `enrollment.terminated` - Enrollment Terminated\n* `enrollment.termination_rescheduled` - Enrollment Termination Rescheduled\n* `enrollment.elected` - Enrollment Elected\n* `enrollment.granted` - Enrollment Granted\n* `enrollment.waived` - Enrollment Waived\n* `enrollment.started` - Enrollment Started\n* `employee.eligibility_granted` - Employee Eligibility Granted\n* `employee.eligibility_terminated` - Employee Eligibility Terminated\n* `employee.deactivated` - Employee Deactivated\n* `employee.deduction_created` - Employee Deduction Created","required":false,"schema":{"$ref":"#/components/schemas/EventName"}},{"name":"limit","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}},{"name":"resource_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"name":"resource_type","in":"query","description":"* `enrollment` - Enrollment\n* `employee` - Employee\n* `employer` - Employer\n* `dependent` - Dependent\n* `plan_year` - Plan Year\n* `payroll_deduction` - Payroll Deduction","required":false,"schema":{"$ref":"#/components/schemas/ResourceType"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEventListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/webhook-events/{event_id}":{"get":{"operationId":"webhookEvents_get","summary":"Get webhook event","description":"Retrieves a single webhook event by its prefixed ID. Returns 404 if the event does not exist or belongs to a different organization.","tags":["webhookEvents"],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EventId"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEventResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No response body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/webhook-events/{event_id}/deliveries":{"get":{"operationId":"webhookEvents_list_deliveries","summary":"List webhook event deliveries","description":"Retrieves all delivery attempts for a webhook event. Returns up to 100 deliveries. Each delivery includes a computed status field (Pending, In Progress, Delivered, or Failed).","tags":["webhookEvents"],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/EventId"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListWebhookEventDeliveriesResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"No response body","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/groups":{"get":{"operationId":"groups_list","summary":"List groups","description":"Returns a paginated list of groups belonging to the authenticated organization.","tags":["Groups"],"parameters":[{"name":"limit","in":"query","description":"Items per page (default: 20, max: 100)","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"post":{"operationId":"groups_create","summary":"Create group","description":"Creates a new group scoped to the authenticated organization.","tags":["Groups"],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGroupRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/groups/{group_id}":{"get":{"operationId":"groups_get","summary":"Get group","description":"Retrieves a single group by its prefixed ID. Returns 404 if the group does not belong to the authenticated organization.","tags":["Groups"],"parameters":[{"name":"group_id","in":"path","description":"Unique group identifier (grp_*)","required":true,"schema":{"$ref":"#/components/schemas/GroupId"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"patch":{"operationId":"groups_update","summary":"Update group","description":"Partially updates a group's name or external reference ID. Returns 404 if the group does not belong to the authenticated organization.","tags":["Groups"],"parameters":[{"name":"group_id","in":"path","description":"Unique group identifier (grp_*)","required":true,"schema":{"$ref":"#/components/schemas/GroupId"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedUpdateGroupRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/groups/{group_id}/members/sync":{"post":{"operationId":"sync_submit","summary":"Submit group member sync","description":"Submits a member sync payload for the specified group. Members in the payload will be queued for processing asynchronously. Returns HTTP 202 with the batch ID and acceptance timestamp.","tags":["sync"],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/GroupId"}}],"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupMemberSyncDetailResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupMemberSyncRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/groups/{group_id}/members/sync/{request_id}":{"get":{"operationId":"sync_get","summary":"Get group member sync request","description":"Retrieves a previously-submitted group member sync request by its `grpmsr_` ID. Returns the acceptance timestamp, completion timestamp (if processing has finished), and the per-member `results` once available. While processing is in flight, `completed_at` and `results` are `null`.","tags":["sync"],"parameters":[{"name":"group_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/GroupId"}},{"name":"request_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/RequestId"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupMemberSyncRequestDetailResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v2/members":{"get":{"operationId":"members_list","summary":"List members","description":"Retrieves a paginated list of the members in the authenticated organization's book — identity, contact details, and address. The book covers members reached through an employer in the organization's book as well as members of a group it owns. Supports free-text search (name, email, phone number, or exact member id).","tags":["Members"],"parameters":[{"name":"limit","in":"query","description":"Items per page (default: 20, max: 100)","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}},{"name":"search","in":"query","description":"Case-insensitive search across member name, email, and phone number; exact match on member id (prefixed or raw uuid)","required":false,"schema":{"$ref":"#/components/schemas/MemberSearch"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}":{"get":{"operationId":"members_get","summary":"Get member","description":"Retrieves a member's profile by ID — identity, demographics, address, contact details, tobacco status, and profile status. Access is scoped to the authenticated principal; a member not visible to the caller returns a 404.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","description":"Unique member identifier (mbr_*)","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}/dependents":{"get":{"operationId":"members_list_dependents","summary":"List member dependents","description":"Lists a member's active legal dependents — name, relationship, date of birth, age, and sex at birth. Access is scoped to the authenticated principal; a member not visible to the caller returns a 404.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberDependentsResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"post":{"operationId":"members_create_dependent","summary":"Create member dependent","description":"Saves a dependent (spouse or child) for a member. Saving does not enroll the dependent or change the member's coverage or coverage tier. If the member already has an active dependent matching this person, that relationship is reused and returned with a 200 and `created: false`; otherwise a new one is created with a 201 and `created: true`. In both cases the dependent's address is set to the one supplied; other details of a person Vitable already has on file are not changed. When a new dependent is created at exactly the member's address, Vitable also adds them to the member's household where it can; this never fails the request. The returned IDs identify the saved dependent. Social Security numbers are not accepted, and a body with an `ssn` field returns a 400. The caller must have write access to the target member, and API access tokens cannot save dependents. A member not visible to the caller returns a 404 before the body is validated. Business-rule failures return a 422 with `child_over_max_age` (a child must be under 26), `duplicate_active_spouse` (the member already has a different active spouse), `same_member`, `member_creation_failed`, or `legal_dependent_creation_failed`.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","description":"Unique member identifier (mbr_*)","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"The member already had this dependent; the existing relationship was returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedMemberDependentResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The caller is an access token; access tokens cannot save dependents.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"A business rule was violated: `child_over_max_age`, `duplicate_active_spouse`, `same_member`, `member_creation_failed`, or `legal_dependent_creation_failed`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMemberDependentRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}/employments":{"get":{"operationId":"members_list_employments","summary":"List member employments","description":"Lists a member's employment across every employer — the same employee record shape as the employer's employees list, plus the employer name. For an organization caller the rows are scoped to companies in that organization's book; a member (self/household) or Vitable Admin sees all employments. A member not visible to the caller returns a 404.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberEmploymentsResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}/enrollments":{"get":{"operationId":"members_list_enrollments","summary":"List member enrollments","description":"Lists a member's benefit enrollments across every employer — benefit type and product, employer, carrier, plan, tier, employee deduction, employer contribution and total premium, the individual enrollment coverage boundary (`coverage_end`), the separate pre-effective cancellation boundary (`cancelled_date`), and the distinct benefit plan-year boundary (`plan_year_coverage_end`) used to determine whether the plan year itself has ended, the date the enrollment record was created (`issued_date`, the value Ops labels Issued on, reported for every row whatever the member answered), the window the member could answer in -- which never opens before the enrollment was issued, so a row issued mid-open-enrollment starts its window on its issue date -- whether a qualifying life event would currently be required for reissue under the product/open-enrollment rule, enrollment/open-enrollment window, and two statuses: `election_status` (what the member answered) and `policy_status` (what became of their coverage, null unless they enrolled). Every row includes a stable enrollment ID and the exact employer and benefit plan-year IDs used to fetch that row's plan-year detail. The full list is returned across all states so the client derives active plans (effective and upcoming) and the enrollment history from those per-row statuses. For an organization caller the rows are scoped to companies in that organization's book; a member (self/household) or Vitable Admin sees all enrollments. A member not visible to the caller returns a 404.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberEnrollmentsResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}/household":{"get":{"operationId":"members_get_household","summary":"Get member household","description":"Lists a member's household as a per-participant table — the account holder plus each active household member, with name, relationship, member type, date of birth, and household-admin flag. Access is scoped to the authenticated principal; a member not visible to the caller (or with no household) returns a 404.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HouseholdMembersResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}/id-cards":{"get":{"operationId":"members_list_id_cards","summary":"List member ID cards","description":"Lists a member's benefit ID cards — card type (medical, dental, vision, or rx), employer, plan, provider network, claims payer, carrier contact details, and the disclaimers printed on the card. Medical, dental and vision cards come from the member's active digital benefit cards; the rx card from the member's Ventegra pharmacy benefit (omitted when the member has no free-medication coverage), which carries no plan, network, or carrier details. Access is scoped to the authenticated principal, and an organization caller sees only cards from employers in its book; a member not visible to the caller returns a 404.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberDigitalBenefitCardsResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}/qualifying-life-events":{"get":{"operationId":"members_list_qualifying_life_events","summary":"List member qualifying life events","description":"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.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","description":"Unique member identifier (mbr_*)","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"limit","in":"query","description":"Items per page (default: 20, max: 100)","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}},{"name":"status","in":"query","description":"Optional. Filter to a single QLE status; omit to return all statuses.","required":false,"schema":{"$ref":"#/components/schemas/Status"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberQualifyingLifeEventListResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"post":{"operationId":"members_create_qualifying_life_event","summary":"Create an approved member qualifying life event","description":"Creates an immediately approved qualifying life event. The caller must have write access to the target member, and API access tokens cannot create events. A member not visible to the caller returns a 404 before the body is validated. Describing the event is required when event_type is 'other'.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","description":"Unique member identifier (mbr_*)","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberQualifyingLifeEventDetailResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The caller is an access token; access tokens cannot create qualifying life events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMemberQualifyingLifeEventRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}/enrollment-audits":{"get":{"operationId":"members_list_member_enrollment_audits","summary":"List member enrollment history log","description":"Lists enrollment, termination, and reissue audits for enrollments visible to the caller. Entries are ordered newest first with stable paging. Organization callers see only enrollments in their book. A member not visible to the caller returns a 404 before pagination is validated.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","description":"Unique member identifier (mbr_*)","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"limit","in":"query","description":"Items per page (default: 20, max: 100)","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberEnrollmentAuditListResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}/ichra-payment-accounts":{"get":{"operationId":"members_list_member_ichra_payment_accounts","summary":"List member ICHRA payment accounts","description":"Lists a member's ICHRA payment accounts — one per employment that is enrolled in an automated-banking ICHRA benefit. Each row carries the deposit account number and routing number, the current balance, the most recent credit and its date, and whether a debit card has been provisioned. Card credentials are never included; they are revealed only through a card session. A member not visible to the caller returns a 404.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberIchraPaymentAccountsResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/members/{member_id}/ichra-payment-accounts/{payment_account_id}/card-sessions":{"post":{"operationId":"members_create_member_card_embed_session","summary":"Create member card reveal session","description":"Mints a single-use, short-lived session that lets the member reveal their debit card number, expiry, and security code inside a provider-hosted iframe. Load `embed_url` as the iframe source; the card is never returned to the caller or to the hosting page. Sessions are consumed on reveal and rate limited per member and per organization. Returns 404 when the member or account is not visible to the caller, 409 when no card has been provisioned, and 429 when the provider rate limit is exceeded.","tags":["Members"],"parameters":[{"name":"member_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/MemberId"}},{"name":"payment_account_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/PaymentAccountId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardEmbedSessionResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/qualifying-life-event-types":{"get":{"operationId":"members_list_qualifying_life_event_types","summary":"List qualifying life event types","description":"Returns every qualifying life event type that can be used to create a new event, in display order with human-readable labels and display-group headings. Historical-only values (such as `new_child`) are not included.","tags":["Members"],"parameters":[{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QualifyingLifeEventTypesResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/organizations":{"get":{"operationId":"organizations_list","summary":"List my organizations","description":"Lists the organizations the authenticated caller is an active member of (paginated), each with the role the caller holds in it. Returns an empty list when the caller belongs to no organizations.","tags":["Organizations"],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationsListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Bearer token missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/plans":{"get":{"operationId":"plans_list","summary":"List organization plans","description":"Returns a paginated list of benefit plans linked to the authenticated organization.","tags":["Plans"],"parameters":[{"name":"limit","in":"query","description":"Items per page (default: 20, max: 100)","required":false,"schema":{"$ref":"#/components/schemas/Limit","default":20}},{"name":"page","in":"query","description":"Page number (default: 1)","required":false,"schema":{"$ref":"#/components/schemas/Page","default":1}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanListResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/carrier-applications/{carrier_application_id}":{"get":{"operationId":"carrierApplications_get_carrier_application","summary":"Get a carrier application","description":"Returns application details, including finalized carrier-question responses and applicant information and the latest recorded carrier statuses. Unknown applications and applications outside the caller's access return 404.","tags":["carrierApplications"],"parameters":[{"name":"carrier_application_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/CarrierApplicationId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierApplicationDetailResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/carrier-applications/{carrier_application_id}/agent-of-record":{"put":{"operationId":"carrierApplications_change_carrier_application_agent_of_record","summary":"Change Carrier Application Agent Of Record","description":"Changes the agent of record on a carrier application without moving its assignee. The agent must be active and carry a complete provider identity. Partner callers may choose an agent at the application's current agency or Vitable's default agent; Vitable staff may choose any agent. `status` is `pending` while HealthSherpa confirms the change on an application it already holds, and `confirmed` otherwise. HealthSherpa applications accept a change only before submission; direct-to-carrier applications also accept one after submission, until the application is cancelled or coverage ends. The queue's `authorized_actions` advertises `agent_of_record` on exactly the rows this route would accept.","tags":["carrierApplications"],"parameters":[{"name":"carrier_application_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/CarrierApplicationId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierApplicationAssignmentResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeCarrierApplicationAgentOfRecordRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/carrier-applications/{carrier_application_id}/assignment":{"post":{"operationId":"carrierApplications_assign_carrier_application","summary":"Assign Carrier Application","description":"Routes a carrier application to an enrollment agent, deriving the enrollment channel and the agent of record from that agent's agency. `status` is `confirmed` when the new route is authoritative and `pending` while it awaits provider confirmation. Assignment is refused once processing has begun or the application has been submitted, cancelled or reached terminal coverage; the queue's `authorized_actions` advertises `assign` on exactly the rows this route would accept. Authorized Partner callers may assign to an active agent within the current agency. Vitable staff may also assign across agencies.","tags":["carrierApplications"],"parameters":[{"name":"carrier_application_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/CarrierApplicationId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierApplicationAssignmentResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Unprocessable Entity - Business rule or domain invariant violated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignCarrierApplicationRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/carrier-applications/{carrier_application_id}/deeplink":{"get":{"operationId":"carrierApplications_get_carrier_application_deeplink","summary":"Open the provider-hosted enrollment session","description":"Returns a HealthSherpa-hosted enrollment session for a deeplink-routed application, for the authorized agent to open in their own browser. Available only while `authorized_actions` contains the `deeplink` rel.\n\nEach call opens a new session, so request one per launch rather than storing the URL. `expires_at` is null when the provider does not state an expiry; that means unknown, not unlimited. Nothing on the application changes until HealthSherpa reports the hosted application back, so keep polling the application details rather than assuming it launched.","tags":["carrierApplications"],"parameters":[{"name":"carrier_application_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/CarrierApplicationId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierApplicationDeeplinkResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict with the current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/carrier-applications/{carrier_application_id}/payment-redirect":{"get":{"operationId":"carrierApplications_get_carrier_application_payment_redirect","summary":"Get the carrier payment page","description":"Returns the URL and form fields needed to open the carrier's payment page for this application. Submit the fields using the returned method. Check the application details for payment updates.","tags":["carrierApplications"],"parameters":[{"name":"carrier_application_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/CarrierApplicationId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierApplicationPaymentRedirectResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict with the current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/carrier-applications/{carrier_application_id}/status-updates":{"post":{"operationId":"carrierApplications_record_carrier_application_status_update","summary":"Record a carrier application status update","description":"Records the latest status the carrier reported for an application completed directly with the carrier, and returns the updated application. Include only the statuses that changed; sending the same statuses with a later `observed_at` confirms they are still current. Returns 409 when the application doesn't accept status updates, the update conflicts with its current status, or a more recent `observed_at` has already been recorded, and 404 when the application doesn't exist or isn't accessible.","tags":["carrierApplications"],"parameters":[{"name":"carrier_application_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/CarrierApplicationId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierApplicationDetailResponse"}}}},"400":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict with the current resource state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordCarrierApplicationStatusUpdateRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/carrier-applications/carriers":{"get":{"operationId":"carrierApplications_list_carrier_application_carriers","summary":"List carrier application carriers","description":"Returns every carrier in the caller's carrier-application queue, once per carrier. Spelling variants of one carrier's name share a `key` and are listed under the most-used spelling. Pass a `key` as `carrier_key` to `GET /v1/carrier-applications` to filter the queue to that carrier. The list reflects the caller's access only, not any other filter, and is ordered by name.","tags":["carrierApplications"],"parameters":[{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CarrierApplicationCarriersResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/organization-domains":{"get":{"operationId":"organizationDomains_list_organization_domains","summary":"List the organization's email domains","description":"Every domain the authenticated organization claims, verified or pending. A verified domain auto-joins any new user whose identity-provider-verified email is at that exact domain; a pending claim grants nothing until Vitable confirms ownership.","tags":["organizationDomains"],"parameters":[{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationDomainsResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"post":{"operationId":"organizationDomains_request_organization_domain","summary":"Request an email domain","description":"Records a pending claim on a domain for Vitable to verify. The claim grants nothing until then — it does not auto-join anyone and does not reserve the domain against another organization. Requesting a domain the organization already claims returns that claim unchanged rather than creating a second one.","tags":["organizationDomains"],"parameters":[{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationDomainResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`organization_domain_already_claimed` — another organization already holds this domain verified. A domain another organization merely has pending does not conflict.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestOrganizationDomainRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/organization-domains/{organization_domain_id}":{"delete":{"operationId":"organizationDomains_remove_organization_domain","summary":"Remove a claimed email domain","description":"Gives up a domain claim, pending or verified. Users already in the organization keep their membership; the domain simply stops auto-joining anyone and becomes available for another organization to claim. Only the authenticated organization's own claims can be removed; any other id is reported as not found.","tags":["organizationDomains"],"parameters":[{"name":"organization_domain_id","in":"path","description":"Unique organization domain claim identifier (orgdom_*)","required":true,"schema":{"$ref":"#/components/schemas/OrganizationDomainId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"204":{"description":"Domain claim removed.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"`organization_domain_not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict - Resource already exists or conflicts with current state","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/organization-user-invitations":{"get":{"operationId":"organizationUserInvitations_list_organization_user_invitations","summary":"List pending organization-user invitations","description":"Invitations for the authenticated organization that have not yet been accepted, expired or revoked. Held by the identity provider, not stored locally.","tags":["organizationUserInvitations"],"parameters":[{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationUserInvitationsResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`organization_not_federated` — the organization has no identity-provider organization yet (it is provisioned asynchronously; retry shortly).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]},"post":{"operationId":"organizationUserInvitations_invite_organization_user","summary":"Invite a user to the organization","description":"Invites an email address to join the authenticated organization. The identity provider sends the email and hosts acceptance; the membership is written on the invitee's first sign-in. Any email domain is accepted, which is the only way to add a teammate whose domain the organization does not claim.","tags":["organizationUserInvitations"],"parameters":[{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationUserInvitationResponse"}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found - The requested resource does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`organization_user_already_invited` — a pending invitation for this address already exists; or `organization_not_federated` — see above.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteOrganizationUserRequest"}}}},"security":[{"APIKeyAuth":[]}]}},"/v1/organization-user-invitations/{invitation_id}":{"delete":{"operationId":"organizationUserInvitations_revoke_organization_user_invitation","summary":"Revoke a pending invitation","description":"Revokes an invitation that has not been accepted. Only invitations belonging to the authenticated organization can be revoked; any other id is reported as not found.","tags":["organizationUserInvitations"],"parameters":[{"name":"invitation_id","in":"path","description":"Identity-provider invitation id","required":true,"schema":{"$ref":"#/components/schemas/InvitationId"}},{"name":"X-Vitable-Organization","in":"header","description":"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`.","required":false,"schema":{"$ref":"#/components/schemas/XVitableOrganization"}}],"responses":{"204":{"description":"Invitation revoked.","content":{"application/json":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"Bad Request - Invalid input or validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden - Insufficient permissions for this resource","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"`organization_invitation_not_found`","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"`organization_not_federated` — the organization has no identity-provider organization yet (it is provisioned asynchronously; retry shortly).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error - An unexpected error occurred","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Bad Gateway - External service error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"APIKeyAuth":[]}]}}},"tags":[{"name":"Auth"},{"name":"Employees"},{"name":"Employers"},{"name":"Enrollments"},{"name":"webhookEvents"},{"name":"Groups"},{"name":"sync"},{"name":"Members"},{"name":"Organizations"},{"name":"Plans"},{"name":"carrierApplications"},{"name":"organizationDomains"},{"name":"organizationUserInvitations"}],"servers":[{"url":"https://api.vitablehealth.com","description":"Production"},{"url":"https://api.uat.vitablehealth.com","description":"UAT"}],"components":{"schemas":{"GrantType":{"type":"string","enum":["client_credentials"],"description":"* `client_credentials` - client_credentials","title":"GrantType"},"BoundEntityType":{"type":"string","enum":["employer","employee"],"description":"* `employer` - employer\n* `employee` - employee","title":"BoundEntityType"},"BoundEntity":{"type":"object","properties":{"id":{"type":"string","description":"Prefixed entity ID to bind the token to (empr_* for employer, empl_* for employee)"},"type":{"$ref":"#/components/schemas/BoundEntityType","description":"Type of entity: 'employer' or 'employee'\n\n* `employer` - employer\n* `employee` - employee"}},"required":["id","type"],"title":"BoundEntity"},"IssueAccessTokenRequest":{"type":"object","properties":{"grant_type":{"$ref":"#/components/schemas/GrantType","description":"Token issuance flow. Currently only 'client_credentials' supported.\n\n* `client_credentials` - client_credentials"},"bound_entity":{"oneOf":[{"$ref":"#/components/schemas/BoundEntity"},{"type":"null"}],"description":"Optional entity to bind the token to for scoped access"}},"required":["grant_type"],"title":"IssueAccessTokenRequest"},"BoundEntityResponse":{"type":"object","properties":{"id":{"type":"string","description":"Prefixed entity ID the token is bound to (empr_* or empl_*)"},"type":{"$ref":"#/components/schemas/BoundEntityType","description":"Type of bound entity\n\n* `employer` - employer\n* `employee` - employee"}},"required":["id","type"],"title":"BoundEntityResponse"},"AccessTokenResponse":{"type":"object","properties":{"access_token":{"type":"string","description":"The issued access token (vit_at_*)"},"token_type":{"type":"string","description":"Token type, always 'Bearer'"},"expires_in":{"type":"integer","description":"Token lifetime in seconds"},"bound_entity":{"oneOf":[{"$ref":"#/components/schemas/BoundEntityResponse"},{"type":"null"}],"description":"Entity the token is bound to, if any"}},"required":["access_token","token_type","expires_in"],"title":"AccessTokenResponse"},"ErrorResponse":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the error occurred"},"message":{"type":"string","description":"Human-readable error message"},"error":{"type":"string","description":"Error message (same as message, for backwards compatibility)"},"app_error_code":{"type":["string","null"],"description":"Application-specific error code for programmatic handling"},"trace_id":{"type":"string","format":"uuid","description":"Unique trace ID for debugging and support requests"}},"required":["timestamp","message","error","trace_id"],"title":"ErrorResponse"},"EmployeeId":{"type":"string","description":"Unique employee identifier (empl_*)","title":"EmployeeId"},"EmployeeClass":{"type":"string","enum":["Full Time","Part Time","Temporary","Intern","Seasonal","Individual Contractor"],"description":"* `Full Time` - Full Time\n* `Part Time` - Part Time\n* `Temporary` - Temporary\n* `Intern` - Intern\n* `Seasonal` - Seasonal\n* `Individual Contractor` - Individual Contractor","title":"EmployeeClass"},"EmployeeStatus":{"type":"string","enum":["active","terminated"],"title":"EmployeeStatus"},"CompensationType":{"type":"string","enum":["Salary","Hourly"],"description":"* `Salary` - Salary\n* `Hourly` - Hourly","title":"CompensationType"},"EmployeeAddress":{"type":"object","properties":{"address_line_1":{"type":"string","description":"Primary street address"},"address_line_2":{"type":["string","null"],"description":"Secondary street address (apt, suite, etc.)"},"city":{"type":"string","description":"City name"},"state":{"type":"string","description":"Two-letter state code (e.g., CA, NY)"},"zipcode":{"type":"string","description":"ZIP code (5 or 9 digit)"}},"required":["address_line_1","city","state","zipcode"],"title":"EmployeeAddress"},"TaxClassification":{"type":"string","enum":["Unknown","Pre-tax","Post-tax"],"description":"* `Unknown` - Unknown\n* `Pre-tax` - Pre Tax\n* `Post-tax` - Post Tax","title":"TaxClassification"},"DeductionFrequency":{"type":"string","enum":["weekly","bi_weekly","semi_monthly","monthly"],"description":"* `weekly` - Weekly\n* `bi_weekly` - Bi Weekly\n* `semi_monthly` - Semi Monthly\n* `monthly` - Monthly","title":"DeductionFrequency"},"DeductionDetail":{"type":"object","properties":{"deduction_category":{"type":["string","null"],"description":"Deduction category (reserved for future use)"},"deduction_amount_in_cents":{"type":"integer","description":"Employee deduction amount in cents"},"tax_classification":{"$ref":"#/components/schemas/TaxClassification","description":"Tax classification: Pre-tax, Post-tax, or Unknown\n\n* `Unknown` - Unknown\n* `Pre-tax` - Pre Tax\n* `Post-tax` - Post Tax"},"frequency":{"$ref":"#/components/schemas/DeductionFrequency","description":"Deduction frequency\n\n* `weekly` - Weekly\n* `bi_weekly` - Bi Weekly\n* `semi_monthly` - Semi Monthly\n* `monthly` - Monthly"},"benefit_name":{"type":"string","description":"Name of the benefit plan"},"period_start_date":{"type":"string","format":"date","description":"Period start date (YYYY-MM-DD)"},"period_end_date":{"type":"string","format":"date","description":"Period end date (YYYY-MM-DD)"}},"required":["deduction_category","deduction_amount_in_cents","tax_classification","frequency","benefit_name","period_start_date","period_end_date"],"title":"DeductionDetail"},"Employee":{"type":"object","properties":{"id":{"type":"string","description":"Unique employee identifier with 'empl_' prefix"},"member_id":{"type":"string","description":"Unique member identifier with 'mbr_' prefix"},"employer_id":{"type":"string","description":"Unique identifier of the employer this employment is with (empr_*)"},"reference_id":{"type":["string","null"],"description":"Partner-assigned reference ID for the employee"},"employer_name":{"type":["string","null"],"description":"Name of the employer this employment is with"},"first_name":{"type":"string","description":"Employee's legal first name"},"last_name":{"type":"string","description":"Employee's legal last name"},"suffix":{"type":["string","null"],"description":"Name suffix (e.g., Jr., Sr., III)"},"email":{"type":"string","format":"email","description":"Email address"},"date_of_birth":{"type":"string","format":"date","description":"Date of birth (YYYY-MM-DD)"},"gender":{"type":["string","null"],"description":"Gender identity, if provided"},"phone":{"type":["string","null"],"description":"Phone number (10-digit US domestic string)"},"employee_class":{"$ref":"#/components/schemas/EmployeeClass","description":"Employment classification affecting benefit eligibility\n\n* `Full Time` - Full Time\n* `Part Time` - Part Time\n* `Temporary` - Temporary\n* `Intern` - Intern\n* `Seasonal` - Seasonal\n* `Individual Contractor` - Individual Contractor"},"status":{"$ref":"#/components/schemas/EmployeeStatus","description":"Employee status (active or terminated)"},"start_date":{"type":"string","format":"date","description":"Employee's start date with the employer"},"classification_effective_date":{"type":"string","format":"date","description":"Date the employee's current classification took effect"},"compensation_type":{"oneOf":[{"$ref":"#/components/schemas/CompensationType"},{"type":"null"}],"description":"Employee's compensation type"},"compensation_type_effective_date":{"type":"string","format":"date","description":"Date the employee's current compensation type took effect"},"termination_date":{"type":["string","null"],"format":"date","description":"Employee's termination date, if terminated"},"address":{"oneOf":[{"$ref":"#/components/schemas/EmployeeAddress"},{"type":"null"}],"description":"Employee's residential address"},"deductions":{"type":"array","items":{"$ref":"#/components/schemas/DeductionDetail"},"description":"Payroll deductions from the most recent statement period. Replaced when a new statement is generated."},"created_at":{"type":"string","format":"date-time","description":"Timestamp when the employee was created"},"updated_at":{"type":"string","format":"date-time","description":"Timestamp when the employee was last updated"}},"required":["id","member_id","employer_id","first_name","last_name","email","date_of_birth","phone","employee_class","status","start_date","classification_effective_date","compensation_type","compensation_type_effective_date","deductions","created_at","updated_at"],"title":"Employee"},"EmployeeResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Employee","description":"The employee record."}},"required":["data"],"description":"Response containing a single employee resource.","title":"EmployeeResponse"},"Gender":{"type":"string","enum":["Male","Female","Transgender","Non-binary","Prefer not to respond"],"description":"* `Male` - Male\n* `Female` - Female\n* `Transgender` - Transgender\n* `Non-binary` - Non-binary\n* `Prefer not to respond` - Prefer not to respond","title":"Gender"},"EmployeeAddressInput":{"type":"object","properties":{"street_1":{"type":"string","description":"Primary street address"},"street_2":{"type":["string","null"],"description":"Secondary street address"},"city":{"type":"string","description":"City name"},"state":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter state code"},"zip_code":{"type":"string","description":"ZIP code"},"country":{"type":"string","default":"US","description":"Country code. Only US addresses are supported; the value is ignored."}},"required":["street_1","city","state","zip_code"],"title":"EmployeeAddressInput"},"PatchedUpdateEmployeeRequest":{"type":"object","properties":{"email":{"type":["string","null"],"format":"email","description":"Email address"},"phone":{"type":["string","null"],"description":"10-digit US phone number; formatting characters and a leading 1 are ignored"},"gender":{"oneOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}],"description":"Gender identity\n\n* `Male` - Male\n* `Female` - Female\n* `Transgender` - Transgender\n* `Non-binary` - Non-binary\n* `Prefer not to respond` - Prefer not to respond"},"address":{"oneOf":[{"$ref":"#/components/schemas/EmployeeAddressInput"},{"type":"null"}],"description":"Employee's residential address"},"employee_class":{"oneOf":[{"$ref":"#/components/schemas/EmployeeClass"},{"type":"null"}],"description":"Employment classification\n\n* `Full Time` - Full Time\n* `Part Time` - Part Time\n* `Temporary` - Temporary\n* `Intern` - Intern\n* `Seasonal` - Seasonal\n* `Individual Contractor` - Individual Contractor"},"start_date":{"type":["string","null"],"format":"date","description":"Employment start date"},"compensation_type":{"oneOf":[{"$ref":"#/components/schemas/CompensationType"},{"type":"null"}],"description":"Employee compensation type\n\n* `Salary` - Salary\n* `Hourly` - Hourly"},"effective_date":{"type":"string","format":"date","description":"Past or present date applied to each tracked employment field included in this request"}},"required":["effective_date"],"title":"PatchedUpdateEmployeeRequest"},"Limit":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Items per page (default: 20, max: 100)","title":"Limit"},"Page":{"type":"integer","minimum":1,"default":1,"description":"Page number (default: 1)","title":"Page"},"ProductCode":{"type":"string","enum":["EBA","VPC","VPC_CORE","MEC","MEC2","MEC_PLUS","MVP","MVP2","MVPSL","MVPSL2","VD","VV","ICHRA","ICHRA_PREMIUM_PLUS","ICHRA_REIMBURSEMENT_ONLY"],"description":"* `EBA` - Eba Mec\n* `VPC` - Vpc Enhanced\n* `VPC_CORE` - Vpc Core\n* `MEC` - Vpc Mec\n* `MEC2` - Mec2\n* `MEC_PLUS` - Mec Plus\n* `MVP` - Mvp\n* `MVP2` - Mvp2\n* `MVPSL` - Mvpsl\n* `MVPSL2` - Mvpsl2\n* `VD` - Dental\n* `VV` - Vision\n* `ICHRA` - Ichra\n* `ICHRA_PREMIUM_PLUS` - Ichra Premium Plus\n* `ICHRA_REIMBURSEMENT_ONLY` - Ichra Reimbursement Only","title":"ProductCode"},"Category":{"type":"string","enum":["Medical","Dental","Vision","Hospital"],"description":"* `Medical` - Medical\n* `Dental` - Dental\n* `Vision` - Vision\n* `Hospital` - Hospital","title":"Category"},"BenefitSummary":{"type":"object","properties":{"id":{"type":"string","description":"Benefit product ID (bprd_*)"},"name":{"type":"string","description":"Display name of the benefit product"},"product_code":{"$ref":"#/components/schemas/ProductCode","description":"Programmatic product identifier\n\n* `EBA` - Eba Mec\n* `VPC` - Vpc Enhanced\n* `VPC_CORE` - Vpc Core\n* `MEC` - Vpc Mec\n* `MEC2` - Mec2\n* `MEC_PLUS` - Mec Plus\n* `MVP` - Mvp\n* `MVP2` - Mvp2\n* `MVPSL` - Mvpsl\n* `MVPSL2` - Mvpsl2\n* `VD` - Dental\n* `VV` - Vision\n* `ICHRA` - Ichra\n* `ICHRA_PREMIUM_PLUS` - Ichra Premium Plus\n* `ICHRA_REIMBURSEMENT_ONLY` - Ichra Reimbursement Only"},"category":{"$ref":"#/components/schemas/Category","description":"High-level benefit grouping\n\n* `Medical` - Medical\n* `Dental` - Dental\n* `Vision` - Vision\n* `Hospital` - Hospital"}},"required":["id","name","product_code","category"],"title":"BenefitSummary"},"EnrollmentStatus":{"type":"string","enum":["pending","enrolled","waived","inactive"],"description":"* `pending` - Pending\n* `enrolled` - Enrolled\n* `waived` - Waived\n* `inactive` - Inactive","title":"EnrollmentStatus"},"Enrollment":{"type":"object","properties":{"id":{"type":"string","description":"Unique enrollment identifier (enrl_*)"},"employee_id":{"type":"string","description":"Employee ID (empl_*)"},"employer_id":{"type":"string","description":"Employer ID (empr_*)"},"benefit":{"$ref":"#/components/schemas/BenefitSummary","description":"Nested benefit product summary"},"status":{"$ref":"#/components/schemas/EnrollmentStatus","description":"Enrollment status\n\n* `pending` - Pending\n* `enrolled` - Enrolled\n* `waived` - Waived\n* `inactive` - Inactive"},"coverage_start":{"type":"string","format":"date","description":"Coverage period start date"},"coverage_end":{"type":["string","null"],"format":"date","description":"Coverage period end date"},"employee_deduction_in_cents":{"type":["integer","null"],"description":"Employee monthly payroll deduction in cents"},"employer_contribution_in_cents":{"type":["integer","null"],"description":"Employer monthly contribution in cents"},"answered_at":{"type":["string","null"],"format":"date-time","description":"When the employee enrolled or waived"},"terminated_at":{"type":["string","null"],"format":"date-time","description":"When coverage was terminated"},"created_at":{"type":"string","format":"date-time","description":"When the enrollment was created"},"updated_at":{"type":"string","format":"date-time","description":"When the enrollment was last updated"}},"required":["id","employee_id","employer_id","benefit","status","coverage_start","coverage_end","employee_deduction_in_cents","employer_contribution_in_cents","answered_at","terminated_at","created_at","updated_at"],"description":"One enrollment as it appears in a list row.","title":"Enrollment"},"Pagination":{"type":"object","properties":{"page":{"type":"integer","description":"Current page number"},"limit":{"type":"integer","description":"Items per page"},"total":{"type":"integer","description":"Total number of items"},"total_pages":{"type":"integer","description":"Total number of pages"}},"required":["page","limit","total","total_pages"],"description":"Pagination metadata for list responses.","title":"Pagination"},"EnrollmentListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Enrollment"},"description":"This page of enrollments."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing enrollment resources.","title":"EnrollmentListResponse"},"EmployerId":{"type":"string","description":"Unique employer identifier (empr_*)","title":"EmployerId"},"XVitableOrganization":{"type":"string","description":"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`.","title":"XVitableOrganization"},"PreferredLanguage":{"type":"string","enum":["en","es","zh","ru","sw","th"],"description":"* `en` - English\n* `es` - Spanish\n* `zh` - Chinese\n* `ru` - Russian\n* `sw` - Swahili\n* `th` - Thai","title":"PreferredLanguage"},"NameSuffix":{"type":"string","enum":["Sr","Jr","I","II","III","IV","V"],"description":"* `Sr` - Sr\n* `Jr` - Jr\n* `I` - I\n* `II` - II\n* `III` - III\n* `IV` - IV\n* `V` - V","title":"NameSuffix"},"SexAtBirth":{"type":"string","enum":["Male","Female","Other","Unknown"],"description":"* `Male` - Male\n* `Female` - Female\n* `Other` - Other\n* `Unknown` - Unknown","title":"SexAtBirth"},"CreateEmployeeRequest":{"type":"object","properties":{"preferred_language":{"oneOf":[{"$ref":"#/components/schemas/PreferredLanguage"},{"type":"null"}],"description":"Preferred language code\n\n* `en` - English\n* `es` - Spanish\n* `zh` - Chinese\n* `ru` - Russian\n* `sw` - Swahili\n* `th` - Thai"},"first_name":{"type":"string","minLength":1,"maxLength":100,"description":"Employee's legal first name"},"middle_name":{"type":["string","null"],"maxLength":100,"description":"Employee's legal middle name"},"last_name":{"type":"string","minLength":1,"maxLength":100,"description":"Employee's legal last name"},"suffix":{"oneOf":[{"$ref":"#/components/schemas/NameSuffix"},{"type":"null"}],"description":"Name suffix\n\n* `Sr` - Sr\n* `Jr` - Jr\n* `I` - I\n* `II` - II\n* `III` - III\n* `IV` - IV\n* `V` - V"},"sex_at_birth":{"oneOf":[{"$ref":"#/components/schemas/SexAtBirth"},{"type":"null"}],"description":"Sex assigned at birth\n\n* `Male` - Male\n* `Female` - Female\n* `Other` - Other\n* `Unknown` - Unknown"},"date_of_birth":{"type":"string","format":"date","description":"Date of birth; the employee must be at least 18"},"email":{"type":"string","format":"email","description":"Email for the employee's Vitable account. It cannot belong to another person."},"phone":{"type":["string","null"],"description":"10-digit US phone number; formatting characters and a leading 1 are ignored. Optional, as in the census sync, because partners do not always hold a phone for every employee."},"address":{"$ref":"#/components/schemas/EmployeeAddressInput","description":"Employee's residential address"},"employee_class":{"$ref":"#/components/schemas/EmployeeClass","description":"Employment classification\n\n* `Full Time` - Full Time\n* `Part Time` - Part Time\n* `Temporary` - Temporary\n* `Intern` - Intern\n* `Seasonal` - Seasonal\n* `Individual Contractor` - Individual Contractor"},"compensation_type":{"$ref":"#/components/schemas/CompensationType","description":"Employee compensation type\n\n* `Salary` - Salary\n* `Hourly` - Hourly"},"start_date":{"type":"string","format":"date","description":"Employment start date; must be on or before today in US Eastern time"}},"required":["first_name","last_name","date_of_birth","email","address","employee_class","compensation_type","start_date"],"title":"CreateEmployeeRequest"},"BenefitFamilyParamItems":{"type":"string","enum":["mec","mvp","ichra","vpc","dental","vision"],"description":"* `mec` - mec\n* `mvp` - mvp\n* `ichra` - ichra\n* `vpc` - vpc\n* `dental` - dental\n* `vision` - vision","title":"BenefitFamilyParamItems"},"BenefitFamilyParam":{"type":"array","items":{"$ref":"#/components/schemas/BenefitFamilyParamItems"},"description":"Filter to employers with at least one active benefit in these families.","title":"BenefitFamilyParam"},"BenefitLifecycleStageItems":{"type":"string","enum":["open_enrollment","renewal","active","onboarding","cancelled"],"description":"* `open_enrollment` - open_enrollment\n* `renewal` - renewal\n* `active` - active\n* `onboarding` - onboarding\n* `cancelled` - cancelled","title":"BenefitLifecycleStageItems"},"BenefitLifecycleStage":{"type":"array","items":{"$ref":"#/components/schemas/BenefitLifecycleStageItems"},"description":"Filter to employers in one of these computed benefit-lifecycle stages.","title":"BenefitLifecycleStage"},"HrisProvider":{"type":"array","items":{"type":"string"},"description":"Filter to employers whose HRIS connection is with one of these payroll providers (e.g. `ADP RUN`). Matched case-insensitively; free text, so read the available values from the HRIS-providers endpoint rather than assuming a fixed set.","title":"HrisProvider"},"HrisStatusItems":{"type":"string","enum":["Pending","Active","Inactive","Paused","Terminated"],"description":"* `Pending` - Pending\n* `Active` - Active\n* `Inactive` - Inactive\n* `Paused` - Paused\n* `Terminated` - Terminated","title":"HrisStatusItems"},"HrisStatus":{"type":"array","items":{"$ref":"#/components/schemas/HrisStatusItems"},"description":"Filter to employers whose HRIS connection is in one of these statuses.","title":"HrisStatus"},"IncludeCancelled":{"type":"boolean","default":false,"description":"Include cancelled employers (hidden by default unless their stage is explicitly requested).","title":"IncludeCancelled"},"Search":{"type":"string","minLength":1,"description":"Employer filter. Matches the display name or the legal name case-insensitively as a substring, or one of these exactly: the EIN (with or without its dash), the employer id, or the contact email of one of the employer's non-disabled admins.","title":"Search"},"Address":{"type":"object","properties":{"address_line_1":{"type":"string","description":"Primary street address."},"address_line_2":{"type":["string","null"],"description":"Secondary street address (apt, suite, etc.)."},"city":{"type":"string","description":"City name."},"state":{"type":"string","description":"Two-letter state code (e.g. `CA`, `NY`)."},"zipcode":{"type":"string","description":"ZIP code (5 or 9 digit)."}},"required":["address_line_1","address_line_2","city","state","zipcode"],"description":"Shared read serializer for a postal address on public API responses.\n\nOne definition for the address block every public resource emits (employer, employee, …), so the\n5-field shape isn't hand-rolled per endpoint. Read-only: it renders an already-built address\nvalue object (e.g. ``AddressDVO``) whose attributes map 1:1 to these fields.","title":"Address"},"_EnrollmentRateSummary":{"type":"object","properties":{"eligible":{"type":"integer","description":"Employees eligible for at least one active benefit."},"enrolled":{"type":"integer","description":"Employees enrolled in at least one active benefit."},"percentage":{"type":"integer","description":"``enrolled / eligible`` as a whole-number percent (0 when none eligible)."}},"required":["eligible","enrolled","percentage"],"title":"_EnrollmentRateSummary"},"_HrisStatus":{"type":"object","properties":{"provider":{"type":"string","description":"Id of the HRIS/payroll provider the employer is connected to (e.g. `paylocity`)."},"provider_label":{"type":"string","description":"Display name of that provider (e.g. `Paylocity`)."},"status":{"type":"string","description":"Connection status reported by the integration."}},"required":["provider","provider_label","status"],"title":"_HrisStatus"},"_BenefitLifecycleStage":{"type":"object","properties":{"stage":{"type":"string","description":"Computed employer benefit-lifecycle stage: `open_enrollment`, `renewal`, `active`, `onboarding`, or `cancelled`."},"as_of_date":{"type":["string","null"],"format":"date","description":"Anchor date for the stage (e.g. renewal date); null when not applicable."}},"required":["stage","as_of_date"],"title":"_BenefitLifecycleStage"},"OrganizationEmployer":{"type":"object","properties":{"employer_id":{"type":"string","description":"Prefixed employer identifier (`empr_<base64-encoded-uuid>`)."},"organization_id":{"type":["string","null"],"description":"ID of the parent organization (`org_*`), or null when unknown."},"reference_id":{"type":["string","null"],"description":"The organization's own reference id for this employer, or null when none was assigned."},"name":{"type":"string","description":"Employer name."},"legal_name":{"type":["string","null"],"description":"Legal business name for compliance and tax purposes."},"ein":{"type":["string","null"],"description":"Employer Identification Number (masked in responses)."},"email":{"type":["string","null"],"format":"email","description":"Email address for billing and communications."},"phone_number":{"type":["string","null"],"description":"Employer phone number."},"active":{"type":"boolean","description":"Whether the employer is currently active in the system."},"address":{"$ref":"#/components/schemas/Address","description":"Employer's primary address."},"created_at":{"type":"string","format":"date-time","description":"Timestamp when the employer was created."},"updated_at":{"type":"string","format":"date-time","description":"Timestamp when the employer was last updated."},"enrollment_rate_summary":{"$ref":"#/components/schemas/_EnrollmentRateSummary","description":"Enrolled/eligible employees roll-up."},"benefit_families":{"type":"array","items":{"type":"string"},"description":"Distinct benefit-family tags across the employer's active benefits (e.g. `MEC`, `ICHRA`, `VPC`)."},"hris_status":{"oneOf":[{"$ref":"#/components/schemas/_HrisStatus"},{"type":"null"}],"description":"HRIS connection, or null when the employer has none."},"benefit_lifecycle_stage":{"$ref":"#/components/schemas/_BenefitLifecycleStage","description":"Where the employer currently sits in the benefits setup lifecycle."}},"required":["employer_id","organization_id","reference_id","name","legal_name","ein","email","phone_number","active","address","created_at","updated_at","enrollment_rate_summary","benefit_families","hris_status","benefit_lifecycle_stage"],"description":"One employer row of the organization's book (list projection).\n\nCarries the enriched/computed columns (enrollment roll-up, benefit-family tags, HRIS connection,\nbenefit-lifecycle stage) alongside the flat CRM fields of the underlying employer (legal name,\nEIN, contact, address, timestamps) for parity with the legacy ``Employer`` contract.","title":"OrganizationEmployer"},"OrganizationEmployerListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationEmployer"},"description":"This page of employers in the organization."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing organization employer resources.","title":"OrganizationEmployerListResponse"},"EmployerAddressInput":{"type":"object","properties":{"address_line_1":{"type":"string","description":"Primary street address"},"address_line_2":{"type":["string","null"],"description":"Secondary street address"},"city":{"type":"string","description":"City name"},"state":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter state code"},"zipcode":{"type":"string","description":"ZIP code"}},"required":["address_line_1","city","state","zipcode"],"title":"EmployerAddressInput"},"CreateEmployerRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255,"description":"Employer display name"},"legal_name":{"type":"string","minLength":1,"maxLength":255,"description":"Legal business name"},"ein":{"type":"string","minLength":10,"maxLength":10,"description":"Employer Identification Number (format: XX-XXXXXXX)"},"email":{"type":"string","format":"email","description":"Email address for billing and communications"},"address":{"$ref":"#/components/schemas/EmployerAddressInput","description":"Employer address"},"phone_number":{"type":["string","null"],"description":"Employer phone number (10-digit US format, e.g. 5551234567)"},"reference_id":{"type":["string","null"],"maxLength":255,"description":"External reference ID for this employer"}},"required":["name","legal_name","ein","email","address"],"title":"CreateEmployerRequest"},"EmployerAddress":{"type":"object","properties":{"address_line_1":{"type":"string","description":"Primary street address"},"address_line_2":{"type":["string","null"],"description":"Secondary street address (apt, suite, etc.)"},"city":{"type":"string","description":"City name"},"state":{"type":"string","description":"Two-letter state code (e.g., CA, NY)"},"zipcode":{"type":"string","description":"ZIP code (5 or 9 digit)"}},"required":["address_line_1","city","state","zipcode"],"description":"Nested address within EmployerSerializer.","title":"EmployerAddress"},"EmployerContact":{"type":"object","properties":{"email":{"type":["string","null"],"format":"email","description":"Primary contact email"},"phone":{"type":["string","null"],"description":"Primary contact phone, or null"}},"required":["email","phone"],"description":"Primary company-admin contact (email + phone; company admins have no person name).","title":"EmployerContact"},"Employer":{"type":"object","properties":{"id":{"type":"string","description":"Unique employer identifier with 'empr_' prefix"},"organization_id":{"type":["string","null"],"description":"ID of the parent organization (org_*)"},"name":{"type":"string","description":"Display name of the employer"},"legal_name":{"type":"string","description":"Legal business name for compliance and tax purposes"},"ein":{"type":["string","null"],"description":"Employer Identification Number (format: XX-XXXXXXX)"},"reference_id":{"type":["string","null"],"description":"Partner-assigned reference ID for the employer"},"email":{"type":["string","null"],"format":"email","description":"Email address for billing and communications"},"phone_number":{"type":["string","null"],"description":"Employer phone number (E.164 format recommended)"},"active":{"type":"boolean","description":"Whether the employer is currently active in the system"},"address":{"$ref":"#/components/schemas/EmployerAddress","description":"Employer's primary address"},"contact":{"oneOf":[{"$ref":"#/components/schemas/EmployerContact"},{"type":"null"}],"description":"Primary company-admin contact, or null"},"created_at":{"type":"string","format":"date-time","description":"Timestamp when the employer was created"},"updated_at":{"type":"string","format":"date-time","description":"Timestamp when the employer was last updated"}},"required":["id","organization_id","name","legal_name","ein","active","address","contact","created_at","updated_at"],"description":"Serializer for Employer entity in public API responses.","title":"Employer"},"EmployerResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Employer","description":"The employer record."}},"required":["data"],"description":"Response containing a single employer resource.","title":"EmployerResponse"},"UpdateEmployerAddressInput":{"type":"object","properties":{"address_line_1":{"type":"string","description":"Primary street address"},"address_line_2":{"type":["string","null"],"description":"Secondary street address"},"city":{"type":"string","description":"City name"},"state":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter state code"},"zipcode":{"type":"string","description":"ZIP code"}},"required":["address_line_1","city","state","zipcode"],"title":"UpdateEmployerAddressInput"},"UpdateEmployerRequest":{"type":"object","properties":{"name":{"type":["string","null"],"minLength":1,"maxLength":255,"description":"Employer display name"},"legal_name":{"type":["string","null"],"minLength":1,"maxLength":255,"description":"Legal business name"},"address":{"oneOf":[{"$ref":"#/components/schemas/UpdateEmployerAddressInput"},{"type":"null"}],"description":"Employer address"},"active":{"type":["boolean","null"],"description":"Whether the employer is active"}},"title":"UpdateEmployerRequest"},"State":{"type":"string","enum":["AL","AK","AZ","AR","CA","CO","CT","DC","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","RI","SC","SD","TN","TX","UT","VT","VA","WA","WI","WV","WY","PR","GU","AS","VI","MP","MH","PW","FM","AE","AA","AP"],"description":"* `AL` - AL\n* `AK` - AK\n* `AZ` - AZ\n* `AR` - AR\n* `CA` - CA\n* `CO` - CO\n* `CT` - CT\n* `DC` - DC\n* `DE` - DE\n* `FL` - FL\n* `GA` - GA\n* `HI` - HI\n* `ID` - ID\n* `IL` - IL\n* `IN` - IN\n* `IA` - IA\n* `KS` - KS\n* `KY` - KY\n* `LA` - LA\n* `ME` - ME\n* `MD` - MD\n* `MA` - MA\n* `MI` - MI\n* `MN` - MN\n* `MS` - MS\n* `MO` - MO\n* `MT` - MT\n* `NE` - NE\n* `NV` - NV\n* `NH` - NH\n* `NJ` - NJ\n* `NM` - NM\n* `NY` - NY\n* `NC` - NC\n* `ND` - ND\n* `OH` - OH\n* `OK` - OK\n* `OR` - OR\n* `PA` - PA\n* `RI` - RI\n* `SC` - SC\n* `SD` - SD\n* `TN` - TN\n* `TX` - TX\n* `UT` - UT\n* `VT` - VT\n* `VA` - VA\n* `WA` - WA\n* `WI` - WI\n* `WV` - WV\n* `WY` - WY\n* `PR` - PR\n* `GU` - GU\n* `AS` - AS\n* `VI` - VI\n* `MP` - MP\n* `MH` - MH\n* `PW` - PW\n* `FM` - FM\n* `AE` - AE\n* `AA` - AA\n* `AP` - AP","title":"State"},"CensusSyncEmployeeAddressRequest":{"type":"object","properties":{"address_line_1":{"type":"string","maxLength":255,"description":"Street address, including house or building number."},"address_line_2":{"type":["string","null"],"maxLength":255,"description":"Apartment, suite, unit, or floor. Omit if not applicable."},"city":{"type":"string","maxLength":255,"description":"City or town name."},"state":{"$ref":"#/components/schemas/State","description":"US state or territory for the address."},"zipcode":{"type":"string","maxLength":10,"description":"US postal code, either five digits or ZIP+4."}},"required":["address_line_1","city","state","zipcode"],"title":"CensusSyncEmployeeAddressRequest"},"CensusSyncEmployeeRequest":{"type":"object","properties":{"reference_id":{"type":["string","null"],"maxLength":255,"description":"Your own identifier for this employee. Vitable echoes it back on sync results so you can match failures to your records."},"first_name":{"type":"string","maxLength":255,"description":"Employee's legal first name."},"last_name":{"type":"string","maxLength":255,"description":"Employee's legal last name."},"date_of_birth":{"type":"string","format":"date","description":"Employee's date of birth as `YYYY-MM-DD`. Used to match existing members."},"email":{"type":"string","format":"email","description":"Employee's work email address. Vitable sends enrollment invitations here."},"phone":{"type":["string","null"],"description":"Phone number"},"address":{"oneOf":[{"$ref":"#/components/schemas/CensusSyncEmployeeAddressRequest"},{"type":"null"}],"description":"Employee's home address, used to determine plan availability."},"start_date":{"type":["string","null"],"format":"date","description":"Employment start date as `YYYY-MM-DD`. Drives benefit eligibility dates."},"employee_class":{"oneOf":[{"$ref":"#/components/schemas/EmployeeClass"},{"type":"null"}],"description":"Employee class used to match the employer's eligibility policy rules."},"compensation_type":{"oneOf":[{"$ref":"#/components/schemas/CompensationType"},{"type":"null"}],"description":"Whether the employee is salaried or hourly."}},"required":["first_name","last_name","date_of_birth","email"],"title":"CensusSyncEmployeeRequest"},"CensusSyncRequest":{"type":"object","properties":{"employees":{"type":"array","items":{"$ref":"#/components/schemas/CensusSyncEmployeeRequest"}}},"required":["employees"],"title":"CensusSyncRequest"},"CensusSyncResponse":{"type":"object","properties":{"employer_id":{"type":"string","description":"Employer the census sync was submitted for (`empr_*`)."},"accepted_at":{"type":"string","format":"date-time","description":"When Vitable accepted the census sync for processing (RFC 3339)."}},"required":["employer_id","accepted_at"],"title":"CensusSyncResponse"},"CensusSyncDetailResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CensusSyncResponse","description":"The census sync request, including its current processing status."}},"required":["data"],"description":"Response containing a single census sync detail resource.","title":"CensusSyncDetailResponse"},"EmployeeSearch":{"type":"string","description":"Case-insensitive search across employee first name, last name, and email","title":"EmployeeSearch"},"EmployeeListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Employee"},"description":"This page of employees."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing employee resources.","title":"EmployeeListResponse"},"UpdateEmployerSettingsRequest":{"type":"object","properties":{"pay_frequency":{"$ref":"#/components/schemas/DeductionFrequency"}},"required":["pay_frequency"],"title":"UpdateEmployerSettingsRequest"},"EmployerSettings":{"type":"object","properties":{"pay_frequency":{"oneOf":[{"$ref":"#/components/schemas/DeductionFrequency"},{"type":"null"}],"description":"Payroll deduction frequency. One of: weekly, bi_weekly, semi_monthly, monthly\n\n* `weekly` - Weekly\n* `bi_weekly` - Bi-Weekly\n* `semi_monthly` - Semi-Monthly\n* `monthly` - Monthly"}},"required":["pay_frequency"],"title":"EmployerSettings"},"EmployerSettingsResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmployerSettings","description":"The employer's current settings."}},"required":["data"],"description":"Response containing a single employer settings resource.","title":"EmployerSettingsResponse"},"OrganizationHrisProvider":{"type":"object","properties":{"provider":{"type":"string","description":"HRIS/payroll provider id, as stored on the connection (e.g. `adp_run`). Filter with this."},"provider_label":{"type":"string","description":"Display name of that provider (e.g. `ADP Run`)."}},"required":["provider","provider_label"],"title":"OrganizationHrisProvider"},"OrganizationHrisProvidersResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationHrisProvider"},"description":"The HRIS providers available to the organization."}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of organization hris providers.","title":"OrganizationHrisProvidersResponse"},"_HrisConnection":{"type":"object","properties":{"provider":{"type":"string","description":"Id of the HRIS/payroll provider the employer is connected to (e.g. `paylocity`)."},"provider_label":{"type":"string","description":"Display name of that provider (e.g. `Paylocity`)."},"status":{"type":"string","description":"Connection status reported by the integration."},"last_sync_on":{"type":["string","null"],"format":"date-time","description":"When the last sync completed, or null when none has."},"synced_row_count":{"type":["integer","null"],"description":"Rows in the latest completed sync, or null when none has."}},"required":["provider","provider_label","status","last_sync_on","synced_row_count"],"title":"_HrisConnection"},"EmployerHris":{"type":"object","properties":{"hris":{"oneOf":[{"$ref":"#/components/schemas/_HrisConnection"},{"type":"null"}],"description":"HRIS connection details, or null when the employer has no integration."}},"required":["hris"],"title":"EmployerHris"},"EmployerHrisResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmployerHris","description":"The employer's HRIS connection, or `null` when no integration exists."}},"required":["data"],"description":"Response containing a single employer hris resource.","title":"EmployerHrisResponse"},"BenefitFamily":{"type":"string","enum":["mec","mvp","ichra","vpc","dental","vision"],"description":"* `mec` - Mec\n* `mvp` - Mvp\n* `ichra` - Ichra\n* `vpc` - Vpc\n* `dental` - Dental\n* `vision` - Vision","title":"BenefitFamily"},"ContributionRange":{"type":"object","properties":{"min_cents":{"type":"integer","description":"Lowest per-tier contribution in cents."},"max_cents":{"type":"integer","description":"Highest per-tier contribution in cents."}},"required":["min_cents","max_cents"],"title":"ContributionRange"},"BenefitStatus":{"type":"string","enum":["active","upcoming","open_enrollment","inactive"],"description":"* `active` - Active\n* `upcoming` - Upcoming\n* `open_enrollment` - Open Enrollment\n* `inactive` - Inactive","title":"BenefitStatus"},"EnrollmentRate":{"type":"object","properties":{"eligible":{"type":"integer","description":"Employees eligible for this plan year."},"enrolled":{"type":"integer","description":"Employees enrolled in this plan year."},"percentage":{"type":"integer","description":"``enrolled / eligible`` whole-number percent (0 when none)."}},"required":["eligible","enrolled","percentage"],"title":"EnrollmentRate"},"BenefitPlanYearList":{"type":"object","properties":{"benefit_plan_year_id":{"type":"string","description":"Prefixed plan-year identifier (`plyr_*`)."},"benefit_id":{"type":"string","description":"Prefixed benefit identifier (`bprd_*`)."},"year":{"type":"integer","description":"Calendar coverage year."},"family":{"$ref":"#/components/schemas/BenefitFamily","description":"Benefit family.\n\n* `mec` - Mec\n* `mvp` - Mvp\n* `ichra` - Ichra\n* `vpc` - Vpc\n* `dental` - Dental\n* `vision` - Vision"},"product_name":{"type":"string","description":"Benefit/product display name."},"carrier":{"type":["string","null"],"description":"Carrier name, or null (e.g. ICHRA)."},"network_names":{"type":"array","items":{"type":"string"},"description":"Displayed networks: [\"multi\"] for ICHRA, otherwise the plan year's distinct network names."},"premium_in_cents":{"type":["integer","null"],"description":"Monthly premium in cents; only for an ICHRA benefit with effective coverage."},"employee_contribution":{"oneOf":[{"$ref":"#/components/schemas/ContributionRange"},{"type":"null"}],"description":"Employee contribution range."},"employer_contribution":{"oneOf":[{"$ref":"#/components/schemas/ContributionRange"},{"type":"null"}],"description":"Employer contribution range."},"status":{"$ref":"#/components/schemas/BenefitStatus","description":"`active`/`upcoming`/`inactive`.\n\n* `active` - Active\n* `upcoming` - Upcoming\n* `open_enrollment` - Open Enrollment\n* `inactive` - Inactive"},"coverage_start":{"type":"string","format":"date","description":"Coverage start."},"coverage_end":{"type":["string","null"],"format":"date","description":"Coverage end."},"open_enrollment_start":{"type":"string","format":"date","description":"Open-enrollment start."},"open_enrollment_end":{"type":["string","null"],"format":"date","description":"Open-enrollment end."},"offered_states":{"type":"array","items":{"type":"string"},"description":"Distinct offered state codes."},"is_current":{"type":"boolean","description":"Whether this is the current plan year."},"enrollment_rate":{"$ref":"#/components/schemas/EnrollmentRate","description":"Enrolled/eligible rate for this plan year."}},"required":["benefit_plan_year_id","benefit_id","year","family","product_name","carrier","network_names","premium_in_cents","employee_contribution","employer_contribution","status","coverage_start","coverage_end","open_enrollment_start","open_enrollment_end","offered_states","is_current","enrollment_rate"],"description":"One plan year, list view.\n\nStandalone (no shared base) so the exact list payload is readable in one place; the detail\nserializer is a separate class even where fields overlap.","title":"BenefitPlanYearList"},"EmployerBenefitPlanYearsListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BenefitPlanYearList"},"description":"The employer's benefit plan years, newest first."}},"required":["data"],"title":"EmployerBenefitPlanYearsListResponse"},"BenefitPlanYearId":{"type":"string","description":"Unique benefit-plan-year identifier (plyr_*).","title":"BenefitPlanYearId"},"ContributionClassEmployment":{"type":"string","enum":["Unspecified","Full Time","Part Time","Temporary","Seasonal"],"description":"* `Unspecified` - Unspecified\n* `Full Time` - Full Time\n* `Part Time` - Part Time\n* `Temporary` - Temporary\n* `Seasonal` - Seasonal","title":"ContributionClassEmployment"},"ContributionClassCompensation":{"type":"string","enum":["Unspecified","Salary","Hourly"],"description":"* `Unspecified` - Unspecified\n* `Salary` - Salary\n* `Hourly` - Hourly","title":"ContributionClassCompensation"},"ContributionClassLocation":{"type":"string","enum":["Unspecified","State"],"description":"* `Unspecified` - Unspecified\n* `State` - State","title":"ContributionClassLocation"},"CoverageTier":{"type":"string","enum":["Unspecified","EE","ES","EC","EF"],"description":"* `Unspecified` - Unspecified\n* `EE` - EE\n* `ES` - ES\n* `EC` - EC\n* `EF` - EF","title":"CoverageTier"},"_IchraContributionClass":{"type":"object","properties":{"contribution_class_id":{"type":"string","description":"Prefixed contribution-class identifier (`iccl_*`)."},"amount_in_cents":{"type":"integer","description":"Monthly allowance in cents."},"employment":{"$ref":"#/components/schemas/ContributionClassEmployment","description":"Employment matcher.\n\n* `Unspecified` - Unspecified\n* `Full Time` - Full Time\n* `Part Time` - Part Time\n* `Temporary` - Temporary\n* `Seasonal` - Seasonal"},"compensation":{"$ref":"#/components/schemas/ContributionClassCompensation","description":"Compensation matcher.\n\n* `Unspecified` - Unspecified\n* `Salary` - Salary\n* `Hourly` - Hourly"},"location":{"$ref":"#/components/schemas/ContributionClassLocation","description":"Location matcher type.\n\n* `Unspecified` - Unspecified\n* `State` - State"},"location_value":{"type":["string","null"],"description":"Location matcher value (CSV of state codes), or null."},"family_status":{"$ref":"#/components/schemas/CoverageTier","description":"Family-status matcher.\n\n* `Unspecified` - Unspecified\n* `EE` - Ee\n* `ES` - Es\n* `EC` - Ec\n* `EF` - Ef"},"min_age":{"type":["integer","null"],"description":"Age-band lower bound, or null."},"max_age":{"type":["integer","null"],"description":"Age-band upper bound, or null."}},"required":["contribution_class_id","amount_in_cents","employment","compensation","location","location_value","family_status","min_age","max_age"],"description":"One ICHRA contribution class, mirroring the internal configuration endpoint's\n``IchraContributionClassConfigurationEntitySerializer`` field-for-field. Two deliberate\ndifferences for the public surface: the identifier is the opaque prefixed ``iccl_*`` form rather\nthan a raw UUID, and the matcher choices come from the domain enums rather than the model's.","title":"_IchraContributionClass"},"_ContributionTier":{"type":"object","properties":{"benefit_plan_id":{"type":"string","description":"Prefixed benefit-plan identifier (`bpln_*`)."},"benefit_plan_name":{"type":"string","description":"Benefit plan name."},"benefit_plan_tier_name":{"type":"string","description":"Coverage-tier name."},"coverage_tier":{"$ref":"#/components/schemas/CoverageTier","description":"Coverage-tier code for this tier.\n\n* `Unspecified` - Unspecified\n* `EE` - Ee\n* `ES` - Es\n* `EC` - Ec\n* `EF` - Ef"},"cost":{"type":"integer","description":"Monthly employee deduction in cents."},"cost_per_dependent":{"type":"integer","description":"Monthly employee deduction per dependent, in cents."},"dependents_required_in":{"type":"boolean","description":"Whether dependents are required for this tier."},"spouse_required_in":{"type":"boolean","description":"Whether a spouse is required for this tier."}},"required":["benefit_plan_id","benefit_plan_name","benefit_plan_tier_name","coverage_tier","cost","cost_per_dependent","dependents_required_in","spouse_required_in"],"description":"One non-ICHRA coverage tier, mirroring the internal configuration ``CompanyBenefitPlanTierCostDTO``\nminus the tier-cost id, ``pepm`` and ``pepm_per_dependent``; ``benefit_plan_id`` is the prefixed\n``bpln_*`` form rather than a raw UUID.","title":"_ContributionTier"},"_ContributionStrategy":{"type":"object","properties":{"ichra_contribution_classes":{"type":"array","items":{"$ref":"#/components/schemas/_IchraContributionClass"},"description":"ICHRA contribution classes; empty for tier-priced benefits."},"contribution_tiers":{"type":"array","items":{"$ref":"#/components/schemas/_ContributionTier"},"description":"Coverage tiers and their costs; empty for ICHRA benefits."}},"required":["ichra_contribution_classes","contribution_tiers"],"description":"How the plan year prices contributions: exactly one collection is populated, determined by the\nplan year's ``family`` (ICHRA vs tier-priced).","title":"_ContributionStrategy"},"WaitingPeriod":{"type":"string","enum":["FIRST_OF_FOLLOWING_MONTH","THIRTY_DAYS","SIXTY_DAYS"],"description":"* `FIRST_OF_FOLLOWING_MONTH` - First Of Following Month\n* `THIRTY_DAYS` - Thirty Days\n* `SIXTY_DAYS` - Sixty Days","title":"WaitingPeriod"},"TerminationRule":{"type":"string","enum":["END_OF_N_MONTHS","END_OF_PLAN_YEAR"],"description":"* `END_OF_N_MONTHS` - End Of N Months\n* `END_OF_PLAN_YEAR` - End Of Plan Year","title":"TerminationRule"},"EligibilityRuleEmployeeClass":{"type":"string","enum":["Full Time","Part Time","Temporary","Intern","Seasonal","Individual Contractor","All"],"description":"* `Full Time` - Full Time\n* `Part Time` - Part Time\n* `Temporary` - Temporary\n* `Intern` - Intern\n* `Seasonal` - Seasonal\n* `Individual Contractor` - Individual Contractor\n* `All` - All","title":"EligibilityRuleEmployeeClass"},"EligibilityRuleCompensationType":{"type":"string","enum":["Salary","Hourly","All"],"description":"* `Salary` - Salary\n* `Hourly` - Hourly\n* `All` - All","title":"EligibilityRuleCompensationType"},"_EligibleGeographicalLocationType":{"type":"string","enum":["All","StateCodes"],"description":"* `All` - All\n* `StateCodes` - State Codes","title":"_EligibleGeographicalLocationType"},"_EligibleGeographicalLocation":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/_EligibleGeographicalLocationType","description":"`All` (unrestricted) or `StateCodes` (restricted to `state_codes`).\n\n* `All` - All\n* `StateCodes` - State Codes"},"state_codes":{"type":"array","items":{"type":"string"},"description":"States the rule is restricted to; empty when `type` is `All`."}},"required":["type","state_codes"],"title":"_EligibleGeographicalLocation"},"_EligibilityPolicyRule":{"type":"object","properties":{"employee_class":{"$ref":"#/components/schemas/EligibilityRuleEmployeeClass","description":"Employee-class matcher (`All` for any).\n\n* `Full Time` - Full Time\n* `Part Time` - Part Time\n* `Temporary` - Temporary\n* `Intern` - Intern\n* `Seasonal` - Seasonal\n* `Individual Contractor` - Individual Contractor\n* `All` - All"},"compensation_type":{"$ref":"#/components/schemas/EligibilityRuleCompensationType","description":"Compensation matcher (`All` for any).\n\n* `Salary` - Salary\n* `Hourly` - Hourly\n* `All` - All"},"eligible_geographical_location":{"$ref":"#/components/schemas/_EligibleGeographicalLocation","description":"Geographic matcher."}},"required":["employee_class","compensation_type","eligible_geographical_location"],"description":"One eligibility rule — the workforce slice it makes eligible. Mirrors the internal\n``PlanYearEligibilityPolicyRuleDTO`` minus the raw ids and timestamps.","title":"_EligibilityPolicyRule"},"_EligibilityPolicy":{"type":"object","properties":{"waiting_period":{"oneOf":[{"$ref":"#/components/schemas/WaitingPeriod"},{"type":"null"}],"description":"When coverage starts for a newly-eligible member, or null.\n\n* `FIRST_OF_FOLLOWING_MONTH` - First Of Following Month\n* `THIRTY_DAYS` - Thirty Days\n* `SIXTY_DAYS` - Sixty Days"},"termination_rule":{"$ref":"#/components/schemas/TerminationRule","description":"When coverage ends after a member becomes ineligible.\n\n* `END_OF_N_MONTHS` - End Of N Months\n* `END_OF_PLAN_YEAR` - End Of Plan Year"},"termination_n_months":{"type":["integer","null"],"description":"Months of continued coverage; set only when `termination_rule` is `END_OF_N_MONTHS`."},"rules":{"type":"array","items":{"$ref":"#/components/schemas/_EligibilityPolicyRule"},"description":"Eligibility rules; never empty for a valid policy."}},"required":["waiting_period","termination_rule","termination_n_months","rules"],"description":"The plan year's active eligibility policy. Mirrors the internal ``PlanYearEligibilityPolicyDTO``\nbut exposes only the public subset (no raw ids, ``active_in``, or timestamps).","title":"_EligibilityPolicy"},"BenefitPlanYearDetail":{"type":"object","properties":{"benefit_plan_year_id":{"type":"string","description":"Prefixed plan-year identifier (`plyr_*`)."},"benefit_id":{"type":"string","description":"Prefixed benefit identifier (`bprd_*`)."},"year":{"type":"integer","description":"Calendar coverage year."},"family":{"$ref":"#/components/schemas/BenefitFamily","description":"Benefit family.\n\n* `mec` - Mec\n* `mvp` - Mvp\n* `ichra` - Ichra\n* `vpc` - Vpc\n* `dental` - Dental\n* `vision` - Vision"},"product_name":{"type":"string","description":"Benefit/product display name."},"carrier":{"type":["string","null"],"description":"Carrier name, or null (e.g. ICHRA)."},"network_names":{"type":"array","items":{"type":"string"},"description":"Displayed networks: [\"multi\"] for ICHRA, otherwise the plan year's distinct network names."},"premium_in_cents":{"type":["integer","null"],"description":"Monthly premium in cents; only for an ICHRA benefit with effective coverage."},"employee_contribution":{"oneOf":[{"$ref":"#/components/schemas/ContributionRange"},{"type":"null"}],"description":"Employee contribution range."},"employer_contribution":{"oneOf":[{"$ref":"#/components/schemas/ContributionRange"},{"type":"null"}],"description":"Employer contribution range."},"status":{"$ref":"#/components/schemas/BenefitStatus","description":"`active`/`upcoming`/`inactive`.\n\n* `active` - Active\n* `upcoming` - Upcoming\n* `open_enrollment` - Open Enrollment\n* `inactive` - Inactive"},"coverage_start":{"type":"string","format":"date","description":"Coverage start."},"coverage_end":{"type":["string","null"],"format":"date","description":"Coverage end."},"open_enrollment_start":{"type":"string","format":"date","description":"Open-enrollment start."},"open_enrollment_end":{"type":["string","null"],"format":"date","description":"Open-enrollment end."},"offered_states":{"type":"array","items":{"type":"string"},"description":"Distinct offered state codes."},"enrollment_rate":{"$ref":"#/components/schemas/EnrollmentRate","description":"Enrolled/eligible rate for this plan year."},"spd_file_url":{"type":["string","null"],"description":"Summary Plan Description (SPD) link, or null."},"contribution_strategy":{"$ref":"#/components/schemas/_ContributionStrategy","description":"How the plan year prices contributions (ICHRA classes or coverage tiers)."},"eligibility_policy":{"oneOf":[{"$ref":"#/components/schemas/_EligibilityPolicy"},{"type":"null"}],"description":"The plan year's active eligibility policy, or null."}},"required":["benefit_plan_year_id","benefit_id","year","family","product_name","carrier","network_names","premium_in_cents","employee_contribution","employer_contribution","status","coverage_start","coverage_end","open_enrollment_start","open_enrollment_end","offered_states","enrollment_rate","spd_file_url","contribution_strategy","eligibility_policy"],"description":"One plan year, detail view.\n\nStandalone (no shared base) so the exact detail payload is readable in one place; the list\nserializer is a separate class even where fields overlap. Detail carries the SPD link and omits\nthe list-only ``is_current`` flag.","title":"BenefitPlanYearDetail"},"EmployerBenefitPlanYearResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/BenefitPlanYearDetail","description":"The benefit plan year, including its plans and contribution rules."}},"required":["data"],"description":"Response containing a single employer benefit plan year resource.","title":"EmployerBenefitPlanYearResponse"},"ElectionStatusItems":{"type":"string","enum":["Enrolled","Expired","Pending","Waived"],"title":"ElectionStatusItems"},"ElectionStatus":{"type":"array","items":{"$ref":"#/components/schemas/ElectionStatusItems"},"description":"Filter by election status. Repeat the parameter to match several.","title":"ElectionStatus"},"EmployerSearch":{"type":"string","description":"Case-insensitive search. Matches member name partially, and the `member_id` exactly — either your own reference id or the prefixed `grpmbr_<...>` id.","title":"EmployerSearch"},"PlanYearEnrollmentElectionStatus":{"type":"string","enum":["Enrolled","Waived","Pending","Expired"],"description":"* `Enrolled` - Enrolled\n* `Waived` - Waived\n* `Pending` - Pending\n* `Expired` - Expired","title":"PlanYearEnrollmentElectionStatus"},"PlanYearEnrollmentPolicyStatus":{"type":"string","enum":["Coverage Upcoming","Coverage Effective","Coverage Ended","Cancelled"],"description":"* `Coverage Upcoming` - Coverage Upcoming\n* `Coverage Effective` - Coverage Effective\n* `Coverage Ended` - Coverage Ended\n* `Cancelled` - Cancelled","title":"PlanYearEnrollmentPolicyStatus"},"PlanYearIchraAffordability":{"type":"string","enum":["Affordable","Not Affordable"],"description":"* `Affordable` - Affordable\n* `Not Affordable` - Not Affordable","title":"PlanYearIchraAffordability"},"PlanYearEnrollment":{"type":"object","properties":{"member_id":{"type":"string","description":"Our id for the person (`mbr_<...>`). Stable across every employer they work for."},"employee_id":{"type":"string","description":"Our id for this person's employment with this employer (`empl_<...>`). A person who leaves and is rehired has two."},"employee_external_reference_id":{"type":["string","null"],"description":"Your own reference id for this employee, as you supplied it. Null when you have not set one."},"member_first_name":{"type":"string","description":"The member's first name."},"member_last_name":{"type":"string","description":"The member's last name."},"election_status":{"$ref":"#/components/schemas/PlanYearEnrollmentElectionStatus","description":"Where the member stands: `Enrolled` or `Waived` if they answered, otherwise `Pending` while their enrollment window is open and `Expired` once it has closed.\n\n* `Enrolled` - Enrolled\n* `Waived` - Waived\n* `Pending` - Pending\n* `Expired` - Expired"},"policy_status":{"oneOf":[{"$ref":"#/components/schemas/PlanYearEnrollmentPolicyStatus"},{"type":"null"}],"description":"Where the member's coverage stands: `Coverage Upcoming`, `Coverage Effective`, `Coverage Ended`, or `Cancelled`. Null unless the member enrolled.\n\n* `Coverage Upcoming` - Coverage Upcoming\n* `Coverage Effective` - Coverage Effective\n* `Coverage Ended` - Coverage Ended\n* `Cancelled` - Cancelled"},"dependent_count":{"type":"integer","minimum":0,"description":"Dependents covered under this enrollment today. Counts the same dependents `premium_in_cents` is priced for, so a dependent whose termination is dated in the future still counts."},"carrier":{"type":["string","null"],"description":"The carrier for this enrollment: the individual-market carrier for an ICHRA plan, otherwise the benefit's own. Null when the benefit has no carrier."},"plan":{"type":["string","null"],"description":"Chosen plan name, or null when unanswered/waived."},"tier":{"type":["string","null"],"description":"Chosen coverage tier, or null when unanswered/waived."},"premium_in_cents":{"type":["integer","null"],"description":"Monthly premium in cents for the chosen plan, dependents included. The plan's own cost, not the employer's share of it. Null when unanswered/waived."},"employer_contribution_in_cents":{"type":["integer","null"],"description":"The employer's monthly share of `premium_in_cents`, in cents. Null when unanswered/waived."},"employee_deduction_in_cents":{"type":["integer","null"],"description":"What the employee is deducted monthly, in cents: `premium_in_cents` less `employer_contribution_in_cents`, floored at zero. Null when unanswered/waived."},"plan_year_ichra_affordability":{"oneOf":[{"$ref":"#/components/schemas/PlanYearIchraAffordability"},{"type":"null"}],"description":"Whether this ICHRA plan year was marked `Affordable` or `Not Affordable` when it was configured. A plan-year setting, not a calculation for this member. Null for non-ICHRA plan years and for ICHRA plan years where it has not been set.\n\n* `Affordable` - Affordable\n* `Not Affordable` - Not Affordable"}},"required":["member_id","employee_id","employee_external_reference_id","member_first_name","member_last_name","election_status","policy_status","dependent_count","carrier","plan","tier","premium_in_cents","employer_contribution_in_cents","employee_deduction_in_cents","plan_year_ichra_affordability"],"title":"PlanYearEnrollment"},"PlanYearEnrollmentListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PlanYearEnrollment"},"description":"This page of plan year enrollments."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing plan year enrollment resources.","title":"PlanYearEnrollmentListResponse"},"Offset":{"type":"string","minLength":1,"description":"Opaque cursor from a previous page's next_offset","title":"Offset"},"Invoice":{"type":"object","properties":{"invoice_id":{"type":"string","description":"Chargebee invoice id (external id, not a prefixed UUID)."},"period":{"type":["string","null"],"description":"Invoice date as an ISO string, or null."},"total":{"type":["number","null"],"format":"double","description":"Invoice total in dollars, or null."},"status":{"type":["string","null"],"description":"Chargebee invoice status (e.g. `paid`), or null."}},"required":["invoice_id","period","total","status"],"title":"Invoice"},"_InvoicesCursorPagination":{"type":"object","properties":{"next_offset":{"type":["string","null"],"description":"Opaque JSON-encoded cursor for the next page; null when there are no more pages."}},"required":["next_offset"],"title":"_InvoicesCursorPagination"},"EmployerInvoicesListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Invoice"},"description":"This page of invoices."},"pagination":{"$ref":"#/components/schemas/_InvoicesCursorPagination","description":"Cursor metadata for this result set."}},"required":["data","pagination"],"description":"Cursor-paginated invoices envelope: ``{ \"data\": [...], \"pagination\": { \"next_offset\": ... } }``.","title":"EmployerInvoicesListResponse"},"InvoiceId":{"type":"string","description":"External Chargebee invoice id (not a prefixed UUID).","title":"InvoiceId"},"EmployerInvoicePdf":{"type":"object","properties":{"download_url":{"type":"string","description":"Time-limited Chargebee PDF download link for the invoice."}},"required":["download_url"],"title":"EmployerInvoicePdf"},"EmployerInvoicePdfResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EmployerInvoicePdf","description":"A short-lived download link for the invoice PDF."}},"required":["data"],"description":"Response containing a single employer invoice pdf resource.","title":"EmployerInvoicePdfResponse"},"PayrollAccessSetupStatus":{"type":"object","properties":{"completed":{"type":"boolean","description":"Whether payroll access setup has been completed for this employer."},"submitted_at":{"type":["string","null"],"format":"date-time","description":"When the setup form was submitted (RFC 3339), or `null` if it has not been submitted."}},"required":["completed","submitted_at"],"title":"PayrollAccessSetupStatus"},"PayrollAccessSetupStatusResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PayrollAccessSetupStatus","description":"Current status of the employer's payroll access setup."}},"required":["data"],"description":"Response containing a single payroll access setup status resource.","title":"PayrollAccessSetupStatusResponse"},"ClassificationCorrectionSource":{"type":"string","enum":["ENTER_NAMES","EMAIL_LIST"],"description":"* `ENTER_NAMES` - ENTER_NAMES\n* `EMAIL_LIST` - EMAIL_LIST","title":"ClassificationCorrectionSource"},"RemainingEmployeeAction":{"type":"string","enum":["VITABLE_UPDATE","EMPLOYER_UPDATE"],"description":"* `VITABLE_UPDATE` - VITABLE_UPDATE\n* `EMPLOYER_UPDATE` - EMPLOYER_UPDATE","title":"RemainingEmployeeAction"},"MissingEmployeeResolution":{"type":"string","enum":["EMAIL_CENSUS","SECOND_SYSTEM_ACCESS"],"description":"* `EMAIL_CENSUS` - EMAIL_CENSUS\n* `SECOND_SYSTEM_ACCESS` - SECOND_SYSTEM_ACCESS","title":"MissingEmployeeResolution"},"PayrollAccessMethod":{"type":"string","enum":["SELF_SETUP","NEEDS_HELP"],"description":"* `SELF_SETUP` - SELF_SETUP\n* `NEEDS_HELP` - NEEDS_HELP","title":"PayrollAccessMethod"},"SubmitPayrollAccessSetupRequest":{"type":"object","properties":{"employees_in_payroll_acknowledged":{"type":"boolean","description":"Attestation that all benefit-eligible employees appear in the payroll system."},"payroll_data_impacts_eligibility_acknowledged":{"type":"boolean","description":"Attestation that changes to payroll data affect benefit eligibility."},"classifications_accurate":{"type":"boolean","description":"Attestation that employee classifications in payroll are accurate. Set `false` to report corrections in the fields below."},"classification_correction_source":{"oneOf":[{"$ref":"#/components/schemas/ClassificationCorrectionSource"},{"type":"null"}],"description":"Where corrected classifications come from, when `classifications_accurate` is `false`."},"misclassified_employee_names":{"type":"array","items":{"type":"string"},"default":[],"description":"Names of employees whose payroll classification needs correcting."},"remaining_employee_action":{"oneOf":[{"$ref":"#/components/schemas/RemainingEmployeeAction"},{"type":"null"}],"description":"How to handle employees still missing from the payroll system."},"all_benefit_eligible_employees_present":{"type":"boolean","description":"Attestation that every benefit-eligible employee is present in payroll."},"missing_employee_resolution":{"oneOf":[{"$ref":"#/components/schemas/MissingEmployeeResolution"},{"type":"null"}],"description":"How any missing employees will be added, when some are absent."},"is_controlled_group":{"type":"boolean","description":"Whether this employer belongs to a controlled group of related entities."},"same_payroll_covers_other_eins":{"type":["boolean","null"],"description":"Whether this payroll system also covers other EINs in the controlled group."},"access_method":{"$ref":"#/components/schemas/PayrollAccessMethod"},"login_url":{"type":["string","null"],"maxLength":2048,"description":"Sign-in URL for the payroll system."},"username":{"type":["string","null"],"maxLength":255,"description":"Username Vitable should use to access the payroll system."},"phone":{"type":["string","null"],"maxLength":64,"description":"Phone number used for payroll-system verification codes."},"password":{"type":["string","null"],"maxLength":979,"description":"Password Vitable should use to access the payroll system."},"integration_confirmed":{"type":["boolean","null"],"description":"Whether the payroll integration has been confirmed as working."},"has_additional_payroll_system":{"type":"boolean","description":"Whether a second payroll system is in use. When `true`, supply the `additional_*` fields below."},"additional_access_method":{"oneOf":[{"$ref":"#/components/schemas/PayrollAccessMethod"},{"type":"null"}],"description":"How Vitable will access the second payroll system."},"additional_login_url":{"type":["string","null"],"maxLength":2048,"description":"Sign-in URL for the second payroll system."},"additional_username":{"type":["string","null"],"maxLength":255,"description":"Username Vitable should use for the second payroll system."},"additional_phone":{"type":["string","null"],"maxLength":64,"description":"Phone number used for second payroll-system verification codes."},"additional_password":{"type":["string","null"],"maxLength":979,"description":"Password Vitable should use for the second payroll system."},"additional_integration_confirmed":{"type":["boolean","null"],"description":"Whether the second payroll integration has been confirmed as working."}},"required":["employees_in_payroll_acknowledged","payroll_data_impacts_eligibility_acknowledged","classifications_accurate","all_benefit_eligible_employees_present","is_controlled_group","access_method","has_additional_payroll_system"],"title":"SubmitPayrollAccessSetupRequest"},"PayrollDeductionStatement":{"type":"object","properties":{"statement_id":{"type":"string","description":"Prefixed payroll-deduction-statement identifier (`pstmt_<base64-encoded-uuid>`)."},"period_start":{"type":"string","format":"date","description":"Deduction period start date."},"period_end":{"type":"string","format":"date","description":"Deduction period end date."},"run_date":{"type":"string","format":"date-time","description":"When the statement was generated."},"employee_count":{"type":"integer","description":"Distinct employees covered by the statement's entries."},"total_deduction_cents":{"type":"integer","description":"Total payroll deduction for the period, in cents."},"csv_file_url":{"type":["string","null"],"description":"Download link for the change CSV, or null."},"deduction_frequency":{"$ref":"#/components/schemas/DeductionFrequency","description":"Deduction frequency code (e.g. `monthly`).\n\n* `weekly` - Weekly\n* `bi_weekly` - Bi Weekly\n* `semi_monthly` - Semi Monthly\n* `monthly` - Monthly"},"deduction_frequency_label":{"type":"string","description":"Human-readable deduction frequency (e.g. `Monthly`)."}},"required":["statement_id","period_start","period_end","run_date","employee_count","total_deduction_cents","csv_file_url","deduction_frequency","deduction_frequency_label"],"description":"One payroll-deduction statement row.\n\nReads a :class:`PayrollDeductionStatementDTO` by attribute: the ``statement_id`` character field renders the\nprefixed id via ``str()``, and the date/datetime fields emit ISO-8601 strings.","title":"PayrollDeductionStatement"},"EmployerPayrollDeductionStatementListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PayrollDeductionStatement"},"description":"This page of payroll deduction statements."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing employer payroll deduction statement resources.","title":"EmployerPayrollDeductionStatementListResponse"},"PayrollIntegrationEmail":{"type":"object","properties":{"integration_email":{"type":"string","format":"email","description":"Email address Vitable uses to exchange payroll files with the employer."}},"required":["integration_email"],"title":"PayrollIntegrationEmail"},"PayrollIntegrationEmailResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PayrollIntegrationEmail","description":"The payroll integration email address for the employer."}},"required":["data"],"description":"Response containing a single payroll integration email resource.","title":"PayrollIntegrationEmailResponse"},"AcaClassificationParam":{"type":"string","enum":["FULL_TIME"],"description":"Filters to an exact ACA classification.","title":"AcaClassificationParam"},"Name":{"type":"string","description":"Filters to employees whose first or last name contains this text (case-insensitive).","title":"Name"},"AcaClassification":{"type":"string","enum":["FULL_TIME"],"description":"* `FULL_TIME` - Full Time","title":"AcaClassification"},"MeasurementPeriodType":{"type":"string","enum":["initial","standard"],"description":"* `initial` - Initial\n* `standard` - Standard","title":"MeasurementPeriodType"},"ACAFullTimeEmployee":{"type":"object","properties":{"employee_id":{"type":"string","description":"Prefixed employee identifier (`empl_*`)."},"first_name":{"type":"string"},"last_name":{"type":"string"},"designated_classification":{"$ref":"#/components/schemas/EmployeeClass","description":"Payroll classification.\n\n* `Full Time` - Full Time\n* `Part Time` - Part Time\n* `Temporary` - Temporary\n* `Intern` - Intern\n* `Seasonal` - Seasonal\n* `Individual Contractor` - Individual Contractor"},"aca_classification":{"$ref":"#/components/schemas/AcaClassification","description":"ACA measurement outcome. Currently always FULL_TIME.\n\n* `FULL_TIME` - Full Time"},"required_coverage_start_date":{"type":"string","format":"date","description":"Equals the stability period start date."},"measurement_period_start_date":{"type":"string","format":"date"},"measurement_period_end_date":{"type":"string","format":"date"},"measurement_period_type":{"$ref":"#/components/schemas/MeasurementPeriodType","description":"`initial` for a new hire's initial measurement period, `standard` for the employer-wide one.\n\n* `initial` - Initial\n* `standard` - Standard"},"measurement_period_average_hours":{"type":"string","format":"decimal","pattern":"^-?\\d{0,5}(?:\\.\\d{0,2})?$","description":"Vendor-reported average hours over the measurement period."},"stability_period_start_date":{"type":"string","format":"date"},"stability_period_end_date":{"type":"string","format":"date"}},"required":["employee_id","first_name","last_name","designated_classification","aca_classification","required_coverage_start_date","measurement_period_start_date","measurement_period_end_date","measurement_period_type","measurement_period_average_hours","stability_period_start_date","stability_period_end_date"],"description":"One employee's ACA full-time determination, list view.\n\nEnrollment status is intentionally not included — see the DTO's docstring for why.","title":"ACAFullTimeEmployee"},"EmployerACAFullTimeEmployeesListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ACAFullTimeEmployee"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"description":"Paginated list response containing employer a c a full time employees resources.","title":"EmployerACAFullTimeEmployeesListResponse"},"EnrollmentId":{"type":"string","description":"Unique enrollment identifier (enrl_*)","title":"EnrollmentId"},"EnrollmentDetail":{"type":"object","properties":{"id":{"type":"string","description":"Unique enrollment identifier (enrl_*)"},"employee_id":{"type":"string","description":"Employee ID (empl_*)"},"employer_id":{"type":"string","description":"Employer ID (empr_*)"},"benefit":{"$ref":"#/components/schemas/BenefitSummary","description":"Nested benefit product summary"},"status":{"$ref":"#/components/schemas/EnrollmentStatus","description":"Enrollment status\n\n* `pending` - Pending\n* `enrolled` - Enrolled\n* `waived` - Waived\n* `inactive` - Inactive"},"coverage_start":{"type":"string","format":"date","description":"Coverage period start date"},"coverage_end":{"type":["string","null"],"format":"date","description":"Coverage period end date"},"employee_deduction_in_cents":{"type":["integer","null"],"description":"Employee monthly payroll deduction in cents"},"employer_contribution_in_cents":{"type":["integer","null"],"description":"Employer monthly contribution in cents"},"answered_at":{"type":["string","null"],"format":"date-time","description":"When the employee enrolled or waived"},"terminated_at":{"type":["string","null"],"format":"date-time","description":"When coverage was terminated"},"created_at":{"type":"string","format":"date-time","description":"When the enrollment was created"},"updated_at":{"type":"string","format":"date-time","description":"When the enrollment was last updated"},"sbc_url":{"type":["string","null"],"description":"Summary of Benefits and Coverage (SBC) document URL for the enrolled plan; null when not on file. Only individual (ICHRA) plans carry an SBC — group plans have no SBC on record and always resolve to null."}},"required":["id","employee_id","employer_id","benefit","status","coverage_start","coverage_end","employee_deduction_in_cents","employer_contribution_in_cents","answered_at","terminated_at","created_at","updated_at"],"description":"A single enrollment, including the enrolled plan's documents.\n\nThe plan documents are resolved one enrollment at a time and are therefore not part of the\nlist row.","title":"EnrollmentDetail"},"EnrollmentResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EnrollmentDetail","description":"The enrollment, including its elected plans."}},"required":["data"],"description":"Response containing a single enrollment resource.","title":"EnrollmentResponse"},"ReissueEnrollmentRequest":{"type":"object","properties":{"reason":{"type":["string","null"],"description":"Audit reason for the reissue; required for user-backed callers and optional for long-lived organization API-key callers"},"ticket_number":{"type":["string","null"],"maxLength":1000,"description":"Optional support or operational ticket number"},"qualifying_life_event_id":{"type":["string","null"],"description":"Accepted member qualifying life event identifier (qle_*)"}},"title":"ReissueEnrollmentRequest"},"ReissueEnrollment":{"type":"object","properties":{"enrollment_id":{"type":"string","description":"Opaque identifier for the new unanswered enrollment"}},"required":["enrollment_id"],"title":"ReissueEnrollment"},"ReissueEnrollmentResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ReissueEnrollment","description":"The reissued enrollment."}},"required":["data"],"description":"Response containing a single reissue enrollment resource.","title":"ReissueEnrollmentResponse"},"TerminateEnrollmentRequest":{"type":"object","properties":{"reason":{"type":["string","null"],"description":"Audit reason for the termination; required for user-backed callers and optional for long-lived organization API-key callers"},"ticket_number":{"type":["string","null"],"maxLength":1000,"description":"Optional support or operational ticket number"},"qualifying_life_event_id":{"type":["string","null"],"description":"Accepted member qualifying life event identifier (qle_*)"}},"title":"TerminateEnrollmentRequest"},"CarrierQuestionAnswer":{"type":"object","properties":{"question_id":{"type":"string"},"applicant_id":{"type":"string"},"answer":{"type":"string","maxLength":1000}},"required":["question_id","applicant_id","answer"],"title":"CarrierQuestionAnswer"},"CarrierQuestionType":{"type":"string","enum":["boolean","choice","text","date","signature","disclosure"],"description":"* `boolean` - boolean\n* `choice` - choice\n* `text` - text\n* `date` - date\n* `signature` - signature\n* `disclosure` - disclosure","title":"CarrierQuestionType"},"CarrierQuestionOption":{"type":"object","properties":{"value":{"type":"string","maxLength":1000},"label":{"type":"string"}},"required":["value","label"],"title":"CarrierQuestionOption"},"CarrierQuestionCondition":{"type":"object","properties":{"question_id":{"type":"string"},"value":{"type":"string","maxLength":1000}},"required":["question_id","value"],"title":"CarrierQuestionCondition"},"CarrierQuestion":{"type":"object","properties":{"question_id":{"type":"string"},"applicant_id":{"type":"string"},"type":{"$ref":"#/components/schemas/CarrierQuestionType"},"label":{"type":"string"},"required":{"type":"boolean"},"carrier_required":{"type":"boolean"},"member_visible":{"type":"boolean"},"content":{"type":"array","items":{"type":"string"}},"options":{"type":"array","items":{"$ref":"#/components/schemas/CarrierQuestionOption"}},"conditions":{"type":"array","items":{"$ref":"#/components/schemas/CarrierQuestionCondition"}},"requires_agreement":{"type":"boolean"},"earliest_date":{"type":["string","null"],"format":"date"},"latest_date":{"type":["string","null"],"format":"date"},"blocking_reason":{"type":["string","null"]}},"required":["question_id","applicant_id","type","label","required","carrier_required","member_visible","content","options","conditions","requires_agreement","earliest_date","latest_date","blocking_reason"],"title":"CarrierQuestion"},"CarrierQuestionResponses":{"type":"object","properties":{"enrollment_id":{"type":"string"},"selected_plan_hios_id":{"type":"string"},"revision":{"type":"integer","minimum":1},"responses":{"type":"array","items":{"$ref":"#/components/schemas/CarrierQuestionAnswer"}},"updated_at":{"type":["string","null"],"format":"date-time"},"finalized_at":{"type":["string","null"],"format":"date-time"},"reviewed_revision":{"type":["integer","null"],"minimum":1},"questions":{"type":"array","items":{"$ref":"#/components/schemas/CarrierQuestion"}},"blocked_reasons":{"type":"array","items":{"type":"string"}},"initial_responses":{"type":"array","items":{"$ref":"#/components/schemas/CarrierQuestionAnswer"}},"reselection_required":{"type":"boolean"}},"required":["enrollment_id","selected_plan_hios_id","revision","responses","updated_at","finalized_at","reviewed_revision","questions","blocked_reasons","initial_responses","reselection_required"],"title":"CarrierQuestionResponses"},"CarrierQuestionResponsesReadResponse":{"type":"object","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/CarrierQuestionResponses"},{"type":"null"}]}},"required":["data"],"description":"Response containing a single carrier question responses resource.","title":"CarrierQuestionResponsesReadResponse"},"CarrierQuestionAnswerRequest":{"type":"object","properties":{"question_id":{"type":"string","minLength":1,"maxLength":255},"applicant_id":{"type":"string","minLength":1,"maxLength":255},"answer":{"type":"string","maxLength":1000}},"required":["question_id","applicant_id","answer"],"title":"CarrierQuestionAnswerRequest"},"SaveCarrierQuestionResponsesRequest":{"type":"object","properties":{"expected_revision":{"type":"integer","minimum":1},"responses":{"type":"array","items":{"$ref":"#/components/schemas/CarrierQuestionAnswerRequest"}}},"required":["expected_revision","responses"],"title":"SaveCarrierQuestionResponsesRequest"},"CarrierQuestionResponsesResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CarrierQuestionResponses"}},"required":["data"],"description":"Response containing a single carrier question responses resource.","title":"CarrierQuestionResponsesResponse"},"EnrollmentShoppingDependentRequest":{"type":"object","properties":{"first_name":{"type":"string","minLength":1,"maxLength":255},"last_name":{"type":"string","minLength":1,"maxLength":255},"date_of_birth":{"type":"string","format":"date"},"child":{"type":"boolean"},"uses_tobacco":{"type":["boolean","null"]}},"required":["first_name","last_name","date_of_birth","child","uses_tobacco"],"title":"EnrollmentShoppingDependentRequest"},"SelectEnrollmentPlanRequest":{"type":"object","properties":{"hios_id":{"type":"string","pattern":"^[0-9]{5}[A-Z]{2}[0-9]{7}(-[0-9]{2})?$"},"effective_date":{"type":"string","format":"date"},"fips_code":{"type":"string","pattern":"^[0-9]{5}$"},"dependents":{"type":"array","items":{"$ref":"#/components/schemas/EnrollmentShoppingDependentRequest"}},"expected_revision":{"type":["integer","null"],"minimum":0}},"required":["hios_id","effective_date","fips_code","dependents"],"title":"SelectEnrollmentPlanRequest"},"CreatedAfter":{"type":"string","format":"date-time","title":"CreatedAfter"},"CreatedBefore":{"type":"string","format":"date-time","title":"CreatedBefore"},"EventName":{"type":"string","enum":["enrollment.accepted","enrollment.terminated","enrollment.termination_rescheduled","enrollment.elected","enrollment.granted","enrollment.waived","enrollment.started","employee.eligibility_granted","employee.eligibility_terminated","employee.deactivated","employee.deduction_created"],"description":"* `enrollment.accepted` - Enrollment Accepted\n* `enrollment.terminated` - Enrollment Terminated\n* `enrollment.termination_rescheduled` - Enrollment Termination Rescheduled\n* `enrollment.elected` - Enrollment Elected\n* `enrollment.granted` - Enrollment Granted\n* `enrollment.waived` - Enrollment Waived\n* `enrollment.started` - Enrollment Started\n* `employee.eligibility_granted` - Employee Eligibility Granted\n* `employee.eligibility_terminated` - Employee Eligibility Terminated\n* `employee.deactivated` - Employee Deactivated\n* `employee.deduction_created` - Employee Deduction Created","title":"EventName"},"ResourceId":{"type":"string","minLength":1,"title":"ResourceId"},"ResourceType":{"type":"string","enum":["enrollment","employee","employer","dependent","plan_year","payroll_deduction"],"description":"* `enrollment` - Enrollment\n* `employee` - Employee\n* `employer` - Employer\n* `dependent` - Dependent\n* `plan_year` - Plan Year\n* `payroll_deduction` - Payroll Deduction","title":"ResourceType"},"WebhookEvent":{"type":"object","properties":{"id":{"type":"string","description":"Prefixed unique identifier for this webhook event (e.g., `wevt_...`)."},"organization_id":{"type":"string","description":"The organization this event belongs to."},"event_name":{"type":"string","description":"The event type, formatted as `{resource}.{action}` (e.g., `enrollment.accepted`)."},"resource_type":{"type":"string","description":"The type of resource affected (e.g., `enrollment`, `employee`)."},"resource_id":{"type":"string","description":"Prefixed ID of the affected resource. Use this to fetch the current state from the API."},"created_at":{"type":"string","format":"date-time","description":"When the event occurred, in UTC."}},"required":["id","organization_id","event_name","resource_type","resource_id","created_at"],"title":"WebhookEvent"},"WebhookEventListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEvent"},"description":"This page of webhook events."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing webhook event resources.","title":"WebhookEventListResponse"},"EventId":{"type":"string","title":"EventId"},"WebhookEventResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookEvent","description":"The webhook event."}},"required":["data"],"description":"Response containing a single webhook event resource.","title":"WebhookEventResponse"},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string","description":"Prefixed unique identifier for this delivery (e.g., `wdlv_...`)."},"webhook_event_id":{"type":"string","description":"The webhook event this delivery belongs to."},"subscription_id":{"type":"string","description":"The webhook subscription this delivery was sent to."},"status":{"type":"string","description":"Current delivery status: Pending, In Progress, Delivered, or Failed."},"started_at":{"type":["string","null"],"format":"date-time","description":"When the delivery attempt started, in UTC."},"delivered_at":{"type":["string","null"],"format":"date-time","description":"When the delivery was successfully received, in UTC."},"failed_at":{"type":["string","null"],"format":"date-time","description":"When the delivery was marked as permanently failed, in UTC."},"failure_reason":{"type":"string","description":"Reason for failure, if applicable."},"created_at":{"type":"string","format":"date-time","description":"When this delivery record was created, in UTC."}},"required":["id","webhook_event_id","subscription_id","status","started_at","delivered_at","failed_at","failure_reason","created_at"],"title":"WebhookDelivery"},"ListWebhookEventDeliveriesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"},"description":"Delivery attempts for the webhook event, most recent first."}},"required":["data"],"title":"ListWebhookEventDeliveriesResponse"},"Group":{"type":"object","properties":{"id":{"type":"string","description":"Prefixed group identifier (`grp_<base64-encoded-uuid>`)."},"organization_id":{"type":"string","description":"Prefixed organization identifier (`org_<base64-encoded-uuid>`)."},"name":{"type":"string","maxLength":255,"description":"Human-readable group name."},"external_reference_id":{"type":"string","maxLength":255,"description":"Stable identifier for this group in the integrator's own system."},"created_at":{"type":["string","null"],"format":"date-time","description":"Group creation timestamp (ISO 8601, UTC)."},"updated_at":{"type":["string","null"],"format":"date-time","description":"Last-update timestamp (ISO 8601, UTC)."}},"required":["id","organization_id","name","external_reference_id","created_at","updated_at"],"title":"Group"},"GroupListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Group"},"description":"This page of groups."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing group resources.","title":"GroupListResponse"},"CreateGroupRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255,"description":"Display name for the group."},"external_reference_id":{"type":"string","minLength":1,"maxLength":255,"description":"Your own identifier for this group. Use it to correlate the group with a record in your system; it must be unique within your organization."}},"required":["name","external_reference_id"],"title":"CreateGroupRequest"},"GroupResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Group","description":"The group record."}},"required":["data"],"description":"Response containing a single group resource.","title":"GroupResponse"},"GroupId":{"type":"string","description":"Unique group identifier (grp_*)","title":"GroupId"},"PatchedUpdateGroupRequest":{"type":"object","properties":{"name":{"type":["string","null"],"minLength":1,"maxLength":255,"description":"New display name for the group. Omit to leave unchanged."},"external_reference_id":{"type":["string","null"],"maxLength":255,"description":"New external reference ID for the group. Omit to leave unchanged."}},"title":"PatchedUpdateGroupRequest"},"AddressRequest":{"type":"object","properties":{"address_line_1":{"type":"string","minLength":1,"maxLength":255,"description":"Street address, including house or building number."},"address_line_2":{"type":["string","null"],"maxLength":255,"description":"Apartment, suite, unit, or floor. Omit if not applicable."},"city":{"type":"string","minLength":1,"maxLength":255,"description":"City or town name."},"state":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter USPS state or territory code, e.g. `PA`."},"zipcode":{"type":"string","minLength":1,"maxLength":20,"description":"US postal code, either five digits or ZIP+4."}},"required":["address_line_1","city","state","zipcode"],"title":"AddressRequest"},"GroupMemberSyncMemberRequest":{"type":"object","properties":{"reference_id":{"type":"string","minLength":1,"maxLength":255,"description":"Your own identifier for this member. Vitable echoes it back on sync failures so you can match them to your records."},"first_name":{"type":"string","maxLength":255,"description":"Member's legal first name."},"last_name":{"type":"string","maxLength":255,"description":"Member's legal last name."},"date_of_birth":{"type":"string","format":"date","description":"Member's date of birth as `YYYY-MM-DD`."},"phone":{"type":["string","null"],"description":"Member's contact phone number in E.164 format."},"plan_id":{"type":"string","minLength":1,"maxLength":255,"description":"Plan the member should be subscribed to (`plan_*`)."},"address":{"$ref":"#/components/schemas/AddressRequest","description":"The member's postal address."},"email":{"type":["string","null"],"format":"email","description":"Member's email address. Vitable sends care and coverage notices here."}},"required":["reference_id","first_name","last_name","date_of_birth","plan_id","address"],"title":"GroupMemberSyncMemberRequest"},"GroupMemberSyncRequest":{"type":"object","properties":{"members":{"type":"array","items":{"$ref":"#/components/schemas/GroupMemberSyncMemberRequest"}}},"required":["members"],"title":"GroupMemberSyncRequest"},"GroupMemberSyncResponse":{"type":"object","properties":{"request_id":{"type":"string","description":"Identifier for this sync request. Pass it to `GET /v1/groups/{group_id}/members/sync/{request_id}` to poll for results."},"group_id":{"type":"string","description":"Group whose roster is being synced (`grp_*`)."},"accepted_at":{"type":"string","format":"date-time","description":"When Vitable accepted the sync request for processing (RFC 3339)."}},"required":["request_id","group_id","accepted_at"],"title":"GroupMemberSyncResponse"},"GroupMemberSyncDetailResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GroupMemberSyncResponse","description":"The group member sync request, including its current processing status."}},"required":["data"],"description":"Response containing a single group member sync detail resource.","title":"GroupMemberSyncDetailResponse"},"RequestId":{"type":"string","title":"RequestId"},"GroupMemberSyncFailureOperation":{"type":"string","enum":["add","remove"],"description":"* `add` - add\n* `remove` - remove","title":"GroupMemberSyncFailureOperation"},"GroupMemberSyncFailure":{"type":"object","properties":{"reference_id":{"type":"string","description":"Your identifier for the member that failed to sync."},"operation":{"$ref":"#/components/schemas/GroupMemberSyncFailureOperation","description":"The sync operation that failed for this member."},"reason":{"type":"string","description":"Human-readable explanation of why the operation failed."}},"required":["reference_id","operation","reason"],"title":"GroupMemberSyncFailure"},"GroupMemberSyncResults":{"type":"object","properties":{"added_group_member_ids":{"type":"array","items":{"type":"string"},"description":"IDs of members added to the group by this sync."},"removed_group_member_ids":{"type":"array","items":{"type":"string"},"description":"IDs of members removed from the group by this sync."},"failures":{"type":"array","items":{"$ref":"#/components/schemas/GroupMemberSyncFailure"},"description":"Members that could not be synced, with a reason for each."}},"required":["added_group_member_ids","removed_group_member_ids","failures"],"title":"GroupMemberSyncResults"},"GroupMemberSyncRequestDetail":{"type":"object","properties":{"request_id":{"type":"string","description":"Identifier for the sync request being reported on."},"group_id":{"type":"string","description":"Group whose roster was synced (`grp_*`)."},"accepted_at":{"type":"string","format":"date-time","description":"When Vitable accepted the sync request for processing (RFC 3339)."},"completed_at":{"type":["string","null"],"format":"date-time","description":"When processing finished (RFC 3339), or `null` while the sync is still in progress."},"results":{"oneOf":[{"$ref":"#/components/schemas/GroupMemberSyncResults"},{"type":"null"}],"description":"Outcome of the sync, or `null` until processing completes."}},"required":["request_id","group_id","accepted_at","completed_at","results"],"title":"GroupMemberSyncRequestDetail"},"GroupMemberSyncRequestDetailResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GroupMemberSyncRequestDetail","description":"The group member sync request, including per-member results."}},"required":["data"],"description":"Response containing a single group member sync request detail resource.","title":"GroupMemberSyncRequestDetailResponse"},"MemberSearch":{"type":"string","description":"Case-insensitive search across member name, email, and phone number; exact match on member id (prefixed or raw uuid)","title":"MemberSearch"},"MemberAddress":{"type":"object","properties":{"address_line_1":{"type":"string","description":"Primary street address"},"address_line_2":{"type":["string","null"],"description":"Secondary street address (apt, suite, etc.)"},"city":{"type":"string","description":"City name"},"state":{"$ref":"#/components/schemas/State","description":"Two-letter state code (e.g., CA, NY)\n\n* `AL` - Al\n* `AK` - Ak\n* `AZ` - Az\n* `AR` - Ar\n* `CA` - Ca\n* `CO` - Co\n* `CT` - Ct\n* `DC` - Dc\n* `DE` - De\n* `FL` - Fl\n* `GA` - Ga\n* `HI` - Hi\n* `ID` - Id\n* `IL` - Il\n* `IN` - In\n* `IA` - Ia\n* `KS` - Ks\n* `KY` - Ky\n* `LA` - La\n* `ME` - Me\n* `MD` - Md\n* `MA` - Ma\n* `MI` - Mi\n* `MN` - Mn\n* `MS` - Ms\n* `MO` - Mo\n* `MT` - Mt\n* `NE` - Ne\n* `NV` - Nv\n* `NH` - Nh\n* `NJ` - Nj\n* `NM` - Nm\n* `NY` - Ny\n* `NC` - Nc\n* `ND` - Nd\n* `OH` - Oh\n* `OK` - Ok\n* `OR` - Or\n* `PA` - Pa\n* `RI` - Ri\n* `SC` - Sc\n* `SD` - Sd\n* `TN` - Tn\n* `TX` - Tx\n* `UT` - Ut\n* `VT` - Vt\n* `VA` - Va\n* `WA` - Wa\n* `WI` - Wi\n* `WV` - Wv\n* `WY` - Wy\n* `PR` - Pr\n* `GU` - Gu\n* `AS` - As\n* `VI` - Vi\n* `MP` - Mp\n* `MH` - Mh\n* `PW` - Pw\n* `FM` - Fm\n* `AE` - Ae\n* `AA` - Aa\n* `AP` - Ap"},"zipcode":{"type":"string","description":"ZIP code (5 or 9 digit)"}},"required":["address_line_1","city","state","zipcode"],"title":"MemberAddress"},"MemberListItem":{"type":"object","properties":{"id":{"type":"string","description":"Unique member identifier with 'mbr_' prefix"},"first_name":{"type":"string","description":"Member's legal first name"},"last_name":{"type":"string","description":"Member's legal last name"},"email":{"type":["string","null"],"format":"email","description":"Email address"},"phone":{"type":["string","null"],"description":"Phone number (10-digit US domestic string)"},"address":{"oneOf":[{"$ref":"#/components/schemas/MemberAddress"},{"type":"null"}],"description":"Member's residential address"}},"required":["id","first_name","last_name"],"description":"A member in the organization's directory: identity, contact details, address, and join date.","title":"MemberListItem"},"MemberListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MemberListItem"},"description":"This page of members."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing member resources.","title":"MemberListResponse"},"MemberId":{"type":"string","description":"Unique member identifier (mbr_*)","title":"MemberId"},"MaritalStatus":{"type":"string","enum":["Single","Married"],"description":"* `Single` - Single\n* `Married` - Married","title":"MaritalStatus"},"MemberStatus":{"type":"string","enum":["onboarded","pending_onboarding"],"title":"MemberStatus"},"Member":{"type":"object","properties":{"id":{"type":"string","description":"Unique member identifier with 'mbr_' prefix"},"first_name":{"type":"string","description":"Member's legal first name"},"last_name":{"type":"string","description":"Member's legal last name"},"email":{"type":["string","null"],"format":"email","description":"Email address"},"phone":{"type":["string","null"],"description":"Phone number (10-digit US domestic string)"},"address":{"oneOf":[{"$ref":"#/components/schemas/MemberAddress"},{"type":"null"}],"description":"Member's residential address"},"name":{"type":"string","description":"Member's full legal name"},"middle_name":{"type":["string","null"],"description":"Member's legal middle name"},"suffix":{"oneOf":[{"$ref":"#/components/schemas/NameSuffix"},{"type":"null"}],"description":"Member's name suffix\n\n* `Sr` - Senior\n* `Jr` - Junior\n* `I` - First\n* `II` - Second\n* `III` - Third\n* `IV` - Fourth\n* `V` - Fifth"},"date_of_birth":{"type":"string","format":"date","description":"Date of birth (YYYY-MM-DD)"},"age":{"type":"integer","description":"Member's age in years, derived from date of birth"},"sex_at_birth":{"oneOf":[{"$ref":"#/components/schemas/SexAtBirth"},{"type":"null"}],"description":"Sex assigned at birth, if provided\n\n* `Male` - Male\n* `Female` - Female\n* `Other` - Other\n* `Unknown` - Unknown"},"gender":{"oneOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}],"description":"Member's gender identity\n\n* `Male` - Male\n* `Female` - Female\n* `Transgender` - Transgender\n* `Non-binary` - Non Binary\n* `Prefer not to respond` - Prefer Not To Respond"},"preferred_language":{"oneOf":[{"$ref":"#/components/schemas/PreferredLanguage"},{"type":"null"}],"description":"Member's preferred language code (e.g., en, es)\n\n* `en` - English\n* `es` - Spanish\n* `zh` - Chinese\n* `ru` - Russian\n* `sw` - Swahili\n* `th` - Thai"},"tobacco_status":{"type":["boolean","null"],"description":"Whether the member uses tobacco, if known"},"marital_status":{"oneOf":[{"$ref":"#/components/schemas/MaritalStatus"},{"type":"null"}],"description":"Member's marital status, if provided\n\n* `Single` - Single\n* `Married` - Married"},"status":{"$ref":"#/components/schemas/MemberStatus","description":"Member profile status (onboarded or pending onboarding)"}},"required":["id","first_name","last_name","name","date_of_birth","age","status"],"description":"A member's profile: identity, contact details, address, demographics, and onboarding status.","title":"Member"},"MemberResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Member","description":"The member record."}},"required":["data"],"description":"Response containing a single member resource.","title":"MemberResponse"},"Relationship":{"type":"string","enum":["Spouse","Child"],"description":"* `Spouse` - Spouse\n* `Child` - Child","title":"Relationship"},"MemberLegalDependent":{"type":"object","properties":{"member_id":{"type":"string","description":"The dependent's own member identifier with 'mbr_' prefix"},"primary_member_id":{"type":"string","description":"The primary member's identifier with 'mbr_' prefix"},"first_name":{"type":"string","description":"Dependent's first name"},"last_name":{"type":"string","description":"Dependent's last name"},"relationship":{"$ref":"#/components/schemas/Relationship","description":"Relationship of the dependent to the member (e.g., Spouse, Child)\n\n* `Spouse` - Spouse\n* `Child` - Child"},"date_of_birth":{"type":"string","format":"date","description":"Date of birth (YYYY-MM-DD)"},"age":{"type":"integer","description":"Dependent's age in years, derived from date of birth"},"sex_at_birth":{"oneOf":[{"$ref":"#/components/schemas/SexAtBirth"},{"type":"null"}],"description":"Sex assigned at birth, if provided\n\n* `Male` - Male\n* `Female` - Female\n* `Other` - Other\n* `Unknown` - Unknown"}},"required":["member_id","primary_member_id","first_name","last_name","relationship","date_of_birth","age"],"description":"Wire serializer for :class:`MemberLegalDependentDTO` (one legal-dependent row).","title":"MemberLegalDependent"},"MemberDependentsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MemberLegalDependent"},"description":"The member's legal dependents."}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of member dependents.","title":"MemberDependentsResponse"},"CreateMemberDependentAddressRequest":{"type":"object","properties":{"address_line_1":{"type":"string","minLength":1,"maxLength":255,"description":"Primary street address"},"address_line_2":{"type":["string","null"],"maxLength":255,"description":"Secondary street address"},"city":{"type":"string","minLength":1,"maxLength":255,"description":"City name"},"state":{"$ref":"#/components/schemas/State","description":"Two-letter state code\n\n* `AL` - AL\n* `AK` - AK\n* `AZ` - AZ\n* `AR` - AR\n* `CA` - CA\n* `CO` - CO\n* `CT` - CT\n* `DC` - DC\n* `DE` - DE\n* `FL` - FL\n* `GA` - GA\n* `HI` - HI\n* `ID` - ID\n* `IL` - IL\n* `IN` - IN\n* `IA` - IA\n* `KS` - KS\n* `KY` - KY\n* `LA` - LA\n* `ME` - ME\n* `MD` - MD\n* `MA` - MA\n* `MI` - MI\n* `MN` - MN\n* `MS` - MS\n* `MO` - MO\n* `MT` - MT\n* `NE` - NE\n* `NV` - NV\n* `NH` - NH\n* `NJ` - NJ\n* `NM` - NM\n* `NY` - NY\n* `NC` - NC\n* `ND` - ND\n* `OH` - OH\n* `OK` - OK\n* `OR` - OR\n* `PA` - PA\n* `RI` - RI\n* `SC` - SC\n* `SD` - SD\n* `TN` - TN\n* `TX` - TX\n* `UT` - UT\n* `VT` - VT\n* `VA` - VA\n* `WA` - WA\n* `WI` - WI\n* `WV` - WV\n* `WY` - WY\n* `PR` - PR\n* `GU` - GU\n* `AS` - AS\n* `VI` - VI\n* `MP` - MP\n* `MH` - MH\n* `PW` - PW\n* `FM` - FM\n* `AE` - AE\n* `AA` - AA\n* `AP` - AP"},"zipcode":{"type":"string","minLength":1,"maxLength":10,"description":"ZIP code"}},"required":["address_line_1","city","state","zipcode"],"title":"CreateMemberDependentAddressRequest"},"CreateMemberDependentRequest":{"type":"object","properties":{"first_name":{"type":"string","maxLength":256,"description":"Dependent's legal first name"},"last_name":{"type":"string","maxLength":256,"description":"Dependent's legal last name"},"suffix":{"oneOf":[{"$ref":"#/components/schemas/NameSuffix"},{"type":"null"}],"description":"Name suffix\n\n* `Sr` - Sr\n* `Jr` - Jr\n* `I` - I\n* `II` - II\n* `III` - III\n* `IV` - IV\n* `V` - V"},"date_of_birth":{"type":"string","format":"date","description":"Date of birth (YYYY-MM-DD); cannot be in the future"},"sex_at_birth":{"oneOf":[{"$ref":"#/components/schemas/SexAtBirth"},{"type":"null"}],"description":"Sex assigned at birth\n\n* `Male` - Male\n* `Female` - Female\n* `Other` - Other\n* `Unknown` - Unknown"},"gender":{"oneOf":[{"$ref":"#/components/schemas/Gender"},{"type":"null"}],"description":"Gender identity\n\n* `Male` - Male\n* `Female` - Female\n* `Transgender` - Transgender\n* `Non-binary` - Non-binary\n* `Prefer not to respond` - Prefer not to respond"},"email":{"type":["string","null"],"maxLength":256,"description":"Dependent's email address. Ignored for dependents under 18, and not changed for a dependent Vitable already has on file."},"phone":{"type":["string","null"],"maxLength":256,"description":"Dependent's 10-digit US phone number; formatting characters and a leading 1 are ignored. Ignored for dependents under 18, and not changed for a dependent Vitable already has on file."},"relationship":{"$ref":"#/components/schemas/Relationship","description":"Relationship of the dependent to the member\n\n* `Spouse` - Spouse\n* `Child` - Child"},"address":{"$ref":"#/components/schemas/CreateMemberDependentAddressRequest","description":"Dependent's residential address"}},"required":["first_name","last_name","date_of_birth","relationship","address"],"title":"CreateMemberDependentRequest"},"SavedMemberDependent":{"type":"object","properties":{"member_id":{"type":"string","description":"The dependent's own member identifier with 'mbr_' prefix"},"primary_member_id":{"type":"string","description":"The primary member's identifier with 'mbr_' prefix"},"first_name":{"type":"string","description":"Dependent's first name"},"last_name":{"type":"string","description":"Dependent's last name"},"relationship":{"$ref":"#/components/schemas/Relationship","description":"Relationship of the dependent to the member (e.g., Spouse, Child)\n\n* `Spouse` - Spouse\n* `Child` - Child"},"date_of_birth":{"type":"string","format":"date","description":"Date of birth (YYYY-MM-DD)"},"age":{"type":"integer","description":"Dependent's age in years, derived from date of birth"},"sex_at_birth":{"oneOf":[{"$ref":"#/components/schemas/SexAtBirth"},{"type":"null"}],"description":"Sex assigned at birth, if provided\n\n* `Male` - Male\n* `Female` - Female\n* `Other` - Other\n* `Unknown` - Unknown"},"legal_dependent_id":{"type":"string","description":"Identifier of the dependent relationship, with 'ldep_' prefix"},"created":{"type":"boolean","description":"True when the relationship was created by this request, false when an existing one was reused"}},"required":["member_id","primary_member_id","first_name","last_name","relationship","date_of_birth","age","legal_dependent_id","created"],"description":"Wire serializer for :class:`MemberLegalDependentDTO` (one legal-dependent row).","title":"SavedMemberDependent"},"SavedMemberDependentResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SavedMemberDependent"}},"required":["data"],"description":"Response containing a single saved member dependent resource.","title":"SavedMemberDependentResponse"},"MemberEmploymentsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Employee"},"description":"The member's employment records, one per employer."}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of member employments.","title":"MemberEmploymentsResponse"},"MemberEnrollment":{"type":"object","properties":{"id":{"type":"string","description":"Opaque, stable enrollment identifier used to target enrollment actions"},"employer_id":{"type":"string","description":"Exact employer identifier for this enrollment"},"benefit_plan_year_id":{"type":"string","description":"Exact benefit plan-year identifier for this enrollment"},"benefit_type":{"$ref":"#/components/schemas/Category","description":"High-level benefit grouping (e.g., Medical, Dental)\n\n* `Medical` - Medical\n* `Dental` - Dental\n* `Vision` - Vision\n* `Hospital` - Hospital"},"product_code":{"$ref":"#/components/schemas/ProductCode","description":"The benefit product this enrollment is for\n\n* `EBA` - Eba Mec\n* `VPC` - Vpc Enhanced\n* `VPC_CORE` - Vpc Core\n* `MEC` - Vpc Mec\n* `MEC2` - Mec2\n* `MEC_PLUS` - Mec Plus\n* `MVP` - Mvp\n* `MVP2` - Mvp2\n* `MVPSL` - Mvpsl\n* `MVPSL2` - Mvpsl2\n* `VD` - Dental\n* `VV` - Vision\n* `ICHRA` - Ichra\n* `ICHRA_PREMIUM_PLUS` - Ichra Premium Plus\n* `ICHRA_REIMBURSEMENT_ONLY` - Ichra Reimbursement Only"},"requires_qle_for_reissue":{"type":"boolean","description":"Whether a qualifying life event would be required to reissue this enrollment under the product and open-enrollment rule at the time this list was read"},"product_name":{"type":"string","description":"Display name of the benefit product"},"employer_name":{"type":"string","description":"Name of the employer the enrollment is through"},"carrier_name":{"type":["string","null"],"description":"Insurance carrier name; null when no active carrier period is resolvable"},"plan_name":{"type":["string","null"],"description":"Chosen benefit plan name; null unless the row is an election"},"tier_name":{"type":["string","null"],"description":"Chosen benefit plan tier name (e.g., Employee Only); null unless the row is an election"},"employee_deduction_in_cents":{"type":["integer","null"],"description":"Employee monthly payroll deduction in cents; null unless the row is an election"},"employer_contribution_in_cents":{"type":["integer","null"],"description":"Employer monthly contribution in cents; null unless the row is an election"},"premium_in_cents":{"type":["integer","null"],"description":"Total monthly plan premium in cents; null unless the row is an election"},"coverage_start":{"type":["string","null"],"format":"date","description":"Coverage window start date (YYYY-MM-DD)"},"coverage_end":{"type":["string","null"],"format":"date","description":"Coverage window end date (YYYY-MM-DD); null while coverage is open-ended"},"cancelled_date":{"type":["string","null"],"format":"date","description":"Earliest applicable coverage boundary (YYYY-MM-DD) when coverage was cancelled before its effective start; null unless the enrollment was cancelled"},"plan_year_coverage_end":{"type":["string","null"],"format":"date","description":"Benefit plan-year coverage end date (YYYY-MM-DD), distinct from this enrollment's coverage_end; null when the plan year is open-ended"},"issued_date":{"type":"string","format":"date","description":"Date the enrollment record was created (YYYY-MM-DD), the value Ops labels Issued on. Present on every row whatever the member answered, and distinct from `coverage_start`. It equals `enrollment_window_start` for a row issued once its open enrollment had already opened, and precedes it for a row issued ahead of open enrollment."},"enrolled_date":{"type":["string","null"],"format":"date","description":"Date the member enrolled (YYYY-MM-DD); null unless the row is an election"},"enrollment_window_start":{"type":"string","format":"date","description":"First date the member could answer this enrollment (YYYY-MM-DD). Open enrollment's start date for a row issued before open enrollment opened, otherwise the date the row was issued -- an enrollment is never answerable before it exists, so this is never earlier than `issued_date`."},"enrollment_window_end":{"type":["string","null"],"format":"date","description":"Enrollment / open-enrollment window end date (YYYY-MM-DD); null when open-ended"},"election_status":{"$ref":"#/components/schemas/PlanYearEnrollmentElectionStatus","description":"Where the member stands: `Enrolled` or `Waived` if they answered, otherwise `Pending` while their enrollment window is open and `Expired` once it has closed.\n\n* `Enrolled` - Enrolled\n* `Waived` - Waived\n* `Pending` - Pending\n* `Expired` - Expired"},"policy_status":{"oneOf":[{"$ref":"#/components/schemas/PlanYearEnrollmentPolicyStatus"},{"type":"null"}],"description":"Where the member's coverage stands: `Coverage Upcoming`, `Coverage Effective`, `Coverage Ended`, or `Cancelled`. Null unless the member enrolled.\n\n* `Coverage Upcoming` - Coverage Upcoming\n* `Coverage Effective` - Coverage Effective\n* `Coverage Ended` - Coverage Ended\n* `Cancelled` - Cancelled"},"in_last_month_of_coverage":{"type":"boolean","description":"True when today (ET) falls in the final month of the member's individual coverage (the earliest of termination, subscription end, plan-year end, and selected-plan end) or of the plan-year coverage window; drives end-of-coverage enrollment actions on the client."},"is_within_enrollment_window":{"type":"boolean","description":"True when today falls inside the enrollment window this member has to answer in; drives enrollment-action availability on the client."},"plan_year_ichra_affordability":{"oneOf":[{"$ref":"#/components/schemas/PlanYearIchraAffordability"},{"type":"null"}],"description":"Whether this ICHRA plan year was marked `Affordable` or `Not Affordable` when it was configured. A plan-year setting, not a calculation for this member. Null for non-ICHRA rows and for ICHRA plan years where it has not been set.\n\n* `Affordable` - Affordable\n* `Not Affordable` - Not Affordable"}},"required":["id","employer_id","benefit_plan_year_id","benefit_type","product_code","requires_qle_for_reissue","product_name","employer_name","cancelled_date","plan_year_coverage_end","issued_date","enrolled_date","enrollment_window_start","election_status","policy_status","in_last_month_of_coverage","is_within_enrollment_window","plan_year_ichra_affordability"],"description":"Wire serializer for :class:`MemberEnrollmentDTO` (one benefit enrollment row).","title":"MemberEnrollment"},"MemberEnrollmentsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MemberEnrollment"},"description":"The member's benefit enrollments."}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of member enrollments.","title":"MemberEnrollmentsResponse"},"HouseholdMemberRelationship":{"type":"string","enum":["Child","Spouse","Roommate","Other"],"description":"* `Child` - Child\n* `Spouse` - Spouse\n* `Roommate` - Roommate\n* `Other` - Other","title":"HouseholdMemberRelationship"},"HouseholdMemberType":{"type":"string","enum":["Account Holder","Dependent","Inactive"],"description":"* `Account Holder` - Account Holder\n* `Dependent` - Dependent\n* `Inactive` - Inactive","title":"HouseholdMemberType"},"HouseholdMember":{"type":"object","properties":{"member_id":{"type":"string","description":"Member identifier with 'mbr_' prefix"},"first_name":{"type":"string","description":"Household member's first name"},"last_name":{"type":"string","description":"Household member's last name"},"relationship":{"oneOf":[{"$ref":"#/components/schemas/HouseholdMemberRelationship"},{"type":"null"}],"description":"Relationship to the head of household; null for the account holder themselves\n\n* `Child` - Child\n* `Spouse` - Spouse\n* `Roommate` - Roommate\n* `Other` - Other"},"member_type":{"$ref":"#/components/schemas/HouseholdMemberType","description":"What this participant is to the household: `Account Holder`, `Dependent`, or `Inactive`.\n\n* `Account Holder` - Account Holder\n* `Dependent` - Dependent\n* `Inactive` - Inactive"},"date_of_birth":{"type":"string","format":"date","description":"Date of birth (YYYY-MM-DD)"},"household_admin_in":{"type":"boolean","description":"Whether this participant is a household admin (the account holder always is)"}},"required":["member_id","first_name","last_name","member_type","date_of_birth","household_admin_in"],"description":"Wire serializer for :class:`HouseholdMemberDTO` (one household participant).","title":"HouseholdMember"},"HouseholdMembersResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/HouseholdMember"},"description":"The members of the household."}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of the members of a member's household.","title":"HouseholdMembersResponse"},"CardType":{"type":"string","enum":["medical","dental","vision","rx"],"description":"* `medical` - medical\n* `dental` - dental\n* `vision` - vision\n* `rx` - rx","title":"CardType"},"DetailedAddress":{"type":"object","properties":{"address_line_1":{"type":"string"},"address_line_2":{"type":["string","null"]},"city":{"type":"string"},"zipcode":{"type":"string"},"state":{"$ref":"#/components/schemas/State"},"latitude":{"type":["number","null"],"format":"double"},"longitude":{"type":["number","null"],"format":"double"},"county_fips_code":{"type":["string","null"],"maxLength":5},"county_name":{"type":["string","null"],"maxLength":100}},"required":["address_line_1","city","zipcode","state"],"title":"DetailedAddress"},"BenefitPlanNetwork":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier for the network."},"name":{"type":"string","maxLength":256,"description":"Name of the network"},"logo":{"type":["string","null"],"description":"URL of the network's logo, or `null` if none is on file."},"address":{"$ref":"#/components/schemas/DetailedAddress","description":"Postal address of the provider network."},"edi":{"type":["string","null"],"maxLength":128,"description":"Network's EDI"},"website":{"type":"string","maxLength":256,"description":"Website of the network"},"phone":{"type":"string","description":"General contact phone number for the network."},"member_website":{"type":["string","null"],"maxLength":256,"description":"Website for members"},"member_phone":{"type":["string","null"],"description":"Phone number members should call for support."},"provider_website":{"type":["string","null"],"maxLength":256,"description":"Website for providers"},"provider_phone":{"type":["string","null"],"description":"Phone number providers should call for claims and eligibility."}},"required":["id","name","logo","address","website","phone","member_phone","provider_phone"],"title":"BenefitPlanNetwork"},"DigitalBenefitCard":{"type":"object","properties":{"card_type":{"$ref":"#/components/schemas/CardType","description":"Kind of card: medical, dental, vision, or rx\n\n* `medical` - medical\n* `dental` - dental\n* `vision` - vision\n* `rx` - rx"},"group_id":{"type":"string","description":"Group number printed on the card (the rx group id for an rx card)"},"group_member_id":{"type":"string","description":"Member id printed on the card (the Ventegra cardholder id for an rx card)"},"member_name":{"type":"string","description":"Name of the member the card is issued to"},"employer_name":{"type":["string","null"],"description":"Employer the card's coverage is through; null for an rx card without group info"},"plan_name":{"type":["string","null"],"description":"Benefit plan name on the card; null for a consumer-membership rx card"},"benefit_code":{"oneOf":[{"$ref":"#/components/schemas/ProductCode"},{"type":"null"}],"description":"Benefit code backing the card; null for a consumer-membership rx card, which has no enrollment\n\n* `EBA` - Eba Mec\n* `VPC` - Vpc Enhanced\n* `VPC_CORE` - Vpc Core\n* `MEC` - Vpc Mec\n* `MEC2` - Mec2\n* `MEC_PLUS` - Mec Plus\n* `MVP` - Mvp\n* `MVP2` - Mvp2\n* `MVPSL` - Mvpsl\n* `MVPSL2` - Mvpsl2\n* `VD` - Dental\n* `VV` - Vision\n* `ICHRA` - Ichra\n* `ICHRA_PREMIUM_PLUS` - Ichra Premium Plus\n* `ICHRA_REIMBURSEMENT_ONLY` - Ichra Reimbursement Only"},"network":{"oneOf":[{"$ref":"#/components/schemas/BenefitPlanNetwork"},{"type":"null"}],"description":"Provider network shown on the card; null for an rx card"},"claims_payer_display_name":{"type":["string","null"],"description":"Claims payer shown on the card"},"carrier_phone":{"type":["string","null"],"description":"Carrier phone number on the card; null for an rx card"},"carrier_website":{"type":["string","null"],"description":"Carrier website on the card; null for an rx card"},"plan_disclaimer":{"type":["string","null"],"description":"Plan-specific disclaimer text; null for an rx card"},"general_disclaimer":{"type":["string","null"],"description":"General disclaimer text; null for an rx card"},"nsa_table":{"type":"array","items":{"type":"array","items":{"type":"string"}},"description":"No Surprises Act cost-sharing table rendered on the card; empty for an rx card"}},"required":["card_type","group_id","group_member_id","member_name","nsa_table"],"description":"Wire serializer for :class:`DigitalBenefitCardDTO` (one benefit ID card).","title":"DigitalBenefitCard"},"MemberDigitalBenefitCardsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DigitalBenefitCard"},"description":"The member's digital benefit cards."}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of member digital benefit cards.","title":"MemberDigitalBenefitCardsResponse"},"Status":{"type":"string","enum":["approved","denied","pending"],"description":"Optional. Filter to a single QLE status; omit to return all statuses.","title":"Status"},"QualifyingLifeEventType":{"type":"string","enum":["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"],"description":"* `lost_job_based_coverage` - lost_job_based_coverage\n* `aged_off_parent_plan` - aged_off_parent_plan\n* `lost_medicaid_chip_medicare` - lost_medicaid_chip_medicare\n* `lost_decertified_individual_plan` - lost_decertified_individual_plan\n* `married` - married\n* `divorced` - divorced\n* `had_baby` - had_baby\n* `adopted_child` - adopted_child\n* `foster_care_placement` - foster_care_placement\n* `death_of_spouse_or_dependent` - death_of_spouse_or_dependent\n* `court_ordered` - court_ordered\n* `moved_to_new_coverage_area` - moved_to_new_coverage_area\n* `moved_to_us` - moved_to_us\n* `moved_to_or_from_school_housing` - moved_to_or_from_school_housing\n* `moved_to_or_from_seasonal_work_housing` - moved_to_or_from_seasonal_work_housing\n* `became_us_citizen` - became_us_citizen\n* `left_incarceration` - left_incarceration\n* `gained_tribal_status` - gained_tribal_status\n* `started_or_ended_americorps_service` - started_or_ended_americorps_service\n* `new_child` - new_child\n* `other` - other","title":"QualifyingLifeEventType"},"QualifyingLifeEventStatus":{"type":"string","enum":["pending","approved","denied"],"description":"* `pending` - Pending\n* `approved` - Approved\n* `denied` - Denied","title":"QualifyingLifeEventStatus"},"MemberQualifyingLifeEvent":{"type":"object","properties":{"id":{"type":"string","description":"Opaque qualifying life event identifier"},"event_type":{"$ref":"#/components/schemas/QualifyingLifeEventType","description":"The member-submitted qualifying life event type\n\n* `lost_job_based_coverage` - Losing job-based health insurance\n* `aged_off_parent_plan` - Aging off a parent's plan at age 26\n* `lost_medicaid_chip_medicare` - Losing Medicaid, CHIP, or Medicare eligibility\n* `lost_decertified_individual_plan` - Losing individual coverage because a plan was decertified\n* `married` - Getting married\n* `divorced` - Getting divorced or legally separated\n* `had_baby` - Having a baby\n* `adopted_child` - Adopting a child\n* `foster_care_placement` - Foster-care placement\n* `death_of_spouse_or_dependent` - Death of a covered spouse or dependent\n* `court_ordered` - Court order to add a dependent\n* `moved_to_new_coverage_area` - Moving to a new ZIP code, county, or state where different plans are available\n* `moved_to_us` - Moving to the U.S. from another country\n* `moved_to_or_from_school_housing` - Moving to or from school housing\n* `moved_to_or_from_seasonal_work_housing` - Moving to or from housing for seasonal work\n* `became_us_citizen` - Becoming a U.S. citizen\n* `left_incarceration` - Leaving incarceration\n* `gained_tribal_status` - Gaining status as a member of a federally recognized tribe or Alaska Native corporation\n* `started_or_ended_americorps_service` - Starting or ending AmeriCorps service\n* `new_child` - New child\n* `other` - Other"},"event_type_label":{"type":"string","description":"Human-readable label for event_type"},"other_event":{"type":["string","null"],"description":"Custom event description when event_type is Other; otherwise normally null"},"status":{"$ref":"#/components/schemas/QualifyingLifeEventStatus","description":"Review status of the qualifying life event\n\n* `pending` - Pending\n* `approved` - Approved\n* `denied` - Denied"},"submitted_at":{"type":"string","format":"date-time","description":"When the member submitted the event"}},"required":["id","event_type","event_type_label","other_event","status","submitted_at"],"title":"MemberQualifyingLifeEvent"},"MemberQualifyingLifeEventListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MemberQualifyingLifeEvent"},"description":"This page of qualifying life events."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing member qualifying life event resources.","title":"MemberQualifyingLifeEventListResponse"},"MemberEnrollmentAuditOperation":{"type":"string","enum":["enrolled","terminated","reissued"],"description":"* `enrolled` - Enrolled\n* `terminated` - Terminated\n* `reissued` - Reissued","title":"MemberEnrollmentAuditOperation"},"ActorType":{"type":"string","enum":["user","organization_api_key"],"description":"* `user` - User\n* `organization_api_key` - Organization API Key","title":"ActorType"},"MemberEnrollmentAuditActor":{"type":"object","properties":{"actor_type":{"$ref":"#/components/schemas/ActorType"},"display_name":{"type":"string","description":"Member self-service, user email, or organization name"}},"required":["actor_type","display_name"],"title":"MemberEnrollmentAuditActor"},"MemberEnrollmentAudit":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Critical operation audit identifier"},"enrollment_id":{"type":"string","description":"Opaque, stable enrollment identifier for this audit"},"operation":{"$ref":"#/components/schemas/MemberEnrollmentAuditOperation"},"actor":{"$ref":"#/components/schemas/MemberEnrollmentAuditActor"},"reason":{"type":"string"},"ticket_number":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time","description":"When the operation was recorded"},"product_name":{"type":["string","null"]},"plan_name":{"type":["string","null"]},"tier_name":{"type":["string","null"]},"employer_name":{"type":["string","null"]},"qualifying_event_label":{"type":["string","null"]}},"required":["id","enrollment_id","operation","actor","reason","ticket_number","created_at","product_name","plan_name","tier_name","employer_name","qualifying_event_label"],"title":"MemberEnrollmentAudit"},"MemberEnrollmentAuditListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MemberEnrollmentAudit"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"description":"Paginated list response containing member enrollment audit resources.","title":"MemberEnrollmentAuditListResponse"},"MemberIchraPaymentAccount":{"type":"object","properties":{"id":{"type":"string","description":"The payment account identifier with 'pyac_' prefix"},"employer_id":{"type":["string","null"],"description":"The employer's identifier with 'empr_' prefix"},"employer_name":{"type":["string","null"],"description":"Name of the employer this payment account belongs to"},"account_number":{"type":["string","null"],"description":"The member's deposit account number"},"routing_number":{"type":["string","null"],"description":"The member's deposit account routing number"},"card_provisioned_in":{"type":"boolean","description":"Whether a debit card has been provisioned, and so whether a card reveal can be requested"},"current_balance_in_cents":{"type":["integer","null"],"description":"Current balance held for the member, in cents"},"latest_payment_in_cents":{"type":["integer","null"],"description":"Most recent credit posted to the member's account, in cents"},"last_payment_date":{"type":["string","null"],"format":"date","description":"Date the most recent credit posted (YYYY-MM-DD)"},"as_of":{"type":"string","format":"date-time","description":"When these values were read from the payment provider"}},"required":["id","employer_id","employer_name","account_number","routing_number","card_provisioned_in","current_balance_in_cents","latest_payment_in_cents","last_payment_date","as_of"],"title":"MemberIchraPaymentAccount"},"MemberIchraPaymentAccountsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MemberIchraPaymentAccount"}}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of member ichra payment accounts.","title":"MemberIchraPaymentAccountsResponse"},"PaymentAccountId":{"type":"string","title":"PaymentAccountId"},"CardEmbedSession":{"type":"object","properties":{"embed_url":{"type":"string","description":"URL to load as the reveal iframe source. Single use."},"expires_at":{"type":"string","format":"date-time","description":"When the session stops being accepted"}},"required":["embed_url","expires_at"],"title":"CardEmbedSession"},"CardEmbedSessionResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CardEmbedSession"}},"required":["data"],"description":"Response containing a single card embed session resource.","title":"CardEmbedSessionResponse"},"CreateMemberQualifyingLifeEventRequest":{"type":"object","properties":{"event_type":{"$ref":"#/components/schemas/QualifyingLifeEventType","description":"The qualifying life event reason. `new_child` is a historical value and is not accepted when creating a new event.\n\n* `lost_job_based_coverage` - lost_job_based_coverage\n* `aged_off_parent_plan` - aged_off_parent_plan\n* `lost_medicaid_chip_medicare` - lost_medicaid_chip_medicare\n* `lost_decertified_individual_plan` - lost_decertified_individual_plan\n* `married` - married\n* `divorced` - divorced\n* `had_baby` - had_baby\n* `adopted_child` - adopted_child\n* `foster_care_placement` - foster_care_placement\n* `death_of_spouse_or_dependent` - death_of_spouse_or_dependent\n* `court_ordered` - court_ordered\n* `moved_to_new_coverage_area` - moved_to_new_coverage_area\n* `moved_to_us` - moved_to_us\n* `moved_to_or_from_school_housing` - moved_to_or_from_school_housing\n* `moved_to_or_from_seasonal_work_housing` - moved_to_or_from_seasonal_work_housing\n* `became_us_citizen` - became_us_citizen\n* `left_incarceration` - left_incarceration\n* `gained_tribal_status` - gained_tribal_status\n* `started_or_ended_americorps_service` - started_or_ended_americorps_service\n* `new_child` - new_child\n* `other` - other"},"other_event":{"type":["string","null"],"maxLength":128,"description":"Free-text description of the event; required when event_type is 'other'"}},"required":["event_type"],"title":"CreateMemberQualifyingLifeEventRequest"},"MemberQualifyingLifeEventDetailResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/MemberQualifyingLifeEvent"}},"required":["data"],"description":"Response containing a single member qualifying life event detail resource.","title":"MemberQualifyingLifeEventDetailResponse"},"QualifyingLifeEventTypeOption":{"type":"object","properties":{"event_type":{"$ref":"#/components/schemas/QualifyingLifeEventType","description":"The qualifying life event type value to submit when creating an event\n\n* `lost_job_based_coverage` - Losing job-based health insurance\n* `aged_off_parent_plan` - Aging off a parent's plan at age 26\n* `lost_medicaid_chip_medicare` - Losing Medicaid, CHIP, or Medicare eligibility\n* `lost_decertified_individual_plan` - Losing individual coverage because a plan was decertified\n* `married` - Getting married\n* `divorced` - Getting divorced or legally separated\n* `had_baby` - Having a baby\n* `adopted_child` - Adopting a child\n* `foster_care_placement` - Foster-care placement\n* `death_of_spouse_or_dependent` - Death of a covered spouse or dependent\n* `court_ordered` - Court order to add a dependent\n* `moved_to_new_coverage_area` - Moving to a new ZIP code, county, or state where different plans are available\n* `moved_to_us` - Moving to the U.S. from another country\n* `moved_to_or_from_school_housing` - Moving to or from school housing\n* `moved_to_or_from_seasonal_work_housing` - Moving to or from housing for seasonal work\n* `became_us_citizen` - Becoming a U.S. citizen\n* `left_incarceration` - Leaving incarceration\n* `gained_tribal_status` - Gaining status as a member of a federally recognized tribe or Alaska Native corporation\n* `started_or_ended_americorps_service` - Starting or ending AmeriCorps service\n* `new_child` - New child\n* `other` - Other"},"label":{"type":"string","description":"Human-readable label for the event type"},"group":{"type":"string","description":"Display-group heading the event type belongs under"}},"required":["event_type","label","group"],"title":"QualifyingLifeEventTypeOption"},"QualifyingLifeEventTypesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/QualifyingLifeEventTypeOption"}}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of qualifying life event types.","title":"QualifyingLifeEventTypesResponse"},"OrganizationType":{"type":"string","enum":["BROKERAGE","TPA","GENERAL_AGENT","CHANNEL_PARTNER","CONSULTING_FIRM","API_PLATFORM"],"description":"* `BROKERAGE` - Brokerage\n* `TPA` - TPA\n* `GENERAL_AGENT` - General Agent\n* `CHANNEL_PARTNER` - Channel Partner\n* `CONSULTING_FIRM` - Consulting Firm\n* `API_PLATFORM` - API Platform","title":"OrganizationType"},"IdpProvider":{"type":"string","enum":["workos","vitable"],"description":"* `workos` - WorkOS\n* `vitable` - Vitable","title":"IdpProvider"},"OrganizationUserRole":{"type":"string","enum":["ADMIN","OPERATIONS","SALES","ENROLLMENT_AGENT"],"description":"* `ADMIN` - Admin\n* `OPERATIONS` - Operations\n* `SALES` - Sales\n* `ENROLLMENT_AGENT` - Enrollment Agent","title":"OrganizationUserRole"},"OrganizationMembership":{"type":"object","properties":{"id":{"type":"string","description":"Prefixed organization identifier (`org_<base64-encoded-uuid>`)."},"name":{"type":"string","description":"Human-readable organization name."},"type":{"oneOf":[{"$ref":"#/components/schemas/OrganizationType"},{"type":"null"}],"description":"Partner type (e.g. BROKERAGE, TPA).\n\n* `BROKERAGE` - Brokerage\n* `TPA` - TPA\n* `GENERAL_AGENT` - General Agent\n* `CHANNEL_PARTNER` - Channel Partner\n* `CONSULTING_FIRM` - Consulting Firm\n* `API_PLATFORM` - API Platform"},"idp_org_id":{"type":["string","null"],"description":"IdP-issued tenant id (WorkOS org id)."},"idp_provider":{"oneOf":[{"$ref":"#/components/schemas/IdpProvider"},{"type":"null"}],"description":"IdP that minted idp_org_id (e.g. 'workos').\n\n* `workos` - WorkOS\n* `vitable` - Vitable"},"super_in":{"type":"boolean","description":"Whether this organization reads across every organization."},"role":{"$ref":"#/components/schemas/OrganizationUserRole","description":"The caller's role in this organization.\n\n* `ADMIN` - Admin\n* `OPERATIONS` - Operations\n* `SALES` - Sales\n* `ENROLLMENT_AGENT` - Enrollment Agent"}},"required":["id","name","type","idp_org_id","idp_provider","super_in","role"],"title":"OrganizationMembership"},"OrganizationsListResponse":{"type":"object","properties":{"organizations":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationMembership"},"description":"This page of organizations."},"total":{"type":"integer","description":"Total number of organizations the caller belongs to."}},"required":["organizations","total"],"description":"Envelope for the caller's organization memberships (paginated).","title":"OrganizationsListResponse"},"Plan":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the plan (`plan_*`)."},"name":{"type":"string","description":"Human-readable plan name as shown to members."}},"required":["id","name"],"title":"Plan"},"PlanListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Plan"},"description":"This page of plans."},"pagination":{"$ref":"#/components/schemas/Pagination","description":"Page metadata. Request the next page by incrementing `page`."}},"required":["data","pagination"],"description":"Paginated list response containing plan resources.","title":"PlanListResponse"},"CarrierApplicationId":{"type":"string","title":"CarrierApplicationId"},"CarrierApplicationEnrollmentChannel":{"type":"string","enum":["healthsherpa_api","healthsherpa_deeplink","direct_to_carrier"],"description":"* `healthsherpa_api` - Healthsherpa Api\n* `healthsherpa_deeplink` - Healthsherpa Deeplink\n* `direct_to_carrier` - Direct To Carrier","title":"CarrierApplicationEnrollmentChannel"},"CarrierApplicationAssignmentStatus":{"type":"string","enum":["confirmed","pending"],"description":"* `confirmed` - Confirmed\n* `pending` - Pending","title":"CarrierApplicationAssignmentStatus"},"CarrierApplicationPendingAssignmentChange":{"type":"object","properties":{"agent_id":{"type":["string","null"],"description":"The enrollment agent `enat_<...>` the proposed route would assign the work to."},"enrollment_channel":{"oneOf":[{"$ref":"#/components/schemas/CarrierApplicationEnrollmentChannel"},{"type":"null"}],"description":"The channel the proposed route would process the application through.\n\n* `healthsherpa_api` - Healthsherpa Api\n* `healthsherpa_deeplink` - Healthsherpa Deeplink\n* `direct_to_carrier` - Direct To Carrier"}},"required":["agent_id","enrollment_channel"],"title":"CarrierApplicationPendingAssignmentChange"},"CarrierApplicationAssignmentState":{"type":"object","properties":{"agency_id":{"type":["string","null"],"description":"The enrollment agency `enag_<...>` responsible for the application. Null when unassigned."},"agent_id":{"type":["string","null"],"description":"The enrollment agent `enat_<...>` who owns the work. Null when unassigned."},"status":{"$ref":"#/components/schemas/CarrierApplicationAssignmentStatus","description":"`confirmed` when the route above is authoritative, `pending` while a proposed change awaits confirmation. The confirmed route stays authoritative either way.\n\n* `confirmed` - Confirmed\n* `pending` - Pending"},"pending_change":{"oneOf":[{"$ref":"#/components/schemas/CarrierApplicationPendingAssignmentChange"},{"type":"null"}],"description":"The proposed route change, or null when there is none."}},"required":["agency_id","agent_id","status","pending_change"],"title":"CarrierApplicationAssignmentState"},"CarrierApplicationAgentOfRecord":{"type":"object","properties":{"agent_id":{"type":["string","null"],"description":"The enrollment agent `enat_<...>` attributed to the carrier as agent of record."}},"required":["agent_id"],"title":"CarrierApplicationAgentOfRecord"},"CarrierApplicationStatus":{"type":"string","enum":["not_started","in_progress","submitted","submission_failed","cancelled"],"description":"* `not_started` - Not Started\n* `in_progress` - In Progress\n* `submitted` - Submitted\n* `submission_failed` - Submission Failed\n* `cancelled` - Cancelled","title":"CarrierApplicationStatus"},"CarrierDocumentStatus":{"type":"string","enum":["unknown","not_required","required","submitted","under_review","rejected","satisfied"],"description":"* `unknown` - Unknown\n* `not_required` - Not Required\n* `required` - Required\n* `submitted` - Submitted\n* `under_review` - Under Review\n* `rejected` - Rejected\n* `satisfied` - Satisfied","title":"CarrierDocumentStatus"},"CarrierCoverageStatus":{"type":"string","enum":["not_submitted","pending_effectuation","active","cancelled","terminated"],"description":"* `not_submitted` - Not Submitted\n* `pending_effectuation` - Pending Effectuation\n* `active` - Active\n* `cancelled` - Cancelled\n* `terminated` - Terminated","title":"CarrierCoverageStatus"},"CarrierBinderStatus":{"type":"string","enum":["unknown","not_applicable","payment_required","pending_confirmation","confirmed"],"description":"* `unknown` - Unknown\n* `not_applicable` - Not Applicable\n* `payment_required` - Payment Required\n* `pending_confirmation` - Pending Confirmation\n* `confirmed` - Confirmed","title":"CarrierBinderStatus"},"CarrierApplicationStatuses":{"type":"object","properties":{"application":{"$ref":"#/components/schemas/CarrierApplicationStatus","description":"How far the application itself has got.\n\n* `not_started` - Not Started\n* `in_progress` - In Progress\n* `submitted` - Submitted\n* `submission_failed` - Submission Failed\n* `cancelled` - Cancelled"},"documents":{"$ref":"#/components/schemas/CarrierDocumentStatus","description":"Where the supporting documents stand.\n\n* `unknown` - Unknown\n* `not_required` - Not Required\n* `required` - Required\n* `submitted` - Submitted\n* `under_review` - Under Review\n* `rejected` - Rejected\n* `satisfied` - Satisfied"},"coverage":{"$ref":"#/components/schemas/CarrierCoverageStatus","description":"Where the resulting policy stands.\n\n* `not_submitted` - Not Submitted\n* `pending_effectuation` - Pending Effectuation\n* `active` - Active\n* `cancelled` - Cancelled\n* `terminated` - Terminated"},"binder":{"$ref":"#/components/schemas/CarrierBinderStatus","description":"Where the binder payment stands.\n\n* `unknown` - Unknown\n* `not_applicable` - Not Applicable\n* `payment_required` - Payment Required\n* `pending_confirmation` - Pending Confirmation\n* `confirmed` - Confirmed"}},"required":["application","documents","coverage","binder"],"title":"CarrierApplicationStatuses"},"CarrierApplicationFollowUpReason":{"type":"string","enum":["missing_agent","missing_agent_of_record","inactive_agent_of_record","agent_of_record_agency_mismatch","invalid_agent_of_record_identity","missing_npn","missing_healthsherpa_agent_slug","invalid_npn","npn_validation_indeterminate","assignment_coordination_pending","assignment_coordination_failed","routing_evidence_conflict","application_validation","manual_submission_required","unsupported_signed_evidence","submission_failed","supporting_document_rejected","supporting_document_required","payment_setup_required","stale_pending","manual_enrollment_not_started","manual_documents_required","manual_binder_required","manual_submission_failed","manual_status_stale","multiple_provider_matches","create_outcome_unknown","submission_reconciliation_stale","provider_unavailable","provider_action_rejected","provider_action_actor_revoked","provider_state_drift","provider_state_uncertain","applicant_identity_ambiguous"],"description":"* `missing_agent` - Missing Agent\n* `missing_agent_of_record` - Missing Agent Of Record\n* `inactive_agent_of_record` - Inactive Agent Of Record\n* `agent_of_record_agency_mismatch` - Agent Of Record Agency Mismatch\n* `invalid_agent_of_record_identity` - Invalid Agent Of Record Identity\n* `missing_npn` - Missing Npn\n* `missing_healthsherpa_agent_slug` - Missing Healthsherpa Agent Slug\n* `invalid_npn` - Invalid Npn\n* `npn_validation_indeterminate` - Npn Validation Indeterminate\n* `assignment_coordination_pending` - Assignment Coordination Pending\n* `assignment_coordination_failed` - Assignment Coordination Failed\n* `routing_evidence_conflict` - Routing Evidence Conflict\n* `application_validation` - Application Validation\n* `manual_submission_required` - Manual Submission Required\n* `unsupported_signed_evidence` - Unsupported Signed Evidence\n* `submission_failed` - Submission Failed\n* `supporting_document_rejected` - Supporting Document Rejected\n* `supporting_document_required` - Supporting Document Required\n* `payment_setup_required` - Payment Setup Required\n* `stale_pending` - Stale Pending\n* `manual_enrollment_not_started` - Manual Enrollment Not Started\n* `manual_documents_required` - Manual Documents Required\n* `manual_binder_required` - Manual Binder Required\n* `manual_submission_failed` - Manual Submission Failed\n* `manual_status_stale` - Manual Status Stale\n* `multiple_provider_matches` - Multiple Provider Matches\n* `create_outcome_unknown` - Create Outcome Unknown\n* `submission_reconciliation_stale` - Submission Reconciliation Stale\n* `provider_unavailable` - Provider Unavailable\n* `provider_action_rejected` - Provider Action Rejected\n* `provider_action_actor_revoked` - Provider Action Actor Revoked\n* `provider_state_drift` - Provider State Drift\n* `provider_state_uncertain` - Provider State Uncertain\n* `applicant_identity_ambiguous` - Applicant Identity Ambiguous","title":"CarrierApplicationFollowUpReason"},"CarrierApplicationFollowUpDetail":{"type":"object","properties":{"code":{"type":"string","description":"Stable error code, such as `missing_required_field`."},"field":{"type":["string","null"],"description":"Dot-path to the field to correct. Null when the error applies to the whole application."},"message":{"type":["string","null"],"description":"Human-readable description of the error. Display only; the wording may change."},"applicant_id":{"type":["string","null"],"description":"The applicant the error is about, matching `applicants[].applicant_id`. Null when the error is not about one person or the provider's applicant list cannot be matched."}},"required":["code","field","message","applicant_id"],"title":"CarrierApplicationFollowUpDetail"},"CarrierApplicationDetailFollowUp":{"type":"object","properties":{"required":{"type":"boolean","description":"Whether someone must act on this application."},"reason":{"oneOf":[{"$ref":"#/components/schemas/CarrierApplicationFollowUpReason"},{"type":"null"}],"description":"The single highest-priority reason to act, or null when none applies.\n\n* `missing_agent` - Missing Agent\n* `missing_agent_of_record` - Missing Agent Of Record\n* `inactive_agent_of_record` - Inactive Agent Of Record\n* `agent_of_record_agency_mismatch` - Agent Of Record Agency Mismatch\n* `invalid_agent_of_record_identity` - Invalid Agent Of Record Identity\n* `missing_npn` - Missing Npn\n* `missing_healthsherpa_agent_slug` - Missing Healthsherpa Agent Slug\n* `invalid_npn` - Invalid Npn\n* `npn_validation_indeterminate` - Npn Validation Indeterminate\n* `assignment_coordination_pending` - Assignment Coordination Pending\n* `assignment_coordination_failed` - Assignment Coordination Failed\n* `routing_evidence_conflict` - Routing Evidence Conflict\n* `application_validation` - Application Validation\n* `manual_submission_required` - Manual Submission Required\n* `unsupported_signed_evidence` - Unsupported Signed Evidence\n* `submission_failed` - Submission Failed\n* `supporting_document_rejected` - Supporting Document Rejected\n* `supporting_document_required` - Supporting Document Required\n* `payment_setup_required` - Payment Setup Required\n* `stale_pending` - Stale Pending\n* `manual_enrollment_not_started` - Manual Enrollment Not Started\n* `manual_documents_required` - Manual Documents Required\n* `manual_binder_required` - Manual Binder Required\n* `manual_submission_failed` - Manual Submission Failed\n* `manual_status_stale` - Manual Status Stale\n* `multiple_provider_matches` - Multiple Provider Matches\n* `create_outcome_unknown` - Create Outcome Unknown\n* `submission_reconciliation_stale` - Submission Reconciliation Stale\n* `provider_unavailable` - Provider Unavailable\n* `provider_action_rejected` - Provider Action Rejected\n* `provider_action_actor_revoked` - Provider Action Actor Revoked\n* `provider_state_drift` - Provider State Drift\n* `provider_state_uncertain` - Provider State Uncertain\n* `applicant_identity_ambiguous` - Applicant Identity Ambiguous"},"responsible_user_id":{"type":["string","null"],"description":"The user `usr_<...>` expected to act. Null when the application is unassigned. The responsible *organization* is not part of this representation: no organization-to-agency relationship exists yet (BPT-1627), and a field that can only ever be null is not a contract."},"details":{"type":"array","items":{"$ref":"#/components/schemas/CarrierApplicationFollowUpDetail"},"description":"What must be corrected or provided before the application can be submitted. Empty when nothing is outstanding."}},"required":["required","reason","responsible_user_id","details"],"title":"CarrierApplicationDetailFollowUp"},"CarrierApplicationActionRel":{"type":"string","enum":["assign","agent_of_record","correction","supporting_document","submit","deeplink","payment_redirect","status_update"],"description":"* `assign` - Assign\n* `agent_of_record` - Agent Of Record\n* `correction` - Correction\n* `supporting_document` - Supporting Document\n* `submit` - Submit\n* `deeplink` - Deeplink\n* `payment_redirect` - Payment Redirect\n* `status_update` - Status Update","title":"CarrierApplicationActionRel"},"CarrierApplicationAuthorizedAction":{"type":"object","properties":{"rel":{"$ref":"#/components/schemas/CarrierApplicationActionRel","description":"What the action does, as a stable relation name.\n\n* `assign` - Assign\n* `agent_of_record` - Agent Of Record\n* `correction` - Correction\n* `supporting_document` - Supporting Document\n* `submit` - Submit\n* `deeplink` - Deeplink\n* `payment_redirect` - Payment Redirect\n* `status_update` - Status Update"},"method":{"type":"string","description":"The HTTP method to call `href` with."},"href":{"type":"string","description":"The path to call, relative to the API root."}},"required":["rel","method","href"],"title":"CarrierApplicationAuthorizedAction"},"CarrierApplicationQueueMember":{"type":"object","properties":{"id":{"type":"string","description":"The enrolling member `mbr_<...>`."},"first_name":{"type":"string","description":"The member's first name."},"last_name":{"type":"string","description":"The member's last name."}},"required":["id","first_name","last_name"],"title":"CarrierApplicationQueueMember"},"CarrierApplicationQueueEmployer":{"type":"object","properties":{"id":{"type":"string","description":"The member's employer `empr_<...>`."},"name":{"type":"string","description":"The employer's display name."}},"required":["id","name"],"title":"CarrierApplicationQueueEmployer"},"CarrierApplicationQueuePlanYear":{"type":"object","properties":{"id":{"type":"string","description":"The benefit plan year `plyr_<...>` the enrollment belongs to."},"coverage_start":{"type":"string","format":"date-time","description":"When the plan year's coverage starts."},"coverage_end":{"type":["string","null"],"format":"date-time","description":"When the plan year's coverage ends, if set."}},"required":["id","coverage_start","coverage_end"],"title":"CarrierApplicationQueuePlanYear"},"CarrierApplicationQueuePlan":{"type":"object","properties":{"name":{"type":["string","null"],"description":"The selected plan's name."},"carrier_name":{"type":["string","null"],"description":"The selected plan's carrier."},"desired_effective_date":{"type":["string","null"],"format":"date","description":"The coverage start date the member asked the carrier for."}},"required":["name","carrier_name","desired_effective_date"],"title":"CarrierApplicationQueuePlan"},"CarrierApplicationQueueAssignee":{"type":"object","properties":{"agent_id":{"type":"string","description":"The assigned enrollment agent `enat_<...>`."},"first_name":{"type":["string","null"],"description":"The assigned agent's first name."},"last_name":{"type":["string","null"],"description":"The assigned agent's last name."}},"required":["agent_id","first_name","last_name"],"title":"CarrierApplicationQueueAssignee"},"CarrierApplicationQueueAgency":{"type":"object","properties":{"id":{"type":"string","description":"The responsible enrollment agency `enag_<...>`."},"name":{"type":["string","null"],"description":"The responsible agency's name."}},"required":["id","name"],"title":"CarrierApplicationQueueAgency"},"CarrierApplicationQueueContext":{"type":"object","properties":{"member":{"$ref":"#/components/schemas/CarrierApplicationQueueMember","description":"Who the application is for."},"employer":{"$ref":"#/components/schemas/CarrierApplicationQueueEmployer","description":"Who they work for."},"plan_year":{"$ref":"#/components/schemas/CarrierApplicationQueuePlanYear","description":"Which plan year they enrolled in."},"plan":{"$ref":"#/components/schemas/CarrierApplicationQueuePlan","description":"Which individual-market plan they chose."},"assignee":{"oneOf":[{"$ref":"#/components/schemas/CarrierApplicationQueueAssignee"},{"type":"null"}],"description":"Who owns the work, or null when unassigned or when the assigned agent no longer exists."},"agency":{"oneOf":[{"$ref":"#/components/schemas/CarrierApplicationQueueAgency"},{"type":"null"}],"description":"Which agency is responsible, or null when unassigned."}},"required":["member","employer","plan_year","plan","assignee","agency"],"title":"CarrierApplicationQueueContext"},"CarrierApplicationQuestionResponse":{"type":"object","properties":{"question_id":{"type":"string","description":"The stable carrier-question identifier."},"question_label":{"type":["string","null"],"description":"The carrier question's wording, as the member answered it."},"applicant_id":{"type":"string","description":"The enrollment-scoped applicant identifier."},"answer":{"type":"string","maxLength":1000,"description":"The finalized signed answer."}},"required":["question_id","question_label","applicant_id","answer"],"title":"CarrierApplicationQuestionResponse"},"CarrierApplicationSEPDocumentDeliveryStatus":{"type":"string","enum":["missing","prepared","attempted","uncertain","uploaded","failed"],"description":"* `missing` - Missing\n* `prepared` - Prepared\n* `attempted` - Attempted\n* `uncertain` - Uncertain\n* `uploaded` - Uploaded\n* `failed` - Failed","title":"CarrierApplicationSEPDocumentDeliveryStatus"},"CarrierApplicationApplicant":{"type":"object","properties":{"applicant_id":{"type":"string","description":"The stable Vitable enrollment applicant identifier."},"name":{"type":"string","description":"The applicant's display name from finalized signing evidence."},"date_of_birth":{"type":"string","format":"date","description":"The applicant's birth date for household disambiguation."},"relationship":{"type":["string","null"],"description":"Relationship to the primary applicant."},"current_values":{"type":["object","null"],"additionalProperties":{"type":"string","maxLength":1000}}},"required":["applicant_id","name","date_of_birth","relationship"],"title":"CarrierApplicationApplicant"},"CarrierPaymentInstructions":{"type":"object","properties":{"payment_required_with_submission":{"type":"boolean"},"payment_redirect_supported":{"type":"boolean"},"pay_by_phone_supported":{"type":"boolean"},"payment_phone_number":{"type":["string","null"]}},"required":["payment_required_with_submission","payment_redirect_supported","pay_by_phone_supported","payment_phone_number"],"title":"CarrierPaymentInstructions"},"CarrierReportedPaymentStatus":{"type":"string","enum":["unpaid_binder","paid_binder","paid","past_due"],"description":"* `unpaid_binder` - Unpaid Binder\n* `paid_binder` - Paid Binder\n* `paid` - Paid\n* `past_due` - Past Due","title":"CarrierReportedPaymentStatus"},"CarrierReportedPayment":{"type":"object","properties":{"payment_status":{"oneOf":[{"$ref":"#/components/schemas/CarrierReportedPaymentStatus"},{"type":"null"}]},"payment_status_updated_date":{"type":["string","null"],"format":"date"},"paid_through_date":{"type":["string","null"],"format":"date"},"past_due_member_responsibility_balance_due":{"type":["string","null"],"format":"decimal","pattern":"^-?\\d{0,10}(?:\\.\\d{0,2})?$"},"current_member_responsibility_balance_due":{"type":["string","null"],"format":"decimal","pattern":"^-?\\d{0,10}(?:\\.\\d{0,2})?$"},"autopay_indicator":{"type":["boolean","null"]}},"required":["payment_status","payment_status_updated_date","paid_through_date","past_due_member_responsibility_balance_due","current_member_responsibility_balance_due","autopay_indicator"],"title":"CarrierReportedPayment"},"CarrierApplicationPayment":{"type":"object","properties":{"instructions":{"oneOf":[{"$ref":"#/components/schemas/CarrierPaymentInstructions"},{"type":"null"}]},"carrier_report":{"oneOf":[{"$ref":"#/components/schemas/CarrierReportedPayment"},{"type":"null"}]}},"required":["instructions","carrier_report"],"title":"CarrierApplicationPayment"},"CarrierApplicationDetail":{"type":"object","properties":{"id":{"type":"string","description":"The carrier application `capp_<...>`."},"enrollment_id":{"type":"string","description":"The enrollment `enrl_<...>` this application belongs to."},"enrollment_channel":{"$ref":"#/components/schemas/CarrierApplicationEnrollmentChannel","description":"Which party or system is authoritative for this application's facts.\n\n* `healthsherpa_api` - Healthsherpa Api\n* `healthsherpa_deeplink` - Healthsherpa Deeplink\n* `direct_to_carrier` - Direct To Carrier"},"provider_reference":{"type":["string","null"],"description":"The carrier-side or provider-side identifier for this application. Null when there is none yet, and also when the caller is not authorized to read it."},"assignment":{"$ref":"#/components/schemas/CarrierApplicationAssignmentState","description":"Who the application is routed to."},"agent_of_record":{"$ref":"#/components/schemas/CarrierApplicationAgentOfRecord","description":"The retained carrier attribution."},"statuses":{"$ref":"#/components/schemas/CarrierApplicationStatuses","description":"The four stable status axes."},"follow_up":{"$ref":"#/components/schemas/CarrierApplicationDetailFollowUp","description":"Whether and why someone must act, and what to fix."},"authorized_actions":{"type":"array","items":{"$ref":"#/components/schemas/CarrierApplicationAuthorizedAction"},"description":"The actions this application currently permits, for this caller. `assign` is present only while the assignment endpoint would accept a change: not once processing has begun, not once the application is submitted, cancelled or terminal, not while an assignment change is already pending, and not for a caller that endpoint would refuse. `correction`, `supporting_document` and `submit` appear on the single-application response only, never on a queue row, and only while the carrier reports the action as available and no other provider action is in flight. `correction` is additionally absent once the application is submitted, effectuated, cancelled or terminated. `deeplink` is present only on a deeplink-routed application that has not yet been submitted and whose assigned agent has a HealthSherpa slug. `status_update` is present only while the caller can record status updates for the application."},"created_at":{"type":"string","format":"date-time","description":"When the application was created."},"updated_at":{"type":"string","format":"date-time","description":"When the application last changed."},"context":{"$ref":"#/components/schemas/CarrierApplicationQueueContext","description":"Who and what the application is about."},"current_residential_address":{"type":["object","null"],"additionalProperties":{"type":"string"}},"editable_carrier_questions":{"type":"array","items":{"$ref":"#/components/schemas/CarrierQuestion"}},"effective_carrier_question_responses":{"type":"array","items":{"$ref":"#/components/schemas/CarrierApplicationQuestionResponse"}},"unresolved_carrier_legal_requirements":{"type":"array","items":{"type":"string"}},"sep_letter_url":{"type":["string","null"],"format":"uri","description":"Signed SEP letter URL, valid for one hour; null when no letter exists."},"sep_upload_status":{"oneOf":[{"$ref":"#/components/schemas/CarrierApplicationSEPDocumentDeliveryStatus"},{"type":"null"}]},"manual_submission_required":{"type":"boolean"},"provider_confirmed_revision":{"type":"integer","minimum":0,"description":"Revision of the last provider-confirmed action."},"applicants":{"type":"array","items":{"$ref":"#/components/schemas/CarrierApplicationApplicant"},"description":"Finalized household applicants."},"carrier_question_responses":{"type":"array","items":{"$ref":"#/components/schemas/CarrierApplicationQuestionResponse"},"description":"Finalized signed carrier-question answers. Raw provider payloads are never returned."},"payment":{"$ref":"#/components/schemas/CarrierApplicationPayment","description":"Available ways to pay and the latest payment information reported by the carrier."}},"required":["id","enrollment_id","enrollment_channel","provider_reference","assignment","agent_of_record","statuses","follow_up","authorized_actions","created_at","updated_at","context","provider_confirmed_revision","applicants","carrier_question_responses","payment"],"title":"CarrierApplicationDetail"},"CarrierApplicationDetailResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CarrierApplicationDetail"}},"required":["data"],"description":"Response containing a single carrier application detail resource.","title":"CarrierApplicationDetailResponse"},"ChangeCarrierApplicationAgentOfRecordRequest":{"type":"object","properties":{"enrollment_agent_id":{"type":"string"}},"required":["enrollment_agent_id"],"title":"ChangeCarrierApplicationAgentOfRecordRequest"},"CarrierApplicationAssignment":{"type":"object","properties":{"id":{"type":"string"},"status":{"$ref":"#/components/schemas/CarrierApplicationAssignmentStatus"},"operational_agent_id":{"type":"string"}},"required":["id","status","operational_agent_id"],"title":"CarrierApplicationAssignment"},"CarrierApplicationAssignmentResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CarrierApplicationAssignment"}},"required":["data"],"title":"CarrierApplicationAssignmentResponse"},"AssignCarrierApplicationRequest":{"type":"object","properties":{"enrollment_agent_id":{"type":"string"}},"required":["enrollment_agent_id"],"title":"AssignCarrierApplicationRequest"},"CarrierApplicationDeeplink":{"type":"object","properties":{"carrier_application_id":{"type":"string"},"url":{"type":"string","format":"uri","description":"Provider-hosted enrollment session to open in the agent's browser."},"expires_at":{"type":["string","null"],"format":"date-time","description":"When the session stops working, when the provider states it. Null means unknown, not unlimited."}},"required":["carrier_application_id","url","expires_at"],"title":"CarrierApplicationDeeplink"},"CarrierApplicationDeeplinkResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CarrierApplicationDeeplink"}},"required":["data"],"title":"CarrierApplicationDeeplinkResponse"},"CarrierApplicationPaymentRedirectField":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"],"title":"CarrierApplicationPaymentRedirectField"},"CarrierApplicationPaymentRedirect":{"type":"object","properties":{"endpoint":{"type":"string","format":"uri","description":"URL of the carrier's payment page."},"method":{"type":"string","description":"HTTP method to use when submitting the form."},"fields":{"type":"array","items":{"$ref":"#/components/schemas/CarrierApplicationPaymentRedirectField"},"description":"Form fields to submit to the carrier."}},"required":["endpoint","method","fields"],"title":"CarrierApplicationPaymentRedirect"},"CarrierApplicationPaymentRedirectResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CarrierApplicationPaymentRedirect"}},"required":["data"],"title":"CarrierApplicationPaymentRedirectResponse"},"CarrierApplicationFailureCode":{"type":"string","enum":["application_validation_failed","supporting_document_rejected","payment_method_failed","carrier_submission_rejected","provider_error_unclassified"],"description":"* `application_validation_failed` - application_validation_failed\n* `supporting_document_rejected` - supporting_document_rejected\n* `payment_method_failed` - payment_method_failed\n* `carrier_submission_rejected` - carrier_submission_rejected\n* `provider_error_unclassified` - provider_error_unclassified","title":"CarrierApplicationFailureCode"},"RecordCarrierApplicationStatusUpdateRequest":{"type":"object","properties":{"application_status":{"oneOf":[{"$ref":"#/components/schemas/CarrierApplicationStatus"},{"type":"null"}],"description":"The application's status at the carrier.\n\n* `not_started` - not_started\n* `in_progress` - in_progress\n* `submitted` - submitted\n* `submission_failed` - submission_failed\n* `cancelled` - cancelled"},"last_failure_code":{"oneOf":[{"$ref":"#/components/schemas/CarrierApplicationFailureCode"},{"type":"null"}],"description":"Why the carrier rejected the application: `carrier_submission_rejected` or `provider_error_unclassified`. Only valid when `application_status` is `submission_failed`.\n\n* `application_validation_failed` - application_validation_failed\n* `supporting_document_rejected` - supporting_document_rejected\n* `payment_method_failed` - payment_method_failed\n* `carrier_submission_rejected` - carrier_submission_rejected\n* `provider_error_unclassified` - provider_error_unclassified"},"coverage_status":{"oneOf":[{"$ref":"#/components/schemas/CarrierCoverageStatus"},{"type":"null"}],"description":"The coverage status at the carrier.\n\n* `not_submitted` - not_submitted\n* `pending_effectuation` - pending_effectuation\n* `active` - active\n* `cancelled` - cancelled\n* `terminated` - terminated"},"document_status":{"oneOf":[{"$ref":"#/components/schemas/CarrierDocumentStatus"},{"type":"null"}],"description":"The supporting-document status at the carrier.\n\n* `unknown` - unknown\n* `not_required` - not_required\n* `required` - required\n* `submitted` - submitted\n* `under_review` - under_review\n* `rejected` - rejected\n* `satisfied` - satisfied"},"binder_status":{"oneOf":[{"$ref":"#/components/schemas/CarrierBinderStatus"},{"type":"null"}],"description":"The binder payment status at the carrier.\n\n* `unknown` - unknown\n* `not_applicable` - not_applicable\n* `payment_required` - payment_required\n* `pending_confirmation` - pending_confirmation\n* `confirmed` - confirmed"},"external_application_reference":{"type":["string","null"],"minLength":1,"maxLength":256,"description":"The carrier's reference for the application."},"observed_at":{"type":"string","format":"date-time","description":"When the carrier reported this status."}},"required":["observed_at"],"title":"RecordCarrierApplicationStatusUpdateRequest"},"CarrierApplicationCarrier":{"type":"object","properties":{"key":{"type":"string","description":"Normalized carrier key. Pass it as `carrier_key` to filter the queue."},"name":{"type":"string","description":"The most-used spelling of the carrier's name in the caller's queue."}},"required":["key","name"],"title":"CarrierApplicationCarrier"},"CarrierApplicationCarriersResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CarrierApplicationCarrier"}}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of carrier application carriers.","title":"CarrierApplicationCarriersResponse"},"OrganizationDomain":{"type":"object","properties":{"id":{"type":"string","description":"Prefixed domain-claim identifier (`orgdom_<base64-encoded-uuid>`)."},"domain":{"type":"string","description":"The claimed email domain, lowercased (e.g. `acme.com`)."},"verified":{"type":"boolean","description":"Whether Vitable has confirmed the organization owns this domain. Only a verified domain auto-joins new users; a pending claim grants nothing."},"created":{"type":["string","null"],"format":"date-time","description":"When the claim was requested."}},"required":["id","domain","verified","created"],"title":"OrganizationDomain"},"OrganizationDomainsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationDomain"}}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of organization domains.","title":"OrganizationDomainsResponse"},"RequestOrganizationDomainRequest":{"type":"object","properties":{"domain":{"type":"string","maxLength":253,"description":"Bare email domain to claim, without the local part — `acme.com`, not `jane@acme.com`. Matching is exact, so `mail.acme.com` is a separate claim."}},"required":["domain"],"title":"RequestOrganizationDomainRequest"},"OrganizationDomainResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OrganizationDomain"}},"required":["data"],"description":"Response containing a single organization domain resource.","title":"OrganizationDomainResponse"},"OrganizationDomainId":{"type":"string","description":"Unique organization domain claim identifier (orgdom_*)","title":"OrganizationDomainId"},"OrganizationUserInvitation":{"type":"object","properties":{"id":{"type":"string","description":"Identity-provider invitation id."},"email":{"type":"string","format":"email","description":"Address the invitation was sent to."},"state":{"type":"string","description":"Invitation state (pending / accepted / expired / revoked)."},"expires_at":{"type":"string","format":"date-time","description":"When the invitation stops being redeemable."}},"required":["id","email","state","expires_at"],"title":"OrganizationUserInvitation"},"OrganizationUserInvitationsResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationUserInvitation"}}},"required":["data"],"description":"Unpaginated ``{\"data\": [...]}`` list of organization user invitations.","title":"OrganizationUserInvitationsResponse"},"InviteOrganizationUserRequest":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Address to invite. Any domain is accepted — this is the only way to add a teammate whose email domain the organization does not claim. For consumer domains the recipient must sign up with exactly this address."}},"required":["email"],"title":"InviteOrganizationUserRequest"},"OrganizationUserInvitationResponse":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OrganizationUserInvitation"}},"required":["data"],"description":"Response containing a single organization user invitation resource.","title":"OrganizationUserInvitationResponse"},"InvitationId":{"type":"string","description":"Identity-provider invitation id","title":"InvitationId"}},"securitySchemes":{"APIKeyAuth":{"type":"http","scheme":"bearer","description":"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."}}}}