vitable-connect 5.1.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e05e3a3f3747ca3413326b3d1c8e45146d55f7a75613ab1ffac7a9f0fc295037
4
- data.tar.gz: aa0805a497b13fdc5569d925b0f1e32958c30f8a259cada8e079e40ca6628064
3
+ metadata.gz: 3876def06b9afaa111d207b5ffda7fffde2f86ef71be0a25678b381e85ad89ba
4
+ data.tar.gz: cab5048d7b03f986723d3710a7422975f6e3979fc16293c5a32520bbf54c8260
5
5
  SHA512:
6
- metadata.gz: e44d7da1af9af98b949125ac11120ff60abb30452a96454171324a701a849ba66fcf8f767d31a6367f3f374c42f6b60844e6a669ab8984de7271bd607f396490
7
- data.tar.gz: 10b184369640ce94f2899e739635bc59e4f9c5611ff199104d602b38dc9669124adb98e8f1d42ab62eed0631ec4ce5b219fdb3e68607f0338568d2a855e73c19
6
+ metadata.gz: 4b52a45594ec11e90b5dad8342de2d66a752a5ee9aa1a9de97ed47e36b2f62d5ee1ca3417a3754cf7ae5bcb6d4a3676a4b65c41256e7a72efda27f4cfd793d39
7
+ data.tar.gz: b939ad09ccd2324532fce2367a80890fac4a6ec8e9d722883a65ea1b7643b19b29154d93d1aa2c9185e85b15a7afdd3120a49e5913b111cb4d619ed01487ab52
data/.fern/metadata.json CHANGED
@@ -7,10 +7,10 @@
7
7
  "offsetSemantics": "page-index",
8
8
  "respectAuthSchemeNames": true
9
9
  },
10
- "originGitCommit": "64323692ea69e2f0cf1d57beaa927d91c19d25bf",
10
+ "originGitCommit": "9736b4df903f268951f7b298f0c9ebd03e9c1515",
11
11
  "originGitCommitIsDirty": false,
12
12
  "invokedBy": "ci",
13
13
  "requestedVersion": "AUTO",
14
14
  "ciProvider": "gitlab",
15
- "sdkVersion": "5.1.0"
15
+ "sdkVersion": "5.2.0"
16
16
  }
data/changelog.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 5.2.0 - 2026-10-02
2
+ ### Added
3
+ * **`VitableConnect::Members::Client#create_dependent`** — new method that saves a spouse or child dependent for a member, posting to `v1/members/:member_id/dependents`; returns a `SavedMemberDependentResponse` with `created: true` for new dependents or `created: false` when an existing active match is reused.
4
+ * **`VitableConnect::Members::Types::CreateMemberDependentRequest`** — request model for the new endpoint, with required fields `member_id`, `first_name`, `last_name`, `date_of_birth`, `relationship`, and `address`, plus optional fields `suffix`, `sex_at_birth`, `gender`, `email`, `phone`, and `vitable_organization`.
5
+ * **`VitableConnect::Types::CreateMemberDependentAddressRequest`** — address model used within the create-dependent request, accepting `address_line1`, `city`, `state`, and `zipcode` (required) plus optional `address_line2`.
6
+ * **`VitableConnect::Types::SavedMemberDependent`** — response model representing a saved dependent row, including `member_id`, `primary_member_id`, `first_name`, `last_name`, `relationship`, `date_of_birth`, `age`, `sex_at_birth`, `legal_dependent_id`, and `created`.
7
+ * **`VitableConnect::Types::SavedMemberDependentResponse`** — wrapper response type containing a single `SavedMemberDependent` in its `data` field.
8
+
1
9
  ## 5.1.0 - 2026-09-28
2
10
  ### Added
3
11
  * **`VitableConnect::Types::PlanYearIchraAffordability`** — new enum with `AFFORDABLE` and `NOT_AFFORDABLE` values indicating whether an ICHRA plan year meets affordability requirements.
