From f2cd5c44b0933c738816f9f57301c78a83f1d6d2 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Mon, 4 Aug 2025 20:17:40 +0000 Subject: [PATCH 1/6] codegen metadata --- .stats.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stats.yml b/.stats.yml index 4f6855e4..4ea2f223 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 168 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic%2Flithic-529662462c00af160f74568fe26dbe576cf1fdc9f427e11bb1939bd8acdcb43f.yml openapi_spec_hash: a98631dfc66716d41ada4ddb199f7028 -config_hash: 2d501901f343d00775037fcec4121983 +config_hash: 99dad20b4a7d4a1390670762b9da4231 From 40fc9455952e2c9d761e44d4c161c620b3f963ce Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Tue, 5 Aug 2025 11:26:43 +0000 Subject: [PATCH 2/6] chore(internal): fix ruff target version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e2e16fca..3b89bc42 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -159,7 +159,7 @@ reportPrivateUsage = false [tool.ruff] line-length = 120 output-format = "grouped" -target-version = "py37" +target-version = "py38" [tool.ruff.format] docstring-code-format = true From d213199f898f7654274c194dea0f17f284051844 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 8 Aug 2025 18:01:22 +0000 Subject: [PATCH 3/6] chore: update @stainless-api/prism-cli to v5.15.0 --- scripts/mock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/mock b/scripts/mock index d2814ae6..0b28f6ea 100755 --- a/scripts/mock +++ b/scripts/mock @@ -21,7 +21,7 @@ echo "==> Starting mock server with URL ${URL}" # Run prism mock on the given spec if [ "$1" == "--daemon" ]; then - npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL" &> .prism.log & + npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock "$URL" &> .prism.log & # Wait for server to come online echo -n "Waiting for server" @@ -37,5 +37,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL" + npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock "$URL" fi From 245c63ac1da82368a20a726314e18c53a55a06e6 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 8 Aug 2025 21:25:45 +0000 Subject: [PATCH 4/6] chore(internal): update comment in script --- scripts/test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/test b/scripts/test index 2b878456..dbeda2d2 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! prism_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the prism command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stoplight/prism-cli@~5.3.2 -- prism mock path/to/your.openapi.yml${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock path/to/your.openapi.yml${NC}" echo exit 1 From e4b371024b93b676fb8a94bb870a7763c731faf5 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 13 Aug 2025 19:16:54 +0000 Subject: [PATCH 5/6] feat(api): adds detailed 3DS challenge statuses - https://docs.lithic.com/changelog/challenge-status-now-available-in-3ds-authentication-responses --- .stats.yml | 4 +-- src/lithic/resources/account_holders.py | 4 +-- .../types/account_holder_create_params.py | 2 +- ...der_simulate_enrollment_review_response.py | 6 ++++ .../types/account_holder_update_response.py | 6 ++++ src/lithic/types/kyb_param.py | 2 +- .../authentication_retrieve_response.py | 29 +++++++++++++++++++ 7 files changed, 47 insertions(+), 6 deletions(-) diff --git a/.stats.yml b/.stats.yml index 4ea2f223..c41d7639 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 168 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic%2Flithic-529662462c00af160f74568fe26dbe576cf1fdc9f427e11bb1939bd8acdcb43f.yml -openapi_spec_hash: a98631dfc66716d41ada4ddb199f7028 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/lithic%2Flithic-aca56b6e4da5b97e586e66392dd3cf433208cb964e25081a661dd41cf456a88a.yml +openapi_spec_hash: 297b9f330d31db8e5832463a0ce455ba config_hash: 99dad20b4a7d4a1390670762b9da4231 diff --git a/src/lithic/resources/account_holders.py b/src/lithic/resources/account_holders.py index 785e258f..728609a7 100644 --- a/src/lithic/resources/account_holders.py +++ b/src/lithic/resources/account_holders.py @@ -123,7 +123,7 @@ def create( external_id: A user provided id that can be used to link an account holder with an external system - kyb_passed_timestamp: An RFC 3339 timestamp indicating when precomputed KYC was completed on the + kyb_passed_timestamp: An RFC 3339 timestamp indicating when precomputed KYB was completed on the business with a pass result. This field is required only if workflow type is `KYB_BYO`. @@ -1112,7 +1112,7 @@ async def create( external_id: A user provided id that can be used to link an account holder with an external system - kyb_passed_timestamp: An RFC 3339 timestamp indicating when precomputed KYC was completed on the + kyb_passed_timestamp: An RFC 3339 timestamp indicating when precomputed KYB was completed on the business with a pass result. This field is required only if workflow type is `KYB_BYO`. diff --git a/src/lithic/types/account_holder_create_params.py b/src/lithic/types/account_holder_create_params.py index bc242c85..bfa6d1b3 100644 --- a/src/lithic/types/account_holder_create_params.py +++ b/src/lithic/types/account_holder_create_params.py @@ -76,7 +76,7 @@ class KYB(TypedDict, total=False): kyb_passed_timestamp: str """ - An RFC 3339 timestamp indicating when precomputed KYC was completed on the + An RFC 3339 timestamp indicating when precomputed KYB was completed on the business with a pass result. This field is required only if workflow type is `KYB_BYO`. diff --git a/src/lithic/types/account_holder_simulate_enrollment_review_response.py b/src/lithic/types/account_holder_simulate_enrollment_review_response.py index cdf84631..a8af35c4 100644 --- a/src/lithic/types/account_holder_simulate_enrollment_review_response.py +++ b/src/lithic/types/account_holder_simulate_enrollment_review_response.py @@ -241,6 +241,12 @@ class VerificationApplication(BaseModel): updated: datetime """Timestamp of when the application was last updated.""" + ky_passed_at: Optional[datetime] = None + """Timestamp of when the application passed the verification process. + + Only present if `status` is `ACCEPTED` + """ + class AccountHolderSimulateEnrollmentReviewResponse(BaseModel): token: Optional[str] = None diff --git a/src/lithic/types/account_holder_update_response.py b/src/lithic/types/account_holder_update_response.py index e97edf3e..bbe58a3d 100644 --- a/src/lithic/types/account_holder_update_response.py +++ b/src/lithic/types/account_holder_update_response.py @@ -244,6 +244,12 @@ class KYBKYCPatchResponseVerificationApplication(BaseModel): updated: datetime """Timestamp of when the application was last updated.""" + ky_passed_at: Optional[datetime] = None + """Timestamp of when the application passed the verification process. + + Only present if `status` is `ACCEPTED` + """ + class KYBKYCPatchResponse(BaseModel): token: Optional[str] = None diff --git a/src/lithic/types/kyb_param.py b/src/lithic/types/kyb_param.py index a799e1f7..78e04e29 100644 --- a/src/lithic/types/kyb_param.py +++ b/src/lithic/types/kyb_param.py @@ -200,7 +200,7 @@ class KYBParam(TypedDict, total=False): kyb_passed_timestamp: str """ - An RFC 3339 timestamp indicating when precomputed KYC was completed on the + An RFC 3339 timestamp indicating when precomputed KYB was completed on the business with a pass result. This field is required only if workflow type is `KYB_BYO`. diff --git a/src/lithic/types/three_ds/authentication_retrieve_response.py b/src/lithic/types/three_ds/authentication_retrieve_response.py index 98e22a19..d202af6c 100644 --- a/src/lithic/types/three_ds/authentication_retrieve_response.py +++ b/src/lithic/types/three_ds/authentication_retrieve_response.py @@ -295,6 +295,35 @@ class ChallengeMetadata(BaseModel): method_type: Literal["SMS_OTP", "OUT_OF_BAND"] """The type of challenge method used for authentication.""" + status: Literal[ + "SUCCESS", + "PENDING", + "SMS_DELIVERY_FAILED", + "CARDHOLDER_TIMEOUT", + "CANCELED_VIA_CHALLENGE_UI", + "CANCELED_OOB", + "ATTEMPTS_EXCEEDED", + "ABORTED", + "ERROR", + ] + """Indicates the status of the challenge + + - SUCCESS - Cardholder completed the challenge successfully + - PENDING - Challenge was issued to the cardholder and was not completed yet + - SMS_DELIVERY_FAILED - Lithic confirmed undeliverability of the SMS to the + provided phone number. Relevant only for SMS_OTP method + - CARDHOLDER_TIMEOUT - Cardholder failed to complete the challenge within the + given challenge TTL + - CANCELED_VIA_CHALLENGE_UI - Cardholder canceled the challenge by selecting + "cancel" on the challenge UI + - CANCELED_OOB - Cardholder canceled the challenge out of band + - ATTEMPTS_EXCEEDED - Cardholder failed the challenge by either entering an + incorrect OTP more than the allowed number of times or requesting a new OTP + more than the allowed number of times + - ABORTED - Merchant aborted authentication after a challenge was requested + - ERROR - The challenge failed for a reason different than those documented + """ + phone_number: Optional[str] = None """The phone number used for delivering the OTP. Relevant only for SMS_OTP method.""" From eb1cfd7282404dd1eed68dbf42b300af94dc6a19 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 13 Aug 2025 19:17:18 +0000 Subject: [PATCH 6/6] release: 0.102.0 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 15 +++++++++++++++ pyproject.toml | 2 +- src/lithic/_version.py | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index aebbc8bc..f70d9978 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.101.0" + ".": "0.102.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e80fdc2..e0694b18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 0.102.0 (2025-08-13) + +Full Changelog: [v0.101.0...v0.102.0](https://github.com/lithic-com/lithic-python/compare/v0.101.0...v0.102.0) + +### Features + +* **api:** adds detailed 3DS challenge statuses ([c08b37a](https://github.com/lithic-com/lithic-python/commit/c08b37ad7fdbf81f76df2bf5b7714c9cc8c4eb60)) + + +### Chores + +* **internal:** fix ruff target version ([5c7644d](https://github.com/lithic-com/lithic-python/commit/5c7644d6d1a3bb820c12a0f5d85c2479c659879c)) +* **internal:** update comment in script ([88dcc8c](https://github.com/lithic-com/lithic-python/commit/88dcc8c88838f024ed2d8538a0832aa3fe038864)) +* update @stainless-api/prism-cli to v5.15.0 ([9d53118](https://github.com/lithic-com/lithic-python/commit/9d53118b6ef04ab98b1bda7b76f312f69d2d83a7)) + ## 0.101.0 (2025-08-04) Full Changelog: [v0.100.0...v0.101.0](https://github.com/lithic-com/lithic-python/compare/v0.100.0...v0.101.0) diff --git a/pyproject.toml b/pyproject.toml index 3b89bc42..646fa7ab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "lithic" -version = "0.101.0" +version = "0.102.0" description = "The official Python library for the lithic API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/lithic/_version.py b/src/lithic/_version.py index 8fd6a8f9..7b3ec7b5 100644 --- a/src/lithic/_version.py +++ b/src/lithic/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "lithic" -__version__ = "0.101.0" # x-release-please-version +__version__ = "0.102.0" # x-release-please-version
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: