From b43172be04510b5a760a1446d3b302e9487cf3ab Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 21 Nov 2025 18:39:13 +0000
Subject: [PATCH 1/8] fix(java): Resolve name collisions
---
.stats.yml | 4 +-
api.md | 4 +-
src/finch/resources/connect/sessions.py | 40 +++++++--------
src/finch/resources/request_forwarding.py | 24 ++++-----
src/finch/types/connect/__init__.py | 4 +-
...ew_params.py => session_connect_params.py} | 4 +-
...esponse.py => session_connect_response.py} | 4 +-
.../request_forwarding_forward_params.py | 14 +++---
tests/api_resources/connect/test_sessions.py | 50 +++++++++----------
.../api_resources/test_request_forwarding.py | 4 +-
10 files changed, 76 insertions(+), 76 deletions(-)
rename src/finch/types/connect/{session_new_params.py => session_connect_params.py} (94%)
rename src/finch/types/connect/{session_new_response.py => session_connect_response.py} (79%)
diff --git a/.stats.yml b/.stats.yml
index 8d224370..f316e062 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 46
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-970ab04a97244c68824c0c52e06925cba14fb7dbfc36c03167c1afe74cd1b150.yml
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-640ec74bfc2f335f7277863ee0cbd0af98bb6018cb1ec2f116ce4145148f4477.yml
openapi_spec_hash: 315e7859c3f77311261fb824b74a8247
-config_hash: f2846563903bf75ab0858872154df0f7
+config_hash: f921f92cc97449dcc1334a594b435c73
diff --git a/api.md b/api.md
index 54860760..62145265 100644
--- a/api.md
+++ b/api.md
@@ -430,10 +430,10 @@ Methods:
Types:
```python
-from finch.types.connect import SessionNewResponse, SessionReauthenticateResponse
+from finch.types.connect import SessionConnectResponse, SessionReauthenticateResponse
```
Methods:
-- client.connect.sessions.new(\*\*params) -> SessionNewResponse
+- client.connect.sessions.connect(\*\*params) -> SessionConnectResponse
- client.connect.sessions.reauthenticate(\*\*params) -> SessionReauthenticateResponse
diff --git a/src/finch/resources/connect/sessions.py b/src/finch/resources/connect/sessions.py
index f402a565..75c09e79 100644
--- a/src/finch/resources/connect/sessions.py
+++ b/src/finch/resources/connect/sessions.py
@@ -14,8 +14,8 @@
from ..._resource import SyncAPIResource, AsyncAPIResource
from ..._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper
from ..._base_client import make_request_options
-from ...types.connect import session_new_params, session_reauthenticate_params
-from ...types.connect.session_new_response import SessionNewResponse
+from ...types.connect import session_connect_params, session_reauthenticate_params
+from ...types.connect.session_connect_response import SessionConnectResponse
from ...types.connect.session_reauthenticate_response import SessionReauthenticateResponse
__all__ = ["Sessions", "AsyncSessions"]
@@ -41,7 +41,7 @@ def with_streaming_response(self) -> SessionsWithStreamingResponse:
"""
return SessionsWithStreamingResponse(self)
- def new(
+ def connect(
self,
*,
customer_id: str,
@@ -61,7 +61,7 @@ def new(
]
],
customer_email: Optional[str] | Omit = omit,
- integration: Optional[session_new_params.Integration] | Omit = omit,
+ integration: Optional[session_connect_params.Integration] | Omit = omit,
manual: Optional[bool] | Omit = omit,
minutes_to_expire: Optional[float] | Omit = omit,
redirect_uri: Optional[str] | Omit = omit,
@@ -72,7 +72,7 @@ def new(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SessionNewResponse:
+ ) -> SessionConnectResponse:
"""
Create a new connect session for an employer
@@ -118,12 +118,12 @@ def new(
"redirect_uri": redirect_uri,
"sandbox": sandbox,
},
- session_new_params.SessionNewParams,
+ session_connect_params.SessionConnectParams,
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=SessionNewResponse,
+ cast_to=SessionConnectResponse,
)
def reauthenticate(
@@ -215,7 +215,7 @@ def with_streaming_response(self) -> AsyncSessionsWithStreamingResponse:
"""
return AsyncSessionsWithStreamingResponse(self)
- async def new(
+ async def connect(
self,
*,
customer_id: str,
@@ -235,7 +235,7 @@ async def new(
]
],
customer_email: Optional[str] | Omit = omit,
- integration: Optional[session_new_params.Integration] | Omit = omit,
+ integration: Optional[session_connect_params.Integration] | Omit = omit,
manual: Optional[bool] | Omit = omit,
minutes_to_expire: Optional[float] | Omit = omit,
redirect_uri: Optional[str] | Omit = omit,
@@ -246,7 +246,7 @@ async def new(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SessionNewResponse:
+ ) -> SessionConnectResponse:
"""
Create a new connect session for an employer
@@ -292,12 +292,12 @@ async def new(
"redirect_uri": redirect_uri,
"sandbox": sandbox,
},
- session_new_params.SessionNewParams,
+ session_connect_params.SessionConnectParams,
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=SessionNewResponse,
+ cast_to=SessionConnectResponse,
)
async def reauthenticate(
@@ -373,8 +373,8 @@ class SessionsWithRawResponse:
def __init__(self, sessions: Sessions) -> None:
self._sessions = sessions
- self.new = _legacy_response.to_raw_response_wrapper(
- sessions.new,
+ self.connect = _legacy_response.to_raw_response_wrapper(
+ sessions.connect,
)
self.reauthenticate = _legacy_response.to_raw_response_wrapper(
sessions.reauthenticate,
@@ -385,8 +385,8 @@ class AsyncSessionsWithRawResponse:
def __init__(self, sessions: AsyncSessions) -> None:
self._sessions = sessions
- self.new = _legacy_response.async_to_raw_response_wrapper(
- sessions.new,
+ self.connect = _legacy_response.async_to_raw_response_wrapper(
+ sessions.connect,
)
self.reauthenticate = _legacy_response.async_to_raw_response_wrapper(
sessions.reauthenticate,
@@ -397,8 +397,8 @@ class SessionsWithStreamingResponse:
def __init__(self, sessions: Sessions) -> None:
self._sessions = sessions
- self.new = to_streamed_response_wrapper(
- sessions.new,
+ self.connect = to_streamed_response_wrapper(
+ sessions.connect,
)
self.reauthenticate = to_streamed_response_wrapper(
sessions.reauthenticate,
@@ -409,8 +409,8 @@ class AsyncSessionsWithStreamingResponse:
def __init__(self, sessions: AsyncSessions) -> None:
self._sessions = sessions
- self.new = async_to_streamed_response_wrapper(
- sessions.new,
+ self.connect = async_to_streamed_response_wrapper(
+ sessions.connect,
)
self.reauthenticate = async_to_streamed_response_wrapper(
sessions.reauthenticate,
diff --git a/src/finch/resources/request_forwarding.py b/src/finch/resources/request_forwarding.py
index 62e2a25e..dacb93fd 100644
--- a/src/finch/resources/request_forwarding.py
+++ b/src/finch/resources/request_forwarding.py
@@ -45,8 +45,8 @@ def forward(
method: str,
route: str,
data: Optional[str] | Omit = omit,
- headers: Optional[Dict[str, Optional[object]]] | Omit = omit,
params: Optional[Dict[str, Optional[object]]] | Omit = omit,
+ request_headers: Optional[Dict[str, Optional[object]]] | 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,
@@ -72,13 +72,13 @@ def forward(
data: The body for the forwarded request. This value must be specified as either a
string or a valid JSON object.
- headers: The HTTP headers to include on the forwarded request. This value must be
- specified as an object of key-value pairs. Example:
- `{"Content-Type": "application/xml", "X-API-Version": "v1" }`
-
params: The query parameters for the forwarded request. This value must be specified as
a valid JSON object rather than a query string.
+ request_headers: The HTTP headers to include on the forwarded request. This value must be
+ specified as an object of key-value pairs. Example:
+ `{"Content-Type": "application/xml", "X-API-Version": "v1" }`
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -94,8 +94,8 @@ def forward(
"method": method,
"route": route,
"data": data,
- "headers": headers,
"params": params,
+ "request_headers": request_headers,
},
request_forwarding_forward_params.RequestForwardingForwardParams,
),
@@ -132,8 +132,8 @@ async def forward(
method: str,
route: str,
data: Optional[str] | Omit = omit,
- headers: Optional[Dict[str, Optional[object]]] | Omit = omit,
params: Optional[Dict[str, Optional[object]]] | Omit = omit,
+ request_headers: Optional[Dict[str, Optional[object]]] | 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,
@@ -159,13 +159,13 @@ async def forward(
data: The body for the forwarded request. This value must be specified as either a
string or a valid JSON object.
- headers: The HTTP headers to include on the forwarded request. This value must be
- specified as an object of key-value pairs. Example:
- `{"Content-Type": "application/xml", "X-API-Version": "v1" }`
-
params: The query parameters for the forwarded request. This value must be specified as
a valid JSON object rather than a query string.
+ request_headers: The HTTP headers to include on the forwarded request. This value must be
+ specified as an object of key-value pairs. Example:
+ `{"Content-Type": "application/xml", "X-API-Version": "v1" }`
+
extra_headers: Send extra headers
extra_query: Add additional query parameters to the request
@@ -181,8 +181,8 @@ async def forward(
"method": method,
"route": route,
"data": data,
- "headers": headers,
"params": params,
+ "request_headers": request_headers,
},
request_forwarding_forward_params.RequestForwardingForwardParams,
),
diff --git a/src/finch/types/connect/__init__.py b/src/finch/types/connect/__init__.py
index fe6954ab..ef140341 100644
--- a/src/finch/types/connect/__init__.py
+++ b/src/finch/types/connect/__init__.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from .session_new_params import SessionNewParams as SessionNewParams
-from .session_new_response import SessionNewResponse as SessionNewResponse
+from .session_connect_params import SessionConnectParams as SessionConnectParams
+from .session_connect_response import SessionConnectResponse as SessionConnectResponse
from .session_reauthenticate_params import SessionReauthenticateParams as SessionReauthenticateParams
from .session_reauthenticate_response import SessionReauthenticateResponse as SessionReauthenticateResponse
diff --git a/src/finch/types/connect/session_new_params.py b/src/finch/types/connect/session_connect_params.py
similarity index 94%
rename from src/finch/types/connect/session_new_params.py
rename to src/finch/types/connect/session_connect_params.py
index b78da76a..fa1d17a6 100644
--- a/src/finch/types/connect/session_new_params.py
+++ b/src/finch/types/connect/session_connect_params.py
@@ -5,10 +5,10 @@
from typing import List, Optional
from typing_extensions import Literal, Required, TypedDict
-__all__ = ["SessionNewParams", "Integration"]
+__all__ = ["SessionConnectParams", "Integration"]
-class SessionNewParams(TypedDict, total=False):
+class SessionConnectParams(TypedDict, total=False):
customer_id: Required[str]
"""Unique identifier for the customer"""
diff --git a/src/finch/types/connect/session_new_response.py b/src/finch/types/connect/session_connect_response.py
similarity index 79%
rename from src/finch/types/connect/session_new_response.py
rename to src/finch/types/connect/session_connect_response.py
index 6789fe28..cbe65471 100644
--- a/src/finch/types/connect/session_new_response.py
+++ b/src/finch/types/connect/session_connect_response.py
@@ -2,10 +2,10 @@
from ..._models import BaseModel
-__all__ = ["SessionNewResponse"]
+__all__ = ["SessionConnectResponse"]
-class SessionNewResponse(BaseModel):
+class SessionConnectResponse(BaseModel):
connect_url: str
"""The Connect URL to redirect the user to for authentication"""
diff --git a/src/finch/types/request_forwarding_forward_params.py b/src/finch/types/request_forwarding_forward_params.py
index a7d9f205..9fff24b5 100644
--- a/src/finch/types/request_forwarding_forward_params.py
+++ b/src/finch/types/request_forwarding_forward_params.py
@@ -28,15 +28,15 @@ class RequestForwardingForwardParams(TypedDict, total=False):
This value must be specified as either a string or a valid JSON object.
"""
- headers: Optional[Dict[str, Optional[object]]]
- """The HTTP headers to include on the forwarded request.
-
- This value must be specified as an object of key-value pairs. Example:
- `{"Content-Type": "application/xml", "X-API-Version": "v1" }`
- """
-
params: Optional[Dict[str, Optional[object]]]
"""The query parameters for the forwarded request.
This value must be specified as a valid JSON object rather than a query string.
"""
+
+ request_headers: Optional[Dict[str, Optional[object]]]
+ """The HTTP headers to include on the forwarded request.
+
+ This value must be specified as an object of key-value pairs. Example:
+ `{"Content-Type": "application/xml", "X-API-Version": "v1" }`
+ """
diff --git a/tests/api_resources/connect/test_sessions.py b/tests/api_resources/connect/test_sessions.py
index a6ece5bc..11822245 100644
--- a/tests/api_resources/connect/test_sessions.py
+++ b/tests/api_resources/connect/test_sessions.py
@@ -10,7 +10,7 @@
from finch import Finch, AsyncFinch
from tests.utils import assert_matches_type
from finch.types.connect import (
- SessionNewResponse,
+ SessionConnectResponse,
SessionReauthenticateResponse,
)
@@ -22,18 +22,18 @@ class TestSessions:
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- def test_method_new(self, client: Finch) -> None:
- session = client.connect.sessions.new(
+ def test_method_connect(self, client: Finch) -> None:
+ session = client.connect.sessions.connect(
customer_id="x",
customer_name="x",
products=["benefits"],
)
- assert_matches_type(SessionNewResponse, session, path=["response"])
+ assert_matches_type(SessionConnectResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- def test_method_new_with_all_params(self, client: Finch) -> None:
- session = client.connect.sessions.new(
+ def test_method_connect_with_all_params(self, client: Finch) -> None:
+ session = client.connect.sessions.connect(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -47,12 +47,12 @@ def test_method_new_with_all_params(self, client: Finch) -> None:
redirect_uri="redirect_uri",
sandbox="finch",
)
- assert_matches_type(SessionNewResponse, session, path=["response"])
+ assert_matches_type(SessionConnectResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- def test_raw_response_new(self, client: Finch) -> None:
- response = client.connect.sessions.with_raw_response.new(
+ def test_raw_response_connect(self, client: Finch) -> None:
+ response = client.connect.sessions.with_raw_response.connect(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -61,12 +61,12 @@ def test_raw_response_new(self, client: Finch) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
session = response.parse()
- assert_matches_type(SessionNewResponse, session, path=["response"])
+ assert_matches_type(SessionConnectResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- def test_streaming_response_new(self, client: Finch) -> None:
- with client.connect.sessions.with_streaming_response.new(
+ def test_streaming_response_connect(self, client: Finch) -> None:
+ with client.connect.sessions.with_streaming_response.connect(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -75,7 +75,7 @@ def test_streaming_response_new(self, client: Finch) -> None:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
session = response.parse()
- assert_matches_type(SessionNewResponse, session, path=["response"])
+ assert_matches_type(SessionConnectResponse, session, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -132,18 +132,18 @@ class TestAsyncSessions:
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- async def test_method_new(self, async_client: AsyncFinch) -> None:
- session = await async_client.connect.sessions.new(
+ async def test_method_connect(self, async_client: AsyncFinch) -> None:
+ session = await async_client.connect.sessions.connect(
customer_id="x",
customer_name="x",
products=["benefits"],
)
- assert_matches_type(SessionNewResponse, session, path=["response"])
+ assert_matches_type(SessionConnectResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- async def test_method_new_with_all_params(self, async_client: AsyncFinch) -> None:
- session = await async_client.connect.sessions.new(
+ async def test_method_connect_with_all_params(self, async_client: AsyncFinch) -> None:
+ session = await async_client.connect.sessions.connect(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -157,12 +157,12 @@ async def test_method_new_with_all_params(self, async_client: AsyncFinch) -> Non
redirect_uri="redirect_uri",
sandbox="finch",
)
- assert_matches_type(SessionNewResponse, session, path=["response"])
+ assert_matches_type(SessionConnectResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- async def test_raw_response_new(self, async_client: AsyncFinch) -> None:
- response = await async_client.connect.sessions.with_raw_response.new(
+ async def test_raw_response_connect(self, async_client: AsyncFinch) -> None:
+ response = await async_client.connect.sessions.with_raw_response.connect(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -171,12 +171,12 @@ async def test_raw_response_new(self, async_client: AsyncFinch) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
session = response.parse()
- assert_matches_type(SessionNewResponse, session, path=["response"])
+ assert_matches_type(SessionConnectResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- async def test_streaming_response_new(self, async_client: AsyncFinch) -> None:
- async with async_client.connect.sessions.with_streaming_response.new(
+ async def test_streaming_response_connect(self, async_client: AsyncFinch) -> None:
+ async with async_client.connect.sessions.with_streaming_response.connect(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -185,7 +185,7 @@ async def test_streaming_response_new(self, async_client: AsyncFinch) -> None:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
session = await response.parse()
- assert_matches_type(SessionNewResponse, session, path=["response"])
+ assert_matches_type(SessionConnectResponse, session, path=["response"])
assert cast(Any, response.is_closed) is True
diff --git a/tests/api_resources/test_request_forwarding.py b/tests/api_resources/test_request_forwarding.py
index 5615e4d2..5bd28a5f 100644
--- a/tests/api_resources/test_request_forwarding.py
+++ b/tests/api_resources/test_request_forwarding.py
@@ -31,8 +31,8 @@ def test_method_forward_with_all_params(self, client: Finch) -> None:
method="method",
route="route",
data="data",
- headers={"foo": "bar"},
params={"foo": "bar"},
+ request_headers={"foo": "bar"},
)
assert_matches_type(RequestForwardingForwardResponse, request_forwarding, path=["response"])
@@ -82,8 +82,8 @@ async def test_method_forward_with_all_params(self, async_client: AsyncFinch) ->
method="method",
route="route",
data="data",
- headers={"foo": "bar"},
params={"foo": "bar"},
+ request_headers={"foo": "bar"},
)
assert_matches_type(RequestForwardingForwardResponse, request_forwarding, path=["response"])
From a00107bb227b9dfa7daa3858fb06063d5b053e68 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 21 Nov 2025 20:22:34 +0000
Subject: [PATCH 2/8] feat(api): manual updates
---
.stats.yml | 2 +-
api.md | 4 +-
src/finch/resources/connect/sessions.py | 40 +++++++--------
src/finch/types/connect/__init__.py | 4 +-
...onnect_params.py => session_new_params.py} | 4 +-
...ct_response.py => session_new_response.py} | 4 +-
tests/api_resources/connect/test_sessions.py | 50 +++++++++----------
7 files changed, 54 insertions(+), 54 deletions(-)
rename src/finch/types/connect/{session_connect_params.py => session_new_params.py} (94%)
rename src/finch/types/connect/{session_connect_response.py => session_new_response.py} (79%)
diff --git a/.stats.yml b/.stats.yml
index f316e062..40836a3f 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 46
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-640ec74bfc2f335f7277863ee0cbd0af98bb6018cb1ec2f116ce4145148f4477.yml
openapi_spec_hash: 315e7859c3f77311261fb824b74a8247
-config_hash: f921f92cc97449dcc1334a594b435c73
+config_hash: 0892e2e0eeb0343a022afa62e9080dd1
diff --git a/api.md b/api.md
index 62145265..54860760 100644
--- a/api.md
+++ b/api.md
@@ -430,10 +430,10 @@ Methods:
Types:
```python
-from finch.types.connect import SessionConnectResponse, SessionReauthenticateResponse
+from finch.types.connect import SessionNewResponse, SessionReauthenticateResponse
```
Methods:
-- client.connect.sessions.connect(\*\*params) -> SessionConnectResponse
+- client.connect.sessions.new(\*\*params) -> SessionNewResponse
- client.connect.sessions.reauthenticate(\*\*params) -> SessionReauthenticateResponse
diff --git a/src/finch/resources/connect/sessions.py b/src/finch/resources/connect/sessions.py
index 75c09e79..f402a565 100644
--- a/src/finch/resources/connect/sessions.py
+++ b/src/finch/resources/connect/sessions.py
@@ -14,8 +14,8 @@
from ..._resource import SyncAPIResource, AsyncAPIResource
from ..._response import to_streamed_response_wrapper, async_to_streamed_response_wrapper
from ..._base_client import make_request_options
-from ...types.connect import session_connect_params, session_reauthenticate_params
-from ...types.connect.session_connect_response import SessionConnectResponse
+from ...types.connect import session_new_params, session_reauthenticate_params
+from ...types.connect.session_new_response import SessionNewResponse
from ...types.connect.session_reauthenticate_response import SessionReauthenticateResponse
__all__ = ["Sessions", "AsyncSessions"]
@@ -41,7 +41,7 @@ def with_streaming_response(self) -> SessionsWithStreamingResponse:
"""
return SessionsWithStreamingResponse(self)
- def connect(
+ def new(
self,
*,
customer_id: str,
@@ -61,7 +61,7 @@ def connect(
]
],
customer_email: Optional[str] | Omit = omit,
- integration: Optional[session_connect_params.Integration] | Omit = omit,
+ integration: Optional[session_new_params.Integration] | Omit = omit,
manual: Optional[bool] | Omit = omit,
minutes_to_expire: Optional[float] | Omit = omit,
redirect_uri: Optional[str] | Omit = omit,
@@ -72,7 +72,7 @@ def connect(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SessionConnectResponse:
+ ) -> SessionNewResponse:
"""
Create a new connect session for an employer
@@ -118,12 +118,12 @@ def connect(
"redirect_uri": redirect_uri,
"sandbox": sandbox,
},
- session_connect_params.SessionConnectParams,
+ session_new_params.SessionNewParams,
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=SessionConnectResponse,
+ cast_to=SessionNewResponse,
)
def reauthenticate(
@@ -215,7 +215,7 @@ def with_streaming_response(self) -> AsyncSessionsWithStreamingResponse:
"""
return AsyncSessionsWithStreamingResponse(self)
- async def connect(
+ async def new(
self,
*,
customer_id: str,
@@ -235,7 +235,7 @@ async def connect(
]
],
customer_email: Optional[str] | Omit = omit,
- integration: Optional[session_connect_params.Integration] | Omit = omit,
+ integration: Optional[session_new_params.Integration] | Omit = omit,
manual: Optional[bool] | Omit = omit,
minutes_to_expire: Optional[float] | Omit = omit,
redirect_uri: Optional[str] | Omit = omit,
@@ -246,7 +246,7 @@ async def connect(
extra_query: Query | None = None,
extra_body: Body | None = None,
timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> SessionConnectResponse:
+ ) -> SessionNewResponse:
"""
Create a new connect session for an employer
@@ -292,12 +292,12 @@ async def connect(
"redirect_uri": redirect_uri,
"sandbox": sandbox,
},
- session_connect_params.SessionConnectParams,
+ session_new_params.SessionNewParams,
),
options=make_request_options(
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
),
- cast_to=SessionConnectResponse,
+ cast_to=SessionNewResponse,
)
async def reauthenticate(
@@ -373,8 +373,8 @@ class SessionsWithRawResponse:
def __init__(self, sessions: Sessions) -> None:
self._sessions = sessions
- self.connect = _legacy_response.to_raw_response_wrapper(
- sessions.connect,
+ self.new = _legacy_response.to_raw_response_wrapper(
+ sessions.new,
)
self.reauthenticate = _legacy_response.to_raw_response_wrapper(
sessions.reauthenticate,
@@ -385,8 +385,8 @@ class AsyncSessionsWithRawResponse:
def __init__(self, sessions: AsyncSessions) -> None:
self._sessions = sessions
- self.connect = _legacy_response.async_to_raw_response_wrapper(
- sessions.connect,
+ self.new = _legacy_response.async_to_raw_response_wrapper(
+ sessions.new,
)
self.reauthenticate = _legacy_response.async_to_raw_response_wrapper(
sessions.reauthenticate,
@@ -397,8 +397,8 @@ class SessionsWithStreamingResponse:
def __init__(self, sessions: Sessions) -> None:
self._sessions = sessions
- self.connect = to_streamed_response_wrapper(
- sessions.connect,
+ self.new = to_streamed_response_wrapper(
+ sessions.new,
)
self.reauthenticate = to_streamed_response_wrapper(
sessions.reauthenticate,
@@ -409,8 +409,8 @@ class AsyncSessionsWithStreamingResponse:
def __init__(self, sessions: AsyncSessions) -> None:
self._sessions = sessions
- self.connect = async_to_streamed_response_wrapper(
- sessions.connect,
+ self.new = async_to_streamed_response_wrapper(
+ sessions.new,
)
self.reauthenticate = async_to_streamed_response_wrapper(
sessions.reauthenticate,
diff --git a/src/finch/types/connect/__init__.py b/src/finch/types/connect/__init__.py
index ef140341..fe6954ab 100644
--- a/src/finch/types/connect/__init__.py
+++ b/src/finch/types/connect/__init__.py
@@ -2,7 +2,7 @@
from __future__ import annotations
-from .session_connect_params import SessionConnectParams as SessionConnectParams
-from .session_connect_response import SessionConnectResponse as SessionConnectResponse
+from .session_new_params import SessionNewParams as SessionNewParams
+from .session_new_response import SessionNewResponse as SessionNewResponse
from .session_reauthenticate_params import SessionReauthenticateParams as SessionReauthenticateParams
from .session_reauthenticate_response import SessionReauthenticateResponse as SessionReauthenticateResponse
diff --git a/src/finch/types/connect/session_connect_params.py b/src/finch/types/connect/session_new_params.py
similarity index 94%
rename from src/finch/types/connect/session_connect_params.py
rename to src/finch/types/connect/session_new_params.py
index fa1d17a6..b78da76a 100644
--- a/src/finch/types/connect/session_connect_params.py
+++ b/src/finch/types/connect/session_new_params.py
@@ -5,10 +5,10 @@
from typing import List, Optional
from typing_extensions import Literal, Required, TypedDict
-__all__ = ["SessionConnectParams", "Integration"]
+__all__ = ["SessionNewParams", "Integration"]
-class SessionConnectParams(TypedDict, total=False):
+class SessionNewParams(TypedDict, total=False):
customer_id: Required[str]
"""Unique identifier for the customer"""
diff --git a/src/finch/types/connect/session_connect_response.py b/src/finch/types/connect/session_new_response.py
similarity index 79%
rename from src/finch/types/connect/session_connect_response.py
rename to src/finch/types/connect/session_new_response.py
index cbe65471..6789fe28 100644
--- a/src/finch/types/connect/session_connect_response.py
+++ b/src/finch/types/connect/session_new_response.py
@@ -2,10 +2,10 @@
from ..._models import BaseModel
-__all__ = ["SessionConnectResponse"]
+__all__ = ["SessionNewResponse"]
-class SessionConnectResponse(BaseModel):
+class SessionNewResponse(BaseModel):
connect_url: str
"""The Connect URL to redirect the user to for authentication"""
diff --git a/tests/api_resources/connect/test_sessions.py b/tests/api_resources/connect/test_sessions.py
index 11822245..a6ece5bc 100644
--- a/tests/api_resources/connect/test_sessions.py
+++ b/tests/api_resources/connect/test_sessions.py
@@ -10,7 +10,7 @@
from finch import Finch, AsyncFinch
from tests.utils import assert_matches_type
from finch.types.connect import (
- SessionConnectResponse,
+ SessionNewResponse,
SessionReauthenticateResponse,
)
@@ -22,18 +22,18 @@ class TestSessions:
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- def test_method_connect(self, client: Finch) -> None:
- session = client.connect.sessions.connect(
+ def test_method_new(self, client: Finch) -> None:
+ session = client.connect.sessions.new(
customer_id="x",
customer_name="x",
products=["benefits"],
)
- assert_matches_type(SessionConnectResponse, session, path=["response"])
+ assert_matches_type(SessionNewResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- def test_method_connect_with_all_params(self, client: Finch) -> None:
- session = client.connect.sessions.connect(
+ def test_method_new_with_all_params(self, client: Finch) -> None:
+ session = client.connect.sessions.new(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -47,12 +47,12 @@ def test_method_connect_with_all_params(self, client: Finch) -> None:
redirect_uri="redirect_uri",
sandbox="finch",
)
- assert_matches_type(SessionConnectResponse, session, path=["response"])
+ assert_matches_type(SessionNewResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- def test_raw_response_connect(self, client: Finch) -> None:
- response = client.connect.sessions.with_raw_response.connect(
+ def test_raw_response_new(self, client: Finch) -> None:
+ response = client.connect.sessions.with_raw_response.new(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -61,12 +61,12 @@ def test_raw_response_connect(self, client: Finch) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
session = response.parse()
- assert_matches_type(SessionConnectResponse, session, path=["response"])
+ assert_matches_type(SessionNewResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- def test_streaming_response_connect(self, client: Finch) -> None:
- with client.connect.sessions.with_streaming_response.connect(
+ def test_streaming_response_new(self, client: Finch) -> None:
+ with client.connect.sessions.with_streaming_response.new(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -75,7 +75,7 @@ def test_streaming_response_connect(self, client: Finch) -> None:
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
session = response.parse()
- assert_matches_type(SessionConnectResponse, session, path=["response"])
+ assert_matches_type(SessionNewResponse, session, path=["response"])
assert cast(Any, response.is_closed) is True
@@ -132,18 +132,18 @@ class TestAsyncSessions:
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- async def test_method_connect(self, async_client: AsyncFinch) -> None:
- session = await async_client.connect.sessions.connect(
+ async def test_method_new(self, async_client: AsyncFinch) -> None:
+ session = await async_client.connect.sessions.new(
customer_id="x",
customer_name="x",
products=["benefits"],
)
- assert_matches_type(SessionConnectResponse, session, path=["response"])
+ assert_matches_type(SessionNewResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- async def test_method_connect_with_all_params(self, async_client: AsyncFinch) -> None:
- session = await async_client.connect.sessions.connect(
+ async def test_method_new_with_all_params(self, async_client: AsyncFinch) -> None:
+ session = await async_client.connect.sessions.new(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -157,12 +157,12 @@ async def test_method_connect_with_all_params(self, async_client: AsyncFinch) ->
redirect_uri="redirect_uri",
sandbox="finch",
)
- assert_matches_type(SessionConnectResponse, session, path=["response"])
+ assert_matches_type(SessionNewResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- async def test_raw_response_connect(self, async_client: AsyncFinch) -> None:
- response = await async_client.connect.sessions.with_raw_response.connect(
+ async def test_raw_response_new(self, async_client: AsyncFinch) -> None:
+ response = await async_client.connect.sessions.with_raw_response.new(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -171,12 +171,12 @@ async def test_raw_response_connect(self, async_client: AsyncFinch) -> None:
assert response.is_closed is True
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
session = response.parse()
- assert_matches_type(SessionConnectResponse, session, path=["response"])
+ assert_matches_type(SessionNewResponse, session, path=["response"])
@pytest.mark.skip(reason="prism tests are broken")
@parametrize
- async def test_streaming_response_connect(self, async_client: AsyncFinch) -> None:
- async with async_client.connect.sessions.with_streaming_response.connect(
+ async def test_streaming_response_new(self, async_client: AsyncFinch) -> None:
+ async with async_client.connect.sessions.with_streaming_response.new(
customer_id="x",
customer_name="x",
products=["benefits"],
@@ -185,7 +185,7 @@ async def test_streaming_response_connect(self, async_client: AsyncFinch) -> Non
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
session = await response.parse()
- assert_matches_type(SessionConnectResponse, session, path=["response"])
+ assert_matches_type(SessionNewResponse, session, path=["response"])
assert cast(Any, response.is_closed) is True
From f7306871020ec264ad289455f31b942d0251809e Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 25 Nov 2025 17:18:39 +0000
Subject: [PATCH 3/8] feat(api): api update
---
.stats.yml | 4 ++--
src/finch/types/sandbox/payment_create_params.py | 2 ++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 40836a3f..c27288ed 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 46
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-640ec74bfc2f335f7277863ee0cbd0af98bb6018cb1ec2f116ce4145148f4477.yml
-openapi_spec_hash: 315e7859c3f77311261fb824b74a8247
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-d9cb320c8313cd122b4851d726c6cea39a14a5317880c6d063671ad3f412e632.yml
+openapi_spec_hash: 58c2cf578f0736b8c5df957f6a61190b
config_hash: 0892e2e0eeb0343a022afa62e9080dd1
diff --git a/src/finch/types/sandbox/payment_create_params.py b/src/finch/types/sandbox/payment_create_params.py
index 1f74fb81..f3fbcd67 100644
--- a/src/finch/types/sandbox/payment_create_params.py
+++ b/src/finch/types/sandbox/payment_create_params.py
@@ -55,6 +55,7 @@ class PayStatementEmployeeDeduction(TypedDict, total=False):
amount: int
name: str
+ """The deduction name. Required when type is specified."""
pre_tax: bool
@@ -85,6 +86,7 @@ class PayStatementEmployerContribution(TypedDict, total=False):
amount: int
name: str
+ """The contribution name. Required when type is specified."""
type: Literal[
"457",
From 3b90188ae6b7c3029cdd649d96ce4a07418584e2 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 16:52:48 +0000
Subject: [PATCH 4/8] fix: ensure streams are always closed
---
src/finch/_streaming.py | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/src/finch/_streaming.py b/src/finch/_streaming.py
index 82877ebb..facc5e66 100644
--- a/src/finch/_streaming.py
+++ b/src/finch/_streaming.py
@@ -54,11 +54,12 @@ def __stream__(self) -> Iterator[_T]:
process_data = self._client._process_response_data
iterator = self._iter_events()
- for sse in iterator:
- yield process_data(data=sse.json(), cast_to=cast_to, response=response)
-
- # As we might not fully consume the response stream, we need to close it explicitly
- response.close()
+ try:
+ for sse in iterator:
+ yield process_data(data=sse.json(), cast_to=cast_to, response=response)
+ finally:
+ # Ensure the response is closed even if the consumer doesn't read all data
+ response.close()
def __enter__(self) -> Self:
return self
@@ -117,11 +118,12 @@ async def __stream__(self) -> AsyncIterator[_T]:
process_data = self._client._process_response_data
iterator = self._iter_events()
- async for sse in iterator:
- yield process_data(data=sse.json(), cast_to=cast_to, response=response)
-
- # As we might not fully consume the response stream, we need to close it explicitly
- await response.aclose()
+ try:
+ async for sse in iterator:
+ yield process_data(data=sse.json(), cast_to=cast_to, response=response)
+ finally:
+ # Ensure the response is closed even if the consumer doesn't read all data
+ await response.aclose()
async def __aenter__(self) -> Self:
return self
From f37f836bfcafc6eca093e2158eaaf874350f52ee Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 18:49:45 +0000
Subject: [PATCH 5/8] chore(deps): mypy 1.18.1 has a regression, pin to 1.17
---
pyproject.toml | 2 +-
requirements-dev.lock | 4 +++-
requirements.lock | 8 ++++----
3 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 812de227..3b6e2354 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -46,7 +46,7 @@ managed = true
# version pins are in requirements-dev.lock
dev-dependencies = [
"pyright==1.1.399",
- "mypy",
+ "mypy==1.17",
"respx",
"pytest",
"pytest-asyncio",
diff --git a/requirements-dev.lock b/requirements-dev.lock
index 11981681..5bc92efd 100644
--- a/requirements-dev.lock
+++ b/requirements-dev.lock
@@ -72,7 +72,7 @@ mdurl==0.1.2
multidict==6.4.4
# via aiohttp
# via yarl
-mypy==1.14.1
+mypy==1.17.0
mypy-extensions==1.0.0
# via mypy
nodeenv==1.8.0
@@ -81,6 +81,8 @@ nox==2023.4.22
packaging==23.2
# via nox
# via pytest
+pathspec==0.12.1
+ # via mypy
platformdirs==3.11.0
# via virtualenv
pluggy==1.5.0
diff --git a/requirements.lock b/requirements.lock
index b68ef972..123cccf5 100644
--- a/requirements.lock
+++ b/requirements.lock
@@ -55,21 +55,21 @@ multidict==6.4.4
propcache==0.3.1
# via aiohttp
# via yarl
-pydantic==2.11.9
+pydantic==2.12.5
# via finch-api
-pydantic-core==2.33.2
+pydantic-core==2.41.5
# via pydantic
sniffio==1.3.0
# via anyio
# via finch-api
-typing-extensions==4.12.2
+typing-extensions==4.15.0
# via anyio
# via finch-api
# via multidict
# via pydantic
# via pydantic-core
# via typing-inspection
-typing-inspection==0.4.1
+typing-inspection==0.4.2
# via pydantic
yarl==1.20.0
# via aiohttp
From 5d992ce454b47b07b7cfd4a176adcd287e3ed069 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Mon, 1 Dec 2025 17:41:05 +0000
Subject: [PATCH 6/8] codegen metadata
---
.stats.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.stats.yml b/.stats.yml
index c27288ed..459fe737 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 46
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-d9cb320c8313cd122b4851d726c6cea39a14a5317880c6d063671ad3f412e632.yml
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/finch%2Ffinch-39e0191e43a9db93c8f35e91d10013f05352a2bedcf7ead6bac437957f6e922e.yml
openapi_spec_hash: 58c2cf578f0736b8c5df957f6a61190b
config_hash: 0892e2e0eeb0343a022afa62e9080dd1
From 2b0384bce698659f8349abaa89c4c72fecc83b68 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:10:01 +0000
Subject: [PATCH 7/8] chore: update lockfile
---
pyproject.toml | 14 +++---
requirements-dev.lock | 108 +++++++++++++++++++++++-------------------
requirements.lock | 31 ++++++------
3 files changed, 83 insertions(+), 70 deletions(-)
diff --git a/pyproject.toml b/pyproject.toml
index 3b6e2354..e2dac044 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -7,14 +7,16 @@ license = "Apache-2.0"
authors = [
{ name = "Finch", email = "founders@tryfinch.com" },
]
+
dependencies = [
- "httpx>=0.23.0, <1",
- "pydantic>=1.9.0, <3",
- "typing-extensions>=4.10, <5",
- "anyio>=3.5.0, <5",
- "distro>=1.7.0, <2",
- "sniffio",
+ "httpx>=0.23.0, <1",
+ "pydantic>=1.9.0, <3",
+ "typing-extensions>=4.10, <5",
+ "anyio>=3.5.0, <5",
+ "distro>=1.7.0, <2",
+ "sniffio",
]
+
requires-python = ">= 3.9"
classifiers = [
"Typing :: Typed",
diff --git a/requirements-dev.lock b/requirements-dev.lock
index 5bc92efd..96c9c174 100644
--- a/requirements-dev.lock
+++ b/requirements-dev.lock
@@ -12,40 +12,45 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
-aiohttp==3.12.8
+aiohttp==3.13.2
# via finch-api
# via httpx-aiohttp
-aiosignal==1.3.2
+aiosignal==1.4.0
# via aiohttp
-annotated-types==0.6.0
+annotated-types==0.7.0
# via pydantic
-anyio==4.4.0
+anyio==4.12.0
# via finch-api
# via httpx
-argcomplete==3.1.2
+argcomplete==3.6.3
# via nox
async-timeout==5.0.1
# via aiohttp
-attrs==25.3.0
+attrs==25.4.0
# via aiohttp
-certifi==2023.7.22
+ # via nox
+backports-asyncio-runner==1.2.0
+ # via pytest-asyncio
+certifi==2025.11.12
# via httpcore
# via httpx
-colorlog==6.7.0
+colorlog==6.10.1
+ # via nox
+dependency-groups==1.3.1
# via nox
-dirty-equals==0.6.0
-distlib==0.3.7
+dirty-equals==0.11
+distlib==0.4.0
# via virtualenv
-distro==1.8.0
+distro==1.9.0
# via finch-api
-exceptiongroup==1.2.2
+exceptiongroup==1.3.1
# via anyio
# via pytest
-execnet==2.1.1
+execnet==2.1.2
# via pytest-xdist
-filelock==3.12.4
+filelock==3.19.1
# via virtualenv
-frozenlist==1.6.2
+frozenlist==1.8.0
# via aiohttp
# via aiosignal
h11==0.16.0
@@ -58,82 +63,87 @@ httpx==0.28.1
# via respx
httpx-aiohttp==0.1.9
# via finch-api
-idna==3.4
+humanize==4.13.0
+ # via nox
+idna==3.11
# via anyio
# via httpx
# via yarl
-importlib-metadata==7.0.0
-iniconfig==2.0.0
+importlib-metadata==8.7.0
+iniconfig==2.1.0
# via pytest
markdown-it-py==3.0.0
# via rich
mdurl==0.1.2
# via markdown-it-py
-multidict==6.4.4
+multidict==6.7.0
# via aiohttp
# via yarl
mypy==1.17.0
-mypy-extensions==1.0.0
+mypy-extensions==1.1.0
# via mypy
-nodeenv==1.8.0
+nodeenv==1.9.1
# via pyright
-nox==2023.4.22
-packaging==23.2
+nox==2025.11.12
+packaging==25.0
+ # via dependency-groups
# via nox
# via pytest
pathspec==0.12.1
# via mypy
-platformdirs==3.11.0
+platformdirs==4.4.0
# via virtualenv
-pluggy==1.5.0
+pluggy==1.6.0
# via pytest
-propcache==0.3.1
+propcache==0.4.1
# via aiohttp
# via yarl
-pydantic==2.11.9
+pydantic==2.12.5
# via finch-api
-pydantic-core==2.33.2
+pydantic-core==2.41.5
# via pydantic
-pygments==2.18.0
+pygments==2.19.2
+ # via pytest
# via rich
pyright==1.1.399
-pytest==8.3.3
+pytest==8.4.2
# via pytest-asyncio
# via pytest-xdist
-pytest-asyncio==0.24.0
-pytest-xdist==3.7.0
-python-dateutil==2.8.2
+pytest-asyncio==1.2.0
+pytest-xdist==3.8.0
+python-dateutil==2.9.0.post0
# via time-machine
-pytz==2023.3.post1
- # via dirty-equals
respx==0.22.0
-rich==13.7.1
-ruff==0.9.4
-setuptools==68.2.2
- # via nodeenv
-six==1.16.0
+rich==14.2.0
+ruff==0.14.7
+six==1.17.0
# via python-dateutil
-sniffio==1.3.0
- # via anyio
+sniffio==1.3.1
# via finch-api
-time-machine==2.9.0
-tomli==2.0.2
+time-machine==2.19.0
+tomli==2.3.0
+ # via dependency-groups
# via mypy
+ # via nox
# via pytest
-typing-extensions==4.12.2
+typing-extensions==4.15.0
+ # via aiosignal
# via anyio
+ # via exceptiongroup
# via finch-api
# via multidict
# via mypy
# via pydantic
# via pydantic-core
# via pyright
+ # via pytest-asyncio
# via typing-inspection
-typing-inspection==0.4.1
+ # via virtualenv
+typing-inspection==0.4.2
# via pydantic
-virtualenv==20.24.5
+virtualenv==20.35.4
# via nox
-yarl==1.20.0
+yarl==1.22.0
# via aiohttp
-zipp==3.17.0
+zipp==3.23.0
# via importlib-metadata
diff --git a/requirements.lock b/requirements.lock
index 123cccf5..dbf05384 100644
--- a/requirements.lock
+++ b/requirements.lock
@@ -12,28 +12,28 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
-aiohttp==3.12.8
+aiohttp==3.13.2
# via finch-api
# via httpx-aiohttp
-aiosignal==1.3.2
+aiosignal==1.4.0
# via aiohttp
-annotated-types==0.6.0
+annotated-types==0.7.0
# via pydantic
-anyio==4.4.0
+anyio==4.12.0
# via finch-api
# via httpx
async-timeout==5.0.1
# via aiohttp
-attrs==25.3.0
+attrs==25.4.0
# via aiohttp
-certifi==2023.7.22
+certifi==2025.11.12
# via httpcore
# via httpx
-distro==1.8.0
+distro==1.9.0
# via finch-api
-exceptiongroup==1.2.2
+exceptiongroup==1.3.1
# via anyio
-frozenlist==1.6.2
+frozenlist==1.8.0
# via aiohttp
# via aiosignal
h11==0.16.0
@@ -45,25 +45,26 @@ httpx==0.28.1
# via httpx-aiohttp
httpx-aiohttp==0.1.9
# via finch-api
-idna==3.4
+idna==3.11
# via anyio
# via httpx
# via yarl
-multidict==6.4.4
+multidict==6.7.0
# via aiohttp
# via yarl
-propcache==0.3.1
+propcache==0.4.1
# via aiohttp
# via yarl
pydantic==2.12.5
# via finch-api
pydantic-core==2.41.5
# via pydantic
-sniffio==1.3.0
- # via anyio
+sniffio==1.3.1
# via finch-api
typing-extensions==4.15.0
+ # via aiosignal
# via anyio
+ # via exceptiongroup
# via finch-api
# via multidict
# via pydantic
@@ -71,5 +72,5 @@ typing-extensions==4.15.0
# via typing-inspection
typing-inspection==0.4.2
# via pydantic
-yarl==1.20.0
+yarl==1.22.0
# via aiohttp
From 5194c2732e0772d0fd27353581b78591eac1f7b8 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Tue, 2 Dec 2025 11:10:24 +0000
Subject: [PATCH 8/8] release: 1.42.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 21 +++++++++++++++++++++
pyproject.toml | 2 +-
src/finch/_version.py | 2 +-
4 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index b34aa0b2..507912c5 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "1.41.2"
+ ".": "1.42.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b16a3763..99c96c42 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,26 @@
# Changelog
+## 1.42.0 (2025-12-02)
+
+Full Changelog: [v1.41.2...v1.42.0](https://github.com/Finch-API/finch-api-python/compare/v1.41.2...v1.42.0)
+
+### Features
+
+* **api:** api update ([f730687](https://github.com/Finch-API/finch-api-python/commit/f7306871020ec264ad289455f31b942d0251809e))
+* **api:** manual updates ([a00107b](https://github.com/Finch-API/finch-api-python/commit/a00107bb227b9dfa7daa3858fb06063d5b053e68))
+
+
+### Bug Fixes
+
+* ensure streams are always closed ([3b90188](https://github.com/Finch-API/finch-api-python/commit/3b90188ae6b7c3029cdd649d96ce4a07418584e2))
+* **java:** Resolve name collisions ([b43172b](https://github.com/Finch-API/finch-api-python/commit/b43172be04510b5a760a1446d3b302e9487cf3ab))
+
+
+### Chores
+
+* **deps:** mypy 1.18.1 has a regression, pin to 1.17 ([f37f836](https://github.com/Finch-API/finch-api-python/commit/f37f836bfcafc6eca093e2158eaaf874350f52ee))
+* update lockfile ([2b0384b](https://github.com/Finch-API/finch-api-python/commit/2b0384bce698659f8349abaa89c4c72fecc83b68))
+
## 1.41.2 (2025-11-21)
Full Changelog: [v1.41.1...v1.41.2](https://github.com/Finch-API/finch-api-python/compare/v1.41.1...v1.41.2)
diff --git a/pyproject.toml b/pyproject.toml
index e2dac044..e8bc00b1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "finch-api"
-version = "1.41.2"
+version = "1.42.0"
description = "The official Python library for the Finch API"
dynamic = ["readme"]
license = "Apache-2.0"
diff --git a/src/finch/_version.py b/src/finch/_version.py
index 71049362..1adaf11f 100644
--- a/src/finch/_version.py
+++ b/src/finch/_version.py
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
__title__ = "finch"
-__version__ = "1.41.2" # x-release-please-version
+__version__ = "1.42.0" # x-release-please-version