@@ -11,7 +11,7 @@ module VitableConnect
11
11
  @raw_client = VitableConnect::Internal::Http::RawClient.new(
12
12
  base_url: base_url || VitableConnect::Environment::PRODUCTION,
13
13
  headers: {
14
- "User-Agent" => "vitable-connect/5.1.0",
14
+ "User-Agent" => "vitable-connect/5.2.0",
15
15
  "X-Fern-Language" => "Ruby",
16
16
  Authorization: "Bearer #{api_key}"
17
17
  },
@@ -97,6 +97,76 @@ module VitableConnect
97
97
  end
98
98
  end
99
99
 
100
+ # Saves a dependent (spouse or child) for a member. Saving does not enroll the dependent or change the member's
101
+ # coverage or coverage tier. If the member already has an active dependent matching this person, that relationship
102
+ # is reused and returned with a 200 and `created: false`; otherwise a new one is created with a 201 and `created:
103
+ # true`. In both cases the dependent's address is set to the one supplied; other details of a person Vitable
104
+ # already has on file are not changed. When a new dependent is created at exactly the member's address, Vitable
105
+ # also adds them to the member's household where it can; this never fails the request. The returned IDs identify
106
+ # the saved dependent. Social Security numbers are not accepted, and a body with an `ssn` field returns a 400. The
107
+ # caller must have write access to the target member, and API access tokens cannot save dependents. A member not
108
+ # visible to the caller returns a 404 before the body is validated. Business-rule failures return a 422 with
109
+ # `child_over_max_age` (a child must be under 26), `duplicate_active_spouse` (the member already has a different
110
+ # active spouse), `same_member`, `member_creation_failed`, or `legal_dependent_creation_failed`.
111
+ #
112
+ # @param request_options [Hash]
113
+ # @param params [VitableConnect::Members::Types::CreateMemberDependentRequest]
114
+ # @option request_options [String] :base_url
115
+ # @option request_options [Hash{String => Object}] :additional_headers
116
+ # @option request_options [Hash{String => Object}] :additional_query_parameters
117
+ # @option request_options [Hash{String => Object}] :additional_body_parameters
118
+ # @option request_options [Integer] :timeout_in_seconds
119
+ # @option params [VitableConnect::Types::MemberID] :member_id
120
+ # @option params [String, nil] :vitable_organization
121
+ #
122
+ # @example
123
+ # client.members.create_dependent(
124
+ # member_id: "mbr_abc123def456",
125
+ # first_name: "Sam",
126
+ # last_name: "Doe",
127
+ # date_of_birth: "2015-06-01",
128
+ # sex_at_birth: "Male",
129
+ # relationship: "Child",
130
+ # address: {
131
+ # address_line1: "123 Main St",
132
+ # city: "Detroit",
133
+ # state: "MI",
134
+ # zipcode: "48201"
135
+ # }
136
+ # )
137
+ #
138
+ # @return [VitableConnect::Types::SavedMemberDependentResponse]
139
+ def create_dependent(request_options: {}, **params)
140
+ params = VitableConnect::Internal::Types::Utils.normalize_keys(params)
141
+ request_data = VitableConnect::Members::Types::CreateMemberDependentRequest.new(params).to_h
142
+ non_body_param_names = %w[member_id X-Vitable-Organization]
143
+ body = request_data.except(*non_body_param_names)
144
+
145
+ headers = {}
146
+ headers["X-Vitable-Organization"] = params[:vitable_organization] if params[:vitable_organization]
147
+
148
+ request = VitableConnect::Internal::JSON::Request.new(
149
+ base_url: request_options[:base_url],
150
+ method: "POST",
151
+ path: "v1/members/#{URI.encode_uri_component(params[:member_id].to_s)}/dependents",
152
+ headers: headers,
153
+ body: body,
154
+ request_options: request_options
155
+ )
156
+ begin
157
+ response = @client.send(request)
158
+ rescue Net::HTTPRequestTimeout
159
+ raise VitableConnect::Errors::TimeoutError
160
+ end
161
+ code = response.code.to_i
162
+ if code.between?(200, 299)
163
+ VitableConnect::Types::SavedMemberDependentResponse.load(response.body)
164
+ else
165
+ error_class = VitableConnect::Errors::ResponseError.subclass_for_code(code)
166
+ raise error_class.new(response.body, code: code)
167
+ end
168
+ end
169
+
100
170
  # Lists a member's employment across every employer — the same employee record shape as the employer's employees
101
171
  # list, plus the employer name. For an organization caller the rows are scoped to companies in that organization's
102
172
  # book; a member (self/household) or Vitable Admin sees all employments. A member not visible to the caller
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VitableConnect
4
+ module Members
5
+ module Types
6
+ class CreateMemberDependentRequest < Internal::Types::Model
7
+ field :member_id, -> { String }, optional: false, nullable: false
8
+
9
+ field :vitable_organization, -> { String }, optional: true, nullable: false, api_name: "X-Vitable-Organization"
10
+
11
+ field :first_name, -> { String }, optional: false, nullable: false
12
+
13
+ field :last_name, -> { String }, optional: false, nullable: false
14
+
15
+ field :suffix, -> { VitableConnect::Types::NameSuffix }, optional: true, nullable: false
16
+
17
+ field :date_of_birth, -> { String }, optional: false, nullable: false
18
+
19
+ field :sex_at_birth, -> { VitableConnect::Types::SexAtBirth }, optional: true, nullable: false
20
+
21
+ field :gender, -> { VitableConnect::Types::Gender }, optional: true, nullable: false
22
+
23
+ field :email, -> { String }, optional: true, nullable: false
24
+
25
+ field :phone, -> { String }, optional: true, nullable: false
26
+
27
+ field :relationship, -> { VitableConnect::Types::Relationship }, optional: false, nullable: false
28
+
29
+ field :address, -> { VitableConnect::Types::CreateMemberDependentAddressRequest }, optional: false, nullable: false
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VitableConnect
4
+ module Types
5
+ class CreateMemberDependentAddressRequest < Internal::Types::Model
6
+ field :address_line1, -> { String }, optional: false, nullable: false, api_name: "address_line_1"
7
+
8
+ field :address_line2, -> { String }, optional: true, nullable: false, api_name: "address_line_2"
9
+
10
+ field :city, -> { String }, optional: false, nullable: false
11
+
12
+ field :state, -> { VitableConnect::Types::State }, optional: false, nullable: false
13
+
14
+ field :zipcode, -> { String }, optional: false, nullable: false
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VitableConnect
4
+ module Types
5
+ # Wire serializer for :class:`MemberLegalDependentDTO` (one legal-dependent row).
6
+ class SavedMemberDependent < Internal::Types::Model
7
+ field :member_id, -> { String }, optional: true, nullable: false
8
+
9
+ field :primary_member_id, -> { String }, optional: true, nullable: false
10
+
11
+ field :first_name, -> { String }, optional: false, nullable: false
12
+
13
+ field :last_name, -> { String }, optional: false, nullable: false
14
+
15
+ field :relationship, -> { VitableConnect::Types::Relationship }, optional: false, nullable: false
16
+
17
+ field :date_of_birth, -> { String }, optional: false, nullable: false
18
+
19
+ field :age, -> { Integer }, optional: false, nullable: false
20
+
21
+ field :sex_at_birth, -> { VitableConnect::Types::SexAtBirth }, optional: true, nullable: false
22
+
23
+ field :legal_dependent_id, -> { String }, optional: false, nullable: false
24
+
25
+ field :created, -> { Internal::Types::Boolean }, optional: false, nullable: false
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module VitableConnect
4
+ module Types
5
+ # Response containing a single saved member dependent resource.
6
+ class SavedMemberDependentResponse < Internal::Types::Model
7
+ field :data, -> { VitableConnect::Types::SavedMemberDependent }, optional: false, nullable: false
8
+ end
9
+ end
10
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module VitableConnect
4
- VERSION = "5.1.0"
4
+ VERSION = "5.2.0"
5
5
  end
@@ -80,6 +80,7 @@ require_relative "VitableConnect/types/compensation_type"
80
80
  require_relative "VitableConnect/types/employee_class"
81
81
  require_relative "VitableConnect/types/census_sync_employee_request"
82
82
  require_relative "VitableConnect/types/classification_correction_source"
83
+ require_relative "VitableConnect/types/create_member_dependent_address_request"
83
84
  require_relative "VitableConnect/types/deduction_frequency"
84
85
  require_relative "VitableConnect/types/tax_classification"
85
86
  require_relative "VitableConnect/types/deduction_detail"
@@ -184,6 +185,8 @@ require_relative "VitableConnect/types/plan_year_enrollment_list_response"
184
185
  require_relative "VitableConnect/types/reissue_enrollment"
185
186
  require_relative "VitableConnect/types/reissue_enrollment_response"
186
187
  require_relative "VitableConnect/types/remaining_employee_action"
188
+ require_relative "VitableConnect/types/saved_member_dependent"
189
+ require_relative "VitableConnect/types/saved_member_dependent_response"
187
190
  require_relative "VitableConnect/types/update_employer_address_input"
188
191
  require_relative "VitableConnect/types/webhook_event"
189
192
  require_relative "VitableConnect/types/webhook_event_list_response"
@@ -250,6 +253,7 @@ require_relative "VitableConnect/groups/types/patched_update_group_request"
250
253
  require_relative "VitableConnect/members/client"
251
254
  require_relative "VitableConnect/members/types/get_members_request"
252
255
  require_relative "VitableConnect/members/types/list_dependents_members_request"
256
+ require_relative "VitableConnect/members/types/create_member_dependent_request"
253
257
  require_relative "VitableConnect/members/types/list_employments_members_request"
254
258
  require_relative "VitableConnect/members/types/list_enrollments_members_request"
255
259
  require_relative "VitableConnect/members/types/get_household_members_request"
data/reference.md CHANGED
@@ -201,7 +201,7 @@ client.employees.update(
201
201
  <dl>
202
202
  <dd>
203
203
 
204
- **phone:** `String` — Phone number
204
+ **phone:** `String` — 10-digit US phone number; formatting characters and a leading 1 are ignored
205
205
 
206
206
  </dd>
207
207
  </dl>
@@ -2852,6 +2852,199 @@ client.members.list_dependents(member_id: "mbr_abc123def456")
2852
2852
  </dl>
2853
2853
 
2854
2854
 
2855
+ </dd>
2856
+ </dl>
2857
+ </details>
2858
+
2859
+ <details><summary><code>client.members.<a href="/lib/VitableConnect/members/client.rb">create_dependent</a>(member_id:, request) -> VitableConnect::Types::SavedMemberDependentResponse</code></summary>
2860
+ <dl>
2861
+ <dd>
2862
+
2863
+ #### 📝 Description
2864
+
2865
+ <dl>
2866
+ <dd>
2867
+
2868
+ <dl>
2869
+ <dd>
2870
+
2871
+ 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`.
2872
+ </dd>
2873
+ </dl>
2874
+ </dd>
2875
+ </dl>
2876
+
2877
+ #### 🔌 Usage
2878
+
2879
+ <dl>
2880
+ <dd>
2881
+
2882
+ <dl>
2883
+ <dd>
2884
+
2885
+ ```ruby
2886
+ client.members.create_dependent(
2887
+ member_id: "mbr_abc123def456",
2888
+ first_name: "Sam",
2889
+ last_name: "Doe",
2890
+ date_of_birth: "2015-06-01",
2891
+ sex_at_birth: "Male",
2892
+ relationship: "Child",
2893
+ address: {
2894
+ address_line1: "123 Main St",
2895
+ city: "Detroit",
2896
+ state: "MI",
2897
+ zipcode: "48201"
2898
+ }
2899
+ )
2900
+ ```
2901
+ </dd>
2902
+ </dl>
2903
+ </dd>
2904
+ </dl>
2905
+
2906
+ #### ⚙️ Parameters
2907
+
2908
+ <dl>
2909
+ <dd>
2910
+
2911
+ <dl>
2912
+ <dd>
2913
+
2914
+ **member_id:** `String` — Unique member identifier (mbr_*)
2915
+
2916
+ </dd>
2917
+ </dl>
2918
+
2919
+ <dl>
2920
+ <dd>
2921
+
2922
+ **vitable_organization:** `String` — 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`.
2923
+
2924
+ </dd>
2925
+ </dl>
2926
+
2927
+ <dl>
2928
+ <dd>
2929
+
2930
+ **first_name:** `String` — Dependent's legal first name
2931
+
2932
+ </dd>
2933
+ </dl>
2934
+
2935
+ <dl>
2936
+ <dd>
2937
+
2938
+ **last_name:** `String` — Dependent's legal last name
2939
+
2940
+ </dd>
2941
+ </dl>
2942
+
2943
+ <dl>
2944
+ <dd>
2945
+
2946
+ **suffix:** `VitableConnect::Types::NameSuffix`
2947
+
2948
+ Name suffix
2949
+
2950
+ * `Sr` - Sr
2951
+ * `Jr` - Jr
2952
+ * `I` - I
2953
+ * `II` - II
2954
+ * `III` - III
2955
+ * `IV` - IV
2956
+ * `V` - V
2957
+
2958
+ </dd>
2959
+ </dl>
2960
+
2961
+ <dl>
2962
+ <dd>
2963
+
2964
+ **date_of_birth:** `String` — Date of birth (YYYY-MM-DD); cannot be in the future
2965
+
2966
+ </dd>
2967
+ </dl>
2968
+
2969
+ <dl>
2970
+ <dd>
2971
+
2972
+ **sex_at_birth:** `VitableConnect::Types::SexAtBirth`
2973
+
2974
+ Sex assigned at birth
2975
+
2976
+ * `Male` - Male
2977
+ * `Female` - Female
2978
+ * `Other` - Other
2979
+ * `Unknown` - Unknown
2980
+
2981
+ </dd>
2982
+ </dl>
2983
+
2984
+ <dl>
2985
+ <dd>
2986
+
2987
+ **gender:** `VitableConnect::Types::Gender`
2988
+
2989
+ Gender identity
2990
+
2991
+ * `Male` - Male
2992
+ * `Female` - Female
2993
+ * `Transgender` - Transgender
2994
+ * `Non-binary` - Non-binary
2995
+ * `Prefer not to respond` - Prefer not to respond
2996
+
2997
+ </dd>
2998
+ </dl>
2999
+
3000
+ <dl>
3001
+ <dd>
3002
+
3003
+ **email:** `String` — Dependent's email address. Ignored for dependents under 18, and not changed for a dependent Vitable already has on file.
3004
+
3005
+ </dd>
3006
+ </dl>
3007
+
3008
+ <dl>
3009
+ <dd>
3010
+
3011
+ **phone:** `String` — 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.
3012
+
3013
+ </dd>
3014
+ </dl>
3015
+
3016
+ <dl>
3017
+ <dd>
3018
+
3019
+ **relationship:** `VitableConnect::Types::Relationship`
3020
+
3021
+ Relationship of the dependent to the member
3022
+
3023
+ * `Spouse` - Spouse
3024
+ * `Child` - Child
3025
+
3026
+ </dd>
3027
+ </dl>
3028
+
3029
+ <dl>
3030
+ <dd>
3031
+
3032
+ **address:** `VitableConnect::Types::CreateMemberDependentAddressRequest` — Dependent's residential address
3033
+
3034
+ </dd>
3035
+ </dl>
3036
+
3037
+ <dl>
3038
+ <dd>
3039
+
3040
+ **request_options:** `VitableConnect::Members::RequestOptions`
3041
+
3042
+ </dd>
3043
+ </dl>
3044
+ </dd>
3045
+ </dl>
3046
+
3047
+
2855
3048
  </dd>
2856
3049
  </dl>
2857
3050
  </details>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vitable-connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 5.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - VitableConnect
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-09-28 00:00:00.000000000 Z
11
+ date: 2026-10-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: The VitableConnect Ruby library provides convenient access to the VitableConnect
14
14
  API from Ruby.
@@ -100,6 +100,7 @@ files:
100
100
  - lib/VitableConnect/internal/types/unknown.rb
101
101
  - lib/VitableConnect/internal/types/utils.rb
102
102
  - lib/VitableConnect/members/client.rb
103
+ - lib/VitableConnect/members/types/create_member_dependent_request.rb
103
104
  - lib/VitableConnect/members/types/get_household_members_request.rb
104
105
  - lib/VitableConnect/members/types/get_members_request.rb
105
106
  - lib/VitableConnect/members/types/list_dependents_members_request.rb
@@ -141,6 +142,7 @@ files:
141
142
  - lib/VitableConnect/types/contribution_strategy.rb
142
143
  - lib/VitableConnect/types/contribution_tier.rb
143
144
  - lib/VitableConnect/types/coverage_tier.rb
145
+ - lib/VitableConnect/types/create_member_dependent_address_request.rb
144
146
  - lib/VitableConnect/types/created_after.rb
145
147
  - lib/VitableConnect/types/created_before.rb
146
148
  - lib/VitableConnect/types/deduction_detail.rb
@@ -275,6 +277,8 @@ files:
275
277
  - lib/VitableConnect/types/request_id.rb
276
278
  - lib/VitableConnect/types/resource_id.rb
277
279
  - lib/VitableConnect/types/resource_type.rb
280
+ - lib/VitableConnect/types/saved_member_dependent.rb
281
+ - lib/VitableConnect/types/saved_member_dependent_response.rb
278
282
  - lib/VitableConnect/types/search.rb
279
283
  - lib/VitableConnect/types/sex_at_birth.rb
280
284
  - lib/VitableConnect/types/state.rb