From 080cb460c8983a3f52aa833d8e04b86ade40e7fb Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Wed, 10 Jun 2026 15:46:40 +0000 Subject: [PATCH] =?UTF-8?q?##=20Python=20SDK=20Changes:=20*=20`clerk.misce?= =?UTF-8?q?llaneous.get=5Fpublic=5Finterstitial()`:=20=20`request`=20**Cha?= =?UTF-8?q?nged**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`clerk.users.bul?= =?UTF-8?q?k=5Funban()`:=20=20`response.[]`=20**Changed**=20*=20`clerk.use?= =?UTF-8?q?rs.create()`:=20=20=20*=20=20`request`=20**Changed**=20=20=20*?= =?UTF-8?q?=20=20`response`=20**Changed**=20*=20`clerk.phone=5Fnumbers.att?= =?UTF-8?q?empt=5Fverification()`:=20**Added**=20*=20`clerk.enterprise=5Fc?= =?UTF-8?q?onnections.list=5Ftest=5Fruns()`:=20**Added**=20*=20`clerk.ente?= =?UTF-8?q?rprise=5Fconnections.create=5Ftest=5Frun()`:=20**Added**=20*=20?= =?UTF-8?q?`clerk.email=5Faddresses.attempt=5Fverification()`:=20**Added**?= =?UTF-8?q?=20*=20`clerk.email=5Faddresses.create()`:=20=20`response.verif?= =?UTF-8?q?ication.union(verification=5Fotp).channel`=20**Added**=20*=20`c?= =?UTF-8?q?lerk.email=5Faddresses.get()`:=20=20`response.verification.unio?= =?UTF-8?q?n(verification=5Fotp).channel`=20**Added**=20*=20`clerk.email?= =?UTF-8?q?=5Faddresses.update()`:=20=20`response.verification.union(verif?= =?UTF-8?q?ication=5Fotp).channel`=20**Added**=20*=20`clerk.email=5Faddres?= =?UTF-8?q?ses.replace=5Ffor=5Fuser()`:=20=20=20*=20=20`request.identifica?= =?UTF-8?q?tion=5Fstatus`=20**Added**=20=20=20*=20=20`response.verificatio?= =?UTF-8?q?n.union(verification=5Fotp).channel`=20**Added**=20*=20`clerk.p?= =?UTF-8?q?hone=5Fnumbers.create()`:=20=20`response.verification.union(ver?= =?UTF-8?q?ification=5Fotp).channel`=20**Added**=20*=20`clerk.phone=5Fnumb?= =?UTF-8?q?ers.get()`:=20=20`response.verification.union(verification=5Fot?= =?UTF-8?q?p).channel`=20**Added**=20*=20`clerk.phone=5Fnumbers.update()`:?= =?UTF-8?q?=20=20`response.verification.union(verification=5Fotp).channel`?= =?UTF-8?q?=20**Added**=20*=20`clerk.phone=5Fnumbers.replace=5Ffor=5Fuser(?= =?UTF-8?q?)`:=20=20=20*=20=20`request.identification=5Fstatus`=20**Added*?= =?UTF-8?q?*=20=20=20*=20=20`response.verification.union(verification=5Fot?= =?UTF-8?q?p).channel`=20**Added**=20*=20`clerk.users.list()`:=20=20`respo?= =?UTF-8?q?nse.[]`=20**Changed**=20*=20`clerk.users.unlock()`:=20=20`respo?= =?UTF-8?q?nse`=20**Changed**=20*=20`clerk.users.get()`:=20=20`response`?= =?UTF-8?q?=20**Changed**=20*=20`clerk.users.update()`:=20=20`response`=20?= =?UTF-8?q?**Changed**=20*=20`clerk.users.ban()`:=20=20`response`=20**Chan?= =?UTF-8?q?ged**=20*=20`clerk.users.unban()`:=20=20`response`=20**Changed*?= =?UTF-8?q?*=20*=20`clerk.users.bulk=5Fban()`:=20=20`response.[]`=20**Chan?= =?UTF-8?q?ged**=20*=20`clerk.email=5Faddresses.prepare=5Fverification()`:?= =?UTF-8?q?=20**Added**=20*=20`clerk.phone=5Fnumbers.prepare=5Fverificatio?= =?UTF-8?q?n()`:=20**Added**=20*=20`clerk.users.lock()`:=20=20`response`?= =?UTF-8?q?=20**Changed**=20*=20`clerk.billing.create=5Fprice()`:=20=20=20?= =?UTF-8?q?*=20=20`request.supported=5Fbilling=5Fperiods`=20**Added**=20?= =?UTF-8?q?=20=20*=20=20`response.supported=5Fbilling=5Fperiods`=20**Added?= =?UTF-8?q?**=20*=20`clerk.users.delete=5Fprofile=5Fimage()`:=20=20`respon?= =?UTF-8?q?se`=20**Changed**=20*=20`clerk.users.update=5Fmetadata()`:=20?= =?UTF-8?q?=20`response`=20**Changed**=20*=20`clerk.users.replace=5Fmetada?= =?UTF-8?q?ta()`:=20=20`response`=20**Changed**=20*=20`clerk.users.get=5Fb?= =?UTF-8?q?illing=5Fsubscription()`:=20=20`response`=20**Changed**=20*=20`?= =?UTF-8?q?clerk.users.set=5Fpassword=5Fcompromised()`:=20=20`response`=20?= =?UTF-8?q?**Changed**=20*=20`clerk.users.unset=5Fpassword=5Fcompromised()?= =?UTF-8?q?`:=20=20`response`=20**Changed**=20*=20`clerk.instance=5Fsettin?= =?UTF-8?q?gs.update=5Forganization=5Fsettings()`:=20=20`error.status[403]?= =?UTF-8?q?`=20**Added**=20*=20`clerk.organizations.get=5Fbilling=5Fsubscr?= =?UTF-8?q?iption()`:=20=20`response`=20**Changed**=20*=20`clerk.enterpris?= =?UTF-8?q?e=5Fconnections.list()`:=20=20`response.data[].custom=5Fattribu?= =?UTF-8?q?tes[].multi=5Fvalued`=20**Added**=20*=20`clerk.enterprise=5Fcon?= =?UTF-8?q?nections.create()`:=20=20=20*=20=20`request.custom=5Fattributes?= =?UTF-8?q?[].multi=5Fvalued`=20**Added**=20=20=20*=20=20`response.custom?= =?UTF-8?q?=5Fattributes[].multi=5Fvalued`=20**Added**=20*=20`clerk.enterp?= =?UTF-8?q?rise=5Fconnections.get()`:=20=20`response.custom=5Fattributes[]?= =?UTF-8?q?.multi=5Fvalued`=20**Added**=20*=20`clerk.enterprise=5Fconnecti?= =?UTF-8?q?ons.update()`:=20=20=20*=20=20`request.custom=5Fattributes[].mu?= =?UTF-8?q?lti=5Fvalued`=20**Added**=20=20=20*=20=20`response.custom=5Fatt?= =?UTF-8?q?ributes[].multi=5Fvalued`=20**Added**=20*=20`clerk.billing.list?= =?UTF-8?q?=5Fprices()`:=20=20`response.data[].supported=5Fbilling=5Fperio?= =?UTF-8?q?ds`=20**Added**=20*=20`clerk.users.set=5Fprofile=5Fimage()`:=20?= =?UTF-8?q?=20`response`=20**Changed**=20*=20`clerk.billing.list=5Fsubscri?= =?UTF-8?q?ption=5Fitems()`:=20=20`response.data[]`=20**Changed**=20*=20`c?= =?UTF-8?q?lerk.billing.cancel=5Fsubscription=5Fitem()`:=20=20`response`?= =?UTF-8?q?=20**Changed**=20*=20`clerk.billing.extend=5Fsubscription=5Fite?= =?UTF-8?q?m=5Ffree=5Ftrial()`:=20=20`response`=20**Changed**=20*=20`clerk?= =?UTF-8?q?.billing.create=5Fprice=5Ftransition()`:=20=20`response`=20**Ch?= =?UTF-8?q?anged**=20*=20`clerk.billing.list=5Fstatements()`:=20=20`respon?= =?UTF-8?q?se.data[].groups[].items[].totals.discounts`=20**Added**=20*=20?= =?UTF-8?q?`clerk.billing.get=5Fstatement()`:=20=20`response.groups[].item?= =?UTF-8?q?s[].totals.discounts`=20**Added**=20*=20`clerk.billing.get=5Fst?= =?UTF-8?q?atement=5Fpayment=5Fattempts()`:=20=20`response.data[].totals.d?= =?UTF-8?q?iscounts`=20**Added**?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .speakeasy/gen.lock | 748 +++++++++++++----- .speakeasy/gen.yaml | 11 +- .speakeasy/workflow.lock | 12 +- README-PYPI.md | 84 +- README.md | 84 +- RELEASES.md | 12 +- .../attemptemailaddressverificationrequest.md | 9 + ...emptemailaddressverificationrequestbody.md | 9 + .../attemptphonenumberverificationrequest.md | 9 + ...temptphonenumberverificationrequestbody.md | 9 + docs/models/billingpaymentattemptdiscounts.md | 11 + docs/models/billingpaymentattempttotals.md | 17 +- .../billingpaymentattempttotalsproration.md | 13 + docs/models/billingpriceresponse.md | 3 +- docs/models/commerceperunittotal.md | 6 +- docs/models/commerceperunittotaltier.md | 2 +- docs/models/commercesubscriptionitemamount.md | 2 +- .../commercesubscriptionitemdiscounts.md | 9 + ...mercesubscriptionitemnextpaymentcredits.md | 10 + ...ommercesubscriptionitemnextpaymentpayer.md | 9 + ...rcesubscriptionitemnextpaymentproration.md | 11 + ...scriptionitemnextpaymenttotalsproration.md | 11 + docs/models/commercesubscriptionitemtotals.md | 16 + ...commercesubscriptionitemtotalsproration.md | 13 + .../models/commercesubscriptionnextpayment.md | 10 +- .../commercesubscriptionnextpaymentcredits.md | 10 + ...ommercesubscriptionnextpaymentdiscounts.md | 11 + .../commercesubscriptionnextpaymentpayer.md | 9 + ...ommercesubscriptionnextpaymentproration.md | 11 + .../commercesubscriptionnextpaymenttotals.md | 16 + ...esubscriptionnextpaymenttotalsproration.md | 13 + docs/models/connectiontype.md | 19 + docs/models/createbillingpricerequest.md | 15 +- ...lingpricerequestsupportedbillingperiods.md | 20 + ...ateenterpriseconnectioncustomattributes.md | 13 +- ...reateenterpriseconnectiontestrunrequest.md | 8 + docs/models/createuserrequestbody.md | 6 +- docs/models/customattributes.md | 13 +- docs/models/discounts.md | 11 + .../emailaddressidentificationstatus.md | 17 + docs/models/enterpriseconnectiontestrun.md | 15 + .../enterpriseconnectiontestrunresponse.md | 10 + docs/models/enterpriseconnectiontestruns.md | 11 + .../enterpriseconnectiontestrunstatus.md | 20 + ...rnalaccountwithverificationverification.md | 4 +- docs/models/getpublicinterstitialrequest.md | 3 - docs/models/identificationstatus.md | 21 + ...priseconnectiontestrunsqueryparamstatus.md | 18 + ...listenterpriseconnectiontestrunsrequest.md | 11 + docs/models/logs.md | 11 + docs/models/nextinvoice.md | 6 +- docs/models/nextpayment.md | 10 +- docs/models/oauth.md | 17 +- docs/models/otp.md | 1 + docs/models/parseduserinfo.md | 13 + .../models/phonenumberidentificationstatus.md | 17 + .../prepareemailaddressverificationrequest.md | 8 + .../preparephonenumberverificationrequest.md | 8 + .../replaceuseremailaddressrequestbody.md | 7 +- ...laceuserphonenumberidentificationstatus.md | 21 + .../replaceuserphonenumberrequestbody.md | 7 +- docs/models/saml.md | 17 +- docs/models/schemascommerceperunittotal.md | 10 + .../models/schemascommerceperunittotaltier.md | 10 + .../schemascommercesubscriptionitemcredits.md | 10 + ...chemascommercesubscriptionitemdiscounts.md | 9 + ...mmercesubscriptionitemnextinvoiceamount.md | 2 +- ...rcesubscriptionitemnextinvoiceproration.md | 11 + ...emascommercesubscriptionitemnextpayment.md | 6 +- ...mmercesubscriptionitemnextpaymentamount.md | 2 +- ...mercesubscriptionitemnextpaymentcredits.md | 10 + ...rcesubscriptionitemnextpaymentdiscounts.md | 9 + ...ommercesubscriptionitemnextpaymentpayer.md | 9 + ...rcesubscriptionitemnextpaymentproration.md | 11 + ...mmercesubscriptionitemnextpaymenttotals.md | 16 + ...scriptionitemnextpaymenttotalsproration.md | 11 + .../schemascommercesubscriptionitempayer.md | 9 + ...chemascommercesubscriptionitemproration.md | 11 + .../schemascommercesubscriptionitemtotals.md | 16 + docs/models/seats.md | 8 +- docs/models/supportedbillingperiods.md | 20 + docs/models/totals.md | 5 +- ...ateenterpriseconnectioncustomattributes.md | 13 +- docs/models/verification.md | 4 +- .../verificationoauthverificationoauth.md | 15 + docs/models/verificationotp.md | 1 + docs/models/verificationresponse.md | 17 + ...icationsamlverificationemailaddresssaml.md | 15 + docs/sdks/billing/README.md | 20 +- docs/sdks/emailaddresses/README.md | 123 ++- docs/sdks/enterpriseconnectionssdk/README.md | 90 +++ docs/sdks/instancesettingssdk/README.md | 8 +- docs/sdks/miscellaneous/README.md | 5 +- docs/sdks/phonenumbers/README.md | 123 ++- docs/sdks/users/README.md | 13 +- pyproject.toml | 2 +- src/clerk_backend_api/__init__.py | 18 +- src/clerk_backend_api/_version.py | 6 +- .../admin_portal_link_tokens.py | 10 +- src/clerk_backend_api/api_keys.py | 18 +- src/clerk_backend_api/billing.py | 10 + src/clerk_backend_api/emailaddresses.py | 470 ++++++++++- .../enterpriseconnections_sdk.py | 424 +++++++++- src/clerk_backend_api/instancesettings_sdk.py | 4 +- src/clerk_backend_api/invitations.py | 6 +- src/clerk_backend_api/miscellaneous.py | 18 - src/clerk_backend_api/models/__init__.py | 348 +++++++- .../models/_verificationresponse.py | 88 +++ .../attemptemailaddressverificationop.py | 39 + .../attemptphonenumberverificationop.py | 39 + .../models/billingpaymentattempt.py | 76 +- .../models/billingpriceresponse.py | 13 + .../models/commerceperunittotal.py | 12 +- .../models/commerceperunittotaltier.py | 4 +- .../models/commercesubscriptionitem.py | 262 +++++- .../models/commercesubscriptionnextpayment.py | 222 +++++- .../models/createbillingpricerequest.py | 27 +- .../models/createenterpriseconnectionop.py | 7 +- .../createenterpriseconnectiontestrunop.py | 18 + src/clerk_backend_api/models/createuserop.py | 59 ++ src/clerk_backend_api/models/emailaddress.py | 23 +- .../models/enterpriseconnection.py | 7 +- .../models/enterpriseconnectiontestrun.py | 237 ++++++ .../enterpriseconnectiontestrunresponse.py | 19 + .../models/enterpriseconnectiontestruns.py | 27 + .../models/externalaccountwithverification.py | 8 +- .../models/getpublicinterstitialop.py | 27 - .../listenterpriseconnectiontestrunsop.py | 77 ++ src/clerk_backend_api/models/phonenumber.py | 13 +- .../prepareemailaddressverificationop.py | 18 + .../preparephonenumberverificationop.py | 18 + .../models/replaceuseremailaddressop.py | 46 +- .../models/replaceuserphonenumberop.py | 46 +- .../models/schemas_commerceperunittotal.py | 30 + .../schemas_commerceperunittotaltier.py | 54 ++ .../schemas_commercesubscriptionitem.py | 361 ++++++++- .../models/updateenterpriseconnectionop.py | 7 +- .../oauthapplications_sdk.py | 14 +- .../organizationdomains_sdk.py | 22 +- .../organizationinvitations_sdk.py | 34 +- .../organizationmemberships_sdk.py | 98 ++- src/clerk_backend_api/organizationroles.py | 18 +- src/clerk_backend_api/organizations_sdk.py | 66 +- src/clerk_backend_api/phonenumbers.py | 470 ++++++++++- src/clerk_backend_api/rolesets_sdk.py | 30 +- src/clerk_backend_api/samlconnections_sdk.py | 18 +- src/clerk_backend_api/sessions.py | 12 +- src/clerk_backend_api/users.py | 254 ++++-- src/clerk_backend_api/utils/eventstreaming.py | 194 ++--- src/clerk_backend_api/utils/requestbodies.py | 1 + src/clerk_backend_api/utils/serializers.py | 87 +- src/clerk_backend_api/waitlistentries_sdk.py | 10 +- 152 files changed, 5869 insertions(+), 897 deletions(-) create mode 100644 docs/models/attemptemailaddressverificationrequest.md create mode 100644 docs/models/attemptemailaddressverificationrequestbody.md create mode 100644 docs/models/attemptphonenumberverificationrequest.md create mode 100644 docs/models/attemptphonenumberverificationrequestbody.md create mode 100644 docs/models/billingpaymentattemptdiscounts.md create mode 100644 docs/models/billingpaymentattempttotalsproration.md create mode 100644 docs/models/commercesubscriptionitemdiscounts.md create mode 100644 docs/models/commercesubscriptionitemnextpaymentcredits.md create mode 100644 docs/models/commercesubscriptionitemnextpaymentpayer.md create mode 100644 docs/models/commercesubscriptionitemnextpaymentproration.md create mode 100644 docs/models/commercesubscriptionitemnextpaymenttotalsproration.md create mode 100644 docs/models/commercesubscriptionitemtotals.md create mode 100644 docs/models/commercesubscriptionitemtotalsproration.md create mode 100644 docs/models/commercesubscriptionnextpaymentcredits.md create mode 100644 docs/models/commercesubscriptionnextpaymentdiscounts.md create mode 100644 docs/models/commercesubscriptionnextpaymentpayer.md create mode 100644 docs/models/commercesubscriptionnextpaymentproration.md create mode 100644 docs/models/commercesubscriptionnextpaymenttotals.md create mode 100644 docs/models/commercesubscriptionnextpaymenttotalsproration.md create mode 100644 docs/models/connectiontype.md create mode 100644 docs/models/createbillingpricerequestsupportedbillingperiods.md create mode 100644 docs/models/createenterpriseconnectiontestrunrequest.md create mode 100644 docs/models/discounts.md create mode 100644 docs/models/emailaddressidentificationstatus.md create mode 100644 docs/models/enterpriseconnectiontestrun.md create mode 100644 docs/models/enterpriseconnectiontestrunresponse.md create mode 100644 docs/models/enterpriseconnectiontestruns.md create mode 100644 docs/models/enterpriseconnectiontestrunstatus.md create mode 100644 docs/models/identificationstatus.md create mode 100644 docs/models/listenterpriseconnectiontestrunsqueryparamstatus.md create mode 100644 docs/models/listenterpriseconnectiontestrunsrequest.md create mode 100644 docs/models/logs.md create mode 100644 docs/models/parseduserinfo.md create mode 100644 docs/models/phonenumberidentificationstatus.md create mode 100644 docs/models/prepareemailaddressverificationrequest.md create mode 100644 docs/models/preparephonenumberverificationrequest.md create mode 100644 docs/models/replaceuserphonenumberidentificationstatus.md create mode 100644 docs/models/schemascommerceperunittotal.md create mode 100644 docs/models/schemascommerceperunittotaltier.md create mode 100644 docs/models/schemascommercesubscriptionitemcredits.md create mode 100644 docs/models/schemascommercesubscriptionitemdiscounts.md create mode 100644 docs/models/schemascommercesubscriptionitemnextinvoiceproration.md create mode 100644 docs/models/schemascommercesubscriptionitemnextpaymentcredits.md create mode 100644 docs/models/schemascommercesubscriptionitemnextpaymentdiscounts.md create mode 100644 docs/models/schemascommercesubscriptionitemnextpaymentpayer.md create mode 100644 docs/models/schemascommercesubscriptionitemnextpaymentproration.md create mode 100644 docs/models/schemascommercesubscriptionitemnextpaymenttotals.md create mode 100644 docs/models/schemascommercesubscriptionitemnextpaymenttotalsproration.md create mode 100644 docs/models/schemascommercesubscriptionitempayer.md create mode 100644 docs/models/schemascommercesubscriptionitemproration.md create mode 100644 docs/models/schemascommercesubscriptionitemtotals.md create mode 100644 docs/models/supportedbillingperiods.md create mode 100644 docs/models/verificationoauthverificationoauth.md create mode 100644 docs/models/verificationresponse.md create mode 100644 docs/models/verificationsamlverificationemailaddresssaml.md create mode 100644 src/clerk_backend_api/models/_verificationresponse.py create mode 100644 src/clerk_backend_api/models/attemptemailaddressverificationop.py create mode 100644 src/clerk_backend_api/models/attemptphonenumberverificationop.py create mode 100644 src/clerk_backend_api/models/createenterpriseconnectiontestrunop.py create mode 100644 src/clerk_backend_api/models/enterpriseconnectiontestrun.py create mode 100644 src/clerk_backend_api/models/enterpriseconnectiontestrunresponse.py create mode 100644 src/clerk_backend_api/models/enterpriseconnectiontestruns.py create mode 100644 src/clerk_backend_api/models/listenterpriseconnectiontestrunsop.py create mode 100644 src/clerk_backend_api/models/prepareemailaddressverificationop.py create mode 100644 src/clerk_backend_api/models/preparephonenumberverificationop.py create mode 100644 src/clerk_backend_api/models/schemas_commerceperunittotal.py create mode 100644 src/clerk_backend_api/models/schemas_commerceperunittotaltier.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index de83f5ae..4791213e 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,25 +1,25 @@ lockVersion: 2.0.0 id: bfe29c99-6e67-43fe-b928-64d6a5ed6aa8 management: - docChecksum: 9855b877a217030cd57c2c247cbadf0c + docChecksum: b11b775e03be43f1507cea68119892c1 docVersion: "2025-11-10" - speakeasyVersion: 1.768.2 - generationVersion: 2.889.1 - releaseVersion: 5.0.7 - configChecksum: 40a7024c7ddc4c58127d1f1ee9e526fa + speakeasyVersion: 1.775.0 + generationVersion: 2.900.0 + releaseVersion: 5.1.0 + configChecksum: 5d031f90fb07d52094abb13d9aaf0300 repoURL: https://github.com/clerk/clerk-sdk-python.git installationURL: https://github.com/clerk/clerk-sdk-python.git published: true persistentEdits: - generation_id: f5db5d16-09e3-4a3d-82e5-5ceae1624ea5 - pristine_commit_hash: 6895699ca4ff273979826867fe83a26d9680412c - pristine_tree_hash: 0a88a49c8d09e76d7c02d1385de7dee0f2765df7 + generation_id: cf5581ae-8420-4488-8eca-aa4bdfeff5a9 + pristine_commit_hash: eb440f8c5e445daa009b65ab06430ef1b327abef + pristine_tree_hash: 5432ae444763acad30a419d7a88d1f006b900d40 features: python: - additionalDependencies: 1.0.0 + additionalDependencies: 1.1.0 additionalProperties: 1.0.1 constsAndDefaults: 1.0.7 - core: 6.0.23 + core: 6.0.29 customCodeRegions: 0.1.2 defaultEnabledRetries: 0.2.0 deprecations: 3.0.2 @@ -33,7 +33,7 @@ features: globalSecurityFlattening: 1.0.0 globalServerURLs: 3.2.1 groups: 3.0.1 - methodArguments: 1.0.2 + methodArguments: 1.1.1 multipartFileContentType: 1.0.0 nameOverrides: 3.0.3 nullables: 1.0.2 @@ -144,6 +144,22 @@ trackedFiles: id: b50cdf08b8fa last_write_checksum: sha1:6ee753e737974201fbc0d790f9f766db46835cb2 pristine_git_object: 77345e023601a6bfe3a579ca878d5db45c3ad4df + docs/models/attemptemailaddressverificationrequest.md: + id: eba55aef1c01 + last_write_checksum: sha1:89b6a3544093e81725e9212baa29ad70fb6d9953 + pristine_git_object: ddcf975eda4d692c0a52c68b4a523a6a8436cc6e + docs/models/attemptemailaddressverificationrequestbody.md: + id: bbd12513e415 + last_write_checksum: sha1:5999f59bb4b83f3dabe2cc9896634cb6ba92c4b4 + pristine_git_object: a6092f97c248ca0f9244e5cbd3cd9a135bf31c25 + docs/models/attemptphonenumberverificationrequest.md: + id: 463ef509c815 + last_write_checksum: sha1:1a3b21ee5937f7a0838bfdd9ad78575250d66a6b + pristine_git_object: 7cc0e390cb473827e26b98a941fa8db3ca00a072 + docs/models/attemptphonenumberverificationrequestbody.md: + id: cb8ec536ea13 + last_write_checksum: sha1:45d059f80a421ee9801f40f05577fc0960cbe791 + pristine_git_object: 2e1690cc22882b603a83579c1dad23ec29c7339a docs/models/attributemapping.md: id: fb5d1e88accb last_write_checksum: sha1:ba49223ef048a6838f8a8047b51aede392372c3f @@ -164,6 +180,10 @@ trackedFiles: id: 4a4990331020 last_write_checksum: sha1:61b7e4108920d55451f0a1b35fa91eae59e43b18 pristine_git_object: 231c86968c957cf78175da26b792f73e497ee3cf + docs/models/billingpaymentattemptdiscounts.md: + id: a4bf8aa470cd + last_write_checksum: sha1:edc7ac82bfd4b355852c39349457d93aff78faf1 + pristine_git_object: bffc4bfc481a944bbdddaa37721b9d2c2837ba12 docs/models/billingpaymentattemptobject.md: id: 0fd087a97257 last_write_checksum: sha1:d848fa122ab9a2d373c9323cc6dacdbbad2b964d @@ -182,12 +202,16 @@ trackedFiles: pristine_git_object: 65d23f4eb6988b3cc8bbc4aabd174c569ad9bdb4 docs/models/billingpaymentattempttotals.md: id: 3d831529d162 - last_write_checksum: sha1:2ec0bebe4779c6633a50e9d8c8117d051ec7316a - pristine_git_object: 04e35934aab98b338857a0703bd22e7a3d12cd4b + last_write_checksum: sha1:21f7d9c550b643f6611c8fc93e0f4ef6fbeaa14b + pristine_git_object: 625bd3a4c9e97c9c7337bbeca7406690c339a963 + docs/models/billingpaymentattempttotalsproration.md: + id: "370424147207" + last_write_checksum: sha1:40c88d9ee47ea687ddcc51744b1d4f718c99f907 + pristine_git_object: fc9f6fb8e3d9df3229488a3b03024010c7883eaf docs/models/billingpriceresponse.md: id: db38a8f67a7b - last_write_checksum: sha1:e0dc05efd036e485bf93f93e4aa03f165d40cc08 - pristine_git_object: 12971a1c7561d929360c514d2e3447fb9b5a9edf + last_write_checksum: sha1:f30d477d9ef0d05b724aacf5b8fc5c04daaffb9d + pristine_git_object: 69416d084c6bb5b6e0f9236059777a9c800b4117 docs/models/billingpriceresponseannualmonthlyfee.md: id: 551bbe21f5fd last_write_checksum: sha1:86ac12c8f7538cb3bc72d2762d6bb306bc52f2d3 @@ -330,12 +354,12 @@ trackedFiles: pristine_git_object: 5b8a2c95e55d070c8c31b8c3e5d328321ffeb3a0 docs/models/commerceperunittotal.md: id: c76f471b5964 - last_write_checksum: sha1:c8244b68a0262d98d74e46fb559a02be3ac3d1a7 - pristine_git_object: 8b90180c2af9a06cf68f8f74642eace5b03c352b + last_write_checksum: sha1:84d07f95d1283ad198c3f4362c253eae0cd68615 + pristine_git_object: d328cee6f630eef7cad159edd7ec08393590d82c docs/models/commerceperunittotaltier.md: id: c6740d0c9d6a - last_write_checksum: sha1:e8ed2e41911dd6d2b3c37d111325420caea8a8ce - pristine_git_object: 65998837eabdff7b04a6689e41a1a6201b45af3d + last_write_checksum: sha1:591919f33ba291c8a22f97d1efac8bc2d909eb69 + pristine_git_object: 0d3dfcb583e7de8c03e4f02c19251faa41116c48 docs/models/commerceplan.md: id: 02500030883c last_write_checksum: sha1:680348b7d2a06eef0ed95480bedbe76a114b1670 @@ -378,8 +402,8 @@ trackedFiles: pristine_git_object: d5a9f4bfbf14c21f35aa54b1f2210ffd05bf5e46 docs/models/commercesubscriptionitemamount.md: id: 1707cf10af87 - last_write_checksum: sha1:c7e591e269ada11d072bae979c33fc4d9d4a2591 - pristine_git_object: 3437f6cfc994c9afc08bb95be7664b631b446cfc + last_write_checksum: sha1:78b730ee2845f65edc46099b112dcfc62dd3ad77 + pristine_git_object: 830891baa49c837a7c2aca00a217f92be3a3abf5 docs/models/commercesubscriptionitemannualfee.md: id: da3f5df957df last_write_checksum: sha1:58fef92ceb0bfb19dbf4d4bd8415c6bb6aad1d92 @@ -392,10 +416,30 @@ trackedFiles: id: 1a628479fb20 last_write_checksum: sha1:b046cf3a742bc064f66ecaf9938b8887eb5d5ec3 pristine_git_object: e0c9f112de5814eee3eb311a9126ae128340b831 + docs/models/commercesubscriptionitemdiscounts.md: + id: 78783cf57494 + last_write_checksum: sha1:215aa9da5daf7b5343ccb3b91f2032b29f25cca7 + pristine_git_object: fbe1ebd20e787ec89f70e4c48c3f2a42b88408b2 docs/models/commercesubscriptionitemfee.md: id: d231986b6979 last_write_checksum: sha1:389f9fb931e206c392b328bb3b038b657fe5be21 pristine_git_object: 8afcc8d34f85df79d70613a153a08a540209a9d9 + docs/models/commercesubscriptionitemnextpaymentcredits.md: + id: d5994ccc667e + last_write_checksum: sha1:b673936e16da6cbf3292a2321ce4e76013e7b662 + pristine_git_object: c4a163366526273b4f85a363849e1628fecc4c1c + docs/models/commercesubscriptionitemnextpaymentpayer.md: + id: 20bbbe0290f7 + last_write_checksum: sha1:780884cdcc36c4bcae8aedd9c8ec6643f72dc206 + pristine_git_object: d2f8467c72b79efb9894417f63d3bc2577410dfd + docs/models/commercesubscriptionitemnextpaymentproration.md: + id: 0ea3e0a2c0ff + last_write_checksum: sha1:d6658c6231c03a60c28bc917f3e2120ae164ad36 + pristine_git_object: 62c212f15e434fe96a98d0b1c419a8361bf147d3 + docs/models/commercesubscriptionitemnextpaymenttotalsproration.md: + id: 060bf2c38602 + last_write_checksum: sha1:3b0756bd1ca98fcd1b5c9ae679d84e37a34d2fd8 + pristine_git_object: 95ab98ed94cb7aa8c1a50916adb693195d3d0156 docs/models/commercesubscriptionitemobject.md: id: 7c4b622b9a11 last_write_checksum: sha1:00dda43c1119b964bcba4927fb648d5d7a30783d @@ -416,14 +460,46 @@ trackedFiles: id: de228e46e771 last_write_checksum: sha1:6fb633bd78be6881d2e9ca79a602e1edcd9d0fec pristine_git_object: 1723fa0ecf98b712a5450452d0a5b8cfba9fd105 + docs/models/commercesubscriptionitemtotals.md: + id: 7196ff1c73cb + last_write_checksum: sha1:88b366730f6ca31e4424e95677248f04733d3348 + pristine_git_object: 857d8642ea56033df842081cdb7a7fb3145a84ec docs/models/commercesubscriptionitemtotalspayer.md: id: 5834ac21e8a8 last_write_checksum: sha1:0d18d0b6f829fbb96853ce47d5b84faf98aa3bbd pristine_git_object: aeadac9cb6848bc922ea803653db80dc892cb486 + docs/models/commercesubscriptionitemtotalsproration.md: + id: c287bdd0ba4a + last_write_checksum: sha1:71783a55b69c6740ab4d4d0c8f5b06b461944ac3 + pristine_git_object: 4a27d33ccfa6e7571c31b098fa8e006181ae482c docs/models/commercesubscriptionnextpayment.md: id: 79fbdadb72f4 - last_write_checksum: sha1:603f9441ff8c12ac6c7e286493731465e2282343 - pristine_git_object: db7ff866272749c683f8c248885111d29b2ddb17 + last_write_checksum: sha1:18c4e631c06f6837885b7677777471f89c3c539f + pristine_git_object: 27066fa61862025e650458bea1e509e428f014bb + docs/models/commercesubscriptionnextpaymentcredits.md: + id: dc6b6971a8c2 + last_write_checksum: sha1:34bca4f42a28923d089807cb17234e6ee992d52c + pristine_git_object: 1e1c361c0251432a4d74261c4444e9bf0bfcd52b + docs/models/commercesubscriptionnextpaymentdiscounts.md: + id: c4d420b53da7 + last_write_checksum: sha1:1088d2f318848f6f595597148f72b64f8df7655c + pristine_git_object: 8e64dd2dfa18a36f0913edc77b8070ee8a607389 + docs/models/commercesubscriptionnextpaymentpayer.md: + id: "713835601824" + last_write_checksum: sha1:b3f743c3538914265d4c78ccc943b681646e1d63 + pristine_git_object: b1aa79f31938d02751d0b61b0e13e3b2953c452e + docs/models/commercesubscriptionnextpaymentproration.md: + id: 6e5633e6e2aa + last_write_checksum: sha1:33066d0183e38295de13b0e6a319f433123d06b1 + pristine_git_object: 3b496a69279e6dbaf2257ee8486e9feb41b4b390 + docs/models/commercesubscriptionnextpaymenttotals.md: + id: 2b009d01a8b7 + last_write_checksum: sha1:5cb523e1388f6ef3985beb3774093eca8d8470f7 + pristine_git_object: 5ff49ccaf536f797f931810757932f06fac294f3 + docs/models/commercesubscriptionnextpaymenttotalsproration.md: + id: d10b82e92461 + last_write_checksum: sha1:98238e9ab1a5bec56d44f105133e606dbd0f84c3 + pristine_git_object: 5a62bd4a9a11cd07886ed004030ae6a88641e5f2 docs/models/commercesubscriptionobject.md: id: 562480f5fd31 last_write_checksum: sha1:7caa9a0ab536285ae3cd6d1c40632a442a2d99f8 @@ -432,6 +508,10 @@ trackedFiles: id: 09d72064112c last_write_checksum: sha1:ba24e69a299fd05b87dcbb852facd72e7bd6bb25 pristine_git_object: 9fb3356e277a9a51cc65df1d85e1246c95ad98e0 + docs/models/connectiontype.md: + id: 67e5ad5bbda7 + last_write_checksum: sha1:61efcda485ef0f09901f75195b30dcda903de58c + pristine_git_object: 3cd16c0ec09e5adf492e5ddf269ae9e0abb9fc60 docs/models/cookies.md: id: 39960540a349 last_write_checksum: sha1:263a0c18d641e4f3d468c8f1eba9e916b8346125 @@ -530,8 +610,12 @@ trackedFiles: pristine_git_object: 4d75bfc9b72f4a5890dfc567884beb8fddc7e211 docs/models/createbillingpricerequest.md: id: 125c5d321b4f - last_write_checksum: sha1:22c75317e3834ca6304788c2702fd52a26f20fce - pristine_git_object: 6393b1e1d73482f7e60c5748877085cf737287b1 + last_write_checksum: sha1:029926b9e0ec7f27e05c95eef415bb1137884b5b + pristine_git_object: c22de3174d726b79c767be67bc28bb21e4135d86 + docs/models/createbillingpricerequestsupportedbillingperiods.md: + id: 74334c90add4 + last_write_checksum: sha1:6bb061dcb48dbf7e4acc673c07b300094ef05522 + pristine_git_object: 2e0bf3b8c3f8b01c7867a313c4f4ed7d5e349ca4 docs/models/createbillingpricetransitionrequest.md: id: 2f54882189ae last_write_checksum: sha1:351cd681d4e927f0b39d172358a2959d7391d856 @@ -558,8 +642,8 @@ trackedFiles: pristine_git_object: 0a71dccc66dbe435ccd8d8bbf6d618a510119154 docs/models/createenterpriseconnectioncustomattributes.md: id: c0f9ed259c84 - last_write_checksum: sha1:a37dda7ebaa4fd4e03cd8137879590714b0ca1c7 - pristine_git_object: 7bfb1a9266ba8f9087a5cf9adf1922833b961142 + last_write_checksum: sha1:50bdf8ba9fc777c24e8b141cb98e05c00ed2f803 + pristine_git_object: c29c07de7564b33b47c303de0fe167f31b9db648 docs/models/createenterpriseconnectionrequestbody.md: id: 00f05e3e96ba last_write_checksum: sha1:b9028d00fbcf5ea4455a07a5451e81dd6529af61 @@ -568,6 +652,10 @@ trackedFiles: id: 139d99b40c0c last_write_checksum: sha1:b8392066a5c7f53813787744c55c0e988ff41a54 pristine_git_object: 51d6ce9bcbd22c8c11ed0b5f78059f48b3be7598 + docs/models/createenterpriseconnectiontestrunrequest.md: + id: 82ad94ff21e0 + last_write_checksum: sha1:16b9b830f1d60d4d0f9b2bad53e1f7143b7204c6 + pristine_git_object: b14f6d1cac354017b0431e549729f7781a4c1a92 docs/models/createinvitationrequestbody.md: id: ea6d53d64840 last_write_checksum: sha1:533d7b1415cd5004fc0f3c439cd6f6724b66643b @@ -738,8 +826,8 @@ trackedFiles: pristine_git_object: aba9df9901592d507551828248e22b3f9e0695db docs/models/createuserrequestbody.md: id: 39d743a30444 - last_write_checksum: sha1:aabdbc5e8e9996ac2c1c03797b86388e8c10a54f - pristine_git_object: 0cd3f2e1e0b14afcb1d9d54358a3c54805cb1014 + last_write_checksum: sha1:6833cfc2a4b900d021b17b5752749af9a200eb1c + pristine_git_object: 70f2edbe943bed60e2fd9eb62c3ef619cd91d333 docs/models/createwaitlistentryrequestbody.md: id: 181ff2ee24c2 last_write_checksum: sha1:65f994c81871aa15c81f31fdca105e6831cc87c8 @@ -758,8 +846,8 @@ trackedFiles: pristine_git_object: 2462c6f9b079d5f1d4d8f340e2418fccff59a20d docs/models/customattributes.md: id: f92493c0ab68 - last_write_checksum: sha1:3d632098f8aa0d606d2dfeade4bd01a055fcfc36 - pristine_git_object: 4ef008eff9c803bc155402bd40e9cbf4bd580e04 + last_write_checksum: sha1:c6fe8c9c671033d9425a6bfcd409b933c5e5e576 + pristine_git_object: bde59d99cc747c66a4c74c26010ac7ed744ff778 docs/models/data.md: id: 9a31987caf78 last_write_checksum: sha1:b1fda835a4dde5725d68615b0cf7eedfe06bab9f @@ -912,6 +1000,10 @@ trackedFiles: id: 0c4d71189104 last_write_checksum: sha1:ae8abb9fd7d76542dbcc9dd928ab085d0ba7d566 pristine_git_object: 1c48f5d16c0dc7f8064977fa2296275b61992e9f + docs/models/discounts.md: + id: 57315014cc20 + last_write_checksum: sha1:c991e47686f2d98000e23eece365f5d4c5f4a59a + pristine_git_object: cccfb8e213dbac763d66be7d95e762e06921cb66 docs/models/domain.md: id: 8fe01d6f9715 last_write_checksum: sha1:2286db2aa5384eddbea302de5ef3e42c8ec29983 @@ -936,6 +1028,10 @@ trackedFiles: id: d59acccbf5a1 last_write_checksum: sha1:bfd8b6f17c1441c50b6a5dea3e7cf4933740518c pristine_git_object: 71688d9ed3993484978108b5604dcbaf8e5c3f78 + docs/models/emailaddressidentificationstatus.md: + id: 97798afcb64e + last_write_checksum: sha1:95627a479f4d9095bde76d3c6a3dfc7880a7ca98 + pristine_git_object: 7e2cdee3363568c20de66b104b9b9e347a0eb960 docs/models/emailaddressobject.md: id: 3ebdbac368a5 last_write_checksum: sha1:80d2f422909747bb0af1e0ec943446d754e9178f @@ -988,6 +1084,22 @@ trackedFiles: id: d069c1d4245e last_write_checksum: sha1:14fda082d4412fb45803347705e7e0c85ea07d4d pristine_git_object: 5d226d168cfdaf7d6810a4eb08a3e71da8cee4a3 + docs/models/enterpriseconnectiontestrun.md: + id: 97e4e8d431bc + last_write_checksum: sha1:c6e076bc5b371c3b5047daee12bae07198818484 + pristine_git_object: 777cd674cb5b57d4451e4ad8d77670de44f4e423 + docs/models/enterpriseconnectiontestrunresponse.md: + id: 2bc316b6908d + last_write_checksum: sha1:b0f2d37bf79e95dd0e4e18d04f1fa4b80fd662af + pristine_git_object: c045cced398efab79ddf3ae04031f38d0819f226 + docs/models/enterpriseconnectiontestruns.md: + id: 8d03b18fe72d + last_write_checksum: sha1:243f7942f8a7ba6e41f583d4be34ee9e855130d5 + pristine_git_object: 969ed685986d0628d07db96c12242a0dcce1e226 + docs/models/enterpriseconnectiontestrunstatus.md: + id: 01ac08f25105 + last_write_checksum: sha1:2db8ea7cc604e8e6c6cbeaffe1ef2289ea93b8f8 + pristine_git_object: 8f79bf0382d841c78fcf5a14e668ce0a6e290eb7 docs/models/error.md: id: b96a6fb71e96 last_write_checksum: sha1:b8b534bb888fdf8bfb76f67b600a81ce39c0143f @@ -1026,8 +1138,8 @@ trackedFiles: pristine_git_object: b5861d28103b3f948e7a8a0b0b5550b9377e9257 docs/models/externalaccountwithverificationverification.md: id: 815dc234ae61 - last_write_checksum: sha1:7100a7faf240c7d9696972b2d4d5908a894a8141 - pristine_git_object: d1ce31d530d47ff9679ea21ceeed1d14aee8a1f7 + last_write_checksum: sha1:77cf9b2e1db94c04d2db8c3d7c358184e447b5c8 + pristine_git_object: ed47e5a052a01e354b783f8853b4724e27b3663b docs/models/featureresponse.md: id: bacbd661e628 last_write_checksum: sha1:ee8c053682fbd59be901131341c11421fe958ae1 @@ -1262,8 +1374,8 @@ trackedFiles: pristine_git_object: d0506bdb704804b65bc39eccb53da61b61135abf docs/models/getpublicinterstitialrequest.md: id: 81926d51a232 - last_write_checksum: sha1:bf8384d6b093d7d7e4d4d4c5aae83bd201cc5f91 - pristine_git_object: 111651369622957d47aa0e31f21170fde70f0362 + last_write_checksum: sha1:35a2d19505878e6b766dd6e5cdd9780f05b95374 + pristine_git_object: 6f8bcac7afe2de354d2dcc40da1fc0859eb0092e docs/models/getredirecturlrequest.md: id: ffe098d7b069 last_write_checksum: sha1:a66df96196f3b7abae731ce594cb5c137f29a6d3 @@ -1328,6 +1440,10 @@ trackedFiles: id: 9bf50584342f last_write_checksum: sha1:56f9f374289a9b96efe3c2bedbb4b10ceeddd3d6 pristine_git_object: 62b6adcf2a9c60978b87a98d02655cea8de9be8b + docs/models/identificationstatus.md: + id: 80b1eb5a93a1 + last_write_checksum: sha1:8555b5078bfd560a8037873c80c27e421ff52bd9 + pristine_git_object: 6fc14e3b761cc370af6ed075f0079b1f8730cd27 docs/models/identifiertype.md: id: 7a3d4b61b0bf last_write_checksum: sha1:1504c033147822105a24bbe4867da96684f3b650 @@ -1448,6 +1564,14 @@ trackedFiles: id: 83cb7c907159 last_write_checksum: sha1:e27d68a5716e2ed749d318545bdcb9c5d99d2b4f pristine_git_object: a6b360b71de5ddc203c7704810b9d76fbb6ad491 + docs/models/listenterpriseconnectiontestrunsqueryparamstatus.md: + id: b61b07e5986c + last_write_checksum: sha1:780113b6ce2337f857779c42fd9eedca2ec6c47d + pristine_git_object: a56ef62c7dc9f25627914804e0e50f6b79906438 + docs/models/listenterpriseconnectiontestrunsrequest.md: + id: 7e9183a0cfba + last_write_checksum: sha1:da7d20907b4afea11831aa3961b240968dd48b06 + pristine_git_object: 7fdc8c21bc102c6e2711dc14542bebb80e5084d1 docs/models/listinstanceorganizationinvitationsqueryparamstatus.md: id: 7106e0bc6066 last_write_checksum: sha1:7680d0d05ec1c860f4e128933812c714cc4d93d3 @@ -1532,6 +1656,10 @@ trackedFiles: id: 58b397d3ac60 last_write_checksum: sha1:92724e7f5c0918b6f9027cc10289686c2851d8d0 pristine_git_object: d1fb842789202e85461741c5ba187a6ffe745b43 + docs/models/logs.md: + id: c7224bcda990 + last_write_checksum: sha1:7252a5582f9b6b363a57bc790ea3ddec51e3044d + pristine_git_object: 7db54ddeca0c03a63f2a4520bc93c04dd253c6c1 docs/models/m2mtokens.md: id: 6f55325a39a2 last_write_checksum: sha1:89f164dd35a4fba8a4856ba65064fb07aefd1d92 @@ -1614,20 +1742,20 @@ trackedFiles: pristine_git_object: b66127782e71b1b165a768742c5519d85e9903c2 docs/models/nextinvoice.md: id: 61a145220d4d - last_write_checksum: sha1:fb9ffc514a7aa5cbc61138e6bd9da331b89f70e4 - pristine_git_object: 1fba3802b171166b1d9f4fb2d23d2e2eac747dff + last_write_checksum: sha1:e6b6a618837434f6a5529787d4289e3e2d21562b + pristine_git_object: fac74027335443d2e8aacb3a38b43bf38f87105e docs/models/nextpayment.md: id: 6ed8e342cc7a - last_write_checksum: sha1:2d177d7073a28cd33016ada8ccb3c354f954b19d - pristine_git_object: dc8bc54ed70568c03dc9a977fef8d286b788ba00 + last_write_checksum: sha1:1d521b87fb6d2bf7372364b08413e5ff5f9da892 + pristine_git_object: 4bba6a949b2af69f615faec6feeb905c876a58b8 docs/models/nonce.md: id: 5c2e5d9b660d last_write_checksum: sha1:462775f95d84e297acba8decfe9acca633c0f72e pristine_git_object: ed1fc26408051712a33a61adad4f6506cf2d9b70 docs/models/oauth.md: id: d9a583e878a7 - last_write_checksum: sha1:84a9bd7a7a7b1d6649d89a081c72ba219434d227 - pristine_git_object: 6bf459915ff8f486b18e11349339625eccef154d + last_write_checksum: sha1:216bb39aee78978fc3729f6f94eddd25d1b2137e + pristine_git_object: 9283de952d59e3c5a8f6defc6c50f1836d118132 docs/models/oauthaccesstoken.md: id: 79a48f12284a last_write_checksum: sha1:3f854ed52c0f8942e58db48637aaf1908696a001 @@ -1786,8 +1914,8 @@ trackedFiles: pristine_git_object: 0b589c1e7c935eb34d2fe75d75d73bceb7a7e2c6 docs/models/otp.md: id: 9536feda7e2d - last_write_checksum: sha1:88723e04ba091ab9959a2389c4aaa83a7205d7dc - pristine_git_object: b2574c6631d41e657e9a173b9567e90f1d90a268 + last_write_checksum: sha1:4367d27dc6c7808648909e86b34b2622bc9a1a91 + pristine_git_object: 6579c3054952273e2a60be94d9aec1667a5f55ba docs/models/ownershipverification.md: id: e545406bdbe2 last_write_checksum: sha1:63851716438b27f2b9cdfd2c20ce2c3000e7c9d4 @@ -1812,6 +1940,10 @@ trackedFiles: id: 87da991e89b9 last_write_checksum: sha1:52655767171e8bce3b59b14932b10c14595a2a8a pristine_git_object: a4f4efe230e6b5d66a0b1708eb4aba6644a3f643 + docs/models/parseduserinfo.md: + id: 8b84a798a7fe + last_write_checksum: sha1:155f8f0991b4a30422ae2aeb1a7c1926ca3cf985 + pristine_git_object: 43abaea485976fc3410b7bb150dc2b86c6a6b7f3 docs/models/passkey.md: id: 153e2b08b5f5 last_write_checksum: sha1:97688c23edbcb2b2a4a936d96567f973d0519f7a @@ -1868,6 +2000,10 @@ trackedFiles: id: ddca315686bd last_write_checksum: sha1:3b5b2c95ef606693d746f3f5e0487cc2254b7963 pristine_git_object: 36638845f5a02ccd60b6e8f2cdea3617b7e3063d + docs/models/phonenumberidentificationstatus.md: + id: a8cd5af25c44 + last_write_checksum: sha1:fd976c7319b25582f176a819be5a25dec3ce6b40 + pristine_git_object: e812af7e51c802c00de68a40e50a53b9df7f2059 docs/models/phonenumberobject.md: id: 62bd5755e1bf last_write_checksum: sha1:b11fe644f53e051d940a540f89a4ab242d7d46c1 @@ -1888,6 +2024,14 @@ trackedFiles: id: ca8a33ed2ce6 last_write_checksum: sha1:c80f7676d6ccd1f20b9f703e581f3b649534ab67 pristine_git_object: c51ffeccd645db5dc6e326bfe9585fd036803e6f + docs/models/prepareemailaddressverificationrequest.md: + id: a1a3de3c05a3 + last_write_checksum: sha1:aacbe443dce406c0e04e9ef20f7bd23048b60756 + pristine_git_object: 5bdeb1a62610a82723ef0815b1e89625e0a18592 + docs/models/preparephonenumberverificationrequest.md: + id: a23e2b412c47 + last_write_checksum: sha1:d8ab951ff25e298edfebafd3356ae41e90e1e96e + pristine_git_object: cd73120cc4b923ae3715b590c77f034d3fa8c9f7 docs/models/previewtemplaterequest.md: id: be1b6bdf54b8 last_write_checksum: sha1:02df2547e5e251628be69ec65dd8b43b9283fdd6 @@ -1990,8 +2134,8 @@ trackedFiles: pristine_git_object: de0535f2bc991977c08ebcf5fc2db99c3936c003 docs/models/replaceuseremailaddressrequestbody.md: id: 2d943ea52bad - last_write_checksum: sha1:eb71a87cda1834c0c3cf0d90cd7ae448f10d21d0 - pristine_git_object: dee6c2bf3f0e5fab568468a5682f63ef1c0138e8 + last_write_checksum: sha1:8acaece71065c164af9911296aec67def781dce0 + pristine_git_object: d49df8a6ae9ed5a23787aea78c51432025b7a9d2 docs/models/replaceusermetadatarequest.md: id: c7235c9ea0f5 last_write_checksum: sha1:b929d80bc521184eb7a641409124346a232aab16 @@ -2000,14 +2144,18 @@ trackedFiles: id: 825ea3dbc957 last_write_checksum: sha1:54a57cf21705db0fdb3ffb93d75f87c8956e5f7b pristine_git_object: 576ad3d719a853902011502966ae5911390a23b4 + docs/models/replaceuserphonenumberidentificationstatus.md: + id: 16927f271311 + last_write_checksum: sha1:35c0c41350e6fea0602587722a7fe508aaddcfcd + pristine_git_object: 6113e1e3cee444575b9d480dcfe856740b89ead6 docs/models/replaceuserphonenumberrequest.md: id: 66055604c324 last_write_checksum: sha1:b7a27636fbb2e83b6780f1a919bf13fb15b4d9b7 pristine_git_object: c16530aec4794ca5b93ef1ac6406ff2aa64da1cb docs/models/replaceuserphonenumberrequestbody.md: id: e67d7a8c6369 - last_write_checksum: sha1:7a7c2d399f69f7b446e8a18e9f93940a855262ad - pristine_git_object: 01a02fc000495e63ce34f425a6b32c5ad1cc3670 + last_write_checksum: sha1:fa1c46126e481a24337107f4f2e8c2c938017c06 + pristine_git_object: 8c9678c6b4ef146be4d4df8a7c487069257cbc68 docs/models/requestbody.md: id: a15f5440d48c last_write_checksum: sha1:46ba85e6ce1ece116954e5612ea4f5a5dfd61573 @@ -2250,8 +2398,8 @@ trackedFiles: pristine_git_object: 74a37a1de8ec1ccdb816369b1a587ed2c963f409 docs/models/saml.md: id: 1efeb17f640b - last_write_checksum: sha1:19df58c8d078470eecf2fa574ffd4389a604f410 - pristine_git_object: c32468385470a0c8b33dbfc4cb97b702087047fc + last_write_checksum: sha1:6b82f3fa3f1380b3b810bc614b8f0875dc6e9a0b + pristine_git_object: 3157eb66661c324422315f131104285497ee8856 docs/models/samlaccount.md: id: fd34c9607344 last_write_checksum: sha1:e0448e3d970ab120f4eedc8f803ce4b34032e55d @@ -2300,6 +2448,14 @@ trackedFiles: id: 1a036264f364 last_write_checksum: sha1:bd563899bd860b95a17a531c9700d7b3788457ec pristine_git_object: b895638a6298bcc2cd92f385c40e28f13c8bdd7e + docs/models/schemascommerceperunittotal.md: + id: 7abbbbd6505b + last_write_checksum: sha1:8f994ba9fe073a041884aa02d646120be90c84fb + pristine_git_object: 12f68cbfa251f0eefe576722bf62d1f05748298c + docs/models/schemascommerceperunittotaltier.md: + id: 6019f01ca524 + last_write_checksum: sha1:56bbe9eaf7f498fd218e72c50aeb5930040f0d0f + pristine_git_object: 2852b3126147e99028c91757fc11789d5aa4e645 docs/models/schemascommerceplan.md: id: e31fed3b5ba6 last_write_checksum: sha1:4b89885fe04c4e1144cc471739967bb3e3236f12 @@ -2340,26 +2496,66 @@ trackedFiles: id: 09df5555784a last_write_checksum: sha1:5d97a1d1c79d4f313a3d2b714993e917ab2cf6b8 pristine_git_object: 4395358910470c498fd85ec1a3ef55eccb33d0ca + docs/models/schemascommercesubscriptionitemcredits.md: + id: 64a6410b12fa + last_write_checksum: sha1:75a3535ebd36892e31d88320ad733021141cd70e + pristine_git_object: b44c3848622642b733e4640111e21300e6788724 + docs/models/schemascommercesubscriptionitemdiscounts.md: + id: 93cc85c334c8 + last_write_checksum: sha1:ed8a446f7ac51b78ade2e4224079766155bf781c + pristine_git_object: 55890323ca49f13b170c8d2eedfc6367920abfa1 docs/models/schemascommercesubscriptionitemfee.md: id: 3147052585d8 last_write_checksum: sha1:151d5a08a2e822aaba55ee239ea5cc294ae7659c pristine_git_object: 4f5f79badbe9874591a7f4f1eb8c1313718f0ab0 docs/models/schemascommercesubscriptionitemnextinvoiceamount.md: id: 563a4765aeb6 - last_write_checksum: sha1:42e744fc46b0b7f2c9d0df990eb1aec740736b97 - pristine_git_object: 2d3a0e8879c880986f57eea61d21dafd230d98a2 + last_write_checksum: sha1:53da99cbfe1236282075b5400e743e91d8556a8a + pristine_git_object: e576cf0618085978063e6ee4fb07c28fab349d01 + docs/models/schemascommercesubscriptionitemnextinvoiceproration.md: + id: acb441534f0e + last_write_checksum: sha1:a7cd6548cfd5a28cb381baf0861c5854d8882406 + pristine_git_object: ce42dae690fc7cd136bb3cc4e98b436f908c88ad docs/models/schemascommercesubscriptionitemnextpayment.md: id: 4e0e2621282c - last_write_checksum: sha1:5fda4ddb2c67d5c760e1efea3f6ead2ccc860483 - pristine_git_object: dc04b52ef44f13fa318e36974b6cfe2a47a499f2 + last_write_checksum: sha1:f96b2b103409ee1f0dc7ce5c1670e50cf05ebd8d + pristine_git_object: 9a067e3cb528648f44210d2c1fd921b9ea915408 docs/models/schemascommercesubscriptionitemnextpaymentamount.md: id: 33c385c8deff - last_write_checksum: sha1:9f95f3dec8c8f74226e13b73441960a0896c2821 - pristine_git_object: 30dce0674ce57694bfc6417b7713984f09e7ec7b + last_write_checksum: sha1:4334a8e54bcc95f00df1dcf66d3a975f8fb087b5 + pristine_git_object: 8a32881e8492dd55d33c7d9bb2b84b99a4343bd1 + docs/models/schemascommercesubscriptionitemnextpaymentcredits.md: + id: c316b5a3db95 + last_write_checksum: sha1:5db7267fc253b59aeee49ced72149b833c0bc3d4 + pristine_git_object: 2b0b9f9c37c63fc4a3311977dac9ed42b2756a6b + docs/models/schemascommercesubscriptionitemnextpaymentdiscounts.md: + id: cc194f2b7cf1 + last_write_checksum: sha1:4a4a11e7e8638e7b0b768d9889f43ff89ae77bf8 + pristine_git_object: 3f790bdf86b882e420319e38a3dbc4f0a3a29d76 + docs/models/schemascommercesubscriptionitemnextpaymentpayer.md: + id: 4e9591be8466 + last_write_checksum: sha1:ec2cdff8a0d7401e96c73d9f35c62ceffc0b7901 + pristine_git_object: c1ddedc49644acf9effaf3582bb1f4eb632c118e + docs/models/schemascommercesubscriptionitemnextpaymentproration.md: + id: 16909c236564 + last_write_checksum: sha1:68dd902b7c7af530f05da8a45ef69d7f5acc53f1 + pristine_git_object: d9f7947809a140e04b3aa7146650e363d3b4b55d + docs/models/schemascommercesubscriptionitemnextpaymenttotals.md: + id: 950cbdbce345 + last_write_checksum: sha1:3ee2c80a144b41b67a34d70bcf522383035d03fc + pristine_git_object: 2623247ca5e4764af7a5d33f7c26486bd5d7dfb1 + docs/models/schemascommercesubscriptionitemnextpaymenttotalsproration.md: + id: 45b586d50f8f + last_write_checksum: sha1:a22521ad4c0f6138602062de41e5847bd3163710 + pristine_git_object: 4e1633d3a508d6b4050b233054932b895af5fc6e docs/models/schemascommercesubscriptionitemobject.md: id: 249163d3df53 last_write_checksum: sha1:6f53341b05a4a9c1cdbd6d03ed56df15d568c7ef pristine_git_object: f2090836052bdfb3fe7471cd6138f38fad0b73ba + docs/models/schemascommercesubscriptionitempayer.md: + id: c5dcdeb62120 + last_write_checksum: sha1:1f07e5364872fd7211ad4f26a682148038aeebcb + pristine_git_object: be7e020037fa217aa2108fa4d1fe3dbb1b6b6cdb docs/models/schemascommercesubscriptionitempayerobject.md: id: bf2c13f3c8e3 last_write_checksum: sha1:2e0d739c3826d987edfd29f9a4b59f83f7e87836 @@ -2384,10 +2580,18 @@ trackedFiles: id: 527fdd684480 last_write_checksum: sha1:7dfdaf34c0c9d548db0ab3572b4f8dfdd734ccef pristine_git_object: 42b3ae81659d176ddfef002bcf47364315cf97a4 + docs/models/schemascommercesubscriptionitemproration.md: + id: a3ce77b66aa5 + last_write_checksum: sha1:256219e595a880c8cc16adbcef193b716adbc138 + pristine_git_object: 7e917dc07f9929a09b5b3d8c291613674a06f3bb docs/models/schemascommercesubscriptionitemstatus.md: id: c18c19e2acff last_write_checksum: sha1:deab06500a2ada3f0203fd02b55cd2589fd9965c pristine_git_object: 6e35d845dc738f87761d331bfc04c9ea7a914960 + docs/models/schemascommercesubscriptionitemtotals.md: + id: f618bdcd2be4 + last_write_checksum: sha1:1de8f55fc8411270b96edb03eeac82bdb509be43 + pristine_git_object: d9394b7a2ab933b35e7194647868c7b19c9afbe7 docs/models/schemasfeatureresponse.md: id: 768ca9ff3f0a last_write_checksum: sha1:e95bb432e5d50c388da88645d2a65fae23552b50 @@ -2402,8 +2606,8 @@ trackedFiles: pristine_git_object: 7620dc17820932d3d640ff2f16227372623fd6a4 docs/models/seats.md: id: 860cbd360306 - last_write_checksum: sha1:0278b4f7cee612a4e2862092ec4d1a6ebff3ffc2 - pristine_git_object: 75f4bc7f325cfc5537eb2840f56f0d019aabdd6f + last_write_checksum: sha1:0206d12c7e115139fcae541375da1b27849015c7 + pristine_git_object: 3d2d0b38c7d025c7e7f9b3a3307af59bff7a3603 docs/models/security.md: id: 452e4d4eb67a last_write_checksum: sha1:b92237f55b89698b718cee58634a51a5cdb29edb @@ -2492,6 +2696,10 @@ trackedFiles: id: 95155396faa5 last_write_checksum: sha1:6ad81758359f5b568827f57917a3f61ff200850f pristine_git_object: 7ebd516e6f5ed915d6d2623ce0e2a101b12e2232 + docs/models/supportedbillingperiods.md: + id: 9e61063f48c9 + last_write_checksum: sha1:d3adc719ff02b876694859f92bbd3f6eaacb7b3a + pristine_git_object: 82e17efb43666e761de926c40bc09528f9be703c docs/models/svixurl.md: id: 500726699e6c last_write_checksum: sha1:17be414e5d446ad6486ad54230f089d899144223 @@ -2558,8 +2766,8 @@ trackedFiles: pristine_git_object: 3c3848f72661e12f6f3569ed8361ab8bf416c28d docs/models/totals.md: id: b4b5833c011e - last_write_checksum: sha1:1a57541b15c095f1996b4bbd770ab1bb28d5eebf - pristine_git_object: 7c94d87ba2983245a7a69f024c72b6090ea5bf14 + last_write_checksum: sha1:b98cefe4e702897e2190db66942d3974d687202c + pristine_git_object: 7b48dffbb054115ea868f83e1afee5a922faa22f docs/models/two.md: id: 3720b8efc931 last_write_checksum: sha1:08c84a402cb77b93c5566263d103676e6e8c290f @@ -2634,8 +2842,8 @@ trackedFiles: pristine_git_object: 8e6ca0bc333d3edf2fda0a07cafcf42f5e2d3dac docs/models/updateenterpriseconnectioncustomattributes.md: id: ff4a9ba508f8 - last_write_checksum: sha1:9964d4659595e4c2682858730563aa8fd58a2f28 - pristine_git_object: 76e2fb6efbc584924e1877a7054b5de4d13530d4 + last_write_checksum: sha1:fc0800d470f4429c451212dc218b4d9e2bf0ceed + pristine_git_object: 0a3d68efb6a32e7a5cc3e96711c51ca4453be162 docs/models/updateenterpriseconnectionoidc.md: id: 5d1cc56f77d2 last_write_checksum: sha1:e5fd04250853fdddf770cda2bba1e1f0e37d888a @@ -2890,8 +3098,8 @@ trackedFiles: pristine_git_object: 69dd549ec7f5f885101d08dd502e25748183aebf docs/models/verification.md: id: 6f78ad619fcc - last_write_checksum: sha1:88cd1f50973e7acef8985c4beab388ff65011940 - pristine_git_object: 7efb33ad273487fe50fa56ecef21a45edf924807 + last_write_checksum: sha1:20a0950e15f328859cf4e5eb3287e9bfa2151323 + pristine_git_object: 440aef84d3d94bd0a692f0b43b22b9a56cdf51b3 docs/models/verificationadmin.md: id: e385d9be311b last_write_checksum: sha1:3ad1e3c4342ef40b7ec59ecdc3b688b84392c325 @@ -3004,6 +3212,10 @@ trackedFiles: id: b30b9143981a last_write_checksum: sha1:dc16df5f51e3bc08bad736a00df68bb35dd484c9 pristine_git_object: 11f0b7b973783b3b1d83092a993125a126cef4d4 + docs/models/verificationoauthverificationoauth.md: + id: 5b54809e1834 + last_write_checksum: sha1:2bcd85fc9b3d975bc3cb262e87c908ec53575991 + pristine_git_object: 609ae159eeccc572e1f0cc7bc74ec257f1f6b40c docs/models/verificationoauthverificationobject.md: id: 220a870ec485 last_write_checksum: sha1:7672e013bd5254d12bbd805c286a1eed0a84af68 @@ -3018,8 +3230,8 @@ trackedFiles: pristine_git_object: 4bf8f26a2ee68383e7ca2cf2077b31d6a1625a49 docs/models/verificationotp.md: id: f116e81259ff - last_write_checksum: sha1:f5311d7ddcc00189cafce7e009cd8cc88f9d8875 - pristine_git_object: 0e6596b5c8a11366f5f7c22d131a28efc41b1553 + last_write_checksum: sha1:5f32709b24370d03906a9b7628e4fa18e468c087 + pristine_git_object: 1c92573ded30d2c3c9d7585a83c7e02ace283018 docs/models/verificationotpverificationobject.md: id: 3eddc52642b7 last_write_checksum: sha1:03acd3fa93e6ced696ec106541b440184f08b7a2 @@ -3048,6 +3260,10 @@ trackedFiles: id: c15bec37802b last_write_checksum: sha1:c420d1749d57d3c6a9eb9d247fe07da5b95e7a34 pristine_git_object: 96d46687c4d5d2d217434fe57fb3c15108dc6c85 + docs/models/verificationresponse.md: + id: 2a17e30085c1 + last_write_checksum: sha1:323b8ec04b0917e64dedca908c7b245277538a6e + pristine_git_object: 1b09ecd3a1f5766d311dcb376921efe192d905c2 docs/models/verificationsaml.md: id: 1c8eda29317d last_write_checksum: sha1:164b3725c1637e474957ce51f8cbb7bd4fec0402 @@ -3064,6 +3280,10 @@ trackedFiles: id: b8c46eca04a7 last_write_checksum: sha1:b627bf7f712517399880abe9697e0934ecf0d8f0 pristine_git_object: 13b5cb7aa1492e7d0dc103552185d1f1c978673e + docs/models/verificationsamlverificationemailaddresssaml.md: + id: cacd9aa6490c + last_write_checksum: sha1:95ee6e3863ab2d0134c0e7cf956dea7b893753fd + pristine_git_object: b30fa4997588a99b3454f08a0854c25d8ed3071d docs/models/verificationsamlverificationenterpriseaccounterror.md: id: 5331df46f0d1 last_write_checksum: sha1:ea0ce635e5288cb1ff7185f06d5eea48e18298ca @@ -3382,8 +3602,8 @@ trackedFiles: pristine_git_object: 35f3f36a78c00a226b588f68ef192a3375c2c4d2 docs/sdks/billing/README.md: id: dc915331dd9d - last_write_checksum: sha1:5df507b60cf08279bb729536b1aaddbba6422e18 - pristine_git_object: 8745c8b60f2bff4c93bb295541086ed0c7f258ae + last_write_checksum: sha1:f5f5f163b213ac0d9a9ceb7f97107681020c883c + pristine_git_object: 6a36b48676ce1b9c43059c257161b111f7c1f07d docs/sdks/blocklistidentifierssdk/README.md: id: 8c5a4397c841 last_write_checksum: sha1:2b250f0eb6ba83fce9a645c9439358b6e6600654 @@ -3398,8 +3618,8 @@ trackedFiles: pristine_git_object: b4c5071dcbedcd6a5f60034a54e00ed3055a40af docs/sdks/emailaddresses/README.md: id: f5fd208070d3 - last_write_checksum: sha1:f18c12dfbad6c7826e72fffa6cff991091c37dfe - pristine_git_object: ffa2aa739d3ff6f113e374cb5d782670105e72af + last_write_checksum: sha1:ccb1d3ed9fe65a8689d2d424d58593139705a986 + pristine_git_object: bf4d446f405917e8f1849015c20f8c0f5fb12e2e docs/sdks/emailandsmstemplates/README.md: id: f97f5a6195f4 last_write_checksum: sha1:21182fc1ed3c6c111146691d07b034937d82f029 @@ -3410,12 +3630,12 @@ trackedFiles: pristine_git_object: 40d266c0ca71b4a042c1624998026a9565b4a627 docs/sdks/enterpriseconnectionssdk/README.md: id: f2a1e2452c9d - last_write_checksum: sha1:2b796ce2782a12318e795cb3a9c5fdc784034f86 - pristine_git_object: 39adb07aada06b288829f1eaee9a26209bb1680c + last_write_checksum: sha1:e2bca44bd708aed493f13c9927b2e97c8a963af5 + pristine_git_object: 1da2936339db88d5fc09cf235d89d622000eedd1 docs/sdks/instancesettingssdk/README.md: id: acfc6e2cdd5f - last_write_checksum: sha1:8992e0abf9848e4ab0ce832a0f46c28722b69f60 - pristine_git_object: 35b82f7217e74e0bdc074d5349c1ecf4f0a150e4 + last_write_checksum: sha1:9ea68ad9fedce65699897ac48847727de3477534 + pristine_git_object: ac4216e2fe392c6bebbba30c97ba0ae738efe6d8 docs/sdks/invitations/README.md: id: 4f20950f4cbf last_write_checksum: sha1:a01321b496c15f4e32891416c7d21418f69be62d @@ -3438,8 +3658,8 @@ trackedFiles: pristine_git_object: d028c155da5a150faff1949caf8131ae627190ac docs/sdks/miscellaneous/README.md: id: 897f13c5866e - last_write_checksum: sha1:aebeeecd270bb69e3f825ad67f224b6c8584e249 - pristine_git_object: 2368451ae5b486ab6d5fe4043ac4efbf6b5251b4 + last_write_checksum: sha1:c809c94363c5defe32f983fbc40da193b5249550 + pristine_git_object: 006b97cfc853aeec28c5e57a6349ee6fabb748b0 docs/sdks/oauthaccesstokens/README.md: id: 18083ca8acf8 last_write_checksum: sha1:f420abc017b7a239c8d975ade955daa1b659409b @@ -3474,8 +3694,8 @@ trackedFiles: pristine_git_object: 1413d7599ceaa2b0e9a04eb55f00a4ed96bdb537 docs/sdks/phonenumbers/README.md: id: bfed92f30c8c - last_write_checksum: sha1:3bb79b9bb2292271e28f7ddcf89b145bddf1f938 - pristine_git_object: 0df701591d7243c715b5844cba42449b4d2ae979 + last_write_checksum: sha1:9fe6f5e8ac451426c32069684f140c8e63b8195a + pristine_git_object: 7b6c31ef5423bcb76c44180a5a2796f8a002ab40 docs/sdks/proxychecks/README.md: id: b7b7c7dd6d7b last_write_checksum: sha1:e2a308a1dfba702415a33e14a7682c3049634636 @@ -3514,8 +3734,8 @@ trackedFiles: pristine_git_object: 3b5b06e9e6e00d8c21aa5de0fa5754acec7173d5 docs/sdks/users/README.md: id: 5d80027045fe - last_write_checksum: sha1:76579e4c89a7b5419b8dee9d9bba144d07fb8c9d - pristine_git_object: 823222715fb5f59bee009aee45d5fd36decef57a + last_write_checksum: sha1:716d8097be3fc1c7777ef2fc3e75266c7b5a7654 + pristine_git_object: b06f61455a52d8631d102967d060b2dcbc0862cf docs/sdks/waitlistentriessdk/README.md: id: be78acbbb2f4 last_write_checksum: sha1:08794f1399c6b81cf83ef513816222cb5d12f53c @@ -3538,8 +3758,8 @@ trackedFiles: pristine_git_object: 7fd8db13ad9399ab075a5fb70e6da17525ad3ed0 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:8b52aa1e0d533459ecfb7f8a1ab124e23694af1f - pristine_git_object: ede95bcaa40de1d8a4923f46e66e5a87f59e06e4 + last_write_checksum: sha1:56175c8acea22827e6d92351ada827bf83f7838d + pristine_git_object: 124bab1137b71369f1bddc253e7d0e2211537892 scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:419f10ccc385a29136e599315b61a0aa7a1c3e15 @@ -3550,8 +3770,8 @@ trackedFiles: pristine_git_object: 2a3ead70ccc6228cbae1c5c8a319b1399f3804ea src/clerk_backend_api/__init__.py: id: 2f8bdf660d04 - last_write_checksum: sha1:36306d1d404b6aeb912d27f1d9c52f098ff7bf9b - pristine_git_object: dd02e42e4cc509dc90e6ae70493054021faa5f9c + last_write_checksum: sha1:eec86b555287a1f966479167defba81fe37be83f + pristine_git_object: d028dd22db25a8dfa0f8c44641ceed256e9d9e46 src/clerk_backend_api/_hooks/__init__.py: id: eaeec26cbfec last_write_checksum: sha1:e3111289afd28ad557c21d9e2f918caabfb7037d @@ -3566,16 +3786,16 @@ trackedFiles: pristine_git_object: 4926429d3dfb2c34589715971acb070ed3756559 src/clerk_backend_api/_version.py: id: 9bcb16a88e08 - last_write_checksum: sha1:2006536716933175c7923859f9e2771ad9553373 - pristine_git_object: f097f9eba67da1d43bfe91a5ed5a4ae2b0a8f1d8 + last_write_checksum: sha1:77a8829184c58633b1fc35949c809ac01eaad351 + pristine_git_object: 33dba4458e20c2f8e9ae7c9e5e199550c1b5c827 src/clerk_backend_api/actortokens.py: id: 3b3f89863233 last_write_checksum: sha1:3b904736e9137a0802a031e590dcb505f9ed0ba6 pristine_git_object: 7752a8e1bf8e56f7b205929c44316c69d96e4b2f src/clerk_backend_api/admin_portal_link_tokens.py: id: 049999ccbe0c - last_write_checksum: sha1:c87e0a84442ea77c3101bbf45ba116d039eb883f - pristine_git_object: 45a844a8df5ee1f7cc0fc3379b88f30497007ab8 + last_write_checksum: sha1:b3565291529dea2028b1f4d74b10b976c530b9d6 + pristine_git_object: 7906a34fbc8a573d7e527cb6f79063060f32e44b src/clerk_backend_api/agenttasks.py: id: d3c079113f2a last_write_checksum: sha1:e77dec344e06f79359ecd5e532c405c46174c9b6 @@ -3586,8 +3806,8 @@ trackedFiles: pristine_git_object: 792a92eaabc03f62c756db8df941b7b535b59d70 src/clerk_backend_api/api_keys.py: id: f04f9d016f99 - last_write_checksum: sha1:a0ae962178d8634b809fe82220a60a7889bec56e - pristine_git_object: a5f653669c7d913fb4dc70f5a11e8cd7cefb339a + last_write_checksum: sha1:7d464e8ea3ad04095dd105e4cc1383c1748f05c9 + pristine_git_object: 604539ec8b1079bbb10473525ecc576146ee62fc src/clerk_backend_api/basesdk.py: id: 5a15c2d94747 last_write_checksum: sha1:0bc8a7332e1a4b3c532ccee525b7cfe9106df29c @@ -3598,8 +3818,8 @@ trackedFiles: pristine_git_object: ca0b1f38e57e3324793a65906546ccd02e7a6e54 src/clerk_backend_api/billing.py: id: d2a23482b2e9 - last_write_checksum: sha1:458e74a5b1ec2ec59ef98e2ba3da35f58670645a - pristine_git_object: cf7442d8c4dcca21c756d2930919af226a9dc61f + last_write_checksum: sha1:76c0ff09fd1499a8f732175444d2283fa82dfa4c + pristine_git_object: e1fa4dcb0014acbb238ea38cdccbce249f38c8fd src/clerk_backend_api/blocklistidentifiers_sdk.py: id: 49e67487b740 last_write_checksum: sha1:dfb79683321b55cb9fd7edf70e351a1641b01255 @@ -3614,8 +3834,8 @@ trackedFiles: pristine_git_object: c0b8da932f6efa4ac0dbfb16c71287aeafc27d5a src/clerk_backend_api/emailaddresses.py: id: 90abfcbd4312 - last_write_checksum: sha1:fe68d23c4956f415787e5284995e9471e73dac7f - pristine_git_object: 9c7583f466dbdecf9e090cf22461cbe88b5e41ab + last_write_checksum: sha1:1fcde5f1ad321eee4ef71522afaf34e3a6bfe9aa + pristine_git_object: 27801837a40a21d1c2dd1c05ac1d86cf1793695f src/clerk_backend_api/emailandsmstemplates.py: id: 6b0d6ee5c16d last_write_checksum: sha1:ae1df3ac3e618dff7d610d61b4ad3e180b321301 @@ -3626,20 +3846,20 @@ trackedFiles: pristine_git_object: 158d7c61755de134ad76707f4f6868dfff78a1e2 src/clerk_backend_api/enterpriseconnections_sdk.py: id: fdae7c06198c - last_write_checksum: sha1:308e10c46e284731c39f5d32857fa35a4f8e8743 - pristine_git_object: 7c15e9c5b36e8c6470a561961589d6d0cd469be9 + last_write_checksum: sha1:2d480b854e297ae43163334c30351e6106f8ed51 + pristine_git_object: 199c5fadbba66e1127631deb34bac057c5ba9dda src/clerk_backend_api/httpclient.py: id: e554fdb21199 last_write_checksum: sha1:5e55338d6ee9f01ab648cad4380201a8a3da7dd7 pristine_git_object: 89560b566073785535643e694c112bedbd3db13d src/clerk_backend_api/instancesettings_sdk.py: id: 1ec41349c1e0 - last_write_checksum: sha1:c36f19552e6ec629f367744812d9fa4d367eb9cb - pristine_git_object: 971fb27347a6c1e3f404bd9d955c84af3afe0dc9 + last_write_checksum: sha1:a005bff1b7dc9bc3e37bfa5e328eb90345da1fe5 + pristine_git_object: fbf870bfe28c5aeb016430aab71a7fb05b0d7fcb src/clerk_backend_api/invitations.py: id: 1bc9adec1572 - last_write_checksum: sha1:7221440d7bde427517fb3d54865f6d3846359af0 - pristine_git_object: 4bf4e69aac88067b533082adfce80910e0100f7c + last_write_checksum: sha1:de978c971f508eed49bc287cf88f77a9573351ae + pristine_git_object: f58a5fd500ef32d35e78f0f96af812b74b260e35 src/clerk_backend_api/jwks_sdk.py: id: fbca6c1382e3 last_write_checksum: sha1:a73cc9d33d09ac406c37673beed21a665feecd6f @@ -3658,12 +3878,16 @@ trackedFiles: pristine_git_object: c1476b8bd563570e37fcb7d030061642c4f3463d src/clerk_backend_api/miscellaneous.py: id: 70bb358bb701 - last_write_checksum: sha1:e6229a934e4b701076b8642f394dfb85be089126 - pristine_git_object: 6fd13f3fc6a10d9cd8dc9445cc27f596919b27e0 + last_write_checksum: sha1:259ed0eccb24e36481fc06cc03edec0dd66fd4c9 + pristine_git_object: 1487f7397b93643052fce28231aefc25905fb076 src/clerk_backend_api/models/__init__.py: id: 97d9388d85c1 - last_write_checksum: sha1:dc910dd19eddec66438dd8f50daf89b75425c2a2 - pristine_git_object: e283bb6e7fca5ab148bdd1e77f9aa3660181905c + last_write_checksum: sha1:6f929f776821ec614e82ee048452c555ba829e8e + pristine_git_object: 6ceb8b9eb39fdd9fccd0e19ce1780ae33b1d8cc8 + src/clerk_backend_api/models/_verificationresponse.py: + id: 60d0443bfa2c + last_write_checksum: sha1:fe16527d8fc007a482bfc55e6f3ccd67f407d7bf + pristine_git_object: 832f35e7d7c85ec540ae935e28cf3b106c32da79 src/clerk_backend_api/models/actortoken.py: id: afa1aeb1f89c last_write_checksum: sha1:f45c3c3a3572607ac2aead2882b3e6de8e3bfdd6 @@ -3700,18 +3924,26 @@ trackedFiles: id: 13b0d15fe2f7 last_write_checksum: sha1:b8518e79f35e9206d341360a617501f89bc4abb9 pristine_git_object: e112fe5b278916b6d708118726cb3c1257252ae7 + src/clerk_backend_api/models/attemptemailaddressverificationop.py: + id: 3a60bf99520e + last_write_checksum: sha1:93b647bc06c5d5ed302c45e4609ff131e74807d0 + pristine_git_object: 45505b8cc125b26c33474e50d216d7d38a015981 + src/clerk_backend_api/models/attemptphonenumberverificationop.py: + id: 5b50ca715d6b + last_write_checksum: sha1:70823e1a26b53648124c3cb08e7022d650193630 + pristine_git_object: 0f21caf605171f1994a10b9916f1559a6c37417b src/clerk_backend_api/models/banuserop.py: id: 74909aa1878c last_write_checksum: sha1:e793696674413c1d2859066cf8650f4068b0a5f1 pristine_git_object: 391a1f7659fe78a3fd5e5cf2965a2e412ddaa6bd src/clerk_backend_api/models/billingpaymentattempt.py: id: b33ce5ce325b - last_write_checksum: sha1:11c13dfc38f06c8efa6294ddb3b3fc01c500c813 - pristine_git_object: 4fbd856f15e7bfd4f0a86877576ba228c08dfbdd + last_write_checksum: sha1:816469eeae1d4edd319f4300fb280bd1876c8d51 + pristine_git_object: 5873f11ddb17c0cdf63a19ca85060ae46b6f40f8 src/clerk_backend_api/models/billingpriceresponse.py: id: accd55daa3c3 - last_write_checksum: sha1:467685df75318c5ee2627591169fbd5e50ff933a - pristine_git_object: 864a920b24e255458b89e92fa49f97932f039bb1 + last_write_checksum: sha1:29980e9e71b0293c11d814cbdbcdfa9f0a6f2858 + pristine_git_object: 37299b9e3d9688a5a292e718c687835d4ad5a98b src/clerk_backend_api/models/billingstatement.py: id: ea675089f24e last_write_checksum: sha1:064cbdb47e72184e486787047a051ffbdd0af2f2 @@ -3774,12 +4006,12 @@ trackedFiles: pristine_git_object: ff3d5d6d882d1520b85486f6fd17d946d390a07c src/clerk_backend_api/models/commerceperunittotal.py: id: fc515b4cbc8e - last_write_checksum: sha1:08aae15a3b31ea6007b2a849cfe88587a5b98560 - pristine_git_object: 1b55e6cf4d462bc35f06f6ac0e4c9f7d82b7c93c + last_write_checksum: sha1:074af0e70db26dd71d5ce92e9aa9c0e0133252c4 + pristine_git_object: 654961fe1a25a208b25e1fbece63fdd9eea3c987 src/clerk_backend_api/models/commerceperunittotaltier.py: id: 33232c513703 - last_write_checksum: sha1:67f164dc85b623b13fbb8446d2a80a4efe4952c0 - pristine_git_object: 5a279e4f652f7cc2d9e0b3c387bc27b24bd4d946 + last_write_checksum: sha1:706e06d91a1e63fdc928e42c311c36aa10b69648 + pristine_git_object: a1682fe8a666012651c6cbf2eaa37830c16f45b8 src/clerk_backend_api/models/commerceplan.py: id: 865974d0de5a last_write_checksum: sha1:99f1c7a29c2451dc40c4b20d7f408c198beb6640 @@ -3810,12 +4042,12 @@ trackedFiles: pristine_git_object: 506a196fbe4a0973d608f60ef3767e740f6f4cf0 src/clerk_backend_api/models/commercesubscriptionitem.py: id: 85ab9baf8dde - last_write_checksum: sha1:29777392d00817296d9a827b24551cee70a88554 - pristine_git_object: 1774aacb3671610d29215391d603ba584151c29b + last_write_checksum: sha1:b83d6937725d81470a64cff3ceec287ba44d47ff + pristine_git_object: 9e93ed03103799c7a70877cb30c9ab2453f0167b src/clerk_backend_api/models/commercesubscriptionnextpayment.py: id: 3f0bb47b0862 - last_write_checksum: sha1:f071c87365502ce03cac8197aea5a6bb9df21bd2 - pristine_git_object: 16be8e6ed7c010fe8df180f568a402007a3c8ee7 + last_write_checksum: sha1:98bc7abb2fe94d2f4e9d00d1ef278a8ff81ca8ce + pristine_git_object: 34be14bc6d2c47f5d65a0ecc06c8097c1418ac20 src/clerk_backend_api/models/cookies.py: id: d52c35c2a6fb last_write_checksum: sha1:557c1d459bad57a064b2024340bf6cc4a7cdc56e @@ -3842,8 +4074,8 @@ trackedFiles: pristine_git_object: 598e69700a44579b881582584b428fe8efcc58a8 src/clerk_backend_api/models/createbillingpricerequest.py: id: b97e499e0829 - last_write_checksum: sha1:062ea9b11c90e6b8c756a0de98f97602ee4085cf - pristine_git_object: 7e2c700119e31561ebec1646708911548cd562b2 + last_write_checksum: sha1:f3c3df503ed3a1aa132a4407fcef2ab5de259d1e + pristine_git_object: 84a19d0ee0b7d18334d81da3cce3a6b3eb865a54 src/clerk_backend_api/models/createbillingpricetransitionop.py: id: b2b936b90df7 last_write_checksum: sha1:6a158d92eb5164cb73cf31b223d2d1a68f0a715f @@ -3866,8 +4098,12 @@ trackedFiles: pristine_git_object: 34c45a26ae1b0ccbab01e5b176efb909f02d3418 src/clerk_backend_api/models/createenterpriseconnectionop.py: id: b5cdd9bc15ad - last_write_checksum: sha1:418b1ee6afa6ecec5bf1c5d37c51f969ba96841f - pristine_git_object: 9ba664c325a52be35bc0ddcca390e8652a9c90d6 + last_write_checksum: sha1:2d1aba04daf727158c5fa71116424ed0508c45b0 + pristine_git_object: f2553798557d40f87045707fe0f5228294b5dc16 + src/clerk_backend_api/models/createenterpriseconnectiontestrunop.py: + id: acb0603e8f1d + last_write_checksum: sha1:6e1fbe7f4f3c1139a7ec5db24bb882d47e3cbce1 + pristine_git_object: 42910d490b07b15900779305d691cbd62a648c41 src/clerk_backend_api/models/createinvitationop.py: id: 479deaac075b last_write_checksum: sha1:a108f1ad1f42a813c335e9bcf6abd75fc9851da7 @@ -3954,8 +4190,8 @@ trackedFiles: pristine_git_object: 162d767c263b8d90de3f60d1991f12261cf70079 src/clerk_backend_api/models/createuserop.py: id: bacf02afe019 - last_write_checksum: sha1:db0d3522ac19b7508703ef1524174d35ca14bb90 - pristine_git_object: ae246f4874037e4137e91cc6d08d1bc544be9eb2 + last_write_checksum: sha1:cd0471b8d7fe63428000f2438c6bea858eebbe54 + pristine_git_object: 2f1e91c47e32985b1cb005919068f6406ef875b2 src/clerk_backend_api/models/createwaitlistentryop.py: id: 5fc8451ee608 last_write_checksum: sha1:9c93e68fffa5039690697f323c3c50422036c6be @@ -4078,20 +4314,32 @@ trackedFiles: pristine_git_object: 7c2cb9ffb835a0b7605b399091244417ff938c8f src/clerk_backend_api/models/emailaddress.py: id: 29df9abd37d1 - last_write_checksum: sha1:96c44825c782d835295a15c9bba4ad7145c0a6f9 - pristine_git_object: 83eb2e38bd907ac66f752e044c245afb0410b257 + last_write_checksum: sha1:4fa3ee7ebb012ed3e62de05f89464c5692c4e52e + pristine_git_object: 7aba58d2afa59c55f14ef6c02d8ffbb28fab9b8f src/clerk_backend_api/models/enterpriseaccount.py: id: 76fc27f00649 last_write_checksum: sha1:d070cdc2af8be851fbc1222dad8d7121a5977eee pristine_git_object: 5e04264834b607fb0ec750249f89ed47569ae099 src/clerk_backend_api/models/enterpriseconnection.py: id: 0045faf0e373 - last_write_checksum: sha1:d0c89cb0d464671a2296242271b9be3a84a9d122 - pristine_git_object: 9eeef85968b0a41031538bc6cd59b34b2e7aeec5 + last_write_checksum: sha1:90ee1126d9c5ce1a1b7236987d27723ae761639d + pristine_git_object: 3fe123e71412a89555eb73c87b1bf35b4f5b617d src/clerk_backend_api/models/enterpriseconnections.py: id: 010ac19b1513 last_write_checksum: sha1:4312df3471b4d138a5bc29c049b5a81015b23b3c pristine_git_object: 7767d2a271ba1b7d8af301345c3e791fa5bdd341 + src/clerk_backend_api/models/enterpriseconnectiontestrun.py: + id: accdb0c888ff + last_write_checksum: sha1:c4722368bb4c0f95bd14961fc98e9c2d0a4f9615 + pristine_git_object: 27347df3be48e27ca02bd13dd808955a02284697 + src/clerk_backend_api/models/enterpriseconnectiontestrunresponse.py: + id: 121ea2390b21 + last_write_checksum: sha1:4ed7b1f713f823bc09d3d68cc9b2c7ae294a7604 + pristine_git_object: 169d02c7654973013554d100e9b8ca7911242b98 + src/clerk_backend_api/models/enterpriseconnectiontestruns.py: + id: 14b652f7ca87 + last_write_checksum: sha1:7dc9987c88289a770b0e24fbe7328365225c0426 + pristine_git_object: 950b07c00d84017a24cb1f9f7eb06131665f899b src/clerk_backend_api/models/extendbillingsubscriptionitemfreetrialop.py: id: 5237ca04a999 last_write_checksum: sha1:e2d1bcf81ee76913824f63d6cc8339f734d0ee77 @@ -4102,8 +4350,8 @@ trackedFiles: pristine_git_object: e2bb51e244cd1a26f729b8224cdcd11164a507d1 src/clerk_backend_api/models/externalaccountwithverification.py: id: 79931be73b92 - last_write_checksum: sha1:895f169eed0794c53b5cf188a4ca0920e4e33acf - pristine_git_object: a00240cece35d39f60e0e3dd3aa3d97b7030df63 + last_write_checksum: sha1:81e528412f5cf8aeb2982c30cfd35fb0c1fcef24 + pristine_git_object: 59d85ad70e4a3ec035cae960d6f44dd50eeeaa40 src/clerk_backend_api/models/featureresponse.py: id: 40a15826a18c last_write_checksum: sha1:84f8316b07acef97d9fd656c26de1f8412a1db1a @@ -4214,8 +4462,8 @@ trackedFiles: pristine_git_object: 464557c4143ca3790f432caa725396ddd40be5a8 src/clerk_backend_api/models/getpublicinterstitialop.py: id: 8416966f0b0e - last_write_checksum: sha1:2fcaa170e95416bed451c54e42a302a74244744a - pristine_git_object: cb258072444bc598ae21d1a1bbf70ae01d991b62 + last_write_checksum: sha1:720b47a40826a320c6f7c9b7dc63268abea95e3d + pristine_git_object: 7946ff2c693db9e7e96d90859ef0367396619d64 src/clerk_backend_api/models/getredirecturlop.py: id: 6057b648df2e last_write_checksum: sha1:d41a1018d05871e7454d474efd95f8190bac67ff @@ -4328,6 +4576,10 @@ trackedFiles: id: 27184694a431 last_write_checksum: sha1:c988f817cea0f68b24cd19606c4331485157f7a1 pristine_git_object: 135c2a377fc66916d33c1d215b704f02e7ca4f16 + src/clerk_backend_api/models/listenterpriseconnectiontestrunsop.py: + id: a15a69110089 + last_write_checksum: sha1:3695fa94dee08845d370078ec19af33a2bf3e8f9 + pristine_git_object: 17480551b4f75e8c22a7921917d9be9d54b06c26 src/clerk_backend_api/models/listinstanceorganizationinvitationsop.py: id: 2e259aad6454 last_write_checksum: sha1:7e9d4ffb2df9b62b57e88059343586c87c6ad247 @@ -4550,8 +4802,16 @@ trackedFiles: pristine_git_object: 1f26ccef3cb6e58c4f011937021f5edc48784408 src/clerk_backend_api/models/phonenumber.py: id: 482915240b97 - last_write_checksum: sha1:e20257fe131db85b3c9ca9406f92f58f1ac1a215 - pristine_git_object: 499dcd63884cde9707cad8c161aec61216876092 + last_write_checksum: sha1:0e6edcb5de3380c8955a8286f0b020af0f3f76e2 + pristine_git_object: 23c9864f7955a50cf00b87f656e82691c1800ce8 + src/clerk_backend_api/models/prepareemailaddressverificationop.py: + id: f3e4f5a786df + last_write_checksum: sha1:545a4ae9172839bad0a1a8df24e9a7bff087ce9c + pristine_git_object: 71075537cae9bee1f1a591102398cfbca8ea155c + src/clerk_backend_api/models/preparephonenumberverificationop.py: + id: d2a5a74c0b6f + last_write_checksum: sha1:8c02dfb81ea60a307cd28786f208c92acea31f72 + pristine_git_object: 7381b1054ac8f4e8b2f8d3ec551e08bbc1262178 src/clerk_backend_api/models/previewtemplateop.py: id: b2a71f626359 last_write_checksum: sha1:c92d0bb8a02e1a14c3c8f9ecc41b5824a00834c9 @@ -4590,16 +4850,16 @@ trackedFiles: pristine_git_object: 8da7e8c425f63309be5014cbaacc5881560cb9c4 src/clerk_backend_api/models/replaceuseremailaddressop.py: id: bf3fa5c775a0 - last_write_checksum: sha1:cb19b2b50a5ea54e3e73203b1685e97be30164e1 - pristine_git_object: 8c696f746570c0c1b65ca3be60ca3b3189613596 + last_write_checksum: sha1:db11916908546253fe17373746b6bbd6596838a0 + pristine_git_object: fdeea23a07662cb1abe9b94be0d7e33b9cfb4d25 src/clerk_backend_api/models/replaceusermetadataop.py: id: c76262084a7c last_write_checksum: sha1:a7ea4d08cb398d9f277bfda8f42e9360d1ff0d0d pristine_git_object: 0e6b99c3aba1407327e33041cd18311f6fa49d4e src/clerk_backend_api/models/replaceuserphonenumberop.py: id: 6757455beab0 - last_write_checksum: sha1:5336e219909c807f5a966e539ef79dbdd8f432b7 - pristine_git_object: ba5492f93d94817246c4a612f62a69390fed6e38 + last_write_checksum: sha1:ab5335aa2e585d95c5ed5b83d6e8eb065e407c9e + pristine_git_object: f458396f954c8c9da336fc365bfa1dd7e0d077fb src/clerk_backend_api/models/responsevalidationerror.py: id: f06daf48a102 last_write_checksum: sha1:cf6ce06c477c6c994e86d95a55ac52b87c2218a7 @@ -4688,14 +4948,22 @@ trackedFiles: id: 327b5218696a last_write_checksum: sha1:72b1780d69ae2bf476e2e0a8554857665633e687 pristine_git_object: 76c451540cf95778c574d0dbd574aa36a77351e8 + src/clerk_backend_api/models/schemas_commerceperunittotal.py: + id: aed2149c3c67 + last_write_checksum: sha1:161e9443c1710082548e68308581e8a1522b75b5 + pristine_git_object: 0d05388aff487dd76050ac9ab554a87ae39cc06b + src/clerk_backend_api/models/schemas_commerceperunittotaltier.py: + id: 3e02c20b678c + last_write_checksum: sha1:77d05b21bcfc43788754d428158062ce64568144 + pristine_git_object: a0cb1ebefd8d470f0de1c2dcc19f8c309ea704b4 src/clerk_backend_api/models/schemas_commerceplan.py: id: 67304214fcb9 last_write_checksum: sha1:44cc5a610302581b40d71060adc3c02da7fe8a4f pristine_git_object: 40f92d2d4b288e49485d0bfa66309de3680c3f69 src/clerk_backend_api/models/schemas_commercesubscriptionitem.py: id: 3913a47cc4e2 - last_write_checksum: sha1:3a6494ab7f8f499aa75aff914f5390be9f900bad - pristine_git_object: ff826632284bf7abbfff1c22f66ee4c5faeb9905 + last_write_checksum: sha1:ac259bf8c92cc6356d309529a781b17d30a7ed4d + pristine_git_object: 83d1ad9eb07fee626ffb8fc803be14d87d120e2f src/clerk_backend_api/models/schemas_featureresponse.py: id: 6defa699c0c2 last_write_checksum: sha1:8b7e9a93a74d40a89005b77bceced6c95575cc8e @@ -4798,8 +5066,8 @@ trackedFiles: pristine_git_object: 595dedced1e0196e8bac9e03f7579cc8610f4a85 src/clerk_backend_api/models/updateenterpriseconnectionop.py: id: 8838cf277ea7 - last_write_checksum: sha1:300fe7868c231eb4611d690f2b29d47979bec256 - pristine_git_object: b7e1a40c08334ffe9951443e61e1c85826cea5d1 + last_write_checksum: sha1:961f57e17707841fdfcf5d3b8a888ed51643d580 + pristine_git_object: d4654624f0995556b47df4b2e967ceb565c9b702 src/clerk_backend_api/models/updateinstanceauthconfigop.py: id: e4d1c554c8a8 last_write_checksum: sha1:0a7ed65be461eff84e481fdd61f652c4214dd001 @@ -4982,36 +5250,36 @@ trackedFiles: pristine_git_object: be79daf3d07753ca39fcbf06365d94dc8206e196 src/clerk_backend_api/oauthapplications_sdk.py: id: ba92518ed381 - last_write_checksum: sha1:8f48b25a494099044d542d276f1f742c7bbfe3cc - pristine_git_object: 58f2061b0847d069cba49cffdd5741a29f7b57fd + last_write_checksum: sha1:35097091715661e542f7b95217a96a8a015c70d9 + pristine_git_object: e7d771e5125e97be4c1cd97fe9a773228eb34f97 src/clerk_backend_api/organizationdomains_sdk.py: id: b3594639c697 - last_write_checksum: sha1:6d9a8e9424f311bbe76a8ea8c214847b3c77fe11 - pristine_git_object: 9fb0e30fa74082c24445f3077ac627034de9f347 + last_write_checksum: sha1:cb51ee7adbebea52d1496b3b8fb8f0b087437a29 + pristine_git_object: 44cb4e8188b2050a69254b88a0f4c1e2b350b8e0 src/clerk_backend_api/organizationinvitations_sdk.py: id: 4ff208f271e3 - last_write_checksum: sha1:8dfe0aa66e8d67f84997679431ea4d0092697367 - pristine_git_object: 33d42ce489609237d9213649a12567dd4a800253 + last_write_checksum: sha1:54e25fabeae538101ca4cd03124862f698c4c502 + pristine_git_object: d5983fc489227419a8f6c09a0d2530f49d43648d src/clerk_backend_api/organizationmemberships_sdk.py: id: 1a0c6c4eb892 - last_write_checksum: sha1:daa8ee5efb8045025ed069784f9ab85264decd24 - pristine_git_object: b2e47e7d357cc76db39b1c48a4e7412902a63dae + last_write_checksum: sha1:a318cde3f4e79062a1aa6ceb63019efd1718d363 + pristine_git_object: 6c360f73ed5393ac6067d77f39b19e781aa05ce0 src/clerk_backend_api/organizationpermissions.py: id: 0b1603b6125b last_write_checksum: sha1:d10f78b63cfab6ec5d9fc989bc2c571d2a77684d pristine_git_object: 0e1e5ac3df6a655efc9f4f747da98279e2cdb12d src/clerk_backend_api/organizationroles.py: id: 83788adeb3fe - last_write_checksum: sha1:919d44eb42847b2ca4e4e70315528870ee5fadf9 - pristine_git_object: c4288bf152ffba89bea6dde29fb3eaf128dd2449 + last_write_checksum: sha1:379ca3a50a38128496af9c01749ea58d530d711d + pristine_git_object: 32a5ce07e3453ccc34e4f6fc296befd650388ccf src/clerk_backend_api/organizations_sdk.py: id: bab9dfd5e53d - last_write_checksum: sha1:3cc38a29ff1e4cb945a9012212cf1ef4828100c6 - pristine_git_object: 7dc26bb4e21711e7d751067b0de1dc92091b91cc + last_write_checksum: sha1:55effcdc8fdd0ee77b39a46d77b6a7ea427a1cca + pristine_git_object: d69abd72610db7bb1cfa8510244130a074324394 src/clerk_backend_api/phonenumbers.py: id: 33263264377c - last_write_checksum: sha1:4f1438ccb1ac26085265ef224b5216e53a544b73 - pristine_git_object: a3f2ba4d9ea82d1e0b00db75284e5d460387293e + last_write_checksum: sha1:857b36bd3859feb71e26874557cd56655227b9ad + pristine_git_object: fdd62b9a4b369df759c0d3a65b8439e54b6d6554 src/clerk_backend_api/proxychecks.py: id: 0a9d0959b4f0 last_write_checksum: sha1:2673303d4664de27166d5d808f9be1fa7818291f @@ -5026,12 +5294,12 @@ trackedFiles: pristine_git_object: ee180edfc046a1deaf20b173694963cc3ea7d3b6 src/clerk_backend_api/rolesets_sdk.py: id: 2520b5ee1f4f - last_write_checksum: sha1:ae1f5efd0ac235c4569ad6dc9c739804e07164ce - pristine_git_object: bb3347dd6112e0a60c5c1b24a14d84ec147e7d04 + last_write_checksum: sha1:a92392e181b12ebe65a3bb13f38a63abe1bb07cc + pristine_git_object: 48cb0d45a688640c664c4ac5c37cc59c9538e798 src/clerk_backend_api/samlconnections_sdk.py: id: 2e33ed64f642 - last_write_checksum: sha1:f73284838b680864b342c178a6936f2c38b7d573 - pristine_git_object: 17c2a6f071a1183155c4636e5c534056e028455e + last_write_checksum: sha1:01db8d57b3dd72ca5d6f0e5467186549de3d321f + pristine_git_object: 86fe5488178950a4a14ac90a4aafe9493a52e41b src/clerk_backend_api/sdk.py: id: a4df06d800b5 last_write_checksum: sha1:7b72f975db71091c30ed472f8937e66fcc9842bb @@ -5042,8 +5310,8 @@ trackedFiles: pristine_git_object: 0ec9fe26aaf37bdd2aceaebf9f0c6fb69f10ecc0 src/clerk_backend_api/sessions.py: id: 170442df3cba - last_write_checksum: sha1:cf8c3ee78dad6aed62fd531827fad9a3eb30d604 - pristine_git_object: 1b65dfb5a701bee20122d9e3a071da44c3d25672 + last_write_checksum: sha1:9464d07e8fae0c238f245627a2505d7984caed51 + pristine_git_object: ae34908d0e6385193966731ace24760bbc6a55e1 src/clerk_backend_api/signintokens.py: id: 00da479d394d last_write_checksum: sha1:24db1bc53a9d38000b849c6191d63fa1f4bf0b27 @@ -5074,8 +5342,8 @@ trackedFiles: pristine_git_object: a9a640a1a7048736383f96c67c6290c86bf536ee src/clerk_backend_api/users.py: id: 6f835640685a - last_write_checksum: sha1:2afc154e4109f624c1d607f3bab4d63be1391dbe - pristine_git_object: 86b3cfeb6f2693845946a4054a1ef1d1fb06024c + last_write_checksum: sha1:ccf7ac15197040287b06d37111dff93def69c1a7 + pristine_git_object: 0a55f81ddeceb3d6d8a6c37e0a12c0a4da1e99a6 src/clerk_backend_api/utils/__init__.py: id: a8b67e49e50a last_write_checksum: sha1:1970816f2234ecb8785798240b0edced961de971 @@ -5098,8 +5366,8 @@ trackedFiles: pristine_git_object: 3324e1bc2668c54c4d5f5a1a845675319757a828 src/clerk_backend_api/utils/eventstreaming.py: id: f5882f2ad74b - last_write_checksum: sha1:620d78a8b4e3b854e08d136e02e40a01a786bd70 - pristine_git_object: 3bdcd6d3d4fc772cb7f5fca8685dcdc8c85e13e8 + last_write_checksum: sha1:cad7e4feff4f1b2824afd0d30f2b1964a604f4dd + pristine_git_object: 1c189bf6fcad7ba90e0ec6d2f36ca7329d33bb99 src/clerk_backend_api/utils/forms.py: id: a9a6994ddf0b last_write_checksum: sha1:15fa7e9ab1611e062a9984cf06cb20969713d295 @@ -5122,8 +5390,8 @@ trackedFiles: pristine_git_object: c04e0db82b68eca041f2cb2614d748fbac80fd41 src/clerk_backend_api/utils/requestbodies.py: id: 47f0cccde5ce - last_write_checksum: sha1:41e2d2d2d3ecc394c8122ca4d4b85e1c3e03f054 - pristine_git_object: 1de32b6d26f46590232f398fdba6ce0072f1659c + last_write_checksum: sha1:e1fef575283b7fe7fe2ad392dbbb3fb105309124 + pristine_git_object: 591415af8e64baa410627b507d2740afb5387d13 src/clerk_backend_api/utils/retries.py: id: c8a5b5c54d76 last_write_checksum: sha1:471372f5c5d1dd5583239c9cf3c75f1b636e5d87 @@ -5134,8 +5402,8 @@ trackedFiles: pristine_git_object: 42d8d78e9981eed7507670014d99588e27ab325a src/clerk_backend_api/utils/serializers.py: id: 50ff4899a574 - last_write_checksum: sha1:61009f2e4ef6613a1a5af813fe020373dae5a492 - pristine_git_object: d2149f8b909cb96628db140ac3cddb1b1e981367 + last_write_checksum: sha1:7485f1425b0661fd84836186570df90207eec6af + pristine_git_object: 1031ed930bad5ece220cf7416a56c29f40f0588b src/clerk_backend_api/utils/unmarshal_json_response.py: id: a09f548ad43c last_write_checksum: sha1:8f1bde967f44fc394e5922d0da5e9b1bbfc6ab2a @@ -5150,8 +5418,8 @@ trackedFiles: pristine_git_object: dae01a44384ac3bc13ae07453a053bf6c898ebe3 src/clerk_backend_api/waitlistentries_sdk.py: id: 1499ce41c317 - last_write_checksum: sha1:1f14cafcdc19450b96c56c12056dce2dd2f73205 - pristine_git_object: e5b8f4c24fc1df96a5a29f2486401566eafcbbaf + last_write_checksum: sha1:4b93cd4ae378aea104033155b276ed3a0fd4c799 + pristine_git_object: b8863e6b6ccd021c9128456010d9138482a725e1 src/clerk_backend_api/webhooks.py: id: 91e0631f0dfd last_write_checksum: sha1:db56b729361e921570cd2d16ca33c24769a8cf2f @@ -5212,7 +5480,7 @@ examples: application/json: {"user_id": "user_12345", "email_address": "example@clerk.com", "verified": false, "primary": true} responses: "200": - application/json: {"id": "email_id_56789", "object": "email_address", "email_address": "example@clerk.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "reset_password_email_code", "attempts": 1, "expire_at": 1615462399, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1615458901, "updated_at": 1615459001} + application/json: {"id": "email_id_56789", "object": "email_address", "email_address": "example@clerk.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "reset_password_email_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1615458901, "updated_at": 1615459001} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetEmailAddress: @@ -5263,7 +5531,7 @@ examples: phone_number_id: "phone_12345" responses: "200": - application/json: {"id": "ph_123456789", "object": "phone_number", "phone_number": "+11234567890", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1594842023, "updated_at": 1604842023} + application/json: {"id": "ph_123456789", "object": "phone_number", "phone_number": "+11234567890", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1594842023, "updated_at": 1604842023} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeletePhoneNumber: @@ -5285,7 +5553,7 @@ examples: application/json: {"verified": false, "primary": true, "reserved_for_second_factor": true} responses: "200": - application/json: {"id": "ph_123456789", "object": "phone_number", "phone_number": "+11234567890", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1594842023, "updated_at": 1604842023} + application/json: {"id": "ph_123456789", "object": "phone_number", "phone_number": "+11234567890", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1594842023, "updated_at": 1604842023} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetSessionList: @@ -5528,16 +5796,16 @@ examples: provider_user_id: [""] responses: "200": - application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "zh", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 840489, "expire_at": 779542, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "unverified", "strategy": "phone_code", "attempts": 905234, "expire_at": 563928, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": 682381, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": 634404, "expire_at": 583086, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 462651, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Timothy_Armstrong@yahoo.com", "email_address_verified": false, "first_name": "Amya", "last_name": "Nicolas", "image_url": "https://sore-patroller.name", "username": "Thurman.Smith90", "phone_number": "(690) 819-2224 x7382", "public_metadata": {}, "label": "", "created_at": 470136, "updated_at": 761414, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 827691, "attempts": 307866, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 790596, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "unverified", "strategy": "saml", "external_verification_redirect_url": "https://tricky-mousse.com/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 682430, "attempts": 419582, "verified_at_client": ""}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Edison.Brekke90@hotmail.com", "first_name": "Timothy", "last_name": "Schneider", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://pushy-mythology.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": null, "attempts": 171073, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://smug-finding.org/", "domain": "elegant-napkin.com", "domains": [""], "active": false, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 35715, "updated_at": 148555}, "last_authenticated_at": 50025}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://palatable-backburn.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 419582, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 365714, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Annabell", "last_name": "Pollich", "profile_image_url": "https://dearest-retrospectivity.biz", "image_url": "https://able-chap.info/", "has_image": true, "identifier": "", "username": null, "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 908237, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}}] + application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "zh", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 840489, "expire_at": 779542, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "unverified", "strategy": "phone_code", "attempts": 905234, "expire_at": 563928, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": 682381, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": 634404, "expire_at": 583086, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 462651, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Timothy_Armstrong@yahoo.com", "email_address_verified": false, "first_name": "Amya", "last_name": "Nicolas", "image_url": "https://sore-patroller.name", "username": "Thurman.Smith90", "phone_number": "(690) 819-2224 x7382", "public_metadata": {}, "label": "", "created_at": 470136, "updated_at": 761414, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 827691, "attempts": 307866, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 790596, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "unverified", "strategy": "saml", "external_verification_redirect_url": "https://tricky-mousse.com/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 682430, "attempts": 419582, "verified_at_client": ""}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Edison.Brekke90@hotmail.com", "first_name": "Timothy", "last_name": "Schneider", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://pushy-mythology.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": null, "attempts": 171073, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://smug-finding.org/", "domain": "elegant-napkin.com", "domains": [""], "active": false, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 35715, "updated_at": 148555}, "last_authenticated_at": 50025}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://palatable-backburn.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 419582, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 365714, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Annabell", "last_name": "Pollich", "profile_image_url": "https://dearest-retrospectivity.biz", "image_url": "https://able-chap.info/", "has_image": true, "identifier": "", "username": null, "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 908237, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}}] "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateUser: speakeasy-default-create-user: requestBody: - application/json: {"external_id": "ext-id-001", "first_name": "John", "last_name": "Doe", "locale": "en", "email_address": ["john.doe@example.com"], "phone_number": ["+12345678901"], "web3_wallet": ["0x123456789abcdef0x123456789abcdef"], "username": "johndoe123", "password": "Secure*Pass4", "password_digest": "$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc", "password_hasher": "", "skip_password_checks": false, "skip_password_requirement": false, "totp_secret": "base32totpsecretkey", "backup_codes": ["123456", "654321"], "public_metadata": {"role": "user"}, "private_metadata": {"internal_id": "789"}, "unsafe_metadata": {"preferences": {"theme": "dark"}}, "delete_self_enabled": true, "legal_accepted_at": "", "skip_legal_checks": false, "skip_user_requirement": true, "create_organization_enabled": null, "create_organizations_limit": 81560, "created_at": "2023-03-15T07:15:20.902Z", "bypass_client_trust": true, "banned": true, "locked": false} + application/json: {"external_id": "ext-id-001", "first_name": "John", "last_name": "Doe", "locale": "en", "email_address": ["john.doe@example.com"], "email_address_identification_status": ["reserved"], "phone_number": ["+12345678901"], "phone_number_identification_status": ["verified"], "web3_wallet": ["0x123456789abcdef0x123456789abcdef"], "username": "johndoe123", "password": "Secure*Pass4", "password_digest": "$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc", "password_hasher": "", "skip_password_checks": false, "skip_password_requirement": false, "totp_secret": "base32totpsecretkey", "backup_codes": ["123456", "654321"], "public_metadata": {"role": "user"}, "private_metadata": {"internal_id": "789"}, "unsafe_metadata": {"preferences": {"theme": "dark"}}, "delete_self_enabled": true, "legal_accepted_at": "", "skip_legal_checks": false, "skip_user_requirement": true, "create_organization_enabled": null, "create_organizations_limit": 81560, "created_at": "2023-03-15T07:15:20.902Z", "bypass_client_trust": true, "banned": true, "locked": false} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "nl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 15137, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Jordi_Considine@hotmail.com", "email_address_verified": false, "first_name": "Nova", "last_name": "Barrows", "image_url": null, "username": "Peggie1", "phone_number": "(240) 834-3897 x5758", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 149561, "updated_at": 182730, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 432680, "attempts": 818362, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 35779, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Jay.Schmitt@gmail.com", "first_name": "Vincenza", "last_name": "Rosenbaum", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 485856, "expire_at": 538593, "verified_at_client": null}, "enterprise_connection": null, "last_authenticated_at": 793877}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://any-pension.com", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 8333, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 149561, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Susana", "last_name": "Kling", "profile_image_url": "https://suburban-doing.name/", "image_url": "https://faraway-onset.info/", "has_image": false, "identifier": "", "username": "Savannah83", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 476222, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "nl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 15137, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Jordi_Considine@hotmail.com", "email_address_verified": false, "first_name": "Nova", "last_name": "Barrows", "image_url": null, "username": "Peggie1", "phone_number": "(240) 834-3897 x5758", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 149561, "updated_at": 182730, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 432680, "attempts": 818362, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 35779, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Jay.Schmitt@gmail.com", "first_name": "Vincenza", "last_name": "Rosenbaum", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 485856, "expire_at": 538593, "verified_at_client": null}, "enterprise_connection": null, "last_authenticated_at": 793877}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://any-pension.com", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 8333, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 149561, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Susana", "last_name": "Kling", "profile_image_url": "https://suburban-doing.name/", "image_url": "https://faraway-onset.info/", "has_image": false, "identifier": "", "username": "Savannah83", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 476222, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetUsersCount: @@ -5635,7 +5903,7 @@ examples: user_id: "user_12345" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "en", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_from_oauth", "status": "verified", "strategy": "admin", "error": null, "expire_at": 117089, "attempts": 222590, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 2, "expire_at": 1622852400, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "verified", "strategy": "web3_metamask_signature", "nonce": "nonce_value", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 49333, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Tyreek31@gmail.com", "email_address_verified": true, "first_name": "Freda", "last_name": "Larkin", "image_url": "https://aggravating-creature.org/", "username": "Taya.Kessler90", "phone_number": "256.205.2962", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 228824, "updated_at": 409743, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 117089, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Autumn.Pfannerstill@gmail.com", "first_name": "Vern", "last_name": "Gulgowski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 383637, "expire_at": 230067, "verified_at_client": ""}, "enterprise_connection": null, "last_authenticated_at": 847387}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://upbeat-editor.info/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 198918, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 731932, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Haley", "profile_image_url": null, "image_url": "https://frightened-marketplace.info/", "has_image": true, "identifier": "", "username": "Richard_Wehner3", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 589544, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "en", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_from_oauth", "status": "verified", "strategy": "admin", "error": null, "expire_at": 117089, "attempts": 222590, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "verified", "strategy": "web3_metamask_signature", "nonce": "nonce_value", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 49333, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Tyreek31@gmail.com", "email_address_verified": true, "first_name": "Freda", "last_name": "Larkin", "image_url": "https://aggravating-creature.org/", "username": "Taya.Kessler90", "phone_number": "256.205.2962", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 228824, "updated_at": 409743, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 117089, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Autumn.Pfannerstill@gmail.com", "first_name": "Vern", "last_name": "Gulgowski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 383637, "expire_at": 230067, "verified_at_client": ""}, "enterprise_connection": null, "last_authenticated_at": 847387}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://upbeat-editor.info/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 198918, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 731932, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Haley", "profile_image_url": null, "image_url": "https://frightened-marketplace.info/", "has_image": true, "identifier": "", "username": "Richard_Wehner3", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 589544, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UnbanUser: @@ -5645,7 +5913,7 @@ examples: user_id: "user_12345" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "ru", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 1, "expire_at": 1615462399, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 340622, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Willa_Lesch@yahoo.com", "email_address_verified": true, "first_name": "Lafayette", "last_name": "Emard", "image_url": "https://stale-skean.biz", "username": null, "phone_number": "686.924.9156", "public_metadata": {"key": "", "key1": "", "key2": ""}, "label": "", "created_at": 987413, "updated_at": 267247, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 648874, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://swift-developing.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 881019, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 257330, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Willa", "last_name": "O'Kon", "profile_image_url": "https://oval-bookend.biz", "image_url": "https://wrathful-season.net", "has_image": true, "identifier": null, "username": "Era.Gleichner-Fisher", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 412656, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "ru", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 340622, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Willa_Lesch@yahoo.com", "email_address_verified": true, "first_name": "Lafayette", "last_name": "Emard", "image_url": "https://stale-skean.biz", "username": null, "phone_number": "686.924.9156", "public_metadata": {"key": "", "key1": "", "key2": ""}, "label": "", "created_at": 987413, "updated_at": 267247, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 648874, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 1622852400, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://swift-developing.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 881019, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 257330, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Willa", "last_name": "O'Kon", "profile_image_url": "https://oval-bookend.biz", "image_url": "https://wrathful-season.net", "has_image": true, "identifier": null, "username": "Era.Gleichner-Fisher", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 412656, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} LockUser: @@ -5655,7 +5923,7 @@ examples: user_id: "user_123456789" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "it", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 1, "expire_at": 1615462399, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 230185, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Don.West@gmail.com", "email_address_verified": true, "first_name": "Chesley", "last_name": "Shanahan", "image_url": "https://muddy-cuckoo.biz", "username": "Vernon59", "phone_number": "824-825-4224 x937", "public_metadata": {}, "label": "", "created_at": 869240, "updated_at": 610510, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "google_one_tap", "external_verification_redirect_url": "https://square-smoke.net/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 656786, "attempts": 769139, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 887294, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Dora.Rolfson@hotmail.com", "first_name": "Don", "last_name": "Haley", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://muddy-cuckoo.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 958342, "attempts": 520911, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": null, "domains": ["", "", ""], "active": false, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 25659, "updated_at": 330463}, "last_authenticated_at": 114694}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://urban-marketplace.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 825654, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 606431, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Jacinthe", "last_name": "Hessel", "profile_image_url": null, "image_url": "https://teeming-plugin.info/", "has_image": true, "identifier": "", "username": "Nyasia_OKeefe", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 825654, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "it", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 230185, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Don.West@gmail.com", "email_address_verified": true, "first_name": "Chesley", "last_name": "Shanahan", "image_url": "https://muddy-cuckoo.biz", "username": "Vernon59", "phone_number": "824-825-4224 x937", "public_metadata": {}, "label": "", "created_at": 869240, "updated_at": 610510, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "google_one_tap", "external_verification_redirect_url": "https://square-smoke.net/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 656786, "attempts": 769139, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 887294, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Dora.Rolfson@hotmail.com", "first_name": "Don", "last_name": "Haley", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://muddy-cuckoo.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 958342, "attempts": 520911, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": null, "domains": ["", "", ""], "active": false, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 25659, "updated_at": 330463}, "last_authenticated_at": 114694}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://urban-marketplace.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 825654, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 606431, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Jacinthe", "last_name": "Hessel", "profile_image_url": null, "image_url": "https://teeming-plugin.info/", "has_image": true, "identifier": "", "username": "Nyasia_OKeefe", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 825654, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "403": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UnlockUser: @@ -5665,7 +5933,7 @@ examples: user_id: "user_12345" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "sv", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 1, "expire_at": 1615462399, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 664479, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Javier.Bechtelar-Bartoletti61@yahoo.com", "email_address_verified": false, "first_name": "Edd", "last_name": "McCullough", "image_url": null, "username": "Shannon9", "phone_number": "907-845-3349 x0026", "public_metadata": {"key": ""}, "label": "", "created_at": 259844, "updated_at": 982099, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 649637, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://buzzing-freckle.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 250489, "attempts": null, "verified_at_client": null}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Ashlynn.Stroman@hotmail.com", "first_name": "Javier", "last_name": "Bartoletti", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 881795, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": null, "domains": ["", ""], "active": true, "sync_user_attributes": true, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 365844, "updated_at": 85440}, "last_authenticated_at": 10111}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://thin-countess.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 646443, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 522327, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Janessa", "last_name": "Barton", "profile_image_url": "https://putrid-thyme.com", "image_url": "https://handy-pocket-watch.info/", "has_image": false, "identifier": "", "username": "Priscilla8", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 200899, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "sv", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": 1, "expire_at": 1615462399, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 664479, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Javier.Bechtelar-Bartoletti61@yahoo.com", "email_address_verified": false, "first_name": "Edd", "last_name": "McCullough", "image_url": null, "username": "Shannon9", "phone_number": "907-845-3349 x0026", "public_metadata": {"key": ""}, "label": "", "created_at": 259844, "updated_at": 982099, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 649637, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://buzzing-freckle.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 250489, "attempts": null, "verified_at_client": null}, "saml_connection": null}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": false, "email_address": "Ashlynn.Stroman@hotmail.com", "first_name": "Javier", "last_name": "Bartoletti", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": 881795, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": null, "domains": ["", ""], "active": true, "sync_user_attributes": true, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 365844, "updated_at": 85440}, "last_authenticated_at": 10111}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://thin-countess.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 646443, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 522327, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Janessa", "last_name": "Barton", "profile_image_url": "https://putrid-thyme.com", "image_url": "https://handy-pocket-watch.info/", "has_image": false, "identifier": "", "username": "Priscilla8", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 200899, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "403": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} SetUserProfileImage: @@ -5687,7 +5955,7 @@ examples: user_id: "usr_test123" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "zh", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 494195, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Leda.Howell23@hotmail.com", "email_address_verified": true, "first_name": "Georgette", "last_name": "Veum", "image_url": "https://wobbly-allocation.biz/", "username": "Clifford88", "phone_number": "920.998.6934", "public_metadata": {"key": "", "key1": ""}, "label": "", "created_at": 355458, "updated_at": 464532, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 169267, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://unwieldy-place.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 32121, "attempts": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Derek_Volkman@hotmail.com", "first_name": "Gianni", "last_name": "Balistreri", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": "", "key2": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": null, "expire_at": 132240, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://scented-poppy.name", "domains": [""], "active": true, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 219490, "updated_at": 680799}, "last_authenticated_at": 345760}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://acclaimed-charm.org", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 892410, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 756848, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Alf", "last_name": "Lockman", "profile_image_url": "https://ornate-pliers.biz", "image_url": "https://variable-punctuation.name", "has_image": true, "identifier": "", "username": "Jessie.Hermann22", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 776566, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "zh", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 0, "expire_at": 1620000000, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 494195, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Leda.Howell23@hotmail.com", "email_address_verified": true, "first_name": "Georgette", "last_name": "Veum", "image_url": "https://wobbly-allocation.biz/", "username": "Clifford88", "phone_number": "920.998.6934", "public_metadata": {"key": "", "key1": ""}, "label": "", "created_at": 355458, "updated_at": 464532, "verification": {"object": "verification_oauth", "status": "verified", "strategy": "oauth_google", "external_verification_redirect_url": "https://oauth.google.com/verify", "error": null, "expire_at": 1615462399, "attempts": 1, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 169267, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": "https://unwieldy-place.biz", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 32121, "attempts": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Derek_Volkman@hotmail.com", "first_name": "Gianni", "last_name": "Balistreri", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": "", "key2": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": null, "expire_at": 132240, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://scented-poppy.name", "domains": [""], "active": true, "sync_user_attributes": false, "allow_subdomains": true, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 219490, "updated_at": 680799}, "last_authenticated_at": 345760}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://acclaimed-charm.org", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 892410, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 756848, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Alf", "last_name": "Lockman", "profile_image_url": "https://ornate-pliers.biz", "image_url": "https://variable-punctuation.name", "has_image": true, "identifier": "", "username": "Jessie.Hermann22", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 776566, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": ""}} "404": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UpdateUserMetadata: @@ -5699,7 +5967,7 @@ examples: application/json: {"public_metadata": {"key": ""}, "private_metadata": {"key": "", "key1": ""}, "unsafe_metadata": {"key": "", "key1": ""}} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "ja", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": null, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 387811, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Sherman_Stanton@yahoo.com", "email_address_verified": true, "first_name": "Kristian", "last_name": "Bartell", "image_url": "https://ecstatic-juggernaut.org", "username": "Alayna_McLaughlin", "phone_number": "1-281-985-7838 x38866", "public_metadata": {"key": ""}, "label": "", "created_at": 24797, "updated_at": 885925, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": 1615462399, "attempts": 1, "verified_at_client": "", "error": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 849797, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": null, "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 613304, "attempts": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://harmful-thorn.com", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 898302, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 887368, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Mya", "last_name": "Torphy", "profile_image_url": "https://sudden-onset.name", "image_url": "https://each-alliance.org", "has_image": false, "identifier": "", "username": "Zella.Bahringer", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 466423, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "ja", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "email_code", "attempts": null, "expire_at": null, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 2, "expire_at": 1622852400, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": null, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": null, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 387811, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Sherman_Stanton@yahoo.com", "email_address_verified": true, "first_name": "Kristian", "last_name": "Bartell", "image_url": "https://ecstatic-juggernaut.org", "username": "Alayna_McLaughlin", "phone_number": "1-281-985-7838 x38866", "public_metadata": {"key": ""}, "label": "", "created_at": 24797, "updated_at": 885925, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": 1615462399, "attempts": 1, "verified_at_client": "", "error": null}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 849797, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_saml", "status": "verified", "strategy": "saml", "external_verification_redirect_url": null, "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 613304, "attempts": null, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://harmful-thorn.com", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 898302, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 887368, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Mya", "last_name": "Torphy", "profile_image_url": "https://sudden-onset.name", "image_url": "https://each-alliance.org", "has_image": false, "identifier": "", "username": "Zella.Bahringer", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 466423, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetOAuthAccessToken: @@ -6792,7 +7060,7 @@ examples: application/json: {"user_ids": ["", "", ""]} responses: "200": - application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "fi", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 91086, "expire_at": 708739, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "reset_password_email_code", "attempts": 350529, "expire_at": 403378, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "expired", "strategy": "web3_metamask_signature", "nonce": "", "message": "", "attempts": 38170, "expire_at": 791456, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 959813, "expire_at": 33571, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 889326, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Kelly90@yahoo.com", "email_address_verified": false, "first_name": "Eleazar", "last_name": "Labadie", "image_url": null, "username": null, "phone_number": "829.350.0802 x78343", "public_metadata": {"key": "", "key1": ""}, "label": "", "created_at": 15742, "updated_at": 356726, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://corny-elver.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 400231, "attempts": 698888, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 433371, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 236111, "expire_at": null, "verified_at_client": null}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": ["", "", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Melody48@gmail.com", "first_name": "Felicia", "last_name": "Jakubowski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "", "external_verification_redirect_url": "https://measly-scratch.name/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 878936, "attempts": 243637, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://dutiful-exasperation.name", "domains": ["", "", ""], "active": false, "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 3029, "updated_at": 993605}, "last_authenticated_at": 803167}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://victorious-chow.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 837086, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 62911, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Novella", "last_name": "Kuhn", "profile_image_url": "https://flawed-advertisement.info", "image_url": "https://concerned-traditionalism.org/", "has_image": true, "identifier": "", "username": "Fidel_Hahn", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 378428, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": null}}] + application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "fi", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 91086, "expire_at": 708739, "verified_at_client": null}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "reset_password_email_code", "attempts": 350529, "expire_at": 403378, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "expired", "strategy": "web3_metamask_signature", "nonce": "", "message": "", "attempts": 38170, "expire_at": 791456, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 959813, "expire_at": 33571, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 889326, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Kelly90@yahoo.com", "email_address_verified": false, "first_name": "Eleazar", "last_name": "Labadie", "image_url": null, "username": null, "phone_number": "829.350.0802 x78343", "public_metadata": {"key": "", "key1": ""}, "label": "", "created_at": 15742, "updated_at": 356726, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://corny-elver.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 400231, "attempts": 698888, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 433371, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 236111, "expire_at": null, "verified_at_client": null}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": ["", "", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Melody48@gmail.com", "first_name": "Felicia", "last_name": "Jakubowski", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": ""}, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "", "external_verification_redirect_url": "https://measly-scratch.name/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 878936, "attempts": 243637, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://dutiful-exasperation.name", "domains": ["", "", ""], "active": false, "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 3029, "updated_at": 993605}, "last_authenticated_at": 803167}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://victorious-chow.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": true, "pending_invitations_count": 837086, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 62911, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Novella", "last_name": "Kuhn", "profile_image_url": "https://flawed-advertisement.info", "image_url": "https://concerned-traditionalism.org/", "has_image": true, "identifier": "", "username": "Fidel_Hahn", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 378428, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": true, "external_id": null}}] "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UsersUnban: @@ -6801,7 +7069,7 @@ examples: application/json: {"user_ids": ["", "", ""]} responses: "200": - application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "pt", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 932013, "expire_at": 43591, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": null, "expire_at": 332407, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 794368, "expire_at": 602166, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 872873, "expire_at": 160820, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 286479, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Jermain_Kemmer64@yahoo.com", "email_address_verified": true, "first_name": "Loraine", "last_name": "Murray", "image_url": "https://good-natured-finding.name/", "username": "Alaina.Green64", "phone_number": "1-275-973-4414", "public_metadata": {}, "label": null, "created_at": 768653, "updated_at": 470874, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 176015, "attempts": 486916, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 932013, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 664797, "expire_at": 820435, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Kristopher.Cummerata0@gmail.com", "first_name": "Esta", "last_name": "Ryan", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "", "external_verification_redirect_url": "https://free-coast.net", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 424998, "attempts": 787261, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://corrupt-outlaw.biz", "domains": [], "active": true, "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 513160, "updated_at": 288253}, "last_authenticated_at": 640467}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://pushy-celsius.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 956546, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 770210, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Jade", "last_name": "Jones", "profile_image_url": "https://soft-instruction.biz/", "image_url": "https://esteemed-junior.biz", "has_image": false, "identifier": "", "username": "Lora_Koelpin", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 294300, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}}] + application/json: [{"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "pt", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 932013, "expire_at": 43591, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": null, "expire_at": 332407, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 794368, "expire_at": 602166, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 872873, "expire_at": 160820, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 286479, "external_accounts": [{"object": "facebook_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Jermain_Kemmer64@yahoo.com", "email_address_verified": true, "first_name": "Loraine", "last_name": "Murray", "image_url": "https://good-natured-finding.name/", "username": "Alaina.Green64", "phone_number": "1-275-973-4414", "public_metadata": {}, "label": null, "created_at": 768653, "updated_at": 470874, "verification": {"object": "verification_google_one_tap", "status": "unverified", "strategy": "google_one_tap", "expire_at": 176015, "attempts": 486916, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 932013, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "verified", "strategy": "ticket", "attempts": 664797, "expire_at": 820435, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": false, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Kristopher.Cummerata0@gmail.com", "first_name": "Esta", "last_name": "Ryan", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_oauth", "status": "unverified", "strategy": "", "external_verification_redirect_url": "https://free-coast.net", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 424998, "attempts": 787261, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://corrupt-outlaw.biz", "domains": [], "active": true, "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 513160, "updated_at": 288253}, "last_authenticated_at": 640467}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://pushy-celsius.com/", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 956546, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 770210, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Jade", "last_name": "Jones", "profile_image_url": "https://soft-instruction.biz/", "image_url": "https://esteemed-junior.biz", "has_image": false, "identifier": "", "username": "Lora_Koelpin", "banned": false}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 294300, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}}] "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateMachineToken: @@ -7040,7 +7308,7 @@ examples: organization_id: "" responses: "200": - application/json: {"data": [{"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "upcoming", "credit": {"amount": {"amount": 115692, "amount_formatted": "", "currency": "Denar", "currency_symbol": "K"}, "cycle_remaining_percent": 5890.09}, "credits": {"proration": {"amount": {"amount": 760063, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "cycle_days_remaining": 754794, "cycle_days_total": 119895, "cycle_remaining_percent": 1156.92}, "payer": {"remaining_balance": {"amount": 989424, "amount_formatted": "", "currency": "Kwacha", "currency_symbol": "L"}, "applied_amount": {"amount": 349721, "amount_formatted": "", "currency": "Iceland Krona", "currency_symbol": "₪"}}, "total": {"amount": 500878, "amount_formatted": "", "currency": "Pakistan Rupee", "currency_symbol": "$"}}, "plan_id": "", "price_id": "", "plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 349721, "amount_formatted": "", "currency": "Iceland Krona", "currency_symbol": "₪"}, "annual_monthly_fee": {"amount": 500878, "amount_formatted": "", "currency": "Pakistan Rupee", "currency_symbol": "$"}, "annual_fee": {"amount": 13059, "amount_formatted": "", "currency": "Uzbekistan Sum", "currency_symbol": "$"}, "description": "tennis husband meanwhile duh uh-huh chap provided stained wry uncomfortable", "product_id": "", "is_default": false, "is_recurring": true, "publicly_visible": true, "has_base_fee": true, "for_payer_type": "", "slug": "", "avatar_url": "https://monthly-lace.org", "features": [], "free_trial_enabled": true, "free_trial_days": 520556, "unit_prices": [{"name": "", "block_size": 13059, "tiers": [{"starts_at_block": 339643, "ends_after_block": 790012, "fee_per_block": {"amount": 676339, "amount_formatted": "", "currency": "Sudanese Pound", "currency_symbol": "£"}}]}]}, "plan_period": "month", "payment_method": {"object": "commerce_payment_method", "id": "", "payer_id": "", "payment_type": "link", "is_default": false, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": "", "last4": "", "status": "disconnected", "wallet_type": "", "card_type": "", "expiry_year": 542201, "expiry_month": 589009, "created_at": 348814, "updated_at": 349721, "is_removable": true}, "lifetime_paid": {"amount": 42923, "amount_formatted": "", "currency": "Swiss Franc", "currency_symbol": "лв"}, "next_payment": null, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Mathew", "last_name": "McLaughlin", "email": "Zetta_Wilderman39@gmail.com", "organization_id": "", "organization_name": "", "image_url": "https://queasy-charlatan.net/", "credits_balance": {"amount": 724310, "amount_formatted": "", "currency": "Uganda Shilling", "currency_symbol": "$"}, "created_at": 905937, "updated_at": 777337}, "is_free_trial": false, "period_start": 543438, "period_end": 271235, "proration_date": "", "canceled_at": 232920, "past_due_at": null, "ended_at": 743580, "created_at": 762052, "updated_at": 856930, "seats": {"quantity": 562691, "tiers": [{"quantity": 887702, "fee_per_block": {"amount": 760063, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "total": {"amount": 754794, "amount_formatted": "", "currency": "Boliviano boliviano", "currency_symbol": "$"}}]}, "totals": {"subtotal": {"amount": 242637, "amount_formatted": "", "currency": "Solomon Islands Dollar", "currency_symbol": "﷼"}, "base_fee": {"amount": 380056, "amount_formatted": "", "currency": "Peso Uruguayo", "currency_symbol": "S"}, "tax_total": {"amount": 91855, "amount_formatted": "", "currency": "Riel", "currency_symbol": "Lek"}, "grand_total": {"amount": 82013, "amount_formatted": "", "currency": "Czech Koruna", "currency_symbol": "$"}, "per_unit_totals": [{"name": "", "block_size": 422219, "tiers": []}], "credits": {"proration": {"amount": {"amount": 760063, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "cycle_days_remaining": 71270, "cycle_days_total": 126213, "cycle_remaining_percent": 1879.2}, "payer": {"remaining_balance": {"amount": 989424, "amount_formatted": "", "currency": "Kwacha", "currency_symbol": "L"}, "applied_amount": {"amount": 349721, "amount_formatted": "", "currency": "Iceland Krona", "currency_symbol": "₪"}}, "total": {"amount": 500878, "amount_formatted": "", "currency": "Pakistan Rupee", "currency_symbol": "$"}}}}], "total_count": 699308} + application/json: {"data": [{"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "upcoming", "credit": {"amount": {"amount": 115692, "amount_formatted": "", "currency": "Denar", "currency_symbol": "K"}, "cycle_remaining_percent": 5890.09}, "credits": {"proration": {"amount": {"amount": 760063, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "cycle_days_remaining": 754794, "cycle_days_total": 119895, "cycle_remaining_percent": 1156.92}, "payer": {"remaining_balance": {"amount": 989424, "amount_formatted": "", "currency": "Kwacha", "currency_symbol": "L"}, "applied_amount": {"amount": 349721, "amount_formatted": "", "currency": "Iceland Krona", "currency_symbol": "₪"}}, "total": {"amount": 500878, "amount_formatted": "", "currency": "Pakistan Rupee", "currency_symbol": "$"}}, "plan_id": "", "price_id": "", "plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 349721, "amount_formatted": "", "currency": "Iceland Krona", "currency_symbol": "₪"}, "annual_monthly_fee": {"amount": 500878, "amount_formatted": "", "currency": "Pakistan Rupee", "currency_symbol": "$"}, "annual_fee": {"amount": 13059, "amount_formatted": "", "currency": "Uzbekistan Sum", "currency_symbol": "$"}, "description": "tennis husband meanwhile duh uh-huh chap provided stained wry uncomfortable", "product_id": "", "is_default": false, "is_recurring": true, "publicly_visible": true, "has_base_fee": true, "for_payer_type": "", "slug": "", "avatar_url": "https://monthly-lace.org", "features": [], "free_trial_enabled": true, "free_trial_days": 520556, "unit_prices": [{"name": "", "block_size": 13059, "tiers": [{"starts_at_block": 339643, "ends_after_block": 790012, "fee_per_block": {"amount": 676339, "amount_formatted": "", "currency": "Sudanese Pound", "currency_symbol": "£"}}]}]}, "plan_period": "month", "payment_method": {"object": "commerce_payment_method", "id": "", "payer_id": "", "payment_type": "link", "is_default": false, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": "", "last4": "", "status": "disconnected", "wallet_type": "", "card_type": "", "expiry_year": 542201, "expiry_month": 589009, "created_at": 348814, "updated_at": 349721, "is_removable": true}, "lifetime_paid": {"amount": 42923, "amount_formatted": "", "currency": "Swiss Franc", "currency_symbol": "лв"}, "next_payment": null, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Mathew", "last_name": "McLaughlin", "email": "Zetta_Wilderman39@gmail.com", "organization_id": "", "organization_name": "", "image_url": "https://queasy-charlatan.net/", "credits_balance": {"amount": 724310, "amount_formatted": "", "currency": "Uganda Shilling", "currency_symbol": "$"}, "created_at": 905937, "updated_at": 777337}, "is_free_trial": false, "period_start": 543438, "period_end": 271235, "proration_date": "", "canceled_at": 232920, "past_due_at": null, "ended_at": 743580, "created_at": 762052, "updated_at": 856930, "seats": {"quantity": 562691, "tiers": [{"quantity": 887702, "fee_per_block": {"amount": 760063, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "total": {"amount": 754794, "amount_formatted": "", "currency": "Boliviano boliviano", "currency_symbol": "$"}}]}, "totals": {"subtotal": {"amount": 242637, "amount_formatted": "", "currency": "Solomon Islands Dollar", "currency_symbol": "﷼"}, "base_fee": {"amount": 380056, "amount_formatted": "", "currency": "Peso Uruguayo", "currency_symbol": "S"}, "tax_total": {"amount": 91855, "amount_formatted": "", "currency": "Riel", "currency_symbol": "Lek"}, "grand_total": {"amount": 82013, "amount_formatted": "", "currency": "Czech Koruna", "currency_symbol": "$"}, "per_unit_totals": [{"name": "", "block_size": 422219, "tiers": []}], "credits": {"proration": {"amount": {"amount": 760063, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "cycle_days_remaining": 71270, "cycle_days_total": 126213, "cycle_remaining_percent": 1879.2}, "payer": {"remaining_balance": {"amount": 989424, "amount_formatted": "", "currency": "Kwacha", "currency_symbol": "L"}, "applied_amount": {"amount": 349721, "amount_formatted": "", "currency": "Iceland Krona", "currency_symbol": "₪"}}, "total": {"amount": 500878, "amount_formatted": "", "currency": "Pakistan Rupee", "currency_symbol": "$"}}, "discounts": {"proration": {"amount": {"amount": 760063, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "cycle_days_passed": 754794, "cycle_days_total": 119895, "cycle_passed_percent": 1156.92}, "total": {"amount": 542201, "amount_formatted": "", "currency": "Zambian Kwacha", "currency_symbol": "L"}}}}], "total_count": 699308} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "500": @@ -7052,7 +7320,7 @@ examples: user_id: "" responses: "200": - application/json: {"object": "commerce_subscription", "id": "", "instance_id": "", "status": "past_due", "payer_id": "", "created_at": 81691, "updated_at": 772691, "active_at": 439978, "past_due_at": 297026, "subscription_items": [], "next_payment": {"date": 833905, "amount": {"amount": 127570, "amount_formatted": "", "currency": "Tanzanian Shilling", "currency_symbol": "Q"}}, "eligible_for_free_trial": false} + application/json: {"object": "commerce_subscription", "id": "", "instance_id": "", "status": "past_due", "payer_id": "", "created_at": 81691, "updated_at": 772691, "active_at": 439978, "past_due_at": 297026, "subscription_items": [], "next_payment": {"date": 833905, "amount": {"amount": 127570, "amount_formatted": "", "currency": "Tanzanian Shilling", "currency_symbol": "Q"}, "per_unit_totals": [{"name": "", "block_size": 206682, "tiers": []}], "totals": {"subtotal": {"amount": 543079, "amount_formatted": "", "currency": "Som", "currency_symbol": "B/."}, "base_fee": {"amount": 297026, "amount_formatted": "", "currency": "Colombian Peso", "currency_symbol": "$"}, "tax_total": {"amount": 833905, "amount_formatted": "", "currency": "Brazilian Real", "currency_symbol": "Q"}, "grand_total": {"amount": 633199, "amount_formatted": "", "currency": "Mauritius Rupee", "currency_symbol": "$"}, "per_unit_totals": [{"name": "", "block_size": 206682, "tiers": []}], "credits": {"proration": {"amount": {"amount": 127570, "amount_formatted": "", "currency": "Tanzanian Shilling", "currency_symbol": "Q"}, "cycle_days_remaining": 287873, "cycle_days_total": 215260, "cycle_remaining_percent": 3675.98}, "payer": null, "total": {"amount": 188400, "amount_formatted": "", "currency": "Singapore Dollar", "currency_symbol": "C$"}}, "discounts": {"proration": {"amount": {"amount": 127570, "amount_formatted": "", "currency": "Tanzanian Shilling", "currency_symbol": "Q"}, "cycle_days_passed": 205093, "cycle_days_total": 44739, "cycle_passed_percent": 8614.7}, "total": {"amount": 188400, "amount_formatted": "", "currency": "Singapore Dollar", "currency_symbol": "C$"}}}}, "eligible_for_free_trial": false} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "500": @@ -7064,7 +7332,7 @@ examples: organization_id: "" responses: "200": - application/json: {"object": "commerce_subscription", "id": "", "instance_id": "", "status": "abandoned", "payer_id": "", "created_at": 867059, "updated_at": 35040, "active_at": 916886, "past_due_at": 317090, "subscription_items": [{"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "past_due", "credit": {"amount": {"amount": 24678, "amount_formatted": "", "currency": "Balboa", "currency_symbol": "ман"}, "cycle_remaining_percent": 8943.6}, "credits": {"proration": {"amount": {"amount": 35040, "amount_formatted": "", "currency": "Jamaican Dollar", "currency_symbol": "₫"}, "cycle_days_remaining": 644506, "cycle_days_total": 317090, "cycle_remaining_percent": 7770.48}, "payer": {"remaining_balance": {"amount": 865397, "amount_formatted": "", "currency": "Dalasi", "currency_symbol": "B/."}, "applied_amount": {"amount": 58513, "amount_formatted": "", "currency": "US Dollar", "currency_symbol": "kr"}}, "total": {"amount": 226768, "amount_formatted": "", "currency": "Som", "currency_symbol": "BZ$"}}, "plan_id": "", "price_id": "", "plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 628116, "amount_formatted": "", "currency": "Djibouti Franc", "currency_symbol": "лв"}, "annual_monthly_fee": {"amount": 152879, "amount_formatted": "", "currency": "Bhutanese Ngultrum", "currency_symbol": "₫"}, "annual_fee": {"amount": 475807, "amount_formatted": "", "currency": "Kip", "currency_symbol": "BZ$"}, "description": "whoever geez whoever sparse tabletop versus", "product_id": "", "is_default": false, "is_recurring": false, "publicly_visible": true, "has_base_fee": true, "for_payer_type": "", "slug": "", "avatar_url": "https://sour-trick.com", "features": [], "free_trial_enabled": false, "free_trial_days": 780011, "unit_prices": [{"name": "", "block_size": 377624, "tiers": [{"starts_at_block": 916671, "ends_after_block": 491606, "fee_per_block": {"amount": 312838, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Bs"}}]}]}, "plan_period": "annual", "payment_method": {"object": "commerce_payment_method", "id": "", "payer_id": "", "payment_type": "link", "is_default": false, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": null, "last4": "", "status": "disconnected", "wallet_type": "", "card_type": "", "expiry_year": 360368, "expiry_month": 313834, "created_at": 24678, "updated_at": 651973, "is_removable": true}, "lifetime_paid": {"amount": 770015, "amount_formatted": "", "currency": "Mauritius Rupee", "currency_symbol": "ƒ"}, "next_payment": {"amount": null, "date": 312699}, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Tabitha", "last_name": "Welch", "email": "Maxie.Cremin95@yahoo.com", "organization_id": "", "organization_name": "", "image_url": "https://shameful-newsstand.name/", "credits_balance": {"amount": 721500, "amount_formatted": "", "currency": "New Taiwan Dollar", "currency_symbol": "J$"}, "created_at": 787220, "updated_at": 724781}, "is_free_trial": true, "period_start": 856116, "period_end": 857283, "proration_date": "", "canceled_at": 151137, "past_due_at": 503945, "ended_at": 94519, "created_at": 484361, "updated_at": 191350, "seats": {"quantity": 541570, "tiers": [{"quantity": 867059, "fee_per_block": {"amount": 35040, "amount_formatted": "", "currency": "Jamaican Dollar", "currency_symbol": "₫"}, "total": {"amount": 644506, "amount_formatted": "", "currency": "Dalasi", "currency_symbol": "Ft"}}]}, "totals": {"subtotal": {"amount": 457517, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Q"}, "base_fee": {"amount": 111328, "amount_formatted": "", "currency": "Lek", "currency_symbol": "TT$"}, "tax_total": {"amount": 922221, "amount_formatted": "", "currency": "CFP Franc", "currency_symbol": "₩"}, "grand_total": {"amount": 272043, "amount_formatted": "", "currency": "Vatu", "currency_symbol": "kr"}, "per_unit_totals": [{"name": "", "block_size": 62572, "tiers": [{"quantity": 10191, "fee_per_block": {"amount": 312838, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Bs"}, "total": {"amount": 226768, "amount_formatted": "", "currency": "Som", "currency_symbol": "BZ$"}}]}], "credits": null}}], "next_payment": {"date": 223172, "amount": {"amount": 35040, "amount_formatted": "", "currency": "Jamaican Dollar", "currency_symbol": "₫"}}, "eligible_for_free_trial": false} + application/json: {"object": "commerce_subscription", "id": "", "instance_id": "", "status": "abandoned", "payer_id": "", "created_at": 867059, "updated_at": 35040, "active_at": 916886, "past_due_at": 317090, "subscription_items": [{"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "past_due", "credit": {"amount": {"amount": 24678, "amount_formatted": "", "currency": "Balboa", "currency_symbol": "ман"}, "cycle_remaining_percent": 8943.6}, "credits": {"proration": {"amount": {"amount": 35040, "amount_formatted": "", "currency": "Jamaican Dollar", "currency_symbol": "₫"}, "cycle_days_remaining": 644506, "cycle_days_total": 317090, "cycle_remaining_percent": 7770.48}, "payer": {"remaining_balance": {"amount": 865397, "amount_formatted": "", "currency": "Dalasi", "currency_symbol": "B/."}, "applied_amount": {"amount": 58513, "amount_formatted": "", "currency": "US Dollar", "currency_symbol": "kr"}}, "total": {"amount": 226768, "amount_formatted": "", "currency": "Som", "currency_symbol": "BZ$"}}, "plan_id": "", "price_id": "", "plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 628116, "amount_formatted": "", "currency": "Djibouti Franc", "currency_symbol": "лв"}, "annual_monthly_fee": {"amount": 152879, "amount_formatted": "", "currency": "Bhutanese Ngultrum", "currency_symbol": "₫"}, "annual_fee": {"amount": 475807, "amount_formatted": "", "currency": "Kip", "currency_symbol": "BZ$"}, "description": "whoever geez whoever sparse tabletop versus", "product_id": "", "is_default": false, "is_recurring": false, "publicly_visible": true, "has_base_fee": true, "for_payer_type": "", "slug": "", "avatar_url": "https://sour-trick.com", "features": [], "free_trial_enabled": false, "free_trial_days": 780011, "unit_prices": [{"name": "", "block_size": 377624, "tiers": [{"starts_at_block": 916671, "ends_after_block": 491606, "fee_per_block": {"amount": 312838, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Bs"}}]}]}, "plan_period": "annual", "payment_method": {"object": "commerce_payment_method", "id": "", "payer_id": "", "payment_type": "link", "is_default": false, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": null, "last4": "", "status": "disconnected", "wallet_type": "", "card_type": "", "expiry_year": 360368, "expiry_month": 313834, "created_at": 24678, "updated_at": 651973, "is_removable": true}, "lifetime_paid": {"amount": 770015, "amount_formatted": "", "currency": "Mauritius Rupee", "currency_symbol": "ƒ"}, "next_payment": {"amount": null, "date": 312699, "per_unit_totals": [{"name": "", "block_size": 721500, "tiers": [{"quantity": null, "fee_per_block": {"amount": 413521, "amount_formatted": "", "currency": "Dong", "currency_symbol": "﷼"}, "total": {"amount": 317090, "amount_formatted": "", "currency": "Leone", "currency_symbol": "Ft"}}]}], "totals": {"subtotal": {"amount": 313834, "amount_formatted": "", "currency": "Armenian Dram", "currency_symbol": "B/."}, "base_fee": {"amount": 58513, "amount_formatted": "", "currency": "US Dollar", "currency_symbol": "kr"}, "tax_total": {"amount": 226768, "amount_formatted": "", "currency": "Som", "currency_symbol": "BZ$"}, "grand_total": {"amount": 377624, "amount_formatted": "", "currency": "Rwanda Franc", "currency_symbol": "₫"}, "per_unit_totals": [{"name": "", "block_size": 721500, "tiers": [{"quantity": null, "fee_per_block": {"amount": 413521, "amount_formatted": "", "currency": "Dong", "currency_symbol": "﷼"}, "total": {"amount": 317090, "amount_formatted": "", "currency": "Leone", "currency_symbol": "Ft"}}]}], "credits": {"proration": {"amount": {"amount": 312838, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Bs"}, "cycle_days_remaining": 786037, "cycle_days_total": 369917, "cycle_remaining_percent": 5415.7}, "payer": {"remaining_balance": {"amount": 457517, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Q"}, "applied_amount": {"amount": 111328, "amount_formatted": "", "currency": "Lek", "currency_symbol": "TT$"}}, "total": {"amount": 317090, "amount_formatted": "", "currency": "Leone", "currency_symbol": "Ft"}}, "discounts": {"proration": {"amount": {"amount": 312838, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Bs"}, "cycle_days_passed": 394497, "cycle_days_total": 466821, "cycle_passed_percent": 2720.43}, "total": {"amount": 317090, "amount_formatted": "", "currency": "Leone", "currency_symbol": "Ft"}}}}, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Tabitha", "last_name": "Welch", "email": "Maxie.Cremin95@yahoo.com", "organization_id": "", "organization_name": "", "image_url": "https://shameful-newsstand.name/", "credits_balance": {"amount": 721500, "amount_formatted": "", "currency": "New Taiwan Dollar", "currency_symbol": "J$"}, "created_at": 787220, "updated_at": 724781}, "is_free_trial": true, "period_start": 856116, "period_end": 857283, "proration_date": "", "canceled_at": 151137, "past_due_at": 503945, "ended_at": 94519, "created_at": 484361, "updated_at": 191350, "seats": {"quantity": 541570, "tiers": [{"quantity": 867059, "fee_per_block": {"amount": 35040, "amount_formatted": "", "currency": "Jamaican Dollar", "currency_symbol": "₫"}, "total": {"amount": 644506, "amount_formatted": "", "currency": "Dalasi", "currency_symbol": "Ft"}}]}, "totals": {"subtotal": {"amount": 457517, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Q"}, "base_fee": {"amount": 111328, "amount_formatted": "", "currency": "Lek", "currency_symbol": "TT$"}, "tax_total": {"amount": 922221, "amount_formatted": "", "currency": "CFP Franc", "currency_symbol": "₩"}, "grand_total": {"amount": 272043, "amount_formatted": "", "currency": "Vatu", "currency_symbol": "kr"}, "per_unit_totals": [{"name": "", "block_size": 62572, "tiers": [{"quantity": 10191, "fee_per_block": {"amount": 312838, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Bs"}, "total": {"amount": 226768, "amount_formatted": "", "currency": "Som", "currency_symbol": "BZ$"}}]}], "credits": null, "discounts": {"proration": {"amount": {"amount": 312838, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Bs"}, "cycle_days_passed": 227327, "cycle_days_total": 62572, "cycle_passed_percent": 6182.24}, "total": {"amount": 317090, "amount_formatted": "", "currency": "Leone", "currency_symbol": "Ft"}}}}], "next_payment": {"date": 223172, "amount": {"amount": 312838, "amount_formatted": "", "currency": "Belize Dollar", "currency_symbol": "Bs"}, "per_unit_totals": [{"name": "", "block_size": 892341, "tiers": []}], "totals": null}, "eligible_for_free_trial": false} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "500": @@ -7100,7 +7368,7 @@ examples: end_now: false responses: "200": - application/json: {"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "abandoned", "credit": {"amount": {"amount": 595314, "amount_formatted": "", "currency": "Balboa", "currency_symbol": "C$"}, "cycle_remaining_percent": 4623.13}, "credits": {"proration": {"amount": {"amount": 106392, "amount_formatted": "", "currency": "Mexican Peso", "currency_symbol": "B/."}, "cycle_days_remaining": 662779, "cycle_days_total": 621775, "cycle_remaining_percent": 4623.13}, "payer": null, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}, "plan_id": "", "price_id": "", "plan": null, "plan_period": "annual", "payment_method": {"object": "commerce_payment_method", "id": "", "payer_id": "", "payment_type": "link", "is_default": false, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": "", "last4": "", "status": "disconnected", "wallet_type": "", "card_type": "", "expiry_year": 16342, "expiry_month": 842294, "created_at": 526434, "updated_at": 344897, "is_removable": false}, "lifetime_paid": {"amount": 333252, "amount_formatted": "", "currency": "New Israeli Sheqel", "currency_symbol": "₨"}, "next_payment": {"amount": {"amount": 967195, "amount_formatted": "", "currency": "Lilangeni", "currency_symbol": "kr"}, "date": 191144}, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Valentina", "last_name": null, "email": "Vickie.Wolf@gmail.com", "organization_id": "", "organization_name": "", "image_url": "https://bad-grandpa.name/", "credits_balance": {"amount": 963236, "amount_formatted": "", "currency": "US Dollar", "currency_symbol": "$"}, "created_at": 163690, "updated_at": 892368}, "is_free_trial": true, "period_start": 307393, "period_end": 617624, "proration_date": "", "canceled_at": 479144, "past_due_at": 889815, "ended_at": 879881, "created_at": 858429, "updated_at": 224059, "seats": {"quantity": 638223, "tiers": [{"quantity": 893374, "fee_per_block": {"amount": 106392, "amount_formatted": "", "currency": "Mexican Peso", "currency_symbol": "B/."}, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}]}, "totals": {"subtotal": {"amount": 99889, "amount_formatted": "", "currency": "Uganda Shilling", "currency_symbol": "¥"}, "base_fee": {"amount": 960093, "amount_formatted": "", "currency": "Solomon Islands Dollar", "currency_symbol": "$"}, "tax_total": {"amount": 370856, "amount_formatted": "", "currency": "Nepalese Rupee", "currency_symbol": "₩"}, "grand_total": {"amount": 200777, "amount_formatted": "", "currency": "Aruban Guilder", "currency_symbol": "$"}, "per_unit_totals": [{"name": "", "block_size": 417629, "tiers": []}], "credits": {"proration": {"amount": {"amount": 106392, "amount_formatted": "", "currency": "Mexican Peso", "currency_symbol": "B/."}, "cycle_days_remaining": 438584, "cycle_days_total": 415615, "cycle_remaining_percent": 9671.95}, "payer": {"remaining_balance": {"amount": 624208, "amount_formatted": "", "currency": "Leone", "currency_symbol": "$"}, "applied_amount": {"amount": 81467, "amount_formatted": "", "currency": "Colombian Peso", "currency_symbol": "lei"}}, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}}} + application/json: {"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "abandoned", "credit": {"amount": {"amount": 595314, "amount_formatted": "", "currency": "Balboa", "currency_symbol": "C$"}, "cycle_remaining_percent": 4623.13}, "credits": {"proration": {"amount": {"amount": 106392, "amount_formatted": "", "currency": "Mexican Peso", "currency_symbol": "B/."}, "cycle_days_remaining": 662779, "cycle_days_total": 621775, "cycle_remaining_percent": 4623.13}, "payer": null, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}, "plan_id": "", "price_id": "", "plan": null, "plan_period": "annual", "payment_method": {"object": "commerce_payment_method", "id": "", "payer_id": "", "payment_type": "link", "is_default": false, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": "", "last4": "", "status": "disconnected", "wallet_type": "", "card_type": "", "expiry_year": 16342, "expiry_month": 842294, "created_at": 526434, "updated_at": 344897, "is_removable": false}, "lifetime_paid": {"amount": 333252, "amount_formatted": "", "currency": "New Israeli Sheqel", "currency_symbol": "₨"}, "next_payment": {"amount": {"amount": 967195, "amount_formatted": "", "currency": "Lilangeni", "currency_symbol": "kr"}, "date": 191144, "per_unit_totals": [{"name": "", "block_size": 963236, "tiers": [{"quantity": 595314, "fee_per_block": {"amount": 649477, "amount_formatted": "", "currency": "Kina", "currency_symbol": "C$"}, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}]}], "totals": {"subtotal": {"amount": 16342, "amount_formatted": "", "currency": "Liberian Dollar", "currency_symbol": "L"}, "base_fee": {"amount": 592877, "amount_formatted": "", "currency": "Pa'anga", "currency_symbol": "$"}, "tax_total": {"amount": 950248, "amount_formatted": "", "currency": "Burundi Franc", "currency_symbol": "¥"}, "grand_total": {"amount": 960093, "amount_formatted": "", "currency": "Solomon Islands Dollar", "currency_symbol": "$"}, "per_unit_totals": [{"name": "", "block_size": 963236, "tiers": [{"quantity": 595314, "fee_per_block": {"amount": 649477, "amount_formatted": "", "currency": "Kina", "currency_symbol": "C$"}, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}]}], "credits": {"proration": {"amount": {"amount": 106392, "amount_formatted": "", "currency": "Mexican Peso", "currency_symbol": "B/."}, "cycle_days_remaining": 569444, "cycle_days_total": 463342, "cycle_remaining_percent": 2007.77}, "payer": null, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}, "discounts": {"proration": {"amount": {"amount": 106392, "amount_formatted": "", "currency": "Mexican Peso", "currency_symbol": "B/."}, "cycle_days_passed": 163690, "cycle_days_total": 892368, "cycle_passed_percent": 4176.29}, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}}}, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Valentina", "last_name": null, "email": "Vickie.Wolf@gmail.com", "organization_id": "", "organization_name": "", "image_url": "https://bad-grandpa.name/", "credits_balance": {"amount": 963236, "amount_formatted": "", "currency": "US Dollar", "currency_symbol": "$"}, "created_at": 163690, "updated_at": 892368}, "is_free_trial": true, "period_start": 307393, "period_end": 617624, "proration_date": "", "canceled_at": 479144, "past_due_at": 889815, "ended_at": 879881, "created_at": 858429, "updated_at": 224059, "seats": {"quantity": 638223, "tiers": [{"quantity": 893374, "fee_per_block": {"amount": 106392, "amount_formatted": "", "currency": "Mexican Peso", "currency_symbol": "B/."}, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}]}, "totals": {"subtotal": {"amount": 16342, "amount_formatted": "", "currency": "Liberian Dollar", "currency_symbol": "L"}, "base_fee": {"amount": 592877, "amount_formatted": "", "currency": "Pa'anga", "currency_symbol": "$"}, "tax_total": {"amount": 950248, "amount_formatted": "", "currency": "Burundi Franc", "currency_symbol": "¥"}, "grand_total": {"amount": 960093, "amount_formatted": "", "currency": "Solomon Islands Dollar", "currency_symbol": "$"}, "per_unit_totals": [{"name": "", "block_size": 417629, "tiers": []}], "credits": {"proration": {"amount": {"amount": 106392, "amount_formatted": "", "currency": "Mexican Peso", "currency_symbol": "B/."}, "cycle_days_remaining": 438584, "cycle_days_total": 415615, "cycle_remaining_percent": 9671.95}, "payer": {"remaining_balance": {"amount": 624208, "amount_formatted": "", "currency": "Leone", "currency_symbol": "$"}, "applied_amount": {"amount": 81467, "amount_formatted": "", "currency": "Colombian Peso", "currency_symbol": "lei"}}, "total": {"amount": 512558, "amount_formatted": "", "currency": "Tunisian Dinar", "currency_symbol": "L"}}, "discounts": null}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "500": @@ -7150,7 +7418,7 @@ examples: application/json: {"extend_to": "2026-01-08T00:00:00Z"} responses: "200": - application/json: {"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "abandoned", "credit": {"amount": {"amount": 238229, "amount_formatted": "", "currency": "Bermudian Dollar (customarily known as Bermuda Dollar)", "currency_symbol": "Php"}, "cycle_remaining_percent": 3422.31}, "plan_id": "", "price_id": "", "plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 396106, "amount_formatted": "", "currency": "Dominican Peso", "currency_symbol": "zł"}, "annual_monthly_fee": {"amount": 514259, "amount_formatted": "", "currency": "Swiss Franc", "currency_symbol": "ман"}, "annual_fee": {"amount": 280866, "amount_formatted": "", "currency": "North Korean Won", "currency_symbol": "₨"}, "amount": 694464, "amount_formatted": "", "annual_monthly_amount": 44402, "annual_monthly_amount_formatted": "", "annual_amount": 447978, "annual_amount_formatted": "", "currency_symbol": "$U", "currency": "Serbian Dinar", "description": "premise because yippee", "product_id": "", "is_default": false, "is_recurring": false, "publicly_visible": false, "has_base_fee": true, "payer_type": ["", "", ""], "for_payer_type": "", "slug": "", "avatar_url": "https://imaginary-perp.name", "period": "", "interval": 708600, "features": [], "free_trial_enabled": true, "free_trial_days": 99902}, "plan_period": "annual", "payment_source_id": "", "payment_source": {"object": "commerce_source", "id": "", "payer_id": "", "payment_method": "card", "is_default": false, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": "", "last4": "", "status": "active", "wallet_type": "", "card_type": "", "expiry_year": 631366, "expiry_month": 537761, "created_at": 223728, "updated_at": 706378, "is_removable": true}, "lifetime_paid": {"amount": 125424, "amount_formatted": "", "currency": "Leone", "currency_symbol": "RD$"}, "amount": {"amount": 260960, "amount_formatted": "", "currency": "Lebanese Pound", "currency_symbol": "₦"}, "next_invoice": {"amount": {"amount": 716553, "amount_formatted": "", "currency": "Denar", "currency_symbol": "€"}, "date": 690708}, "next_payment": {"amount": {"amount": 194234, "amount_formatted": "", "currency": "Vatu", "currency_symbol": "$"}, "date": 243347}, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Laverna", "last_name": "Dach", "email": "Gladys_Swift@yahoo.com", "organization_id": "", "organization_name": "", "image_url": "https://stingy-kinase.info", "credits_balance": {"amount": 996919, "amount_formatted": "", "currency": "North Korean Won", "currency_symbol": "RD$"}, "created_at": 684263, "updated_at": 198448}, "is_free_trial": true, "period_start": 216512, "period_end": 423234, "proration_date": "", "canceled_at": 316150, "past_due_at": 738084, "ended_at": 611712, "created_at": 74592, "updated_at": 571351} + application/json: {"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "abandoned", "credit": {"amount": {"amount": 238229, "amount_formatted": "", "currency": "Bermudian Dollar (customarily known as Bermuda Dollar)", "currency_symbol": "Php"}, "cycle_remaining_percent": 3422.31}, "plan_id": "", "price_id": "", "plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 396106, "amount_formatted": "", "currency": "Dominican Peso", "currency_symbol": "zł"}, "annual_monthly_fee": {"amount": 514259, "amount_formatted": "", "currency": "Swiss Franc", "currency_symbol": "ман"}, "annual_fee": {"amount": 280866, "amount_formatted": "", "currency": "North Korean Won", "currency_symbol": "₨"}, "amount": 694464, "amount_formatted": "", "annual_monthly_amount": 44402, "annual_monthly_amount_formatted": "", "annual_amount": 447978, "annual_amount_formatted": "", "currency_symbol": "$U", "currency": "Serbian Dinar", "description": "premise because yippee", "product_id": "", "is_default": false, "is_recurring": false, "publicly_visible": false, "has_base_fee": true, "payer_type": ["", "", ""], "for_payer_type": "", "slug": "", "avatar_url": "https://imaginary-perp.name", "period": "", "interval": 708600, "features": [], "free_trial_enabled": true, "free_trial_days": 99902}, "plan_period": "annual", "payment_source_id": "", "payment_source": {"object": "commerce_source", "id": "", "payer_id": "", "payment_method": "card", "is_default": false, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": "", "last4": "", "status": "active", "wallet_type": "", "card_type": "", "expiry_year": 631366, "expiry_month": 537761, "created_at": 223728, "updated_at": 706378, "is_removable": true}, "lifetime_paid": {"amount": 125424, "amount_formatted": "", "currency": "Leone", "currency_symbol": "RD$"}, "amount": {"amount": 260960, "amount_formatted": "", "currency": "Lebanese Pound", "currency_symbol": "₦"}, "next_invoice": {"amount": {"amount": 716553, "amount_formatted": "", "currency": "Denar", "currency_symbol": "€"}, "date": 690708, "per_unit_totals": [{"name": "", "block_size": 996919, "tiers": []}], "totals": {"subtotal": {"amount": 238229, "amount_formatted": "", "currency": "Bermudian Dollar (customarily known as Bermuda Dollar)", "currency_symbol": "Php"}, "base_fee": {"amount": 342231, "amount_formatted": "", "currency": "Uganda Shilling", "currency_symbol": "﷼"}, "tax_total": {"amount": 233805, "amount_formatted": "", "currency": "Zloty", "currency_symbol": "CHF"}, "grand_total": {"amount": 531322, "amount_formatted": "", "currency": "Azerbaijanian Manat", "currency_symbol": "£"}, "per_unit_totals": [{"name": "", "block_size": 996919, "tiers": []}], "credits": {"proration": {"amount": {"amount": 575316, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "cycle_days_remaining": 447978, "cycle_days_total": 900610, "cycle_remaining_percent": 7131.02}, "payer": null, "total": {"amount": 510248, "amount_formatted": "", "currency": "Lek", "currency_symbol": "B/."}}, "discounts": {"proration": {"amount": {"amount": 575316, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "cycle_days_passed": 277893, "cycle_days_total": 701637, "cycle_passed_percent": 152.55}, "total": {"amount": 510248, "amount_formatted": "", "currency": "Lek", "currency_symbol": "B/."}}}}, "next_payment": {"amount": {"amount": 194234, "amount_formatted": "", "currency": "Vatu", "currency_symbol": "$"}, "date": 243347, "per_unit_totals": [{"name": "", "block_size": 996919, "tiers": []}], "totals": {"subtotal": {"amount": 238229, "amount_formatted": "", "currency": "Bermudian Dollar (customarily known as Bermuda Dollar)", "currency_symbol": "Php"}, "base_fee": {"amount": 342231, "amount_formatted": "", "currency": "Uganda Shilling", "currency_symbol": "﷼"}, "tax_total": {"amount": 233805, "amount_formatted": "", "currency": "Zloty", "currency_symbol": "CHF"}, "grand_total": {"amount": 531322, "amount_formatted": "", "currency": "Azerbaijanian Manat", "currency_symbol": "£"}, "per_unit_totals": [{"name": "", "block_size": 996919, "tiers": []}], "credits": {"proration": {"amount": {"amount": 575316, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "cycle_days_remaining": 151519, "cycle_days_total": 811439, "cycle_remaining_percent": 970.25}, "payer": {"remaining_balance": {"amount": 454603, "amount_formatted": "", "currency": "Convertible Marks", "currency_symbol": "лв"}, "applied_amount": {"amount": 830545, "amount_formatted": "", "currency": "Leone", "currency_symbol": "Db"}}, "total": {"amount": 510248, "amount_formatted": "", "currency": "Lek", "currency_symbol": "B/."}}, "discounts": {"proration": {"amount": {"amount": 575316, "amount_formatted": "", "currency": "Guarani", "currency_symbol": "$"}, "cycle_days_passed": 360823, "cycle_days_total": 812050, "cycle_passed_percent": 8124.34}, "total": {"amount": 510248, "amount_formatted": "", "currency": "Lek", "currency_symbol": "B/."}}}}, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Laverna", "last_name": "Dach", "email": "Gladys_Swift@yahoo.com", "organization_id": "", "organization_name": "", "image_url": "https://stingy-kinase.info", "credits_balance": {"amount": 996919, "amount_formatted": "", "currency": "North Korean Won", "currency_symbol": "RD$"}, "created_at": 684263, "updated_at": 198448}, "is_free_trial": true, "period_start": 216512, "period_end": 423234, "proration_date": "", "canceled_at": 316150, "past_due_at": 738084, "ended_at": 611712, "created_at": 74592, "updated_at": 571351} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "500": @@ -7441,7 +7709,7 @@ examples: application/json: {"revoke_all_sessions": false} responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "nl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_saml", "status": "unverified", "strategy": "saml", "external_verification_redirect_url": "https://international-republican.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 937194, "attempts": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "expired", "strategy": "email_code", "attempts": 849046, "expire_at": 731894, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "unverified", "strategy": "web3_coinbase_wallet_signature", "nonce": "", "message": "", "attempts": 322502, "expire_at": 189149, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 879644, "expire_at": 428803, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 524831, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Estevan77@gmail.com", "email_address_verified": true, "first_name": "Weldon", "last_name": "Crona", "image_url": "https://messy-labourer.biz", "username": "Hailey70", "phone_number": "816.308.8998 x634", "public_metadata": {"key": ""}, "label": "", "created_at": 585351, "updated_at": 7034, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": null, "attempts": 533554, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 185269, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "unverified", "strategy": "ticket", "attempts": null, "expire_at": 851824, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Curt73@yahoo.com", "first_name": "Rocky", "last_name": "Leannon", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 974369, "expire_at": 944397, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://unlawful-carboxyl.name/", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 942812, "updated_at": 414300}, "last_authenticated_at": 821950}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://strange-sanity.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 794465, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 765692, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Aufderhar", "profile_image_url": "https://fluffy-cannon.org", "image_url": "https://insignificant-coordination.com", "has_image": false, "identifier": "", "username": "Harry.Dare", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": null, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "nl", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_saml", "status": "unverified", "strategy": "saml", "external_verification_redirect_url": "https://international-republican.name", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 937194, "attempts": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": true, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "expired", "strategy": "email_code", "attempts": 849046, "expire_at": 731894, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_web3", "status": "unverified", "strategy": "web3_coinbase_wallet_signature", "nonce": "", "message": "", "attempts": 322502, "expire_at": 189149, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": "", "attempts": 879644, "expire_at": 428803, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 524831, "external_accounts": [{"object": "external_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Estevan77@gmail.com", "email_address_verified": true, "first_name": "Weldon", "last_name": "Crona", "image_url": "https://messy-labourer.biz", "username": "Hailey70", "phone_number": "816.308.8998 x634", "public_metadata": {"key": ""}, "label": "", "created_at": 585351, "updated_at": 7034, "verification": {"object": "verification_google_one_tap", "status": "verified", "strategy": "google_one_tap", "expire_at": null, "attempts": 533554, "verified_at_client": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 185269, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "unverified", "strategy": "ticket", "attempts": null, "expire_at": 851824, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domain": "mycompany.com", "domains": ["", ""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "saml", "provider": "", "active": true, "email_address": "Curt73@yahoo.com", "first_name": "Rocky", "last_name": "Leannon", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 974369, "expire_at": 944397, "verified_at_client": ""}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://unlawful-carboxyl.name/", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": true, "created_at": 942812, "updated_at": 414300}, "last_authenticated_at": 821950}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://strange-sanity.name", "has_image": false, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 794465, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 765692, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": null, "last_name": "Aufderhar", "profile_image_url": "https://fluffy-cannon.org", "image_url": "https://insignificant-coordination.com", "has_image": false, "identifier": "", "username": "Harry.Dare", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": false, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": null, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UnsetUserPasswordCompromised: @@ -7451,7 +7719,7 @@ examples: user_id: "" responses: "200": - application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "fr", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_from_oauth", "status": "verified", "strategy": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 321346, "attempts": 766720, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 742457, "expire_at": 679575, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 534833, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": 167210, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 595629, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Cheyanne2@hotmail.com", "email_address_verified": true, "first_name": "Melyna", "last_name": "Brekke", "image_url": "https://pure-produce.net/", "username": "Pink.Lowe72", "phone_number": "(707) 284-8366 x078", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 642361, "updated_at": 369447, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://minty-retention.info/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 134967, "attempts": 451879, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 491547, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 298981, "expire_at": 242790, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Norene_Wunsch@hotmail.com", "first_name": "Malachi", "last_name": "Bergstrom", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_saml", "status": "expired", "strategy": "saml", "external_verification_redirect_url": "https://caring-siege.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 773041, "attempts": 938457, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://early-technologist.net", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 109175, "updated_at": 146161}, "last_authenticated_at": 616135}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://tattered-angle.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 355072, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 746219, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kenyon", "last_name": "Bogan", "profile_image_url": "https://faraway-papa.biz/", "image_url": "https://partial-pliers.com", "has_image": false, "identifier": "", "username": "Myah.Koepp", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 149396, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} + application/json: {"id": "user_id_123", "object": "user", "external_id": "external_user_id_123", "primary_email_address_id": "email_id_123", "primary_phone_number_id": "phone_id_123", "primary_web3_wallet_id": "wallet_id_123", "username": "john_doe", "first_name": "John", "last_name": "Doe", "locale": "fr", "image_url": "https://example.com/new-profile.jpg", "has_image": true, "public_metadata": {"role": "admin"}, "private_metadata": {"ssn": "123-45-6789"}, "unsafe_metadata": {"theme": "dark"}, "email_addresses": [{"id": "email_id_123", "object": "email_address", "email_address": "john.doe@example.com", "reserved": false, "verification": {"object": "verification_from_oauth", "status": "verified", "strategy": "", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 321346, "attempts": 766720, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1609459200, "updated_at": 1609459200}], "phone_numbers": [{"id": "phone_id_123", "object": "phone_number", "phone_number": "+12345678901", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_otp", "status": "verified", "strategy": "phone_code", "attempts": 742457, "expire_at": 679575, "channel": "", "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1609459200, "updated_at": 1609459200}], "web3_wallets": [{"id": "wallet_id_123", "object": "web3_wallet", "web3_wallet": "0x123456789abcdef", "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 534833, "expire_at": null, "verified_at_client": ""}, "created_at": 1609459200, "updated_at": 1609459200}], "passkeys": [{"id": "passkey_id_123", "object": "passkey", "name": "My Passkey", "last_used_at": 1615852800, "verification": {"object": "verification_passkey", "status": "verified", "strategy": "passkey", "nonce": "nonce", "message": null, "attempts": 167210, "expire_at": null, "verified_at_client": ""}}], "password_enabled": true, "two_factor_enabled": true, "totp_enabled": true, "backup_code_enabled": true, "mfa_enabled_at": 1615852800, "mfa_disabled_at": null, "password_last_updated_at": 595629, "external_accounts": [{"object": "google_account", "id": "ext_account_id_123", "provider": "Facebook", "identification_id": "", "provider_user_id": "", "approved_scopes": "", "email_address": "Cheyanne2@hotmail.com", "email_address_verified": true, "first_name": "Melyna", "last_name": "Brekke", "image_url": "https://pure-produce.net/", "username": "Pink.Lowe72", "phone_number": "(707) 284-8366 x078", "public_metadata": {"key": "", "key1": ""}, "label": null, "created_at": 642361, "updated_at": 369447, "verification": {"object": "verification_oauth", "status": "transferable", "strategy": "", "external_verification_redirect_url": "https://minty-retention.info/", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 134967, "attempts": 451879, "verified_at_client": ""}, "user_id": "user_id_at_provider"}], "saml_accounts": [{"id": "saml_account_id_123", "object": "saml_account", "provider": "SAML Provider", "active": true, "email_address": "user@example.com", "first_name": "John", "last_name": "Doe", "provider_user_id": "prov_user_id_123", "last_authenticated_at": 491547, "public_metadata": {"department": "IT"}, "verification": {"object": "verification_ticket", "status": "expired", "strategy": "ticket", "attempts": 298981, "expire_at": 242790, "verified_at_client": ""}, "saml_connection": {"id": "sc_1234567890", "name": "My Company SAML Config", "domains": [""], "active": true, "provider": "saml_custom", "sync_user_attributes": true, "allow_subdomains": false, "allow_idp_initiated": true, "disable_additional_identifications": true, "created_at": 1614768000, "updated_at": 1622540800}}], "enterprise_accounts": [{"id": "", "object": "enterprise_account", "protocol": "oauth", "provider": "", "active": true, "email_address": "Norene_Wunsch@hotmail.com", "first_name": "Malachi", "last_name": "Bergstrom", "provider_user_id": "", "enterprise_connection_id": "", "public_metadata": {"key": "", "key1": ""}, "verification": {"object": "verification_saml", "status": "expired", "strategy": "saml", "external_verification_redirect_url": "https://caring-siege.org", "error": {"message": "Error message", "long_message": "Longer error message with more details", "code": "error_code", "meta": {}}, "expire_at": 773041, "attempts": 938457, "verified_at_client": null}, "enterprise_connection": {"id": "", "protocol": "", "provider": "", "name": "", "logo_public_url": "https://early-technologist.net", "domains": ["", ""], "active": true, "sync_user_attributes": false, "allow_subdomains": false, "allow_idp_initiated": false, "disable_additional_identifications": false, "created_at": 109175, "updated_at": 146161}, "last_authenticated_at": 616135}], "organization_memberships": [{"id": "org_mem_123", "object": "organization_membership", "role": "member", "role_name": "", "permissions": ["read", "write"], "public_metadata": {}, "private_metadata": {}, "organization": {"object": "organization", "id": "org_123", "name": "Acme Corp", "slug": "acme-corp", "image_url": "https://tattered-angle.name/", "has_image": true, "members_count": 150, "missing_member_with_elevated_permissions": false, "pending_invitations_count": 355072, "max_allowed_memberships": 300, "admin_delete_enabled": true, "public_metadata": {"public_info": "Info visible to everyone"}, "private_metadata": {"internal_use_only": "Sensitive data"}, "created_by": "user_123456", "created_at": 1625078400, "updated_at": 1625164800, "last_active_at": 746219, "role_set_key": ""}, "public_user_data": {"user_id": "", "first_name": "Kenyon", "last_name": "Bogan", "profile_image_url": "https://faraway-papa.biz/", "image_url": "https://partial-pliers.com", "has_image": false, "identifier": "", "username": "Myah.Koepp", "banned": true}, "created_at": 1625078400, "updated_at": 1625164800}], "last_sign_in_at": 1622852400, "banned": false, "locked": false, "deprovisioned": true, "lockout_expires_in_seconds": null, "verification_attempts_remaining": 5, "updated_at": 1622852400, "created_at": 1609459200, "delete_self_enabled": true, "create_organization_enabled": true, "create_organizations_limit": 149396, "last_active_at": 1700690400000, "legal_accepted_at": 1700690400000, "bypass_client_trust": false, "scim": {"directory_id": "", "directory_enabled": false, "external_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetInstanceProtect: @@ -7495,10 +7763,10 @@ examples: CreateBillingPrice: speakeasy-default-create-billing-price: requestBody: - application/json: {"plan_id": "", "currency": "USD", "amount": 826545, "annual_monthly_amount": 565484, "description": "why whoa remarkable properly freely at creative following inspect woot"} + application/json: {"plan_id": "", "currency": "USD", "amount": 826545, "annual_monthly_amount": 565484, "description": "why whoa remarkable properly freely at creative following inspect woot", "supported_billing_periods": "both"} responses: "200": - application/json: {"object": "commerce_price", "id": "", "plan_id": "", "instance_id": "", "currency": "Kenyan Shilling", "currency_symbol": "Bs", "amount": 750680, "annual_monthly_amount": 982885, "fee": {"amount": 105361, "amount_formatted": "", "currency": "Jordanian Dinar", "currency_symbol": "$"}, "annual_monthly_fee": {"amount": 873065, "amount_formatted": "", "currency": "Qatari Rial", "currency_symbol": "лв"}, "description": "ah mousse an", "is_default": false, "created_at": 399221} + application/json: {"object": "commerce_price", "id": "", "plan_id": "", "instance_id": "", "currency": "Kenyan Shilling", "currency_symbol": "Bs", "amount": 750680, "annual_monthly_amount": 982885, "fee": {"amount": 105361, "amount_formatted": "", "currency": "Jordanian Dinar", "currency_symbol": "$"}, "annual_monthly_fee": {"amount": 873065, "amount_formatted": "", "currency": "Qatari Rial", "currency_symbol": "лв"}, "description": "ah mousse an", "is_default": false, "created_at": 399221, "supported_billing_periods": "annual"} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "500": @@ -7512,7 +7780,7 @@ examples: application/json: {"from_price_id": "", "to_price_id": ""} responses: "200": - application/json: {"object": "commerce_price_transition", "subscription_item": {"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "past_due", "credit": {"amount": {"amount": 510709, "amount_formatted": "", "currency": "Cayman Islands Dollar", "currency_symbol": "$"}, "cycle_remaining_percent": 2872.34}, "plan_id": "", "price_id": "", "plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 798728, "amount_formatted": "", "currency": "Egyptian Pound", "currency_symbol": "Nu"}, "annual_monthly_fee": {"amount": 290472, "amount_formatted": "", "currency": "Burundi Franc", "currency_symbol": "₨"}, "annual_fee": {"amount": 93690, "amount_formatted": "", "currency": "Cordoba Oro", "currency_symbol": "kr"}, "amount": 21711, "amount_formatted": "", "annual_monthly_amount": 759359, "annual_monthly_amount_formatted": "", "annual_amount": 288916, "annual_amount_formatted": "", "currency_symbol": "₨", "currency": "Tugrik", "description": "strictly if uncommon somber round on ferociously fraudster", "product_id": "", "is_default": true, "is_recurring": false, "publicly_visible": true, "has_base_fee": true, "payer_type": ["", ""], "for_payer_type": "", "slug": "", "avatar_url": "https://classic-cannon.biz/", "period": "", "interval": 536229, "features": [], "free_trial_enabled": true, "free_trial_days": 595614}, "plan_period": "month", "payment_source_id": "", "payment_source": {"object": "commerce_source", "id": "", "payer_id": "", "payment_method": "google_pay", "is_default": null, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": "", "last4": "", "status": "active", "wallet_type": "", "card_type": "", "expiry_year": 464942, "expiry_month": 125425, "created_at": 70243, "updated_at": 164594, "is_removable": false}, "lifetime_paid": {"amount": 441095, "amount_formatted": "", "currency": "Venezuelan bolívar", "currency_symbol": "CHF"}, "amount": {"amount": 689174, "amount_formatted": "", "currency": "Iranian Rial", "currency_symbol": "S"}, "next_invoice": {"amount": {"amount": 487368, "amount_formatted": "", "currency": "Boliviano boliviano", "currency_symbol": "zł"}, "date": 759284}, "next_payment": {"amount": {"amount": 978224, "amount_formatted": "", "currency": "Gourde", "currency_symbol": "£"}, "date": 473256}, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Ismael", "last_name": "Medhurst", "email": "Ova.Mraz67@hotmail.com", "organization_id": "", "organization_name": "", "image_url": "https://utter-fowl.biz/", "credits_balance": {"amount": 476886, "amount_formatted": "", "currency": "Quetzal", "currency_symbol": "₨"}, "created_at": 671201, "updated_at": 567156}, "is_free_trial": true, "period_start": 659204, "period_end": 575036, "proration_date": "", "canceled_at": 820502, "past_due_at": 293989, "ended_at": 189628, "created_at": 804154, "updated_at": 821030}, "transition": {"previous_plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 798728, "amount_formatted": "", "currency": "Egyptian Pound", "currency_symbol": "Nu"}, "annual_monthly_fee": {"amount": 290472, "amount_formatted": "", "currency": "Burundi Franc", "currency_symbol": "₨"}, "annual_fee": {"amount": 93690, "amount_formatted": "", "currency": "Cordoba Oro", "currency_symbol": "kr"}, "amount": 183032, "amount_formatted": "", "annual_monthly_amount": 162899, "annual_monthly_amount_formatted": "", "annual_amount": 855406, "annual_amount_formatted": "", "currency_symbol": "kr", "currency": "Zimbabwe Dollar", "description": "piglet carpool ha unaccountably rich carelessly meh voluntarily", "product_id": "", "is_default": false, "is_recurring": false, "publicly_visible": true, "has_base_fee": true, "payer_type": [""], "for_payer_type": "", "slug": "", "avatar_url": "https://torn-yin.net/", "period": "", "interval": 111904, "features": [{"object": "feature", "id": "", "name": "", "description": "qua progress times alongside pliers", "slug": "", "avatar_url": "https://frizzy-decongestant.com/"}], "free_trial_enabled": true, "free_trial_days": 448853}, "previous_price": {"object": "commerce_price", "id": "", "plan_id": "", "instance_id": "", "currency": "Ouguiya", "currency_symbol": "£", "amount": 186921, "annual_monthly_amount": 178047, "fee": {"amount": 798728, "amount_formatted": "", "currency": "Egyptian Pound", "currency_symbol": "Nu"}, "annual_monthly_fee": {"amount": 290472, "amount_formatted": "", "currency": "Burundi Franc", "currency_symbol": "₨"}, "description": "boldly yearly trouser", "is_default": true, "created_at": 750571}, "effective_at": 750041, "effective_mode": "immediate", "next_billing_date": 198923, "charged_immediately": true, "immediate_charge": {"amount": 70077, "amount_formatted": "", "currency": "CFP Franc", "currency_symbol": "TT$"}, "previous_subscription_item_status": "abandoned", "previous_subscription_item_id": ""}} + application/json: {"object": "commerce_price_transition", "subscription_item": {"object": "commerce_subscription_item", "id": "", "instance_id": "", "status": "past_due", "credit": {"amount": {"amount": 510709, "amount_formatted": "", "currency": "Cayman Islands Dollar", "currency_symbol": "$"}, "cycle_remaining_percent": 2872.34}, "plan_id": "", "price_id": "", "plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 798728, "amount_formatted": "", "currency": "Egyptian Pound", "currency_symbol": "Nu"}, "annual_monthly_fee": {"amount": 290472, "amount_formatted": "", "currency": "Burundi Franc", "currency_symbol": "₨"}, "annual_fee": {"amount": 93690, "amount_formatted": "", "currency": "Cordoba Oro", "currency_symbol": "kr"}, "amount": 21711, "amount_formatted": "", "annual_monthly_amount": 759359, "annual_monthly_amount_formatted": "", "annual_amount": 288916, "annual_amount_formatted": "", "currency_symbol": "₨", "currency": "Tugrik", "description": "strictly if uncommon somber round on ferociously fraudster", "product_id": "", "is_default": true, "is_recurring": false, "publicly_visible": true, "has_base_fee": true, "payer_type": ["", ""], "for_payer_type": "", "slug": "", "avatar_url": "https://classic-cannon.biz/", "period": "", "interval": 536229, "features": [], "free_trial_enabled": true, "free_trial_days": 595614}, "plan_period": "month", "payment_source_id": "", "payment_source": {"object": "commerce_source", "id": "", "payer_id": "", "payment_method": "google_pay", "is_default": null, "gateway": "", "gateway_external_id": "", "gateway_external_account_id": "", "last4": "", "status": "active", "wallet_type": "", "card_type": "", "expiry_year": 464942, "expiry_month": 125425, "created_at": 70243, "updated_at": 164594, "is_removable": false}, "lifetime_paid": {"amount": 441095, "amount_formatted": "", "currency": "Venezuelan bolívar", "currency_symbol": "CHF"}, "amount": {"amount": 689174, "amount_formatted": "", "currency": "Iranian Rial", "currency_symbol": "S"}, "next_invoice": {"amount": {"amount": 487368, "amount_formatted": "", "currency": "Boliviano boliviano", "currency_symbol": "zł"}, "date": 759284, "per_unit_totals": [{"name": "", "block_size": 476886, "tiers": []}], "totals": {"subtotal": {"amount": 510709, "amount_formatted": "", "currency": "Cayman Islands Dollar", "currency_symbol": "$"}, "base_fee": {"amount": 287234, "amount_formatted": "", "currency": "Somali Shilling", "currency_symbol": "Db"}, "tax_total": {"amount": 247593, "amount_formatted": "", "currency": "Bhutanese Ngultrum", "currency_symbol": "£"}, "grand_total": {"amount": 101991, "amount_formatted": "", "currency": "Nepalese Rupee", "currency_symbol": "C$"}, "per_unit_totals": [{"name": "", "block_size": 476886, "tiers": []}], "credits": {"proration": {"amount": {"amount": 21711, "amount_formatted": "", "currency": "Swedish Krona", "currency_symbol": "£"}, "cycle_days_remaining": 743016, "cycle_days_total": 557923, "cycle_remaining_percent": 7412.84}, "payer": {"remaining_balance": {"amount": 151806, "amount_formatted": "", "currency": "Baht", "currency_symbol": "£"}, "applied_amount": {"amount": 90635, "amount_formatted": "", "currency": "Leone", "currency_symbol": "$"}}, "total": {"amount": 752577, "amount_formatted": "", "currency": "Hong Kong Dollar", "currency_symbol": "₩"}}, "discounts": {"proration": {"amount": {"amount": 21711, "amount_formatted": "", "currency": "Swedish Krona", "currency_symbol": "£"}, "cycle_days_passed": 704064, "cycle_days_total": 934450, "cycle_passed_percent": 3323.66}, "total": {"amount": 752577, "amount_formatted": "", "currency": "Hong Kong Dollar", "currency_symbol": "₩"}}}}, "next_payment": {"amount": {"amount": 978224, "amount_formatted": "", "currency": "Gourde", "currency_symbol": "£"}, "date": 473256, "per_unit_totals": [{"name": "", "block_size": 476886, "tiers": []}], "totals": {"subtotal": {"amount": 510709, "amount_formatted": "", "currency": "Cayman Islands Dollar", "currency_symbol": "$"}, "base_fee": {"amount": 287234, "amount_formatted": "", "currency": "Somali Shilling", "currency_symbol": "Db"}, "tax_total": {"amount": 247593, "amount_formatted": "", "currency": "Bhutanese Ngultrum", "currency_symbol": "£"}, "grand_total": {"amount": 101991, "amount_formatted": "", "currency": "Nepalese Rupee", "currency_symbol": "C$"}, "per_unit_totals": [{"name": "", "block_size": 476886, "tiers": []}], "credits": {"proration": {"amount": {"amount": 21711, "amount_formatted": "", "currency": "Swedish Krona", "currency_symbol": "£"}, "cycle_days_remaining": 880363, "cycle_days_total": 927900, "cycle_remaining_percent": 3982.18}, "payer": {"remaining_balance": {"amount": 151806, "amount_formatted": "", "currency": "Baht", "currency_symbol": "£"}, "applied_amount": {"amount": 90635, "amount_formatted": "", "currency": "Leone", "currency_symbol": "$"}}, "total": {"amount": 752577, "amount_formatted": "", "currency": "Hong Kong Dollar", "currency_symbol": "₩"}}, "discounts": {"proration": {"amount": {"amount": 21711, "amount_formatted": "", "currency": "Swedish Krona", "currency_symbol": "£"}, "cycle_days_passed": 616396, "cycle_days_total": 770210, "cycle_passed_percent": 9983.04}, "total": {"amount": 752577, "amount_formatted": "", "currency": "Hong Kong Dollar", "currency_symbol": "₩"}}}}, "payer_id": "", "payer": {"object": "commerce_payer", "id": "", "instance_id": "", "user_id": "", "first_name": "Ismael", "last_name": "Medhurst", "email": "Ova.Mraz67@hotmail.com", "organization_id": "", "organization_name": "", "image_url": "https://utter-fowl.biz/", "credits_balance": {"amount": 476886, "amount_formatted": "", "currency": "Quetzal", "currency_symbol": "₨"}, "created_at": 671201, "updated_at": 567156}, "is_free_trial": true, "period_start": 659204, "period_end": 575036, "proration_date": "", "canceled_at": 820502, "past_due_at": 293989, "ended_at": 189628, "created_at": 804154, "updated_at": 821030}, "transition": {"previous_plan": {"object": "commerce_plan", "id": "", "name": "", "fee": {"amount": 798728, "amount_formatted": "", "currency": "Egyptian Pound", "currency_symbol": "Nu"}, "annual_monthly_fee": {"amount": 290472, "amount_formatted": "", "currency": "Burundi Franc", "currency_symbol": "₨"}, "annual_fee": {"amount": 93690, "amount_formatted": "", "currency": "Cordoba Oro", "currency_symbol": "kr"}, "amount": 183032, "amount_formatted": "", "annual_monthly_amount": 162899, "annual_monthly_amount_formatted": "", "annual_amount": 855406, "annual_amount_formatted": "", "currency_symbol": "kr", "currency": "Zimbabwe Dollar", "description": "piglet carpool ha unaccountably rich carelessly meh voluntarily", "product_id": "", "is_default": false, "is_recurring": false, "publicly_visible": true, "has_base_fee": true, "payer_type": [""], "for_payer_type": "", "slug": "", "avatar_url": "https://torn-yin.net/", "period": "", "interval": 111904, "features": [{"object": "feature", "id": "", "name": "", "description": "qua progress times alongside pliers", "slug": "", "avatar_url": "https://frizzy-decongestant.com/"}], "free_trial_enabled": true, "free_trial_days": 448853}, "previous_price": {"object": "commerce_price", "id": "", "plan_id": "", "instance_id": "", "currency": "Ouguiya", "currency_symbol": "£", "amount": 186921, "annual_monthly_amount": 178047, "fee": {"amount": 798728, "amount_formatted": "", "currency": "Egyptian Pound", "currency_symbol": "Nu"}, "annual_monthly_fee": {"amount": 290472, "amount_formatted": "", "currency": "Burundi Franc", "currency_symbol": "₨"}, "description": "boldly yearly trouser", "is_default": true, "created_at": 750571, "supported_billing_periods": "month"}, "effective_at": 750041, "effective_mode": "immediate", "next_billing_date": 198923, "charged_immediately": true, "immediate_charge": {"amount": 70077, "amount_formatted": "", "currency": "CFP Franc", "currency_symbol": "TT$"}, "previous_subscription_item_status": "abandoned", "previous_subscription_item_id": ""}} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} "500": @@ -7692,16 +7960,16 @@ examples: active: false responses: "200": - application/json: {"data": [{"id": "", "name": "", "provider": "", "logo_public_url": "https://majestic-designation.info", "active": true, "domains": [], "organization_id": "", "sync_user_attributes": false, "disable_additional_identifications": true, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": ""}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://milky-clamp.biz/", "idp_metadata_url": "https://vengeful-airbus.net/", "acs_url": "https://similar-annual.info/", "sp_entity_id": "", "sp_metadata_url": "https://suburban-lashes.net/", "active": false, "allow_idp_initiated": false, "allow_subdomains": false, "force_authn": false}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": null, "auth_url": "https://close-case.com/", "token_url": "https://exotic-sport.info/", "user_info_url": "https://smoggy-character.biz/", "requires_pkce": false, "logo_public_url": "https://appropriate-caption.net", "created_at": 597158, "updated_at": 307702}, "created_at": 465910, "updated_at": 675758}], "total_count": 594925} + application/json: {"data": [{"id": "", "name": "", "provider": "", "logo_public_url": "https://majestic-designation.info", "active": true, "domains": [], "organization_id": "", "sync_user_attributes": false, "disable_additional_identifications": true, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": false}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://milky-clamp.biz/", "idp_metadata_url": "https://vengeful-airbus.net/", "acs_url": "https://similar-annual.info/", "sp_entity_id": "", "sp_metadata_url": "https://suburban-lashes.net/", "active": false, "allow_idp_initiated": false, "allow_subdomains": false, "force_authn": false}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": null, "auth_url": "https://close-case.com/", "token_url": "https://exotic-sport.info/", "user_info_url": "https://smoggy-character.biz/", "requires_pkce": false, "logo_public_url": "https://appropriate-caption.net", "created_at": 597158, "updated_at": 307702}, "created_at": 465910, "updated_at": 675758}], "total_count": 594925} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} CreateEnterpriseConnection: speakeasy-default-create-enterprise-connection: requestBody: - application/json: {"name": "", "provider": "saml_google", "domains": ["", ""], "organization_id": "", "allow_organization_account_linking": false, "active": true, "saml": null, "oidc": {"client_id": "", "client_secret": "", "discovery_url": "https://frugal-brush.org", "auth_url": "https://failing-epic.biz", "token_url": "https://outrageous-haircut.name/", "user_info_url": "https://adolescent-tooth.com", "requires_pkce": true}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": ""}]} + application/json: {"name": "", "provider": "saml_google", "domains": ["", ""], "organization_id": "", "allow_organization_account_linking": false, "active": true, "saml": null, "oidc": {"client_id": "", "client_secret": "", "discovery_url": "https://frugal-brush.org", "auth_url": "https://failing-epic.biz", "token_url": "https://outrageous-haircut.name/", "user_info_url": "https://adolescent-tooth.com", "requires_pkce": true}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": true}]} responses: "201": - application/json: {"id": "", "name": "", "provider": "", "logo_public_url": "https://broken-atrium.net/", "active": false, "domains": ["", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": false, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": ""}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://zealous-coal.info", "idp_metadata_url": "https://which-nudge.name/", "acs_url": "https://likely-decision.name", "sp_entity_id": "", "sp_metadata_url": "https://cheap-shoulder.biz/", "active": true, "allow_idp_initiated": false, "allow_subdomains": true, "force_authn": true}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": "https://unruly-smoke.info", "auth_url": "https://personal-exasperation.com/", "token_url": "https://tense-director.biz", "user_info_url": "https://international-morbidity.info/", "requires_pkce": false, "logo_public_url": "https://rusty-flint.biz/", "created_at": 64076, "updated_at": 926778}, "created_at": 955421, "updated_at": 241609} + application/json: {"id": "", "name": "", "provider": "", "logo_public_url": "https://broken-atrium.net/", "active": false, "domains": ["", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": false, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": false}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://zealous-coal.info", "idp_metadata_url": "https://which-nudge.name/", "acs_url": "https://likely-decision.name", "sp_entity_id": "", "sp_metadata_url": "https://cheap-shoulder.biz/", "active": true, "allow_idp_initiated": false, "allow_subdomains": true, "force_authn": true}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": "https://unruly-smoke.info", "auth_url": "https://personal-exasperation.com/", "token_url": "https://tense-director.biz", "user_info_url": "https://international-morbidity.info/", "requires_pkce": false, "logo_public_url": "https://rusty-flint.biz/", "created_at": 64076, "updated_at": 926778}, "created_at": 955421, "updated_at": 241609} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} GetEnterpriseConnection: @@ -7711,7 +7979,7 @@ examples: enterprise_connection_id: "" responses: "200": - application/json: {"id": "", "name": "", "provider": "", "logo_public_url": null, "active": true, "domains": ["", "", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": false, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": ""}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://glittering-retrospectivity.info/", "idp_metadata_url": "https://average-rosemary.org", "acs_url": "https://flawless-mortise.info", "sp_entity_id": "", "sp_metadata_url": "https://imaginative-bin.info", "active": true, "allow_idp_initiated": true, "allow_subdomains": true, "force_authn": true}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": "https://private-dead.com", "auth_url": "https://prestigious-cross-contamination.name/", "token_url": "https://glittering-retrospectivity.info/", "user_info_url": "https://average-rosemary.org", "requires_pkce": true, "logo_public_url": "https://trusty-management.name", "created_at": 606739, "updated_at": 578377}, "created_at": 958854, "updated_at": 973337} + application/json: {"id": "", "name": "", "provider": "", "logo_public_url": null, "active": true, "domains": ["", "", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": false, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": true}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://glittering-retrospectivity.info/", "idp_metadata_url": "https://average-rosemary.org", "acs_url": "https://flawless-mortise.info", "sp_entity_id": "", "sp_metadata_url": "https://imaginative-bin.info", "active": true, "allow_idp_initiated": true, "allow_subdomains": true, "force_authn": true}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": "https://private-dead.com", "auth_url": "https://prestigious-cross-contamination.name/", "token_url": "https://glittering-retrospectivity.info/", "user_info_url": "https://average-rosemary.org", "requires_pkce": true, "logo_public_url": "https://trusty-management.name", "created_at": 606739, "updated_at": 578377}, "created_at": 958854, "updated_at": 973337} "402": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} UpdateEnterpriseConnection: @@ -7720,10 +7988,10 @@ examples: path: enterprise_connection_id: "" requestBody: - application/json: {"name": "", "domains": null, "active": false, "sync_user_attributes": true, "disable_additional_identifications": true, "allow_organization_account_linking": true, "organization_id": "", "saml": {"name": "", "idp_entity_id": "", "idp_sso_url": "https://animated-experience.name/", "idp_certificate": "", "idp_metadata_url": "https://alert-atrium.com/", "idp_metadata": "", "attribute_mapping": {"user_id": "", "email_address": "Eula82@hotmail.com", "first_name": "Pierre", "last_name": "Hoeger"}, "allow_subdomains": false, "allow_idp_initiated": false, "force_authn": false}, "oidc": {"client_id": "", "client_secret": "", "discovery_url": "https://excitable-vista.info", "auth_url": "https://obedient-pasta.org/", "token_url": "https://helpless-gradient.info/", "user_info_url": "https://neglected-chapel.name/", "requires_pkce": false}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": ""}]} + application/json: {"name": "", "domains": null, "active": false, "sync_user_attributes": true, "disable_additional_identifications": true, "allow_organization_account_linking": true, "organization_id": "", "saml": {"name": "", "idp_entity_id": "", "idp_sso_url": "https://animated-experience.name/", "idp_certificate": "", "idp_metadata_url": "https://alert-atrium.com/", "idp_metadata": "", "attribute_mapping": {"user_id": "", "email_address": "Eula82@hotmail.com", "first_name": "Pierre", "last_name": "Hoeger"}, "allow_subdomains": false, "allow_idp_initiated": false, "force_authn": false}, "oidc": {"client_id": "", "client_secret": "", "discovery_url": "https://excitable-vista.info", "auth_url": "https://obedient-pasta.org/", "token_url": "https://helpless-gradient.info/", "user_info_url": "https://neglected-chapel.name/", "requires_pkce": false}, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": false}]} responses: "200": - application/json: {"id": "", "name": "", "provider": "", "logo_public_url": "https://hasty-ghost.info", "active": false, "domains": ["", "", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": true, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": ""}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://pure-napkin.info", "idp_metadata_url": "https://immediate-coil.biz", "acs_url": "https://insecure-apricot.net/", "sp_entity_id": "", "sp_metadata_url": "https://spirited-zebra.info/", "active": false, "allow_idp_initiated": true, "allow_subdomains": true, "force_authn": false}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": null, "auth_url": "https://giving-devil.com/", "token_url": null, "user_info_url": "https://flustered-equal.biz", "requires_pkce": true, "logo_public_url": "https://genuine-depot.name", "created_at": 446746, "updated_at": 286855}, "created_at": 149468, "updated_at": 206027} + application/json: {"id": "", "name": "", "provider": "", "logo_public_url": "https://hasty-ghost.info", "active": false, "domains": ["", "", ""], "organization_id": "", "sync_user_attributes": true, "disable_additional_identifications": true, "allow_organization_account_linking": false, "custom_attributes": [{"name": "", "key": "", "sso_path": "", "scim_path": "", "multi_valued": true}], "saml_connection": {"id": "", "name": "", "idp_entity_id": "", "idp_sso_url": "https://pure-napkin.info", "idp_metadata_url": "https://immediate-coil.biz", "acs_url": "https://insecure-apricot.net/", "sp_entity_id": "", "sp_metadata_url": "https://spirited-zebra.info/", "active": false, "allow_idp_initiated": true, "allow_subdomains": true, "force_authn": false}, "oauth_config": {"id": "", "name": "", "provider_key": "", "client_id": "", "discovery_url": null, "auth_url": "https://giving-devil.com/", "token_url": null, "user_info_url": "https://flustered-equal.biz", "requires_pkce": true, "logo_public_url": "https://genuine-depot.name", "created_at": 446746, "updated_at": 286855}, "created_at": 149468, "updated_at": 206027} "400": application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} DeleteEnterpriseConnection: @@ -7742,7 +8010,7 @@ examples: path: user_id: "" requestBody: - application/json: {"email_address": "Ines83@gmail.com"} + application/json: {"email_address": "Ines83@gmail.com", "identification_status": "verified"} responses: "200": application/json: {"id": "email_id_56789", "object": "email_address", "email_address": "example@clerk.com", "reserved": false, "verification": {"object": "verification_scim", "status": "verified", "strategy": "scim", "attempts": 952647, "expire_at": 804152}, "linked_to": [{"type": "oauth_google", "id": "link_12345"}], "matches_sso_connection": false, "created_at": 1615458901, "updated_at": 1615459001} @@ -7754,7 +8022,7 @@ examples: path: user_id: "" requestBody: - application/json: {"phone_number": "1-440-484-8878 x689"} + application/json: {"phone_number": "1-440-484-8878 x689", "identification_status": "verified"} responses: "200": application/json: {"id": "ph_123456789", "object": "phone_number", "phone_number": "+11234567890", "reserved_for_second_factor": false, "default_second_factor": true, "reserved": false, "verification": {"object": "verification_admin", "status": "verified", "strategy": "admin", "attempts": 749991, "expire_at": null, "verified_at_client": ""}, "linked_to": [{"type": "oauth_google", "id": "link_id_123"}], "backup_codes": ["code1", "code2", "code3"], "created_at": 1594842023, "updated_at": 1604842023} @@ -7849,9 +8117,85 @@ examples: application/json: {"errors": []} "404": application/json: {"errors": [{"message": "some details about the error", "long_message": "some details about the error", "code": "some_error_code"}]} + PrepareEmailAddressVerification: + speakeasy-default-prepare-email-address-verification: + parameters: + path: + email_address_id: "" + responses: + "200": + application/json: {"object": "", "id": "", "status": "", "strategy": "", "attempts": 504448, "expire_at": 725958, "channel": ""} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + "500": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + AttemptEmailAddressVerification: + speakeasy-default-attempt-email-address-verification: + parameters: + path: + email_address_id: "" + requestBody: + application/json: {"verification_id": "", "code": ""} + responses: + "200": + application/json: {"object": "", "id": "", "status": "", "strategy": "", "attempts": 729022, "expire_at": 86364, "channel": ""} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + "500": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + PreparePhoneNumberVerification: + speakeasy-default-prepare-phone-number-verification: + parameters: + path: + phone_number_id: "" + responses: + "200": + application/json: {"object": "", "id": "", "status": "", "strategy": "", "attempts": 552314, "expire_at": 948040, "channel": null} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + "500": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + AttemptPhoneNumberVerification: + speakeasy-default-attempt-phone-number-verification: + parameters: + path: + phone_number_id: "" + requestBody: + application/json: {"verification_id": "", "code": ""} + responses: + "200": + application/json: {"object": "", "id": "", "status": "", "strategy": "", "attempts": 91098, "expire_at": 731286, "channel": ""} + "400": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + "500": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + ListEnterpriseConnectionTestRuns: + speakeasy-default-list-enterprise-connection-test-runs: + parameters: + path: + enterprise_connection_id: "" + query: + status: ["failed"] + limit: 20 + offset: 10 + responses: + "200": + application/json: {"data": [], "total_count": 42349} + "402": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} + CreateEnterpriseConnectionTestRun: + speakeasy-default-create-enterprise-connection-test-run: + parameters: + path: + enterprise_connection_id: "" + responses: + "200": + application/json: {"url": "https://slushy-annual.info/"} + "402": + application/json: {"errors": [{"message": "Invalid input", "long_message": "The input provided does not meet the requirements.", "code": "400_bad_request", "meta": {}}], "meta": {}} examplesVersion: 1.0.2 generatedTests: {} -releaseNotes: "## Python SDK Changes:\n* `clerk.users.unset_password_compromised()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.list()`: `response.[]` **Changed** (Breaking ⚠️)\n* `clerk.billing.create_price_transition()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.billing.extend_subscription_item_free_trial()`: `response.plan` **Changed** (Breaking ⚠️)\n* `clerk.billing.cancel_subscription_item()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.billing.list_subscription_items()`: `response.data[]` **Changed** (Breaking ⚠️)\n* `clerk.billing.create_price()`: \n * `request` **Changed**\n * `response` **Changed** (Breaking ⚠️)\n* `clerk.billing.list_prices()`: `response.data[]` **Changed** (Breaking ⚠️)\n* `clerk.billing.list_plans()`: `response.data[].fee` **Changed** (Breaking ⚠️)\n* `clerk.organization_domains.list_all()`: `response.data[]` **Changed** (Breaking ⚠️)\n* `clerk.organization_domains.update()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.create()`: `response.verification.union(verification_scim)` **Added** (Breaking ⚠️)\n* `clerk.email_addresses.get()`: `response.verification.union(verification_scim)` **Added** (Breaking ⚠️)\n* `clerk.organization_domains.list()`: `response.data[]` **Changed** (Breaking ⚠️)\n* `clerk.email_addresses.update()`: `response.verification.union(verification_scim)` **Added** (Breaking ⚠️)\n* `clerk.organization_domains.create()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.create()`: \n * `request` **Changed**\n * `response` **Changed** (Breaking ⚠️)\n * `error.status[402]` **Added**\n* `clerk.users.get()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.update()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.ban()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.unban()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.bulk_ban()`: `response.[]` **Changed** (Breaking ⚠️)\n* `clerk.users.bulk_unban()`: `response.[]` **Changed** (Breaking ⚠️)\n* `clerk.users.lock()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.unlock()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.set_profile_image()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.delete_profile_image()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.update_metadata()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.users.get_billing_subscription()`: `response.subscription_items[]` **Changed** (Breaking ⚠️)\n* `clerk.organizations.get_billing_subscription()`: `response.subscription_items[]` **Changed** (Breaking ⚠️)\n* `clerk.users.set_password_compromised()`: `response` **Changed** (Breaking ⚠️)\n* `clerk.phone_numbers.replace_for_user()`: **Added**\n* `clerk.saml_connections.create()`: \n * `response` **Changed**\n * `error.status[409]` **Added**\n* `clerk.instance_settings.update()`: \n * `request.preferred_sign_in_strategy_when_password_required` **Added**\n* `clerk.email_addresses.replace_for_user()`: **Added**\n* `clerk.users.get_organization_memberships()`: `response.data[].public_user_data.banned` **Added**\n* `clerk.organization_memberships.create()`: `response.public_user_data.banned` **Added**\n* `clerk.organization_memberships.list()`: `response.data[].public_user_data.banned` **Added**\n* `clerk.organization_memberships.update()`: `response.public_user_data.banned` **Added**\n* `clerk.organization_memberships.delete()`: `response.public_user_data.banned` **Added**\n* `clerk.organization_memberships.update_metadata()`: `response.public_user_data.banned` **Added**\n* `clerk.users.get_instance_organization_memberships()`: `response.data[].public_user_data.banned` **Added**\n* `clerk.email_addresses.delete()`: `error.status[409]` **Added**\n* `clerk.miscellaneous.get_public_interstitial()`: `request` **Changed**\n* `clerk.admin_portal_link_tokens.revoke_admin_portal_link_token()`: **Added**\n* `clerk.saml_connections.list()`: `response.data[]` **Changed**\n* `clerk.instance_settings.update_organization_settings()`: `response.max_allowed_domains` **Added**\n* `clerk.saml_connections.get()`: `response` **Changed**\n* `clerk.saml_connections.update()`: \n * `request.allow_organization_account_linking` **Added**\n * `response` **Changed**\n * `error.status[409]` **Added**\n* `clerk.enterprise_connections.list()`: `response.data[]` **Changed**\n* `clerk.enterprise_connections.create()`: \n * `request` **Changed**\n * `response` **Changed**\n * `error.status[409]` **Added**\n* `clerk.enterprise_connections.get()`: `response` **Changed**\n* `clerk.enterprise_connections.update()`: \n * `request` **Changed**\n * `response` **Changed**\n* `clerk.agent_tasks.create()`: `response.agent_task_id` **Added**\n* `clerk.agent_tasks.revoke()`: `response.agent_task_id` **Added**\n* `clerk.admin_portal_link_tokens.create_admin_portal_link_token()`: **Added**\n* `clerk.oauth_applications.upload_logo()`: **Added**\n* `clerk.organization_domains.verify_ownership()`: **Added**\n* `clerk.instance_settings.get_organization_settings()`: **Added**\n* `clerk.instance_settings.update_communication()`: **Added**\n* `clerk.instance_settings.get_communication()`: **Added**\n* `clerk.users.replace_metadata()`: **Added**\n* `clerk.m2m.create_token()`: `request.min_remaining_ttl_seconds` **Added**\n" +releaseNotes: "## Python SDK Changes:\n* `clerk.miscellaneous.get_public_interstitial()`: `request` **Changed** (Breaking ⚠️)\n* `clerk.users.bulk_unban()`: `response.[]` **Changed**\n* `clerk.users.create()`: \n * `request` **Changed**\n * `response` **Changed**\n* `clerk.phone_numbers.attempt_verification()`: **Added**\n* `clerk.enterprise_connections.list_test_runs()`: **Added**\n* `clerk.enterprise_connections.create_test_run()`: **Added**\n* `clerk.email_addresses.attempt_verification()`: **Added**\n* `clerk.email_addresses.create()`: `response.verification.union(verification_otp).channel` **Added**\n* `clerk.email_addresses.get()`: `response.verification.union(verification_otp).channel` **Added**\n* `clerk.email_addresses.update()`: `response.verification.union(verification_otp).channel` **Added**\n* `clerk.email_addresses.replace_for_user()`: \n * `request.identification_status` **Added**\n * `response.verification.union(verification_otp).channel` **Added**\n* `clerk.phone_numbers.create()`: `response.verification.union(verification_otp).channel` **Added**\n* `clerk.phone_numbers.get()`: `response.verification.union(verification_otp).channel` **Added**\n* `clerk.phone_numbers.update()`: `response.verification.union(verification_otp).channel` **Added**\n* `clerk.phone_numbers.replace_for_user()`: \n * `request.identification_status` **Added**\n * `response.verification.union(verification_otp).channel` **Added**\n* `clerk.users.list()`: `response.[]` **Changed**\n* `clerk.users.unlock()`: `response` **Changed**\n* `clerk.users.get()`: `response` **Changed**\n* `clerk.users.update()`: `response` **Changed**\n* `clerk.users.ban()`: `response` **Changed**\n* `clerk.users.unban()`: `response` **Changed**\n* `clerk.users.bulk_ban()`: `response.[]` **Changed**\n* `clerk.email_addresses.prepare_verification()`: **Added**\n* `clerk.phone_numbers.prepare_verification()`: **Added**\n* `clerk.users.lock()`: `response` **Changed**\n* `clerk.billing.create_price()`: \n * `request.supported_billing_periods` **Added**\n * `response.supported_billing_periods` **Added**\n* `clerk.users.delete_profile_image()`: `response` **Changed**\n* `clerk.users.update_metadata()`: `response` **Changed**\n* `clerk.users.replace_metadata()`: `response` **Changed**\n* `clerk.users.get_billing_subscription()`: `response` **Changed**\n* `clerk.users.set_password_compromised()`: `response` **Changed**\n* `clerk.users.unset_password_compromised()`: `response` **Changed**\n* `clerk.instance_settings.update_organization_settings()`: `error.status[403]` **Added**\n* `clerk.organizations.get_billing_subscription()`: `response` **Changed**\n* `clerk.enterprise_connections.list()`: `response.data[].custom_attributes[].multi_valued` **Added**\n* `clerk.enterprise_connections.create()`: \n * `request.custom_attributes[].multi_valued` **Added**\n * `response.custom_attributes[].multi_valued` **Added**\n* `clerk.enterprise_connections.get()`: `response.custom_attributes[].multi_valued` **Added**\n* `clerk.enterprise_connections.update()`: \n * `request.custom_attributes[].multi_valued` **Added**\n * `response.custom_attributes[].multi_valued` **Added**\n* `clerk.billing.list_prices()`: `response.data[].supported_billing_periods` **Added**\n* `clerk.users.set_profile_image()`: `response` **Changed**\n* `clerk.billing.list_subscription_items()`: `response.data[]` **Changed**\n* `clerk.billing.cancel_subscription_item()`: `response` **Changed**\n* `clerk.billing.extend_subscription_item_free_trial()`: `response` **Changed**\n* `clerk.billing.create_price_transition()`: `response` **Changed**\n* `clerk.billing.list_statements()`: `response.data[].groups[].items[].totals.discounts` **Added**\n* `clerk.billing.get_statement()`: `response.groups[].items[].totals.discounts` **Added**\n* `clerk.billing.get_statement_payment_attempts()`: `response.data[].totals.discounts` **Added**\n" generatedFiles: - .gitattributes - .vscode/settings.json diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index a55b752a..b64ae4b8 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -29,7 +29,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false python: - version: 5.0.7 + version: 5.1.0 additionalDependencies: dev: pytest: ^8.3.3 @@ -44,12 +44,16 @@ python: authors: - Clerk baseErrorName: ClerkBaseError + bodyVariantOverloads: false clientServerStatusCodesAsErrors: true constFieldCasing: upper defaultErrorName: SDKError description: Python Client SDK for clerk.dev enableCustomCodeRegions: true enumFormat: enum + eventStreamClassNames: + async: EventStreamAsync + sync: EventStream fixFlags: asyncPaginationSep2025: false conflictResistantModelImportsFeb2026: false @@ -69,18 +73,23 @@ python: webhooks: "" inferUnionDiscriminators: true inputModelSuffix: input + inputTypedDictSuffix: TypedDict legacyPyright: true license: "" maxMethodParams: 20 methodArguments: infer-optional-args + methodTimeoutArgument: timeout-ms + methodTimeoutUnits: milliseconds moduleName: "" multipartArrayFormat: legacy + optionalDependencies: {} outputModelSuffix: output packageManager: poetry packageName: clerk-backend-api preApplyUnionDiscriminators: false pytestFilterWarnings: [] pytestTimeout: 0 + rawResponseHelpers: false responseFormat: flat sseFlatResponse: false templateVersion: v2 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 399479f1..3009e0c7 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.768.2 +speakeasyVersion: 1.775.0 sources: clerk-openapi: sourceNamespace: clerk-openapi - sourceRevisionDigest: sha256:1e5f5a4db3b56d5500e02405ce79864fd1b243212f603e1e513ef54928524c8a - sourceBlobDigest: sha256:d6bb2ae2558f16c8351e5e2809754745d8dcf8160fac339e8e36489ed8bf6f08 + sourceRevisionDigest: sha256:a93bfeadf7aef0931b45d91d5a4819687119e89267b48d1cf3e264f181f7ffdf + sourceBlobDigest: sha256:a65ce70dbf04e0053c9929a1556c3a5b7684eb127b38772fc260beb0ea9018df tags: - latest - "2025-11-10" @@ -11,10 +11,10 @@ targets: clerk-sdk-python: source: clerk-openapi sourceNamespace: clerk-openapi - sourceRevisionDigest: sha256:1e5f5a4db3b56d5500e02405ce79864fd1b243212f603e1e513ef54928524c8a - sourceBlobDigest: sha256:d6bb2ae2558f16c8351e5e2809754745d8dcf8160fac339e8e36489ed8bf6f08 + sourceRevisionDigest: sha256:a93bfeadf7aef0931b45d91d5a4819687119e89267b48d1cf3e264f181f7ffdf + sourceBlobDigest: sha256:a65ce70dbf04e0053c9929a1556c3a5b7684eb127b38772fc260beb0ea9018df codeSamplesNamespace: clerk-openapi-python-code-samples - codeSamplesRevisionDigest: sha256:a7a36574a27ea83ee7327c8fd47e78da9a38231f000d75347bf532b118709afd + codeSamplesRevisionDigest: sha256:8f2df308c90ff06f8ccf68480fe67b84ba951d586af097162ddb8820e40710b2 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README-PYPI.md b/README-PYPI.md index 4846948b..8edd279a 100644 --- a/README-PYPI.md +++ b/README-PYPI.md @@ -191,7 +191,7 @@ with Clerk( bearer_auth="", ) as clerk: - clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", application_name="", logo_url="https://fine-tarragon.info", flow="", use_domain_for_script=False) + clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", use_domain_for_script=False) # Use the SDK ... @@ -325,6 +325,8 @@ def verify_machine_token(request: httpx.Request): * [get](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/emailaddresses/README.md#get) - Retrieve an email address * [delete](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/emailaddresses/README.md#delete) - Delete an email address * [update](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/emailaddresses/README.md#update) - Update an email address +* [prepare_verification](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/emailaddresses/README.md#prepare_verification) - Send a verification code to an email address +* [attempt_verification](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/emailaddresses/README.md#attempt_verification) - Verify a code sent to an email address * [replace_for_user](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/emailaddresses/README.md#replace_for_user) - Replace a user's email address ### [~~EmailAndSmsTemplates~~](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/emailandsmstemplates/README.md) @@ -345,6 +347,8 @@ def verify_machine_token(request: httpx.Request): * [get](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/enterpriseconnectionssdk/README.md#get) - Retrieve an enterprise connection * [update](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/enterpriseconnectionssdk/README.md#update) - Update an enterprise connection * [delete](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/enterpriseconnectionssdk/README.md#delete) - Delete an enterprise connection +* [list_test_runs](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/enterpriseconnectionssdk/README.md#list_test_runs) - List enterprise connection test runs +* [create_test_run](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/enterpriseconnectionssdk/README.md#create_test_run) - Create an enterprise connection test run ### [InstanceSettings](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/instancesettingssdk/README.md) @@ -482,6 +486,8 @@ def verify_machine_token(request: httpx.Request): * [get](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/phonenumbers/README.md#get) - Retrieve a phone number * [delete](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/phonenumbers/README.md#delete) - Delete a phone number * [update](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/phonenumbers/README.md#update) - Update a phone number +* [prepare_verification](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/phonenumbers/README.md#prepare_verification) - Send a verification code to a phone number +* [attempt_verification](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/phonenumbers/README.md#attempt_verification) - Verify a code sent to a phone number * [replace_for_user](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/phonenumbers/README.md#replace_for_user) - Replace a user's phone number ### [ProxyChecks](https://github.com/clerk/clerk-sdk-python/blob/master/docs/sdks/proxychecks/README.md) @@ -637,7 +643,7 @@ from clerk_backend_api.utils import BackoffStrategy, RetryConfig with Clerk() as clerk: - clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", application_name="", logo_url="https://fine-tarragon.info", flow="", use_domain_for_script=False, + clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", use_domain_for_script=False, RetryConfig("backoff", BackoffStrategy(1, 50, 1.1, 100), False)) # Use the SDK ... @@ -654,7 +660,7 @@ with Clerk( retry_config=RetryConfig("backoff", BackoffStrategy(1, 50, 1.1, 100), False), ) as clerk: - clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", application_name="", logo_url="https://fine-tarragon.info", flow="", use_domain_for_script=False) + clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", use_domain_for_script=False) # Use the SDK ... @@ -725,41 +731,41 @@ with Clerk( **Inherit from [`ClerkBaseError`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/clerkbaseerror.py)**: -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`CreateAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`GetAPIKeysAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`GetAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`UpdateAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/updateapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`DeleteAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/deleteapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`GetAPIKeySecretAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysecretapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`RevokeAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`VerifyAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`CreateM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createm2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`GetM2MTokensM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`RevokeM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokem2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`VerifyM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifym2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`VerifyOAuthAccessTokenOauthAccessTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 216 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 216 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 216 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 216 methods.* -* [`GetM2MTokensM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponseresponsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 216 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse404ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`GetAPIKeysAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`GetAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`UpdateAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/updateapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`DeleteAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/deleteapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`GetAPIKeySecretAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysecretapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`RevokeAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`VerifyAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`GetM2MTokensM2mResponse404ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`RevokeM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokem2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`VerifyM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifym2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`VerifyOAuthAccessTokenOauthAccessTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse409ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse409responsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 216 methods.* -* [`CreateAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createapikeyapikeysresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 216 methods.* -* [`CreateM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createm2mtokenm2mresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 216 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`CreateAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`GetAPIKeysAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`GetAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`UpdateAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/updateapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`DeleteAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/deleteapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`GetAPIKeySecretAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysecretapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`RevokeAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`VerifyAPIKeyAPIKeysResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`CreateM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createm2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`GetM2MTokensM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`RevokeM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokem2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`VerifyM2MTokenM2mResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifym2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 222 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 222 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 222 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 222 methods.* +* [`GetM2MTokensM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponseresponsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 222 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse404ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`GetAPIKeysAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`GetAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`UpdateAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/updateapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`DeleteAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/deleteapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`GetAPIKeySecretAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getapikeysecretapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`RevokeAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokeapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`VerifyAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`GetM2MTokensM2mResponse404ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/getm2mtokensm2mresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`RevokeM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/revokem2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`VerifyM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifym2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse409ResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse409responsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 222 methods.* +* [`CreateAPIKeyAPIKeysResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createapikeyapikeysresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 222 methods.* +* [`CreateM2MTokenM2mResponseResponseBody`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/createm2mtokenm2mresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 222 methods.* * [`ResponseValidationError`](https://github.com/clerk/clerk-sdk-python/blob/master/./src/clerk_backend_api/models/responsevalidationerror.py): Type mismatch between the response data and the expected Pydantic model. Provides access to the Pydantic validation error via the `cause` attribute. @@ -781,7 +787,7 @@ with Clerk( server_url="https://api.clerk.com/v1", ) as clerk: - clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", application_name="", logo_url="https://fine-tarragon.info", flow="", use_domain_for_script=False) + clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", use_domain_for_script=False) # Use the SDK ... diff --git a/README.md b/README.md index 1ab80173..4900efd3 100644 --- a/README.md +++ b/README.md @@ -191,7 +191,7 @@ with Clerk( bearer_auth="", ) as clerk: - clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", application_name="", logo_url="https://fine-tarragon.info", flow="", use_domain_for_script=False) + clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", use_domain_for_script=False) # Use the SDK ... @@ -325,6 +325,8 @@ def verify_machine_token(request: httpx.Request): * [get](docs/sdks/emailaddresses/README.md#get) - Retrieve an email address * [delete](docs/sdks/emailaddresses/README.md#delete) - Delete an email address * [update](docs/sdks/emailaddresses/README.md#update) - Update an email address +* [prepare_verification](docs/sdks/emailaddresses/README.md#prepare_verification) - Send a verification code to an email address +* [attempt_verification](docs/sdks/emailaddresses/README.md#attempt_verification) - Verify a code sent to an email address * [replace_for_user](docs/sdks/emailaddresses/README.md#replace_for_user) - Replace a user's email address ### [~~EmailAndSmsTemplates~~](docs/sdks/emailandsmstemplates/README.md) @@ -345,6 +347,8 @@ def verify_machine_token(request: httpx.Request): * [get](docs/sdks/enterpriseconnectionssdk/README.md#get) - Retrieve an enterprise connection * [update](docs/sdks/enterpriseconnectionssdk/README.md#update) - Update an enterprise connection * [delete](docs/sdks/enterpriseconnectionssdk/README.md#delete) - Delete an enterprise connection +* [list_test_runs](docs/sdks/enterpriseconnectionssdk/README.md#list_test_runs) - List enterprise connection test runs +* [create_test_run](docs/sdks/enterpriseconnectionssdk/README.md#create_test_run) - Create an enterprise connection test run ### [InstanceSettings](docs/sdks/instancesettingssdk/README.md) @@ -482,6 +486,8 @@ def verify_machine_token(request: httpx.Request): * [get](docs/sdks/phonenumbers/README.md#get) - Retrieve a phone number * [delete](docs/sdks/phonenumbers/README.md#delete) - Delete a phone number * [update](docs/sdks/phonenumbers/README.md#update) - Update a phone number +* [prepare_verification](docs/sdks/phonenumbers/README.md#prepare_verification) - Send a verification code to a phone number +* [attempt_verification](docs/sdks/phonenumbers/README.md#attempt_verification) - Verify a code sent to a phone number * [replace_for_user](docs/sdks/phonenumbers/README.md#replace_for_user) - Replace a user's phone number ### [ProxyChecks](docs/sdks/proxychecks/README.md) @@ -637,7 +643,7 @@ from clerk_backend_api.utils import BackoffStrategy, RetryConfig with Clerk() as clerk: - clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", application_name="", logo_url="https://fine-tarragon.info", flow="", use_domain_for_script=False, + clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", use_domain_for_script=False, RetryConfig("backoff", BackoffStrategy(1, 50, 1.1, 100), False)) # Use the SDK ... @@ -654,7 +660,7 @@ with Clerk( retry_config=RetryConfig("backoff", BackoffStrategy(1, 50, 1.1, 100), False), ) as clerk: - clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", application_name="", logo_url="https://fine-tarragon.info", flow="", use_domain_for_script=False) + clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", use_domain_for_script=False) # Use the SDK ... @@ -725,41 +731,41 @@ with Clerk( **Inherit from [`ClerkBaseError`](./src/clerk_backend_api/models/clerkbaseerror.py)**: -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`CreateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`GetAPIKeysAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`GetAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`UpdateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`DeleteAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`GetAPIKeySecretAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`RevokeAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`VerifyAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`CreateM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`GetM2MTokensM2mResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`RevokeM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`VerifyM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`VerifyOAuthAccessTokenOauthAccessTokensResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 216 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 216 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 216 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 216 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 216 methods.* -* [`GetM2MTokensM2mResponseResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponseresponsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 216 methods.* -* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse404ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`GetAPIKeysAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`GetAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`UpdateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`DeleteAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`GetAPIKeySecretAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`RevokeAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`VerifyAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`GetM2MTokensM2mResponse404ResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`RevokeM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`VerifyM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`VerifyOAuthAccessTokenOauthAccessTokensResponseResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 216 methods.* -* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse409ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse409responsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 216 methods.* -* [`CreateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 216 methods.* -* [`CreateM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 216 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`CreateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`GetAPIKeysAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`GetAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`UpdateAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`DeleteAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`GetAPIKeySecretAPIKeysResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`RevokeAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`VerifyAPIKeyAPIKeysResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`CreateM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`GetM2MTokensM2mResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`RevokeM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`VerifyM2MTokenM2mResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponsebody.py): 400 Bad Request. Status code `400`. Applicable to 1 of 222 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 222 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponseResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponseresponsebody.py): 401 Unauthorized. Status code `401`. Applicable to 1 of 222 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 222 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse403ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse403responsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 222 methods.* +* [`GetM2MTokensM2mResponseResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponseresponsebody.py): 403 Forbidden. Status code `403`. Applicable to 1 of 222 methods.* +* [`RevokeAdminPortalLinkTokenAdminPortalLinkTokensResponse404ResponseBody`](./src/clerk_backend_api/models/revokeadminportallinktokenadminportallinktokensresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`GetAPIKeysAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`GetAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`UpdateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/updateapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`DeleteAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/deleteapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`GetAPIKeySecretAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/getapikeysecretapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`RevokeAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/revokeapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`VerifyAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/verifyapikeyapikeysresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`GetM2MTokensM2mResponse404ResponseBody`](./src/clerk_backend_api/models/getm2mtokensm2mresponse404responsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`RevokeM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/revokem2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`VerifyM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/verifym2mtokenm2mresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`VerifyOAuthAccessTokenOauthAccessTokensResponseResponseBody`](./src/clerk_backend_api/models/verifyoauthaccesstokenoauthaccesstokensresponseresponsebody.py): 404 Not Found. Status code `404`. Applicable to 1 of 222 methods.* +* [`CreateAdminPortalLinkTokenAdminPortalLinkTokensResponse409ResponseBody`](./src/clerk_backend_api/models/createadminportallinktokenadminportallinktokensresponse409responsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 222 methods.* +* [`CreateAPIKeyAPIKeysResponseResponseBody`](./src/clerk_backend_api/models/createapikeyapikeysresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 222 methods.* +* [`CreateM2MTokenM2mResponseResponseBody`](./src/clerk_backend_api/models/createm2mtokenm2mresponseresponsebody.py): 409 Conflict. Status code `409`. Applicable to 1 of 222 methods.* * [`ResponseValidationError`](./src/clerk_backend_api/models/responsevalidationerror.py): Type mismatch between the response data and the expected Pydantic model. Provides access to the Pydantic validation error via the `cause` attribute. @@ -781,7 +787,7 @@ with Clerk( server_url="https://api.clerk.com/v1", ) as clerk: - clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", application_name="", logo_url="https://fine-tarragon.info", flow="", use_domain_for_script=False) + clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", use_domain_for_script=False) # Use the SDK ... diff --git a/RELEASES.md b/RELEASES.md index 4519ea14..4c61c951 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -608,4 +608,14 @@ Based on: ### Generated - [python v5.0.7] . ### Releases -- [PyPI v5.0.7] https://pypi.org/project/clerk-backend-api/5.0.7 - . \ No newline at end of file +- [PyPI v5.0.7] https://pypi.org/project/clerk-backend-api/5.0.7 - . + +## 2026-06-10 15:44:40 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.775.0 (2.900.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v5.1.0] . +### Releases +- [PyPI v5.1.0] https://pypi.org/project/clerk-backend-api/5.1.0 - . \ No newline at end of file diff --git a/docs/models/attemptemailaddressverificationrequest.md b/docs/models/attemptemailaddressverificationrequest.md new file mode 100644 index 00000000..ddcf975e --- /dev/null +++ b/docs/models/attemptemailaddressverificationrequest.md @@ -0,0 +1,9 @@ +# AttemptEmailAddressVerificationRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `email_address_id` | *str* | :heavy_check_mark: | The ID of the email address whose code is being verified | +| `request_body` | [models.AttemptEmailAddressVerificationRequestBody](../models/attemptemailaddressverificationrequestbody.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/attemptemailaddressverificationrequestbody.md b/docs/models/attemptemailaddressverificationrequestbody.md new file mode 100644 index 00000000..a6092f97 --- /dev/null +++ b/docs/models/attemptemailaddressverificationrequestbody.md @@ -0,0 +1,9 @@ +# AttemptEmailAddressVerificationRequestBody + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `verification_id` | *str* | :heavy_check_mark: | The ID of the verification to check, such as one returned by prepare_verification | +| `code` | *str* | :heavy_check_mark: | The verification code that was sent to the email address | \ No newline at end of file diff --git a/docs/models/attemptphonenumberverificationrequest.md b/docs/models/attemptphonenumberverificationrequest.md new file mode 100644 index 00000000..7cc0e390 --- /dev/null +++ b/docs/models/attemptphonenumberverificationrequest.md @@ -0,0 +1,9 @@ +# AttemptPhoneNumberVerificationRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `phone_number_id` | *str* | :heavy_check_mark: | The ID of the phone number whose code is being verified | +| `request_body` | [models.AttemptPhoneNumberVerificationRequestBody](../models/attemptphonenumberverificationrequestbody.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/attemptphonenumberverificationrequestbody.md b/docs/models/attemptphonenumberverificationrequestbody.md new file mode 100644 index 00000000..2e1690cc --- /dev/null +++ b/docs/models/attemptphonenumberverificationrequestbody.md @@ -0,0 +1,9 @@ +# AttemptPhoneNumberVerificationRequestBody + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `verification_id` | *str* | :heavy_check_mark: | The ID of the verification to check, such as one returned by prepare_verification | +| `code` | *str* | :heavy_check_mark: | The verification code that was sent to the phone number | \ No newline at end of file diff --git a/docs/models/billingpaymentattemptdiscounts.md b/docs/models/billingpaymentattemptdiscounts.md new file mode 100644 index 00000000..bffc4bfc --- /dev/null +++ b/docs/models/billingpaymentattemptdiscounts.md @@ -0,0 +1,11 @@ +# BillingPaymentAttemptDiscounts + +Information about the discounts applied to the payment + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `proration` | [Nullable[models.BillingPaymentAttemptTotalsProration]](../models/billingpaymentattempttotalsproration.md) | :heavy_check_mark: | Proration details from passed subscription time | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/billingpaymentattempttotals.md b/docs/models/billingpaymentattempttotals.md index 04e35934..625bd3a4 100644 --- a/docs/models/billingpaymentattempttotals.md +++ b/docs/models/billingpaymentattempttotals.md @@ -5,11 +5,12 @@ Totals breakdown for this payment attempt. ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| `subtotal` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | -| `base_fee` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | -| `tax_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | -| `grand_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | -| `per_unit_totals` | List[[models.CommercePerUnitTotal](../models/commerceperunittotal.md)] | :heavy_minus_sign: | N/A | -| `credits` | [OptionalNullable[models.BillingPaymentAttemptCredits]](../models/billingpaymentattemptcredits.md) | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `subtotal` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `base_fee` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `tax_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `grand_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `per_unit_totals` | List[[models.SchemasCommercePerUnitTotal](../models/schemascommerceperunittotal.md)] | :heavy_minus_sign: | N/A | +| `credits` | [OptionalNullable[models.BillingPaymentAttemptCredits]](../models/billingpaymentattemptcredits.md) | :heavy_minus_sign: | N/A | +| `discounts` | [OptionalNullable[models.BillingPaymentAttemptDiscounts]](../models/billingpaymentattemptdiscounts.md) | :heavy_minus_sign: | Information about the discounts applied to the payment | \ No newline at end of file diff --git a/docs/models/billingpaymentattempttotalsproration.md b/docs/models/billingpaymentattempttotalsproration.md new file mode 100644 index 00000000..fc9f6fb8 --- /dev/null +++ b/docs/models/billingpaymentattempttotalsproration.md @@ -0,0 +1,13 @@ +# BillingPaymentAttemptTotalsProration + +Proration details from passed subscription time + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_passed` | *int* | :heavy_check_mark: | Number of days that have passed in the billing cycle | +| `cycle_days_total` | *int* | :heavy_check_mark: | Total number of days in the billing cycle | +| `cycle_passed_percent` | *float* | :heavy_check_mark: | Percentage of the billing cycle that has passed | \ No newline at end of file diff --git a/docs/models/billingpriceresponse.md b/docs/models/billingpriceresponse.md index 12971a1c..69416d08 100644 --- a/docs/models/billingpriceresponse.md +++ b/docs/models/billingpriceresponse.md @@ -17,4 +17,5 @@ | `annual_monthly_fee` | [Nullable[models.BillingPriceResponseAnnualMonthlyFee]](../models/billingpriceresponseannualmonthlyfee.md) | :heavy_check_mark: | N/A | | `description` | *OptionalNullable[str]* | :heavy_minus_sign: | The description of the price. | | `is_default` | *bool* | :heavy_check_mark: | Whether this price is the default price for its plan. | -| `created_at` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of creation. | \ No newline at end of file +| `created_at` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of creation. | +| `supported_billing_periods` | [models.SupportedBillingPeriods](../models/supportedbillingperiods.md) | :heavy_check_mark: | Which billing periods this price supports. | \ No newline at end of file diff --git a/docs/models/commerceperunittotal.md b/docs/models/commerceperunittotal.md index 8b90180c..d328cee6 100644 --- a/docs/models/commerceperunittotal.md +++ b/docs/models/commerceperunittotal.md @@ -5,6 +5,6 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `name` | *str* | :heavy_check_mark: | Name of the billable unit (for example, seats) | -| `block_size` | *int* | :heavy_check_mark: | Number of units included in each pricing block | -| `tiers` | List[[models.CommercePerUnitTotalTier](../models/commerceperunittotaltier.md)] | :heavy_check_mark: | Computed totals for each pricing tier | \ No newline at end of file +| `name` | *str* | :heavy_check_mark: | Name of the billable unit (for example, `seats`). | +| `block_size` | *int* | :heavy_check_mark: | Number of units included in each pricing block. | +| `tiers` | List[[models.CommercePerUnitTotalTier](../models/commerceperunittotaltier.md)] | :heavy_check_mark: | Computed totals for each pricing tier. | \ No newline at end of file diff --git a/docs/models/commerceperunittotaltier.md b/docs/models/commerceperunittotaltier.md index 65998837..0d3dfcb5 100644 --- a/docs/models/commerceperunittotaltier.md +++ b/docs/models/commerceperunittotaltier.md @@ -5,6 +5,6 @@ | Field | Type | Required | Description | | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `quantity` | *OptionalNullable[int]* | :heavy_minus_sign: | Units billed in this tier; null means unlimited | +| `quantity` | *OptionalNullable[int]* | :heavy_minus_sign: | Units billed in this tier; null means unlimited. | | `fee_per_block` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | | `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionitemamount.md b/docs/models/commercesubscriptionitemamount.md index 3437f6cf..830891ba 100644 --- a/docs/models/commercesubscriptionitemamount.md +++ b/docs/models/commercesubscriptionitemamount.md @@ -1,6 +1,6 @@ # CommerceSubscriptionItemAmount -Amount for the next payment. +Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount. ## Fields diff --git a/docs/models/commercesubscriptionitemdiscounts.md b/docs/models/commercesubscriptionitemdiscounts.md new file mode 100644 index 00000000..fbe1ebd2 --- /dev/null +++ b/docs/models/commercesubscriptionitemdiscounts.md @@ -0,0 +1,9 @@ +# CommerceSubscriptionItemDiscounts + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `proration` | [Nullable[models.CommerceSubscriptionItemNextPaymentProration]](../models/commercesubscriptionitemnextpaymentproration.md) | :heavy_check_mark: | N/A | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionitemnextpaymentcredits.md b/docs/models/commercesubscriptionitemnextpaymentcredits.md new file mode 100644 index 00000000..c4a16336 --- /dev/null +++ b/docs/models/commercesubscriptionitemnextpaymentcredits.md @@ -0,0 +1,10 @@ +# CommerceSubscriptionItemNextPaymentCredits + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| `proration` | [Nullable[models.CommerceSubscriptionItemNextPaymentTotalsProration]](../models/commercesubscriptionitemnextpaymenttotalsproration.md) | :heavy_check_mark: | N/A | +| `payer` | [Nullable[models.CommerceSubscriptionItemNextPaymentPayer]](../models/commercesubscriptionitemnextpaymentpayer.md) | :heavy_check_mark: | N/A | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionitemnextpaymentpayer.md b/docs/models/commercesubscriptionitemnextpaymentpayer.md new file mode 100644 index 00000000..d2f8467c --- /dev/null +++ b/docs/models/commercesubscriptionitemnextpaymentpayer.md @@ -0,0 +1,9 @@ +# CommerceSubscriptionItemNextPaymentPayer + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `remaining_balance` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `applied_amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionitemnextpaymentproration.md b/docs/models/commercesubscriptionitemnextpaymentproration.md new file mode 100644 index 00000000..62c212f1 --- /dev/null +++ b/docs/models/commercesubscriptionitemnextpaymentproration.md @@ -0,0 +1,11 @@ +# CommerceSubscriptionItemNextPaymentProration + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_passed` | *int* | :heavy_check_mark: | N/A | +| `cycle_days_total` | *int* | :heavy_check_mark: | N/A | +| `cycle_passed_percent` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionitemnextpaymenttotalsproration.md b/docs/models/commercesubscriptionitemnextpaymenttotalsproration.md new file mode 100644 index 00000000..95ab98ed --- /dev/null +++ b/docs/models/commercesubscriptionitemnextpaymenttotalsproration.md @@ -0,0 +1,11 @@ +# CommerceSubscriptionItemNextPaymentTotalsProration + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_remaining` | *int* | :heavy_check_mark: | N/A | +| `cycle_days_total` | *int* | :heavy_check_mark: | N/A | +| `cycle_remaining_percent` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionitemtotals.md b/docs/models/commercesubscriptionitemtotals.md new file mode 100644 index 00000000..857d8642 --- /dev/null +++ b/docs/models/commercesubscriptionitemtotals.md @@ -0,0 +1,16 @@ +# CommerceSubscriptionItemTotals + +Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `subtotal` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `base_fee` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `tax_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `grand_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `per_unit_totals` | List[[models.CommercePerUnitTotal](../models/commerceperunittotal.md)] | :heavy_minus_sign: | N/A | +| `credits` | [OptionalNullable[models.CommerceSubscriptionItemNextPaymentCredits]](../models/commercesubscriptionitemnextpaymentcredits.md) | :heavy_minus_sign: | N/A | +| `discounts` | [OptionalNullable[models.CommerceSubscriptionItemDiscounts]](../models/commercesubscriptionitemdiscounts.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionitemtotalsproration.md b/docs/models/commercesubscriptionitemtotalsproration.md new file mode 100644 index 00000000..4a27d33c --- /dev/null +++ b/docs/models/commercesubscriptionitemtotalsproration.md @@ -0,0 +1,13 @@ +# CommerceSubscriptionItemTotalsProration + +Proration details from passed subscription time + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_passed` | *int* | :heavy_check_mark: | Number of days that have passed in the billing cycle | +| `cycle_days_total` | *int* | :heavy_check_mark: | Total number of days in the billing cycle | +| `cycle_passed_percent` | *float* | :heavy_check_mark: | Percentage of the billing cycle that has passed | \ No newline at end of file diff --git a/docs/models/commercesubscriptionnextpayment.md b/docs/models/commercesubscriptionnextpayment.md index db7ff866..27066fa6 100644 --- a/docs/models/commercesubscriptionnextpayment.md +++ b/docs/models/commercesubscriptionnextpayment.md @@ -3,7 +3,9 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `date_` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of the next payment date. | -| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `date_` | *int* | :heavy_check_mark: | Unix timestamp (milliseconds) of the next payment date. | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `per_unit_totals` | List[[models.SchemasCommercePerUnitTotal](../models/schemascommerceperunittotal.md)] | :heavy_minus_sign: | Per-unit total breakdown (for example, seats) for the next payment. | +| `totals` | [OptionalNullable[models.CommerceSubscriptionNextPaymentTotals]](../models/commercesubscriptionnextpaymenttotals.md) | :heavy_minus_sign: | Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed. | \ No newline at end of file diff --git a/docs/models/commercesubscriptionnextpaymentcredits.md b/docs/models/commercesubscriptionnextpaymentcredits.md new file mode 100644 index 00000000..1e1c361c --- /dev/null +++ b/docs/models/commercesubscriptionnextpaymentcredits.md @@ -0,0 +1,10 @@ +# CommerceSubscriptionNextPaymentCredits + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `proration` | [Nullable[models.CommerceSubscriptionNextPaymentProration]](../models/commercesubscriptionnextpaymentproration.md) | :heavy_check_mark: | N/A | +| `payer` | [Nullable[models.CommerceSubscriptionNextPaymentPayer]](../models/commercesubscriptionnextpaymentpayer.md) | :heavy_check_mark: | N/A | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionnextpaymentdiscounts.md b/docs/models/commercesubscriptionnextpaymentdiscounts.md new file mode 100644 index 00000000..8e64dd2d --- /dev/null +++ b/docs/models/commercesubscriptionnextpaymentdiscounts.md @@ -0,0 +1,11 @@ +# CommerceSubscriptionNextPaymentDiscounts + +Information about the discounts applied to the payment + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `proration` | [Nullable[models.CommerceSubscriptionNextPaymentTotalsProration]](../models/commercesubscriptionnextpaymenttotalsproration.md) | :heavy_check_mark: | Proration details from passed subscription time | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionnextpaymentpayer.md b/docs/models/commercesubscriptionnextpaymentpayer.md new file mode 100644 index 00000000..b1aa79f3 --- /dev/null +++ b/docs/models/commercesubscriptionnextpaymentpayer.md @@ -0,0 +1,9 @@ +# CommerceSubscriptionNextPaymentPayer + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `remaining_balance` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `applied_amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionnextpaymentproration.md b/docs/models/commercesubscriptionnextpaymentproration.md new file mode 100644 index 00000000..3b496a69 --- /dev/null +++ b/docs/models/commercesubscriptionnextpaymentproration.md @@ -0,0 +1,11 @@ +# CommerceSubscriptionNextPaymentProration + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_remaining` | *int* | :heavy_check_mark: | N/A | +| `cycle_days_total` | *int* | :heavy_check_mark: | N/A | +| `cycle_remaining_percent` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/commercesubscriptionnextpaymenttotals.md b/docs/models/commercesubscriptionnextpaymenttotals.md new file mode 100644 index 00000000..5ff49cca --- /dev/null +++ b/docs/models/commercesubscriptionnextpaymenttotals.md @@ -0,0 +1,16 @@ +# CommerceSubscriptionNextPaymentTotals + +Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `subtotal` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `base_fee` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `tax_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `grand_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `per_unit_totals` | List[[models.SchemasCommercePerUnitTotal](../models/schemascommerceperunittotal.md)] | :heavy_minus_sign: | N/A | +| `credits` | [OptionalNullable[models.CommerceSubscriptionNextPaymentCredits]](../models/commercesubscriptionnextpaymentcredits.md) | :heavy_minus_sign: | N/A | +| `discounts` | [OptionalNullable[models.CommerceSubscriptionNextPaymentDiscounts]](../models/commercesubscriptionnextpaymentdiscounts.md) | :heavy_minus_sign: | Information about the discounts applied to the payment | \ No newline at end of file diff --git a/docs/models/commercesubscriptionnextpaymenttotalsproration.md b/docs/models/commercesubscriptionnextpaymenttotalsproration.md new file mode 100644 index 00000000..5a62bd4a --- /dev/null +++ b/docs/models/commercesubscriptionnextpaymenttotalsproration.md @@ -0,0 +1,13 @@ +# CommerceSubscriptionNextPaymentTotalsProration + +Proration details from passed subscription time + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_passed` | *int* | :heavy_check_mark: | Number of days that have passed in the billing cycle | +| `cycle_days_total` | *int* | :heavy_check_mark: | Total number of days in the billing cycle | +| `cycle_passed_percent` | *float* | :heavy_check_mark: | Percentage of the billing cycle that has passed | \ No newline at end of file diff --git a/docs/models/connectiontype.md b/docs/models/connectiontype.md new file mode 100644 index 00000000..3cd16c0e --- /dev/null +++ b/docs/models/connectiontype.md @@ -0,0 +1,19 @@ +# ConnectionType + +The type of enterprise connection the test run was performed against + +## Example Usage + +```python +from clerk_backend_api.models import ConnectionType + +value = ConnectionType.SAML +``` + + +## Values + +| Name | Value | +| ------- | ------- | +| `SAML` | saml | +| `OAUTH` | oauth | \ No newline at end of file diff --git a/docs/models/createbillingpricerequest.md b/docs/models/createbillingpricerequest.md index 6393b1e1..c22de317 100644 --- a/docs/models/createbillingpricerequest.md +++ b/docs/models/createbillingpricerequest.md @@ -3,10 +3,11 @@ ## Fields -| Field | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `plan_id` | *str* | :heavy_check_mark: | The ID of the plan this price belongs to. | -| `currency` | *Optional[str]* | :heavy_minus_sign: | The currency code (e.g., "USD"). Defaults to USD. | -| `amount` | *Nullable[int]* | :heavy_check_mark: | The monthly amount in cents. Must be at least $1 (100 cents) if not null. | -| `annual_monthly_amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. | -| `description` | *Optional[str]* | :heavy_minus_sign: | An optional description for this custom price. | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `plan_id` | *str* | :heavy_check_mark: | The ID of the plan this price belongs to. | +| `currency` | *Optional[str]* | :heavy_minus_sign: | The currency code (e.g., "USD"). Defaults to USD. | +| `amount` | *Nullable[int]* | :heavy_check_mark: | The monthly amount in cents. Must be at least $1 (100 cents) if not null. | +| `annual_monthly_amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. | +| `description` | *Optional[str]* | :heavy_minus_sign: | An optional description for this custom price. | +| `supported_billing_periods` | [Optional[models.CreateBillingPriceRequestSupportedBillingPeriods]](../models/createbillingpricerequestsupportedbillingperiods.md) | :heavy_minus_sign: | Which billing periods this price supports. Inferred from amounts if omitted. | \ No newline at end of file diff --git a/docs/models/createbillingpricerequestsupportedbillingperiods.md b/docs/models/createbillingpricerequestsupportedbillingperiods.md new file mode 100644 index 00000000..2e0bf3b8 --- /dev/null +++ b/docs/models/createbillingpricerequestsupportedbillingperiods.md @@ -0,0 +1,20 @@ +# CreateBillingPriceRequestSupportedBillingPeriods + +Which billing periods this price supports. Inferred from amounts if omitted. + +## Example Usage + +```python +from clerk_backend_api.models import CreateBillingPriceRequestSupportedBillingPeriods + +value = CreateBillingPriceRequestSupportedBillingPeriods.MONTH +``` + + +## Values + +| Name | Value | +| -------- | -------- | +| `MONTH` | month | +| `ANNUAL` | annual | +| `BOTH` | both | \ No newline at end of file diff --git a/docs/models/createenterpriseconnectioncustomattributes.md b/docs/models/createenterpriseconnectioncustomattributes.md index 7bfb1a92..c29c07de 100644 --- a/docs/models/createenterpriseconnectioncustomattributes.md +++ b/docs/models/createenterpriseconnectioncustomattributes.md @@ -3,9 +3,10 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `name` | *str* | :heavy_check_mark: | Display name for the custom attribute | -| `key` | *str* | :heavy_check_mark: | Key used to store the attribute in the user's metadata | -| `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims | -| `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `name` | *str* | :heavy_check_mark: | Display name for the custom attribute | +| `key` | *str* | :heavy_check_mark: | Key used to store the attribute in the user's metadata | +| `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims | +| `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | +| `multi_valued` | *Optional[bool]* | :heavy_minus_sign: | When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false. | \ No newline at end of file diff --git a/docs/models/createenterpriseconnectiontestrunrequest.md b/docs/models/createenterpriseconnectiontestrunrequest.md new file mode 100644 index 00000000..b14f6d1c --- /dev/null +++ b/docs/models/createenterpriseconnectiontestrunrequest.md @@ -0,0 +1,8 @@ +# CreateEnterpriseConnectionTestRunRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `enterprise_connection_id` | *str* | :heavy_check_mark: | The ID of the enterprise connection | \ No newline at end of file diff --git a/docs/models/createuserrequestbody.md b/docs/models/createuserrequestbody.md index 0cd3f2e1..70f2edbe 100644 --- a/docs/models/createuserrequestbody.md +++ b/docs/models/createuserrequestbody.md @@ -9,8 +9,10 @@ | `first_name` | *OptionalNullable[str]* | :heavy_minus_sign: | The first name to assign to the user | John | | `last_name` | *OptionalNullable[str]* | :heavy_minus_sign: | The last name to assign to the user | Doe | | `locale` | *OptionalNullable[str]* | :heavy_minus_sign: | The locale to assign to the user (e.g., "en-US", "fr-FR") | | -| `email_address` | List[*str*] | :heavy_minus_sign: | Email addresses to add to the user.
Must be unique across your instance.
The first email address will be set as the user's primary email address. | | -| `phone_number` | List[*str*] | :heavy_minus_sign: | Phone numbers to add to the user.
Must be unique across your instance.
The first phone number will be set as the user's primary phone number. | | +| `email_address` | List[*str*] | :heavy_minus_sign: | Email addresses to add to the user.
Must be unique across your instance.
The first email address will be set as the user's primary email address.
Created verified by default; see `email_address_identification_status` to create them reserved. | | +| `email_address_identification_status` | List[[models.EmailAddressIdentificationStatus](../models/emailaddressidentificationstatus.md)] | :heavy_minus_sign: | Controls the status each email address is created with. Runs parallel to
`email_address`: when provided, it must contain exactly one item per email
address, applied by position. When omitted or empty, every email address is
created `verified`. Set an item to `reserved` to create the corresponding
email address reserved instead (unverified but usable for sign-in and locked
so no other user can claim it). | | +| `phone_number` | List[*str*] | :heavy_minus_sign: | Phone numbers to add to the user.
Must be unique across your instance.
The first phone number will be set as the user's primary phone number.
Created verified by default; see `phone_number_identification_status` to create them reserved. | | +| `phone_number_identification_status` | List[[models.PhoneNumberIdentificationStatus](../models/phonenumberidentificationstatus.md)] | :heavy_minus_sign: | Controls the status each phone number is created with. Runs parallel to
`phone_number`: when provided, it must contain exactly one item per phone
number, applied by position. When omitted or empty, every phone number is
created `verified`. Set an item to `reserved` to create the corresponding
phone number reserved instead (unverified but usable for sign-in and locked
so no other user can claim it). | | | `web3_wallet` | List[*str*] | :heavy_minus_sign: | Web3 wallets to add to the user.
Must be unique across your instance.
The first wallet will be set as the user's primary wallet. | | | `username` | *OptionalNullable[str]* | :heavy_minus_sign: | The username to give to the user.
It must be unique across your instance. | johndoe123 | | `password` | *OptionalNullable[str]* | :heavy_minus_sign: | The plaintext password to give the user.
Must be at least 8 characters long, and cannot be in any list of hacked passwords. | Secure*Pass4 | diff --git a/docs/models/customattributes.md b/docs/models/customattributes.md index 4ef008ef..bde59d99 100644 --- a/docs/models/customattributes.md +++ b/docs/models/customattributes.md @@ -3,9 +3,10 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | -| `name` | *str* | :heavy_check_mark: | Display name for the custom attribute | -| `key` | *str* | :heavy_check_mark: | Key used to store the attribute in the user's public/private/unsafe metadata | -| `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims) | -| `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `name` | *str* | :heavy_check_mark: | Display name for the custom attribute | +| `key` | *str* | :heavy_check_mark: | Key used to store the attribute in the user's public/private/unsafe metadata | +| `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims) | +| `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | +| `multi_valued` | *Optional[bool]* | :heavy_minus_sign: | When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false. | \ No newline at end of file diff --git a/docs/models/discounts.md b/docs/models/discounts.md new file mode 100644 index 00000000..cccfb8e2 --- /dev/null +++ b/docs/models/discounts.md @@ -0,0 +1,11 @@ +# Discounts + +Information about the discounts applied to the payment + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `proration` | [Nullable[models.CommerceSubscriptionItemTotalsProration]](../models/commercesubscriptionitemtotalsproration.md) | :heavy_check_mark: | Proration details from passed subscription time | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/emailaddressidentificationstatus.md b/docs/models/emailaddressidentificationstatus.md new file mode 100644 index 00000000..7e2cdee3 --- /dev/null +++ b/docs/models/emailaddressidentificationstatus.md @@ -0,0 +1,17 @@ +# EmailAddressIdentificationStatus + +## Example Usage + +```python +from clerk_backend_api.models import EmailAddressIdentificationStatus + +value = EmailAddressIdentificationStatus.VERIFIED +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `VERIFIED` | verified | +| `RESERVED` | reserved | \ No newline at end of file diff --git a/docs/models/enterpriseconnectiontestrun.md b/docs/models/enterpriseconnectiontestrun.md new file mode 100644 index 00000000..777cd674 --- /dev/null +++ b/docs/models/enterpriseconnectiontestrun.md @@ -0,0 +1,15 @@ +# EnterpriseConnectionTestRun + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `id` | *str* | :heavy_check_mark: | The test run ID | +| `status` | [models.EnterpriseConnectionTestRunStatus](../models/enterpriseconnectiontestrunstatus.md) | :heavy_check_mark: | The status of the test run | +| `connection_type` | [models.ConnectionType](../models/connectiontype.md) | :heavy_check_mark: | The type of enterprise connection the test run was performed against | +| `parsed_user_info` | [OptionalNullable[models.ParsedUserInfo]](../models/parseduserinfo.md) | :heavy_minus_sign: | The user information parsed from the IdP response | +| `logs` | List[[models.Logs](../models/logs.md)] | :heavy_minus_sign: | Log entries captured during the test run | +| `saml` | [OptionalNullable[models.Saml]](../models/saml.md) | :heavy_minus_sign: | SAML-specific metadata, present for SAML connections | +| `oauth` | [OptionalNullable[models.Oauth]](../models/oauth.md) | :heavy_minus_sign: | OAuth-specific metadata, present for OIDC connections | +| `created_at` | *int* | :heavy_check_mark: | Unix timestamp in milliseconds when the test run was created | \ No newline at end of file diff --git a/docs/models/enterpriseconnectiontestrunresponse.md b/docs/models/enterpriseconnectiontestrunresponse.md new file mode 100644 index 00000000..c045cced --- /dev/null +++ b/docs/models/enterpriseconnectiontestrunresponse.md @@ -0,0 +1,10 @@ +# EnterpriseConnectionTestRunResponse + +A URL to initiate an enterprise connection test run + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `url` | *str* | :heavy_check_mark: | A short-lived URL that can be used to initiate the test run flow | \ No newline at end of file diff --git a/docs/models/enterpriseconnectiontestruns.md b/docs/models/enterpriseconnectiontestruns.md new file mode 100644 index 00000000..969ed685 --- /dev/null +++ b/docs/models/enterpriseconnectiontestruns.md @@ -0,0 +1,11 @@ +# EnterpriseConnectionTestRuns + +A list of enterprise connection test runs + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `data` | List[[models.EnterpriseConnectionTestRun](../models/enterpriseconnectiontestrun.md)] | :heavy_check_mark: | N/A | +| `total_count` | *int* | :heavy_check_mark: | Total number of test runs | \ No newline at end of file diff --git a/docs/models/enterpriseconnectiontestrunstatus.md b/docs/models/enterpriseconnectiontestrunstatus.md new file mode 100644 index 00000000..8f79bf03 --- /dev/null +++ b/docs/models/enterpriseconnectiontestrunstatus.md @@ -0,0 +1,20 @@ +# EnterpriseConnectionTestRunStatus + +The status of the test run + +## Example Usage + +```python +from clerk_backend_api.models import EnterpriseConnectionTestRunStatus + +value = EnterpriseConnectionTestRunStatus.PENDING +``` + + +## Values + +| Name | Value | +| --------- | --------- | +| `PENDING` | pending | +| `SUCCESS` | success | +| `FAILED` | failed | \ No newline at end of file diff --git a/docs/models/externalaccountwithverificationverification.md b/docs/models/externalaccountwithverificationverification.md index d1ce31d5..ed47e5a0 100644 --- a/docs/models/externalaccountwithverificationverification.md +++ b/docs/models/externalaccountwithverificationverification.md @@ -3,10 +3,10 @@ ## Supported Types -### `models.Oauth` +### `models.VerificationOauthVerificationOauth` ```python -value: models.Oauth = /* values here */ +value: models.VerificationOauthVerificationOauth = /* values here */ ``` ### `models.GoogleOneTap` diff --git a/docs/models/getpublicinterstitialrequest.md b/docs/models/getpublicinterstitialrequest.md index 11165136..6f8bcac7 100644 --- a/docs/models/getpublicinterstitialrequest.md +++ b/docs/models/getpublicinterstitialrequest.md @@ -11,7 +11,4 @@ | `proxy_url` | *Optional[str]* | :heavy_minus_sign: | The proxy URL of your instance | | | `domain` | *Optional[str]* | :heavy_minus_sign: | The domain of your instance | | | `sign_in_url` | *Optional[str]* | :heavy_minus_sign: | The sign in URL of your instance | | -| `application_name` | *Optional[str]* | :heavy_minus_sign: | The application name shown in the interstitial UI | | -| `logo_url` | *Optional[str]* | :heavy_minus_sign: | The absolute HTTP(S) application logo URL shown in the interstitial UI | | -| `flow` | *Optional[str]* | :heavy_minus_sign: | The authentication flow shown in the interstitial UI | | | `use_domain_for_script` | *Optional[bool]* | :heavy_minus_sign: | Whether to use the domain for the script URL | | \ No newline at end of file diff --git a/docs/models/identificationstatus.md b/docs/models/identificationstatus.md new file mode 100644 index 00000000..6fc14e3b --- /dev/null +++ b/docs/models/identificationstatus.md @@ -0,0 +1,21 @@ +# IdentificationStatus + +Controls the status of the replacement email address. Defaults to `verified`. Set to +`reserved` to create it reserved (unverified but usable for sign-in and locked) +instead of verified. + +## Example Usage + +```python +from clerk_backend_api.models import IdentificationStatus + +value = IdentificationStatus.VERIFIED +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `VERIFIED` | verified | +| `RESERVED` | reserved | \ No newline at end of file diff --git a/docs/models/listenterpriseconnectiontestrunsqueryparamstatus.md b/docs/models/listenterpriseconnectiontestrunsqueryparamstatus.md new file mode 100644 index 00000000..a56ef62c --- /dev/null +++ b/docs/models/listenterpriseconnectiontestrunsqueryparamstatus.md @@ -0,0 +1,18 @@ +# ListEnterpriseConnectionTestRunsQueryParamStatus + +## Example Usage + +```python +from clerk_backend_api.models import ListEnterpriseConnectionTestRunsQueryParamStatus + +value = ListEnterpriseConnectionTestRunsQueryParamStatus.PENDING +``` + + +## Values + +| Name | Value | +| --------- | --------- | +| `PENDING` | pending | +| `SUCCESS` | success | +| `FAILED` | failed | \ No newline at end of file diff --git a/docs/models/listenterpriseconnectiontestrunsrequest.md b/docs/models/listenterpriseconnectiontestrunsrequest.md new file mode 100644 index 00000000..7fdc8c21 --- /dev/null +++ b/docs/models/listenterpriseconnectiontestrunsrequest.md @@ -0,0 +1,11 @@ +# ListEnterpriseConnectionTestRunsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `enterprise_connection_id` | *str* | :heavy_check_mark: | The ID of the enterprise connection | | +| `status` | List[[models.ListEnterpriseConnectionTestRunsQueryParamStatus](../models/listenterpriseconnectiontestrunsqueryparamstatus.md)] | :heavy_minus_sign: | Filter test runs by status (may be repeated) | | +| `limit` | *Optional[int]* | :heavy_minus_sign: | Applies a limit to the number of results returned.
Can be used for paginating the results together with `offset`. | 20 | +| `offset` | *Optional[int]* | :heavy_minus_sign: | Skip the first `offset` results when paginating.
Needs to be an integer greater or equal to zero.
To be used in conjunction with `limit`. | 10 | \ No newline at end of file diff --git a/docs/models/logs.md b/docs/models/logs.md new file mode 100644 index 00000000..7db54dde --- /dev/null +++ b/docs/models/logs.md @@ -0,0 +1,11 @@ +# Logs + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `level` | *str* | :heavy_check_mark: | N/A | +| `code` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `short_message` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `message` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/nextinvoice.md b/docs/models/nextinvoice.md index 1fba3802..fac74027 100644 --- a/docs/models/nextinvoice.md +++ b/docs/models/nextinvoice.md @@ -7,5 +7,7 @@ Information about the next invoice. | Field | Type | Required | Description | | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -| `amount` | [OptionalNullable[models.SchemasCommerceSubscriptionItemNextInvoiceAmount]](../models/schemascommercesubscriptionitemnextinvoiceamount.md) | :heavy_minus_sign: | Amount for the next payment. | -| `date_` | *OptionalNullable[int]* | :heavy_minus_sign: | Unix timestamp (in milliseconds) for the next payment date. | \ No newline at end of file +| `amount` | [OptionalNullable[models.SchemasCommerceSubscriptionItemNextInvoiceAmount]](../models/schemascommercesubscriptionitemnextinvoiceamount.md) | :heavy_minus_sign: | Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount. | +| `date_` | *OptionalNullable[int]* | :heavy_minus_sign: | Unix timestamp (in milliseconds) for the next payment date. | +| `per_unit_totals` | List[[models.CommercePerUnitTotal](../models/commerceperunittotal.md)] | :heavy_minus_sign: | Per-unit total breakdown (for example, seats) for the next payment. | +| `totals` | [OptionalNullable[models.SchemasCommerceSubscriptionItemTotals]](../models/schemascommercesubscriptionitemtotals.md) | :heavy_minus_sign: | Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed. | \ No newline at end of file diff --git a/docs/models/nextpayment.md b/docs/models/nextpayment.md index dc8bc54e..4bba6a94 100644 --- a/docs/models/nextpayment.md +++ b/docs/models/nextpayment.md @@ -5,7 +5,9 @@ Information about the next payment. ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `amount` | [OptionalNullable[models.CommerceSubscriptionItemAmount]](../models/commercesubscriptionitemamount.md) | :heavy_minus_sign: | Amount for the next payment. | -| `date_` | *OptionalNullable[int]* | :heavy_minus_sign: | Unix timestamp (in milliseconds) for the next payment date. | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `amount` | [OptionalNullable[models.CommerceSubscriptionItemAmount]](../models/commercesubscriptionitemamount.md) | :heavy_minus_sign: | Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount. | +| `date_` | *OptionalNullable[int]* | :heavy_minus_sign: | Unix timestamp (in milliseconds) for the next payment date. | +| `per_unit_totals` | List[[models.CommercePerUnitTotal](../models/commerceperunittotal.md)] | :heavy_minus_sign: | Per-unit total breakdown (for example, seats) for the next payment. | +| `totals` | [OptionalNullable[models.CommerceSubscriptionItemTotals]](../models/commercesubscriptionitemtotals.md) | :heavy_minus_sign: | Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed. | \ No newline at end of file diff --git a/docs/models/oauth.md b/docs/models/oauth.md index 6bf45991..9283de95 100644 --- a/docs/models/oauth.md +++ b/docs/models/oauth.md @@ -1,15 +1,12 @@ # Oauth +OAuth-specific metadata, present for OIDC connections + ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `object` | [Optional[models.VerificationOauthVerificationObject]](../models/verificationoauthverificationobject.md) | :heavy_minus_sign: | N/A | -| `status` | [models.VerificationOauthVerificationStatus](../models/verificationoauthverificationstatus.md) | :heavy_check_mark: | N/A | -| `strategy` | *str* | :heavy_check_mark: | N/A | -| `external_verification_redirect_url` | *Optional[str]* | :heavy_minus_sign: | N/A | -| `error` | [OptionalNullable[models.VerificationOauthVerificationError]](../models/verificationoauthverificationerror.md) | :heavy_minus_sign: | N/A | -| `expire_at` | *int* | :heavy_check_mark: | N/A | -| `attempts` | *Nullable[int]* | :heavy_check_mark: | N/A | -| `verified_at_client` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id_token` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `access_token` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `user_info` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/otp.md b/docs/models/otp.md index b2574c66..6579c305 100644 --- a/docs/models/otp.md +++ b/docs/models/otp.md @@ -10,4 +10,5 @@ | `strategy` | [models.Strategy](../models/strategy.md) | :heavy_check_mark: | N/A | | `attempts` | *Nullable[int]* | :heavy_check_mark: | N/A | | `expire_at` | *Nullable[int]* | :heavy_check_mark: | N/A | +| `channel` | *OptionalNullable[str]* | :heavy_minus_sign: | The delivery channel of the code (phone codes only). | | `verified_at_client` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/parseduserinfo.md b/docs/models/parseduserinfo.md new file mode 100644 index 00000000..43abaea4 --- /dev/null +++ b/docs/models/parseduserinfo.md @@ -0,0 +1,13 @@ +# ParsedUserInfo + +The user information parsed from the IdP response + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `email_address` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `first_name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `last_name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `user_id` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/phonenumberidentificationstatus.md b/docs/models/phonenumberidentificationstatus.md new file mode 100644 index 00000000..e812af7e --- /dev/null +++ b/docs/models/phonenumberidentificationstatus.md @@ -0,0 +1,17 @@ +# PhoneNumberIdentificationStatus + +## Example Usage + +```python +from clerk_backend_api.models import PhoneNumberIdentificationStatus + +value = PhoneNumberIdentificationStatus.VERIFIED +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `VERIFIED` | verified | +| `RESERVED` | reserved | \ No newline at end of file diff --git a/docs/models/prepareemailaddressverificationrequest.md b/docs/models/prepareemailaddressverificationrequest.md new file mode 100644 index 00000000..5bdeb1a6 --- /dev/null +++ b/docs/models/prepareemailaddressverificationrequest.md @@ -0,0 +1,8 @@ +# PrepareEmailAddressVerificationRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `email_address_id` | *str* | :heavy_check_mark: | The ID of the email address to send the verification code to | \ No newline at end of file diff --git a/docs/models/preparephonenumberverificationrequest.md b/docs/models/preparephonenumberverificationrequest.md new file mode 100644 index 00000000..cd73120c --- /dev/null +++ b/docs/models/preparephonenumberverificationrequest.md @@ -0,0 +1,8 @@ +# PreparePhoneNumberVerificationRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------- | +| `phone_number_id` | *str* | :heavy_check_mark: | The ID of the phone number to send the verification code to | \ No newline at end of file diff --git a/docs/models/replaceuseremailaddressrequestbody.md b/docs/models/replaceuseremailaddressrequestbody.md index dee6c2bf..d49df8a6 100644 --- a/docs/models/replaceuseremailaddressrequestbody.md +++ b/docs/models/replaceuseremailaddressrequestbody.md @@ -3,6 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `email_address` | *str* | :heavy_check_mark: | The new email address. Must adhere to the RFC 5322 specification for email address format. | \ No newline at end of file +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `email_address` | *str* | :heavy_check_mark: | The new email address. Must adhere to the RFC 5322 specification for email address format. | +| `identification_status` | [Optional[models.IdentificationStatus]](../models/identificationstatus.md) | :heavy_minus_sign: | Controls the status of the replacement email address. Defaults to `verified`. Set to
`reserved` to create it reserved (unverified but usable for sign-in and locked)
instead of verified. | \ No newline at end of file diff --git a/docs/models/replaceuserphonenumberidentificationstatus.md b/docs/models/replaceuserphonenumberidentificationstatus.md new file mode 100644 index 00000000..6113e1e3 --- /dev/null +++ b/docs/models/replaceuserphonenumberidentificationstatus.md @@ -0,0 +1,21 @@ +# ReplaceUserPhoneNumberIdentificationStatus + +Controls the status of the replacement phone number. Defaults to `verified`. Set to +`reserved` to create it reserved (unverified but usable for sign-in and locked) +instead of verified. + +## Example Usage + +```python +from clerk_backend_api.models import ReplaceUserPhoneNumberIdentificationStatus + +value = ReplaceUserPhoneNumberIdentificationStatus.VERIFIED +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `VERIFIED` | verified | +| `RESERVED` | reserved | \ No newline at end of file diff --git a/docs/models/replaceuserphonenumberrequestbody.md b/docs/models/replaceuserphonenumberrequestbody.md index 01a02fc0..8c9678c6 100644 --- a/docs/models/replaceuserphonenumberrequestbody.md +++ b/docs/models/replaceuserphonenumberrequestbody.md @@ -3,6 +3,7 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `phone_number` | *str* | :heavy_check_mark: | The new phone number. Must adhere to the E.164 standard for phone number format. | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `phone_number` | *str* | :heavy_check_mark: | The new phone number. Must adhere to the E.164 standard for phone number format. | +| `identification_status` | [Optional[models.ReplaceUserPhoneNumberIdentificationStatus]](../models/replaceuserphonenumberidentificationstatus.md) | :heavy_minus_sign: | Controls the status of the replacement phone number. Defaults to `verified`. Set to
`reserved` to create it reserved (unverified but usable for sign-in and locked)
instead of verified. | \ No newline at end of file diff --git a/docs/models/saml.md b/docs/models/saml.md index c3246838..3157eb66 100644 --- a/docs/models/saml.md +++ b/docs/models/saml.md @@ -1,15 +1,12 @@ # Saml +SAML-specific metadata, present for SAML connections + ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | -| `object` | [Optional[models.VerificationSamlVerificationObject]](../models/verificationsamlverificationobject.md) | :heavy_minus_sign: | N/A | -| `status` | [models.VerificationSamlVerificationStatus](../models/verificationsamlverificationstatus.md) | :heavy_check_mark: | N/A | -| `strategy` | [models.VerificationSamlVerificationStrategy](../models/verificationsamlverificationstrategy.md) | :heavy_check_mark: | N/A | -| `external_verification_redirect_url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | -| `error` | [OptionalNullable[models.VerificationError]](../models/verificationerror.md) | :heavy_minus_sign: | N/A | -| `expire_at` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | -| `attempts` | *Nullable[int]* | :heavy_check_mark: | N/A | -| `verified_at_client` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `saml_request` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `saml_response` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `relay_state` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommerceperunittotal.md b/docs/models/schemascommerceperunittotal.md new file mode 100644 index 00000000..12f68cbf --- /dev/null +++ b/docs/models/schemascommerceperunittotal.md @@ -0,0 +1,10 @@ +# SchemasCommercePerUnitTotal + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `name` | *str* | :heavy_check_mark: | Name of the billable unit (for example, seats) | +| `block_size` | *int* | :heavy_check_mark: | Number of units included in each pricing block | +| `tiers` | List[[models.SchemasCommercePerUnitTotalTier](../models/schemascommerceperunittotaltier.md)] | :heavy_check_mark: | Computed totals for each pricing tier | \ No newline at end of file diff --git a/docs/models/schemascommerceperunittotaltier.md b/docs/models/schemascommerceperunittotaltier.md new file mode 100644 index 00000000..2852b312 --- /dev/null +++ b/docs/models/schemascommerceperunittotaltier.md @@ -0,0 +1,10 @@ +# SchemasCommercePerUnitTotalTier + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `quantity` | *OptionalNullable[int]* | :heavy_minus_sign: | Units billed in this tier; null means unlimited | +| `fee_per_block` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemcredits.md b/docs/models/schemascommercesubscriptionitemcredits.md new file mode 100644 index 00000000..b44c3848 --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemcredits.md @@ -0,0 +1,10 @@ +# SchemasCommerceSubscriptionItemCredits + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `proration` | [Nullable[models.SchemasCommerceSubscriptionItemProration]](../models/schemascommercesubscriptionitemproration.md) | :heavy_check_mark: | N/A | +| `payer` | [Nullable[models.SchemasCommerceSubscriptionItemPayer]](../models/schemascommercesubscriptionitempayer.md) | :heavy_check_mark: | N/A | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemdiscounts.md b/docs/models/schemascommercesubscriptionitemdiscounts.md new file mode 100644 index 00000000..55890323 --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemdiscounts.md @@ -0,0 +1,9 @@ +# SchemasCommerceSubscriptionItemDiscounts + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `proration` | [Nullable[models.SchemasCommerceSubscriptionItemNextInvoiceProration]](../models/schemascommercesubscriptionitemnextinvoiceproration.md) | :heavy_check_mark: | N/A | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemnextinvoiceamount.md b/docs/models/schemascommercesubscriptionitemnextinvoiceamount.md index 2d3a0e88..e576cf06 100644 --- a/docs/models/schemascommercesubscriptionitemnextinvoiceamount.md +++ b/docs/models/schemascommercesubscriptionitemnextinvoiceamount.md @@ -1,6 +1,6 @@ # SchemasCommerceSubscriptionItemNextInvoiceAmount -Amount for the next payment. +Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount. ## Fields diff --git a/docs/models/schemascommercesubscriptionitemnextinvoiceproration.md b/docs/models/schemascommercesubscriptionitemnextinvoiceproration.md new file mode 100644 index 00000000..ce42dae6 --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemnextinvoiceproration.md @@ -0,0 +1,11 @@ +# SchemasCommerceSubscriptionItemNextInvoiceProration + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_passed` | *int* | :heavy_check_mark: | N/A | +| `cycle_days_total` | *int* | :heavy_check_mark: | N/A | +| `cycle_passed_percent` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemnextpayment.md b/docs/models/schemascommercesubscriptionitemnextpayment.md index dc04b52e..9a067e3c 100644 --- a/docs/models/schemascommercesubscriptionitemnextpayment.md +++ b/docs/models/schemascommercesubscriptionitemnextpayment.md @@ -7,5 +7,7 @@ Information about the next payment. | Field | Type | Required | Description | | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------ | -| `amount` | [OptionalNullable[models.SchemasCommerceSubscriptionItemNextPaymentAmount]](../models/schemascommercesubscriptionitemnextpaymentamount.md) | :heavy_minus_sign: | Amount for the next payment. | -| `date_` | *OptionalNullable[int]* | :heavy_minus_sign: | Unix timestamp (in milliseconds) for the next payment date. | \ No newline at end of file +| `amount` | [OptionalNullable[models.SchemasCommerceSubscriptionItemNextPaymentAmount]](../models/schemascommercesubscriptionitemnextpaymentamount.md) | :heavy_minus_sign: | Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount. | +| `date_` | *OptionalNullable[int]* | :heavy_minus_sign: | Unix timestamp (in milliseconds) for the next payment date. | +| `per_unit_totals` | List[[models.CommercePerUnitTotal](../models/commerceperunittotal.md)] | :heavy_minus_sign: | Per-unit total breakdown (for example, seats) for the next payment. | +| `totals` | [OptionalNullable[models.SchemasCommerceSubscriptionItemNextPaymentTotals]](../models/schemascommercesubscriptionitemnextpaymenttotals.md) | :heavy_minus_sign: | Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed. | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemnextpaymentamount.md b/docs/models/schemascommercesubscriptionitemnextpaymentamount.md index 30dce067..8a32881e 100644 --- a/docs/models/schemascommercesubscriptionitemnextpaymentamount.md +++ b/docs/models/schemascommercesubscriptionitemnextpaymentamount.md @@ -1,6 +1,6 @@ # SchemasCommerceSubscriptionItemNextPaymentAmount -Amount for the next payment. +Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount. ## Fields diff --git a/docs/models/schemascommercesubscriptionitemnextpaymentcredits.md b/docs/models/schemascommercesubscriptionitemnextpaymentcredits.md new file mode 100644 index 00000000..2b0b9f9c --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemnextpaymentcredits.md @@ -0,0 +1,10 @@ +# SchemasCommerceSubscriptionItemNextPaymentCredits + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `proration` | [Nullable[models.SchemasCommerceSubscriptionItemNextPaymentProration]](../models/schemascommercesubscriptionitemnextpaymentproration.md) | :heavy_check_mark: | N/A | +| `payer` | [Nullable[models.SchemasCommerceSubscriptionItemNextPaymentPayer]](../models/schemascommercesubscriptionitemnextpaymentpayer.md) | :heavy_check_mark: | N/A | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemnextpaymentdiscounts.md b/docs/models/schemascommercesubscriptionitemnextpaymentdiscounts.md new file mode 100644 index 00000000..3f790bdf --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemnextpaymentdiscounts.md @@ -0,0 +1,9 @@ +# SchemasCommerceSubscriptionItemNextPaymentDiscounts + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `proration` | [Nullable[models.SchemasCommerceSubscriptionItemNextPaymentTotalsProration]](../models/schemascommercesubscriptionitemnextpaymenttotalsproration.md) | :heavy_check_mark: | N/A | +| `total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemnextpaymentpayer.md b/docs/models/schemascommercesubscriptionitemnextpaymentpayer.md new file mode 100644 index 00000000..c1ddedc4 --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemnextpaymentpayer.md @@ -0,0 +1,9 @@ +# SchemasCommerceSubscriptionItemNextPaymentPayer + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `remaining_balance` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `applied_amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemnextpaymentproration.md b/docs/models/schemascommercesubscriptionitemnextpaymentproration.md new file mode 100644 index 00000000..d9f79478 --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemnextpaymentproration.md @@ -0,0 +1,11 @@ +# SchemasCommerceSubscriptionItemNextPaymentProration + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_remaining` | *int* | :heavy_check_mark: | N/A | +| `cycle_days_total` | *int* | :heavy_check_mark: | N/A | +| `cycle_remaining_percent` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemnextpaymenttotals.md b/docs/models/schemascommercesubscriptionitemnextpaymenttotals.md new file mode 100644 index 00000000..2623247c --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemnextpaymenttotals.md @@ -0,0 +1,16 @@ +# SchemasCommerceSubscriptionItemNextPaymentTotals + +Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| `subtotal` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `base_fee` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `tax_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `grand_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `per_unit_totals` | List[[models.CommercePerUnitTotal](../models/commerceperunittotal.md)] | :heavy_minus_sign: | N/A | +| `credits` | [OptionalNullable[models.SchemasCommerceSubscriptionItemNextPaymentCredits]](../models/schemascommercesubscriptionitemnextpaymentcredits.md) | :heavy_minus_sign: | N/A | +| `discounts` | [OptionalNullable[models.SchemasCommerceSubscriptionItemNextPaymentDiscounts]](../models/schemascommercesubscriptionitemnextpaymentdiscounts.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemnextpaymenttotalsproration.md b/docs/models/schemascommercesubscriptionitemnextpaymenttotalsproration.md new file mode 100644 index 00000000..4e1633d3 --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemnextpaymenttotalsproration.md @@ -0,0 +1,11 @@ +# SchemasCommerceSubscriptionItemNextPaymentTotalsProration + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_passed` | *int* | :heavy_check_mark: | N/A | +| `cycle_days_total` | *int* | :heavy_check_mark: | N/A | +| `cycle_passed_percent` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitempayer.md b/docs/models/schemascommercesubscriptionitempayer.md new file mode 100644 index 00000000..be7e0200 --- /dev/null +++ b/docs/models/schemascommercesubscriptionitempayer.md @@ -0,0 +1,9 @@ +# SchemasCommerceSubscriptionItemPayer + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `remaining_balance` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `applied_amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemproration.md b/docs/models/schemascommercesubscriptionitemproration.md new file mode 100644 index 00000000..7e917dc0 --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemproration.md @@ -0,0 +1,11 @@ +# SchemasCommerceSubscriptionItemProration + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `amount` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `cycle_days_remaining` | *int* | :heavy_check_mark: | N/A | +| `cycle_days_total` | *int* | :heavy_check_mark: | N/A | +| `cycle_remaining_percent` | *float* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/schemascommercesubscriptionitemtotals.md b/docs/models/schemascommercesubscriptionitemtotals.md new file mode 100644 index 00000000..d9394b7a --- /dev/null +++ b/docs/models/schemascommercesubscriptionitemtotals.md @@ -0,0 +1,16 @@ +# SchemasCommerceSubscriptionItemTotals + +Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| `subtotal` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `base_fee` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `tax_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `grand_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | +| `per_unit_totals` | List[[models.CommercePerUnitTotal](../models/commerceperunittotal.md)] | :heavy_minus_sign: | N/A | +| `credits` | [OptionalNullable[models.SchemasCommerceSubscriptionItemCredits]](../models/schemascommercesubscriptionitemcredits.md) | :heavy_minus_sign: | N/A | +| `discounts` | [OptionalNullable[models.SchemasCommerceSubscriptionItemDiscounts]](../models/schemascommercesubscriptionitemdiscounts.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/seats.md b/docs/models/seats.md index 75f4bc7f..3d2d0b38 100644 --- a/docs/models/seats.md +++ b/docs/models/seats.md @@ -5,7 +5,7 @@ Seat quantity for seat-based billing. ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| `quantity` | *Nullable[int]* | :heavy_check_mark: | Seat quantity being billed; null means unlimited | -| `tiers` | List[[models.CommercePerUnitTotalTier](../models/commerceperunittotaltier.md)] | :heavy_minus_sign: | Per-unit cost breakdown by pricing tier | \ No newline at end of file +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `quantity` | *Nullable[int]* | :heavy_check_mark: | Seat quantity being billed; null means unlimited | +| `tiers` | List[[models.SchemasCommercePerUnitTotalTier](../models/schemascommerceperunittotaltier.md)] | :heavy_minus_sign: | Per-unit cost breakdown by pricing tier | \ No newline at end of file diff --git a/docs/models/supportedbillingperiods.md b/docs/models/supportedbillingperiods.md new file mode 100644 index 00000000..82e17efb --- /dev/null +++ b/docs/models/supportedbillingperiods.md @@ -0,0 +1,20 @@ +# SupportedBillingPeriods + +Which billing periods this price supports. + +## Example Usage + +```python +from clerk_backend_api.models import SupportedBillingPeriods + +value = SupportedBillingPeriods.MONTH +``` + + +## Values + +| Name | Value | +| -------- | -------- | +| `MONTH` | month | +| `ANNUAL` | annual | +| `BOTH` | both | \ No newline at end of file diff --git a/docs/models/totals.md b/docs/models/totals.md index 7c94d87b..7b48dffb 100644 --- a/docs/models/totals.md +++ b/docs/models/totals.md @@ -11,5 +11,6 @@ Totals for this subscription item. | `base_fee` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | | `tax_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | | `grand_total` | [models.CommerceMoneyResponse](../models/commercemoneyresponse.md) | :heavy_check_mark: | N/A | -| `per_unit_totals` | List[[models.CommercePerUnitTotal](../models/commerceperunittotal.md)] | :heavy_minus_sign: | N/A | -| `credits` | [OptionalNullable[models.CommerceSubscriptionItemCredits]](../models/commercesubscriptionitemcredits.md) | :heavy_minus_sign: | N/A | \ No newline at end of file +| `per_unit_totals` | List[[models.SchemasCommercePerUnitTotal](../models/schemascommerceperunittotal.md)] | :heavy_minus_sign: | N/A | +| `credits` | [OptionalNullable[models.CommerceSubscriptionItemCredits]](../models/commercesubscriptionitemcredits.md) | :heavy_minus_sign: | N/A | +| `discounts` | [OptionalNullable[models.Discounts]](../models/discounts.md) | :heavy_minus_sign: | Information about the discounts applied to the payment | \ No newline at end of file diff --git a/docs/models/updateenterpriseconnectioncustomattributes.md b/docs/models/updateenterpriseconnectioncustomattributes.md index 76e2fb6e..0a3d68ef 100644 --- a/docs/models/updateenterpriseconnectioncustomattributes.md +++ b/docs/models/updateenterpriseconnectioncustomattributes.md @@ -3,9 +3,10 @@ ## Fields -| Field | Type | Required | Description | -| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | -| `name` | *str* | :heavy_check_mark: | Display name for the custom attribute | -| `key` | *str* | :heavy_check_mark: | Key used to store the attribute in the user's metadata | -| `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims | -| `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `name` | *str* | :heavy_check_mark: | Display name for the custom attribute | +| `key` | *str* | :heavy_check_mark: | Key used to store the attribute in the user's metadata | +| `sso_path` | *Optional[str]* | :heavy_minus_sign: | Path to extract the attribute value from SSO claims | +| `scim_path` | *Optional[str]* | :heavy_minus_sign: | GJSON path to extract the attribute value from SCIM user resources | +| `multi_valued` | *Optional[bool]* | :heavy_minus_sign: | When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false. | \ No newline at end of file diff --git a/docs/models/verification.md b/docs/models/verification.md index 7efb33ad..440aef84 100644 --- a/docs/models/verification.md +++ b/docs/models/verification.md @@ -27,10 +27,10 @@ value: models.FromOAuth = /* values here */ value: models.Ticket = /* values here */ ``` -### `models.Saml` +### `models.VerificationSAMLVerificationEmailAddressSAML` ```python -value: models.Saml = /* values here */ +value: models.VerificationSAMLVerificationEmailAddressSAML = /* values here */ ``` ### `models.EmailLink` diff --git a/docs/models/verificationoauthverificationoauth.md b/docs/models/verificationoauthverificationoauth.md new file mode 100644 index 00000000..609ae159 --- /dev/null +++ b/docs/models/verificationoauthverificationoauth.md @@ -0,0 +1,15 @@ +# VerificationOauthVerificationOauth + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `object` | [Optional[models.VerificationOauthVerificationObject]](../models/verificationoauthverificationobject.md) | :heavy_minus_sign: | N/A | +| `status` | [models.VerificationOauthVerificationStatus](../models/verificationoauthverificationstatus.md) | :heavy_check_mark: | N/A | +| `strategy` | *str* | :heavy_check_mark: | N/A | +| `external_verification_redirect_url` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `error` | [OptionalNullable[models.VerificationOauthVerificationError]](../models/verificationoauthverificationerror.md) | :heavy_minus_sign: | N/A | +| `expire_at` | *int* | :heavy_check_mark: | N/A | +| `attempts` | *Nullable[int]* | :heavy_check_mark: | N/A | +| `verified_at_client` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/verificationotp.md b/docs/models/verificationotp.md index 0e6596b5..1c92573d 100644 --- a/docs/models/verificationotp.md +++ b/docs/models/verificationotp.md @@ -10,4 +10,5 @@ | `strategy` | [models.VerificationOtpVerificationStrategy](../models/verificationotpverificationstrategy.md) | :heavy_check_mark: | N/A | | `attempts` | *Nullable[int]* | :heavy_check_mark: | N/A | | `expire_at` | *Nullable[int]* | :heavy_check_mark: | N/A | +| `channel` | *OptionalNullable[str]* | :heavy_minus_sign: | The delivery channel of the code (phone codes only). | | `verified_at_client` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/verificationresponse.md b/docs/models/verificationresponse.md new file mode 100644 index 00000000..1b09ecd3 --- /dev/null +++ b/docs/models/verificationresponse.md @@ -0,0 +1,17 @@ +# VerificationResponse + +The verification. After prepare_verification it is pending (unverified); +after attempt_verification its status reflects the attempt outcome. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `object` | *Optional[str]* | :heavy_minus_sign: | The type of the verification object. | +| `id` | *Optional[str]* | :heavy_minus_sign: | The ID of the verification. Pass this to attempt_verification. | +| `status` | *Optional[str]* | :heavy_minus_sign: | The status of the verification (unverified, verified, expired, or failed). | +| `strategy` | *Optional[str]* | :heavy_minus_sign: | The verification strategy (email_code or phone_code). | +| `attempts` | *OptionalNullable[int]* | :heavy_minus_sign: | The number of attempts made against this verification. | +| `expire_at` | *OptionalNullable[int]* | :heavy_minus_sign: | Unix timestamp (milliseconds) at which the code expires. | +| `channel` | *OptionalNullable[str]* | :heavy_minus_sign: | The channel the code was sent over (phone numbers only). | \ No newline at end of file diff --git a/docs/models/verificationsamlverificationemailaddresssaml.md b/docs/models/verificationsamlverificationemailaddresssaml.md new file mode 100644 index 00000000..b30fa499 --- /dev/null +++ b/docs/models/verificationsamlverificationemailaddresssaml.md @@ -0,0 +1,15 @@ +# VerificationSAMLVerificationEmailAddressSAML + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `object` | [Optional[models.VerificationSamlVerificationObject]](../models/verificationsamlverificationobject.md) | :heavy_minus_sign: | N/A | +| `status` | [models.VerificationSamlVerificationStatus](../models/verificationsamlverificationstatus.md) | :heavy_check_mark: | N/A | +| `strategy` | [models.VerificationSamlVerificationStrategy](../models/verificationsamlverificationstrategy.md) | :heavy_check_mark: | N/A | +| `external_verification_redirect_url` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `error` | [OptionalNullable[models.VerificationError]](../models/verificationerror.md) | :heavy_minus_sign: | N/A | +| `expire_at` | *OptionalNullable[int]* | :heavy_minus_sign: | N/A | +| `attempts` | *Nullable[int]* | :heavy_check_mark: | N/A | +| `verified_at_client` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/sdks/billing/README.md b/docs/sdks/billing/README.md index 8745c8b6..6a36b486 100644 --- a/docs/sdks/billing/README.md +++ b/docs/sdks/billing/README.md @@ -115,6 +115,7 @@ to specific customers while maintaining the same plan structure. ```python +import clerk_backend_api from clerk_backend_api import Clerk @@ -122,7 +123,7 @@ with Clerk( bearer_auth="", ) as clerk: - res = clerk.billing.create_price(plan_id="", amount=826545, currency="USD", annual_monthly_amount=565484, description="why whoa remarkable properly freely at creative following inspect woot") + res = clerk.billing.create_price(plan_id="", amount=826545, currency="USD", annual_monthly_amount=565484, description="why whoa remarkable properly freely at creative following inspect woot", supported_billing_periods=clerk_backend_api.CreateBillingPriceRequestSupportedBillingPeriods.BOTH) # Handle response print(res) @@ -131,14 +132,15 @@ with Clerk( ### Parameters -| Parameter | Type | Required | Description | -| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| `plan_id` | *str* | :heavy_check_mark: | The ID of the plan this price belongs to. | -| `amount` | *Nullable[int]* | :heavy_check_mark: | The monthly amount in cents. Must be at least $1 (100 cents) if not null. | -| `currency` | *Optional[str]* | :heavy_minus_sign: | The currency code (e.g., "USD"). Defaults to USD. | -| `annual_monthly_amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. | -| `description` | *Optional[str]* | :heavy_minus_sign: | An optional description for this custom price. | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| `plan_id` | *str* | :heavy_check_mark: | The ID of the plan this price belongs to. | +| `amount` | *Nullable[int]* | :heavy_check_mark: | The monthly amount in cents. Must be at least $1 (100 cents) if not null. | +| `currency` | *Optional[str]* | :heavy_minus_sign: | The currency code (e.g., "USD"). Defaults to USD. | +| `annual_monthly_amount` | *OptionalNullable[int]* | :heavy_minus_sign: | The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. | +| `description` | *Optional[str]* | :heavy_minus_sign: | An optional description for this custom price. | +| `supported_billing_periods` | [Optional[models.CreateBillingPriceRequestSupportedBillingPeriods]](../../models/createbillingpricerequestsupportedbillingperiods.md) | :heavy_minus_sign: | Which billing periods this price supports. Inferred from amounts if omitted. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response diff --git a/docs/sdks/emailaddresses/README.md b/docs/sdks/emailaddresses/README.md index ffa2aa73..bf4d446f 100644 --- a/docs/sdks/emailaddresses/README.md +++ b/docs/sdks/emailaddresses/README.md @@ -8,6 +8,8 @@ * [get](#get) - Retrieve an email address * [delete](#delete) - Delete an email address * [update](#update) - Update an email address +* [prepare_verification](#prepare_verification) - Send a verification code to an email address +* [attempt_verification](#attempt_verification) - Verify a code sent to an email address * [replace_for_user](#replace_for_user) - Replace a user's email address ## create @@ -177,17 +179,117 @@ with Clerk( | models.ClerkErrors | 400, 401, 403, 404, 409 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | +## prepare_verification + +Sends a one-time code to the given email address so that a backend can +verify the user controls it (for example, in a custom, backend-driven +sign-in flow). The code is tracked on its own verification; confirm it +with attempt_verification. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.email_addresses.prepare_verification(email_address_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `email_address_id` | *str* | :heavy_check_mark: | The ID of the email address to send the verification code to | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.VerificationResponse](../../models/verificationresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 400, 401, 403, 404 | application/json | +| models.ClerkErrors | 500 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## attempt_verification + +Checks a one-time code against the verification identified by +verification_id, and returns the verification with its updated status +(`verified`, `unverified`, `expired`, or `failed`) and attempt count, so a +backend driving its own frontend can react on every attempt — an incorrect +or expired code is reported through the status, not as an error. Resubmitting +a verification whose code was already accepted is rejected with a +`verification_already_verified` error. If the code +is correct and the email address is not already verified, it is also marked +as verified as a side effect (just as it would be in a frontend verification +flow); an already verified email address is left unchanged. It never creates +a session; to sign the user in afterwards, mint a sign-in token. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.email_addresses.attempt_verification(email_address_id="", verification_id="", code="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `email_address_id` | *str* | :heavy_check_mark: | The ID of the email address whose code is being verified | +| `verification_id` | *str* | :heavy_check_mark: | The ID of the verification to check, such as one returned by prepare_verification | +| `code` | *str* | :heavy_check_mark: | The verification code that was sent to the email address | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.VerificationResponse](../../models/verificationresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 400, 401, 403, 404 | application/json | +| models.ClerkErrors | 500 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + ## replace_for_user -Replaces all of the user's email addresses with a single verified, primary email address. -The new email address is created with the admin verification strategy. Any existing email -addresses are deleted. If an existing email address is linked to a connected account, the -request is rejected; remove the connected account first. +Replaces all of the user's email addresses with a single primary email address. +By default the new email address is created verified, with the admin verification strategy. +When `identification_status` is `reserved` it is created reserved instead: unverified but usable +for sign-in and locked so no other user can claim it. Any existing email addresses are deleted. +If an existing email address is linked to a connected account, the request is rejected; remove +the connected account first. ### Example Usage ```python +import clerk_backend_api from clerk_backend_api import Clerk @@ -195,7 +297,7 @@ with Clerk( bearer_auth="", ) as clerk: - res = clerk.email_addresses.replace_for_user(user_id="", email_address="Ines83@gmail.com") + res = clerk.email_addresses.replace_for_user(user_id="", email_address="Ines83@gmail.com", identification_status=clerk_backend_api.IdentificationStatus.VERIFIED) # Handle response print(res) @@ -204,11 +306,12 @@ with Clerk( ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `user_id` | *str* | :heavy_check_mark: | The ID of the user whose email address to replace | -| `email_address` | *str* | :heavy_check_mark: | The new email address. Must adhere to the RFC 5322 specification for email address format. | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `user_id` | *str* | :heavy_check_mark: | The ID of the user whose email address to replace | +| `email_address` | *str* | :heavy_check_mark: | The new email address. Must adhere to the RFC 5322 specification for email address format. | +| `identification_status` | [Optional[models.IdentificationStatus]](../../models/identificationstatus.md) | :heavy_minus_sign: | Controls the status of the replacement email address. Defaults to `verified`. Set to
`reserved` to create it reserved (unverified but usable for sign-in and locked)
instead of verified. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response diff --git a/docs/sdks/enterpriseconnectionssdk/README.md b/docs/sdks/enterpriseconnectionssdk/README.md index 39adb07a..1da29363 100644 --- a/docs/sdks/enterpriseconnectionssdk/README.md +++ b/docs/sdks/enterpriseconnectionssdk/README.md @@ -9,6 +9,8 @@ * [get](#get) - Retrieve an enterprise connection * [update](#update) - Update an enterprise connection * [delete](#delete) - Delete an enterprise connection +* [list_test_runs](#list_test_runs) - List enterprise connection test runs +* [create_test_run](#create_test_run) - Create an enterprise connection test run ## list @@ -96,6 +98,7 @@ with Clerk( "key": "", "sso_path": "", "scim_path": "", + "multi_valued": True, }, ], }) @@ -209,6 +212,7 @@ with Clerk( "key": "", "sso_path": "", "scim_path": "", + "multi_valued": False, }, ]) @@ -280,6 +284,92 @@ with Clerk( ### Errors +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 402, 403, 404 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## list_test_runs + +Returns a paginated list of SAML or OIDC debug test runs for an enterprise connection. + +### Example Usage + + +```python +import clerk_backend_api +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.enterprise_connections.list_test_runs(enterprise_connection_id="", status=[ + clerk_backend_api.ListEnterpriseConnectionTestRunsQueryParamStatus.FAILED, + ], limit=20, offset=10) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `enterprise_connection_id` | *str* | :heavy_check_mark: | The ID of the enterprise connection | | +| `status` | List[[models.ListEnterpriseConnectionTestRunsQueryParamStatus](../../models/listenterpriseconnectiontestrunsqueryparamstatus.md)] | :heavy_minus_sign: | Filter test runs by status (may be repeated) | | +| `limit` | *Optional[int]* | :heavy_minus_sign: | Applies a limit to the number of results returned.
Can be used for paginating the results together with `offset`. | 20 | +| `offset` | *Optional[int]* | :heavy_minus_sign: | Skip the first `offset` results when paginating.
Needs to be an integer greater or equal to zero.
To be used in conjunction with `limit`. | 10 | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | + +### Response + +**[models.EnterpriseConnectionTestRuns](../../models/enterpriseconnectiontestruns.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 402, 403, 404, 422 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## create_test_run + +Returns a short-lived URL that starts the IdP test flow for this connection. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.enterprise_connections.create_test_run(enterprise_connection_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `enterprise_connection_id` | *str* | :heavy_check_mark: | The ID of the enterprise connection | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.EnterpriseConnectionTestRunResponse](../../models/enterpriseconnectiontestrunresponse.md)** + +### Errors + | Error Type | Status Code | Content Type | | ------------------ | ------------------ | ------------------ | | models.ClerkErrors | 402, 403, 404 | application/json | diff --git a/docs/sdks/instancesettingssdk/README.md b/docs/sdks/instancesettingssdk/README.md index 35b82f72..ac4216e2 100644 --- a/docs/sdks/instancesettingssdk/README.md +++ b/docs/sdks/instancesettingssdk/README.md @@ -448,10 +448,10 @@ with Clerk( ### Errors -| Error Type | Status Code | Content Type | -| ------------------ | ------------------ | ------------------ | -| models.ClerkErrors | 400, 402, 404, 422 | application/json | -| models.SDKError | 4XX, 5XX | \*/\* | +| Error Type | Status Code | Content Type | +| ----------------------- | ----------------------- | ----------------------- | +| models.ClerkErrors | 400, 402, 403, 404, 422 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | ## get_instance_protect diff --git a/docs/sdks/miscellaneous/README.md b/docs/sdks/miscellaneous/README.md index 2368451a..006b97cf 100644 --- a/docs/sdks/miscellaneous/README.md +++ b/docs/sdks/miscellaneous/README.md @@ -20,7 +20,7 @@ from clerk_backend_api import Clerk with Clerk() as clerk: - clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", application_name="", logo_url="https://fine-tarragon.info", flow="", use_domain_for_script=False) + clerk.miscellaneous.get_public_interstitial(frontend_api_query_parameter1="pub_1a2b3c4d", publishable_key="", proxy_url="https://fine-tarragon.info", domain="great-director.net", sign_in_url="https://likable-freckle.net/", use_domain_for_script=False) # Use the SDK ... @@ -36,9 +36,6 @@ with Clerk() as clerk: | `proxy_url` | *Optional[str]* | :heavy_minus_sign: | The proxy URL of your instance | | | `domain` | *Optional[str]* | :heavy_minus_sign: | The domain of your instance | | | `sign_in_url` | *Optional[str]* | :heavy_minus_sign: | The sign in URL of your instance | | -| `application_name` | *Optional[str]* | :heavy_minus_sign: | The application name shown in the interstitial UI | | -| `logo_url` | *Optional[str]* | :heavy_minus_sign: | The absolute HTTP(S) application logo URL shown in the interstitial UI | | -| `flow` | *Optional[str]* | :heavy_minus_sign: | The authentication flow shown in the interstitial UI | | | `use_domain_for_script` | *Optional[bool]* | :heavy_minus_sign: | Whether to use the domain for the script URL | | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | | diff --git a/docs/sdks/phonenumbers/README.md b/docs/sdks/phonenumbers/README.md index 0df70159..7b6c31ef 100644 --- a/docs/sdks/phonenumbers/README.md +++ b/docs/sdks/phonenumbers/README.md @@ -8,6 +8,8 @@ * [get](#get) - Retrieve a phone number * [delete](#delete) - Delete a phone number * [update](#update) - Update a phone number +* [prepare_verification](#prepare_verification) - Send a verification code to a phone number +* [attempt_verification](#attempt_verification) - Verify a code sent to a phone number * [replace_for_user](#replace_for_user) - Replace a user's phone number ## create @@ -179,17 +181,117 @@ with Clerk( | models.ClerkErrors | 400, 401, 403, 404 | application/json | | models.SDKError | 4XX, 5XX | \*/\* | +## prepare_verification + +Sends a one-time code to the given phone number so that a backend can +verify the user controls it (for example, in a custom, backend-driven +sign-in flow). The code is tracked on its own verification; confirm it +with attempt_verification. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.phone_numbers.prepare_verification(phone_number_id="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `phone_number_id` | *str* | :heavy_check_mark: | The ID of the phone number to send the verification code to | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.VerificationResponse](../../models/verificationresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ----------------------- | ----------------------- | ----------------------- | +| models.ClerkErrors | 400, 401, 403, 404, 429 | application/json | +| models.ClerkErrors | 500 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## attempt_verification + +Checks a one-time code against the verification identified by +verification_id, and returns the verification with its updated status +(`verified`, `unverified`, `expired`, or `failed`) and attempt count, so a +backend driving its own frontend can react on every attempt — an incorrect +or expired code is reported through the status, not as an error. Resubmitting +a verification whose code was already accepted is rejected with a +`verification_already_verified` error. If the code +is correct and the phone number is not already verified, it is also marked +as verified as a side effect (just as it would be in a frontend verification +flow); an already verified phone number is left unchanged. It never creates +a session; to sign the user in afterwards, mint a sign-in token. + +### Example Usage + + +```python +from clerk_backend_api import Clerk + + +with Clerk( + bearer_auth="", +) as clerk: + + res = clerk.phone_numbers.attempt_verification(phone_number_id="", verification_id="", code="") + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `phone_number_id` | *str* | :heavy_check_mark: | The ID of the phone number whose code is being verified | +| `verification_id` | *str* | :heavy_check_mark: | The ID of the verification to check, such as one returned by prepare_verification | +| `code` | *str* | :heavy_check_mark: | The verification code that was sent to the phone number | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.VerificationResponse](../../models/verificationresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| ------------------ | ------------------ | ------------------ | +| models.ClerkErrors | 400, 401, 403, 404 | application/json | +| models.ClerkErrors | 500 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + ## replace_for_user -Replaces all of the user's phone numbers with a single verified, primary phone number. -The new phone number is created with the admin verification strategy and is not reserved -for second factor. Any existing phone numbers are deleted; replacing a phone number that is -reserved for second factor disables the user's MFA. +Replaces all of the user's phone numbers with a single primary phone number. +By default the new phone number is created verified, with the admin verification strategy. +When `identification_status` is `reserved` it is created reserved instead: unverified but usable +for sign-in and locked so no other user can claim it. The new phone number is never reserved for +second factor. Any existing phone numbers are deleted; replacing a phone number that is reserved +for second factor disables the user's MFA. ### Example Usage ```python +import clerk_backend_api from clerk_backend_api import Clerk @@ -197,7 +299,7 @@ with Clerk( bearer_auth="", ) as clerk: - res = clerk.phone_numbers.replace_for_user(user_id="", phone_number="1-440-484-8878 x689") + res = clerk.phone_numbers.replace_for_user(user_id="", phone_number="1-440-484-8878 x689", identification_status=clerk_backend_api.ReplaceUserPhoneNumberIdentificationStatus.VERIFIED) # Handle response print(res) @@ -206,11 +308,12 @@ with Clerk( ### Parameters -| Parameter | Type | Required | Description | -| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| `user_id` | *str* | :heavy_check_mark: | The ID of the user whose phone number to replace | -| `phone_number` | *str* | :heavy_check_mark: | The new phone number. Must adhere to the E.164 standard for phone number format. | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `user_id` | *str* | :heavy_check_mark: | The ID of the user whose phone number to replace | +| `phone_number` | *str* | :heavy_check_mark: | The new phone number. Must adhere to the E.164 standard for phone number format. | +| `identification_status` | [Optional[models.ReplaceUserPhoneNumberIdentificationStatus]](../../models/replaceuserphonenumberidentificationstatus.md) | :heavy_minus_sign: | Controls the status of the replacement phone number. Defaults to `verified`. Set to
`reserved` to create it reserved (unverified but usable for sign-in and locked)
instead of verified. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response diff --git a/docs/sdks/users/README.md b/docs/sdks/users/README.md index 82322271..b06f6145 100644 --- a/docs/sdks/users/README.md +++ b/docs/sdks/users/README.md @@ -124,7 +124,7 @@ with Clerk( Creates a new user. Your user management settings determine how you should setup your user model. -Any email address and phone number created using this method will be marked as verified. +By default, any email address and phone number created using this method is marked as verified. Use the `email_address_identification_status` and `phone_number_identification_status` arrays to instead create some or all of them as reserved (unverified but usable for sign-in and locked so no other user can claim them). Note: If you are performing a migration, check out our guide on [zero downtime migrations](https://clerk.com/docs/deployments/migrate-overview). @@ -134,6 +134,7 @@ The following rate limit rules apply to this endpoint: 1000 requests per 10 seco ```python +import clerk_backend_api from clerk_backend_api import Clerk @@ -143,8 +144,12 @@ with Clerk( res = clerk.users.create(external_id="ext-id-001", first_name="John", last_name="Doe", locale="en", email_address=[ "john.doe@example.com", + ], email_address_identification_status=[ + clerk_backend_api.EmailAddressIdentificationStatus.RESERVED, ], phone_number=[ "+12345678901", + ], phone_number_identification_status=[ + clerk_backend_api.PhoneNumberIdentificationStatus.VERIFIED, ], web3_wallet=[ "0x123456789abcdef0x123456789abcdef", ], username="johndoe123", password="Secure*Pass4", password_digest="$argon2i$v=19$m=4096,t=3,p=1$4t6CL3P7YiHBtwESXawI8Hm20zJj4cs7/4/G3c187e0$m7RQFczcKr5bIR0IIxbpO2P0tyrLjf3eUW3M3QSwnLc", password_hasher="", skip_password_checks=False, skip_password_requirement=False, totp_secret="base32totpsecretkey", backup_codes=[ @@ -173,8 +178,10 @@ with Clerk( | `first_name` | *OptionalNullable[str]* | :heavy_minus_sign: | The first name to assign to the user | John | | `last_name` | *OptionalNullable[str]* | :heavy_minus_sign: | The last name to assign to the user | Doe | | `locale` | *OptionalNullable[str]* | :heavy_minus_sign: | The locale to assign to the user (e.g., "en-US", "fr-FR") | | -| `email_address` | List[*str*] | :heavy_minus_sign: | Email addresses to add to the user.
Must be unique across your instance.
The first email address will be set as the user's primary email address. | | -| `phone_number` | List[*str*] | :heavy_minus_sign: | Phone numbers to add to the user.
Must be unique across your instance.
The first phone number will be set as the user's primary phone number. | | +| `email_address` | List[*str*] | :heavy_minus_sign: | Email addresses to add to the user.
Must be unique across your instance.
The first email address will be set as the user's primary email address.
Created verified by default; see `email_address_identification_status` to create them reserved. | | +| `email_address_identification_status` | List[[models.EmailAddressIdentificationStatus](../../models/emailaddressidentificationstatus.md)] | :heavy_minus_sign: | Controls the status each email address is created with. Runs parallel to
`email_address`: when provided, it must contain exactly one item per email
address, applied by position. When omitted or empty, every email address is
created `verified`. Set an item to `reserved` to create the corresponding
email address reserved instead (unverified but usable for sign-in and locked
so no other user can claim it). | | +| `phone_number` | List[*str*] | :heavy_minus_sign: | Phone numbers to add to the user.
Must be unique across your instance.
The first phone number will be set as the user's primary phone number.
Created verified by default; see `phone_number_identification_status` to create them reserved. | | +| `phone_number_identification_status` | List[[models.PhoneNumberIdentificationStatus](../../models/phonenumberidentificationstatus.md)] | :heavy_minus_sign: | Controls the status each phone number is created with. Runs parallel to
`phone_number`: when provided, it must contain exactly one item per phone
number, applied by position. When omitted or empty, every phone number is
created `verified`. Set an item to `reserved` to create the corresponding
phone number reserved instead (unverified but usable for sign-in and locked
so no other user can claim it). | | | `web3_wallet` | List[*str*] | :heavy_minus_sign: | Web3 wallets to add to the user.
Must be unique across your instance.
The first wallet will be set as the user's primary wallet. | | | `username` | *OptionalNullable[str]* | :heavy_minus_sign: | The username to give to the user.
It must be unique across your instance. | johndoe123 | | `password` | *OptionalNullable[str]* | :heavy_minus_sign: | The plaintext password to give the user.
Must be at least 8 characters long, and cannot be in any list of hacked passwords. | Secure*Pass4 | diff --git a/pyproject.toml b/pyproject.toml index ede95bca..124bab11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "clerk-backend-api" -version = "5.0.7" +version = "5.1.0" description = "Python Client SDK for clerk.dev" authors = [{ name = "Clerk" },] readme = "README-PYPI.md" diff --git a/src/clerk_backend_api/__init__.py b/src/clerk_backend_api/__init__.py index dd02e42e..d028dd22 100644 --- a/src/clerk_backend_api/__init__.py +++ b/src/clerk_backend_api/__init__.py @@ -9,7 +9,23 @@ ) from .sdk import * from .sdkconfiguration import * -from .models import * +from typing import TYPE_CHECKING +from . import models as _models + +if TYPE_CHECKING: + from .models import * +else: + + def __getattr__(name: str): + try: + return getattr(_models, name) + except AttributeError: + raise AttributeError( + f"module {__name__!r} has no attribute {name!r}" + ) from None + + def __dir__(): + return dir(_models) + list(globals().keys()) VERSION: str = __version__ diff --git a/src/clerk_backend_api/_version.py b/src/clerk_backend_api/_version.py index f097f9eb..33dba445 100644 --- a/src/clerk_backend_api/_version.py +++ b/src/clerk_backend_api/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "clerk-backend-api" -__version__: str = "5.0.7" +__version__: str = "5.1.0" __openapi_doc_version__: str = "2025-11-10" -__gen_version__: str = "2.889.1" -__user_agent__: str = "speakeasy-sdk/python 5.0.7 2.889.1 2025-11-10 clerk-backend-api" +__gen_version__: str = "2.900.0" +__user_agent__: str = "speakeasy-sdk/python 5.1.0 2.900.0 2025-11-10 clerk-backend-api" try: if __package__ is not None: diff --git a/src/clerk_backend_api/admin_portal_link_tokens.py b/src/clerk_backend_api/admin_portal_link_tokens.py index 45a844a8..7906a34f 100644 --- a/src/clerk_backend_api/admin_portal_link_tokens.py +++ b/src/clerk_backend_api/admin_portal_link_tokens.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, List, Mapping, Optional +from typing import Any, Iterable, List, Mapping, Optional class AdminPortalLinkTokens(BaseSDK): @@ -14,7 +14,7 @@ def create_admin_portal_link_token( *, organization_id: Optional[str] = None, it_contact_id: Optional[str] = None, - scopes: Optional[List[str]] = None, + scopes: Optional[Iterable[str]] = None, seconds_until_expiration: Optional[int] = 3600, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -45,7 +45,7 @@ def create_admin_portal_link_token( request = models.CreateAdminPortalLinkTokenRequestBody( organization_id=organization_id, it_contact_id=it_contact_id, - scopes=scopes, + scopes=utils.unmarshal(scopes, Optional[List[str]]), seconds_until_expiration=seconds_until_expiration, ) @@ -149,7 +149,7 @@ async def create_admin_portal_link_token_async( *, organization_id: Optional[str] = None, it_contact_id: Optional[str] = None, - scopes: Optional[List[str]] = None, + scopes: Optional[Iterable[str]] = None, seconds_until_expiration: Optional[int] = 3600, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -180,7 +180,7 @@ async def create_admin_portal_link_token_async( request = models.CreateAdminPortalLinkTokenRequestBody( organization_id=organization_id, it_contact_id=it_contact_id, - scopes=scopes, + scopes=utils.unmarshal(scopes, Optional[List[str]]), seconds_until_expiration=seconds_until_expiration, ) diff --git a/src/clerk_backend_api/api_keys.py b/src/clerk_backend_api/api_keys.py index a5f65366..604539ec 100644 --- a/src/clerk_backend_api/api_keys.py +++ b/src/clerk_backend_api/api_keys.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, List, Mapping, Optional +from typing import Any, Iterable, List, Mapping, Optional class APIKeys(BaseSDK): @@ -19,7 +19,7 @@ def create_api_key( type_: Optional[str] = "api_key", description: OptionalNullable[str] = UNSET, claims: OptionalNullable[Any] = UNSET, - scopes: Optional[List[str]] = None, + scopes: Optional[Iterable[str]] = None, created_by: OptionalNullable[str] = UNSET, seconds_until_expiration: OptionalNullable[float] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -58,7 +58,7 @@ def create_api_key( description=description, subject=subject, claims=claims, - scopes=scopes, + scopes=utils.unmarshal(scopes, Optional[List[str]]), created_by=created_by, seconds_until_expiration=seconds_until_expiration, ) @@ -140,7 +140,7 @@ async def create_api_key_async( type_: Optional[str] = "api_key", description: OptionalNullable[str] = UNSET, claims: OptionalNullable[Any] = UNSET, - scopes: Optional[List[str]] = None, + scopes: Optional[Iterable[str]] = None, created_by: OptionalNullable[str] = UNSET, seconds_until_expiration: OptionalNullable[float] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -179,7 +179,7 @@ async def create_api_key_async( description=description, subject=subject, claims=claims, - scopes=scopes, + scopes=utils.unmarshal(scopes, Optional[List[str]]), created_by=created_by, seconds_until_expiration=seconds_until_expiration, ) @@ -668,7 +668,7 @@ def update_api_key( *, api_key_id: str, claims: OptionalNullable[Any] = UNSET, - scopes: Optional[List[str]] = None, + scopes: Optional[Iterable[str]] = None, description: OptionalNullable[str] = UNSET, subject: Optional[str] = None, seconds_until_expiration: OptionalNullable[float] = UNSET, @@ -704,7 +704,7 @@ def update_api_key( api_key_id=api_key_id, request_body=models.UpdateAPIKeyRequestBody( claims=claims, - scopes=scopes, + scopes=utils.unmarshal(scopes, Optional[List[str]]), description=description, subject=subject, seconds_until_expiration=seconds_until_expiration, @@ -789,7 +789,7 @@ async def update_api_key_async( *, api_key_id: str, claims: OptionalNullable[Any] = UNSET, - scopes: Optional[List[str]] = None, + scopes: Optional[Iterable[str]] = None, description: OptionalNullable[str] = UNSET, subject: Optional[str] = None, seconds_until_expiration: OptionalNullable[float] = UNSET, @@ -825,7 +825,7 @@ async def update_api_key_async( api_key_id=api_key_id, request_body=models.UpdateAPIKeyRequestBody( claims=claims, - scopes=scopes, + scopes=utils.unmarshal(scopes, Optional[List[str]]), description=description, subject=subject, seconds_until_expiration=seconds_until_expiration, diff --git a/src/clerk_backend_api/billing.py b/src/clerk_backend_api/billing.py index cf7442d8..e1fa4dcb 100644 --- a/src/clerk_backend_api/billing.py +++ b/src/clerk_backend_api/billing.py @@ -462,6 +462,9 @@ def create_price( currency: Optional[str] = "USD", annual_monthly_amount: OptionalNullable[int] = UNSET, description: Optional[str] = None, + supported_billing_periods: Optional[ + models.CreateBillingPriceRequestSupportedBillingPeriods + ] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -477,6 +480,7 @@ def create_price( :param currency: The currency code (e.g., \"USD\"). Defaults to USD. :param annual_monthly_amount: The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. :param description: An optional description for this custom price. + :param supported_billing_periods: Which billing periods this price supports. Inferred from amounts if omitted. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -498,6 +502,7 @@ def create_price( amount=amount, annual_monthly_amount=annual_monthly_amount, description=description, + supported_billing_periods=supported_billing_periods, ) req = self._build_request( @@ -573,6 +578,9 @@ async def create_price_async( currency: Optional[str] = "USD", annual_monthly_amount: OptionalNullable[int] = UNSET, description: Optional[str] = None, + supported_billing_periods: Optional[ + models.CreateBillingPriceRequestSupportedBillingPeriods + ] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -588,6 +596,7 @@ async def create_price_async( :param currency: The currency code (e.g., \"USD\"). Defaults to USD. :param annual_monthly_amount: The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null. :param description: An optional description for this custom price. + :param supported_billing_periods: Which billing periods this price supports. Inferred from amounts if omitted. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -609,6 +618,7 @@ async def create_price_async( amount=amount, annual_monthly_amount=annual_monthly_amount, description=description, + supported_billing_periods=supported_billing_periods, ) req = self._build_request_async( diff --git a/src/clerk_backend_api/emailaddresses.py b/src/clerk_backend_api/emailaddresses.py index 9c7583f4..27801837 100644 --- a/src/clerk_backend_api/emailaddresses.py +++ b/src/clerk_backend_api/emailaddresses.py @@ -803,11 +803,450 @@ async def update_async( raise models.SDKError("Unexpected response received", http_res) + def prepare_verification( + self, + *, + email_address_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.VerificationResponse: + r"""Send a verification code to an email address + + Sends a one-time code to the given email address so that a backend can + verify the user controls it (for example, in a custom, backend-driven + sign-in flow). The code is tracked on its own verification; confirm it + with attempt_verification. + + :param email_address_id: The ID of the email address to send the verification code to + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PrepareEmailAddressVerificationRequest( + email_address_id=email_address_id, + ) + + req = self._build_request( + method="POST", + path="/email_addresses/{email_address_id}/prepare_verification", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="PrepareEmailAddressVerification", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.VerificationResponse, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def prepare_verification_async( + self, + *, + email_address_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.VerificationResponse: + r"""Send a verification code to an email address + + Sends a one-time code to the given email address so that a backend can + verify the user controls it (for example, in a custom, backend-driven + sign-in flow). The code is tracked on its own verification; confirm it + with attempt_verification. + + :param email_address_id: The ID of the email address to send the verification code to + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PrepareEmailAddressVerificationRequest( + email_address_id=email_address_id, + ) + + req = self._build_request_async( + method="POST", + path="/email_addresses/{email_address_id}/prepare_verification", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="PrepareEmailAddressVerification", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.VerificationResponse, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def attempt_verification( + self, + *, + email_address_id: str, + verification_id: str, + code: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.VerificationResponse: + r"""Verify a code sent to an email address + + Checks a one-time code against the verification identified by + verification_id, and returns the verification with its updated status + (`verified`, `unverified`, `expired`, or `failed`) and attempt count, so a + backend driving its own frontend can react on every attempt — an incorrect + or expired code is reported through the status, not as an error. Resubmitting + a verification whose code was already accepted is rejected with a + `verification_already_verified` error. If the code + is correct and the email address is not already verified, it is also marked + as verified as a side effect (just as it would be in a frontend verification + flow); an already verified email address is left unchanged. It never creates + a session; to sign the user in afterwards, mint a sign-in token. + + :param email_address_id: The ID of the email address whose code is being verified + :param verification_id: The ID of the verification to check, such as one returned by prepare_verification + :param code: The verification code that was sent to the email address + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.AttemptEmailAddressVerificationRequest( + email_address_id=email_address_id, + request_body=models.AttemptEmailAddressVerificationRequestBody( + verification_id=verification_id, + code=code, + ), + ) + + req = self._build_request( + method="POST", + path="/email_addresses/{email_address_id}/attempt_verification", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body, + False, + False, + "json", + models.AttemptEmailAddressVerificationRequestBody, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="AttemptEmailAddressVerification", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.VerificationResponse, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def attempt_verification_async( + self, + *, + email_address_id: str, + verification_id: str, + code: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.VerificationResponse: + r"""Verify a code sent to an email address + + Checks a one-time code against the verification identified by + verification_id, and returns the verification with its updated status + (`verified`, `unverified`, `expired`, or `failed`) and attempt count, so a + backend driving its own frontend can react on every attempt — an incorrect + or expired code is reported through the status, not as an error. Resubmitting + a verification whose code was already accepted is rejected with a + `verification_already_verified` error. If the code + is correct and the email address is not already verified, it is also marked + as verified as a side effect (just as it would be in a frontend verification + flow); an already verified email address is left unchanged. It never creates + a session; to sign the user in afterwards, mint a sign-in token. + + :param email_address_id: The ID of the email address whose code is being verified + :param verification_id: The ID of the verification to check, such as one returned by prepare_verification + :param code: The verification code that was sent to the email address + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.AttemptEmailAddressVerificationRequest( + email_address_id=email_address_id, + request_body=models.AttemptEmailAddressVerificationRequestBody( + verification_id=verification_id, + code=code, + ), + ) + + req = self._build_request_async( + method="POST", + path="/email_addresses/{email_address_id}/attempt_verification", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body, + False, + False, + "json", + models.AttemptEmailAddressVerificationRequestBody, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="AttemptEmailAddressVerification", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.VerificationResponse, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + def replace_for_user( self, *, user_id: str, email_address: str, + identification_status: Optional[ + models.IdentificationStatus + ] = models.IdentificationStatus.VERIFIED, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -815,13 +1254,18 @@ def replace_for_user( ) -> models.EmailAddress: r"""Replace a user's email address - Replaces all of the user's email addresses with a single verified, primary email address. - The new email address is created with the admin verification strategy. Any existing email - addresses are deleted. If an existing email address is linked to a connected account, the - request is rejected; remove the connected account first. + Replaces all of the user's email addresses with a single primary email address. + By default the new email address is created verified, with the admin verification strategy. + When `identification_status` is `reserved` it is created reserved instead: unverified but usable + for sign-in and locked so no other user can claim it. Any existing email addresses are deleted. + If an existing email address is linked to a connected account, the request is rejected; remove + the connected account first. :param user_id: The ID of the user whose email address to replace :param email_address: The new email address. Must adhere to the RFC 5322 specification for email address format. + :param identification_status: Controls the status of the replacement email address. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -841,6 +1285,7 @@ def replace_for_user( user_id=user_id, request_body=models.ReplaceUserEmailAddressRequestBody( email_address=email_address, + identification_status=identification_status, ), ) @@ -915,6 +1360,9 @@ async def replace_for_user_async( *, user_id: str, email_address: str, + identification_status: Optional[ + models.IdentificationStatus + ] = models.IdentificationStatus.VERIFIED, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -922,13 +1370,18 @@ async def replace_for_user_async( ) -> models.EmailAddress: r"""Replace a user's email address - Replaces all of the user's email addresses with a single verified, primary email address. - The new email address is created with the admin verification strategy. Any existing email - addresses are deleted. If an existing email address is linked to a connected account, the - request is rejected; remove the connected account first. + Replaces all of the user's email addresses with a single primary email address. + By default the new email address is created verified, with the admin verification strategy. + When `identification_status` is `reserved` it is created reserved instead: unverified but usable + for sign-in and locked so no other user can claim it. Any existing email addresses are deleted. + If an existing email address is linked to a connected account, the request is rejected; remove + the connected account first. :param user_id: The ID of the user whose email address to replace :param email_address: The new email address. Must adhere to the RFC 5322 specification for email address format. + :param identification_status: Controls the status of the replacement email address. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -948,6 +1401,7 @@ async def replace_for_user_async( user_id=user_id, request_body=models.ReplaceUserEmailAddressRequestBody( email_address=email_address, + identification_status=identification_status, ), ) diff --git a/src/clerk_backend_api/enterpriseconnections_sdk.py b/src/clerk_backend_api/enterpriseconnections_sdk.py index 7c15e9c5..199c5fad 100644 --- a/src/clerk_backend_api/enterpriseconnections_sdk.py +++ b/src/clerk_backend_api/enterpriseconnections_sdk.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import BaseModel, OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, List, Mapping, Optional, Union, cast +from typing import Any, Iterable, List, Mapping, Optional, Union, cast class EnterpriseConnectionsSDK(BaseSDK): @@ -612,7 +612,7 @@ def update( *, enterprise_connection_id: str, name: OptionalNullable[str] = UNSET, - domains: OptionalNullable[List[str]] = UNSET, + domains: OptionalNullable[Iterable[str]] = UNSET, active: OptionalNullable[bool] = UNSET, sync_user_attributes: OptionalNullable[bool] = UNSET, disable_additional_identifications: OptionalNullable[bool] = UNSET, @@ -632,8 +632,8 @@ def update( ] = UNSET, custom_attributes: OptionalNullable[ Union[ - List[models.UpdateEnterpriseConnectionCustomAttributes], - List[models.UpdateEnterpriseConnectionCustomAttributesTypedDict], + Iterable[models.UpdateEnterpriseConnectionCustomAttributes], + Iterable[models.UpdateEnterpriseConnectionCustomAttributesTypedDict], ] ] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -678,7 +678,7 @@ def update( enterprise_connection_id=enterprise_connection_id, request_body=models.UpdateEnterpriseConnectionRequestBody( name=name, - domains=domains, + domains=utils.unmarshal(domains, OptionalNullable[List[str]]), active=active, sync_user_attributes=sync_user_attributes, disable_additional_identifications=disable_additional_identifications, @@ -770,7 +770,7 @@ async def update_async( *, enterprise_connection_id: str, name: OptionalNullable[str] = UNSET, - domains: OptionalNullable[List[str]] = UNSET, + domains: OptionalNullable[Iterable[str]] = UNSET, active: OptionalNullable[bool] = UNSET, sync_user_attributes: OptionalNullable[bool] = UNSET, disable_additional_identifications: OptionalNullable[bool] = UNSET, @@ -790,8 +790,8 @@ async def update_async( ] = UNSET, custom_attributes: OptionalNullable[ Union[ - List[models.UpdateEnterpriseConnectionCustomAttributes], - List[models.UpdateEnterpriseConnectionCustomAttributesTypedDict], + Iterable[models.UpdateEnterpriseConnectionCustomAttributes], + Iterable[models.UpdateEnterpriseConnectionCustomAttributesTypedDict], ] ] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -836,7 +836,7 @@ async def update_async( enterprise_connection_id=enterprise_connection_id, request_body=models.UpdateEnterpriseConnectionRequestBody( name=name, - domains=domains, + domains=utils.unmarshal(domains, OptionalNullable[List[str]]), active=active, sync_user_attributes=sync_user_attributes, disable_additional_identifications=disable_additional_identifications, @@ -1102,3 +1102,409 @@ async def delete_async( raise models.SDKError("API error occurred", http_res, http_res_text) raise models.SDKError("Unexpected response received", http_res) + + def list_test_runs( + self, + *, + enterprise_connection_id: str, + status: Optional[ + Iterable[models.ListEnterpriseConnectionTestRunsQueryParamStatus] + ] = None, + limit: Optional[int] = 10, + offset: Optional[int] = 0, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.EnterpriseConnectionTestRuns: + r"""List enterprise connection test runs + + Returns a paginated list of SAML or OIDC debug test runs for an enterprise connection. + + :param enterprise_connection_id: The ID of the enterprise connection + :param status: Filter test runs by status (may be repeated) + :param limit: Applies a limit to the number of results returned. + Can be used for paginating the results together with `offset`. + :param offset: Skip the first `offset` results when paginating. + Needs to be an integer greater or equal to zero. + To be used in conjunction with `limit`. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ListEnterpriseConnectionTestRunsRequest( + enterprise_connection_id=enterprise_connection_id, + status=utils.unmarshal( + status, + Optional[List[models.ListEnterpriseConnectionTestRunsQueryParamStatus]], + ), + limit=limit, + offset=offset, + ) + + req = self._build_request( + method="GET", + path="/enterprise_connections/{enterprise_connection_id}/test_runs", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ListEnterpriseConnectionTestRuns", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.EnterpriseConnectionTestRuns, http_res + ) + if utils.match_response( + http_res, ["402", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def list_test_runs_async( + self, + *, + enterprise_connection_id: str, + status: Optional[ + Iterable[models.ListEnterpriseConnectionTestRunsQueryParamStatus] + ] = None, + limit: Optional[int] = 10, + offset: Optional[int] = 0, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.EnterpriseConnectionTestRuns: + r"""List enterprise connection test runs + + Returns a paginated list of SAML or OIDC debug test runs for an enterprise connection. + + :param enterprise_connection_id: The ID of the enterprise connection + :param status: Filter test runs by status (may be repeated) + :param limit: Applies a limit to the number of results returned. + Can be used for paginating the results together with `offset`. + :param offset: Skip the first `offset` results when paginating. + Needs to be an integer greater or equal to zero. + To be used in conjunction with `limit`. + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.ListEnterpriseConnectionTestRunsRequest( + enterprise_connection_id=enterprise_connection_id, + status=utils.unmarshal( + status, + Optional[List[models.ListEnterpriseConnectionTestRunsQueryParamStatus]], + ), + limit=limit, + offset=offset, + ) + + req = self._build_request_async( + method="GET", + path="/enterprise_connections/{enterprise_connection_id}/test_runs", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="ListEnterpriseConnectionTestRuns", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.EnterpriseConnectionTestRuns, http_res + ) + if utils.match_response( + http_res, ["402", "403", "404", "422"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def create_test_run( + self, + *, + enterprise_connection_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.EnterpriseConnectionTestRunResponse: + r"""Create an enterprise connection test run + + Returns a short-lived URL that starts the IdP test flow for this connection. + + :param enterprise_connection_id: The ID of the enterprise connection + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.CreateEnterpriseConnectionTestRunRequest( + enterprise_connection_id=enterprise_connection_id, + ) + + req = self._build_request( + method="POST", + path="/enterprise_connections/{enterprise_connection_id}/test_runs", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="CreateEnterpriseConnectionTestRun", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.EnterpriseConnectionTestRunResponse, http_res + ) + if utils.match_response(http_res, ["402", "403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def create_test_run_async( + self, + *, + enterprise_connection_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.EnterpriseConnectionTestRunResponse: + r"""Create an enterprise connection test run + + Returns a short-lived URL that starts the IdP test flow for this connection. + + :param enterprise_connection_id: The ID of the enterprise connection + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.CreateEnterpriseConnectionTestRunRequest( + enterprise_connection_id=enterprise_connection_id, + ) + + req = self._build_request_async( + method="POST", + path="/enterprise_connections/{enterprise_connection_id}/test_runs", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="CreateEnterpriseConnectionTestRun", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.EnterpriseConnectionTestRunResponse, http_res + ) + if utils.match_response(http_res, ["402", "403", "404"], "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) diff --git a/src/clerk_backend_api/instancesettings_sdk.py b/src/clerk_backend_api/instancesettings_sdk.py index 971fb273..fbf870bf 100644 --- a/src/clerk_backend_api/instancesettings_sdk.py +++ b/src/clerk_backend_api/instancesettings_sdk.py @@ -1804,7 +1804,7 @@ def update_organization_settings( if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.OrganizationSettings, http_res) if utils.match_response( - http_res, ["400", "402", "404", "422"], "application/json" + http_res, ["400", "402", "403", "404", "422"], "application/json" ): response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) raise models.ClerkErrors(response_data, http_res) @@ -1912,7 +1912,7 @@ async def update_organization_settings_async( if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response(models.OrganizationSettings, http_res) if utils.match_response( - http_res, ["400", "402", "404", "422"], "application/json" + http_res, ["400", "402", "403", "404", "422"], "application/json" ): response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) raise models.ClerkErrors(response_data, http_res) diff --git a/src/clerk_backend_api/invitations.py b/src/clerk_backend_api/invitations.py index 4bf4e69a..f58a5fd5 100644 --- a/src/clerk_backend_api/invitations.py +++ b/src/clerk_backend_api/invitations.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import BaseModel, OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, List, Mapping, Optional, Union, cast +from typing import Any, Iterable, List, Mapping, Optional, Union, cast class Invitations(BaseSDK): @@ -447,7 +447,7 @@ def bulk_create( self, *, request: Optional[ - Union[List[models.RequestBody], List[models.RequestBodyTypedDict]] + Union[Iterable[models.RequestBody], Iterable[models.RequestBodyTypedDict]] ] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -547,7 +547,7 @@ async def bulk_create_async( self, *, request: Optional[ - Union[List[models.RequestBody], List[models.RequestBodyTypedDict]] + Union[Iterable[models.RequestBody], Iterable[models.RequestBodyTypedDict]] ] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, diff --git a/src/clerk_backend_api/miscellaneous.py b/src/clerk_backend_api/miscellaneous.py index 6fd13f3f..1487f739 100644 --- a/src/clerk_backend_api/miscellaneous.py +++ b/src/clerk_backend_api/miscellaneous.py @@ -17,9 +17,6 @@ def get_public_interstitial( proxy_url: Optional[str] = None, domain: Optional[str] = None, sign_in_url: Optional[str] = None, - application_name: Optional[str] = None, - logo_url: Optional[str] = None, - flow: Optional[str] = None, use_domain_for_script: Optional[bool] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -37,9 +34,6 @@ def get_public_interstitial( :param proxy_url: The proxy URL of your instance :param domain: The domain of your instance :param sign_in_url: The sign in URL of your instance - :param application_name: The application name shown in the interstitial UI - :param logo_url: The absolute HTTP(S) application logo URL shown in the interstitial UI - :param flow: The authentication flow shown in the interstitial UI :param use_domain_for_script: Whether to use the domain for the script URL :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -63,9 +57,6 @@ def get_public_interstitial( proxy_url=proxy_url, domain=domain, sign_in_url=sign_in_url, - application_name=application_name, - logo_url=logo_url, - flow=flow, use_domain_for_script=use_domain_for_script, ) @@ -130,9 +121,6 @@ async def get_public_interstitial_async( proxy_url: Optional[str] = None, domain: Optional[str] = None, sign_in_url: Optional[str] = None, - application_name: Optional[str] = None, - logo_url: Optional[str] = None, - flow: Optional[str] = None, use_domain_for_script: Optional[bool] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -150,9 +138,6 @@ async def get_public_interstitial_async( :param proxy_url: The proxy URL of your instance :param domain: The domain of your instance :param sign_in_url: The sign in URL of your instance - :param application_name: The application name shown in the interstitial UI - :param logo_url: The absolute HTTP(S) application logo URL shown in the interstitial UI - :param flow: The authentication flow shown in the interstitial UI :param use_domain_for_script: Whether to use the domain for the script URL :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method @@ -176,9 +161,6 @@ async def get_public_interstitial_async( proxy_url=proxy_url, domain=domain, sign_in_url=sign_in_url, - application_name=application_name, - logo_url=logo_url, - flow=flow, use_domain_for_script=use_domain_for_script, ) diff --git a/src/clerk_backend_api/models/__init__.py b/src/clerk_backend_api/models/__init__.py index e283bb6e..6ceb8b9e 100644 --- a/src/clerk_backend_api/models/__init__.py +++ b/src/clerk_backend_api/models/__init__.py @@ -6,6 +6,10 @@ from clerk_backend_api.utils.dynamic_imports import lazy_getattr, lazy_dir if TYPE_CHECKING: + from ._verificationresponse import ( + VerificationResponse, + VerificationResponseTypedDict, + ) from .actortoken import ( ActorToken, ActorTokenActor, @@ -45,11 +49,25 @@ AssignPermissionToOrganizationRoleRequest, AssignPermissionToOrganizationRoleRequestTypedDict, ) + from .attemptemailaddressverificationop import ( + AttemptEmailAddressVerificationRequest, + AttemptEmailAddressVerificationRequestBody, + AttemptEmailAddressVerificationRequestBodyTypedDict, + AttemptEmailAddressVerificationRequestTypedDict, + ) + from .attemptphonenumberverificationop import ( + AttemptPhoneNumberVerificationRequest, + AttemptPhoneNumberVerificationRequestBody, + AttemptPhoneNumberVerificationRequestBodyTypedDict, + AttemptPhoneNumberVerificationRequestTypedDict, + ) from .banuserop import BanUserRequest, BanUserRequestTypedDict from .billingpaymentattempt import ( BillingPaymentAttempt, BillingPaymentAttemptCredits, BillingPaymentAttemptCreditsTypedDict, + BillingPaymentAttemptDiscounts, + BillingPaymentAttemptDiscountsTypedDict, BillingPaymentAttemptObject, BillingPaymentAttemptPayer, BillingPaymentAttemptPayerTypedDict, @@ -57,6 +75,8 @@ BillingPaymentAttemptProrationTypedDict, BillingPaymentAttemptStatus, BillingPaymentAttemptTotals, + BillingPaymentAttemptTotalsProration, + BillingPaymentAttemptTotalsProrationTypedDict, BillingPaymentAttemptTotalsTypedDict, BillingPaymentAttemptTypedDict, Payee, @@ -72,6 +92,7 @@ BillingPriceResponseFeeTypedDict, BillingPriceResponseObject, BillingPriceResponseTypedDict, + SupportedBillingPeriods, ) from .billingstatement import ( BillingStatement, @@ -199,8 +220,18 @@ CommerceSubscriptionItemAnnualMonthlyFeeTypedDict, CommerceSubscriptionItemCredits, CommerceSubscriptionItemCreditsTypedDict, + CommerceSubscriptionItemDiscounts, + CommerceSubscriptionItemDiscountsTypedDict, CommerceSubscriptionItemFee, CommerceSubscriptionItemFeeTypedDict, + CommerceSubscriptionItemNextPaymentCredits, + CommerceSubscriptionItemNextPaymentCreditsTypedDict, + CommerceSubscriptionItemNextPaymentPayer, + CommerceSubscriptionItemNextPaymentPayerTypedDict, + CommerceSubscriptionItemNextPaymentProration, + CommerceSubscriptionItemNextPaymentProrationTypedDict, + CommerceSubscriptionItemNextPaymentTotalsProration, + CommerceSubscriptionItemNextPaymentTotalsProrationTypedDict, CommerceSubscriptionItemObject, CommerceSubscriptionItemPayer, CommerceSubscriptionItemPayerTypedDict, @@ -208,11 +239,17 @@ CommerceSubscriptionItemProration, CommerceSubscriptionItemProrationTypedDict, CommerceSubscriptionItemStatus, + CommerceSubscriptionItemTotals, CommerceSubscriptionItemTotalsPayer, CommerceSubscriptionItemTotalsPayerTypedDict, + CommerceSubscriptionItemTotalsProration, + CommerceSubscriptionItemTotalsProrationTypedDict, + CommerceSubscriptionItemTotalsTypedDict, CommerceSubscriptionItemTypedDict, Credits, CreditsTypedDict, + Discounts, + DiscountsTypedDict, NextPayment, NextPaymentTypedDict, Plan, @@ -227,6 +264,18 @@ ) from .commercesubscriptionnextpayment import ( CommerceSubscriptionNextPayment, + CommerceSubscriptionNextPaymentCredits, + CommerceSubscriptionNextPaymentCreditsTypedDict, + CommerceSubscriptionNextPaymentDiscounts, + CommerceSubscriptionNextPaymentDiscountsTypedDict, + CommerceSubscriptionNextPaymentPayer, + CommerceSubscriptionNextPaymentPayerTypedDict, + CommerceSubscriptionNextPaymentProration, + CommerceSubscriptionNextPaymentProrationTypedDict, + CommerceSubscriptionNextPaymentTotals, + CommerceSubscriptionNextPaymentTotalsProration, + CommerceSubscriptionNextPaymentTotalsProrationTypedDict, + CommerceSubscriptionNextPaymentTotalsTypedDict, CommerceSubscriptionNextPaymentTypedDict, ) from .cookies import Cookies, CookiesObject, CookiesTypedDict @@ -287,6 +336,7 @@ ) from .createbillingpricerequest import ( CreateBillingPriceRequest, + CreateBillingPriceRequestSupportedBillingPeriods, CreateBillingPriceRequestTypedDict, ) from .createbillingpricetransitionop import ( @@ -323,6 +373,10 @@ OidcTypedDict, Provider, ) + from .createenterpriseconnectiontestrunop import ( + CreateEnterpriseConnectionTestRunRequest, + CreateEnterpriseConnectionTestRunRequestTypedDict, + ) from .createinvitationop import ( CreateInvitationRequestBody, CreateInvitationRequestBodyTypedDict, @@ -453,7 +507,12 @@ CreateSignInTokenRequestBody, CreateSignInTokenRequestBodyTypedDict, ) - from .createuserop import CreateUserRequestBody, CreateUserRequestBodyTypedDict + from .createuserop import ( + CreateUserRequestBody, + CreateUserRequestBodyTypedDict, + EmailAddressIdentificationStatus, + PhoneNumberIdentificationStatus, + ) from .createwaitlistentryop import ( CreateWaitlistEntryRequestBody, CreateWaitlistEntryRequestBodyTypedDict, @@ -593,8 +652,6 @@ FromOAuthTypedDict, Otp, OtpTypedDict, - Saml, - SamlTypedDict, Strategy, Ticket, TicketTypedDict, @@ -609,6 +666,8 @@ VerificationFromOauthVerificationObject, VerificationFromOauthVerificationStatus, VerificationObject, + VerificationSAMLVerificationEmailAddressSAML, + VerificationSAMLVerificationEmailAddressSAMLTypedDict, VerificationSCIM, VerificationSCIMTypedDict, VerificationSamlErrorClerkError, @@ -682,6 +741,28 @@ EnterpriseConnections, EnterpriseConnectionsTypedDict, ) + from .enterpriseconnectiontestrun import ( + ConnectionType, + EnterpriseConnectionTestRun, + EnterpriseConnectionTestRunStatus, + EnterpriseConnectionTestRunTypedDict, + Logs, + LogsTypedDict, + Oauth, + OauthTypedDict, + ParsedUserInfo, + ParsedUserInfoTypedDict, + Saml, + SamlTypedDict, + ) + from .enterpriseconnectiontestrunresponse import ( + EnterpriseConnectionTestRunResponse, + EnterpriseConnectionTestRunResponseTypedDict, + ) + from .enterpriseconnectiontestruns import ( + EnterpriseConnectionTestRuns, + EnterpriseConnectionTestRunsTypedDict, + ) from .extendbillingsubscriptionitemfreetrialop import ( ExtendBillingSubscriptionItemFreeTrialRequest, ExtendBillingSubscriptionItemFreeTrialRequestTypedDict, @@ -702,8 +783,6 @@ ExternalAccountWithVerificationVerificationTypedDict, GoogleOneTap, GoogleOneTapTypedDict, - Oauth, - OauthTypedDict, VerificationGoogleOneTapErrorClerkError, VerificationGoogleOneTapErrorClerkErrorTypedDict, VerificationGoogleOneTapVerificationError, @@ -715,6 +794,8 @@ VerificationOauthErrorClerkErrorTypedDict, VerificationOauthVerificationError, VerificationOauthVerificationErrorTypedDict, + VerificationOauthVerificationOauth, + VerificationOauthVerificationOauthTypedDict, VerificationOauthVerificationObject, VerificationOauthVerificationStatus, ) @@ -971,6 +1052,11 @@ ListEnterpriseConnectionsRequest, ListEnterpriseConnectionsRequestTypedDict, ) + from .listenterpriseconnectiontestrunsop import ( + ListEnterpriseConnectionTestRunsQueryParamStatus, + ListEnterpriseConnectionTestRunsRequest, + ListEnterpriseConnectionTestRunsRequestTypedDict, + ) from .listinstanceorganizationinvitationsop import ( ListInstanceOrganizationInvitationsQueryParamStatus, ListInstanceOrganizationInvitationsRequest, @@ -1212,6 +1298,14 @@ VerificationOtpVerificationStatus, VerificationOtpVerificationStrategy, ) + from .prepareemailaddressverificationop import ( + PrepareEmailAddressVerificationRequest, + PrepareEmailAddressVerificationRequestTypedDict, + ) + from .preparephonenumberverificationop import ( + PreparePhoneNumberVerificationRequest, + PreparePhoneNumberVerificationRequestTypedDict, + ) from .previewtemplateop import ( PreviewTemplateRequest, PreviewTemplateRequestBody, @@ -1254,6 +1348,7 @@ ReplaceRoleSetRequestTypedDict, ) from .replaceuseremailaddressop import ( + IdentificationStatus, ReplaceUserEmailAddressRequest, ReplaceUserEmailAddressRequestBody, ReplaceUserEmailAddressRequestBodyTypedDict, @@ -1266,6 +1361,7 @@ ReplaceUserMetadataRequestTypedDict, ) from .replaceuserphonenumberop import ( + ReplaceUserPhoneNumberIdentificationStatus, ReplaceUserPhoneNumberRequest, ReplaceUserPhoneNumberRequestBody, ReplaceUserPhoneNumberRequestBodyTypedDict, @@ -1434,6 +1530,14 @@ SAMLConnectionAttributeMappingTypedDict, ) from .samlconnections import SAMLConnections, SAMLConnectionsTypedDict + from .schemas_commerceperunittotal import ( + SchemasCommercePerUnitTotal, + SchemasCommercePerUnitTotalTypedDict, + ) + from .schemas_commerceperunittotaltier import ( + SchemasCommercePerUnitTotalTier, + SchemasCommercePerUnitTotalTierTypedDict, + ) from .schemas_commerceplan import ( SchemasCommercePlan, SchemasCommercePlanAnnualFee, @@ -1466,23 +1570,47 @@ SchemasCommerceSubscriptionItemAnnualMonthlyFeeTypedDict, SchemasCommerceSubscriptionItemCreditAmount, SchemasCommerceSubscriptionItemCreditAmountTypedDict, + SchemasCommerceSubscriptionItemCredits, + SchemasCommerceSubscriptionItemCreditsTypedDict, + SchemasCommerceSubscriptionItemDiscounts, + SchemasCommerceSubscriptionItemDiscountsTypedDict, SchemasCommerceSubscriptionItemFee, SchemasCommerceSubscriptionItemFeeTypedDict, SchemasCommerceSubscriptionItemNextInvoiceAmount, SchemasCommerceSubscriptionItemNextInvoiceAmountTypedDict, + SchemasCommerceSubscriptionItemNextInvoiceProration, + SchemasCommerceSubscriptionItemNextInvoiceProrationTypedDict, SchemasCommerceSubscriptionItemNextPayment, SchemasCommerceSubscriptionItemNextPaymentAmount, SchemasCommerceSubscriptionItemNextPaymentAmountTypedDict, + SchemasCommerceSubscriptionItemNextPaymentCredits, + SchemasCommerceSubscriptionItemNextPaymentCreditsTypedDict, + SchemasCommerceSubscriptionItemNextPaymentDiscounts, + SchemasCommerceSubscriptionItemNextPaymentDiscountsTypedDict, + SchemasCommerceSubscriptionItemNextPaymentPayer, + SchemasCommerceSubscriptionItemNextPaymentPayerTypedDict, + SchemasCommerceSubscriptionItemNextPaymentProration, + SchemasCommerceSubscriptionItemNextPaymentProrationTypedDict, + SchemasCommerceSubscriptionItemNextPaymentTotals, + SchemasCommerceSubscriptionItemNextPaymentTotalsProration, + SchemasCommerceSubscriptionItemNextPaymentTotalsProrationTypedDict, + SchemasCommerceSubscriptionItemNextPaymentTotalsTypedDict, SchemasCommerceSubscriptionItemNextPaymentTypedDict, SchemasCommerceSubscriptionItemObject, + SchemasCommerceSubscriptionItemPayer, SchemasCommerceSubscriptionItemPayerObject, + SchemasCommerceSubscriptionItemPayerTypedDict, SchemasCommerceSubscriptionItemPaymentSourceObject, SchemasCommerceSubscriptionItemPaymentSourceStatus, SchemasCommerceSubscriptionItemPlan, SchemasCommerceSubscriptionItemPlanObject, SchemasCommerceSubscriptionItemPlanPeriod, SchemasCommerceSubscriptionItemPlanTypedDict, + SchemasCommerceSubscriptionItemProration, + SchemasCommerceSubscriptionItemProrationTypedDict, SchemasCommerceSubscriptionItemStatus, + SchemasCommerceSubscriptionItemTotals, + SchemasCommerceSubscriptionItemTotalsTypedDict, SchemasCommerceSubscriptionItemTypedDict, ) from .schemas_featureresponse import ( @@ -1924,6 +2052,14 @@ "AnnualMonthlyFeeTypedDict", "AssignPermissionToOrganizationRoleRequest", "AssignPermissionToOrganizationRoleRequestTypedDict", + "AttemptEmailAddressVerificationRequest", + "AttemptEmailAddressVerificationRequestBody", + "AttemptEmailAddressVerificationRequestBodyTypedDict", + "AttemptEmailAddressVerificationRequestTypedDict", + "AttemptPhoneNumberVerificationRequest", + "AttemptPhoneNumberVerificationRequestBody", + "AttemptPhoneNumberVerificationRequestBodyTypedDict", + "AttemptPhoneNumberVerificationRequestTypedDict", "AttributeMapping", "AttributeMappingTypedDict", "Balance", @@ -1933,6 +2069,8 @@ "BillingPaymentAttempt", "BillingPaymentAttemptCredits", "BillingPaymentAttemptCreditsTypedDict", + "BillingPaymentAttemptDiscounts", + "BillingPaymentAttemptDiscountsTypedDict", "BillingPaymentAttemptObject", "BillingPaymentAttemptPayer", "BillingPaymentAttemptPayerTypedDict", @@ -1940,6 +2078,8 @@ "BillingPaymentAttemptProrationTypedDict", "BillingPaymentAttemptStatus", "BillingPaymentAttemptTotals", + "BillingPaymentAttemptTotalsProration", + "BillingPaymentAttemptTotalsProrationTypedDict", "BillingPaymentAttemptTotalsTypedDict", "BillingPaymentAttemptTypedDict", "BillingPriceResponse", @@ -2033,8 +2173,18 @@ "CommerceSubscriptionItemAnnualMonthlyFeeTypedDict", "CommerceSubscriptionItemCredits", "CommerceSubscriptionItemCreditsTypedDict", + "CommerceSubscriptionItemDiscounts", + "CommerceSubscriptionItemDiscountsTypedDict", "CommerceSubscriptionItemFee", "CommerceSubscriptionItemFeeTypedDict", + "CommerceSubscriptionItemNextPaymentCredits", + "CommerceSubscriptionItemNextPaymentCreditsTypedDict", + "CommerceSubscriptionItemNextPaymentPayer", + "CommerceSubscriptionItemNextPaymentPayerTypedDict", + "CommerceSubscriptionItemNextPaymentProration", + "CommerceSubscriptionItemNextPaymentProrationTypedDict", + "CommerceSubscriptionItemNextPaymentTotalsProration", + "CommerceSubscriptionItemNextPaymentTotalsProrationTypedDict", "CommerceSubscriptionItemObject", "CommerceSubscriptionItemPayer", "CommerceSubscriptionItemPayerTypedDict", @@ -2042,14 +2192,31 @@ "CommerceSubscriptionItemProration", "CommerceSubscriptionItemProrationTypedDict", "CommerceSubscriptionItemStatus", + "CommerceSubscriptionItemTotals", "CommerceSubscriptionItemTotalsPayer", "CommerceSubscriptionItemTotalsPayerTypedDict", + "CommerceSubscriptionItemTotalsProration", + "CommerceSubscriptionItemTotalsProrationTypedDict", + "CommerceSubscriptionItemTotalsTypedDict", "CommerceSubscriptionItemTypedDict", "CommerceSubscriptionNextPayment", + "CommerceSubscriptionNextPaymentCredits", + "CommerceSubscriptionNextPaymentCreditsTypedDict", + "CommerceSubscriptionNextPaymentDiscounts", + "CommerceSubscriptionNextPaymentDiscountsTypedDict", + "CommerceSubscriptionNextPaymentPayer", + "CommerceSubscriptionNextPaymentPayerTypedDict", + "CommerceSubscriptionNextPaymentProration", + "CommerceSubscriptionNextPaymentProrationTypedDict", + "CommerceSubscriptionNextPaymentTotals", + "CommerceSubscriptionNextPaymentTotalsProration", + "CommerceSubscriptionNextPaymentTotalsProrationTypedDict", + "CommerceSubscriptionNextPaymentTotalsTypedDict", "CommerceSubscriptionNextPaymentTypedDict", "CommerceSubscriptionObject", "CommerceSubscriptionStatus", "CommerceSubscriptionTypedDict", + "ConnectionType", "Cookies", "CookiesObject", "CookiesTypedDict", @@ -2095,6 +2262,7 @@ "CreateAllowlistIdentifierRequestBody", "CreateAllowlistIdentifierRequestBodyTypedDict", "CreateBillingPriceRequest", + "CreateBillingPriceRequestSupportedBillingPeriods", "CreateBillingPriceRequestTypedDict", "CreateBillingPriceTransitionRequest", "CreateBillingPriceTransitionRequestTypedDict", @@ -2113,6 +2281,8 @@ "CreateEnterpriseConnectionRequestBodyTypedDict", "CreateEnterpriseConnectionSaml", "CreateEnterpriseConnectionSamlTypedDict", + "CreateEnterpriseConnectionTestRunRequest", + "CreateEnterpriseConnectionTestRunRequestTypedDict", "CreateInvitationRequestBody", "CreateInvitationRequestBodyTypedDict", "CreateJWTTemplateClaims", @@ -2279,6 +2449,8 @@ "DisableMFARequestTypedDict", "DisableMFAResponseBody", "DisableMFAResponseBodyTypedDict", + "Discounts", + "DiscountsTypedDict", "Domain", "DomainObject", "DomainTypedDict", @@ -2287,6 +2459,7 @@ "DomainsTypedDict", "EffectiveMode", "EmailAddress", + "EmailAddressIdentificationStatus", "EmailAddressObject", "EmailAddressTypedDict", "EmailLink", @@ -2308,6 +2481,13 @@ "EnterpriseConnection", "EnterpriseConnectionSamlConnection", "EnterpriseConnectionSamlConnectionTypedDict", + "EnterpriseConnectionTestRun", + "EnterpriseConnectionTestRunResponse", + "EnterpriseConnectionTestRunResponseTypedDict", + "EnterpriseConnectionTestRunStatus", + "EnterpriseConnectionTestRunTypedDict", + "EnterpriseConnectionTestRuns", + "EnterpriseConnectionTestRunsTypedDict", "EnterpriseConnectionTypedDict", "EnterpriseConnections", "EnterpriseConnectionsTypedDict", @@ -2474,6 +2654,7 @@ "GroupsTypedDict", "IdentificationLink", "IdentificationLinkTypedDict", + "IdentificationStatus", "IdentifierType", "ImmediateCharge", "ImmediateChargeTypedDict", @@ -2520,6 +2701,9 @@ "ListAllOrganizationDomainsRequestTypedDict", "ListAllowlistIdentifiersRequest", "ListAllowlistIdentifiersRequestTypedDict", + "ListEnterpriseConnectionTestRunsQueryParamStatus", + "ListEnterpriseConnectionTestRunsRequest", + "ListEnterpriseConnectionTestRunsRequestTypedDict", "ListEnterpriseConnectionsRequest", "ListEnterpriseConnectionsRequestTypedDict", "ListInstanceOrganizationInvitationsQueryParamStatus", @@ -2560,6 +2744,8 @@ "ListWaitlistEntriesRequestTypedDict", "LockUserRequest", "LockUserRequestTypedDict", + "Logs", + "LogsTypedDict", "M2mTokens", "M2mTokensTypedDict", "Machine", @@ -2679,6 +2865,8 @@ "PaginatedCommercePlanResponseTypedDict", "PaginatedCommerceSubscriptionItemResponse", "PaginatedCommerceSubscriptionItemResponseTypedDict", + "ParsedUserInfo", + "ParsedUserInfoTypedDict", "Passkey", "PasskeyObject", "PasskeyTypedDict", @@ -2700,6 +2888,7 @@ "Permissions", "PermissionsTypedDict", "PhoneNumber", + "PhoneNumberIdentificationStatus", "PhoneNumberObject", "PhoneNumberTypedDict", "PhoneNumberVerification", @@ -2708,6 +2897,10 @@ "PlanPeriod", "PlanTypedDict", "PreferredSignInStrategyWhenPasswordRequired", + "PrepareEmailAddressVerificationRequest", + "PrepareEmailAddressVerificationRequestTypedDict", + "PreparePhoneNumberVerificationRequest", + "PreparePhoneNumberVerificationRequestTypedDict", "PreviewTemplateRequest", "PreviewTemplateRequestBody", "PreviewTemplateRequestBodyTypedDict", @@ -2756,6 +2949,7 @@ "ReplaceUserMetadataRequestBody", "ReplaceUserMetadataRequestBodyTypedDict", "ReplaceUserMetadataRequestTypedDict", + "ReplaceUserPhoneNumberIdentificationStatus", "ReplaceUserPhoneNumberRequest", "ReplaceUserPhoneNumberRequestBody", "ReplaceUserPhoneNumberRequestBodyTypedDict", @@ -2893,6 +3087,10 @@ "SDKError", "Saml", "SamlTypedDict", + "SchemasCommercePerUnitTotal", + "SchemasCommercePerUnitTotalTier", + "SchemasCommercePerUnitTotalTierTypedDict", + "SchemasCommercePerUnitTotalTypedDict", "SchemasCommercePlan", "SchemasCommercePlanAnnualFee", "SchemasCommercePlanAnnualFeeTypedDict", @@ -2911,23 +3109,47 @@ "SchemasCommerceSubscriptionItemAnnualMonthlyFeeTypedDict", "SchemasCommerceSubscriptionItemCreditAmount", "SchemasCommerceSubscriptionItemCreditAmountTypedDict", + "SchemasCommerceSubscriptionItemCredits", + "SchemasCommerceSubscriptionItemCreditsTypedDict", + "SchemasCommerceSubscriptionItemDiscounts", + "SchemasCommerceSubscriptionItemDiscountsTypedDict", "SchemasCommerceSubscriptionItemFee", "SchemasCommerceSubscriptionItemFeeTypedDict", "SchemasCommerceSubscriptionItemNextInvoiceAmount", "SchemasCommerceSubscriptionItemNextInvoiceAmountTypedDict", + "SchemasCommerceSubscriptionItemNextInvoiceProration", + "SchemasCommerceSubscriptionItemNextInvoiceProrationTypedDict", "SchemasCommerceSubscriptionItemNextPayment", "SchemasCommerceSubscriptionItemNextPaymentAmount", "SchemasCommerceSubscriptionItemNextPaymentAmountTypedDict", + "SchemasCommerceSubscriptionItemNextPaymentCredits", + "SchemasCommerceSubscriptionItemNextPaymentCreditsTypedDict", + "SchemasCommerceSubscriptionItemNextPaymentDiscounts", + "SchemasCommerceSubscriptionItemNextPaymentDiscountsTypedDict", + "SchemasCommerceSubscriptionItemNextPaymentPayer", + "SchemasCommerceSubscriptionItemNextPaymentPayerTypedDict", + "SchemasCommerceSubscriptionItemNextPaymentProration", + "SchemasCommerceSubscriptionItemNextPaymentProrationTypedDict", + "SchemasCommerceSubscriptionItemNextPaymentTotals", + "SchemasCommerceSubscriptionItemNextPaymentTotalsProration", + "SchemasCommerceSubscriptionItemNextPaymentTotalsProrationTypedDict", + "SchemasCommerceSubscriptionItemNextPaymentTotalsTypedDict", "SchemasCommerceSubscriptionItemNextPaymentTypedDict", "SchemasCommerceSubscriptionItemObject", + "SchemasCommerceSubscriptionItemPayer", "SchemasCommerceSubscriptionItemPayerObject", + "SchemasCommerceSubscriptionItemPayerTypedDict", "SchemasCommerceSubscriptionItemPaymentSourceObject", "SchemasCommerceSubscriptionItemPaymentSourceStatus", "SchemasCommerceSubscriptionItemPlan", "SchemasCommerceSubscriptionItemPlanObject", "SchemasCommerceSubscriptionItemPlanPeriod", "SchemasCommerceSubscriptionItemPlanTypedDict", + "SchemasCommerceSubscriptionItemProration", + "SchemasCommerceSubscriptionItemProrationTypedDict", "SchemasCommerceSubscriptionItemStatus", + "SchemasCommerceSubscriptionItemTotals", + "SchemasCommerceSubscriptionItemTotalsTypedDict", "SchemasCommerceSubscriptionItemTypedDict", "SchemasFeatureResponse", "SchemasFeatureResponseObject", @@ -2973,6 +3195,7 @@ "Strategy", "SubscriptionItem", "SubscriptionItemTypedDict", + "SupportedBillingPeriods", "SvixURL", "SvixURLTypedDict", "Template", @@ -3196,6 +3419,8 @@ "VerificationOauthVerificationEnterpriseAccountStatus", "VerificationOauthVerificationError", "VerificationOauthVerificationErrorTypedDict", + "VerificationOauthVerificationOauth", + "VerificationOauthVerificationOauthTypedDict", "VerificationOauthVerificationObject", "VerificationOauthVerificationStatus", "VerificationObject", @@ -3207,10 +3432,14 @@ "VerificationPasskeyVerificationObject", "VerificationPasskeyVerificationStatus", "VerificationPasskeyVerificationStrategy", + "VerificationResponse", + "VerificationResponseTypedDict", "VerificationSAML", "VerificationSAMLErrorSAMLAccountClerkError", "VerificationSAMLErrorSAMLAccountClerkErrorTypedDict", "VerificationSAMLTypedDict", + "VerificationSAMLVerificationEmailAddressSAML", + "VerificationSAMLVerificationEmailAddressSAMLTypedDict", "VerificationSAMLVerificationSAML", "VerificationSAMLVerificationSAMLAccountObject", "VerificationSAMLVerificationSAMLAccountStatus", @@ -3331,6 +3560,8 @@ ] _dynamic_imports: dict[str, str] = { + "VerificationResponse": "._verificationresponse", + "VerificationResponseTypedDict": "._verificationresponse", "ActorToken": ".actortoken", "ActorTokenActor": ".actortoken", "ActorTokenActorTypedDict": ".actortoken", @@ -3359,11 +3590,21 @@ "IdentifierType": ".allowlistidentifier", "AssignPermissionToOrganizationRoleRequest": ".assignpermissiontoorganizationroleop", "AssignPermissionToOrganizationRoleRequestTypedDict": ".assignpermissiontoorganizationroleop", + "AttemptEmailAddressVerificationRequest": ".attemptemailaddressverificationop", + "AttemptEmailAddressVerificationRequestBody": ".attemptemailaddressverificationop", + "AttemptEmailAddressVerificationRequestBodyTypedDict": ".attemptemailaddressverificationop", + "AttemptEmailAddressVerificationRequestTypedDict": ".attemptemailaddressverificationop", + "AttemptPhoneNumberVerificationRequest": ".attemptphonenumberverificationop", + "AttemptPhoneNumberVerificationRequestBody": ".attemptphonenumberverificationop", + "AttemptPhoneNumberVerificationRequestBodyTypedDict": ".attemptphonenumberverificationop", + "AttemptPhoneNumberVerificationRequestTypedDict": ".attemptphonenumberverificationop", "BanUserRequest": ".banuserop", "BanUserRequestTypedDict": ".banuserop", "BillingPaymentAttempt": ".billingpaymentattempt", "BillingPaymentAttemptCredits": ".billingpaymentattempt", "BillingPaymentAttemptCreditsTypedDict": ".billingpaymentattempt", + "BillingPaymentAttemptDiscounts": ".billingpaymentattempt", + "BillingPaymentAttemptDiscountsTypedDict": ".billingpaymentattempt", "BillingPaymentAttemptObject": ".billingpaymentattempt", "BillingPaymentAttemptPayer": ".billingpaymentattempt", "BillingPaymentAttemptPayerTypedDict": ".billingpaymentattempt", @@ -3371,6 +3612,8 @@ "BillingPaymentAttemptProrationTypedDict": ".billingpaymentattempt", "BillingPaymentAttemptStatus": ".billingpaymentattempt", "BillingPaymentAttemptTotals": ".billingpaymentattempt", + "BillingPaymentAttemptTotalsProration": ".billingpaymentattempt", + "BillingPaymentAttemptTotalsProrationTypedDict": ".billingpaymentattempt", "BillingPaymentAttemptTotalsTypedDict": ".billingpaymentattempt", "BillingPaymentAttemptTypedDict": ".billingpaymentattempt", "Payee": ".billingpaymentattempt", @@ -3384,6 +3627,7 @@ "BillingPriceResponseFeeTypedDict": ".billingpriceresponse", "BillingPriceResponseObject": ".billingpriceresponse", "BillingPriceResponseTypedDict": ".billingpriceresponse", + "SupportedBillingPeriods": ".billingpriceresponse", "BillingStatement": ".billingstatement", "BillingStatementGroupsObject": ".billingstatement", "BillingStatementObject": ".billingstatement", @@ -3475,8 +3719,18 @@ "CommerceSubscriptionItemAnnualMonthlyFeeTypedDict": ".commercesubscriptionitem", "CommerceSubscriptionItemCredits": ".commercesubscriptionitem", "CommerceSubscriptionItemCreditsTypedDict": ".commercesubscriptionitem", + "CommerceSubscriptionItemDiscounts": ".commercesubscriptionitem", + "CommerceSubscriptionItemDiscountsTypedDict": ".commercesubscriptionitem", "CommerceSubscriptionItemFee": ".commercesubscriptionitem", "CommerceSubscriptionItemFeeTypedDict": ".commercesubscriptionitem", + "CommerceSubscriptionItemNextPaymentCredits": ".commercesubscriptionitem", + "CommerceSubscriptionItemNextPaymentCreditsTypedDict": ".commercesubscriptionitem", + "CommerceSubscriptionItemNextPaymentPayer": ".commercesubscriptionitem", + "CommerceSubscriptionItemNextPaymentPayerTypedDict": ".commercesubscriptionitem", + "CommerceSubscriptionItemNextPaymentProration": ".commercesubscriptionitem", + "CommerceSubscriptionItemNextPaymentProrationTypedDict": ".commercesubscriptionitem", + "CommerceSubscriptionItemNextPaymentTotalsProration": ".commercesubscriptionitem", + "CommerceSubscriptionItemNextPaymentTotalsProrationTypedDict": ".commercesubscriptionitem", "CommerceSubscriptionItemObject": ".commercesubscriptionitem", "CommerceSubscriptionItemPayer": ".commercesubscriptionitem", "CommerceSubscriptionItemPayerTypedDict": ".commercesubscriptionitem", @@ -3484,11 +3738,17 @@ "CommerceSubscriptionItemProration": ".commercesubscriptionitem", "CommerceSubscriptionItemProrationTypedDict": ".commercesubscriptionitem", "CommerceSubscriptionItemStatus": ".commercesubscriptionitem", + "CommerceSubscriptionItemTotals": ".commercesubscriptionitem", "CommerceSubscriptionItemTotalsPayer": ".commercesubscriptionitem", "CommerceSubscriptionItemTotalsPayerTypedDict": ".commercesubscriptionitem", + "CommerceSubscriptionItemTotalsProration": ".commercesubscriptionitem", + "CommerceSubscriptionItemTotalsProrationTypedDict": ".commercesubscriptionitem", + "CommerceSubscriptionItemTotalsTypedDict": ".commercesubscriptionitem", "CommerceSubscriptionItemTypedDict": ".commercesubscriptionitem", "Credits": ".commercesubscriptionitem", "CreditsTypedDict": ".commercesubscriptionitem", + "Discounts": ".commercesubscriptionitem", + "DiscountsTypedDict": ".commercesubscriptionitem", "NextPayment": ".commercesubscriptionitem", "NextPaymentTypedDict": ".commercesubscriptionitem", "Plan": ".commercesubscriptionitem", @@ -3501,6 +3761,18 @@ "Totals": ".commercesubscriptionitem", "TotalsTypedDict": ".commercesubscriptionitem", "CommerceSubscriptionNextPayment": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentCredits": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentCreditsTypedDict": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentDiscounts": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentDiscountsTypedDict": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentPayer": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentPayerTypedDict": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentProration": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentProrationTypedDict": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentTotals": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentTotalsProration": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentTotalsProrationTypedDict": ".commercesubscriptionnextpayment", + "CommerceSubscriptionNextPaymentTotalsTypedDict": ".commercesubscriptionnextpayment", "CommerceSubscriptionNextPaymentTypedDict": ".commercesubscriptionnextpayment", "Cookies": ".cookies", "CookiesObject": ".cookies", @@ -3551,6 +3823,7 @@ "CreateAPIKeyResponseBody": ".createapikeyop", "CreateAPIKeyResponseBodyTypedDict": ".createapikeyop", "CreateBillingPriceRequest": ".createbillingpricerequest", + "CreateBillingPriceRequestSupportedBillingPeriods": ".createbillingpricerequest", "CreateBillingPriceRequestTypedDict": ".createbillingpricerequest", "CreateBillingPriceTransitionRequest": ".createbillingpricetransitionop", "CreateBillingPriceTransitionRequestTypedDict": ".createbillingpricetransitionop", @@ -3574,6 +3847,8 @@ "Oidc": ".createenterpriseconnectionop", "OidcTypedDict": ".createenterpriseconnectionop", "Provider": ".createenterpriseconnectionop", + "CreateEnterpriseConnectionTestRunRequest": ".createenterpriseconnectiontestrunop", + "CreateEnterpriseConnectionTestRunRequestTypedDict": ".createenterpriseconnectiontestrunop", "CreateInvitationRequestBody": ".createinvitationop", "CreateInvitationRequestBodyTypedDict": ".createinvitationop", "TemplateSlug": ".createinvitationop", @@ -3664,6 +3939,8 @@ "CreateSignInTokenRequestBodyTypedDict": ".createsignintokenop", "CreateUserRequestBody": ".createuserop", "CreateUserRequestBodyTypedDict": ".createuserop", + "EmailAddressIdentificationStatus": ".createuserop", + "PhoneNumberIdentificationStatus": ".createuserop", "CreateWaitlistEntryRequestBody": ".createwaitlistentryop", "CreateWaitlistEntryRequestBodyTypedDict": ".createwaitlistentryop", "DeleteAllowlistIdentifierRequest": ".deleteallowlistidentifierop", @@ -3761,8 +4038,6 @@ "FromOAuthTypedDict": ".emailaddress", "Otp": ".emailaddress", "OtpTypedDict": ".emailaddress", - "Saml": ".emailaddress", - "SamlTypedDict": ".emailaddress", "Strategy": ".emailaddress", "Ticket": ".emailaddress", "TicketTypedDict": ".emailaddress", @@ -3777,6 +4052,8 @@ "VerificationFromOauthVerificationObject": ".emailaddress", "VerificationFromOauthVerificationStatus": ".emailaddress", "VerificationObject": ".emailaddress", + "VerificationSAMLVerificationEmailAddressSAML": ".emailaddress", + "VerificationSAMLVerificationEmailAddressSAMLTypedDict": ".emailaddress", "VerificationSCIM": ".emailaddress", "VerificationSCIMTypedDict": ".emailaddress", "VerificationSamlErrorClerkError": ".emailaddress", @@ -3843,6 +4120,22 @@ "OauthConfigTypedDict": ".enterpriseconnection", "EnterpriseConnections": ".enterpriseconnections", "EnterpriseConnectionsTypedDict": ".enterpriseconnections", + "ConnectionType": ".enterpriseconnectiontestrun", + "EnterpriseConnectionTestRun": ".enterpriseconnectiontestrun", + "EnterpriseConnectionTestRunStatus": ".enterpriseconnectiontestrun", + "EnterpriseConnectionTestRunTypedDict": ".enterpriseconnectiontestrun", + "Logs": ".enterpriseconnectiontestrun", + "LogsTypedDict": ".enterpriseconnectiontestrun", + "Oauth": ".enterpriseconnectiontestrun", + "OauthTypedDict": ".enterpriseconnectiontestrun", + "ParsedUserInfo": ".enterpriseconnectiontestrun", + "ParsedUserInfoTypedDict": ".enterpriseconnectiontestrun", + "Saml": ".enterpriseconnectiontestrun", + "SamlTypedDict": ".enterpriseconnectiontestrun", + "EnterpriseConnectionTestRunResponse": ".enterpriseconnectiontestrunresponse", + "EnterpriseConnectionTestRunResponseTypedDict": ".enterpriseconnectiontestrunresponse", + "EnterpriseConnectionTestRuns": ".enterpriseconnectiontestruns", + "EnterpriseConnectionTestRunsTypedDict": ".enterpriseconnectiontestruns", "ExtendBillingSubscriptionItemFreeTrialRequest": ".extendbillingsubscriptionitemfreetrialop", "ExtendBillingSubscriptionItemFreeTrialRequestTypedDict": ".extendbillingsubscriptionitemfreetrialop", "ExtendFreeTrialRequest": ".extendfreetrialrequest", @@ -3858,8 +4151,6 @@ "ExternalAccountWithVerificationVerificationTypedDict": ".externalaccountwithverification", "GoogleOneTap": ".externalaccountwithverification", "GoogleOneTapTypedDict": ".externalaccountwithverification", - "Oauth": ".externalaccountwithverification", - "OauthTypedDict": ".externalaccountwithverification", "VerificationGoogleOneTapErrorClerkError": ".externalaccountwithverification", "VerificationGoogleOneTapErrorClerkErrorTypedDict": ".externalaccountwithverification", "VerificationGoogleOneTapVerificationError": ".externalaccountwithverification", @@ -3871,6 +4162,8 @@ "VerificationOauthErrorClerkErrorTypedDict": ".externalaccountwithverification", "VerificationOauthVerificationError": ".externalaccountwithverification", "VerificationOauthVerificationErrorTypedDict": ".externalaccountwithverification", + "VerificationOauthVerificationOauth": ".externalaccountwithverification", + "VerificationOauthVerificationOauthTypedDict": ".externalaccountwithverification", "VerificationOauthVerificationObject": ".externalaccountwithverification", "VerificationOauthVerificationStatus": ".externalaccountwithverification", "FeatureResponse": ".featureresponse", @@ -4062,6 +4355,9 @@ "ListAllowlistIdentifiersRequestTypedDict": ".listallowlistidentifiersop", "ListEnterpriseConnectionsRequest": ".listenterpriseconnectionsop", "ListEnterpriseConnectionsRequestTypedDict": ".listenterpriseconnectionsop", + "ListEnterpriseConnectionTestRunsQueryParamStatus": ".listenterpriseconnectiontestrunsop", + "ListEnterpriseConnectionTestRunsRequest": ".listenterpriseconnectiontestrunsop", + "ListEnterpriseConnectionTestRunsRequestTypedDict": ".listenterpriseconnectiontestrunsop", "ListInstanceOrganizationInvitationsQueryParamStatus": ".listinstanceorganizationinvitationsop", "ListInstanceOrganizationInvitationsRequest": ".listinstanceorganizationinvitationsop", "ListInstanceOrganizationInvitationsRequestTypedDict": ".listinstanceorganizationinvitationsop", @@ -4233,6 +4529,10 @@ "VerificationOtpVerificationObject": ".phonenumber", "VerificationOtpVerificationStatus": ".phonenumber", "VerificationOtpVerificationStrategy": ".phonenumber", + "PrepareEmailAddressVerificationRequest": ".prepareemailaddressverificationop", + "PrepareEmailAddressVerificationRequestTypedDict": ".prepareemailaddressverificationop", + "PreparePhoneNumberVerificationRequest": ".preparephonenumberverificationop", + "PreparePhoneNumberVerificationRequestTypedDict": ".preparephonenumberverificationop", "PreviewTemplateRequest": ".previewtemplateop", "PreviewTemplateRequestBody": ".previewtemplateop", "PreviewTemplateRequestBodyTypedDict": ".previewtemplateop", @@ -4264,6 +4564,7 @@ "ReplaceRoleSetRequestBody": ".replacerolesetop", "ReplaceRoleSetRequestBodyTypedDict": ".replacerolesetop", "ReplaceRoleSetRequestTypedDict": ".replacerolesetop", + "IdentificationStatus": ".replaceuseremailaddressop", "ReplaceUserEmailAddressRequest": ".replaceuseremailaddressop", "ReplaceUserEmailAddressRequestBody": ".replaceuseremailaddressop", "ReplaceUserEmailAddressRequestBodyTypedDict": ".replaceuseremailaddressop", @@ -4272,6 +4573,7 @@ "ReplaceUserMetadataRequestBody": ".replaceusermetadataop", "ReplaceUserMetadataRequestBodyTypedDict": ".replaceusermetadataop", "ReplaceUserMetadataRequestTypedDict": ".replaceusermetadataop", + "ReplaceUserPhoneNumberIdentificationStatus": ".replaceuserphonenumberop", "ReplaceUserPhoneNumberRequest": ".replaceuserphonenumberop", "ReplaceUserPhoneNumberRequestBody": ".replaceuserphonenumberop", "ReplaceUserPhoneNumberRequestBodyTypedDict": ".replaceuserphonenumberop", @@ -4417,6 +4719,10 @@ "SAMLConnectionAttributeMappingTypedDict": ".samlconnectionattributemapping", "SAMLConnections": ".samlconnections", "SAMLConnectionsTypedDict": ".samlconnections", + "SchemasCommercePerUnitTotal": ".schemas_commerceperunittotal", + "SchemasCommercePerUnitTotalTypedDict": ".schemas_commerceperunittotal", + "SchemasCommercePerUnitTotalTier": ".schemas_commerceperunittotaltier", + "SchemasCommercePerUnitTotalTierTypedDict": ".schemas_commerceperunittotaltier", "SchemasCommercePlan": ".schemas_commerceplan", "SchemasCommercePlanAnnualFee": ".schemas_commerceplan", "SchemasCommercePlanAnnualFeeTypedDict": ".schemas_commerceplan", @@ -4446,23 +4752,47 @@ "SchemasCommerceSubscriptionItemAnnualMonthlyFeeTypedDict": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemCreditAmount": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemCreditAmountTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemCredits": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemCreditsTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemDiscounts": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemDiscountsTypedDict": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemFee": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemFeeTypedDict": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemNextInvoiceAmount": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemNextInvoiceAmountTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextInvoiceProration": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextInvoiceProrationTypedDict": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemNextPayment": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemNextPaymentAmount": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemNextPaymentAmountTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentCredits": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentCreditsTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentDiscounts": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentDiscountsTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentPayer": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentPayerTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentProration": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentProrationTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentTotals": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentTotalsProration": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentTotalsProrationTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemNextPaymentTotalsTypedDict": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemNextPaymentTypedDict": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemObject": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemPayer": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemPayerObject": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemPayerTypedDict": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemPaymentSourceObject": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemPaymentSourceStatus": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemPlan": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemPlanObject": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemPlanPeriod": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemPlanTypedDict": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemProration": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemProrationTypedDict": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemStatus": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemTotals": ".schemas_commercesubscriptionitem", + "SchemasCommerceSubscriptionItemTotalsTypedDict": ".schemas_commercesubscriptionitem", "SchemasCommerceSubscriptionItemTypedDict": ".schemas_commercesubscriptionitem", "SchemasFeatureResponse": ".schemas_featureresponse", "SchemasFeatureResponseObject": ".schemas_featureresponse", diff --git a/src/clerk_backend_api/models/_verificationresponse.py b/src/clerk_backend_api/models/_verificationresponse.py new file mode 100644 index 00000000..832f35e7 --- /dev/null +++ b/src/clerk_backend_api/models/_verificationresponse.py @@ -0,0 +1,88 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from pydantic import model_serializer +from typing import Optional +from typing_extensions import NotRequired, TypedDict + + +class VerificationResponseTypedDict(TypedDict): + r"""The verification. After prepare_verification it is pending (unverified); + after attempt_verification its status reflects the attempt outcome. + """ + + object: NotRequired[str] + r"""The type of the verification object.""" + id: NotRequired[str] + r"""The ID of the verification. Pass this to attempt_verification.""" + status: NotRequired[str] + r"""The status of the verification (unverified, verified, expired, or failed).""" + strategy: NotRequired[str] + r"""The verification strategy (email_code or phone_code).""" + attempts: NotRequired[Nullable[int]] + r"""The number of attempts made against this verification.""" + expire_at: NotRequired[Nullable[int]] + r"""Unix timestamp (milliseconds) at which the code expires.""" + channel: NotRequired[Nullable[str]] + r"""The channel the code was sent over (phone numbers only).""" + + +class VerificationResponse(BaseModel): + r"""The verification. After prepare_verification it is pending (unverified); + after attempt_verification its status reflects the attempt outcome. + """ + + object: Optional[str] = None + r"""The type of the verification object.""" + + id: Optional[str] = None + r"""The ID of the verification. Pass this to attempt_verification.""" + + status: Optional[str] = None + r"""The status of the verification (unverified, verified, expired, or failed).""" + + strategy: Optional[str] = None + r"""The verification strategy (email_code or phone_code).""" + + attempts: OptionalNullable[int] = UNSET + r"""The number of attempts made against this verification.""" + + expire_at: OptionalNullable[int] = UNSET + r"""Unix timestamp (milliseconds) at which the code expires.""" + + channel: OptionalNullable[str] = UNSET + r"""The channel the code was sent over (phone numbers only).""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + ["object", "id", "status", "strategy", "attempts", "expire_at", "channel"] + ) + nullable_fields = set(["attempts", "expire_at", "channel"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/attemptemailaddressverificationop.py b/src/clerk_backend_api/models/attemptemailaddressverificationop.py new file mode 100644 index 00000000..45505b8c --- /dev/null +++ b/src/clerk_backend_api/models/attemptemailaddressverificationop.py @@ -0,0 +1,39 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata, RequestMetadata +from typing_extensions import Annotated, TypedDict + + +class AttemptEmailAddressVerificationRequestBodyTypedDict(TypedDict): + verification_id: str + r"""The ID of the verification to check, such as one returned by prepare_verification""" + code: str + r"""The verification code that was sent to the email address""" + + +class AttemptEmailAddressVerificationRequestBody(BaseModel): + verification_id: str + r"""The ID of the verification to check, such as one returned by prepare_verification""" + + code: str + r"""The verification code that was sent to the email address""" + + +class AttemptEmailAddressVerificationRequestTypedDict(TypedDict): + email_address_id: str + r"""The ID of the email address whose code is being verified""" + request_body: AttemptEmailAddressVerificationRequestBodyTypedDict + + +class AttemptEmailAddressVerificationRequest(BaseModel): + email_address_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the email address whose code is being verified""" + + request_body: Annotated[ + AttemptEmailAddressVerificationRequestBody, + FieldMetadata(request=RequestMetadata(media_type="application/json")), + ] diff --git a/src/clerk_backend_api/models/attemptphonenumberverificationop.py b/src/clerk_backend_api/models/attemptphonenumberverificationop.py new file mode 100644 index 00000000..0f21caf6 --- /dev/null +++ b/src/clerk_backend_api/models/attemptphonenumberverificationop.py @@ -0,0 +1,39 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata, RequestMetadata +from typing_extensions import Annotated, TypedDict + + +class AttemptPhoneNumberVerificationRequestBodyTypedDict(TypedDict): + verification_id: str + r"""The ID of the verification to check, such as one returned by prepare_verification""" + code: str + r"""The verification code that was sent to the phone number""" + + +class AttemptPhoneNumberVerificationRequestBody(BaseModel): + verification_id: str + r"""The ID of the verification to check, such as one returned by prepare_verification""" + + code: str + r"""The verification code that was sent to the phone number""" + + +class AttemptPhoneNumberVerificationRequestTypedDict(TypedDict): + phone_number_id: str + r"""The ID of the phone number whose code is being verified""" + request_body: AttemptPhoneNumberVerificationRequestBodyTypedDict + + +class AttemptPhoneNumberVerificationRequest(BaseModel): + phone_number_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the phone number whose code is being verified""" + + request_body: Annotated[ + AttemptPhoneNumberVerificationRequestBody, + FieldMetadata(request=RequestMetadata(media_type="application/json")), + ] diff --git a/src/clerk_backend_api/models/billingpaymentattempt.py b/src/clerk_backend_api/models/billingpaymentattempt.py index 4fbd856f..5873f11d 100644 --- a/src/clerk_backend_api/models/billingpaymentattempt.py +++ b/src/clerk_backend_api/models/billingpaymentattempt.py @@ -7,7 +7,10 @@ CommercePaymentMethodResponse, CommercePaymentMethodResponseTypedDict, ) -from .commerceperunittotal import CommercePerUnitTotal, CommercePerUnitTotalTypedDict +from .schemas_commerceperunittotal import ( + SchemasCommercePerUnitTotal, + SchemasCommercePerUnitTotalTypedDict, +) from clerk_backend_api.types import ( BaseModel, Nullable, @@ -99,6 +102,64 @@ def serialize_model(self, handler): return m +class BillingPaymentAttemptTotalsProrationTypedDict(TypedDict): + r"""Proration details from passed subscription time""" + + amount: CommerceMoneyResponseTypedDict + cycle_days_passed: int + r"""Number of days that have passed in the billing cycle""" + cycle_days_total: int + r"""Total number of days in the billing cycle""" + cycle_passed_percent: float + r"""Percentage of the billing cycle that has passed""" + + +class BillingPaymentAttemptTotalsProration(BaseModel): + r"""Proration details from passed subscription time""" + + amount: CommerceMoneyResponse + + cycle_days_passed: int + r"""Number of days that have passed in the billing cycle""" + + cycle_days_total: int + r"""Total number of days in the billing cycle""" + + cycle_passed_percent: float + r"""Percentage of the billing cycle that has passed""" + + +class BillingPaymentAttemptDiscountsTypedDict(TypedDict): + r"""Information about the discounts applied to the payment""" + + proration: Nullable[BillingPaymentAttemptTotalsProrationTypedDict] + r"""Proration details from passed subscription time""" + total: CommerceMoneyResponseTypedDict + + +class BillingPaymentAttemptDiscounts(BaseModel): + r"""Information about the discounts applied to the payment""" + + proration: Nullable[BillingPaymentAttemptTotalsProration] + r"""Proration details from passed subscription time""" + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + class BillingPaymentAttemptTotalsTypedDict(TypedDict): r"""Totals breakdown for this payment attempt.""" @@ -106,8 +167,10 @@ class BillingPaymentAttemptTotalsTypedDict(TypedDict): base_fee: CommerceMoneyResponseTypedDict tax_total: CommerceMoneyResponseTypedDict grand_total: CommerceMoneyResponseTypedDict - per_unit_totals: NotRequired[List[CommercePerUnitTotalTypedDict]] + per_unit_totals: NotRequired[List[SchemasCommercePerUnitTotalTypedDict]] credits: NotRequired[Nullable[BillingPaymentAttemptCreditsTypedDict]] + discounts: NotRequired[Nullable[BillingPaymentAttemptDiscountsTypedDict]] + r"""Information about the discounts applied to the payment""" class BillingPaymentAttemptTotals(BaseModel): @@ -121,14 +184,17 @@ class BillingPaymentAttemptTotals(BaseModel): grand_total: CommerceMoneyResponse - per_unit_totals: Optional[List[CommercePerUnitTotal]] = None + per_unit_totals: Optional[List[SchemasCommercePerUnitTotal]] = None credits: OptionalNullable[BillingPaymentAttemptCredits] = UNSET + discounts: OptionalNullable[BillingPaymentAttemptDiscounts] = UNSET + r"""Information about the discounts applied to the payment""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["per_unit_totals", "credits"]) - nullable_fields = set(["credits"]) + optional_fields = set(["per_unit_totals", "credits", "discounts"]) + nullable_fields = set(["credits", "discounts"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/billingpriceresponse.py b/src/clerk_backend_api/models/billingpriceresponse.py index 864a920b..37299b9e 100644 --- a/src/clerk_backend_api/models/billingpriceresponse.py +++ b/src/clerk_backend_api/models/billingpriceresponse.py @@ -69,6 +69,14 @@ class BillingPriceResponseAnnualMonthlyFee(BaseModel): r"""The currency symbol (e.g., \"$\").""" +class SupportedBillingPeriods(str, Enum): + r"""Which billing periods this price supports.""" + + MONTH = "month" + ANNUAL = "annual" + BOTH = "both" + + class BillingPriceResponseTypedDict(TypedDict): object: BillingPriceResponseObject r"""String representing the object's type. Objects of the same type share the same value.""" @@ -92,6 +100,8 @@ class BillingPriceResponseTypedDict(TypedDict): r"""Whether this price is the default price for its plan.""" created_at: int r"""Unix timestamp (milliseconds) of creation.""" + supported_billing_periods: SupportedBillingPeriods + r"""Which billing periods this price supports.""" description: NotRequired[Nullable[str]] r"""The description of the price.""" @@ -131,6 +141,9 @@ class BillingPriceResponse(BaseModel): created_at: int r"""Unix timestamp (milliseconds) of creation.""" + supported_billing_periods: SupportedBillingPeriods + r"""Which billing periods this price supports.""" + description: OptionalNullable[str] = UNSET r"""The description of the price.""" diff --git a/src/clerk_backend_api/models/commerceperunittotal.py b/src/clerk_backend_api/models/commerceperunittotal.py index 1b55e6cf..654961fe 100644 --- a/src/clerk_backend_api/models/commerceperunittotal.py +++ b/src/clerk_backend_api/models/commerceperunittotal.py @@ -12,19 +12,19 @@ class CommercePerUnitTotalTypedDict(TypedDict): name: str - r"""Name of the billable unit (for example, seats)""" + r"""Name of the billable unit (for example, `seats`).""" block_size: int - r"""Number of units included in each pricing block""" + r"""Number of units included in each pricing block.""" tiers: List[CommercePerUnitTotalTierTypedDict] - r"""Computed totals for each pricing tier""" + r"""Computed totals for each pricing tier.""" class CommercePerUnitTotal(BaseModel): name: str - r"""Name of the billable unit (for example, seats)""" + r"""Name of the billable unit (for example, `seats`).""" block_size: int - r"""Number of units included in each pricing block""" + r"""Number of units included in each pricing block.""" tiers: List[CommercePerUnitTotalTier] - r"""Computed totals for each pricing tier""" + r"""Computed totals for each pricing tier.""" diff --git a/src/clerk_backend_api/models/commerceperunittotaltier.py b/src/clerk_backend_api/models/commerceperunittotaltier.py index 5a279e4f..a1682fe8 100644 --- a/src/clerk_backend_api/models/commerceperunittotaltier.py +++ b/src/clerk_backend_api/models/commerceperunittotaltier.py @@ -17,7 +17,7 @@ class CommercePerUnitTotalTierTypedDict(TypedDict): fee_per_block: CommerceMoneyResponseTypedDict total: CommerceMoneyResponseTypedDict quantity: NotRequired[Nullable[int]] - r"""Units billed in this tier; null means unlimited""" + r"""Units billed in this tier; null means unlimited.""" class CommercePerUnitTotalTier(BaseModel): @@ -26,7 +26,7 @@ class CommercePerUnitTotalTier(BaseModel): total: CommerceMoneyResponse quantity: OptionalNullable[int] = UNSET - r"""Units billed in this tier; null means unlimited""" + r"""Units billed in this tier; null means unlimited.""" @model_serializer(mode="wrap") def serialize_model(self, handler): diff --git a/src/clerk_backend_api/models/commercesubscriptionitem.py b/src/clerk_backend_api/models/commercesubscriptionitem.py index 1774aacb..9e93ed03 100644 --- a/src/clerk_backend_api/models/commercesubscriptionitem.py +++ b/src/clerk_backend_api/models/commercesubscriptionitem.py @@ -8,16 +8,20 @@ CommercePaymentMethodResponseTypedDict, ) from .commerceperunittotal import CommercePerUnitTotal, CommercePerUnitTotalTypedDict -from .commerceperunittotaltier import ( - CommercePerUnitTotalTier, - CommercePerUnitTotalTierTypedDict, -) from .commerceplanunitprice import CommercePlanUnitPrice, CommercePlanUnitPriceTypedDict from .commercesubscriptioncreditresponse import ( CommerceSubscriptionCreditResponse, CommerceSubscriptionCreditResponseTypedDict, ) from .featureresponse import FeatureResponse, FeatureResponseTypedDict +from .schemas_commerceperunittotal import ( + SchemasCommercePerUnitTotal, + SchemasCommercePerUnitTotalTypedDict, +) +from .schemas_commerceperunittotaltier import ( + SchemasCommercePerUnitTotalTier, + SchemasCommercePerUnitTotalTierTypedDict, +) from clerk_backend_api.types import ( BaseModel, Nullable, @@ -338,7 +342,7 @@ class PlanPeriod(str, Enum): class CommerceSubscriptionItemAmountTypedDict(TypedDict): - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" amount: int r"""The amount in cents.""" @@ -351,7 +355,7 @@ class CommerceSubscriptionItemAmountTypedDict(TypedDict): class CommerceSubscriptionItemAmount(BaseModel): - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" amount: int r"""The amount in cents.""" @@ -366,28 +370,191 @@ class CommerceSubscriptionItemAmount(BaseModel): r"""The currency symbol (e.g., \"$\").""" +class CommerceSubscriptionItemNextPaymentTotalsProrationTypedDict(TypedDict): + amount: CommerceMoneyResponseTypedDict + cycle_days_remaining: int + cycle_days_total: int + cycle_remaining_percent: float + + +class CommerceSubscriptionItemNextPaymentTotalsProration(BaseModel): + amount: CommerceMoneyResponse + + cycle_days_remaining: int + + cycle_days_total: int + + cycle_remaining_percent: float + + +class CommerceSubscriptionItemNextPaymentPayerTypedDict(TypedDict): + remaining_balance: CommerceMoneyResponseTypedDict + applied_amount: CommerceMoneyResponseTypedDict + + +class CommerceSubscriptionItemNextPaymentPayer(BaseModel): + remaining_balance: CommerceMoneyResponse + + applied_amount: CommerceMoneyResponse + + +class CommerceSubscriptionItemNextPaymentCreditsTypedDict(TypedDict): + proration: Nullable[CommerceSubscriptionItemNextPaymentTotalsProrationTypedDict] + payer: Nullable[CommerceSubscriptionItemNextPaymentPayerTypedDict] + total: CommerceMoneyResponseTypedDict + + +class CommerceSubscriptionItemNextPaymentCredits(BaseModel): + proration: Nullable[CommerceSubscriptionItemNextPaymentTotalsProration] + + payer: Nullable[CommerceSubscriptionItemNextPaymentPayer] + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + +class CommerceSubscriptionItemNextPaymentProrationTypedDict(TypedDict): + amount: CommerceMoneyResponseTypedDict + cycle_days_passed: int + cycle_days_total: int + cycle_passed_percent: float + + +class CommerceSubscriptionItemNextPaymentProration(BaseModel): + amount: CommerceMoneyResponse + + cycle_days_passed: int + + cycle_days_total: int + + cycle_passed_percent: float + + +class CommerceSubscriptionItemDiscountsTypedDict(TypedDict): + proration: Nullable[CommerceSubscriptionItemNextPaymentProrationTypedDict] + total: CommerceMoneyResponseTypedDict + + +class CommerceSubscriptionItemDiscounts(BaseModel): + proration: Nullable[CommerceSubscriptionItemNextPaymentProration] + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + +class CommerceSubscriptionItemTotalsTypedDict(TypedDict): + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + + subtotal: CommerceMoneyResponseTypedDict + base_fee: CommerceMoneyResponseTypedDict + tax_total: CommerceMoneyResponseTypedDict + grand_total: CommerceMoneyResponseTypedDict + per_unit_totals: NotRequired[List[CommercePerUnitTotalTypedDict]] + credits: NotRequired[Nullable[CommerceSubscriptionItemNextPaymentCreditsTypedDict]] + discounts: NotRequired[Nullable[CommerceSubscriptionItemDiscountsTypedDict]] + + +class CommerceSubscriptionItemTotals(BaseModel): + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + + subtotal: CommerceMoneyResponse + + base_fee: CommerceMoneyResponse + + tax_total: CommerceMoneyResponse + + grand_total: CommerceMoneyResponse + + per_unit_totals: Optional[List[CommercePerUnitTotal]] = None + + credits: OptionalNullable[CommerceSubscriptionItemNextPaymentCredits] = UNSET + + discounts: OptionalNullable[CommerceSubscriptionItemDiscounts] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["per_unit_totals", "credits", "discounts"]) + nullable_fields = set(["credits", "discounts"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m + + class NextPaymentTypedDict(TypedDict): r"""Information about the next payment.""" amount: NotRequired[Nullable[CommerceSubscriptionItemAmountTypedDict]] - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" date_: NotRequired[Nullable[int]] r"""Unix timestamp (in milliseconds) for the next payment date.""" + per_unit_totals: NotRequired[List[CommercePerUnitTotalTypedDict]] + r"""Per-unit total breakdown (for example, seats) for the next payment.""" + totals: NotRequired[Nullable[CommerceSubscriptionItemTotalsTypedDict]] + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" class NextPayment(BaseModel): r"""Information about the next payment.""" amount: OptionalNullable[CommerceSubscriptionItemAmount] = UNSET - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" date_: Annotated[OptionalNullable[int], pydantic.Field(alias="date")] = UNSET r"""Unix timestamp (in milliseconds) for the next payment date.""" + per_unit_totals: Optional[List[CommercePerUnitTotal]] = None + r"""Per-unit total breakdown (for example, seats) for the next payment.""" + + totals: OptionalNullable[CommerceSubscriptionItemTotals] = UNSET + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["amount", "date"]) - nullable_fields = set(["amount", "date"]) + optional_fields = set(["amount", "date", "per_unit_totals", "totals"]) + nullable_fields = set(["amount", "date", "totals"]) serialized = handler(self) m = {} @@ -415,7 +582,7 @@ class SeatsTypedDict(TypedDict): quantity: Nullable[int] r"""Seat quantity being billed; null means unlimited""" - tiers: NotRequired[List[CommercePerUnitTotalTierTypedDict]] + tiers: NotRequired[List[SchemasCommercePerUnitTotalTierTypedDict]] r"""Per-unit cost breakdown by pricing tier""" @@ -425,7 +592,7 @@ class Seats(BaseModel): quantity: Nullable[int] r"""Seat quantity being billed; null means unlimited""" - tiers: Optional[List[CommercePerUnitTotalTier]] = None + tiers: Optional[List[SchemasCommercePerUnitTotalTier]] = None r"""Per-unit cost breakdown by pricing tier""" @model_serializer(mode="wrap") @@ -510,6 +677,64 @@ def serialize_model(self, handler): return m +class CommerceSubscriptionItemTotalsProrationTypedDict(TypedDict): + r"""Proration details from passed subscription time""" + + amount: CommerceMoneyResponseTypedDict + cycle_days_passed: int + r"""Number of days that have passed in the billing cycle""" + cycle_days_total: int + r"""Total number of days in the billing cycle""" + cycle_passed_percent: float + r"""Percentage of the billing cycle that has passed""" + + +class CommerceSubscriptionItemTotalsProration(BaseModel): + r"""Proration details from passed subscription time""" + + amount: CommerceMoneyResponse + + cycle_days_passed: int + r"""Number of days that have passed in the billing cycle""" + + cycle_days_total: int + r"""Total number of days in the billing cycle""" + + cycle_passed_percent: float + r"""Percentage of the billing cycle that has passed""" + + +class DiscountsTypedDict(TypedDict): + r"""Information about the discounts applied to the payment""" + + proration: Nullable[CommerceSubscriptionItemTotalsProrationTypedDict] + r"""Proration details from passed subscription time""" + total: CommerceMoneyResponseTypedDict + + +class Discounts(BaseModel): + r"""Information about the discounts applied to the payment""" + + proration: Nullable[CommerceSubscriptionItemTotalsProration] + r"""Proration details from passed subscription time""" + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + class TotalsTypedDict(TypedDict): r"""Totals for this subscription item.""" @@ -517,8 +742,10 @@ class TotalsTypedDict(TypedDict): base_fee: CommerceMoneyResponseTypedDict tax_total: CommerceMoneyResponseTypedDict grand_total: CommerceMoneyResponseTypedDict - per_unit_totals: NotRequired[List[CommercePerUnitTotalTypedDict]] + per_unit_totals: NotRequired[List[SchemasCommercePerUnitTotalTypedDict]] credits: NotRequired[Nullable[CommerceSubscriptionItemCreditsTypedDict]] + discounts: NotRequired[Nullable[DiscountsTypedDict]] + r"""Information about the discounts applied to the payment""" class Totals(BaseModel): @@ -532,14 +759,17 @@ class Totals(BaseModel): grand_total: CommerceMoneyResponse - per_unit_totals: Optional[List[CommercePerUnitTotal]] = None + per_unit_totals: Optional[List[SchemasCommercePerUnitTotal]] = None credits: OptionalNullable[CommerceSubscriptionItemCredits] = UNSET + discounts: OptionalNullable[Discounts] = UNSET + r"""Information about the discounts applied to the payment""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["per_unit_totals", "credits"]) - nullable_fields = set(["credits"]) + optional_fields = set(["per_unit_totals", "credits", "discounts"]) + nullable_fields = set(["credits", "discounts"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/commercesubscriptionnextpayment.py b/src/clerk_backend_api/models/commercesubscriptionnextpayment.py index 16be8e6e..34be14bc 100644 --- a/src/clerk_backend_api/models/commercesubscriptionnextpayment.py +++ b/src/clerk_backend_api/models/commercesubscriptionnextpayment.py @@ -2,15 +2,202 @@ from __future__ import annotations from .commercemoneyresponse import CommerceMoneyResponse, CommerceMoneyResponseTypedDict -from clerk_backend_api.types import BaseModel +from .schemas_commerceperunittotal import ( + SchemasCommercePerUnitTotal, + SchemasCommercePerUnitTotalTypedDict, +) +from clerk_backend_api.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) import pydantic -from typing_extensions import Annotated, TypedDict +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class CommerceSubscriptionNextPaymentProrationTypedDict(TypedDict): + amount: CommerceMoneyResponseTypedDict + cycle_days_remaining: int + cycle_days_total: int + cycle_remaining_percent: float + + +class CommerceSubscriptionNextPaymentProration(BaseModel): + amount: CommerceMoneyResponse + + cycle_days_remaining: int + + cycle_days_total: int + + cycle_remaining_percent: float + + +class CommerceSubscriptionNextPaymentPayerTypedDict(TypedDict): + remaining_balance: CommerceMoneyResponseTypedDict + applied_amount: CommerceMoneyResponseTypedDict + + +class CommerceSubscriptionNextPaymentPayer(BaseModel): + remaining_balance: CommerceMoneyResponse + + applied_amount: CommerceMoneyResponse + + +class CommerceSubscriptionNextPaymentCreditsTypedDict(TypedDict): + proration: Nullable[CommerceSubscriptionNextPaymentProrationTypedDict] + payer: Nullable[CommerceSubscriptionNextPaymentPayerTypedDict] + total: CommerceMoneyResponseTypedDict + + +class CommerceSubscriptionNextPaymentCredits(BaseModel): + proration: Nullable[CommerceSubscriptionNextPaymentProration] + + payer: Nullable[CommerceSubscriptionNextPaymentPayer] + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + +class CommerceSubscriptionNextPaymentTotalsProrationTypedDict(TypedDict): + r"""Proration details from passed subscription time""" + + amount: CommerceMoneyResponseTypedDict + cycle_days_passed: int + r"""Number of days that have passed in the billing cycle""" + cycle_days_total: int + r"""Total number of days in the billing cycle""" + cycle_passed_percent: float + r"""Percentage of the billing cycle that has passed""" + + +class CommerceSubscriptionNextPaymentTotalsProration(BaseModel): + r"""Proration details from passed subscription time""" + + amount: CommerceMoneyResponse + + cycle_days_passed: int + r"""Number of days that have passed in the billing cycle""" + + cycle_days_total: int + r"""Total number of days in the billing cycle""" + + cycle_passed_percent: float + r"""Percentage of the billing cycle that has passed""" + + +class CommerceSubscriptionNextPaymentDiscountsTypedDict(TypedDict): + r"""Information about the discounts applied to the payment""" + + proration: Nullable[CommerceSubscriptionNextPaymentTotalsProrationTypedDict] + r"""Proration details from passed subscription time""" + total: CommerceMoneyResponseTypedDict + + +class CommerceSubscriptionNextPaymentDiscounts(BaseModel): + r"""Information about the discounts applied to the payment""" + + proration: Nullable[CommerceSubscriptionNextPaymentTotalsProration] + r"""Proration details from passed subscription time""" + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + +class CommerceSubscriptionNextPaymentTotalsTypedDict(TypedDict): + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + + subtotal: CommerceMoneyResponseTypedDict + base_fee: CommerceMoneyResponseTypedDict + tax_total: CommerceMoneyResponseTypedDict + grand_total: CommerceMoneyResponseTypedDict + per_unit_totals: NotRequired[List[SchemasCommercePerUnitTotalTypedDict]] + credits: NotRequired[Nullable[CommerceSubscriptionNextPaymentCreditsTypedDict]] + discounts: NotRequired[Nullable[CommerceSubscriptionNextPaymentDiscountsTypedDict]] + r"""Information about the discounts applied to the payment""" + + +class CommerceSubscriptionNextPaymentTotals(BaseModel): + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + + subtotal: CommerceMoneyResponse + + base_fee: CommerceMoneyResponse + + tax_total: CommerceMoneyResponse + + grand_total: CommerceMoneyResponse + + per_unit_totals: Optional[List[SchemasCommercePerUnitTotal]] = None + + credits: OptionalNullable[CommerceSubscriptionNextPaymentCredits] = UNSET + + discounts: OptionalNullable[CommerceSubscriptionNextPaymentDiscounts] = UNSET + r"""Information about the discounts applied to the payment""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["per_unit_totals", "credits", "discounts"]) + nullable_fields = set(["credits", "discounts"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m class CommerceSubscriptionNextPaymentTypedDict(TypedDict): date_: int r"""Unix timestamp (milliseconds) of the next payment date.""" amount: CommerceMoneyResponseTypedDict + per_unit_totals: NotRequired[List[SchemasCommercePerUnitTotalTypedDict]] + r"""Per-unit total breakdown (for example, seats) for the next payment.""" + totals: NotRequired[Nullable[CommerceSubscriptionNextPaymentTotalsTypedDict]] + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" class CommerceSubscriptionNextPayment(BaseModel): @@ -19,6 +206,37 @@ class CommerceSubscriptionNextPayment(BaseModel): amount: CommerceMoneyResponse + per_unit_totals: Optional[List[SchemasCommercePerUnitTotal]] = None + r"""Per-unit total breakdown (for example, seats) for the next payment.""" + + totals: OptionalNullable[CommerceSubscriptionNextPaymentTotals] = UNSET + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["per_unit_totals", "totals"]) + nullable_fields = set(["totals"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m + try: CommerceSubscriptionNextPayment.model_rebuild() diff --git a/src/clerk_backend_api/models/createbillingpricerequest.py b/src/clerk_backend_api/models/createbillingpricerequest.py index 7e2c7001..84a19d0e 100644 --- a/src/clerk_backend_api/models/createbillingpricerequest.py +++ b/src/clerk_backend_api/models/createbillingpricerequest.py @@ -8,11 +8,20 @@ UNSET, UNSET_SENTINEL, ) +from enum import Enum from pydantic import model_serializer from typing import Optional from typing_extensions import NotRequired, TypedDict +class CreateBillingPriceRequestSupportedBillingPeriods(str, Enum): + r"""Which billing periods this price supports. Inferred from amounts if omitted.""" + + MONTH = "month" + ANNUAL = "annual" + BOTH = "both" + + class CreateBillingPriceRequestTypedDict(TypedDict): plan_id: str r"""The ID of the plan this price belongs to.""" @@ -24,6 +33,10 @@ class CreateBillingPriceRequestTypedDict(TypedDict): r"""The monthly amount in cents when billed annually. Must be at least $1 (100 cents) if not null.""" description: NotRequired[str] r"""An optional description for this custom price.""" + supported_billing_periods: NotRequired[ + CreateBillingPriceRequestSupportedBillingPeriods + ] + r"""Which billing periods this price supports. Inferred from amounts if omitted.""" class CreateBillingPriceRequest(BaseModel): @@ -42,9 +55,21 @@ class CreateBillingPriceRequest(BaseModel): description: Optional[str] = None r"""An optional description for this custom price.""" + supported_billing_periods: Optional[ + CreateBillingPriceRequestSupportedBillingPeriods + ] = None + r"""Which billing periods this price supports. Inferred from amounts if omitted.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["currency", "annual_monthly_amount", "description"]) + optional_fields = set( + [ + "currency", + "annual_monthly_amount", + "description", + "supported_billing_periods", + ] + ) nullable_fields = set(["amount", "annual_monthly_amount"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/createenterpriseconnectionop.py b/src/clerk_backend_api/models/createenterpriseconnectionop.py index 9ba664c3..f2553798 100644 --- a/src/clerk_backend_api/models/createenterpriseconnectionop.py +++ b/src/clerk_backend_api/models/createenterpriseconnectionop.py @@ -275,6 +275,8 @@ class CreateEnterpriseConnectionCustomAttributesTypedDict(TypedDict): r"""Path to extract the attribute value from SSO claims""" scim_path: NotRequired[str] r"""GJSON path to extract the attribute value from SCIM user resources""" + multi_valued: NotRequired[bool] + r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" class CreateEnterpriseConnectionCustomAttributes(BaseModel): @@ -290,9 +292,12 @@ class CreateEnterpriseConnectionCustomAttributes(BaseModel): scim_path: Optional[str] = None r"""GJSON path to extract the attribute value from SCIM user resources""" + multi_valued: Optional[bool] = None + r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["sso_path", "scim_path"]) + optional_fields = set(["sso_path", "scim_path", "multi_valued"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/createenterpriseconnectiontestrunop.py b/src/clerk_backend_api/models/createenterpriseconnectiontestrunop.py new file mode 100644 index 00000000..42910d49 --- /dev/null +++ b/src/clerk_backend_api/models/createenterpriseconnectiontestrunop.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class CreateEnterpriseConnectionTestRunRequestTypedDict(TypedDict): + enterprise_connection_id: str + r"""The ID of the enterprise connection""" + + +class CreateEnterpriseConnectionTestRunRequest(BaseModel): + enterprise_connection_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the enterprise connection""" diff --git a/src/clerk_backend_api/models/createuserop.py b/src/clerk_backend_api/models/createuserop.py index ae246f48..2f1e91c4 100644 --- a/src/clerk_backend_api/models/createuserop.py +++ b/src/clerk_backend_api/models/createuserop.py @@ -8,11 +8,22 @@ UNSET, UNSET_SENTINEL, ) +from enum import Enum from pydantic import model_serializer from typing import Any, Dict, List, Optional from typing_extensions import NotRequired, TypedDict +class EmailAddressIdentificationStatus(str, Enum): + VERIFIED = "verified" + RESERVED = "reserved" + + +class PhoneNumberIdentificationStatus(str, Enum): + VERIFIED = "verified" + RESERVED = "reserved" + + class CreateUserRequestBodyTypedDict(TypedDict): external_id: NotRequired[Nullable[str]] r"""The ID of the user as used in your external systems or your previous authentication solution. @@ -28,11 +39,33 @@ class CreateUserRequestBodyTypedDict(TypedDict): r"""Email addresses to add to the user. Must be unique across your instance. The first email address will be set as the user's primary email address. + Created verified by default; see `email_address_identification_status` to create them reserved. + """ + email_address_identification_status: NotRequired[ + List[EmailAddressIdentificationStatus] + ] + r"""Controls the status each email address is created with. Runs parallel to + `email_address`: when provided, it must contain exactly one item per email + address, applied by position. When omitted or empty, every email address is + created `verified`. Set an item to `reserved` to create the corresponding + email address reserved instead (unverified but usable for sign-in and locked + so no other user can claim it). """ phone_number: NotRequired[List[str]] r"""Phone numbers to add to the user. Must be unique across your instance. The first phone number will be set as the user's primary phone number. + Created verified by default; see `phone_number_identification_status` to create them reserved. + """ + phone_number_identification_status: NotRequired[ + List[PhoneNumberIdentificationStatus] + ] + r"""Controls the status each phone number is created with. Runs parallel to + `phone_number`: when provided, it must contain exactly one item per phone + number, applied by position. When omitted or empty, every phone number is + created `verified`. Set an item to `reserved` to create the corresponding + phone number reserved instead (unverified but usable for sign-in and locked + so no other user can claim it). """ web3_wallet: NotRequired[List[str]] r"""Web3 wallets to add to the user. @@ -149,12 +182,36 @@ class CreateUserRequestBody(BaseModel): r"""Email addresses to add to the user. Must be unique across your instance. The first email address will be set as the user's primary email address. + Created verified by default; see `email_address_identification_status` to create them reserved. + """ + + email_address_identification_status: Optional[ + List[EmailAddressIdentificationStatus] + ] = None + r"""Controls the status each email address is created with. Runs parallel to + `email_address`: when provided, it must contain exactly one item per email + address, applied by position. When omitted or empty, every email address is + created `verified`. Set an item to `reserved` to create the corresponding + email address reserved instead (unverified but usable for sign-in and locked + so no other user can claim it). """ phone_number: Optional[List[str]] = None r"""Phone numbers to add to the user. Must be unique across your instance. The first phone number will be set as the user's primary phone number. + Created verified by default; see `phone_number_identification_status` to create them reserved. + """ + + phone_number_identification_status: Optional[ + List[PhoneNumberIdentificationStatus] + ] = None + r"""Controls the status each phone number is created with. Runs parallel to + `phone_number`: when provided, it must contain exactly one item per phone + number, applied by position. When omitted or empty, every phone number is + created `verified`. Set an item to `reserved` to create the corresponding + phone number reserved instead (unverified but usable for sign-in and locked + so no other user can claim it). """ web3_wallet: Optional[List[str]] = None @@ -282,7 +339,9 @@ def serialize_model(self, handler): "last_name", "locale", "email_address", + "email_address_identification_status", "phone_number", + "phone_number_identification_status", "web3_wallet", "username", "password", diff --git a/src/clerk_backend_api/models/emailaddress.py b/src/clerk_backend_api/models/emailaddress.py index 83eb2e38..7aba58d2 100644 --- a/src/clerk_backend_api/models/emailaddress.py +++ b/src/clerk_backend_api/models/emailaddress.py @@ -256,7 +256,7 @@ def serialize_model(self, handler): VerificationError = VerificationSamlErrorClerkError -class SamlTypedDict(TypedDict): +class VerificationSAMLVerificationEmailAddressSAMLTypedDict(TypedDict): status: VerificationSamlVerificationStatus strategy: VerificationSamlVerificationStrategy attempts: Nullable[int] @@ -267,7 +267,7 @@ class SamlTypedDict(TypedDict): verified_at_client: NotRequired[Nullable[str]] -class Saml(BaseModel): +class VerificationSAMLVerificationEmailAddressSAML(BaseModel): status: VerificationSamlVerificationStatus strategy: VerificationSamlVerificationStrategy @@ -546,6 +546,8 @@ class OtpTypedDict(TypedDict): attempts: Nullable[int] expire_at: Nullable[int] object: NotRequired[VerificationObject] + channel: NotRequired[Nullable[str]] + r"""The delivery channel of the code (phone codes only).""" verified_at_client: NotRequired[Nullable[str]] @@ -560,6 +562,9 @@ class Otp(BaseModel): object: Optional[VerificationObject] = None + channel: OptionalNullable[str] = UNSET + r"""The delivery channel of the code (phone codes only).""" + verified_at_client: OptionalNullable[str] = UNSET @field_serializer("strategy") @@ -573,8 +578,10 @@ def serialize_strategy(self, value): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["object", "verified_at_client"]) - nullable_fields = set(["attempts", "expire_at", "verified_at_client"]) + optional_fields = set(["object", "channel", "verified_at_client"]) + nullable_fields = set( + ["attempts", "expire_at", "channel", "verified_at_client"] + ) serialized = handler(self) m = {} @@ -601,12 +608,12 @@ def serialize_model(self, handler): "VerificationTypedDict", Union[ VerificationSCIMTypedDict, - OtpTypedDict, AdminTypedDict, TicketTypedDict, EmailLinkTypedDict, + OtpTypedDict, FromOAuthTypedDict, - SamlTypedDict, + VerificationSAMLVerificationEmailAddressSAMLTypedDict, ], ) @@ -617,7 +624,9 @@ def serialize_model(self, handler): Annotated[Admin, Tag("verification_admin")], Annotated[FromOAuth, Tag("verification_from_oauth")], Annotated[Ticket, Tag("verification_ticket")], - Annotated[Saml, Tag("verification_saml")], + Annotated[ + VerificationSAMLVerificationEmailAddressSAML, Tag("verification_saml") + ], Annotated[EmailLink, Tag("verification_email_link")], Annotated[VerificationSCIM, Tag("verification_scim")], ], diff --git a/src/clerk_backend_api/models/enterpriseconnection.py b/src/clerk_backend_api/models/enterpriseconnection.py index 9eeef859..3fe123e7 100644 --- a/src/clerk_backend_api/models/enterpriseconnection.py +++ b/src/clerk_backend_api/models/enterpriseconnection.py @@ -22,6 +22,8 @@ class CustomAttributesTypedDict(TypedDict): r"""Path to extract the attribute value from SSO claims (SAML assertions or OIDC claims)""" scim_path: NotRequired[str] r"""GJSON path to extract the attribute value from SCIM user resources""" + multi_valued: NotRequired[bool] + r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" class CustomAttributes(BaseModel): @@ -37,9 +39,12 @@ class CustomAttributes(BaseModel): scim_path: Optional[str] = None r"""GJSON path to extract the attribute value from SCIM user resources""" + multi_valued: Optional[bool] = None + r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["sso_path", "scim_path"]) + optional_fields = set(["sso_path", "scim_path", "multi_valued"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/enterpriseconnectiontestrun.py b/src/clerk_backend_api/models/enterpriseconnectiontestrun.py new file mode 100644 index 00000000..27347df3 --- /dev/null +++ b/src/clerk_backend_api/models/enterpriseconnectiontestrun.py @@ -0,0 +1,237 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from enum import Enum +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import NotRequired, TypedDict + + +class EnterpriseConnectionTestRunStatus(str, Enum): + r"""The status of the test run""" + + PENDING = "pending" + SUCCESS = "success" + FAILED = "failed" + + +class ConnectionType(str, Enum): + r"""The type of enterprise connection the test run was performed against""" + + SAML = "saml" + OAUTH = "oauth" + + +class ParsedUserInfoTypedDict(TypedDict): + r"""The user information parsed from the IdP response""" + + email_address: NotRequired[str] + first_name: NotRequired[str] + last_name: NotRequired[str] + user_id: NotRequired[str] + + +class ParsedUserInfo(BaseModel): + r"""The user information parsed from the IdP response""" + + email_address: Optional[str] = None + + first_name: Optional[str] = None + + last_name: Optional[str] = None + + user_id: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["email_address", "first_name", "last_name", "user_id"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class LogsTypedDict(TypedDict): + level: str + message: str + code: NotRequired[str] + short_message: NotRequired[str] + + +class Logs(BaseModel): + level: str + + message: str + + code: Optional[str] = None + + short_message: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["code", "short_message"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class SamlTypedDict(TypedDict): + r"""SAML-specific metadata, present for SAML connections""" + + saml_request: NotRequired[str] + saml_response: NotRequired[str] + relay_state: NotRequired[str] + + +class Saml(BaseModel): + r"""SAML-specific metadata, present for SAML connections""" + + saml_request: Optional[str] = None + + saml_response: Optional[str] = None + + relay_state: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["saml_request", "saml_response", "relay_state"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class OauthTypedDict(TypedDict): + r"""OAuth-specific metadata, present for OIDC connections""" + + id_token: NotRequired[str] + access_token: NotRequired[str] + user_info: NotRequired[str] + + +class Oauth(BaseModel): + r"""OAuth-specific metadata, present for OIDC connections""" + + id_token: Optional[str] = None + + access_token: Optional[str] = None + + user_info: Optional[str] = None + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["id_token", "access_token", "user_info"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class EnterpriseConnectionTestRunTypedDict(TypedDict): + id: str + r"""The test run ID""" + status: EnterpriseConnectionTestRunStatus + r"""The status of the test run""" + connection_type: ConnectionType + r"""The type of enterprise connection the test run was performed against""" + created_at: int + r"""Unix timestamp in milliseconds when the test run was created""" + parsed_user_info: NotRequired[Nullable[ParsedUserInfoTypedDict]] + r"""The user information parsed from the IdP response""" + logs: NotRequired[List[LogsTypedDict]] + r"""Log entries captured during the test run""" + saml: NotRequired[Nullable[SamlTypedDict]] + r"""SAML-specific metadata, present for SAML connections""" + oauth: NotRequired[Nullable[OauthTypedDict]] + r"""OAuth-specific metadata, present for OIDC connections""" + + +class EnterpriseConnectionTestRun(BaseModel): + id: str + r"""The test run ID""" + + status: EnterpriseConnectionTestRunStatus + r"""The status of the test run""" + + connection_type: ConnectionType + r"""The type of enterprise connection the test run was performed against""" + + created_at: int + r"""Unix timestamp in milliseconds when the test run was created""" + + parsed_user_info: OptionalNullable[ParsedUserInfo] = UNSET + r"""The user information parsed from the IdP response""" + + logs: Optional[List[Logs]] = None + r"""Log entries captured during the test run""" + + saml: OptionalNullable[Saml] = UNSET + r"""SAML-specific metadata, present for SAML connections""" + + oauth: OptionalNullable[Oauth] = UNSET + r"""OAuth-specific metadata, present for OIDC connections""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["parsed_user_info", "logs", "saml", "oauth"]) + nullable_fields = set(["parsed_user_info", "saml", "oauth"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/enterpriseconnectiontestrunresponse.py b/src/clerk_backend_api/models/enterpriseconnectiontestrunresponse.py new file mode 100644 index 00000000..169d02c7 --- /dev/null +++ b/src/clerk_backend_api/models/enterpriseconnectiontestrunresponse.py @@ -0,0 +1,19 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from typing_extensions import TypedDict + + +class EnterpriseConnectionTestRunResponseTypedDict(TypedDict): + r"""A URL to initiate an enterprise connection test run""" + + url: str + r"""A short-lived URL that can be used to initiate the test run flow""" + + +class EnterpriseConnectionTestRunResponse(BaseModel): + r"""A URL to initiate an enterprise connection test run""" + + url: str + r"""A short-lived URL that can be used to initiate the test run flow""" diff --git a/src/clerk_backend_api/models/enterpriseconnectiontestruns.py b/src/clerk_backend_api/models/enterpriseconnectiontestruns.py new file mode 100644 index 00000000..950b07c0 --- /dev/null +++ b/src/clerk_backend_api/models/enterpriseconnectiontestruns.py @@ -0,0 +1,27 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .enterpriseconnectiontestrun import ( + EnterpriseConnectionTestRun, + EnterpriseConnectionTestRunTypedDict, +) +from clerk_backend_api.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class EnterpriseConnectionTestRunsTypedDict(TypedDict): + r"""A list of enterprise connection test runs""" + + data: List[EnterpriseConnectionTestRunTypedDict] + total_count: int + r"""Total number of test runs""" + + +class EnterpriseConnectionTestRuns(BaseModel): + r"""A list of enterprise connection test runs""" + + data: List[EnterpriseConnectionTestRun] + + total_count: int + r"""Total number of test runs""" diff --git a/src/clerk_backend_api/models/externalaccountwithverification.py b/src/clerk_backend_api/models/externalaccountwithverification.py index a00240ce..59d85ad7 100644 --- a/src/clerk_backend_api/models/externalaccountwithverification.py +++ b/src/clerk_backend_api/models/externalaccountwithverification.py @@ -203,7 +203,7 @@ def serialize_model(self, handler): VerificationOauthVerificationError = VerificationOauthErrorClerkError -class OauthTypedDict(TypedDict): +class VerificationOauthVerificationOauthTypedDict(TypedDict): status: VerificationOauthVerificationStatus strategy: str expire_at: int @@ -214,7 +214,7 @@ class OauthTypedDict(TypedDict): verified_at_client: NotRequired[Nullable[str]] -class Oauth(BaseModel): +class VerificationOauthVerificationOauth(BaseModel): status: VerificationOauthVerificationStatus strategy: str @@ -275,13 +275,13 @@ def serialize_model(self, handler): ExternalAccountWithVerificationVerificationTypedDict = TypeAliasType( "ExternalAccountWithVerificationVerificationTypedDict", - Union[GoogleOneTapTypedDict, OauthTypedDict], + Union[GoogleOneTapTypedDict, VerificationOauthVerificationOauthTypedDict], ) ExternalAccountWithVerificationVerification = Annotated[ Union[ - Annotated[Oauth, Tag("verification_oauth")], + Annotated[VerificationOauthVerificationOauth, Tag("verification_oauth")], Annotated[GoogleOneTap, Tag("verification_google_one_tap")], ], Discriminator(lambda m: get_discriminator(m, "object", "object")), diff --git a/src/clerk_backend_api/models/getpublicinterstitialop.py b/src/clerk_backend_api/models/getpublicinterstitialop.py index cb258072..7946ff2c 100644 --- a/src/clerk_backend_api/models/getpublicinterstitialop.py +++ b/src/clerk_backend_api/models/getpublicinterstitialop.py @@ -22,12 +22,6 @@ class GetPublicInterstitialRequestTypedDict(TypedDict): r"""The domain of your instance""" sign_in_url: NotRequired[str] r"""The sign in URL of your instance""" - application_name: NotRequired[str] - r"""The application name shown in the interstitial UI""" - logo_url: NotRequired[str] - r"""The absolute HTTP(S) application logo URL shown in the interstitial UI""" - flow: NotRequired[str] - r"""The authentication flow shown in the interstitial UI""" use_domain_for_script: NotRequired[bool] r"""Whether to use the domain for the script URL""" @@ -74,24 +68,6 @@ class GetPublicInterstitialRequest(BaseModel): ] = None r"""The sign in URL of your instance""" - application_name: Annotated[ - Optional[str], - FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), - ] = None - r"""The application name shown in the interstitial UI""" - - logo_url: Annotated[ - Optional[str], - FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), - ] = None - r"""The absolute HTTP(S) application logo URL shown in the interstitial UI""" - - flow: Annotated[ - Optional[str], - FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), - ] = None - r"""The authentication flow shown in the interstitial UI""" - use_domain_for_script: Annotated[ Optional[bool], FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), @@ -108,9 +84,6 @@ def serialize_model(self, handler): "proxy_url", "domain", "sign_in_url", - "application_name", - "logo_url", - "flow", "use_domain_for_script", ] ) diff --git a/src/clerk_backend_api/models/listenterpriseconnectiontestrunsop.py b/src/clerk_backend_api/models/listenterpriseconnectiontestrunsop.py new file mode 100644 index 00000000..17480551 --- /dev/null +++ b/src/clerk_backend_api/models/listenterpriseconnectiontestrunsop.py @@ -0,0 +1,77 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel, UNSET_SENTINEL +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata, QueryParamMetadata +from enum import Enum +from pydantic import model_serializer +from typing import List, Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class ListEnterpriseConnectionTestRunsQueryParamStatus(str, Enum): + PENDING = "pending" + SUCCESS = "success" + FAILED = "failed" + + +class ListEnterpriseConnectionTestRunsRequestTypedDict(TypedDict): + enterprise_connection_id: str + r"""The ID of the enterprise connection""" + status: NotRequired[List[ListEnterpriseConnectionTestRunsQueryParamStatus]] + r"""Filter test runs by status (may be repeated)""" + limit: NotRequired[int] + r"""Applies a limit to the number of results returned. + Can be used for paginating the results together with `offset`. + """ + offset: NotRequired[int] + r"""Skip the first `offset` results when paginating. + Needs to be an integer greater or equal to zero. + To be used in conjunction with `limit`. + """ + + +class ListEnterpriseConnectionTestRunsRequest(BaseModel): + enterprise_connection_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the enterprise connection""" + + status: Annotated[ + Optional[List[ListEnterpriseConnectionTestRunsQueryParamStatus]], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Filter test runs by status (may be repeated)""" + + limit: Annotated[ + Optional[int], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = 10 + r"""Applies a limit to the number of results returned. + Can be used for paginating the results together with `offset`. + """ + + offset: Annotated[ + Optional[int], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = 0 + r"""Skip the first `offset` results when paginating. + Needs to be an integer greater or equal to zero. + To be used in conjunction with `limit`. + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["status", "limit", "offset"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/phonenumber.py b/src/clerk_backend_api/models/phonenumber.py index 499dcd63..23c9864f 100644 --- a/src/clerk_backend_api/models/phonenumber.py +++ b/src/clerk_backend_api/models/phonenumber.py @@ -115,6 +115,8 @@ class VerificationOTPTypedDict(TypedDict): attempts: Nullable[int] expire_at: Nullable[int] object: NotRequired[VerificationOtpVerificationObject] + channel: NotRequired[Nullable[str]] + r"""The delivery channel of the code (phone codes only).""" verified_at_client: NotRequired[Nullable[str]] @@ -129,6 +131,9 @@ class VerificationOTP(BaseModel): object: Optional[VerificationOtpVerificationObject] = None + channel: OptionalNullable[str] = UNSET + r"""The delivery channel of the code (phone codes only).""" + verified_at_client: OptionalNullable[str] = UNSET @field_serializer("strategy") @@ -142,8 +147,10 @@ def serialize_strategy(self, value): @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["object", "verified_at_client"]) - nullable_fields = set(["attempts", "expire_at", "verified_at_client"]) + optional_fields = set(["object", "channel", "verified_at_client"]) + nullable_fields = set( + ["attempts", "expire_at", "channel", "verified_at_client"] + ) serialized = handler(self) m = {} @@ -168,7 +175,7 @@ def serialize_model(self, handler): PhoneNumberVerificationTypedDict = TypeAliasType( "PhoneNumberVerificationTypedDict", - Union[VerificationOTPTypedDict, VerificationAdminTypedDict], + Union[VerificationAdminTypedDict, VerificationOTPTypedDict], ) diff --git a/src/clerk_backend_api/models/prepareemailaddressverificationop.py b/src/clerk_backend_api/models/prepareemailaddressverificationop.py new file mode 100644 index 00000000..71075537 --- /dev/null +++ b/src/clerk_backend_api/models/prepareemailaddressverificationop.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class PrepareEmailAddressVerificationRequestTypedDict(TypedDict): + email_address_id: str + r"""The ID of the email address to send the verification code to""" + + +class PrepareEmailAddressVerificationRequest(BaseModel): + email_address_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the email address to send the verification code to""" diff --git a/src/clerk_backend_api/models/preparephonenumberverificationop.py b/src/clerk_backend_api/models/preparephonenumberverificationop.py new file mode 100644 index 00000000..7381b105 --- /dev/null +++ b/src/clerk_backend_api/models/preparephonenumberverificationop.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from clerk_backend_api.types import BaseModel +from clerk_backend_api.utils import FieldMetadata, PathParamMetadata +from typing_extensions import Annotated, TypedDict + + +class PreparePhoneNumberVerificationRequestTypedDict(TypedDict): + phone_number_id: str + r"""The ID of the phone number to send the verification code to""" + + +class PreparePhoneNumberVerificationRequest(BaseModel): + phone_number_id: Annotated[ + str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) + ] + r"""The ID of the phone number to send the verification code to""" diff --git a/src/clerk_backend_api/models/replaceuseremailaddressop.py b/src/clerk_backend_api/models/replaceuseremailaddressop.py index 8c696f74..fdeea23a 100644 --- a/src/clerk_backend_api/models/replaceuseremailaddressop.py +++ b/src/clerk_backend_api/models/replaceuseremailaddressop.py @@ -1,20 +1,62 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from clerk_backend_api.types import BaseModel +from clerk_backend_api.types import BaseModel, UNSET_SENTINEL from clerk_backend_api.utils import FieldMetadata, PathParamMetadata, RequestMetadata -from typing_extensions import Annotated, TypedDict +from enum import Enum +from pydantic import model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class IdentificationStatus(str, Enum): + r"""Controls the status of the replacement email address. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. + """ + + VERIFIED = "verified" + RESERVED = "reserved" class ReplaceUserEmailAddressRequestBodyTypedDict(TypedDict): email_address: str r"""The new email address. Must adhere to the RFC 5322 specification for email address format.""" + identification_status: NotRequired[IdentificationStatus] + r"""Controls the status of the replacement email address. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. + """ class ReplaceUserEmailAddressRequestBody(BaseModel): email_address: str r"""The new email address. Must adhere to the RFC 5322 specification for email address format.""" + identification_status: Optional[IdentificationStatus] = ( + IdentificationStatus.VERIFIED + ) + r"""Controls the status of the replacement email address. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["identification_status"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + class ReplaceUserEmailAddressRequestTypedDict(TypedDict): user_id: str diff --git a/src/clerk_backend_api/models/replaceuserphonenumberop.py b/src/clerk_backend_api/models/replaceuserphonenumberop.py index ba5492f9..f458396f 100644 --- a/src/clerk_backend_api/models/replaceuserphonenumberop.py +++ b/src/clerk_backend_api/models/replaceuserphonenumberop.py @@ -1,20 +1,62 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from clerk_backend_api.types import BaseModel +from clerk_backend_api.types import BaseModel, UNSET_SENTINEL from clerk_backend_api.utils import FieldMetadata, PathParamMetadata, RequestMetadata -from typing_extensions import Annotated, TypedDict +from enum import Enum +from pydantic import model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class ReplaceUserPhoneNumberIdentificationStatus(str, Enum): + r"""Controls the status of the replacement phone number. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. + """ + + VERIFIED = "verified" + RESERVED = "reserved" class ReplaceUserPhoneNumberRequestBodyTypedDict(TypedDict): phone_number: str r"""The new phone number. Must adhere to the E.164 standard for phone number format.""" + identification_status: NotRequired[ReplaceUserPhoneNumberIdentificationStatus] + r"""Controls the status of the replacement phone number. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. + """ class ReplaceUserPhoneNumberRequestBody(BaseModel): phone_number: str r"""The new phone number. Must adhere to the E.164 standard for phone number format.""" + identification_status: Optional[ReplaceUserPhoneNumberIdentificationStatus] = ( + ReplaceUserPhoneNumberIdentificationStatus.VERIFIED + ) + r"""Controls the status of the replacement phone number. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. + """ + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["identification_status"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + class ReplaceUserPhoneNumberRequestTypedDict(TypedDict): user_id: str diff --git a/src/clerk_backend_api/models/schemas_commerceperunittotal.py b/src/clerk_backend_api/models/schemas_commerceperunittotal.py new file mode 100644 index 00000000..0d05388a --- /dev/null +++ b/src/clerk_backend_api/models/schemas_commerceperunittotal.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .schemas_commerceperunittotaltier import ( + SchemasCommercePerUnitTotalTier, + SchemasCommercePerUnitTotalTierTypedDict, +) +from clerk_backend_api.types import BaseModel +from typing import List +from typing_extensions import TypedDict + + +class SchemasCommercePerUnitTotalTypedDict(TypedDict): + name: str + r"""Name of the billable unit (for example, seats)""" + block_size: int + r"""Number of units included in each pricing block""" + tiers: List[SchemasCommercePerUnitTotalTierTypedDict] + r"""Computed totals for each pricing tier""" + + +class SchemasCommercePerUnitTotal(BaseModel): + name: str + r"""Name of the billable unit (for example, seats)""" + + block_size: int + r"""Number of units included in each pricing block""" + + tiers: List[SchemasCommercePerUnitTotalTier] + r"""Computed totals for each pricing tier""" diff --git a/src/clerk_backend_api/models/schemas_commerceperunittotaltier.py b/src/clerk_backend_api/models/schemas_commerceperunittotaltier.py new file mode 100644 index 00000000..a0cb1ebe --- /dev/null +++ b/src/clerk_backend_api/models/schemas_commerceperunittotaltier.py @@ -0,0 +1,54 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from .commercemoneyresponse import CommerceMoneyResponse, CommerceMoneyResponseTypedDict +from clerk_backend_api.types import ( + BaseModel, + Nullable, + OptionalNullable, + UNSET, + UNSET_SENTINEL, +) +from pydantic import model_serializer +from typing_extensions import NotRequired, TypedDict + + +class SchemasCommercePerUnitTotalTierTypedDict(TypedDict): + fee_per_block: CommerceMoneyResponseTypedDict + total: CommerceMoneyResponseTypedDict + quantity: NotRequired[Nullable[int]] + r"""Units billed in this tier; null means unlimited""" + + +class SchemasCommercePerUnitTotalTier(BaseModel): + fee_per_block: CommerceMoneyResponse + + total: CommerceMoneyResponse + + quantity: OptionalNullable[int] = UNSET + r"""Units billed in this tier; null means unlimited""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["quantity"]) + nullable_fields = set(["quantity"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m diff --git a/src/clerk_backend_api/models/schemas_commercesubscriptionitem.py b/src/clerk_backend_api/models/schemas_commercesubscriptionitem.py index ff826632..83d1ad9e 100644 --- a/src/clerk_backend_api/models/schemas_commercesubscriptionitem.py +++ b/src/clerk_backend_api/models/schemas_commercesubscriptionitem.py @@ -2,6 +2,7 @@ from __future__ import annotations from .commercemoneyresponse import CommerceMoneyResponse, CommerceMoneyResponseTypedDict +from .commerceperunittotal import CommercePerUnitTotal, CommercePerUnitTotalTypedDict from .schemas_featureresponse import ( SchemasFeatureResponse, SchemasFeatureResponseTypedDict, @@ -586,7 +587,7 @@ class SchemasCommerceSubscriptionItemAmount(BaseModel): class SchemasCommerceSubscriptionItemNextInvoiceAmountTypedDict(TypedDict): - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" amount: int r"""The amount in cents.""" @@ -599,7 +600,7 @@ class SchemasCommerceSubscriptionItemNextInvoiceAmountTypedDict(TypedDict): class SchemasCommerceSubscriptionItemNextInvoiceAmount(BaseModel): - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" amount: int r"""The amount in cents.""" @@ -614,30 +615,193 @@ class SchemasCommerceSubscriptionItemNextInvoiceAmount(BaseModel): r"""The currency symbol (e.g., \"$\").""" +class SchemasCommerceSubscriptionItemProrationTypedDict(TypedDict): + amount: CommerceMoneyResponseTypedDict + cycle_days_remaining: int + cycle_days_total: int + cycle_remaining_percent: float + + +class SchemasCommerceSubscriptionItemProration(BaseModel): + amount: CommerceMoneyResponse + + cycle_days_remaining: int + + cycle_days_total: int + + cycle_remaining_percent: float + + +class SchemasCommerceSubscriptionItemPayerTypedDict(TypedDict): + remaining_balance: CommerceMoneyResponseTypedDict + applied_amount: CommerceMoneyResponseTypedDict + + +class SchemasCommerceSubscriptionItemPayer(BaseModel): + remaining_balance: CommerceMoneyResponse + + applied_amount: CommerceMoneyResponse + + +class SchemasCommerceSubscriptionItemCreditsTypedDict(TypedDict): + proration: Nullable[SchemasCommerceSubscriptionItemProrationTypedDict] + payer: Nullable[SchemasCommerceSubscriptionItemPayerTypedDict] + total: CommerceMoneyResponseTypedDict + + +class SchemasCommerceSubscriptionItemCredits(BaseModel): + proration: Nullable[SchemasCommerceSubscriptionItemProration] + + payer: Nullable[SchemasCommerceSubscriptionItemPayer] + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + +class SchemasCommerceSubscriptionItemNextInvoiceProrationTypedDict(TypedDict): + amount: CommerceMoneyResponseTypedDict + cycle_days_passed: int + cycle_days_total: int + cycle_passed_percent: float + + +class SchemasCommerceSubscriptionItemNextInvoiceProration(BaseModel): + amount: CommerceMoneyResponse + + cycle_days_passed: int + + cycle_days_total: int + + cycle_passed_percent: float + + +class SchemasCommerceSubscriptionItemDiscountsTypedDict(TypedDict): + proration: Nullable[SchemasCommerceSubscriptionItemNextInvoiceProrationTypedDict] + total: CommerceMoneyResponseTypedDict + + +class SchemasCommerceSubscriptionItemDiscounts(BaseModel): + proration: Nullable[SchemasCommerceSubscriptionItemNextInvoiceProration] + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + +class SchemasCommerceSubscriptionItemTotalsTypedDict(TypedDict): + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + + subtotal: CommerceMoneyResponseTypedDict + base_fee: CommerceMoneyResponseTypedDict + tax_total: CommerceMoneyResponseTypedDict + grand_total: CommerceMoneyResponseTypedDict + per_unit_totals: NotRequired[List[CommercePerUnitTotalTypedDict]] + credits: NotRequired[Nullable[SchemasCommerceSubscriptionItemCreditsTypedDict]] + discounts: NotRequired[Nullable[SchemasCommerceSubscriptionItemDiscountsTypedDict]] + + +class SchemasCommerceSubscriptionItemTotals(BaseModel): + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + + subtotal: CommerceMoneyResponse + + base_fee: CommerceMoneyResponse + + tax_total: CommerceMoneyResponse + + grand_total: CommerceMoneyResponse + + per_unit_totals: Optional[List[CommercePerUnitTotal]] = None + + credits: OptionalNullable[SchemasCommerceSubscriptionItemCredits] = UNSET + + discounts: OptionalNullable[SchemasCommerceSubscriptionItemDiscounts] = UNSET + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["per_unit_totals", "credits", "discounts"]) + nullable_fields = set(["credits", "discounts"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m + + class NextInvoiceTypedDict(TypedDict): r"""Information about the next invoice.""" amount: NotRequired[ Nullable[SchemasCommerceSubscriptionItemNextInvoiceAmountTypedDict] ] - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" date_: NotRequired[Nullable[int]] r"""Unix timestamp (in milliseconds) for the next payment date.""" + per_unit_totals: NotRequired[List[CommercePerUnitTotalTypedDict]] + r"""Per-unit total breakdown (for example, seats) for the next payment.""" + totals: NotRequired[Nullable[SchemasCommerceSubscriptionItemTotalsTypedDict]] + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" class NextInvoice(BaseModel): r"""Information about the next invoice.""" amount: OptionalNullable[SchemasCommerceSubscriptionItemNextInvoiceAmount] = UNSET - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" date_: Annotated[OptionalNullable[int], pydantic.Field(alias="date")] = UNSET r"""Unix timestamp (in milliseconds) for the next payment date.""" + per_unit_totals: Optional[List[CommercePerUnitTotal]] = None + r"""Per-unit total breakdown (for example, seats) for the next payment.""" + + totals: OptionalNullable[SchemasCommerceSubscriptionItemTotals] = UNSET + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["amount", "date"]) - nullable_fields = set(["amount", "date"]) + optional_fields = set(["amount", "date", "per_unit_totals", "totals"]) + nullable_fields = set(["amount", "date", "totals"]) serialized = handler(self) m = {} @@ -661,7 +825,7 @@ def serialize_model(self, handler): class SchemasCommerceSubscriptionItemNextPaymentAmountTypedDict(TypedDict): - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" amount: int r"""The amount in cents.""" @@ -674,7 +838,7 @@ class SchemasCommerceSubscriptionItemNextPaymentAmountTypedDict(TypedDict): class SchemasCommerceSubscriptionItemNextPaymentAmount(BaseModel): - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" amount: int r"""The amount in cents.""" @@ -689,30 +853,203 @@ class SchemasCommerceSubscriptionItemNextPaymentAmount(BaseModel): r"""The currency symbol (e.g., \"$\").""" +class SchemasCommerceSubscriptionItemNextPaymentProrationTypedDict(TypedDict): + amount: CommerceMoneyResponseTypedDict + cycle_days_remaining: int + cycle_days_total: int + cycle_remaining_percent: float + + +class SchemasCommerceSubscriptionItemNextPaymentProration(BaseModel): + amount: CommerceMoneyResponse + + cycle_days_remaining: int + + cycle_days_total: int + + cycle_remaining_percent: float + + +class SchemasCommerceSubscriptionItemNextPaymentPayerTypedDict(TypedDict): + remaining_balance: CommerceMoneyResponseTypedDict + applied_amount: CommerceMoneyResponseTypedDict + + +class SchemasCommerceSubscriptionItemNextPaymentPayer(BaseModel): + remaining_balance: CommerceMoneyResponse + + applied_amount: CommerceMoneyResponse + + +class SchemasCommerceSubscriptionItemNextPaymentCreditsTypedDict(TypedDict): + proration: Nullable[SchemasCommerceSubscriptionItemNextPaymentProrationTypedDict] + payer: Nullable[SchemasCommerceSubscriptionItemNextPaymentPayerTypedDict] + total: CommerceMoneyResponseTypedDict + + +class SchemasCommerceSubscriptionItemNextPaymentCredits(BaseModel): + proration: Nullable[SchemasCommerceSubscriptionItemNextPaymentProration] + + payer: Nullable[SchemasCommerceSubscriptionItemNextPaymentPayer] + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + +class SchemasCommerceSubscriptionItemNextPaymentTotalsProrationTypedDict(TypedDict): + amount: CommerceMoneyResponseTypedDict + cycle_days_passed: int + cycle_days_total: int + cycle_passed_percent: float + + +class SchemasCommerceSubscriptionItemNextPaymentTotalsProration(BaseModel): + amount: CommerceMoneyResponse + + cycle_days_passed: int + + cycle_days_total: int + + cycle_passed_percent: float + + +class SchemasCommerceSubscriptionItemNextPaymentDiscountsTypedDict(TypedDict): + proration: Nullable[ + SchemasCommerceSubscriptionItemNextPaymentTotalsProrationTypedDict + ] + total: CommerceMoneyResponseTypedDict + + +class SchemasCommerceSubscriptionItemNextPaymentDiscounts(BaseModel): + proration: Nullable[SchemasCommerceSubscriptionItemNextPaymentTotalsProration] + + total: CommerceMoneyResponse + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + m[k] = val + + return m + + +class SchemasCommerceSubscriptionItemNextPaymentTotalsTypedDict(TypedDict): + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + + subtotal: CommerceMoneyResponseTypedDict + base_fee: CommerceMoneyResponseTypedDict + tax_total: CommerceMoneyResponseTypedDict + grand_total: CommerceMoneyResponseTypedDict + per_unit_totals: NotRequired[List[CommercePerUnitTotalTypedDict]] + credits: NotRequired[ + Nullable[SchemasCommerceSubscriptionItemNextPaymentCreditsTypedDict] + ] + discounts: NotRequired[ + Nullable[SchemasCommerceSubscriptionItemNextPaymentDiscountsTypedDict] + ] + + +class SchemasCommerceSubscriptionItemNextPaymentTotals(BaseModel): + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + + subtotal: CommerceMoneyResponse + + base_fee: CommerceMoneyResponse + + tax_total: CommerceMoneyResponse + + grand_total: CommerceMoneyResponse + + per_unit_totals: Optional[List[CommercePerUnitTotal]] = None + + credits: OptionalNullable[SchemasCommerceSubscriptionItemNextPaymentCredits] = UNSET + + discounts: OptionalNullable[SchemasCommerceSubscriptionItemNextPaymentDiscounts] = ( + UNSET + ) + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set(["per_unit_totals", "credits", "discounts"]) + nullable_fields = set(["credits", "discounts"]) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + is_nullable_and_explicitly_set = ( + k in nullable_fields + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member + ) + + if val != UNSET_SENTINEL: + if ( + val is not None + or k not in optional_fields + or is_nullable_and_explicitly_set + ): + m[k] = val + + return m + + class SchemasCommerceSubscriptionItemNextPaymentTypedDict(TypedDict): r"""Information about the next payment.""" amount: NotRequired[ Nullable[SchemasCommerceSubscriptionItemNextPaymentAmountTypedDict] ] - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" date_: NotRequired[Nullable[int]] r"""Unix timestamp (in milliseconds) for the next payment date.""" + per_unit_totals: NotRequired[List[CommercePerUnitTotalTypedDict]] + r"""Per-unit total breakdown (for example, seats) for the next payment.""" + totals: NotRequired[ + Nullable[SchemasCommerceSubscriptionItemNextPaymentTotalsTypedDict] + ] + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" class SchemasCommerceSubscriptionItemNextPayment(BaseModel): r"""Information about the next payment.""" amount: OptionalNullable[SchemasCommerceSubscriptionItemNextPaymentAmount] = UNSET - r"""Amount for the next payment.""" + r"""Base plan fee for the next payment. Does not include per-unit (e.g. seat) charges; see `totals.grand_total` for the full amount.""" date_: Annotated[OptionalNullable[int], pydantic.Field(alias="date")] = UNSET r"""Unix timestamp (in milliseconds) for the next payment date.""" + per_unit_totals: Optional[List[CommercePerUnitTotal]] = None + r"""Per-unit total breakdown (for example, seats) for the next payment.""" + + totals: OptionalNullable[SchemasCommerceSubscriptionItemNextPaymentTotals] = UNSET + r"""Breakdown of the recurring amount that will be billed at renewal (base fee + per-unit charges). Tax and credits are not previewed.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["amount", "date"]) - nullable_fields = set(["amount", "date"]) + optional_fields = set(["amount", "date", "per_unit_totals", "totals"]) + nullable_fields = set(["amount", "date", "totals"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/models/updateenterpriseconnectionop.py b/src/clerk_backend_api/models/updateenterpriseconnectionop.py index b7e1a40c..d4654624 100644 --- a/src/clerk_backend_api/models/updateenterpriseconnectionop.py +++ b/src/clerk_backend_api/models/updateenterpriseconnectionop.py @@ -270,6 +270,8 @@ class UpdateEnterpriseConnectionCustomAttributesTypedDict(TypedDict): r"""Path to extract the attribute value from SSO claims""" scim_path: NotRequired[str] r"""GJSON path to extract the attribute value from SCIM user resources""" + multi_valued: NotRequired[bool] + r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" class UpdateEnterpriseConnectionCustomAttributes(BaseModel): @@ -285,9 +287,12 @@ class UpdateEnterpriseConnectionCustomAttributes(BaseModel): scim_path: Optional[str] = None r"""GJSON path to extract the attribute value from SCIM user resources""" + multi_valued: Optional[bool] = None + r"""When true, the attribute supports multiple values; values from the IdP are written to public_metadata as an array. Defaults to false.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): - optional_fields = set(["sso_path", "scim_path"]) + optional_fields = set(["sso_path", "scim_path", "multi_valued"]) serialized = handler(self) m = {} diff --git a/src/clerk_backend_api/oauthapplications_sdk.py b/src/clerk_backend_api/oauthapplications_sdk.py index 58f2061b..e7d771e5 100644 --- a/src/clerk_backend_api/oauthapplications_sdk.py +++ b/src/clerk_backend_api/oauthapplications_sdk.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import BaseModel, OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, List, Mapping, Optional, Union, cast +from typing import Any, Iterable, List, Mapping, Optional, Union, cast class OauthApplicationsSDK(BaseSDK): @@ -626,7 +626,7 @@ def update( *, oauth_application_id: str, name: OptionalNullable[str] = UNSET, - redirect_uris: OptionalNullable[List[str]] = UNSET, + redirect_uris: OptionalNullable[Iterable[str]] = UNSET, callback_url: OptionalNullable[str] = UNSET, scopes: OptionalNullable[str] = "profile email", consent_screen_enabled: OptionalNullable[bool] = UNSET, @@ -669,7 +669,9 @@ def update( oauth_application_id=oauth_application_id, request_body=models.UpdateOAuthApplicationRequestBody( name=name, - redirect_uris=redirect_uris, + redirect_uris=utils.unmarshal( + redirect_uris, OptionalNullable[List[str]] + ), callback_url=callback_url, scopes=scopes, consent_screen_enabled=consent_screen_enabled, @@ -749,7 +751,7 @@ async def update_async( *, oauth_application_id: str, name: OptionalNullable[str] = UNSET, - redirect_uris: OptionalNullable[List[str]] = UNSET, + redirect_uris: OptionalNullable[Iterable[str]] = UNSET, callback_url: OptionalNullable[str] = UNSET, scopes: OptionalNullable[str] = "profile email", consent_screen_enabled: OptionalNullable[bool] = UNSET, @@ -792,7 +794,9 @@ async def update_async( oauth_application_id=oauth_application_id, request_body=models.UpdateOAuthApplicationRequestBody( name=name, - redirect_uris=redirect_uris, + redirect_uris=utils.unmarshal( + redirect_uris, OptionalNullable[List[str]] + ), callback_url=callback_url, scopes=scopes, consent_screen_enabled=consent_screen_enabled, diff --git a/src/clerk_backend_api/organizationdomains_sdk.py b/src/clerk_backend_api/organizationdomains_sdk.py index 9fb0e30f..44cb4e81 100644 --- a/src/clerk_backend_api/organizationdomains_sdk.py +++ b/src/clerk_backend_api/organizationdomains_sdk.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, List, Mapping, Optional +from typing import Any, Iterable, List, Mapping, Optional class OrganizationDomainsSDK(BaseSDK): @@ -1046,9 +1046,9 @@ def list_all( *, organization_id: Optional[str] = None, verified: Optional[models.Verified] = None, - enrollment_mode: Optional[List[models.QueryParamEnrollmentMode]] = None, + enrollment_mode: Optional[Iterable[models.QueryParamEnrollmentMode]] = None, query: Optional[str] = None, - domains: Optional[List[str]] = None, + domains: Optional[Iterable[str]] = None, order_by: Optional[str] = "-created_at", offset: Optional[int] = 0, limit: Optional[int] = 10, @@ -1107,9 +1107,11 @@ def list_all( request = models.ListAllOrganizationDomainsRequest( organization_id=organization_id, verified=verified, - enrollment_mode=enrollment_mode, + enrollment_mode=utils.unmarshal( + enrollment_mode, Optional[List[models.QueryParamEnrollmentMode]] + ), query=query, - domains=domains, + domains=utils.unmarshal(domains, Optional[List[str]]), order_by=order_by, offset=offset, limit=limit, @@ -1177,9 +1179,9 @@ async def list_all_async( *, organization_id: Optional[str] = None, verified: Optional[models.Verified] = None, - enrollment_mode: Optional[List[models.QueryParamEnrollmentMode]] = None, + enrollment_mode: Optional[Iterable[models.QueryParamEnrollmentMode]] = None, query: Optional[str] = None, - domains: Optional[List[str]] = None, + domains: Optional[Iterable[str]] = None, order_by: Optional[str] = "-created_at", offset: Optional[int] = 0, limit: Optional[int] = 10, @@ -1238,9 +1240,11 @@ async def list_all_async( request = models.ListAllOrganizationDomainsRequest( organization_id=organization_id, verified=verified, - enrollment_mode=enrollment_mode, + enrollment_mode=utils.unmarshal( + enrollment_mode, Optional[List[models.QueryParamEnrollmentMode]] + ), query=query, - domains=domains, + domains=utils.unmarshal(domains, Optional[List[str]]), order_by=order_by, offset=offset, limit=limit, diff --git a/src/clerk_backend_api/organizationinvitations_sdk.py b/src/clerk_backend_api/organizationinvitations_sdk.py index 33d42ce4..d5983fc4 100644 --- a/src/clerk_backend_api/organizationinvitations_sdk.py +++ b/src/clerk_backend_api/organizationinvitations_sdk.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, Dict, List, Mapping, Optional, Union +from typing import Any, Dict, Iterable, List, Mapping, Optional, Union from typing_extensions import deprecated @@ -261,8 +261,8 @@ def create( email_address: str, role: str, inviter_user_id: OptionalNullable[str] = UNSET, - public_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - private_metadata: OptionalNullable[Dict[str, Any]] = UNSET, + public_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + private_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, redirect_url: OptionalNullable[str] = UNSET, expires_in_days: OptionalNullable[int] = UNSET, notify: OptionalNullable[bool] = True, @@ -324,8 +324,12 @@ def create( email_address=email_address, inviter_user_id=inviter_user_id, role=role, - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, OptionalNullable[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, OptionalNullable[Dict[str, Any]] + ), redirect_url=redirect_url, expires_in_days=expires_in_days, notify=notify, @@ -405,8 +409,8 @@ async def create_async( email_address: str, role: str, inviter_user_id: OptionalNullable[str] = UNSET, - public_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - private_metadata: OptionalNullable[Dict[str, Any]] = UNSET, + public_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + private_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, redirect_url: OptionalNullable[str] = UNSET, expires_in_days: OptionalNullable[int] = UNSET, notify: OptionalNullable[bool] = True, @@ -468,8 +472,12 @@ async def create_async( email_address=email_address, inviter_user_id=inviter_user_id, role=role, - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, OptionalNullable[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, OptionalNullable[Dict[str, Any]] + ), redirect_url=redirect_url, expires_in_days=expires_in_days, notify=notify, @@ -783,8 +791,8 @@ def bulk_create( *, organization_id: str, request_body: Union[ - List[models.CreateOrganizationInvitationBulkRequestBody], - List[models.CreateOrganizationInvitationBulkRequestBodyTypedDict], + Iterable[models.CreateOrganizationInvitationBulkRequestBody], + Iterable[models.CreateOrganizationInvitationBulkRequestBodyTypedDict], ], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -905,8 +913,8 @@ async def bulk_create_async( *, organization_id: str, request_body: Union[ - List[models.CreateOrganizationInvitationBulkRequestBody], - List[models.CreateOrganizationInvitationBulkRequestBodyTypedDict], + Iterable[models.CreateOrganizationInvitationBulkRequestBody], + Iterable[models.CreateOrganizationInvitationBulkRequestBodyTypedDict], ], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, diff --git a/src/clerk_backend_api/organizationmemberships_sdk.py b/src/clerk_backend_api/organizationmemberships_sdk.py index b2e47e7d..6c360f73 100644 --- a/src/clerk_backend_api/organizationmemberships_sdk.py +++ b/src/clerk_backend_api/organizationmemberships_sdk.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, Dict, List, Mapping, Optional +from typing import Any, Dict, Iterable, List, Mapping, Optional class OrganizationMembershipsSDK(BaseSDK): @@ -15,8 +15,8 @@ def create( organization_id: str, user_id: str, role: str, - public_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - private_metadata: OptionalNullable[Dict[str, Any]] = UNSET, + public_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + private_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -51,8 +51,12 @@ def create( request_body=models.CreateOrganizationMembershipRequestBody( user_id=user_id, role=role, - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, OptionalNullable[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, OptionalNullable[Dict[str, Any]] + ), ), ) @@ -128,8 +132,8 @@ async def create_async( organization_id: str, user_id: str, role: str, - public_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - private_metadata: OptionalNullable[Dict[str, Any]] = UNSET, + public_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + private_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -164,8 +168,12 @@ async def create_async( request_body=models.CreateOrganizationMembershipRequestBody( user_id=user_id, role=role, - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, OptionalNullable[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, OptionalNullable[Dict[str, Any]] + ), ), ) @@ -240,12 +248,12 @@ def list( *, organization_id: str, order_by: Optional[str] = None, - user_id: Optional[List[str]] = None, - email_address: Optional[List[str]] = None, - phone_number: Optional[List[str]] = None, - username: Optional[List[str]] = None, - web3_wallet: Optional[List[str]] = None, - role: Optional[List[str]] = None, + user_id: Optional[Iterable[str]] = None, + email_address: Optional[Iterable[str]] = None, + phone_number: Optional[Iterable[str]] = None, + username: Optional[Iterable[str]] = None, + web3_wallet: Optional[Iterable[str]] = None, + role: Optional[Iterable[str]] = None, query: Optional[str] = None, email_address_query: Optional[str] = None, phone_number_query: Optional[str] = None, @@ -322,12 +330,12 @@ def list( request = models.ListOrganizationMembershipsRequest( organization_id=organization_id, order_by=order_by, - user_id=user_id, - email_address=email_address, - phone_number=phone_number, - username=username, - web3_wallet=web3_wallet, - role=role, + user_id=utils.unmarshal(user_id, Optional[List[str]]), + email_address=utils.unmarshal(email_address, Optional[List[str]]), + phone_number=utils.unmarshal(phone_number, Optional[List[str]]), + username=utils.unmarshal(username, Optional[List[str]]), + web3_wallet=utils.unmarshal(web3_wallet, Optional[List[str]]), + role=utils.unmarshal(role, Optional[List[str]]), query=query, email_address_query=email_address_query, phone_number_query=phone_number_query, @@ -403,12 +411,12 @@ async def list_async( *, organization_id: str, order_by: Optional[str] = None, - user_id: Optional[List[str]] = None, - email_address: Optional[List[str]] = None, - phone_number: Optional[List[str]] = None, - username: Optional[List[str]] = None, - web3_wallet: Optional[List[str]] = None, - role: Optional[List[str]] = None, + user_id: Optional[Iterable[str]] = None, + email_address: Optional[Iterable[str]] = None, + phone_number: Optional[Iterable[str]] = None, + username: Optional[Iterable[str]] = None, + web3_wallet: Optional[Iterable[str]] = None, + role: Optional[Iterable[str]] = None, query: Optional[str] = None, email_address_query: Optional[str] = None, phone_number_query: Optional[str] = None, @@ -485,12 +493,12 @@ async def list_async( request = models.ListOrganizationMembershipsRequest( organization_id=organization_id, order_by=order_by, - user_id=user_id, - email_address=email_address, - phone_number=phone_number, - username=username, - web3_wallet=web3_wallet, - role=role, + user_id=utils.unmarshal(user_id, Optional[List[str]]), + email_address=utils.unmarshal(email_address, Optional[List[str]]), + phone_number=utils.unmarshal(phone_number, Optional[List[str]]), + username=utils.unmarshal(username, Optional[List[str]]), + web3_wallet=utils.unmarshal(web3_wallet, Optional[List[str]]), + role=utils.unmarshal(role, Optional[List[str]]), query=query, email_address_query=email_address_query, phone_number_query=phone_number_query, @@ -962,8 +970,8 @@ def update_metadata( *, organization_id: str, user_id: str, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1000,8 +1008,12 @@ def update_metadata( organization_id=organization_id, user_id=user_id, request_body=models.UpdateOrganizationMembershipMetadataRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, Optional[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), ), ) @@ -1074,8 +1086,8 @@ async def update_metadata_async( *, organization_id: str, user_id: str, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1112,8 +1124,12 @@ async def update_metadata_async( organization_id=organization_id, user_id=user_id, request_body=models.UpdateOrganizationMembershipMetadataRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, Optional[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), ), ) diff --git a/src/clerk_backend_api/organizationroles.py b/src/clerk_backend_api/organizationroles.py index c4288bf1..32a5ce07 100644 --- a/src/clerk_backend_api/organizationroles.py +++ b/src/clerk_backend_api/organizationroles.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, List, Mapping, Optional +from typing import Any, Iterable, List, Mapping, Optional class OrganizationRoles(BaseSDK): @@ -241,7 +241,7 @@ def create( name: str, key: str, description: OptionalNullable[str] = UNSET, - permissions: OptionalNullable[List[str]] = UNSET, + permissions: OptionalNullable[Iterable[str]] = UNSET, include_in_initial_role_set: OptionalNullable[bool] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -279,7 +279,7 @@ def create( name=name, key=key, description=description, - permissions=permissions, + permissions=utils.unmarshal(permissions, OptionalNullable[List[str]]), include_in_initial_role_set=include_in_initial_role_set, ) @@ -351,7 +351,7 @@ async def create_async( name: str, key: str, description: OptionalNullable[str] = UNSET, - permissions: OptionalNullable[List[str]] = UNSET, + permissions: OptionalNullable[Iterable[str]] = UNSET, include_in_initial_role_set: OptionalNullable[bool] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, @@ -389,7 +389,7 @@ async def create_async( name=name, key=key, description=description, - permissions=permissions, + permissions=utils.unmarshal(permissions, OptionalNullable[List[str]]), include_in_initial_role_set=include_in_initial_role_set, ) @@ -642,7 +642,7 @@ def update( name: OptionalNullable[str] = UNSET, key: OptionalNullable[str] = UNSET, description: OptionalNullable[str] = UNSET, - permissions: OptionalNullable[List[str]] = UNSET, + permissions: OptionalNullable[Iterable[str]] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -681,7 +681,7 @@ def update( name=name, key=key, description=description, - permissions=permissions, + permissions=utils.unmarshal(permissions, OptionalNullable[List[str]]), ), ) @@ -758,7 +758,7 @@ async def update_async( name: OptionalNullable[str] = UNSET, key: OptionalNullable[str] = UNSET, description: OptionalNullable[str] = UNSET, - permissions: OptionalNullable[List[str]] = UNSET, + permissions: OptionalNullable[Iterable[str]] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -797,7 +797,7 @@ async def update_async( name=name, key=key, description=description, - permissions=permissions, + permissions=utils.unmarshal(permissions, OptionalNullable[List[str]]), ), ) diff --git a/src/clerk_backend_api/organizations_sdk.py b/src/clerk_backend_api/organizations_sdk.py index 7dc26bb4..d69abd72 100644 --- a/src/clerk_backend_api/organizations_sdk.py +++ b/src/clerk_backend_api/organizations_sdk.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import BaseModel, OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, Dict, List, Mapping, Optional, Union, cast +from typing import Any, Dict, Iterable, List, Mapping, Optional, Union, cast class OrganizationsSDK(BaseSDK): @@ -15,8 +15,8 @@ def list( include_members_count: Optional[bool] = None, include_missing_member_with_elevated_permissions: Optional[bool] = None, query: Optional[str] = None, - user_id: Optional[List[str]] = None, - organization_id: Optional[List[str]] = None, + user_id: Optional[Iterable[str]] = None, + organization_id: Optional[Iterable[str]] = None, order_by: Optional[str] = "-created_at", limit: Optional[int] = 10, offset: Optional[int] = 0, @@ -73,8 +73,8 @@ def list( include_members_count=include_members_count, include_missing_member_with_elevated_permissions=include_missing_member_with_elevated_permissions, query=query, - user_id=user_id, - organization_id=organization_id, + user_id=utils.unmarshal(user_id, Optional[List[str]]), + organization_id=utils.unmarshal(organization_id, Optional[List[str]]), order_by=order_by, limit=limit, offset=offset, @@ -143,8 +143,8 @@ async def list_async( include_members_count: Optional[bool] = None, include_missing_member_with_elevated_permissions: Optional[bool] = None, query: Optional[str] = None, - user_id: Optional[List[str]] = None, - organization_id: Optional[List[str]] = None, + user_id: Optional[Iterable[str]] = None, + organization_id: Optional[Iterable[str]] = None, order_by: Optional[str] = "-created_at", limit: Optional[int] = 10, offset: Optional[int] = 0, @@ -201,8 +201,8 @@ async def list_async( include_members_count=include_members_count, include_missing_member_with_elevated_permissions=include_missing_member_with_elevated_permissions, query=query, - user_id=user_id, - organization_id=organization_id, + user_id=utils.unmarshal(user_id, Optional[List[str]]), + organization_id=utils.unmarshal(organization_id, Optional[List[str]]), order_by=order_by, limit=limit, offset=offset, @@ -691,8 +691,8 @@ def update( self, *, organization_id: str, - public_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - private_metadata: OptionalNullable[Dict[str, Any]] = UNSET, + public_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + private_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, name: OptionalNullable[str] = UNSET, slug: OptionalNullable[str] = UNSET, max_allowed_memberships: OptionalNullable[int] = UNSET, @@ -737,8 +737,12 @@ def update( request = models.UpdateOrganizationRequest( organization_id=organization_id, request_body=models.UpdateOrganizationRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, OptionalNullable[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, OptionalNullable[Dict[str, Any]] + ), name=name, slug=slug, max_allowed_memberships=max_allowed_memberships, @@ -818,8 +822,8 @@ async def update_async( self, *, organization_id: str, - public_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - private_metadata: OptionalNullable[Dict[str, Any]] = UNSET, + public_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + private_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, name: OptionalNullable[str] = UNSET, slug: OptionalNullable[str] = UNSET, max_allowed_memberships: OptionalNullable[int] = UNSET, @@ -864,8 +868,12 @@ async def update_async( request = models.UpdateOrganizationRequest( organization_id=organization_id, request_body=models.UpdateOrganizationRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, OptionalNullable[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, OptionalNullable[Dict[str, Any]] + ), name=name, slug=slug, max_allowed_memberships=max_allowed_memberships, @@ -1135,8 +1143,8 @@ def merge_metadata( self, *, organization_id: str, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1172,8 +1180,12 @@ def merge_metadata( request = models.MergeOrganizationMetadataRequest( organization_id=organization_id, request_body=models.MergeOrganizationMetadataRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, Optional[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), ), ) @@ -1247,8 +1259,8 @@ async def merge_metadata_async( self, *, organization_id: str, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1284,8 +1296,12 @@ async def merge_metadata_async( request = models.MergeOrganizationMetadataRequest( organization_id=organization_id, request_body=models.MergeOrganizationMetadataRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, + public_metadata=utils.unmarshal( + public_metadata, Optional[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), ), ) diff --git a/src/clerk_backend_api/phonenumbers.py b/src/clerk_backend_api/phonenumbers.py index a3f2ba4d..fdd62b9a 100644 --- a/src/clerk_backend_api/phonenumbers.py +++ b/src/clerk_backend_api/phonenumbers.py @@ -813,11 +813,450 @@ async def update_async( raise models.SDKError("Unexpected response received", http_res) + def prepare_verification( + self, + *, + phone_number_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.VerificationResponse: + r"""Send a verification code to a phone number + + Sends a one-time code to the given phone number so that a backend can + verify the user controls it (for example, in a custom, backend-driven + sign-in flow). The code is tracked on its own verification; confirm it + with attempt_verification. + + :param phone_number_id: The ID of the phone number to send the verification code to + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PreparePhoneNumberVerificationRequest( + phone_number_id=phone_number_id, + ) + + req = self._build_request( + method="POST", + path="/phone_numbers/{phone_number_id}/prepare_verification", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="PreparePhoneNumberVerification", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.VerificationResponse, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404", "429"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def prepare_verification_async( + self, + *, + phone_number_id: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.VerificationResponse: + r"""Send a verification code to a phone number + + Sends a one-time code to the given phone number so that a backend can + verify the user controls it (for example, in a custom, backend-driven + sign-in flow). The code is tracked on its own verification; confirm it + with attempt_verification. + + :param phone_number_id: The ID of the phone number to send the verification code to + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.PreparePhoneNumberVerificationRequest( + phone_number_id=phone_number_id, + ) + + req = self._build_request_async( + method="POST", + path="/phone_numbers/{phone_number_id}/prepare_verification", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="PreparePhoneNumberVerification", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.VerificationResponse, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404", "429"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + def attempt_verification( + self, + *, + phone_number_id: str, + verification_id: str, + code: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.VerificationResponse: + r"""Verify a code sent to a phone number + + Checks a one-time code against the verification identified by + verification_id, and returns the verification with its updated status + (`verified`, `unverified`, `expired`, or `failed`) and attempt count, so a + backend driving its own frontend can react on every attempt — an incorrect + or expired code is reported through the status, not as an error. Resubmitting + a verification whose code was already accepted is rejected with a + `verification_already_verified` error. If the code + is correct and the phone number is not already verified, it is also marked + as verified as a side effect (just as it would be in a frontend verification + flow); an already verified phone number is left unchanged. It never creates + a session; to sign the user in afterwards, mint a sign-in token. + + :param phone_number_id: The ID of the phone number whose code is being verified + :param verification_id: The ID of the verification to check, such as one returned by prepare_verification + :param code: The verification code that was sent to the phone number + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.AttemptPhoneNumberVerificationRequest( + phone_number_id=phone_number_id, + request_body=models.AttemptPhoneNumberVerificationRequestBody( + verification_id=verification_id, + code=code, + ), + ) + + req = self._build_request( + method="POST", + path="/phone_numbers/{phone_number_id}/attempt_verification", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body, + False, + False, + "json", + models.AttemptPhoneNumberVerificationRequestBody, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="AttemptPhoneNumberVerification", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.VerificationResponse, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = utils.stream_to_text(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + + async def attempt_verification_async( + self, + *, + phone_number_id: str, + verification_id: str, + code: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.VerificationResponse: + r"""Verify a code sent to a phone number + + Checks a one-time code against the verification identified by + verification_id, and returns the verification with its updated status + (`verified`, `unverified`, `expired`, or `failed`) and attempt count, so a + backend driving its own frontend can react on every attempt — an incorrect + or expired code is reported through the status, not as an error. Resubmitting + a verification whose code was already accepted is rejected with a + `verification_already_verified` error. If the code + is correct and the phone number is not already verified, it is also marked + as verified as a side effect (just as it would be in a frontend verification + flow); an already verified phone number is left unchanged. It never creates + a session; to sign the user in afterwards, mint a sign-in token. + + :param phone_number_id: The ID of the phone number whose code is being verified + :param verification_id: The ID of the verification to check, such as one returned by prepare_verification + :param code: The verification code that was sent to the phone number + :param retries: Override the default retry configuration for this method + :param server_url: Override the default server URL for this method + :param timeout_ms: Override the default request timeout configuration for this method in milliseconds + :param http_headers: Additional headers to set or replace on requests. + """ + base_url = None + url_variables = None + if timeout_ms is None: + timeout_ms = self.sdk_configuration.timeout_ms + + if server_url is not None: + base_url = server_url + else: + base_url = self._get_url(base_url, url_variables) + + request = models.AttemptPhoneNumberVerificationRequest( + phone_number_id=phone_number_id, + request_body=models.AttemptPhoneNumberVerificationRequestBody( + verification_id=verification_id, + code=code, + ), + ) + + req = self._build_request_async( + method="POST", + path="/phone_numbers/{phone_number_id}/attempt_verification", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=True, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=self.sdk_configuration.security, + get_serialized_body=lambda: utils.serialize_request_body( + request.request_body, + False, + False, + "json", + models.AttemptPhoneNumberVerificationRequestBody, + ), + allow_empty_value=None, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + else: + retries = utils.RetryConfig( + "backoff", utils.BackoffStrategy(500, 60000, 1.5, 3600000), True + ) + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["5XX"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="AttemptPhoneNumberVerification", + oauth2_scopes=None, + security_source=self.sdk_configuration.security, + ), + request=req, + is_error_status_code=lambda c: utils.match_status_codes(["4XX", "5XX"], c), + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response(models.VerificationResponse, http_res) + if utils.match_response( + http_res, ["400", "401", "403", "404"], "application/json" + ): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "500", "application/json"): + response_data = unmarshal_json_response(models.ClerkErrorsData, http_res) + raise models.ClerkErrors(response_data, http_res) + if utils.match_response(http_res, "4XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + if utils.match_response(http_res, "5XX", "*"): + http_res_text = await utils.stream_to_text_async(http_res) + raise models.SDKError("API error occurred", http_res, http_res_text) + + raise models.SDKError("Unexpected response received", http_res) + def replace_for_user( self, *, user_id: str, phone_number: str, + identification_status: Optional[ + models.ReplaceUserPhoneNumberIdentificationStatus + ] = models.ReplaceUserPhoneNumberIdentificationStatus.VERIFIED, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -825,13 +1264,18 @@ def replace_for_user( ) -> models.PhoneNumber: r"""Replace a user's phone number - Replaces all of the user's phone numbers with a single verified, primary phone number. - The new phone number is created with the admin verification strategy and is not reserved - for second factor. Any existing phone numbers are deleted; replacing a phone number that is - reserved for second factor disables the user's MFA. + Replaces all of the user's phone numbers with a single primary phone number. + By default the new phone number is created verified, with the admin verification strategy. + When `identification_status` is `reserved` it is created reserved instead: unverified but usable + for sign-in and locked so no other user can claim it. The new phone number is never reserved for + second factor. Any existing phone numbers are deleted; replacing a phone number that is reserved + for second factor disables the user's MFA. :param user_id: The ID of the user whose phone number to replace :param phone_number: The new phone number. Must adhere to the E.164 standard for phone number format. + :param identification_status: Controls the status of the replacement phone number. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -851,6 +1295,7 @@ def replace_for_user( user_id=user_id, request_body=models.ReplaceUserPhoneNumberRequestBody( phone_number=phone_number, + identification_status=identification_status, ), ) @@ -925,6 +1370,9 @@ async def replace_for_user_async( *, user_id: str, phone_number: str, + identification_status: Optional[ + models.ReplaceUserPhoneNumberIdentificationStatus + ] = models.ReplaceUserPhoneNumberIdentificationStatus.VERIFIED, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -932,13 +1380,18 @@ async def replace_for_user_async( ) -> models.PhoneNumber: r"""Replace a user's phone number - Replaces all of the user's phone numbers with a single verified, primary phone number. - The new phone number is created with the admin verification strategy and is not reserved - for second factor. Any existing phone numbers are deleted; replacing a phone number that is - reserved for second factor disables the user's MFA. + Replaces all of the user's phone numbers with a single primary phone number. + By default the new phone number is created verified, with the admin verification strategy. + When `identification_status` is `reserved` it is created reserved instead: unverified but usable + for sign-in and locked so no other user can claim it. The new phone number is never reserved for + second factor. Any existing phone numbers are deleted; replacing a phone number that is reserved + for second factor disables the user's MFA. :param user_id: The ID of the user whose phone number to replace :param phone_number: The new phone number. Must adhere to the E.164 standard for phone number format. + :param identification_status: Controls the status of the replacement phone number. Defaults to `verified`. Set to + `reserved` to create it reserved (unverified but usable for sign-in and locked) + instead of verified. :param retries: Override the default retry configuration for this method :param server_url: Override the default server URL for this method :param timeout_ms: Override the default request timeout configuration for this method in milliseconds @@ -958,6 +1411,7 @@ async def replace_for_user_async( user_id=user_id, request_body=models.ReplaceUserPhoneNumberRequestBody( phone_number=phone_number, + identification_status=identification_status, ), ) diff --git a/src/clerk_backend_api/rolesets_sdk.py b/src/clerk_backend_api/rolesets_sdk.py index bb3347dd..48cb0d45 100644 --- a/src/clerk_backend_api/rolesets_sdk.py +++ b/src/clerk_backend_api/rolesets_sdk.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, Dict, List, Mapping, Optional +from typing import Any, Dict, Iterable, List, Mapping, Optional class RoleSetsSDK(BaseSDK): @@ -239,7 +239,7 @@ def create( name: str, default_role_key: str, creator_role_key: str, - roles: List[str], + roles: Iterable[str], key: Optional[str] = None, description: OptionalNullable[str] = UNSET, type_: Optional[models.CreateRoleSetType] = None, @@ -288,7 +288,7 @@ def create( default_role_key=default_role_key, creator_role_key=creator_role_key, type=type_, - roles=roles, + roles=utils.unmarshal(roles, List[str]), ) req = self._build_request( @@ -359,7 +359,7 @@ async def create_async( name: str, default_role_key: str, creator_role_key: str, - roles: List[str], + roles: Iterable[str], key: Optional[str] = None, description: OptionalNullable[str] = UNSET, type_: Optional[models.CreateRoleSetType] = None, @@ -408,7 +408,7 @@ async def create_async( default_role_key=default_role_key, creator_role_key=creator_role_key, type=type_, - roles=roles, + roles=utils.unmarshal(roles, List[str]), ) req = self._build_request_async( @@ -906,7 +906,7 @@ def replace( *, role_set_key_or_id: str, dest_role_set_key: str, - reassignment_mappings: Optional[Dict[str, str]] = None, + reassignment_mappings: Optional[Mapping[str, str]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -941,7 +941,9 @@ def replace( role_set_key_or_id=role_set_key_or_id, request_body=models.ReplaceRoleSetRequestBody( dest_role_set_key=dest_role_set_key, - reassignment_mappings=reassignment_mappings, + reassignment_mappings=utils.unmarshal( + reassignment_mappings, Optional[Dict[str, str]] + ), ), ) @@ -1016,7 +1018,7 @@ async def replace_async( *, role_set_key_or_id: str, dest_role_set_key: str, - reassignment_mappings: Optional[Dict[str, str]] = None, + reassignment_mappings: Optional[Mapping[str, str]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1051,7 +1053,9 @@ async def replace_async( role_set_key_or_id=role_set_key_or_id, request_body=models.ReplaceRoleSetRequestBody( dest_role_set_key=dest_role_set_key, - reassignment_mappings=reassignment_mappings, + reassignment_mappings=utils.unmarshal( + reassignment_mappings, Optional[Dict[str, str]] + ), ), ) @@ -1125,7 +1129,7 @@ def add_roles( self, *, role_set_key_or_id: str, - role_keys: List[str], + role_keys: Iterable[str], default_role_key: Optional[str] = None, creator_role_key: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -1161,7 +1165,7 @@ def add_roles( request = models.AddRolesToRoleSetRequest( role_set_key_or_id=role_set_key_or_id, request_body=models.AddRolesToRoleSetRequestBody( - role_keys=role_keys, + role_keys=utils.unmarshal(role_keys, List[str]), default_role_key=default_role_key, creator_role_key=creator_role_key, ), @@ -1237,7 +1241,7 @@ async def add_roles_async( self, *, role_set_key_or_id: str, - role_keys: List[str], + role_keys: Iterable[str], default_role_key: Optional[str] = None, creator_role_key: Optional[str] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -1273,7 +1277,7 @@ async def add_roles_async( request = models.AddRolesToRoleSetRequest( role_set_key_or_id=role_set_key_or_id, request_body=models.AddRolesToRoleSetRequestBody( - role_keys=role_keys, + role_keys=utils.unmarshal(role_keys, List[str]), default_role_key=default_role_key, creator_role_key=creator_role_key, ), diff --git a/src/clerk_backend_api/samlconnections_sdk.py b/src/clerk_backend_api/samlconnections_sdk.py index 17c2a6f0..86fe5488 100644 --- a/src/clerk_backend_api/samlconnections_sdk.py +++ b/src/clerk_backend_api/samlconnections_sdk.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import BaseModel, OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, List, Mapping, Optional, Union, cast +from typing import Any, Iterable, List, Mapping, Optional, Union, cast from typing_extensions import deprecated @@ -20,7 +20,7 @@ def list( offset: Optional[int] = 0, query: Optional[str] = None, order_by: Optional[str] = None, - organization_id: Optional[List[str]] = None, + organization_id: Optional[Iterable[str]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -69,7 +69,7 @@ def list( offset=offset, query=query, order_by=order_by, - organization_id=organization_id, + organization_id=utils.unmarshal(organization_id, Optional[List[str]]), ) req = self._build_request( @@ -139,7 +139,7 @@ async def list_async( offset: Optional[int] = 0, query: Optional[str] = None, order_by: Optional[str] = None, - organization_id: Optional[List[str]] = None, + organization_id: Optional[Iterable[str]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -188,7 +188,7 @@ async def list_async( offset=offset, query=query, order_by=order_by, - organization_id=organization_id, + organization_id=utils.unmarshal(organization_id, Optional[List[str]]), ) req = self._build_request_async( @@ -665,7 +665,7 @@ def update( saml_connection_id: str, name: OptionalNullable[str] = UNSET, domain: OptionalNullable[str] = UNSET, - domains: OptionalNullable[List[str]] = UNSET, + domains: OptionalNullable[Iterable[str]] = UNSET, idp_entity_id: OptionalNullable[str] = UNSET, idp_sso_url: OptionalNullable[str] = UNSET, idp_certificate: OptionalNullable[str] = UNSET, @@ -732,7 +732,7 @@ def update( request_body=models.UpdateSAMLConnectionRequestBody( name=name, domain=domain, - domains=domains, + domains=utils.unmarshal(domains, OptionalNullable[List[str]]), idp_entity_id=idp_entity_id, idp_sso_url=idp_sso_url, idp_certificate=idp_certificate, @@ -828,7 +828,7 @@ async def update_async( saml_connection_id: str, name: OptionalNullable[str] = UNSET, domain: OptionalNullable[str] = UNSET, - domains: OptionalNullable[List[str]] = UNSET, + domains: OptionalNullable[Iterable[str]] = UNSET, idp_entity_id: OptionalNullable[str] = UNSET, idp_sso_url: OptionalNullable[str] = UNSET, idp_certificate: OptionalNullable[str] = UNSET, @@ -895,7 +895,7 @@ async def update_async( request_body=models.UpdateSAMLConnectionRequestBody( name=name, domain=domain, - domains=domains, + domains=utils.unmarshal(domains, OptionalNullable[List[str]]), idp_entity_id=idp_entity_id, idp_sso_url=idp_sso_url, idp_certificate=idp_certificate, diff --git a/src/clerk_backend_api/sessions.py b/src/clerk_backend_api/sessions.py index 1b65dfb5..ae34908d 100644 --- a/src/clerk_backend_api/sessions.py +++ b/src/clerk_backend_api/sessions.py @@ -638,7 +638,7 @@ def refresh( expired_token: str, refresh_token: str, request_origin: str, - request_headers: OptionalNullable[Dict[str, Any]] = UNSET, + request_headers: OptionalNullable[Mapping[str, Any]] = UNSET, format_: OptionalNullable[models.Format] = models.Format.TOKEN, request_originating_ip: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -680,7 +680,9 @@ def refresh( expired_token=expired_token, refresh_token=refresh_token, request_origin=request_origin, - request_headers=request_headers, + request_headers=utils.unmarshal( + request_headers, OptionalNullable[Dict[str, Any]] + ), format_=format_, request_originating_ip=request_originating_ip, ), @@ -757,7 +759,7 @@ async def refresh_async( expired_token: str, refresh_token: str, request_origin: str, - request_headers: OptionalNullable[Dict[str, Any]] = UNSET, + request_headers: OptionalNullable[Mapping[str, Any]] = UNSET, format_: OptionalNullable[models.Format] = models.Format.TOKEN, request_originating_ip: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -799,7 +801,9 @@ async def refresh_async( expired_token=expired_token, refresh_token=refresh_token, request_origin=request_origin, - request_headers=request_headers, + request_headers=utils.unmarshal( + request_headers, OptionalNullable[Dict[str, Any]] + ), format_=format_, request_originating_ip=request_originating_ip, ), diff --git a/src/clerk_backend_api/users.py b/src/clerk_backend_api/users.py index 86b3cfeb..0a55f81d 100644 --- a/src/clerk_backend_api/users.py +++ b/src/clerk_backend_api/users.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import BaseModel, OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, Dict, List, Mapping, Optional, Union, cast +from typing import Any, Dict, Iterable, List, Mapping, Optional, Union, cast class Users(BaseSDK): @@ -202,9 +202,15 @@ def create( first_name: OptionalNullable[str] = UNSET, last_name: OptionalNullable[str] = UNSET, locale: OptionalNullable[str] = UNSET, - email_address: Optional[List[str]] = None, - phone_number: Optional[List[str]] = None, - web3_wallet: Optional[List[str]] = None, + email_address: Optional[Iterable[str]] = None, + email_address_identification_status: Optional[ + Iterable[models.EmailAddressIdentificationStatus] + ] = None, + phone_number: Optional[Iterable[str]] = None, + phone_number_identification_status: Optional[ + Iterable[models.PhoneNumberIdentificationStatus] + ] = None, + web3_wallet: Optional[Iterable[str]] = None, username: OptionalNullable[str] = UNSET, password: OptionalNullable[str] = UNSET, password_digest: OptionalNullable[str] = UNSET, @@ -212,10 +218,10 @@ def create( skip_password_checks: OptionalNullable[bool] = UNSET, skip_password_requirement: OptionalNullable[bool] = UNSET, totp_secret: OptionalNullable[str] = UNSET, - backup_codes: Optional[List[str]] = None, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, - unsafe_metadata: Optional[Dict[str, Any]] = None, + backup_codes: Optional[Iterable[str]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, + unsafe_metadata: Optional[Mapping[str, Any]] = None, delete_self_enabled: OptionalNullable[bool] = UNSET, legal_accepted_at: OptionalNullable[str] = UNSET, skip_legal_checks: OptionalNullable[bool] = UNSET, @@ -235,7 +241,7 @@ def create( Creates a new user. Your user management settings determine how you should setup your user model. - Any email address and phone number created using this method will be marked as verified. + By default, any email address and phone number created using this method is marked as verified. Use the `email_address_identification_status` and `phone_number_identification_status` arrays to instead create some or all of them as reserved (unverified but usable for sign-in and locked so no other user can claim them). Note: If you are performing a migration, check out our guide on [zero downtime migrations](https://clerk.com/docs/deployments/migrate-overview). @@ -249,9 +255,23 @@ def create( :param email_address: Email addresses to add to the user. Must be unique across your instance. The first email address will be set as the user's primary email address. + Created verified by default; see `email_address_identification_status` to create them reserved. + :param email_address_identification_status: Controls the status each email address is created with. Runs parallel to + `email_address`: when provided, it must contain exactly one item per email + address, applied by position. When omitted or empty, every email address is + created `verified`. Set an item to `reserved` to create the corresponding + email address reserved instead (unverified but usable for sign-in and locked + so no other user can claim it). :param phone_number: Phone numbers to add to the user. Must be unique across your instance. The first phone number will be set as the user's primary phone number. + Created verified by default; see `phone_number_identification_status` to create them reserved. + :param phone_number_identification_status: Controls the status each phone number is created with. Runs parallel to + `phone_number`: when provided, it must contain exactly one item per phone + number, applied by position. When omitted or empty, every phone number is + created `verified`. Set an item to `reserved` to create the corresponding + phone number reserved instead (unverified but usable for sign-in and locked + so no other user can claim it). :param web3_wallet: Web3 wallets to add to the user. Must be unique across your instance. The first wallet will be set as the user's primary wallet. @@ -327,9 +347,17 @@ def create( first_name=first_name, last_name=last_name, locale=locale, - email_address=email_address, - phone_number=phone_number, - web3_wallet=web3_wallet, + email_address=utils.unmarshal(email_address, Optional[List[str]]), + email_address_identification_status=utils.unmarshal( + email_address_identification_status, + Optional[List[models.EmailAddressIdentificationStatus]], + ), + phone_number=utils.unmarshal(phone_number, Optional[List[str]]), + phone_number_identification_status=utils.unmarshal( + phone_number_identification_status, + Optional[List[models.PhoneNumberIdentificationStatus]], + ), + web3_wallet=utils.unmarshal(web3_wallet, Optional[List[str]]), username=username, password=password, password_digest=password_digest, @@ -337,10 +365,12 @@ def create( skip_password_checks=skip_password_checks, skip_password_requirement=skip_password_requirement, totp_secret=totp_secret, - backup_codes=backup_codes, - public_metadata=public_metadata, - private_metadata=private_metadata, - unsafe_metadata=unsafe_metadata, + backup_codes=utils.unmarshal(backup_codes, Optional[List[str]]), + public_metadata=utils.unmarshal(public_metadata, Optional[Dict[str, Any]]), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), + unsafe_metadata=utils.unmarshal(unsafe_metadata, Optional[Dict[str, Any]]), delete_self_enabled=delete_self_enabled, legal_accepted_at=legal_accepted_at, skip_legal_checks=skip_legal_checks, @@ -422,9 +452,15 @@ async def create_async( first_name: OptionalNullable[str] = UNSET, last_name: OptionalNullable[str] = UNSET, locale: OptionalNullable[str] = UNSET, - email_address: Optional[List[str]] = None, - phone_number: Optional[List[str]] = None, - web3_wallet: Optional[List[str]] = None, + email_address: Optional[Iterable[str]] = None, + email_address_identification_status: Optional[ + Iterable[models.EmailAddressIdentificationStatus] + ] = None, + phone_number: Optional[Iterable[str]] = None, + phone_number_identification_status: Optional[ + Iterable[models.PhoneNumberIdentificationStatus] + ] = None, + web3_wallet: Optional[Iterable[str]] = None, username: OptionalNullable[str] = UNSET, password: OptionalNullable[str] = UNSET, password_digest: OptionalNullable[str] = UNSET, @@ -432,10 +468,10 @@ async def create_async( skip_password_checks: OptionalNullable[bool] = UNSET, skip_password_requirement: OptionalNullable[bool] = UNSET, totp_secret: OptionalNullable[str] = UNSET, - backup_codes: Optional[List[str]] = None, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, - unsafe_metadata: Optional[Dict[str, Any]] = None, + backup_codes: Optional[Iterable[str]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, + unsafe_metadata: Optional[Mapping[str, Any]] = None, delete_self_enabled: OptionalNullable[bool] = UNSET, legal_accepted_at: OptionalNullable[str] = UNSET, skip_legal_checks: OptionalNullable[bool] = UNSET, @@ -455,7 +491,7 @@ async def create_async( Creates a new user. Your user management settings determine how you should setup your user model. - Any email address and phone number created using this method will be marked as verified. + By default, any email address and phone number created using this method is marked as verified. Use the `email_address_identification_status` and `phone_number_identification_status` arrays to instead create some or all of them as reserved (unverified but usable for sign-in and locked so no other user can claim them). Note: If you are performing a migration, check out our guide on [zero downtime migrations](https://clerk.com/docs/deployments/migrate-overview). @@ -469,9 +505,23 @@ async def create_async( :param email_address: Email addresses to add to the user. Must be unique across your instance. The first email address will be set as the user's primary email address. + Created verified by default; see `email_address_identification_status` to create them reserved. + :param email_address_identification_status: Controls the status each email address is created with. Runs parallel to + `email_address`: when provided, it must contain exactly one item per email + address, applied by position. When omitted or empty, every email address is + created `verified`. Set an item to `reserved` to create the corresponding + email address reserved instead (unverified but usable for sign-in and locked + so no other user can claim it). :param phone_number: Phone numbers to add to the user. Must be unique across your instance. The first phone number will be set as the user's primary phone number. + Created verified by default; see `phone_number_identification_status` to create them reserved. + :param phone_number_identification_status: Controls the status each phone number is created with. Runs parallel to + `phone_number`: when provided, it must contain exactly one item per phone + number, applied by position. When omitted or empty, every phone number is + created `verified`. Set an item to `reserved` to create the corresponding + phone number reserved instead (unverified but usable for sign-in and locked + so no other user can claim it). :param web3_wallet: Web3 wallets to add to the user. Must be unique across your instance. The first wallet will be set as the user's primary wallet. @@ -547,9 +597,17 @@ async def create_async( first_name=first_name, last_name=last_name, locale=locale, - email_address=email_address, - phone_number=phone_number, - web3_wallet=web3_wallet, + email_address=utils.unmarshal(email_address, Optional[List[str]]), + email_address_identification_status=utils.unmarshal( + email_address_identification_status, + Optional[List[models.EmailAddressIdentificationStatus]], + ), + phone_number=utils.unmarshal(phone_number, Optional[List[str]]), + phone_number_identification_status=utils.unmarshal( + phone_number_identification_status, + Optional[List[models.PhoneNumberIdentificationStatus]], + ), + web3_wallet=utils.unmarshal(web3_wallet, Optional[List[str]]), username=username, password=password, password_digest=password_digest, @@ -557,10 +615,12 @@ async def create_async( skip_password_checks=skip_password_checks, skip_password_requirement=skip_password_requirement, totp_secret=totp_secret, - backup_codes=backup_codes, - public_metadata=public_metadata, - private_metadata=private_metadata, - unsafe_metadata=unsafe_metadata, + backup_codes=utils.unmarshal(backup_codes, Optional[List[str]]), + public_metadata=utils.unmarshal(public_metadata, Optional[Dict[str, Any]]), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), + unsafe_metadata=utils.unmarshal(unsafe_metadata, Optional[Dict[str, Any]]), delete_self_enabled=delete_self_enabled, legal_accepted_at=legal_accepted_at, skip_legal_checks=skip_legal_checks, @@ -1019,10 +1079,10 @@ def update( skip_password_checks: OptionalNullable[bool] = UNSET, sign_out_of_other_sessions: OptionalNullable[bool] = UNSET, totp_secret: OptionalNullable[str] = UNSET, - backup_codes: Optional[List[str]] = None, - public_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - private_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - unsafe_metadata: OptionalNullable[Dict[str, Any]] = UNSET, + backup_codes: Optional[Iterable[str]] = None, + public_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + private_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + unsafe_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, delete_self_enabled: OptionalNullable[bool] = UNSET, create_organization_enabled: OptionalNullable[bool] = UNSET, legal_accepted_at: OptionalNullable[str] = UNSET, @@ -1136,10 +1196,16 @@ def update( skip_password_checks=skip_password_checks, sign_out_of_other_sessions=sign_out_of_other_sessions, totp_secret=totp_secret, - backup_codes=backup_codes, - public_metadata=public_metadata, - private_metadata=private_metadata, - unsafe_metadata=unsafe_metadata, + backup_codes=utils.unmarshal(backup_codes, Optional[List[str]]), + public_metadata=utils.unmarshal( + public_metadata, OptionalNullable[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, OptionalNullable[Dict[str, Any]] + ), + unsafe_metadata=utils.unmarshal( + unsafe_metadata, OptionalNullable[Dict[str, Any]] + ), delete_self_enabled=delete_self_enabled, create_organization_enabled=create_organization_enabled, legal_accepted_at=legal_accepted_at, @@ -1232,10 +1298,10 @@ async def update_async( skip_password_checks: OptionalNullable[bool] = UNSET, sign_out_of_other_sessions: OptionalNullable[bool] = UNSET, totp_secret: OptionalNullable[str] = UNSET, - backup_codes: Optional[List[str]] = None, - public_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - private_metadata: OptionalNullable[Dict[str, Any]] = UNSET, - unsafe_metadata: OptionalNullable[Dict[str, Any]] = UNSET, + backup_codes: Optional[Iterable[str]] = None, + public_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + private_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, + unsafe_metadata: OptionalNullable[Mapping[str, Any]] = UNSET, delete_self_enabled: OptionalNullable[bool] = UNSET, create_organization_enabled: OptionalNullable[bool] = UNSET, legal_accepted_at: OptionalNullable[str] = UNSET, @@ -1349,10 +1415,16 @@ async def update_async( skip_password_checks=skip_password_checks, sign_out_of_other_sessions=sign_out_of_other_sessions, totp_secret=totp_secret, - backup_codes=backup_codes, - public_metadata=public_metadata, - private_metadata=private_metadata, - unsafe_metadata=unsafe_metadata, + backup_codes=utils.unmarshal(backup_codes, Optional[List[str]]), + public_metadata=utils.unmarshal( + public_metadata, OptionalNullable[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, OptionalNullable[Dict[str, Any]] + ), + unsafe_metadata=utils.unmarshal( + unsafe_metadata, OptionalNullable[Dict[str, Any]] + ), delete_self_enabled=delete_self_enabled, create_organization_enabled=create_organization_enabled, legal_accepted_at=legal_accepted_at, @@ -1968,7 +2040,7 @@ async def unban_async( def bulk_ban( self, *, - user_ids: List[str], + user_ids: Iterable[str], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1995,7 +2067,7 @@ def bulk_ban( base_url = self._get_url(base_url, url_variables) request = models.UsersBanRequestBody( - user_ids=user_ids, + user_ids=utils.unmarshal(user_ids, List[str]), ) req = self._build_request( @@ -2061,7 +2133,7 @@ def bulk_ban( async def bulk_ban_async( self, *, - user_ids: List[str], + user_ids: Iterable[str], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -2088,7 +2160,7 @@ async def bulk_ban_async( base_url = self._get_url(base_url, url_variables) request = models.UsersBanRequestBody( - user_ids=user_ids, + user_ids=utils.unmarshal(user_ids, List[str]), ) req = self._build_request_async( @@ -2154,7 +2226,7 @@ async def bulk_ban_async( def bulk_unban( self, *, - user_ids: List[str], + user_ids: Iterable[str], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -2181,7 +2253,7 @@ def bulk_unban( base_url = self._get_url(base_url, url_variables) request = models.UsersUnbanRequestBody( - user_ids=user_ids, + user_ids=utils.unmarshal(user_ids, List[str]), ) req = self._build_request( @@ -2247,7 +2319,7 @@ def bulk_unban( async def bulk_unban_async( self, *, - user_ids: List[str], + user_ids: Iterable[str], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -2274,7 +2346,7 @@ async def bulk_unban_async( base_url = self._get_url(base_url, url_variables) request = models.UsersUnbanRequestBody( - user_ids=user_ids, + user_ids=utils.unmarshal(user_ids, List[str]), ) req = self._build_request_async( @@ -3087,9 +3159,9 @@ def update_metadata( self, *, user_id: str, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, - unsafe_metadata: Optional[Dict[str, Any]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, + unsafe_metadata: Optional[Mapping[str, Any]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -3133,9 +3205,15 @@ def update_metadata( request = models.UpdateUserMetadataRequest( user_id=user_id, request_body=models.UpdateUserMetadataRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, - unsafe_metadata=unsafe_metadata, + public_metadata=utils.unmarshal( + public_metadata, Optional[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), + unsafe_metadata=utils.unmarshal( + unsafe_metadata, Optional[Dict[str, Any]] + ), ), ) @@ -3209,9 +3287,9 @@ async def update_metadata_async( self, *, user_id: str, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, - unsafe_metadata: Optional[Dict[str, Any]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, + unsafe_metadata: Optional[Mapping[str, Any]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -3255,9 +3333,15 @@ async def update_metadata_async( request = models.UpdateUserMetadataRequest( user_id=user_id, request_body=models.UpdateUserMetadataRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, - unsafe_metadata=unsafe_metadata, + public_metadata=utils.unmarshal( + public_metadata, Optional[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), + unsafe_metadata=utils.unmarshal( + unsafe_metadata, Optional[Dict[str, Any]] + ), ), ) @@ -3331,9 +3415,9 @@ def replace_metadata( self, *, user_id: str, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, - unsafe_metadata: Optional[Dict[str, Any]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, + unsafe_metadata: Optional[Mapping[str, Any]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -3378,9 +3462,15 @@ def replace_metadata( request = models.ReplaceUserMetadataRequest( user_id=user_id, request_body=models.ReplaceUserMetadataRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, - unsafe_metadata=unsafe_metadata, + public_metadata=utils.unmarshal( + public_metadata, Optional[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), + unsafe_metadata=utils.unmarshal( + unsafe_metadata, Optional[Dict[str, Any]] + ), ), ) @@ -3454,9 +3544,9 @@ async def replace_metadata_async( self, *, user_id: str, - public_metadata: Optional[Dict[str, Any]] = None, - private_metadata: Optional[Dict[str, Any]] = None, - unsafe_metadata: Optional[Dict[str, Any]] = None, + public_metadata: Optional[Mapping[str, Any]] = None, + private_metadata: Optional[Mapping[str, Any]] = None, + unsafe_metadata: Optional[Mapping[str, Any]] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -3501,9 +3591,15 @@ async def replace_metadata_async( request = models.ReplaceUserMetadataRequest( user_id=user_id, request_body=models.ReplaceUserMetadataRequestBody( - public_metadata=public_metadata, - private_metadata=private_metadata, - unsafe_metadata=unsafe_metadata, + public_metadata=utils.unmarshal( + public_metadata, Optional[Dict[str, Any]] + ), + private_metadata=utils.unmarshal( + private_metadata, Optional[Dict[str, Any]] + ), + unsafe_metadata=utils.unmarshal( + unsafe_metadata, Optional[Dict[str, Any]] + ), ), ) diff --git a/src/clerk_backend_api/utils/eventstreaming.py b/src/clerk_backend_api/utils/eventstreaming.py index 3bdcd6d3..1c189bf6 100644 --- a/src/clerk_backend_api/utils/eventstreaming.py +++ b/src/clerk_backend_api/utils/eventstreaming.py @@ -53,6 +53,9 @@ def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): + self.close() + + def close(self): self._closed = True self.response.close() @@ -92,6 +95,9 @@ async def __aenter__(self): return self async def __aexit__(self, exc_type, exc_val, exc_tb): + await self.close() + + async def close(self): self._closed = True await self.response.aclose() @@ -124,52 +130,54 @@ async def stream_events_async( sentinel: Optional[str] = None, data_required: bool = True, ) -> AsyncGenerator[T, None]: - buffer = bytearray() - position = 0 - event_id: Optional[str] = None - async for chunk in response.aiter_bytes(): - if len(buffer) == 0 and chunk.startswith(UTF8_BOM): - chunk = chunk[len(UTF8_BOM) :] - buffer += chunk - for i in range(position, len(buffer)): - char = buffer[i : i + 1] - seq: Optional[bytes] = None - if char in [b"\r", b"\n"]: - for boundary in MESSAGE_BOUNDARIES: - seq = _peek_sequence(i, buffer, boundary) - if seq is not None: - break - if seq is None: - continue - - block = buffer[position:i] - position = i + len(seq) - event, discard, event_id = _parse_event( - raw=block, - decoder=decoder, - sentinel=sentinel, - event_id=event_id, - data_required=data_required, - ) - if event is not None: - yield event - if discard: - await response.aclose() - return - - if position > 0: - buffer = buffer[position:] - position = 0 - - event, discard, _ = _parse_event( - raw=buffer, - decoder=decoder, - sentinel=sentinel, - event_id=event_id, - data_required=data_required, - ) - if event is not None: - yield event + try: + buffer = bytearray() + position = 0 + event_id: Optional[str] = None + async for chunk in response.aiter_bytes(): + if len(buffer) == 0 and chunk.startswith(UTF8_BOM): + chunk = chunk[len(UTF8_BOM) :] + buffer += chunk + for i in range(position, len(buffer)): + char = buffer[i : i + 1] + seq: Optional[bytes] = None + if char in [b"\r", b"\n"]: + for boundary in MESSAGE_BOUNDARIES: + seq = _peek_sequence(i, buffer, boundary) + if seq is not None: + break + if seq is None: + continue + + block = buffer[position:i] + position = i + len(seq) + event, discard, event_id = _parse_event( + raw=block, + decoder=decoder, + sentinel=sentinel, + event_id=event_id, + data_required=data_required, + ) + if event is not None: + yield event + if discard: + return + + if position > 0: + buffer = buffer[position:] + position = 0 + + event, discard, _ = _parse_event( + raw=buffer, + decoder=decoder, + sentinel=sentinel, + event_id=event_id, + data_required=data_required, + ) + if event is not None: + yield event + finally: + await response.aclose() def stream_events( @@ -178,52 +186,54 @@ def stream_events( sentinel: Optional[str] = None, data_required: bool = True, ) -> Generator[T, None, None]: - buffer = bytearray() - position = 0 - event_id: Optional[str] = None - for chunk in response.iter_bytes(): - if len(buffer) == 0 and chunk.startswith(UTF8_BOM): - chunk = chunk[len(UTF8_BOM) :] - buffer += chunk - for i in range(position, len(buffer)): - char = buffer[i : i + 1] - seq: Optional[bytes] = None - if char in [b"\r", b"\n"]: - for boundary in MESSAGE_BOUNDARIES: - seq = _peek_sequence(i, buffer, boundary) - if seq is not None: - break - if seq is None: - continue - - block = buffer[position:i] - position = i + len(seq) - event, discard, event_id = _parse_event( - raw=block, - decoder=decoder, - sentinel=sentinel, - event_id=event_id, - data_required=data_required, - ) - if event is not None: - yield event - if discard: - response.close() - return - - if position > 0: - buffer = buffer[position:] - position = 0 - - event, discard, _ = _parse_event( - raw=buffer, - decoder=decoder, - sentinel=sentinel, - event_id=event_id, - data_required=data_required, - ) - if event is not None: - yield event + try: + buffer = bytearray() + position = 0 + event_id: Optional[str] = None + for chunk in response.iter_bytes(): + if len(buffer) == 0 and chunk.startswith(UTF8_BOM): + chunk = chunk[len(UTF8_BOM) :] + buffer += chunk + for i in range(position, len(buffer)): + char = buffer[i : i + 1] + seq: Optional[bytes] = None + if char in [b"\r", b"\n"]: + for boundary in MESSAGE_BOUNDARIES: + seq = _peek_sequence(i, buffer, boundary) + if seq is not None: + break + if seq is None: + continue + + block = buffer[position:i] + position = i + len(seq) + event, discard, event_id = _parse_event( + raw=block, + decoder=decoder, + sentinel=sentinel, + event_id=event_id, + data_required=data_required, + ) + if event is not None: + yield event + if discard: + return + + if position > 0: + buffer = buffer[position:] + position = 0 + + event, discard, _ = _parse_event( + raw=buffer, + decoder=decoder, + sentinel=sentinel, + event_id=event_id, + data_required=data_required, + ) + if event is not None: + yield event + finally: + response.close() def _parse_event( diff --git a/src/clerk_backend_api/utils/requestbodies.py b/src/clerk_backend_api/utils/requestbodies.py index 1de32b6d..591415af 100644 --- a/src/clerk_backend_api/utils/requestbodies.py +++ b/src/clerk_backend_api/utils/requestbodies.py @@ -46,6 +46,7 @@ def serialize_request_body( if re.match(r"^(application|text)\/([^+]+\+)*json.*", media_type) is not None: serialized_request_body.content = marshal_json(request_body, request_body_type) + elif re.match(r"^multipart\/.*", media_type) is not None: ( serialized_request_body.media_type, diff --git a/src/clerk_backend_api/utils/serializers.py b/src/clerk_backend_api/utils/serializers.py index d2149f8b..1031ed93 100644 --- a/src/clerk_backend_api/utils/serializers.py +++ b/src/clerk_backend_api/utils/serializers.py @@ -4,7 +4,7 @@ import functools import json import typing -from typing import Any, Dict, List, Tuple, Union, get_args +from typing import Any, Dict, Iterable, List, Mapping, Tuple, Union, get_args import typing_extensions from typing_extensions import get_origin @@ -113,10 +113,12 @@ def validate(c): def unmarshal_json(raw, typ: Any) -> Any: - return unmarshal(from_json(raw), typ) + return unmarshal(from_json(raw), typ, coerce_iterables=False) -def unmarshal(val, typ: Any) -> Any: +def unmarshal(val, typ: Any, coerce_iterables: bool = True) -> Any: + if coerce_iterables: + val = _coerce_iterables_for_type(val, typ) unmarshaller = create_model( "Unmarshaller", body=(typ, ...), @@ -193,9 +195,88 @@ def get_pydantic_model(data: Any, typ: Any) -> Any: if not _contains_pydantic_model(data): return unmarshal(data, typ) + return _coerce_iterables_for_type(data, typ) + + +def _coerce_iterables_for_type(data: Any, typ: Any) -> Any: + if data is None or isinstance(data, (BaseModel, Unset)): + return data + + typ = _resolve_type_alias(typ) + origin = get_origin(typ) + + if _is_annotated_type(origin): + args = get_args(typ) + return _coerce_iterables_for_type(data, args[0]) if args else data + + if is_union(origin): + for arg in (arg for arg in get_args(typ) if arg is not type(None)): + coerced = _coerce_iterables_for_type(data, arg) + if coerced is not data: + return coerced + return data + + if _is_list_type(typ): + item_type = get_args(typ)[0] if get_args(typ) else Any + if isinstance(data, (str, bytes, bytearray, Mapping)): + return data + if isinstance(data, Iterable): + return [_coerce_iterables_for_type(item, item_type) for item in data] + return data + + if _is_mapping_type(typ): + value_type = get_args(typ)[1] if len(get_args(typ)) > 1 else Any + if isinstance(data, Mapping): + return { + key: _coerce_iterables_for_type(value, value_type) + for key, value in data.items() + } + return data + + if _is_pydantic_model_type(typ) and isinstance(data, Mapping): + coerced = None + for field_name, field in typ.model_fields.items(): + field_type = field.annotation + for key in (field_name, field.alias): + if key is not None and key in data: + value = data[key] if coerced is None else coerced[key] + coerced_value = _coerce_iterables_for_type(value, field_type) + if coerced_value is not value: + if coerced is None: + coerced = dict(data) + coerced[key] = coerced_value + return coerced if coerced is not None else data + return data +def _resolve_type_alias(typ: Any) -> Any: + return getattr(typ, "__value__", typ) + + +def _is_annotated_type(origin: Any) -> bool: + return any( + origin is typing_obj + for typing_obj in _get_typing_objects_by_name_of("Annotated") + ) + + +def _is_list_type(typ: Any) -> bool: + typ = _resolve_type_alias(typ) + return typ is list or get_origin(typ) is list + + +def _is_mapping_type(typ: Any) -> bool: + typ = _resolve_type_alias(typ) + origin = get_origin(typ) + mapping_origin = get_origin(Mapping[Any, Any]) + return typ in (dict, Dict, Mapping) or origin in (dict, Mapping, mapping_origin) + + +def _is_pydantic_model_type(typ: Any) -> bool: + return isinstance(typ, type) and issubclass(typ, BaseModel) + + def _contains_pydantic_model(data: Any) -> bool: if isinstance(data, BaseModel): return True diff --git a/src/clerk_backend_api/waitlistentries_sdk.py b/src/clerk_backend_api/waitlistentries_sdk.py index e5b8f4c2..b8863e6b 100644 --- a/src/clerk_backend_api/waitlistentries_sdk.py +++ b/src/clerk_backend_api/waitlistentries_sdk.py @@ -5,7 +5,7 @@ from clerk_backend_api._hooks import HookContext from clerk_backend_api.types import BaseModel, OptionalNullable, UNSET from clerk_backend_api.utils.unmarshal_json_response import unmarshal_json_response -from typing import Any, List, Mapping, Optional, Union, cast +from typing import Any, Iterable, List, Mapping, Optional, Union, cast class WaitlistEntriesSDK(BaseSDK): @@ -440,8 +440,8 @@ def bulk_create( *, request: Optional[ Union[ - List[models.CreateBulkWaitlistEntriesRequestBody], - List[models.CreateBulkWaitlistEntriesRequestBodyTypedDict], + Iterable[models.CreateBulkWaitlistEntriesRequestBody], + Iterable[models.CreateBulkWaitlistEntriesRequestBodyTypedDict], ] ] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET, @@ -553,8 +553,8 @@ async def bulk_create_async( *, request: Optional[ Union[ - List[models.CreateBulkWaitlistEntriesRequestBody], - List[models.CreateBulkWaitlistEntriesRequestBodyTypedDict], + Iterable[models.CreateBulkWaitlistEntriesRequestBody], + Iterable[models.CreateBulkWaitlistEntriesRequestBodyTypedDict], ] ] = None, retries: OptionalNullable[utils.RetryConfig] = UNSET,