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
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
lint:
timeout-minutes: 10
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/finch-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand All @@ -44,7 +44,7 @@ jobs:
permissions:
contents: read
id-token: write
runs-on: ${{ github.repository == 'stainless-sdks/finch-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

Expand Down Expand Up @@ -84,7 +84,7 @@ jobs:
test:
timeout-minutes: 10
name: test
runs-on: ${{ github.repository == 'stainless-sdks/finch-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
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 @@
{
".": "2.3.0"
".": "2.4.0"
}
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 48
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch/finch-166cc05754d8591beda094f4ee6f438f55d5f65d490ab364ea130c5100134375.yml
openapi_spec_hash: 4582a35bbe9fb5404d1e4f804c877fa8
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch/finch-bdcc610cd7d5dcb5d3d7598a33957dd673cb81f14ca5d8dc9d41fced4230f114.yml
openapi_spec_hash: 16dce00b8187a592fab5c88efc7bf7fc
config_hash: 9ae56f40cec7304896138bfad5caf748
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

## 2.4.0 (2026-07-17)

Full Changelog: [v2.3.0...v2.4.0](https://github.com/Finch-API/finch-api-python/compare/v2.3.0...v2.4.0)

### Features

* **api:** api update ([f616b88](https://github.com/Finch-API/finch-api-python/commit/f616b8826871f77486b927b29ed76839bb519a17))
* **stlc:** configurable CI runner and private-production-repo support in workflow templates ([8848074](https://github.com/Finch-API/finch-api-python/commit/88480743771a3345f4a7f95f2cae55978d9ec37e))

## 2.3.0 (2026-07-15)

Full Changelog: [v2.2.0...v2.3.0](https://github.com/Finch-API/finch-api-python/compare/v2.2.0...v2.3.0)
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 = "2.3.0"
version = "2.4.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__ = "2.3.0" # x-release-please-version
__version__ = "2.4.0" # x-release-please-version
38 changes: 38 additions & 0 deletions src/finch/resources/sandbox/employment.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,11 @@ def update(
end_date: Optional[str] | Omit = omit,
first_name: Optional[str] | Omit = omit,
flsa_status: Optional[Literal["exempt", "non_exempt", "unknown"]] | Omit = omit,
highly_compensated_employee: Optional[bool] | Omit = omit,
income: Optional[IncomeParam] | Omit = omit,
income_history: Optional[Iterable[Optional[IncomeParam]]] | Omit = omit,
is_active: Optional[bool] | Omit = omit,
key_employee: Optional[bool] | Omit = omit,
last_name: Optional[str] | Omit = omit,
latest_rehire_date: Optional[str] | Omit = omit,
location: Optional[LocationParam] | Omit = omit,
Expand All @@ -68,6 +70,8 @@ def update(
source_id: Optional[str] | Omit = omit,
start_date: Optional[str] | Omit = omit,
title: Optional[str] | Omit = omit,
union_code: Optional[str] | Omit = omit,
union_local: Optional[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
Expand Down Expand Up @@ -96,6 +100,9 @@ def update(
flsa_status: The FLSA status of the individual. Available options: `exempt`, `non_exempt`,
`unknown`.

highly_compensated_employee: IRS flag indicating whether the employee is classified as a Highly Compensated
Employee for nondiscrimination testing purposes (ADP/ACP tests). US-only.

income: The employee's income as reported by the provider. This may not always be
annualized income, but may be in units of bi-weekly, semi-monthly, daily, etc,
depending on what information the provider returns.
Expand All @@ -104,6 +111,9 @@ def update(

is_active: `true` if the individual an an active employee or contractor at the company.

key_employee: IRS flag indicating whether the employee is classified as a Key Employee for
top-heavy testing purposes. US-only.

last_name: The legal last name of the individual.

location
Expand All @@ -116,6 +126,11 @@ def update(

title: The current title of the individual.

union_code: The code identifying the union the employee is a member of, as configured in the
payroll system.

union_local: The local chapter or local number within the employee's union.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -138,9 +153,11 @@ def update(
"end_date": end_date,
"first_name": first_name,
"flsa_status": flsa_status,
"highly_compensated_employee": highly_compensated_employee,
"income": income,
"income_history": income_history,
"is_active": is_active,
"key_employee": key_employee,
"last_name": last_name,
"latest_rehire_date": latest_rehire_date,
"location": location,
Expand All @@ -149,6 +166,8 @@ def update(
"source_id": source_id,
"start_date": start_date,
"title": title,
"union_code": union_code,
"union_local": union_local,
},
employment_update_params.EmploymentUpdateParams,
),
Expand Down Expand Up @@ -198,9 +217,11 @@ async def update(
end_date: Optional[str] | Omit = omit,
first_name: Optional[str] | Omit = omit,
flsa_status: Optional[Literal["exempt", "non_exempt", "unknown"]] | Omit = omit,
highly_compensated_employee: Optional[bool] | Omit = omit,
income: Optional[IncomeParam] | Omit = omit,
income_history: Optional[Iterable[Optional[IncomeParam]]] | Omit = omit,
is_active: Optional[bool] | Omit = omit,
key_employee: Optional[bool] | Omit = omit,
last_name: Optional[str] | Omit = omit,
latest_rehire_date: Optional[str] | Omit = omit,
location: Optional[LocationParam] | Omit = omit,
Expand All @@ -209,6 +230,8 @@ async def update(
source_id: Optional[str] | Omit = omit,
start_date: Optional[str] | Omit = omit,
title: Optional[str] | Omit = omit,
union_code: Optional[str] | Omit = omit,
union_local: Optional[str] | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
Expand Down Expand Up @@ -237,6 +260,9 @@ async def update(
flsa_status: The FLSA status of the individual. Available options: `exempt`, `non_exempt`,
`unknown`.

highly_compensated_employee: IRS flag indicating whether the employee is classified as a Highly Compensated
Employee for nondiscrimination testing purposes (ADP/ACP tests). US-only.

income: The employee's income as reported by the provider. This may not always be
annualized income, but may be in units of bi-weekly, semi-monthly, daily, etc,
depending on what information the provider returns.
Expand All @@ -245,6 +271,9 @@ async def update(

is_active: `true` if the individual an an active employee or contractor at the company.

key_employee: IRS flag indicating whether the employee is classified as a Key Employee for
top-heavy testing purposes. US-only.

last_name: The legal last name of the individual.

location
Expand All @@ -257,6 +286,11 @@ async def update(

title: The current title of the individual.

union_code: The code identifying the union the employee is a member of, as configured in the
payroll system.

union_local: The local chapter or local number within the employee's union.

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -279,9 +313,11 @@ async def update(
"end_date": end_date,
"first_name": first_name,
"flsa_status": flsa_status,
"highly_compensated_employee": highly_compensated_employee,
"income": income,
"income_history": income_history,
"is_active": is_active,
"key_employee": key_employee,
"last_name": last_name,
"latest_rehire_date": latest_rehire_date,
"location": location,
Expand All @@ -290,6 +326,8 @@ async def update(
"source_id": source_id,
"start_date": start_date,
"title": title,
"union_code": union_code,
"union_local": union_local,
},
employment_update_params.EmploymentUpdateParams,
),
Expand Down
12 changes: 12 additions & 0 deletions src/finch/resources/sandbox/individual.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ def update(
first_name: Optional[str] | Omit = omit,
gender: Optional[Literal["female", "male", "other", "decline_to_specify"]] | Omit = omit,
last_name: Optional[str] | Omit = omit,
marital_status: Optional[Literal["single", "married", "divorced", "widowed", "domestic_partner", "unknown"]]
| Omit = omit,
middle_name: Optional[str] | Omit = omit,
phone_numbers: Optional[Iterable[Optional[individual_update_params.PhoneNumber]]] | Omit = omit,
preferred_name: Optional[str] | Omit = omit,
Expand Down Expand Up @@ -92,6 +94,9 @@ def update(

last_name: The legal last name of the individual.

marital_status: The employee's marital status, used for beneficiary designation and spousal
consent workflows.

middle_name: The legal middle name of the individual.

preferred_name: The preferred name of the individual.
Expand Down Expand Up @@ -124,6 +129,7 @@ def update(
"first_name": first_name,
"gender": gender,
"last_name": last_name,
"marital_status": marital_status,
"middle_name": middle_name,
"phone_numbers": phone_numbers,
"preferred_name": preferred_name,
Expand Down Expand Up @@ -186,6 +192,8 @@ async def update(
first_name: Optional[str] | Omit = omit,
gender: Optional[Literal["female", "male", "other", "decline_to_specify"]] | Omit = omit,
last_name: Optional[str] | Omit = omit,
marital_status: Optional[Literal["single", "married", "divorced", "widowed", "domestic_partner", "unknown"]]
| Omit = omit,
middle_name: Optional[str] | Omit = omit,
phone_numbers: Optional[Iterable[Optional[individual_update_params.PhoneNumber]]] | Omit = omit,
preferred_name: Optional[str] | Omit = omit,
Expand Down Expand Up @@ -214,6 +222,9 @@ async def update(

last_name: The legal last name of the individual.

marital_status: The employee's marital status, used for beneficiary designation and spousal
consent workflows.

middle_name: The legal middle name of the individual.

preferred_name: The preferred name of the individual.
Expand Down Expand Up @@ -246,6 +257,7 @@ async def update(
"first_name": first_name,
"gender": gender,
"last_name": last_name,
"marital_status": marital_status,
"middle_name": middle_name,
"phone_numbers": phone_numbers,
"preferred_name": preferred_name,
Expand Down
21 changes: 21 additions & 0 deletions src/finch/types/hris/employment_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,21 @@ class EmploymentDataResponseBody(BaseModel):
Available options: `exempt`, `non_exempt`, `unknown`.
"""

highly_compensated_employee: Optional[bool] = None
"""
IRS flag indicating whether the employee is classified as a Highly Compensated
Employee for nondiscrimination testing purposes (ADP/ACP tests). US-only.
"""

is_active: Optional[bool] = None
"""`true` if the individual an an active employee or contractor at the company."""

key_employee: Optional[bool] = None
"""
IRS flag indicating whether the employee is classified as a Key Employee for
top-heavy testing purposes. US-only.
"""

last_name: Optional[str] = None
"""The legal last name of the individual."""

Expand All @@ -102,6 +114,15 @@ class EmploymentDataResponseBody(BaseModel):
title: Optional[str] = None
"""The current title of the individual."""

union_code: Optional[str] = None
"""
The code identifying the union the employee is a member of, as configured in the
payroll system.
"""

union_local: Optional[str] = None
"""The local chapter or local number within the employee's union."""

custom_fields: Optional[List[EmploymentDataResponseBodyCustomField]] = None
"""Custom fields for the individual.

Expand Down
6 changes: 6 additions & 0 deletions src/finch/types/hris/individual.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ class IndividualResponseBody(BaseModel):
last_name: Optional[str] = None
"""The legal last name of the individual."""

marital_status: Optional[Literal["single", "married", "divorced", "widowed", "domestic_partner", "unknown"]] = None
"""
The employee's marital status, used for beneficiary designation and spousal
consent workflows.
"""

middle_name: Optional[str] = None
"""The legal middle name of the individual."""

Expand Down
27 changes: 27 additions & 0 deletions src/finch/types/sandbox/directory_create_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,12 @@ class Body(TypedDict, total=False):
gender: Optional[Literal["female", "male", "other", "decline_to_specify"]]
"""The gender of the individual."""

highly_compensated_employee: Optional[bool]
"""
IRS flag indicating whether the employee is classified as a Highly Compensated
Employee for nondiscrimination testing purposes (ADP/ACP tests). US-only.
"""

income: Optional[IncomeParam]
"""The employee's income as reported by the provider.

Expand All @@ -149,6 +155,12 @@ class Body(TypedDict, total=False):
is_active: Optional[bool]
"""`true` if the individual an an active employee or contractor at the company."""

key_employee: Optional[bool]
"""
IRS flag indicating whether the employee is classified as a Key Employee for
top-heavy testing purposes. US-only.
"""

last_name: Optional[str]
"""The legal last name of the individual."""

Expand All @@ -159,6 +171,12 @@ class Body(TypedDict, total=False):
manager: Optional[BodyManager]
"""The manager object representing the manager of the individual within the org."""

marital_status: Optional[Literal["single", "married", "divorced", "widowed", "domestic_partner", "unknown"]]
"""
The employee's marital status, used for beneficiary designation and spousal
consent workflows.
"""

middle_name: Optional[str]
"""The legal middle name of the individual."""

Expand All @@ -184,3 +202,12 @@ class Body(TypedDict, total=False):

title: Optional[str]
"""The current title of the individual."""

union_code: Optional[str]
"""
The code identifying the union the employee is a member of, as configured in the
payroll system.
"""

union_local: Optional[str]
"""The local chapter or local number within the employee's union."""
Loading