client.auth.issue_access_token(...) -> AccessTokenResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.auth.issue_access_token( grant_type="client_credentials", )
-
-
-
grant_type:
GrantTypeToken issuance flow. Currently only 'client_credentials' supported.
client_credentials- client_credentials
-
bound_entity:
typing.Optional[BoundEntity]β Optional entity to bind the token to for scoped access
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employees.get(...) -> EmployeeResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employees.get( employee_id="empl_abc123def456", )
-
-
-
employee_id:
EmployeeIdβ Unique employee identifier (empl_*)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employees.update(...) -> EmployeeResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment import datetime client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employees.update( employee_id="empl_abc123def456", employee_class="Full Time", start_date=datetime.date.fromisoformat("2023-01-15"), compensation_type="Salary", effective_date=datetime.date.fromisoformat("2023-03-01"), )
-
-
-
employee_id:
EmployeeIdβ Unique employee identifier (empl_*)
-
effective_date:
datetime.dateβ Past or present date applied to each tracked employment field included in this request
-
email:
typing.Optional[str]β Email address
-
phone:
typing.Optional[str]β Phone number
-
gender:
typing.Optional[Gender]Gender identity
Male- MaleFemale- FemaleTransgender- TransgenderNon-binary- Non-binaryPrefer not to respond- Prefer not to respond
-
address:
typing.Optional[EmployeeAddressInput]β Employee's residential address
-
employee_class:
typing.Optional[EmployeeClass]Employment classification
Full Time- Full TimePart Time- Part TimeTemporary- TemporaryIntern- InternSeasonal- SeasonalIndividual Contractor- Individual Contractor
-
start_date:
typing.Optional[datetime.date]β Employment start date
-
compensation_type:
typing.Optional[CompensationType]Employee compensation type
Salary- SalaryHourly- Hourly
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employees.list_enrollments(...) -> EnrollmentListResponse
-
-
-
Retrieves a paginated list of benefit enrollments for an employee.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employees.list_enrollments( employee_id="empl_abc123def456", limit=20, page=1, )
-
-
-
employee_id:
EmployeeIdβ Unique employee identifier (empl_*)
-
limit:
typing.Optional[Limit]β Items per page (default: 20, max: 100)
-
page:
typing.Optional[Page]β Page number (default: 1)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.list(...) -> OrganizationEmployerListResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.list( limit=20, page=1, )
-
-
-
benefit_family:
typing.Optional[typing.Union[BenefitFamilyParamItem, typing.Sequence[BenefitFamilyParamItem]]]β Filter to employers with at least one active benefit in these families.
-
benefit_lifecycle_stage:
typing.Optional[typing.Union[BenefitLifecycleStageItem, typing.Sequence[BenefitLifecycleStageItem]]]β Filter to employers in one of these computed benefit-lifecycle stages.
-
hris_provider:
typing.Optional[typing.Union[str, typing.Sequence[str]]]β 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.
-
hris_status:
typing.Optional[typing.Union[HrisStatusItem, typing.Sequence[HrisStatusItem]]]β Filter to employers whose HRIS connection is in one of these statuses.
-
include_cancelled:
typing.Optional[IncludeCancelled]β Include cancelled employers (hidden by default unless their stage is explicitly requested).
-
limit:
typing.Optional[Limit]β Items per page.
-
page:
typing.Optional[Page]β Page number.
-
search:
typing.Optional[Search]β 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.
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.create(...) -> EmployerResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect, EmployerAddressInput from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.create( name="NewCo Industries", legal_name="NewCo Industries LLC", ein="12-3456789", email="hr@newco.com", address=EmployerAddressInput( address_line1="789 Business Blvd", address_line2="Floor 5", city="Seattle", state="WA", zipcode="98101", ), phone_number="2065550100", reference_id="partner-emp-001", )
-
-
-
name:
strβ Employer display name
-
legal_name:
strβ Legal business name
-
ein:
strβ Employer Identification Number (format: XX-XXXXXXX)
-
email:
strβ Email address for billing and communications
-
address:
EmployerAddressInputβ Employer address
-
phone_number:
typing.Optional[str]β Employer phone number (10-digit US format, e.g. 5551234567)
-
reference_id:
typing.Optional[str]β External reference ID for this employer
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.get(...) -> EmployerResponse
-
-
-
Retrieves detailed information for a specific employer by ID. The employer must belong to the authenticated organization.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.get( employer_id="empr_abc123def456", )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.update(...) -> EmployerResponse
-
-
-
Updates an existing employer. All fields are optional β only provided fields are updated. PO Box addresses are rejected.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.update( employer_id="empr_abc123def456", )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
name:
typing.Optional[str]β Employer display name
-
legal_name:
typing.Optional[str]β Legal business name
-
address:
typing.Optional[UpdateEmployerAddressInput]β Employer address
-
active:
typing.Optional[bool]β Whether the employer is active
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.list_benefit_plan_years(...) -> EmployerBenefitPlanYearsListResponse
-
-
-
Returns the employer's benefit plan years (all years, or one when
yearis 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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.list_benefit_plan_years( employer_id="empr_abc123def456", )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.get_benefit_plan_year(...) -> EmployerBenefitPlanYearResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.get_benefit_plan_year( employer_id="empr_abc123def456", benefit_plan_year_id="plyr_abc123def456", )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
benefit_plan_year_id:
BenefitPlanYearIdβ Unique benefit-plan-year identifier (plyr_*).
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.list_benefit_plan_year_enrollments(...) -> PlanYearEnrollmentListResponse
-
-
-
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 yearplyr_<...>, returns 404.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.list_benefit_plan_year_enrollments( employer_id="empr_abc123def456", benefit_plan_year_id="plyr_abc123def456", limit=20, page=1, )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*).
-
benefit_plan_year_id:
BenefitPlanYearIdβ Unique benefit-plan-year identifier (plyr_*).
-
election_status:
typing.Optional[typing.Union[ElectionStatusItem, typing.Sequence[ElectionStatusItem]]]β Filter by election status. Repeat the parameter to match several.
-
limit:
typing.Optional[Limit]β Items per page (default: 20, max: 100)
-
page:
typing.Optional[Page]β Page number (default: 1)
-
search:
typing.Optional[EmployerSearch]β Case-insensitive search. Matches member name partially, and themember_idexactly β either your own reference id or the prefixedgrpmbr_<...>id.
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.submit_census_sync(...) -> CensusSyncDetailResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect, CensusSyncEmployeeRequest, CensusSyncEmployeeAddressRequest from vitable_connect.environment import VitableConnectEnvironment import datetime client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.submit_census_sync( employer_id="empr_abc123def456", employees=[ CensusSyncEmployeeRequest( reference_id="EMP-001", first_name="Jane", last_name="Doe", date_of_birth=datetime.date.fromisoformat("1990-05-15"), email="jane.doe@acme.com", phone="4155550100", address=CensusSyncEmployeeAddressRequest( address_line1="123 Main Street", address_line2="Apt 4B", city="San Francisco", state="CA", zipcode="94102", ), start_date=datetime.date.fromisoformat("2024-01-15"), employee_class="Full Time", compensation_type="Salary", ), CensusSyncEmployeeRequest( first_name="John", last_name="Smith", date_of_birth=datetime.date.fromisoformat("1985-11-20"), email="john.smith@acme.com", phone="4155550101", start_date=datetime.date.fromisoformat("2024-03-01"), employee_class="Part Time", compensation_type="Hourly", ) ], )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
employees:
typing.List[CensusSyncEmployeeRequest]
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.list_employees(...) -> EmployeeListResponse
-
-
-
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 anemployment_statusfilter (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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.list_employees( employer_id="empr_abc123def456", limit=20, page=1, search="jane", )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
employment_status:
typing.Optional[EmployeeStatus]β Filter by employment status (active or terminated)
-
limit:
typing.Optional[Limit]β Items per page (default: 20, max: 100)
-
page:
typing.Optional[Page]β Page number (default: 1)
-
search:
typing.Optional[EmployeeSearch]β Case-insensitive search across employee first name, last name, and email
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.get_hris(...) -> EmployerHrisResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.get_hris( employer_id="empr_abc123def456", )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.list_invoices(...) -> EmployerInvoicesListResponse
-
-
-
Returns a cursor-paginated page of the employer's billing invoices, newest first. Pass the
next_offsetfrom a previous page asoffsetto fetch the next page. The caller must be authorized for the employer; an unknown or unauthorized employer returns 404.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.list_invoices( employer_id="empr_abc123def456", limit=20, )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
limit:
typing.Optional[Limit]β Maximum number of invoices per page
-
offset:
typing.Optional[Offset]β Opaque cursor from a previous page's next_offset
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.get_invoice_pdf(...) -> EmployerInvoicePdfResponse
-
-
-
Returns the time-limited PDF download link for a single invoice belonging to the employer's billing customer.
invoice_idis 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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.get_invoice_pdf( employer_id="empr_abc123def456", invoice_id="INV-00042", )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
invoice_id:
InvoiceIdβ External Chargebee invoice id (not a prefixed UUID).
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.get_payroll_access_setup(...) -> PayrollAccessSetupStatusResponse
-
-
-
Return whether the employer has submitted payroll access setup.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.get_payroll_access_setup( employer_id="empr_abc123def456", )
-
-
-
employer_id:
EmployerId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.submit_payroll_access_setup(...) -> PayrollAccessSetupStatusResponse
-
-
-
Submit the employer's payroll access setup answers.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.submit_payroll_access_setup( employer_id="empr_abc123def456", employees_in_payroll_acknowledged=True, payroll_data_impacts_eligibility_acknowledged=True, classifications_accurate=True, all_benefit_eligible_employees_present=True, is_controlled_group=True, access_method="SELF_SETUP", has_additional_payroll_system=True, )
-
-
-
employer_id:
EmployerId
-
employees_in_payroll_acknowledged:
boolβ Attestation that all benefit-eligible employees appear in the payroll system.
-
payroll_data_impacts_eligibility_acknowledged:
boolβ Attestation that changes to payroll data affect benefit eligibility.
-
classifications_accurate:
boolβ Attestation that employee classifications in payroll are accurate. Setfalseto report corrections in the fields below.
-
all_benefit_eligible_employees_present:
boolβ Attestation that every benefit-eligible employee is present in payroll.
-
is_controlled_group:
boolβ Whether this employer belongs to a controlled group of related entities.
-
access_method:
AccessMethod
-
has_additional_payroll_system:
boolβ Whether a second payroll system is in use. Whentrue, supply theadditional_*fields below.
-
classification_correction_source:
typing.Optional[ClassificationCorrectionSource]β Where corrected classifications come from, whenclassifications_accurateisfalse.
-
misclassified_employee_names:
typing.Optional[typing.List[str]]β Names of employees whose payroll classification needs correcting.
-
remaining_employee_action:
typing.Optional[RemainingEmployeeAction]β How to handle employees still missing from the payroll system.
-
missing_employee_resolution:
typing.Optional[MissingEmployeeResolution]β How any missing employees will be added, when some are absent.
-
same_payroll_covers_other_eins:
typing.Optional[bool]β Whether this payroll system also covers other EINs in the controlled group.
-
login_url:
typing.Optional[str]β Sign-in URL for the payroll system.
-
username:
typing.Optional[str]β Username Vitable should use to access the payroll system.
-
phone:
typing.Optional[str]β Phone number used for payroll-system verification codes.
-
password:
typing.Optional[str]β Password Vitable should use to access the payroll system.
-
integration_confirmed:
typing.Optional[bool]β Whether the payroll integration has been confirmed as working.
-
additional_access_method:
typing.Optional[AdditionalAccessMethod]β How Vitable will access the second payroll system.
-
additional_login_url:
typing.Optional[str]β Sign-in URL for the second payroll system.
-
additional_username:
typing.Optional[str]β Username Vitable should use for the second payroll system.
-
additional_phone:
typing.Optional[str]β Phone number used for second payroll-system verification codes.
-
additional_password:
typing.Optional[str]β Password Vitable should use for the second payroll system.
-
additional_integration_confirmed:
typing.Optional[bool]β Whether the second payroll integration has been confirmed as working.
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.list_payroll_deduction_statements(...) -> EmployerPayrollDeductionStatementListResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.list_payroll_deduction_statements( employer_id="empr_abc123def456", limit=20, page=1, )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
limit:
typing.Optional[Limit]β Maximum number of statements per page
-
page:
typing.Optional[Page]β Page number to retrieve (starts at 1)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.ensure_payroll_integration_email(...) -> PayrollIntegrationEmailResponse
-
-
-
Provision and return the employer's payroll integration email.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.ensure_payroll_integration_email( employer_id="empr_abc123def456", )
-
-
-
employer_id:
EmployerId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.update_settings(...) -> EmployerSettingsResponse
-
-
-
Updates configuration settings for a specific employer. The employer must belong to the authenticated organization.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.update_settings( employer_id="empr_abc123def456", pay_frequency="bi_weekly", )
-
-
-
employer_id:
EmployerIdβ Unique employer identifier (empr_*)
-
pay_frequency:
DeductionFrequency
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.employers.list_hris_providers() -> OrganizationHrisProvidersResponse
-
-
-
Returns the distinct HRIS/payroll providers across the same book
GET /v1/employersreturns, sorted for display. Use these as the values for the employers list'shris_providerfilter β filter onprovider, showprovider_label. The stored providers are free text, so they cannot be enumerated in advance.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.employers.list_hris_providers()
-
-
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.enrollments.get(...) -> EnrollmentResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.enrollments.get( enrollment_id="enrl_AAAAAAAAAAAAAAAAAAAAAQ", )
-
-
-
enrollment_id:
EnrollmentIdβ Unique enrollment identifier (enrl_*)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.enrollments.reissue(...) -> ReissueEnrollmentResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.enrollments.reissue( enrollment_id="enrl_AAAAAAAAAAAAAAAAAAAAAQ", reason="Member needs a new election after a qualifying event.", ticket_number="BPT-1234", qualifying_life_event_id="qle_AAAAAAAAAAAAAAAAAAAAAQ", )
-
-
-
enrollment_id:
EnrollmentIdβ Unique enrollment identifier (enrl_*)
-
reason:
typing.Optional[str]β Audit reason for the reissue; required for user-backed callers and optional for long-lived organization API-key callers
-
ticket_number:
typing.Optional[str]β Optional support or operational ticket number
-
qualifying_life_event_id:
typing.Optional[str]β Accepted member qualifying life event identifier (qle_*)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.enrollments.terminate(...)
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.enrollments.terminate( enrollment_id="enrl_AAAAAAAAAAAAAAAAAAAAAQ", reason="Member requested coverage termination after a qualifying event.", ticket_number="BPT-1234", qualifying_life_event_id="qle_AAAAAAAAAAAAAAAAAAAAAQ", )
-
-
-
enrollment_id:
EnrollmentIdβ Unique enrollment identifier (enrl_*)
-
reason:
typing.Optional[str]β Audit reason for the termination; required for user-backed callers and optional for long-lived organization API-key callers
-
ticket_number:
typing.Optional[str]β Optional support or operational ticket number
-
qualifying_life_event_id:
typing.Optional[str]β Accepted member qualifying life event identifier (qle_*)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.groups.list(...) -> GroupListResponse
-
-
-
Returns a paginated list of groups belonging to the authenticated organization.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.groups.list( limit=20, page=1, )
-
-
-
limit:
typing.Optional[Limit]β Items per page (default: 20, max: 100)
-
page:
typing.Optional[Page]β Page number (default: 1)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.groups.create(...) -> GroupResponse
-
-
-
Creates a new group scoped to the authenticated organization.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.groups.create( name="Tier 1", external_reference_id="mol_seg_001", )
-
-
-
name:
strβ Display name for the group.
-
external_reference_id:
strβ 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.
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.groups.get(...) -> GroupResponse
-
-
-
Retrieves a single group by its prefixed ID. Returns 404 if the group does not belong to the authenticated organization.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.groups.get( group_id="grp_abc123def456", )
-
-
-
group_id:
GroupIdβ Unique group identifier (grp_*)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.groups.update(...) -> GroupResponse
-
-
-
Partially updates a group's name or external reference ID. Returns 404 if the group does not belong to the authenticated organization.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.groups.update( group_id="grp_abc123def456", name="Tier 1 (renamed)", external_reference_id="mol_seg_001_v2", )
-
-
-
group_id:
GroupIdβ Unique group identifier (grp_*)
-
name:
typing.Optional[str]β New display name for the group. Omit to leave unchanged.
-
external_reference_id:
typing.Optional[str]β New external reference ID for the group. Omit to leave unchanged.
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.members.get(...) -> MemberResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.members.get( member_id="mbr_abc123def456", )
-
-
-
member_id:
MemberIdβ Unique member identifier (mbr_*)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.members.list_dependents(...) -> MemberDependentsResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.members.list_dependents( member_id="mbr_abc123def456", )
-
-
-
member_id:
MemberId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.members.list_employments(...) -> MemberEmploymentsResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.members.list_employments( member_id="mbr_abc123def456", )
-
-
-
member_id:
MemberId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.members.list_enrollments(...) -> MemberEnrollmentsResponse
-
-
-
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) andpolicy_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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.members.list_enrollments( member_id="mbr_abc123def456", )
-
-
-
member_id:
MemberId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.members.get_household(...) -> HouseholdMembersResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.members.get_household( member_id="mbr_abc123def456", )
-
-
-
member_id:
MemberId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.members.list_id_cards(...) -> MemberDigitalBenefitCardsResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.members.list_id_cards( member_id="mbr_abc123def456", )
-
-
-
member_id:
MemberId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.members.list_qualifying_life_events(...) -> MemberQualifyingLifeEventListResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.members.list_qualifying_life_events( member_id="mbr_abc123def456", limit=20, page=1, )
-
-
-
member_id:
MemberIdβ Unique member identifier (mbr_*)
-
limit:
typing.Optional[Limit]β Items per page (default: 20, max: 100)
-
page:
typing.Optional[Page]β Page number (default: 1)
-
status:
typing.Optional[Status]β Optional. Filter to a single QLE status; omit to return all statuses.
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.members.list(...) -> MemberListResponse
-
-
-
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).
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.members.list( limit=20, page=1, )
-
-
-
limit:
typing.Optional[Limit]β Items per page (default: 20, max: 100)
-
page:
typing.Optional[Page]β Page number (default: 1)
-
search:
typing.Optional[MemberSearch]β Case-insensitive search across member name, email, and phone number; exact match on member id (prefixed or raw uuid)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.organizations.list() -> OrganizationsListResponse
-
-
-
Lists the organizations the authenticated caller is an active member of (paginated). Returns an empty list when the caller belongs to no organizations.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.organizations.list()
-
-
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.organizations.create(...) -> Organization
-
-
-
Onboards the authenticated user's partner Organization: creates the local Organization + the creator's admin membership atomically, then mirrors it to WorkOS (creates the WorkOS org and binds the creator as admin). 409
organization_already_existswhen the user already has an organization (v0: one organization per user).
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.organizations.create( name="Acme Brokerage", type="BROKERAGE", )
-
-
-
name:
strβ Legal or trading name of the organization.
-
type:
typing.Optional[CreateOrganizationRequestType]β Category of organization being onboarded.
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.plans.list(...) -> PlanListResponse
-
-
-
Returns a paginated list of benefit plans linked to the authenticated organization.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.plans.list( limit=20, page=1, )
-
-
-
limit:
typing.Optional[Limit]β Items per page (default: 20, max: 100)
-
page:
typing.Optional[Page]β Page number (default: 1)
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.webhook_events.list(...) -> WebhookEventListResponse
-
-
-
Retrieves a paginated list of webhook events for the authenticated organization. Supports filtering by event name, resource type, resource ID, and date range.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.webhook_events.list( limit=20, page=1, )
-
-
-
created_after:
typing.Optional[CreatedAfter]
-
created_before:
typing.Optional[CreatedBefore]
-
event_name:
typing.Optional[EventName]enrollment.accepted- Enrollment Acceptedenrollment.terminated- Enrollment Terminatedenrollment.termination_rescheduled- Enrollment Termination Rescheduledenrollment.elected- Enrollment Electedenrollment.granted- Enrollment Grantedenrollment.waived- Enrollment Waivedenrollment.started- Enrollment Startedemployee.eligibility_granted- Employee Eligibility Grantedemployee.eligibility_terminated- Employee Eligibility Terminatedemployee.deactivated- Employee Deactivatedemployee.deduction_created- Employee Deduction Created
-
limit:
typing.Optional[Limit]
-
page:
typing.Optional[Page]
-
resource_id:
typing.Optional[ResourceId]
-
resource_type:
typing.Optional[ResourceType]enrollment- Enrollmentemployee- Employeeemployer- Employerdependent- Dependentplan_year- Plan Yearpayroll_deduction- Payroll Deduction
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.webhook_events.get(...) -> WebhookEventResponse
-
-
-
Retrieves a single webhook event by its prefixed ID. Returns 404 if the event does not exist or belongs to a different organization.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.webhook_events.get( event_id="event_id", )
-
-
-
event_id:
EventId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.webhook_events.list_deliveries(...) -> ListWebhookEventDeliveriesResponse
-
-
-
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).
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.webhook_events.list_deliveries( event_id="event_id", )
-
-
-
event_id:
EventId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.groups.members.sync.submit(...) -> GroupMemberSyncDetailResponse
-
-
-
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.
-
-
-
from vitable_connect import VitableConnect, GroupMemberSyncMemberRequest, AddressRequest from vitable_connect.environment import VitableConnectEnvironment import datetime client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.groups.members.sync.submit( group_id="grp_abc123def456", members=[ GroupMemberSyncMemberRequest( reference_id="EMP-001", first_name="Jane", last_name="Doe", date_of_birth=datetime.date.fromisoformat("1990-05-15"), phone="4155550100", plan_id="pln_abc123def456", address=AddressRequest( address_line1="123 Main Street", address_line2="Apt 4B", city="San Francisco", state="CA", zipcode="94102", ), email="jane.doe@acme.com", ) ], )
-
-
-
group_id:
GroupId
-
members:
typing.List[GroupMemberSyncMemberRequest]
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-
client.groups.members.sync.get(...) -> GroupMemberSyncRequestDetailResponse
-
-
-
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-memberresultsonce available. While processing is in flight,completed_atandresultsarenull.
-
-
-
from vitable_connect import VitableConnect from vitable_connect.environment import VitableConnectEnvironment client = VitableConnect( api_key="<token>", environment=VitableConnectEnvironment.PRODUCTION, ) client.groups.members.sync.get( group_id="grp_abc123def456", request_id="request_id", )
-
-
-
group_id:
GroupId
-
request_id:
RequestId
-
request_options:
typing.Optional[RequestOptions]β Request-specific configuration.
-
-