Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ jobs:
lint:
name: lint
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

Expand All @@ -33,7 +32,6 @@ jobs:
test:
name: test
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "1.20.1"
".": "1.21.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 46
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-14d375aab89e6b212fe459805a42d6ea7d7da8eae2037ae710a187d06911be1d.yml
openapi_spec_hash: 08b86ecbec3323717d48e4aaee48ed54
config_hash: ce10384813f68ba3fed61c7b601b396b
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-bf858f37d7ab420841ddc6329dad8c46377308b6a5c8e935908011d0f9845e22.yml
openapi_spec_hash: 2523952a32436e3c7fd3b55508c2e7ee
config_hash: 53778a0b839c4f6ad34fbba051f5e8a6
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
# Changelog

## 1.21.0 (2025-04-09)

Full Changelog: [v1.20.1...v1.21.0](https://github.com/Finch-API/finch-api-python/compare/v1.20.1...v1.21.0)

### Features

* **api:** add models for hrs benefits individuals async responses ([6452c2c](https://github.com/Finch-API/finch-api-python/commit/6452c2ce11111b2eba1c2cb941ccd32fdd1c5a82))
* **api:** api update ([#646](https://github.com/Finch-API/finch-api-python/issues/646)) ([7ac8751](https://github.com/Finch-API/finch-api-python/commit/7ac875106bdcfb8bfb097b971f48ecd88d06c26a))
* **api:** benefits mutation API endpoints (create benefit, update benefit, enroll individual, unenroll individual) now properly return async response types ([#649](https://github.com/Finch-API/finch-api-python/issues/649)) ([4109f6c](https://github.com/Finch-API/finch-api-python/commit/4109f6cd3a880cab1e7ca9d90d8a29cf0ce737f4))


### Chores

* fix typo ([8772010](https://github.com/Finch-API/finch-api-python/commit/8772010e01df66a41bae7b5689bf7af20f2c0411))
* fix typo ([#650](https://github.com/Finch-API/finch-api-python/issues/650)) ([17dc2ea](https://github.com/Finch-API/finch-api-python/commit/17dc2ea50995d6883ad07a77a4c039a8c097253f))
* **internal:** expand CI branch coverage ([#648](https://github.com/Finch-API/finch-api-python/issues/648)) ([bc6c22d](https://github.com/Finch-API/finch-api-python/commit/bc6c22d497fe8bb886e34095b01016904fe8258d))
* **internal:** reduce CI branch coverage ([bad1202](https://github.com/Finch-API/finch-api-python/commit/bad1202ad8b8e73fb4ae4c8624405997c2ad33e2))

## 1.20.1 (2025-04-08)

Full Changelog: [v1.20.0...v1.20.1](https://github.com/Finch-API/finch-api-python/compare/v1.20.0...v1.20.1)
Expand Down
11 changes: 6 additions & 5 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ from finch.types.hris import (
SupportPerBenefitType,
SupportedBenefit,
UpdateCompanyBenefitResponse,
BenefitListSupportedBenefitsResponse,
BenfitContribution,
)
```
Expand All @@ -180,27 +181,27 @@ Methods:
- <code title="get /employer/benefits/{benefit_id}">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">retrieve</a>(benefit_id) -> <a href="./src/finch/types/hris/company_benefit.py">CompanyBenefit</a></code>
- <code title="post /employer/benefits/{benefit_id}">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">update</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefit_update_params.py">params</a>) -> <a href="./src/finch/types/hris/update_company_benefit_response.py">UpdateCompanyBenefitResponse</a></code>
- <code title="get /employer/benefits">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">list</a>() -> <a href="./src/finch/types/hris/company_benefit.py">SyncSinglePage[CompanyBenefit]</a></code>
- <code title="get /employer/benefits/meta">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">list_supported_benefits</a>() -> <a href="./src/finch/types/hris/supported_benefit.py">SyncSinglePage[SupportedBenefit]</a></code>
- <code title="get /employer/benefits/meta">client.hris.benefits.<a href="./src/finch/resources/hris/benefits/benefits.py">list_supported_benefits</a>() -> <a href="./src/finch/types/hris/benefit_list_supported_benefits_response.py">SyncSinglePage[BenefitListSupportedBenefitsResponse]</a></code>

### Individuals

Types:

```python
from finch.types.hris.benefits import (
EnrolledIndividual,
EnrolledIndividualBenefitResponse,
IndividualBenefit,
UnenrolledIndividual,
UnenrolledIndividualBenefitResponse,
IndividualEnrolledIDsResponse,
)
```

Methods:

- <code title="post /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">enroll_many</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_enroll_many_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/enrolled_individual.py">SyncSinglePage[EnrolledIndividual]</a></code>
- <code title="post /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">enroll_many</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_enroll_many_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/enrolled_individual_benefit_response.py">EnrolledIndividualBenefitResponse</a></code>
- <code title="get /employer/benefits/{benefit_id}/enrolled">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">enrolled_ids</a>(benefit_id) -> <a href="./src/finch/types/hris/benefits/individual_enrolled_ids_response.py">IndividualEnrolledIDsResponse</a></code>
- <code title="get /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">retrieve_many_benefits</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_retrieve_many_benefits_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/individual_benefit.py">SyncSinglePage[IndividualBenefit]</a></code>
- <code title="delete /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">unenroll_many</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_unenroll_many_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/unenrolled_individual.py">SyncSinglePage[UnenrolledIndividual]</a></code>
- <code title="delete /employer/benefits/{benefit_id}/individuals">client.hris.benefits.individuals.<a href="./src/finch/resources/hris/benefits/individuals.py">unenroll_many</a>(benefit_id, \*\*<a href="src/finch/types/hris/benefits/individual_unenroll_many_params.py">params</a>) -> <a href="./src/finch/types/hris/benefits/unenrolled_individual_benefit_response.py">UnenrolledIndividualBenefitResponse</a></code>

# Providers

Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "finch-api"
version = "1.20.1"
version = "1.21.0"
description = "The official Python library for the Finch API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
2 changes: 1 addition & 1 deletion src/finch/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "finch"
__version__ = "1.20.1" # x-release-please-version
__version__ = "1.21.0" # x-release-please-version
14 changes: 7 additions & 7 deletions src/finch/resources/hris/benefits/benefits.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@
from ....types.hris.benefit_type import BenefitType
from ....types.hris.company_benefit import CompanyBenefit
from ....types.hris.benefit_frequency import BenefitFrequency
from ....types.hris.supported_benefit import SupportedBenefit
from ....types.hris.update_company_benefit_response import UpdateCompanyBenefitResponse
from ....types.hris.create_company_benefits_response import CreateCompanyBenefitsResponse
from ....types.hris.benefit_list_supported_benefits_response import BenefitListSupportedBenefitsResponse

__all__ = ["Benefits", "AsyncBenefits"]

Expand Down Expand Up @@ -210,15 +210,15 @@ def list_supported_benefits(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> SyncSinglePage[SupportedBenefit]:
) -> SyncSinglePage[BenefitListSupportedBenefitsResponse]:
"""Get deductions metadata"""
return self._get_api_list(
"/employer/benefits/meta",
page=SyncSinglePage[SupportedBenefit],
page=SyncSinglePage[BenefitListSupportedBenefitsResponse],
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
model=SupportedBenefit,
model=BenefitListSupportedBenefitsResponse,
)


Expand Down Expand Up @@ -396,15 +396,15 @@ def list_supported_benefits(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> AsyncPaginator[SupportedBenefit, AsyncSinglePage[SupportedBenefit]]:
) -> AsyncPaginator[BenefitListSupportedBenefitsResponse, AsyncSinglePage[BenefitListSupportedBenefitsResponse]]:
"""Get deductions metadata"""
return self._get_api_list(
"/employer/benefits/meta",
page=AsyncSinglePage[SupportedBenefit],
page=AsyncSinglePage[BenefitListSupportedBenefitsResponse],
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
model=SupportedBenefit,
model=BenefitListSupportedBenefitsResponse,
)


Expand Down
49 changes: 22 additions & 27 deletions src/finch/resources/hris/benefits/individuals.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@

from .... import _legacy_response
from ...._types import NOT_GIVEN, Body, Query, Headers, NotGiven
from ...._utils import maybe_transform
from ...._utils import (
maybe_transform,
async_maybe_transform,
)
from ...._compat import cached_property
from ...._resource import SyncAPIResource, AsyncAPIResource
from ...._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper
Expand All @@ -20,9 +23,9 @@
individual_retrieve_many_benefits_params,
)
from ....types.hris.benefits.individual_benefit import IndividualBenefit
from ....types.hris.benefits.enrolled_individual import EnrolledIndividual
from ....types.hris.benefits.unenrolled_individual import UnenrolledIndividual
from ....types.hris.benefits.individual_enrolled_ids_response import IndividualEnrolledIDsResponse
from ....types.hris.benefits.enrolled_individual_benefit_response import EnrolledIndividualBenefitResponse
from ....types.hris.benefits.unenrolled_individual_benefit_response import UnenrolledIndividualBenefitResponse

__all__ = ["Individuals", "AsyncIndividuals"]

Expand Down Expand Up @@ -58,7 +61,7 @@ def enroll_many(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> SyncSinglePage[EnrolledIndividual]:
) -> EnrolledIndividualBenefitResponse:
"""Enroll an individual into a deduction or contribution.

This is an overwrite
Expand All @@ -79,15 +82,13 @@ def enroll_many(
"""
if not benefit_id:
raise ValueError(f"Expected a non-empty value for `benefit_id` but received {benefit_id!r}")
return self._get_api_list(
return self._post(
f"/employer/benefits/{benefit_id}/individuals",
page=SyncSinglePage[EnrolledIndividual],
body=maybe_transform(individuals, Iterable[individual_enroll_many_params.Individual]),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
model=EnrolledIndividual,
method="post",
cast_to=EnrolledIndividualBenefitResponse,
)

def enrolled_ids(
Expand Down Expand Up @@ -179,7 +180,7 @@ def unenroll_many(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> SyncSinglePage[UnenrolledIndividual]:
) -> UnenrolledIndividualBenefitResponse:
"""
Unenroll individuals from a deduction or contribution

Expand All @@ -196,17 +197,15 @@ def unenroll_many(
"""
if not benefit_id:
raise ValueError(f"Expected a non-empty value for `benefit_id` but received {benefit_id!r}")
return self._get_api_list(
return self._delete(
f"/employer/benefits/{benefit_id}/individuals",
page=SyncSinglePage[UnenrolledIndividual],
body=maybe_transform(
{"individual_ids": individual_ids}, individual_unenroll_many_params.IndividualUnenrollManyParams
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
model=UnenrolledIndividual,
method="delete",
cast_to=UnenrolledIndividualBenefitResponse,
)


Expand All @@ -230,7 +229,7 @@ def with_streaming_response(self) -> AsyncIndividualsWithStreamingResponse:
"""
return AsyncIndividualsWithStreamingResponse(self)

def enroll_many(
async def enroll_many(
self,
benefit_id: str,
*,
Expand All @@ -241,7 +240,7 @@ def enroll_many(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> AsyncPaginator[EnrolledIndividual, AsyncSinglePage[EnrolledIndividual]]:
) -> EnrolledIndividualBenefitResponse:
"""Enroll an individual into a deduction or contribution.

This is an overwrite
Expand All @@ -262,15 +261,13 @@ def enroll_many(
"""
if not benefit_id:
raise ValueError(f"Expected a non-empty value for `benefit_id` but received {benefit_id!r}")
return self._get_api_list(
return await self._post(
f"/employer/benefits/{benefit_id}/individuals",
page=AsyncSinglePage[EnrolledIndividual],
body=maybe_transform(individuals, Iterable[individual_enroll_many_params.Individual]),
body=await async_maybe_transform(individuals, Iterable[individual_enroll_many_params.Individual]),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
model=EnrolledIndividual,
method="post",
cast_to=EnrolledIndividualBenefitResponse,
)

async def enrolled_ids(
Expand Down Expand Up @@ -351,7 +348,7 @@ def retrieve_many_benefits(
model=IndividualBenefit,
)

def unenroll_many(
async def unenroll_many(
self,
benefit_id: str,
*,
Expand All @@ -362,7 +359,7 @@ def unenroll_many(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
) -> AsyncPaginator[UnenrolledIndividual, AsyncSinglePage[UnenrolledIndividual]]:
) -> UnenrolledIndividualBenefitResponse:
"""
Unenroll individuals from a deduction or contribution

Expand All @@ -379,17 +376,15 @@ def unenroll_many(
"""
if not benefit_id:
raise ValueError(f"Expected a non-empty value for `benefit_id` but received {benefit_id!r}")
return self._get_api_list(
return await self._delete(
f"/employer/benefits/{benefit_id}/individuals",
page=AsyncSinglePage[UnenrolledIndividual],
body=maybe_transform(
body=await async_maybe_transform(
{"individual_ids": individual_ids}, individual_unenroll_many_params.IndividualUnenrollManyParams
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
model=UnenrolledIndividual,
method="delete",
cast_to=UnenrolledIndividualBenefitResponse,
)


Expand Down
4 changes: 3 additions & 1 deletion src/finch/types/hris/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
from .benefits_support import BenefitsSupport as BenefitsSupport
from .benefit_frequency import BenefitFrequency as BenefitFrequency
from .document_response import DocumentResponse as DocumentResponse
from .supported_benefit import SupportedBenefit as SupportedBenefit
from .benfit_contribution import BenfitContribution as BenfitContribution
from .individual_response import IndividualResponse as IndividualResponse
from .payment_list_params import PaymentListParams as PaymentListParams
Expand All @@ -37,3 +36,6 @@
from .create_company_benefits_response import CreateCompanyBenefitsResponse as CreateCompanyBenefitsResponse
from .directory_list_individuals_params import DirectoryListIndividualsParams as DirectoryListIndividualsParams
from .pay_statement_retrieve_many_params import PayStatementRetrieveManyParams as PayStatementRetrieveManyParams
from .benefit_list_supported_benefits_response import (
BenefitListSupportedBenefitsResponse as BenefitListSupportedBenefitsResponse,
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@
from typing_extensions import Literal

from ..._models import BaseModel
from .benefit_type import BenefitType
from .benefit_frequency import BenefitFrequency

__all__ = ["SupportedBenefit"]
__all__ = ["BenefitListSupportedBenefitsResponse"]


class SupportedBenefit(BaseModel):
class BenefitListSupportedBenefitsResponse(BaseModel):
annual_maximum: Optional[bool] = None
"""Whether the provider supports an annual maximum for this benefit."""

Expand Down Expand Up @@ -43,6 +42,3 @@ class SupportedBenefit(BaseModel):
Empty if this feature is not supported for the benefit. This array only has
values for HSA benefits.
"""

type: Optional[BenefitType] = None
"""Type of benefit."""
6 changes: 4 additions & 2 deletions src/finch/types/hris/benefits/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
from __future__ import annotations

from .individual_benefit import IndividualBenefit as IndividualBenefit
from .enrolled_individual import EnrolledIndividual as EnrolledIndividual
from .unenrolled_individual import UnenrolledIndividual as UnenrolledIndividual
from .individual_enroll_many_params import IndividualEnrollManyParams as IndividualEnrollManyParams
from .individual_unenroll_many_params import IndividualUnenrollManyParams as IndividualUnenrollManyParams
from .individual_enrolled_ids_response import IndividualEnrolledIDsResponse as IndividualEnrolledIDsResponse
from .enrolled_individual_benefit_response import EnrolledIndividualBenefitResponse as EnrolledIndividualBenefitResponse
from .unenrolled_individual_benefit_response import (
UnenrolledIndividualBenefitResponse as UnenrolledIndividualBenefitResponse,
)
from .individual_retrieve_many_benefits_params import (
IndividualRetrieveManyBenefitsParams as IndividualRetrieveManyBenefitsParams,
)
28 changes: 0 additions & 28 deletions src/finch/types/hris/benefits/enrolled_individual.py

This file was deleted.

Loading