Skip to content
Get started

Create new plan year

benefit_products.plan_years.create(strbenefit_product_id, PlanYearCreateParams**kwargs) -> PlanYear
post/v1/benefit-products/{benefit_product_id}/plan-years

Creates a new plan year configuration for a benefit product and employer. Configures coverage period dates, open enrollment window, and contribution structure. All monetary values must be in cents.

ParametersExpand Collapse
benefit_product_id: str
contribution_classes: Iterable[ContributionClass]

List of contribution classes (at least one required)

employee_contribution_cents: int

Employee's monthly contribution in cents

minimum0
employer_contribution_cents: int

Employer's monthly contribution in cents

minimum0
employment: str

Employment type (e.g., 'full_time', 'part_time')

family_status: CoverageTier
  • Unspecified - Unspecified
  • EE - Ee
  • ES - Es
  • EC - Ec
  • EF - Ef
Accepts one of the following:
"Unspecified"
"EE"
"ES"
"EC"
"EF"
coverage_end: Union[null, null]

Coverage end date

formatdate
coverage_start: Union[null, null]

Coverage start date

formatdate
employer_id: str

Employer ID this plan year is for (empr_*)

open_enrollment_end: Union[null, null]

Open enrollment end date

formatdate
open_enrollment_start: Union[null, null]

Open enrollment start date

formatdate
ReturnsExpand Collapse
class PlanYear:

Serializer for Plan Year entity in public API responses.

A Plan Year represents a benefit period configuration including coverage dates, open enrollment windows, available plans, and contribution structures.

id: str

Unique plan year identifier with 'plyr_' prefix

benefit_product_id: str

ID of the benefit product (bprd_*)

contribution_classes: List[ContributionClass]

List of contribution classes defining eligibility tiers and cost structures

id: str

Unique contribution class identifier

employee_contribution_cents: int

Employee's monthly contribution amount in cents

employer_contribution_cents: int

Employer's monthly contribution amount in cents

employment: str

Employment type for this contribution class (e.g., 'full_time', 'part_time')

family_status: CoverageTier
  • Unspecified - Unspecified
  • EE - Ee
  • ES - Es
  • EC - Ec
  • EF - Ef
Accepts one of the following:
"Unspecified"
"EE"
"ES"
"EC"
"EF"
coverage_end: date

Date when benefit coverage ends

formatdate
coverage_start: date

Date when benefit coverage begins

formatdate
created_at: datetime

Timestamp when the plan year was created

formatdate-time
employer_id: str

ID of the employer this plan year is for (empr_*)

open_enrollment_end_date: date

Date when open enrollment period ends

formatdate
open_enrollment_start_date: date

Date when open enrollment period begins

formatdate
plans: List[Plan]

List of insurance plans available in this plan year

id: str

Unique plan identifier with 'plan_' prefix

carrier_plan_id: str

Reference to the carrier's plan definition (cplan_*)

monthly_premium_cents: int

Base monthly premium in cents

name: str

Display name of the insurance plan

deductible_cents: Optional[int]

Annual deductible amount in cents

out_of_pocket_max_cents: Optional[int]

Annual out-of-pocket maximum in cents

tier: Optional[PlanTier]
  • Bronze - Bronze
  • Silver - Silver
  • Gold - Gold
  • Platinum - Platinum
Accepts one of the following:
"Bronze"
"Silver"
"Gold"
"Platinum"
  • draft - Draft
  • open_enrollment - Open Enrollment
  • active - Active
  • expired - Expired
Accepts one of the following:
"draft"
"open_enrollment"
"active"
"expired"
updated_at: datetime

Timestamp when the plan year was last updated

formatdate-time
Create new plan year
from datetime import date
from vitable_connect_api import VitableConnectAPI

client = VitableConnectAPI(
    api_key="My API Key",
)
plan_year = client.benefit_products.plan_years.create(
    benefit_product_id="bprd_abc123def456",
    contribution_classes=[{
        "employee_contribution_cents": 0,
        "employer_contribution_cents": 0,
        "employment": "employment",
        "family_status": "Unspecified",
    }],
    coverage_end=date.fromisoformat("2019-12-27"),
    coverage_start=date.fromisoformat("2019-12-27"),
    employer_id="employer_id",
    open_enrollment_end=date.fromisoformat("2019-12-27"),
    open_enrollment_start=date.fromisoformat("2019-12-27"),
)
print(plan_year.id)
{
  "id": "id",
  "benefit_product_id": "benefit_product_id",
  "contribution_classes": [
    {
      "id": "id",
      "employee_contribution_cents": 0,
      "employer_contribution_cents": 0,
      "employment": "employment",
      "family_status": "Unspecified"
    }
  ],
  "coverage_end": "2019-12-27",
  "coverage_start": "2019-12-27",
  "created_at": "2019-12-27T18:11:19.117Z",
  "employer_id": "employer_id",
  "open_enrollment_end_date": "2019-12-27",
  "open_enrollment_start_date": "2019-12-27",
  "plans": [
    {
      "id": "id",
      "carrier_plan_id": "carrier_plan_id",
      "monthly_premium_cents": 0,
      "name": "name",
      "deductible_cents": 0,
      "out_of_pocket_max_cents": 0,
      "tier": "Bronze"
    }
  ],
  "status": "draft",
  "updated_at": "2019-12-27T18:11:19.117Z"
}
Returns Examples
{
  "id": "id",
  "benefit_product_id": "benefit_product_id",
  "contribution_classes": [
    {
      "id": "id",
      "employee_contribution_cents": 0,
      "employer_contribution_cents": 0,
      "employment": "employment",
      "family_status": "Unspecified"
    }
  ],
  "coverage_end": "2019-12-27",
  "coverage_start": "2019-12-27",
  "created_at": "2019-12-27T18:11:19.117Z",
  "employer_id": "employer_id",
  "open_enrollment_end_date": "2019-12-27",
  "open_enrollment_start_date": "2019-12-27",
  "plans": [
    {
      "id": "id",
      "carrier_plan_id": "carrier_plan_id",
      "monthly_premium_cents": 0,
      "name": "name",
      "deductible_cents": 0,
      "out_of_pocket_max_cents": 0,
      "tier": "Bronze"
    }
  ],
  "status": "draft",
  "updated_at": "2019-12-27T18:11:19.117Z"
}