diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 32ac2e3a..7478ed0a 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.431.0" + ".": "0.432.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index ec36c3af..47e153f6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 237 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-defae23482710e9c09a4a09f19b5de303c58f4b3ffd937c6dfafacb4124f4378.yml -openapi_spec_hash: f1404bbd3ac5cbd9cfb952f3c65bb406 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/increase%2Fincrease-aceacff825bf677100a4d4554b2b3dad7ba442bbe26bc7f18b4153c54c3624e8.yml +openapi_spec_hash: 7fa7a382bd4d1db423b5345a8535d23b config_hash: 896b006f9647a513eda3b228cf17c199 diff --git a/CHANGELOG.md b/CHANGELOG.md index 17e00596..b6e97408 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.432.0 (2026-03-11) + +Full Changelog: [v0.431.0...v0.432.0](https://github.com/Increase/increase-python/compare/v0.431.0...v0.432.0) + +### Features + +* **api:** api update ([052c7bf](https://github.com/Increase/increase-python/commit/052c7bfd0fafe8c4c8ef7c68dc22e857eb7933d2)) + ## 0.431.0 (2026-03-11) Full Changelog: [v0.430.0...v0.431.0](https://github.com/Increase/increase-python/compare/v0.430.0...v0.431.0) diff --git a/pyproject.toml b/pyproject.toml index 55f91093..e30cede6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "increase" -version = "0.431.0" +version = "0.432.0" description = "The official Python library for the increase API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/increase/_version.py b/src/increase/_version.py index 5159786e..17756814 100644 --- a/src/increase/_version.py +++ b/src/increase/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "increase" -__version__ = "0.431.0" # x-release-please-version +__version__ = "0.432.0" # x-release-please-version diff --git a/src/increase/resources/beneficial_owners.py b/src/increase/resources/beneficial_owners.py index 8bed8ef8..231fe297 100644 --- a/src/increase/resources/beneficial_owners.py +++ b/src/increase/resources/beneficial_owners.py @@ -84,6 +84,8 @@ def update( entity_beneficial_owner_id: str, *, address: beneficial_owner_update_params.Address | Omit = omit, + confirmed_no_us_tax_id: bool | Omit = omit, + identification: beneficial_owner_update_params.Identification | 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, @@ -101,6 +103,13 @@ def update( address: The individual's physical address. Mail receiving locations like PO Boxes and PMB's are disallowed. + confirmed_no_us_tax_id: The identification method for an individual can only be a passport, driver's + license, or other document if you've confirmed the individual does not have a US + tax id (either a Social Security Number or Individual Taxpayer Identification + Number). + + identification: A means of verifying the person's identity. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -117,7 +126,14 @@ def update( ) return self._patch( f"/entity_beneficial_owners/{entity_beneficial_owner_id}", - body=maybe_transform({"address": address}, beneficial_owner_update_params.BeneficialOwnerUpdateParams), + body=maybe_transform( + { + "address": address, + "confirmed_no_us_tax_id": confirmed_no_us_tax_id, + "identification": identification, + }, + beneficial_owner_update_params.BeneficialOwnerUpdateParams, + ), options=make_request_options( extra_headers=extra_headers, extra_query=extra_query, @@ -251,6 +267,8 @@ async def update( entity_beneficial_owner_id: str, *, address: beneficial_owner_update_params.Address | Omit = omit, + confirmed_no_us_tax_id: bool | Omit = omit, + identification: beneficial_owner_update_params.Identification | 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, @@ -268,6 +286,13 @@ async def update( address: The individual's physical address. Mail receiving locations like PO Boxes and PMB's are disallowed. + confirmed_no_us_tax_id: The identification method for an individual can only be a passport, driver's + license, or other document if you've confirmed the individual does not have a US + tax id (either a Social Security Number or Individual Taxpayer Identification + Number). + + identification: A means of verifying the person's identity. + extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -285,7 +310,12 @@ async def update( return await self._patch( f"/entity_beneficial_owners/{entity_beneficial_owner_id}", body=await async_maybe_transform( - {"address": address}, beneficial_owner_update_params.BeneficialOwnerUpdateParams + { + "address": address, + "confirmed_no_us_tax_id": confirmed_no_us_tax_id, + "identification": identification, + }, + beneficial_owner_update_params.BeneficialOwnerUpdateParams, ), options=make_request_options( extra_headers=extra_headers, diff --git a/src/increase/types/beneficial_owner_update_params.py b/src/increase/types/beneficial_owner_update_params.py index 62ebcd51..8fcdd594 100644 --- a/src/increase/types/beneficial_owner_update_params.py +++ b/src/increase/types/beneficial_owner_update_params.py @@ -2,9 +2,20 @@ from __future__ import annotations -from typing_extensions import Required, TypedDict +from typing import Union +from datetime import date +from typing_extensions import Literal, Required, Annotated, TypedDict -__all__ = ["BeneficialOwnerUpdateParams", "Address"] +from .._utils import PropertyInfo + +__all__ = [ + "BeneficialOwnerUpdateParams", + "Address", + "Identification", + "IdentificationDriversLicense", + "IdentificationOther", + "IdentificationPassport", +] class BeneficialOwnerUpdateParams(TypedDict, total=False): @@ -14,6 +25,17 @@ class BeneficialOwnerUpdateParams(TypedDict, total=False): Mail receiving locations like PO Boxes and PMB's are disallowed. """ + confirmed_no_us_tax_id: bool + """ + The identification method for an individual can only be a passport, driver's + license, or other document if you've confirmed the individual does not have a US + tax id (either a Social Security Number or Individual Taxpayer Identification + Number). + """ + + identification: Identification + """A means of verifying the person's identity.""" + class Address(TypedDict, total=False): """The individual's physical address. @@ -41,3 +63,116 @@ class Address(TypedDict, total=False): zip: str """The ZIP or postal code of the address. Required in certain countries.""" + + +class IdentificationDriversLicense(TypedDict, total=False): + """Information about the United States driver's license used for identification. + + Required if `method` is equal to `drivers_license`. + """ + + expiration_date: Required[Annotated[Union[str, date], PropertyInfo(format="iso8601")]] + """The driver's license's expiration date in YYYY-MM-DD format.""" + + file_id: Required[str] + """The identifier of the File containing the front of the driver's license.""" + + state: Required[str] + """The state that issued the provided driver's license.""" + + back_file_id: str + """The identifier of the File containing the back of the driver's license.""" + + +class IdentificationOther(TypedDict, total=False): + """Information about the identification document provided. + + Required if `method` is equal to `other`. + """ + + country: Required[str] + """ + The two-character ISO 3166-1 code representing the country that issued the + document (e.g., `US`). + """ + + description: Required[str] + """A description of the document submitted.""" + + file_id: Required[str] + """The identifier of the File containing the front of the document.""" + + back_file_id: str + """The identifier of the File containing the back of the document. + + Not every document has a reverse side. + """ + + expiration_date: Annotated[Union[str, date], PropertyInfo(format="iso8601")] + """The document's expiration date in YYYY-MM-DD format.""" + + +class IdentificationPassport(TypedDict, total=False): + """Information about the passport used for identification. + + Required if `method` is equal to `passport`. + """ + + country: Required[str] + """ + The two-character ISO 3166-1 code representing the country that issued the + document (e.g., `US`). + """ + + expiration_date: Required[Annotated[Union[str, date], PropertyInfo(format="iso8601")]] + """The passport's expiration date in YYYY-MM-DD format.""" + + file_id: Required[str] + """The identifier of the File containing the passport.""" + + +class Identification(TypedDict, total=False, extra_items=object): # type: ignore[call-arg] + """A means of verifying the person's identity.""" + + method: Required[ + Literal[ + "social_security_number", + "individual_taxpayer_identification_number", + "passport", + "drivers_license", + "other", + ] + ] + """A method that can be used to verify the individual's identity. + + - `social_security_number` - A social security number. + - `individual_taxpayer_identification_number` - An individual taxpayer + identification number (ITIN). + - `passport` - A passport number. + - `drivers_license` - A driver's license number. + - `other` - Another identifying document. + """ + + number: Required[str] + """ + An identification number that can be used to verify the individual's identity, + such as a social security number. + """ + + drivers_license: IdentificationDriversLicense + """Information about the United States driver's license used for identification. + + Required if `method` is equal to `drivers_license`. + """ + + other: IdentificationOther + """Information about the identification document provided. + + Required if `method` is equal to `other`. + """ + + passport: IdentificationPassport + """Information about the passport used for identification. + + Required if `method` is equal to `passport`. + """ diff --git a/tests/api_resources/test_beneficial_owners.py b/tests/api_resources/test_beneficial_owners.py index e1c3bbcb..332b14f6 100644 --- a/tests/api_resources/test_beneficial_owners.py +++ b/tests/api_resources/test_beneficial_owners.py @@ -10,6 +10,7 @@ from increase import Increase, AsyncIncrease from tests.utils import assert_matches_type from increase.types import EntityBeneficialOwner +from increase._utils import parse_date from increase.pagination import SyncPage, AsyncPage base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -77,6 +78,29 @@ def test_method_update_with_all_params(self, client: Increase) -> None: "state": "NY", "zip": "10045", }, + confirmed_no_us_tax_id=True, + identification={ + "method": "social_security_number", + "number": "xxxx", + "drivers_license": { + "expiration_date": parse_date("2019-12-27"), + "file_id": "file_id", + "state": "x", + "back_file_id": "back_file_id", + }, + "other": { + "country": "x", + "description": "x", + "file_id": "file_id", + "back_file_id": "back_file_id", + "expiration_date": parse_date("2019-12-27"), + }, + "passport": { + "country": "x", + "expiration_date": parse_date("2019-12-27"), + "file_id": "file_id", + }, + }, ) assert_matches_type(EntityBeneficialOwner, beneficial_owner, path=["response"]) @@ -219,6 +243,29 @@ async def test_method_update_with_all_params(self, async_client: AsyncIncrease) "state": "NY", "zip": "10045", }, + confirmed_no_us_tax_id=True, + identification={ + "method": "social_security_number", + "number": "xxxx", + "drivers_license": { + "expiration_date": parse_date("2019-12-27"), + "file_id": "file_id", + "state": "x", + "back_file_id": "back_file_id", + }, + "other": { + "country": "x", + "description": "x", + "file_id": "file_id", + "back_file_id": "back_file_id", + "expiration_date": parse_date("2019-12-27"), + }, + "passport": { + "country": "x", + "expiration_date": parse_date("2019-12-27"), + "file_id": "file_id", + }, + }, ) assert_matches_type(EntityBeneficialOwner, beneficial_owner, path=["response"])