From 8e4b7b6b11d14cc0f16876e0edc1d2efd29b4356 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Wed, 15 Apr 2026 00:33:21 +0000 Subject: [PATCH 1/2] ## Python SDK Changes Detected: * `polar.organizations.create()`: * `request` **Changed** **Breaking** :warning: * `response` **Changed** **Breaking** :warning: * `polar.organizations.update()`: * `request.organization_update` **Changed** **Breaking** :warning: * `response` **Changed** **Breaking** :warning: * `polar.organizations.get()`: `response` **Changed** **Breaking** :warning: * `polar._endpointorganization_updated_post()`: * `request.data` **Changed** **Breaking** :warning: * `polar.organizations.list()`: `response.items.[]` **Changed** **Breaking** :warning: * `polar.members.update_member_by_external_id()`: `request` **Changed** * `polar.customer_portal.orders.list()`: `response.items.[].product.organization.customer_portal_settings.customer` **Added** * `polar.customer_portal.customers.check_email_update()`: **Added** * `polar.members.get_member_by_external_id()`: `request` **Changed** * `polar.members.delete_member_by_external_id()`: `request` **Changed** * `polar.customer_portal.customers.request_email_update()`: **Added** * `polar.customer_portal.seats.list_claimed_subscriptions()`: `response.items.[].product.organization.customer_portal_settings.customer` **Added** * `polar.customer_portal.customers.verify_email_update()`: **Added** * `polar.customer_portal.orders.get()`: `response.product.organization.customer_portal_settings.customer` **Added** * `polar.customer_portal.orders.update()`: `response.product.organization.customer_portal_settings.customer` **Added** * `polar.customer_portal.organizations.get()`: `response.organization.customer_portal_settings.customer` **Added** * `polar.customer_portal.subscriptions.list()`: `response.items.[].product.organization.customer_portal_settings.customer` **Added** * `polar.customer_portal.subscriptions.get()`: `response.product.organization.customer_portal_settings.customer` **Added** * `polar.customer_portal.subscriptions.cancel()`: `response.product.organization.customer_portal_settings.customer` **Added** * `polar.customer_portal.subscriptions.update()`: `response.product.organization.customer_portal_settings.customer` **Added** --- .speakeasy/gen.lock | 112 +++- .speakeasy/gen.yaml | 2 +- .speakeasy/workflow.lock | 12 +- README.md | 43 +- RELEASES.md | 12 +- codeSamples.yaml | 20 +- docs/models/customeremailupdaterequest.md | 8 + .../customeremailupdateverifyrequest.md | 8 + .../customeremailupdateverifyresponse.md | 8 + ...rportalcustomerscheckemailupdaterequest.md | 8 + docs/models/customerportalcustomersettings.md | 8 + ...rtalcustomersrequestemailupdatesecurity.md | 9 + .../membersdeletememberbyexternalidrequest.md | 8 +- .../membersgetmemberbyexternalidrequest.md | 8 +- .../membersupdatememberbyexternalidrequest.md | 2 + .../organizationcustomerportalsettings.md | 9 +- docs/models/organizationfeaturesettings.md | 1 - docs/models/organizationstatus.md | 2 + docs/sdks/members/README.md | 12 +- docs/sdks/polarcustomers/README.md | 121 +++- pyproject.toml | 2 +- src/polar_sdk/_version.py | 4 +- src/polar_sdk/members.py | 48 +- src/polar_sdk/models/__init__.py | 48 ++ ...r_portal_customers_check_email_updateop.py | 16 + ...portal_customers_request_email_updateop.py | 38 ++ .../models/customeremailupdaterequest.py | 13 + .../customeremailupdateverifyrequest.py | 13 + .../customeremailupdateverifyresponse.py | 13 + .../models/customerportalcustomersettings.py | 13 + .../members_delete_member_by_external_idop.py | 53 +- .../members_get_member_by_external_idop.py | 53 +- .../members_update_member_by_external_idop.py | 58 +- .../organizationcustomerportalsettings.py | 10 +- .../models/organizationfeaturesettings.py | 6 - src/polar_sdk/models/organizationstatus.py | 2 + src/polar_sdk/polar_customers.py | 548 ++++++++++++++++++ 37 files changed, 1256 insertions(+), 95 deletions(-) create mode 100644 docs/models/customeremailupdaterequest.md create mode 100644 docs/models/customeremailupdateverifyrequest.md create mode 100644 docs/models/customeremailupdateverifyresponse.md create mode 100644 docs/models/customerportalcustomerscheckemailupdaterequest.md create mode 100644 docs/models/customerportalcustomersettings.md create mode 100644 docs/models/customerportalcustomersrequestemailupdatesecurity.md create mode 100644 src/polar_sdk/models/customer_portal_customers_check_email_updateop.py create mode 100644 src/polar_sdk/models/customer_portal_customers_request_email_updateop.py create mode 100644 src/polar_sdk/models/customeremailupdaterequest.py create mode 100644 src/polar_sdk/models/customeremailupdateverifyrequest.py create mode 100644 src/polar_sdk/models/customeremailupdateverifyresponse.py create mode 100644 src/polar_sdk/models/customerportalcustomersettings.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index 36709841..ce034665 100644 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,12 +1,12 @@ lockVersion: 2.0.0 id: e7042734-e669-4c36-85da-bbb4a7500ac8 management: - docChecksum: da4cdf87c50025e494b6a104c9d2868e + docChecksum: c3e28d3f7fa54443a8fdd289268df947 docVersion: 0.1.0 speakeasyVersion: 1.648.0 generationVersion: 2.737.0 - releaseVersion: 0.31.3 - configChecksum: d2a48f7ae77cbd19d1f3440fd2d87a06 + releaseVersion: 0.31.4 + configChecksum: ec856ac07327b342be114bcf4015df7f repoURL: https://github.com/polarsource/polar-python.git installationURL: https://github.com/polarsource/polar-python.git published: true @@ -330,6 +330,9 @@ generatedFiles: - docs/models/customerdeletedevent.md - docs/models/customerdeletedmetadata.md - docs/models/customeremailfilter.md + - docs/models/customeremailupdaterequest.md + - docs/models/customeremailupdateverifyrequest.md + - docs/models/customeremailupdateverifyresponse.md - docs/models/customeridfilter.md - docs/models/customerindividual.md - docs/models/customerindividualcreate.md @@ -381,15 +384,18 @@ generatedFiles: - docs/models/customerportalcustomermeterslistresponse.md - docs/models/customerportalcustomermeterslistsecurity.md - docs/models/customerportalcustomersaddpaymentmethodsecurity.md + - docs/models/customerportalcustomerscheckemailupdaterequest.md - docs/models/customerportalcustomersconfirmpaymentmethodsecurity.md - docs/models/customerportalcustomersdeletepaymentmethodrequest.md - docs/models/customerportalcustomersdeletepaymentmethodsecurity.md - docs/models/customerportalcustomersessiongetauthenticatedusersecurity.md - docs/models/customerportalcustomersessionintrospectsecurity.md + - docs/models/customerportalcustomersettings.md - docs/models/customerportalcustomersgetsecurity.md - docs/models/customerportalcustomerslistpaymentmethodsrequest.md - docs/models/customerportalcustomerslistpaymentmethodsresponse.md - docs/models/customerportalcustomerslistpaymentmethodssecurity.md + - docs/models/customerportalcustomersrequestemailupdatesecurity.md - docs/models/customerportalcustomersupdatesecurity.md - docs/models/customerportalcustomertaxid.md - docs/models/customerportalcustomerupdate.md @@ -1450,10 +1456,12 @@ generatedFiles: - src/polar_sdk/models/customer_portal_customer_session_get_authenticated_userop.py - src/polar_sdk/models/customer_portal_customer_session_introspectop.py - src/polar_sdk/models/customer_portal_customers_add_payment_methodop.py + - src/polar_sdk/models/customer_portal_customers_check_email_updateop.py - src/polar_sdk/models/customer_portal_customers_confirm_payment_methodop.py - src/polar_sdk/models/customer_portal_customers_delete_payment_methodop.py - src/polar_sdk/models/customer_portal_customers_getop.py - src/polar_sdk/models/customer_portal_customers_list_payment_methodsop.py + - src/polar_sdk/models/customer_portal_customers_request_email_updateop.py - src/polar_sdk/models/customer_portal_customers_updateop.py - src/polar_sdk/models/customer_portal_downloadables_listop.py - src/polar_sdk/models/customer_portal_license_keys_getop.py @@ -1514,6 +1522,9 @@ generatedFiles: - src/polar_sdk/models/customercustomersession.py - src/polar_sdk/models/customerdeletedevent.py - src/polar_sdk/models/customerdeletedmetadata.py + - src/polar_sdk/models/customeremailupdaterequest.py + - src/polar_sdk/models/customeremailupdateverifyrequest.py + - src/polar_sdk/models/customeremailupdateverifyresponse.py - src/polar_sdk/models/customerindividual.py - src/polar_sdk/models/customerindividualcreate.py - src/polar_sdk/models/customermeter.py @@ -1538,6 +1549,7 @@ generatedFiles: - src/polar_sdk/models/customerpaymentmethodcreateresponse.py - src/polar_sdk/models/customerpaymentmethodcreatesucceededresponse.py - src/polar_sdk/models/customerportalcustomer.py + - src/polar_sdk/models/customerportalcustomersettings.py - src/polar_sdk/models/customerportalcustomerupdate.py - src/polar_sdk/models/customerportalmember.py - src/polar_sdk/models/customerportalmembercreate.py @@ -2260,7 +2272,7 @@ examples: _endpointorganization_updated_post: speakeasy-default-endpointorganization-updated-post: requestBody: - application/json: {"type": "organization.updated", "timestamp": "2025-08-19T15:02:44.139Z", "data": {"created_at": "2025-08-19T15:02:44.139Z", "modified_at": "2025-08-23T00:45:50.780Z", "id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737", "name": "", "slug": "", "avatar_url": null, "proration_behavior": "prorate", "allow_customer_updates": false, "email": "Lemuel44@gmail.com", "website": "", "socials": [{"platform": "tiktok", "url": "https://grizzled-patroller.info/"}, {"platform": "tiktok", "url": "https://grizzled-patroller.info/"}], "status": "active", "details_submitted_at": null, "default_presentment_currency": "", "default_tax_behavior": "exclusive", "feature_settings": {"issue_funding_enabled": false, "seat_based_pricing_enabled": false, "revops_enabled": false, "wallets_enabled": false, "member_model_enabled": false, "tinybird_read": false, "tinybird_compare": false, "checkout_localization_enabled": false, "reset_proration_behavior_enabled": false}, "subscription_settings": {"allow_multiple_subscriptions": true, "proration_behavior": "invoice", "benefit_revocation_grace_period": 877397, "prevent_trial_abuse": false, "allow_customer_updates": false}, "notification_settings": {"new_order": false, "new_subscription": false}, "customer_email_settings": {"order_confirmation": false, "subscription_cancellation": false, "subscription_confirmation": false, "subscription_cycled": true, "subscription_cycled_after_trial": false, "subscription_past_due": true, "subscription_renewal_reminder": false, "subscription_revoked": true, "subscription_trial_conversion_reminder": false, "subscription_uncanceled": false, "subscription_updated": true}, "customer_portal_settings": {"usage": {"show": true}, "subscription": {"update_seats": true, "update_plan": true}}, "account_id": "", "payout_account_id": ""}} + application/json: {"type": "organization.updated", "timestamp": "2025-08-19T15:02:44.139Z", "data": {"created_at": "2025-08-19T15:02:44.139Z", "modified_at": "2025-08-23T00:45:50.780Z", "id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737", "name": "", "slug": "", "avatar_url": null, "proration_behavior": "prorate", "allow_customer_updates": false, "email": "Lemuel44@gmail.com", "website": "", "socials": [{"platform": "tiktok", "url": "https://grizzled-patroller.info/"}, {"platform": "tiktok", "url": "https://grizzled-patroller.info/"}], "status": "active", "details_submitted_at": null, "default_presentment_currency": "", "default_tax_behavior": "exclusive", "feature_settings": {"issue_funding_enabled": false, "seat_based_pricing_enabled": false, "wallets_enabled": false, "member_model_enabled": false, "tinybird_read": false, "tinybird_compare": false, "checkout_localization_enabled": false, "reset_proration_behavior_enabled": false}, "subscription_settings": {"allow_multiple_subscriptions": true, "proration_behavior": "invoice", "benefit_revocation_grace_period": 877397, "prevent_trial_abuse": false, "allow_customer_updates": false}, "notification_settings": {"new_order": false, "new_subscription": false}, "customer_email_settings": {"order_confirmation": false, "subscription_cancellation": false, "subscription_confirmation": false, "subscription_cycled": true, "subscription_cycled_after_trial": false, "subscription_past_due": true, "subscription_renewal_reminder": false, "subscription_revoked": true, "subscription_trial_conversion_reminder": false, "subscription_uncanceled": false, "subscription_updated": true}, "customer_portal_settings": {"usage": {"show": true}, "subscription": {"update_seats": true, "update_plan": true}}, "account_id": "", "payout_account_id": ""}} responses: "200": application/json: "" @@ -2337,7 +2349,7 @@ examples: application/json: {"name": "", "slug": ""} responses: "201": - application/json: {"created_at": "2024-12-19T02:20:41.368Z", "modified_at": "2024-07-08T16:38:56.712Z", "id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737", "name": "", "slug": "", "avatar_url": "https://menacing-draft.net", "proration_behavior": "prorate", "allow_customer_updates": false, "email": "Ursula99@yahoo.com", "website": "", "socials": [{"platform": "facebook", "url": "https://likable-commodity.biz/"}], "status": "denied", "details_submitted_at": "2024-04-04T18:10:47.254Z", "default_presentment_currency": "", "default_tax_behavior": "inclusive", "feature_settings": {"issue_funding_enabled": false, "seat_based_pricing_enabled": false, "revops_enabled": false, "wallets_enabled": false, "member_model_enabled": false, "tinybird_read": false, "tinybird_compare": false, "checkout_localization_enabled": false, "reset_proration_behavior_enabled": false}, "subscription_settings": {"allow_multiple_subscriptions": false, "proration_behavior": "prorate", "benefit_revocation_grace_period": 655199, "prevent_trial_abuse": false, "allow_customer_updates": true}, "notification_settings": {"new_order": false, "new_subscription": false}, "customer_email_settings": {"order_confirmation": false, "subscription_cancellation": false, "subscription_confirmation": false, "subscription_cycled": false, "subscription_cycled_after_trial": false, "subscription_past_due": false, "subscription_renewal_reminder": false, "subscription_revoked": false, "subscription_trial_conversion_reminder": false, "subscription_uncanceled": true, "subscription_updated": false}, "customer_portal_settings": {"usage": {"show": false}, "subscription": {"update_seats": false, "update_plan": false}}, "account_id": "", "payout_account_id": ""} + application/json: {"created_at": "2024-12-19T02:20:41.368Z", "modified_at": "2024-07-08T16:38:56.712Z", "id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737", "name": "", "slug": "", "avatar_url": "https://menacing-draft.net", "proration_behavior": "prorate", "allow_customer_updates": false, "email": "Ursula99@yahoo.com", "website": "", "socials": [{"platform": "facebook", "url": "https://likable-commodity.biz/"}], "status": "denied", "details_submitted_at": "2024-04-04T18:10:47.254Z", "default_presentment_currency": "", "default_tax_behavior": "inclusive", "feature_settings": {"issue_funding_enabled": false, "seat_based_pricing_enabled": false, "wallets_enabled": false, "member_model_enabled": false, "tinybird_read": false, "tinybird_compare": false, "checkout_localization_enabled": false, "reset_proration_behavior_enabled": false}, "subscription_settings": {"allow_multiple_subscriptions": false, "proration_behavior": "prorate", "benefit_revocation_grace_period": 655199, "prevent_trial_abuse": false, "allow_customer_updates": true}, "notification_settings": {"new_order": false, "new_subscription": false}, "customer_email_settings": {"order_confirmation": false, "subscription_cancellation": false, "subscription_confirmation": false, "subscription_cycled": false, "subscription_cycled_after_trial": false, "subscription_past_due": false, "subscription_renewal_reminder": false, "subscription_revoked": false, "subscription_trial_conversion_reminder": false, "subscription_uncanceled": true, "subscription_updated": false}, "customer_portal_settings": {"usage": {"show": false}, "subscription": {"update_seats": false, "update_plan": false}}, "account_id": "", "payout_account_id": ""} "422": application/json: {} organizations:get: @@ -2347,7 +2359,7 @@ examples: id: "1dbfc517-0bbf-4301-9ba8-555ca42b9737" responses: "200": - application/json: {"created_at": "2024-06-18T23:12:24.609Z", "modified_at": "2023-11-22T07:49:02.109Z", "id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737", "name": "", "slug": "", "avatar_url": "https://far-off-resource.com", "proration_behavior": "invoice", "allow_customer_updates": true, "email": "Dejon.Jakubowski-Bashirian6@gmail.com", "website": null, "socials": [{"platform": "other", "url": "https://tedious-habit.com"}, {"platform": "other", "url": "https://tedious-habit.com"}, {"platform": "other", "url": "https://tedious-habit.com"}], "status": "onboarding_started", "details_submitted_at": "2023-07-16T01:59:28.607Z", "default_presentment_currency": "", "default_tax_behavior": "inclusive", "feature_settings": {"issue_funding_enabled": false, "seat_based_pricing_enabled": false, "revops_enabled": false, "wallets_enabled": false, "member_model_enabled": false, "tinybird_read": false, "tinybird_compare": false, "checkout_localization_enabled": false, "reset_proration_behavior_enabled": false}, "subscription_settings": {"allow_multiple_subscriptions": true, "proration_behavior": "prorate", "benefit_revocation_grace_period": 488109, "prevent_trial_abuse": false, "allow_customer_updates": false}, "notification_settings": {"new_order": true, "new_subscription": true}, "customer_email_settings": {"order_confirmation": true, "subscription_cancellation": true, "subscription_confirmation": true, "subscription_cycled": false, "subscription_cycled_after_trial": true, "subscription_past_due": false, "subscription_renewal_reminder": true, "subscription_revoked": true, "subscription_trial_conversion_reminder": true, "subscription_uncanceled": false, "subscription_updated": true}, "customer_portal_settings": {"usage": {"show": false}, "subscription": {"update_seats": true, "update_plan": false}}, "account_id": "", "payout_account_id": ""} + application/json: {"created_at": "2024-06-18T23:12:24.609Z", "modified_at": "2023-11-22T07:49:02.109Z", "id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737", "name": "", "slug": "", "avatar_url": "https://far-off-resource.com", "proration_behavior": "invoice", "allow_customer_updates": true, "email": "Dejon.Jakubowski-Bashirian6@gmail.com", "website": null, "socials": [{"platform": "other", "url": "https://tedious-habit.com"}, {"platform": "other", "url": "https://tedious-habit.com"}, {"platform": "other", "url": "https://tedious-habit.com"}], "status": "onboarding_started", "details_submitted_at": "2023-07-16T01:59:28.607Z", "default_presentment_currency": "", "default_tax_behavior": "inclusive", "feature_settings": {"issue_funding_enabled": false, "seat_based_pricing_enabled": false, "wallets_enabled": false, "member_model_enabled": false, "tinybird_read": false, "tinybird_compare": false, "checkout_localization_enabled": false, "reset_proration_behavior_enabled": false}, "subscription_settings": {"allow_multiple_subscriptions": true, "proration_behavior": "prorate", "benefit_revocation_grace_period": 488109, "prevent_trial_abuse": false, "allow_customer_updates": false}, "notification_settings": {"new_order": true, "new_subscription": true}, "customer_email_settings": {"order_confirmation": true, "subscription_cancellation": true, "subscription_confirmation": true, "subscription_cycled": false, "subscription_cycled_after_trial": true, "subscription_past_due": false, "subscription_renewal_reminder": true, "subscription_revoked": true, "subscription_trial_conversion_reminder": true, "subscription_uncanceled": false, "subscription_updated": true}, "customer_portal_settings": {"usage": {"show": false}, "subscription": {"update_seats": true, "update_plan": false}}, "account_id": "", "payout_account_id": ""} "404": application/json: {"error": "ResourceNotFound", "detail": ""} "422": @@ -2361,7 +2373,7 @@ examples: application/json: {} responses: "200": - application/json: {"created_at": "2024-01-10T12:09:47.665Z", "modified_at": "2025-07-12T14:18:16.022Z", "id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737", "name": "", "slug": "", "avatar_url": "https://juvenile-deed.name/", "proration_behavior": "invoice", "allow_customer_updates": false, "email": "Stanford.Streich62@gmail.com", "website": "", "socials": [{"platform": "github", "url": "https://violent-ownership.org/"}], "status": "onboarding_started", "details_submitted_at": "2024-05-08T13:53:13.516Z", "default_presentment_currency": "", "default_tax_behavior": "inclusive", "feature_settings": {"issue_funding_enabled": false, "seat_based_pricing_enabled": false, "revops_enabled": false, "wallets_enabled": false, "member_model_enabled": false, "tinybird_read": false, "tinybird_compare": false, "checkout_localization_enabled": false, "reset_proration_behavior_enabled": false}, "subscription_settings": {"allow_multiple_subscriptions": false, "proration_behavior": "invoice", "benefit_revocation_grace_period": 341703, "prevent_trial_abuse": false, "allow_customer_updates": false}, "notification_settings": {"new_order": true, "new_subscription": false}, "customer_email_settings": {"order_confirmation": true, "subscription_cancellation": false, "subscription_confirmation": false, "subscription_cycled": false, "subscription_cycled_after_trial": true, "subscription_past_due": true, "subscription_renewal_reminder": false, "subscription_revoked": true, "subscription_trial_conversion_reminder": false, "subscription_uncanceled": true, "subscription_updated": false}, "customer_portal_settings": {"usage": {"show": false}, "subscription": {"update_seats": true, "update_plan": true}}, "account_id": "", "payout_account_id": ""} + application/json: {"created_at": "2024-01-10T12:09:47.665Z", "modified_at": "2025-07-12T14:18:16.022Z", "id": "1dbfc517-0bbf-4301-9ba8-555ca42b9737", "name": "", "slug": "", "avatar_url": "https://juvenile-deed.name/", "proration_behavior": "invoice", "allow_customer_updates": false, "email": "Stanford.Streich62@gmail.com", "website": "", "socials": [{"platform": "github", "url": "https://violent-ownership.org/"}], "status": "onboarding_started", "details_submitted_at": "2024-05-08T13:53:13.516Z", "default_presentment_currency": "", "default_tax_behavior": "inclusive", "feature_settings": {"issue_funding_enabled": false, "seat_based_pricing_enabled": false, "wallets_enabled": false, "member_model_enabled": false, "tinybird_read": false, "tinybird_compare": false, "checkout_localization_enabled": false, "reset_proration_behavior_enabled": false}, "subscription_settings": {"allow_multiple_subscriptions": false, "proration_behavior": "invoice", "benefit_revocation_grace_period": 341703, "prevent_trial_abuse": false, "allow_customer_updates": false}, "notification_settings": {"new_order": true, "new_subscription": false}, "customer_email_settings": {"order_confirmation": true, "subscription_cancellation": false, "subscription_confirmation": false, "subscription_cycled": false, "subscription_cycled_after_trial": true, "subscription_past_due": true, "subscription_renewal_reminder": false, "subscription_revoked": true, "subscription_trial_conversion_reminder": false, "subscription_uncanceled": true, "subscription_updated": false}, "customer_portal_settings": {"usage": {"show": false}, "subscription": {"update_seats": true, "update_plan": true}}, "account_id": "", "payout_account_id": ""} "403": application/json: {"error": "NotPermitted", "detail": ""} "404": @@ -4583,9 +4595,33 @@ examples: application/json: {"error": "ResourceNotFound", "detail": ""} "422": application/json: {} + customer_portal:customers:request_email_update: + speakeasy-default-customer-portal:customers:request-email-update: + requestBody: + application/json: {"email": "Tommie_Larkin78@gmail.com"} + responses: + "202": + application/json: "" + "422": + application/json: {} + customer_portal:customers:check_email_update: + speakeasy-default-customer-portal:customers:check-email-update: + parameters: + query: + token: "" + responses: + "422": + application/json: {} + customer_portal:customers:verify_email_update: + speakeasy-default-customer-portal:customers:verify-email-update: + requestBody: + application/json: {"token": ""} + responses: + "200": + application/json: {"token": ""} examplesVersion: 1.0.2 generatedTests: {} -releaseNotes: "## Python SDK Changes Detected:\n* `polar._endpointcheckout_created_post()`: \n * `request.data.products.[].prices.[].[product_price].[seat_based].meter` **Changed** **Breaking** :warning:\n* `polar._endpointcheckout_updated_post()`: \n * `request.data.products.[].prices.[].[product_price].[seat_based].meter` **Changed** **Breaking** :warning:\n* `polar._endpointcheckout_expired_post()`: \n * `request.data.products.[].prices.[].[product_price].[seat_based].meter` **Changed** **Breaking** :warning:\n* `polar._endpointsubscription_created_post()`: \n * `request.data` **Changed** **Breaking** :warning:\n* `polar._endpointsubscription_updated_post()`: \n * `request.data` **Changed** **Breaking** :warning:\n* `polar._endpointsubscription_active_post()`: \n * `request.data` **Changed** **Breaking** :warning:\n* `polar._endpointsubscription_canceled_post()`: \n * `request.data` **Changed** **Breaking** :warning:\n* `polar._endpointsubscription_uncanceled_post()`: \n * `request.data` **Changed** **Breaking** :warning:\n* `polar._endpointsubscription_revoked_post()`: \n * `request.data` **Changed** **Breaking** :warning:\n* `polar._endpointsubscription_past_due_post()`: \n * `request.data` **Changed** **Breaking** :warning:\n* `polar._endpointproduct_created_post()`: \n * `request.data.prices.[].[product_price].[seat_based].meter` **Changed** **Breaking** :warning:\n* `polar._endpointproduct_updated_post()`: \n * `request.data.prices.[].[product_price].[seat_based].meter` **Changed** **Breaking** :warning:\n* `polar._endpointorganization_updated_post()`: \n * `request.data` **Changed** **Breaking** :warning:\n* `polar.metrics.export()`: **Added**\n* `polar.members.get_member_by_external_id()`: **Added**\n* `polar.members.update_member_by_external_id()`: **Added**\n* `polar.members.delete_member_by_external_id()`: **Added**\n* `polar.organizations.list()`: `response.items.[]` **Changed**\n* `polar.organizations.create()`: `response` **Changed**\n* `polar.organizations.get()`: `response` **Changed**\n* `polar.organizations.update()`: `response` **Changed**\n* `polar.subscriptions.list()`: `response.items.[]` **Changed**\n* `polar.subscriptions.create()`: `response` **Changed**\n* `polar.subscriptions.get()`: `response` **Changed**\n* `polar.subscriptions.revoke()`: `response` **Changed**\n* `polar.subscriptions.update()`: `response` **Changed**\n* `polar.products.list()`: `response.items.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.products.create()`: `response.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.products.get()`: `response.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.products.update()`: `response.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.products.update_benefits()`: `response.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.orders.list()`: `request.subscription_id` **Added**\n* `polar.checkouts.list()`: `response.items.[].products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkouts.create()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkouts.get()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkouts.update()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkouts.client_get()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkouts.client_update()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkouts.client_confirm()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkout-links.list()`: `response.items.[].products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkout-links.create()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkout-links.get()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.checkout-links.update()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.customer_portal.seats.list_claimed_subscriptions()`: `response.items.[].product.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.customer_portal.orders.list()`: `response.items.[].product.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.customer_portal.orders.get()`: `response.product.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.customer_portal.orders.update()`: `response.product.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.customer_portal.orders.confirm_retry_payment()`: `error.status[429]` **Added**\n* `polar.customer_portal.organizations.get()`: `response.products.[].prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.customer_portal.subscriptions.list()`: `response.items.[].product.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.customer_portal.subscriptions.get()`: `response.product.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.customer_portal.subscriptions.cancel()`: `response.product.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.customer_portal.subscriptions.update()`: `response.product.prices.[].[product_price].[seat_based].meter` **Changed**\n* `polar.meters.list()`: `response.items.[]` **Changed**\n* `polar.meters.create()`: \n * `request` **Changed**\n * `response` **Changed**\n* `polar.meters.get()`: `response` **Changed**\n* `polar.meters.update()`: \n * `request.meter_update` **Changed**\n * `response` **Changed**\n* `polar.customer_meters.list()`: `response.items.[].meter` **Changed**\n* `polar.customer_meters.get()`: `response.meter` **Changed**\n" +releaseNotes: "## Python SDK Changes Detected:\n* `polar.organizations.create()`: \n * `request` **Changed** **Breaking** :warning:\n * `response` **Changed** **Breaking** :warning:\n* `polar.organizations.update()`: \n * `request.organization_update` **Changed** **Breaking** :warning:\n * `response` **Changed** **Breaking** :warning:\n* `polar.organizations.get()`: `response` **Changed** **Breaking** :warning:\n* `polar._endpointorganization_updated_post()`: \n * `request.data` **Changed** **Breaking** :warning:\n* `polar.organizations.list()`: `response.items.[]` **Changed** **Breaking** :warning:\n* `polar.members.update_member_by_external_id()`: `request` **Changed**\n* `polar.customer_portal.orders.list()`: `response.items.[].product.organization.customer_portal_settings.customer` **Added**\n* `polar.customer_portal.customers.check_email_update()`: **Added**\n* `polar.members.get_member_by_external_id()`: `request` **Changed**\n* `polar.members.delete_member_by_external_id()`: `request` **Changed**\n* `polar.customer_portal.customers.request_email_update()`: **Added**\n* `polar.customer_portal.seats.list_claimed_subscriptions()`: `response.items.[].product.organization.customer_portal_settings.customer` **Added**\n* `polar.customer_portal.customers.verify_email_update()`: **Added**\n* `polar.customer_portal.orders.get()`: `response.product.organization.customer_portal_settings.customer` **Added**\n* `polar.customer_portal.orders.update()`: `response.product.organization.customer_portal_settings.customer` **Added**\n* `polar.customer_portal.organizations.get()`: `response.organization.customer_portal_settings.customer` **Added**\n* `polar.customer_portal.subscriptions.list()`: `response.items.[].product.organization.customer_portal_settings.customer` **Added**\n* `polar.customer_portal.subscriptions.get()`: `response.product.organization.customer_portal_settings.customer` **Added**\n* `polar.customer_portal.subscriptions.cancel()`: `response.product.organization.customer_portal_settings.customer` **Added**\n* `polar.customer_portal.subscriptions.update()`: `response.product.organization.customer_portal_settings.customer` **Added**\n" trackedFiles: .devcontainer/README.md: last_write_checksum: sha1:e2a191a1fa8ceb27387eb32eabf36f7ad16a532c @@ -5163,6 +5199,12 @@ trackedFiles: last_write_checksum: sha1:3a4ae59253f481bf444b4032b87993efa47808a6 docs/models/customeremailfilter.md: last_write_checksum: sha1:fde0f2840678a9f141cce80b969fed5047cd1f92 + docs/models/customeremailupdaterequest.md: + last_write_checksum: sha1:1c613550ae2eab2dd452224c3516056f8c78b3b2 + docs/models/customeremailupdateverifyrequest.md: + last_write_checksum: sha1:0e9e301556888830337ac8d691faa3ba3944c072 + docs/models/customeremailupdateverifyresponse.md: + last_write_checksum: sha1:fe361f24aa3ab39139349b78d28a3b82fae0c25c docs/models/customeridfilter.md: last_write_checksum: sha1:9e9ff05b6e673fadfd6d483a95b64c9d43878d42 docs/models/customerindividual.md: @@ -5265,6 +5307,8 @@ trackedFiles: last_write_checksum: sha1:7de4c10cff8df995a621dab42b7b4878f28aebfc docs/models/customerportalcustomersaddpaymentmethodsecurity.md: last_write_checksum: sha1:9498ab6ddcb0f75f963b7822941dcd2e15694383 + docs/models/customerportalcustomerscheckemailupdaterequest.md: + last_write_checksum: sha1:9fd19e728532626b735ca0bffe33c3ac33bbf544 docs/models/customerportalcustomersconfirmpaymentmethodsecurity.md: last_write_checksum: sha1:0ab0215dc006aa274bdb273f7ebf24a4f9ac438f docs/models/customerportalcustomersdeletepaymentmethodrequest.md: @@ -5275,6 +5319,8 @@ trackedFiles: last_write_checksum: sha1:c1305fdc08d311a85b1567810307a3b7341d90c1 docs/models/customerportalcustomersessionintrospectsecurity.md: last_write_checksum: sha1:306b25a668367ac6020689f51241f04e34d39b9e + docs/models/customerportalcustomersettings.md: + last_write_checksum: sha1:0ad37b15673277168ffd04d18ec4150472bbe143 docs/models/customerportalcustomersgetsecurity.md: last_write_checksum: sha1:12505081df031728d7f35908871cdcf523a51aa3 docs/models/customerportalcustomerslistpaymentmethodsrequest.md: @@ -5283,6 +5329,8 @@ trackedFiles: last_write_checksum: sha1:bc3308360a4b235c4fb76eb43d7001e7c182156a docs/models/customerportalcustomerslistpaymentmethodssecurity.md: last_write_checksum: sha1:b9ceef49e2502352ebd91666ad60b96a67f212fc + docs/models/customerportalcustomersrequestemailupdatesecurity.md: + last_write_checksum: sha1:ee63627577733901a7c4a1b4899372b305fa0fed docs/models/customerportalcustomersupdatesecurity.md: last_write_checksum: sha1:c04d3efe2f299cc87afdb2c746a729d455c9f961 docs/models/customerportalcustomertaxid.md: @@ -5990,11 +6038,11 @@ trackedFiles: docs/models/memberrole.md: last_write_checksum: sha1:06170100a3109672deaf18d3715a2bf1ee7673fe docs/models/membersdeletememberbyexternalidrequest.md: - last_write_checksum: sha1:657190358fba009dae481dc1eb0507f70550d921 + last_write_checksum: sha1:b5cc9fb3a3d13c5ae931f228c9217fb8833c5487 docs/models/membersdeletememberrequest.md: last_write_checksum: sha1:46b13e5cd11cc99b094561f5ac763b77e4b79072 docs/models/membersgetmemberbyexternalidrequest.md: - last_write_checksum: sha1:d41a113b2c4f81435bae87db1225800dcec40637 + last_write_checksum: sha1:7888f9d86eb8b6e96bbc47d5138f737c10e21ebc docs/models/membersgetmemberrequest.md: last_write_checksum: sha1:dec2743653b66b14d36c7cf27b2642466043ef02 docs/models/memberslistmembersrequest.md: @@ -6004,7 +6052,7 @@ trackedFiles: docs/models/membersortproperty.md: last_write_checksum: sha1:39a69c23343bf61a98136128ad048bbe5bcd0a40 docs/models/membersupdatememberbyexternalidrequest.md: - last_write_checksum: sha1:62a970eeb2c24aa4f30acabff6b7c8bddd08cbc9 + last_write_checksum: sha1:bfd17abcfc60046731fd33cb271dc66df4374748 docs/models/membersupdatememberrequest.md: last_write_checksum: sha1:cce637d553b5a8e5771d409bae5001138a8ae426 docs/models/memberupdate.md: @@ -6366,11 +6414,11 @@ trackedFiles: docs/models/organizationcustomeremailsettings.md: last_write_checksum: sha1:6ab0e3789dee237e5708572bd838991ed496825d docs/models/organizationcustomerportalsettings.md: - last_write_checksum: sha1:cee25f8da572e08579b7914973fdee2490b20f1d + last_write_checksum: sha1:71c63bccb751385a1cf3148351d9601a8202c44c docs/models/organizationdetails.md: last_write_checksum: sha1:59784eef0c4fcb65f8c7006ffd0c3df8a7cfba0b docs/models/organizationfeaturesettings.md: - last_write_checksum: sha1:4e034d6db21082a21a202706af91d56e9d2191d7 + last_write_checksum: sha1:8120afe4e4b3c7aa40e622a7b1a996ac9d106ac5 docs/models/organizationid.md: last_write_checksum: sha1:5adf4fb1a723f361ac66da12542fedbe34fd9e5d docs/models/organizationidfilter.md: @@ -6392,7 +6440,7 @@ trackedFiles: docs/models/organizationsortproperty.md: last_write_checksum: sha1:f67a71777c3d7aeb738655f7c7142e44fcdc656f docs/models/organizationstatus.md: - last_write_checksum: sha1:45a10d25d7f6eab4d0307259aaeed8e3b2eb9ec9 + last_write_checksum: sha1:3edeb3c2393cb055c6f27b87bd225bf0d84566f9 docs/models/organizationsubscriptionsettings.md: last_write_checksum: sha1:a49bfc2dec2b99a0c37ec944d6dfcd339847e054 docs/models/organizationsupdaterequest.md: @@ -6950,7 +6998,7 @@ trackedFiles: docs/sdks/licensekeys/README.md: last_write_checksum: sha1:df9ec3e5784b8655379d3f0cceb52ea60dd72243 docs/sdks/members/README.md: - last_write_checksum: sha1:f800e86dd5786491edc5c7ae4bb2ec92ad315625 + last_write_checksum: sha1:efb819c9e01bfcf32311eebc75c2483a4fdeef5a docs/sdks/meters/README.md: last_write_checksum: sha1:780e81712d38d5a5bfbb6f72832b23a8bbed9bd9 docs/sdks/metricssdk/README.md: @@ -6970,7 +7018,7 @@ trackedFiles: docs/sdks/polarcustomermeters/README.md: last_write_checksum: sha1:3afd1422131745f9eeaf55cb8a28e386d3684d83 docs/sdks/polarcustomers/README.md: - last_write_checksum: sha1:4acf64f3dd8e5288ec8d864e3e14fe42c9f54ae2 + last_write_checksum: sha1:beef732c191b592284cf3511a7b31e05ac6f08a8 docs/sdks/polarlicensekeys/README.md: last_write_checksum: sha1:01f6ad4f58453a9ef561beee742f8aebf20f42d8 docs/sdks/polarmembers/README.md: @@ -7014,7 +7062,7 @@ trackedFiles: src/polar_sdk/_hooks/types.py: last_write_checksum: sha1:a218c66f3e2d1f1b9af54f270472b970b0cc1913 src/polar_sdk/_version.py: - last_write_checksum: sha1:34447deefb19eeaae307da04e2be1cc22a95d8c4 + last_write_checksum: sha1:c4929437d3ca58aa7a9b10f1ab3a2e9b1af099c7 src/polar_sdk/basesdk.py: last_write_checksum: sha1:a913b5a583f9f34a14f2872dc6f8c453e4aca1f5 src/polar_sdk/benefit_grants.py: @@ -7058,13 +7106,13 @@ trackedFiles: src/polar_sdk/license_keys.py: last_write_checksum: sha1:01c7801ac11df3d5be4395be672029a2badad56c src/polar_sdk/members.py: - last_write_checksum: sha1:088e6086eea8e7c6dc76589f1a22a4dad0da4558 + last_write_checksum: sha1:2f9129c22a3000e4d55e7dce41fe2df7594ff98f src/polar_sdk/meters.py: last_write_checksum: sha1:30e1968d86ff6c37245c60790531af517fd1338b src/polar_sdk/metrics_sdk.py: last_write_checksum: sha1:887899fbc002a7e5679de78aa4e0411a40c2b749 src/polar_sdk/models/__init__.py: - last_write_checksum: sha1:78b23c5465c0fae1cb7c7027838709de7beccbd4 + last_write_checksum: sha1:600e13f4d8fbcf665a7216ab6b210cc0fb2698ce src/polar_sdk/models/address.py: last_write_checksum: sha1:083edb7f045174ac1aea30545e9981c33f07d57d src/polar_sdk/models/addressdict.py: @@ -7403,6 +7451,8 @@ trackedFiles: last_write_checksum: sha1:532d183138580c549f4d5b97b56fd3cbfe6df9d3 src/polar_sdk/models/customer_portal_customers_add_payment_methodop.py: last_write_checksum: sha1:39224ec214b7aa62ad93292c8f9cb18756416f29 + src/polar_sdk/models/customer_portal_customers_check_email_updateop.py: + last_write_checksum: sha1:7b1fafa6ae3d0da75ca244718e873f693394dd9b src/polar_sdk/models/customer_portal_customers_confirm_payment_methodop.py: last_write_checksum: sha1:a91681b5b66e4f8cfd485d14d66f1f59f5a8fd17 src/polar_sdk/models/customer_portal_customers_delete_payment_methodop.py: @@ -7411,6 +7461,8 @@ trackedFiles: last_write_checksum: sha1:2c97cb765a5ac763d39c54a2e393d1ecd8a3d49a src/polar_sdk/models/customer_portal_customers_list_payment_methodsop.py: last_write_checksum: sha1:2ceae5f8c2655f1889765ab1f16dab47a9f1d643 + src/polar_sdk/models/customer_portal_customers_request_email_updateop.py: + last_write_checksum: sha1:95f3fd77fcd7057ac650d0102cb32eabc60f4560 src/polar_sdk/models/customer_portal_customers_updateop.py: last_write_checksum: sha1:5b930c2c62f63c3fe4138868eea35bd9c04ab959 src/polar_sdk/models/customer_portal_downloadables_listop.py: @@ -7531,6 +7583,12 @@ trackedFiles: last_write_checksum: sha1:6e19d98ea00b0b47f116526a175600d3c502d2f8 src/polar_sdk/models/customerdeletedmetadata.py: last_write_checksum: sha1:de7a794ec3358ee0376a073f46edf14249f0b136 + src/polar_sdk/models/customeremailupdaterequest.py: + last_write_checksum: sha1:76e645bfc6fd0ae7b5f0231031c70bd368dc47df + src/polar_sdk/models/customeremailupdateverifyrequest.py: + last_write_checksum: sha1:64222161ddeaa8878ec076be7e04bc7193b1679b + src/polar_sdk/models/customeremailupdateverifyresponse.py: + last_write_checksum: sha1:35348f86c0237ec5da0f80df98cc1933f7b9d38b src/polar_sdk/models/customerindividual.py: last_write_checksum: sha1:b0104402c28776b339788dd53f7743eeced57500 src/polar_sdk/models/customerindividualcreate.py: @@ -7579,6 +7637,8 @@ trackedFiles: last_write_checksum: sha1:434015438b0b7617025824e801b081c2602daac1 src/polar_sdk/models/customerportalcustomer.py: last_write_checksum: sha1:4484b729dd8135a699969fcd0269e39976ff5b79 + src/polar_sdk/models/customerportalcustomersettings.py: + last_write_checksum: sha1:9376b3cfb972bb4b255e1c6f99b119ecf70933ee src/polar_sdk/models/customerportalcustomerupdate.py: last_write_checksum: sha1:2dc3f34acf3904c81d1935e1cd1bc7863156b5d3 src/polar_sdk/models/customerportalmember.py: @@ -7986,17 +8046,17 @@ trackedFiles: src/polar_sdk/models/memberrole.py: last_write_checksum: sha1:065f7730427b55768fd76b2f12dba48129a6b4d2 src/polar_sdk/models/members_delete_member_by_external_idop.py: - last_write_checksum: sha1:601467f32c1d55ffa5cc18c8a26b9c318f42aed9 + last_write_checksum: sha1:187f948b68b30379b01d73ed38bf1adf2e7bd11d src/polar_sdk/models/members_delete_memberop.py: last_write_checksum: sha1:c4e4960b5c344133404816a71a210c646f464345 src/polar_sdk/models/members_get_member_by_external_idop.py: - last_write_checksum: sha1:869443ca99d40941f1e97e1e6675b6ec3304aa2e + last_write_checksum: sha1:68e95d64c8c83b028b51024f12362753764d654c src/polar_sdk/models/members_get_memberop.py: last_write_checksum: sha1:7a1b33eef42ad23eaf2b5f524e4baf616c0f44ae src/polar_sdk/models/members_list_membersop.py: last_write_checksum: sha1:1f7e158072976dd865365fff56f5316824bf9223 src/polar_sdk/models/members_update_member_by_external_idop.py: - last_write_checksum: sha1:e85d40da4a0bac3bf06fb948a2d91123da417f1c + last_write_checksum: sha1:48de97fd91f8b2075dc03c53dbabd98d644e1ad5 src/polar_sdk/models/members_update_memberop.py: last_write_checksum: sha1:7ebe88b82aedebef4167705d14f5e8a51873d0d5 src/polar_sdk/models/membersortproperty.py: @@ -8168,11 +8228,11 @@ trackedFiles: src/polar_sdk/models/organizationcustomeremailsettings.py: last_write_checksum: sha1:22d037fa5aa65cc2b5171d0da1588cd145a1bd16 src/polar_sdk/models/organizationcustomerportalsettings.py: - last_write_checksum: sha1:4ba81b296790974393900cbc2aadf99f8c901fc8 + last_write_checksum: sha1:e9b96af1be131404181251d05b394902b64b8eb5 src/polar_sdk/models/organizationdetails.py: last_write_checksum: sha1:74233062d4ab6a42a6799705ac3cfd820ba3244c src/polar_sdk/models/organizationfeaturesettings.py: - last_write_checksum: sha1:17d64913a7e39e1d05a09ec1b74e6c5a22064895 + last_write_checksum: sha1:85fc718ea713810ef845fa3b450583605a0f76d4 src/polar_sdk/models/organizationindividuallegalentityschema.py: last_write_checksum: sha1:33b021299f8a9ef86b315e3030acf6e34ccedeb4 src/polar_sdk/models/organizationnotificationsettings.py: @@ -8190,7 +8250,7 @@ trackedFiles: src/polar_sdk/models/organizationsortproperty.py: last_write_checksum: sha1:66e31e5bb02cf397e53af46fee2505eb38f5bd95 src/polar_sdk/models/organizationstatus.py: - last_write_checksum: sha1:712074c0e82da9964a337629d101aea9e4737e47 + last_write_checksum: sha1:39ab49a3c3e1e8c1b14b35e65d41d7474536931e src/polar_sdk/models/organizationsubscriptionsettings.py: last_write_checksum: sha1:d451061a8d774e1e3d68b078f506b80a059e42e7 src/polar_sdk/models/organizationupdate.py: @@ -8588,7 +8648,7 @@ trackedFiles: src/polar_sdk/polar_customer_meters.py: last_write_checksum: sha1:f1519288984187281fc37a285175c581cf8cae72 src/polar_sdk/polar_customers.py: - last_write_checksum: sha1:0a375f85f51e5a2f9bb70fedf435b87dcf2f798a + last_write_checksum: sha1:f3b1f4ce62492391d16a12a9b630bfc1d304400d src/polar_sdk/polar_license_keys.py: last_write_checksum: sha1:20767e85f3c712cd635879de229d01e3bc044660 src/polar_sdk/polar_members.py: diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index 92e00b9d..c374ce6a 100644 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -31,7 +31,7 @@ generation: persistentEdits: {} versioningStrategy: automatic python: - version: 0.31.3 + version: 0.31.4 additionalDependencies: dev: pydantic-ai-slim: ^0.1.0 diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index e0197ba8..651e3bff 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -2,20 +2,20 @@ speakeasyVersion: 1.648.0 sources: Polar-OAS: sourceNamespace: polar-oas - sourceRevisionDigest: sha256:c88bf8b61c5f3402aaaeeaddd5a6af29008ebf87c4ba877dbea9d2d92789aeb8 - sourceBlobDigest: sha256:41cfb03d9b8af58f7956111f7303b50c1e98878164fe4b90a63775af9a19ad7f + sourceRevisionDigest: sha256:e5821b05cf36ea5786ab549a1428ed187c3a84873a363ffe8e9a506f6cb6450b + sourceBlobDigest: sha256:e72c068ac320590942e987b57075798879d277dcf0b61f7932f3ffcd63951c71 tags: - latest - - speakeasy-sdk-regen-1775811956 + - speakeasy-sdk-regen-1776212983 - 0.1.0 targets: polar: source: Polar-OAS sourceNamespace: polar-oas - sourceRevisionDigest: sha256:c88bf8b61c5f3402aaaeeaddd5a6af29008ebf87c4ba877dbea9d2d92789aeb8 - sourceBlobDigest: sha256:41cfb03d9b8af58f7956111f7303b50c1e98878164fe4b90a63775af9a19ad7f + sourceRevisionDigest: sha256:e5821b05cf36ea5786ab549a1428ed187c3a84873a363ffe8e9a506f6cb6450b + sourceBlobDigest: sha256:e72c068ac320590942e987b57075798879d277dcf0b61f7932f3ffcd63951c71 codeSamplesNamespace: polar-oas-py-code-samples - codeSamplesRevisionDigest: sha256:892853abaf8b28ad0852c8514c70882b9321b0a7420773896fff01991d1e4eaa + codeSamplesRevisionDigest: sha256:873751f955e573b508d89e5fb00431536ac123b9fbef4ad9f226452bf46bdb23 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/README.md b/README.md index dbf02877..1ad35711 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,9 @@ def webhook(): * [add_payment_method](docs/sdks/polarcustomers/README.md#add_payment_method) - Add Customer Payment Method * [confirm_payment_method](docs/sdks/polarcustomers/README.md#confirm_payment_method) - Confirm Customer Payment Method * [delete_payment_method](docs/sdks/polarcustomers/README.md#delete_payment_method) - Delete Customer Payment Method +* [request_email_update](docs/sdks/polarcustomers/README.md#request_email_update) - Request Email Change +* [check_email_update](docs/sdks/polarcustomers/README.md#check_email_update) - Check Email Change Token +* [verify_email_update](docs/sdks/polarcustomers/README.md#verify_email_update) - Verify Email Change #### [customer_portal.downloadables](docs/sdks/downloadables/README.md) @@ -596,26 +599,26 @@ with Polar( **Inherit from [`PolarError`](./src/polar_sdk/models/polarerror.py)**: -* [`ResourceNotFound`](./src/polar_sdk/models/resourcenotfound.py): Status code `404`. Applicable to 85 of 178 methods.* -* [`NotPermitted`](./src/polar_sdk/models/notpermitted.py): Status code `403`. Applicable to 10 of 178 methods.* -* [`Unauthorized`](./src/polar_sdk/models/unauthorized.py): Not authorized to manage license key. Status code `401`. Applicable to 5 of 178 methods.* -* [`AlreadyCanceledSubscription`](./src/polar_sdk/models/alreadycanceledsubscription.py): Status code `403`. Applicable to 4 of 178 methods.* -* [`AlreadyActiveSubscriptionError`](./src/polar_sdk/models/alreadyactivesubscriptionerror.py): The checkout is expired, the customer already has an active subscription, or the organization is not ready to accept payments. Status code `403`. Applicable to 3 of 178 methods.* -* [`NotOpenCheckout`](./src/polar_sdk/models/notopencheckout.py): The checkout is expired, the customer already has an active subscription, or the organization is not ready to accept payments. Status code `403`. Applicable to 3 of 178 methods.* -* [`PaymentNotReady`](./src/polar_sdk/models/paymentnotready.py): The checkout is expired, the customer already has an active subscription, or the organization is not ready to accept payments. Status code `403`. Applicable to 3 of 178 methods.* -* [`TrialAlreadyRedeemed`](./src/polar_sdk/models/trialalreadyredeemed.py): The checkout is expired, the customer already has an active subscription, or the organization is not ready to accept payments. Status code `403`. Applicable to 3 of 178 methods.* -* [`ExpiredCheckoutError`](./src/polar_sdk/models/expiredcheckouterror.py): The checkout session is expired. Status code `410`. Applicable to 3 of 178 methods.* -* [`PaymentFailed`](./src/polar_sdk/models/paymentfailed.py): Payment required to apply the subscription update. Status code `402`. Applicable to 2 of 178 methods.* -* [`SubscriptionLocked`](./src/polar_sdk/models/subscriptionlocked.py): Subscription is pending an update. Status code `409`. Applicable to 2 of 178 methods.* -* [`MissingInvoiceBillingDetails`](./src/polar_sdk/models/missinginvoicebillingdetails.py): Order is not paid or is missing billing name or address. Status code `422`. Applicable to 2 of 178 methods.* -* [`NotPaidOrder`](./src/polar_sdk/models/notpaidorder.py): Order is not paid or is missing billing name or address. Status code `422`. Applicable to 2 of 178 methods.* -* [`PaymentError`](./src/polar_sdk/models/paymenterror.py): The payment failed. Status code `400`. Applicable to 1 of 178 methods.* -* [`CustomerNotReady`](./src/polar_sdk/models/customernotready.py): Customer is not ready to confirm a payment method. Status code `400`. Applicable to 1 of 178 methods.* -* [`PaymentMethodInUseByActiveSubscription`](./src/polar_sdk/models/paymentmethodinusebyactivesubscription.py): Payment method is used by active subscription(s). Status code `400`. Applicable to 1 of 178 methods.* -* [`RefundedAlready`](./src/polar_sdk/models/refundedalready.py): Order is already fully refunded. Status code `403`. Applicable to 1 of 178 methods.* -* [`PaymentAlreadyInProgress`](./src/polar_sdk/models/paymentalreadyinprogress.py): Payment already in progress. Status code `409`. Applicable to 1 of 178 methods.* -* [`OrderNotEligibleForRetry`](./src/polar_sdk/models/ordernoteligibleforretry.py): Order not eligible for retry or payment confirmation failed. Status code `422`. Applicable to 1 of 178 methods.* -* [`ManualRetryLimitExceeded`](./src/polar_sdk/models/manualretrylimitexceeded.py): Manual retry limit exceeded. Status code `429`. Applicable to 1 of 178 methods.* +* [`ResourceNotFound`](./src/polar_sdk/models/resourcenotfound.py): Status code `404`. Applicable to 85 of 181 methods.* +* [`NotPermitted`](./src/polar_sdk/models/notpermitted.py): Status code `403`. Applicable to 10 of 181 methods.* +* [`Unauthorized`](./src/polar_sdk/models/unauthorized.py): Not authorized to manage license key. Status code `401`. Applicable to 5 of 181 methods.* +* [`AlreadyCanceledSubscription`](./src/polar_sdk/models/alreadycanceledsubscription.py): Status code `403`. Applicable to 4 of 181 methods.* +* [`AlreadyActiveSubscriptionError`](./src/polar_sdk/models/alreadyactivesubscriptionerror.py): The checkout is expired, the customer already has an active subscription, or the organization is not ready to accept payments. Status code `403`. Applicable to 3 of 181 methods.* +* [`NotOpenCheckout`](./src/polar_sdk/models/notopencheckout.py): The checkout is expired, the customer already has an active subscription, or the organization is not ready to accept payments. Status code `403`. Applicable to 3 of 181 methods.* +* [`PaymentNotReady`](./src/polar_sdk/models/paymentnotready.py): The checkout is expired, the customer already has an active subscription, or the organization is not ready to accept payments. Status code `403`. Applicable to 3 of 181 methods.* +* [`TrialAlreadyRedeemed`](./src/polar_sdk/models/trialalreadyredeemed.py): The checkout is expired, the customer already has an active subscription, or the organization is not ready to accept payments. Status code `403`. Applicable to 3 of 181 methods.* +* [`ExpiredCheckoutError`](./src/polar_sdk/models/expiredcheckouterror.py): The checkout session is expired. Status code `410`. Applicable to 3 of 181 methods.* +* [`PaymentFailed`](./src/polar_sdk/models/paymentfailed.py): Payment required to apply the subscription update. Status code `402`. Applicable to 2 of 181 methods.* +* [`SubscriptionLocked`](./src/polar_sdk/models/subscriptionlocked.py): Subscription is pending an update. Status code `409`. Applicable to 2 of 181 methods.* +* [`MissingInvoiceBillingDetails`](./src/polar_sdk/models/missinginvoicebillingdetails.py): Order is not paid or is missing billing name or address. Status code `422`. Applicable to 2 of 181 methods.* +* [`NotPaidOrder`](./src/polar_sdk/models/notpaidorder.py): Order is not paid or is missing billing name or address. Status code `422`. Applicable to 2 of 181 methods.* +* [`PaymentError`](./src/polar_sdk/models/paymenterror.py): The payment failed. Status code `400`. Applicable to 1 of 181 methods.* +* [`CustomerNotReady`](./src/polar_sdk/models/customernotready.py): Customer is not ready to confirm a payment method. Status code `400`. Applicable to 1 of 181 methods.* +* [`PaymentMethodInUseByActiveSubscription`](./src/polar_sdk/models/paymentmethodinusebyactivesubscription.py): Payment method is used by active subscription(s). Status code `400`. Applicable to 1 of 181 methods.* +* [`RefundedAlready`](./src/polar_sdk/models/refundedalready.py): Order is already fully refunded. Status code `403`. Applicable to 1 of 181 methods.* +* [`PaymentAlreadyInProgress`](./src/polar_sdk/models/paymentalreadyinprogress.py): Payment already in progress. Status code `409`. Applicable to 1 of 181 methods.* +* [`OrderNotEligibleForRetry`](./src/polar_sdk/models/ordernoteligibleforretry.py): Order not eligible for retry or payment confirmation failed. Status code `422`. Applicable to 1 of 181 methods.* +* [`ManualRetryLimitExceeded`](./src/polar_sdk/models/manualretrylimitexceeded.py): Manual retry limit exceeded. Status code `429`. Applicable to 1 of 181 methods.* * [`ResponseValidationError`](./src/polar_sdk/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. diff --git a/RELEASES.md b/RELEASES.md index 41a6a387..68463c46 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1103,4 +1103,14 @@ Based on: ### Generated - [python v0.31.3] . ### Releases -- [PyPI v0.31.3] https://pypi.org/project/polar-sdk/0.31.3 - . \ No newline at end of file +- [PyPI v0.31.3] https://pypi.org/project/polar-sdk/0.31.3 - . + +## 2026-04-15 00:29:21 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.648.0 (2.737.0) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.31.4] . +### Releases +- [PyPI v0.31.4] https://pypi.org/project/polar-sdk/0.31.4 - . \ No newline at end of file diff --git a/codeSamples.yaml b/codeSamples.yaml index 8e299518..ee7acca7 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -201,6 +201,24 @@ actions: - "lang": "python" "label": "Python (SDK)" "source": "import polar_sdk\nfrom polar_sdk import Polar\n\n\nwith Polar() as polar:\n\n res = polar.customer_portal.customers.update(security=polar_sdk.CustomerPortalCustomersUpdateSecurity(\n customer_session=\"\",\n ), request={\n \"billing_address\": {\n \"country\": polar_sdk.AddressInputCountryAlpha2Input.US,\n },\n })\n\n # Handle response\n print(res)" + - target: $["paths"]["/v1/customer-portal/customers/me/email-update/check"]["get"] + update: + "x-codeSamples": + - "lang": "python" + "label": "Python (SDK)" + "source": "from polar_sdk import Polar\n\n\nwith Polar() as polar:\n\n polar.customer_portal.customers.check_email_update(token=\"\")\n\n # Use the SDK ..." + - target: $["paths"]["/v1/customer-portal/customers/me/email-update/request"]["post"] + update: + "x-codeSamples": + - "lang": "python" + "label": "Python (SDK)" + "source": "import polar_sdk\nfrom polar_sdk import Polar\n\n\nwith Polar() as polar:\n\n res = polar.customer_portal.customers.request_email_update(security=polar_sdk.CustomerPortalCustomersRequestEmailUpdateSecurity(\n customer_session=\"\",\n ), request={\n \"email\": \"Tommie_Larkin78@gmail.com\",\n })\n\n # Handle response\n print(res)" + - target: $["paths"]["/v1/customer-portal/customers/me/email-update/verify"]["post"] + update: + "x-codeSamples": + - "lang": "python" + "label": "Python (SDK)" + "source": "from polar_sdk import Polar\n\n\nwith Polar() as polar:\n\n res = polar.customer_portal.customers.verify_email_update(request={\n \"token\": \"\",\n })\n\n # Handle response\n print(res)" - target: $["paths"]["/v1/customer-portal/customers/me/payment-methods"]["get"] update: "x-codeSamples": @@ -1214,7 +1232,7 @@ actions: "x-codeSamples": - "lang": "python" "label": "Python (SDK)" - "source": "import polar_sdk\nfrom polar_sdk import Polar\nfrom polar_sdk.utils import parse_datetime\n\n\nwith Polar() as polar:\n\n res = polar.endpointorganization_updated_post(request={\n \"type\": \"organization.updated\",\n \"timestamp\": parse_datetime(\"2026-08-19T15:02:44.139Z\"),\n \"data\": {\n \"created_at\": parse_datetime(\"2026-05-07T21:24:48.059Z\"),\n \"modified_at\": parse_datetime(\"2024-04-15T23:18:12.986Z\"),\n \"id\": \"\",\n \"name\": \"\",\n \"slug\": \"\",\n \"avatar_url\": \"https://pessimistic-going.name/\",\n \"proration_behavior\": polar_sdk.SubscriptionProrationBehavior.NEXT_PERIOD,\n \"allow_customer_updates\": True,\n \"email\": \"Marianne.Haag@yahoo.com\",\n \"website\": None,\n \"socials\": [],\n \"status\": polar_sdk.OrganizationStatus.ONGOING_REVIEW,\n \"details_submitted_at\": parse_datetime(\"2025-06-29T16:05:16.127Z\"),\n \"default_presentment_currency\": \"\",\n \"default_tax_behavior\": polar_sdk.TaxBehaviorOption.EXCLUSIVE,\n \"feature_settings\": {},\n \"subscription_settings\": {\n \"allow_multiple_subscriptions\": True,\n \"proration_behavior\": polar_sdk.ProrationBehavior.PRORATE,\n \"benefit_revocation_grace_period\": 778168,\n \"prevent_trial_abuse\": False,\n \"allow_customer_updates\": True,\n },\n \"notification_settings\": {\n \"new_order\": False,\n \"new_subscription\": True,\n },\n \"customer_email_settings\": {\n \"order_confirmation\": True,\n \"subscription_cancellation\": True,\n \"subscription_confirmation\": False,\n \"subscription_cycled\": True,\n \"subscription_cycled_after_trial\": False,\n \"subscription_past_due\": False,\n \"subscription_renewal_reminder\": True,\n \"subscription_revoked\": True,\n \"subscription_trial_conversion_reminder\": True,\n \"subscription_uncanceled\": False,\n \"subscription_updated\": True,\n },\n \"customer_portal_settings\": {\n \"usage\": {\n \"show\": False,\n },\n \"subscription\": {\n \"update_seats\": False,\n \"update_plan\": False,\n },\n },\n \"account_id\": \"\",\n \"payout_account_id\": \"\",\n },\n })\n\n # Handle response\n print(res)" + "source": "import polar_sdk\nfrom polar_sdk import Polar\nfrom polar_sdk.utils import parse_datetime\n\n\nwith Polar() as polar:\n\n res = polar.endpointorganization_updated_post(request={\n \"type\": \"organization.updated\",\n \"timestamp\": parse_datetime(\"2026-08-19T15:02:44.139Z\"),\n \"data\": {\n \"created_at\": parse_datetime(\"2026-05-07T21:24:48.059Z\"),\n \"modified_at\": parse_datetime(\"2024-04-15T23:18:12.986Z\"),\n \"id\": \"\",\n \"name\": \"\",\n \"slug\": \"\",\n \"avatar_url\": \"https://pessimistic-going.name/\",\n \"proration_behavior\": polar_sdk.SubscriptionProrationBehavior.NEXT_PERIOD,\n \"allow_customer_updates\": True,\n \"email\": \"Marianne.Haag@yahoo.com\",\n \"website\": None,\n \"socials\": [],\n \"status\": polar_sdk.OrganizationStatus.REVIEW,\n \"details_submitted_at\": parse_datetime(\"2025-06-29T16:05:16.127Z\"),\n \"default_presentment_currency\": \"\",\n \"default_tax_behavior\": polar_sdk.TaxBehaviorOption.EXCLUSIVE,\n \"feature_settings\": {},\n \"subscription_settings\": {\n \"allow_multiple_subscriptions\": True,\n \"proration_behavior\": polar_sdk.ProrationBehavior.PRORATE,\n \"benefit_revocation_grace_period\": 778168,\n \"prevent_trial_abuse\": False,\n \"allow_customer_updates\": True,\n },\n \"notification_settings\": {\n \"new_order\": False,\n \"new_subscription\": True,\n },\n \"customer_email_settings\": {\n \"order_confirmation\": True,\n \"subscription_cancellation\": True,\n \"subscription_confirmation\": False,\n \"subscription_cycled\": True,\n \"subscription_cycled_after_trial\": False,\n \"subscription_past_due\": False,\n \"subscription_renewal_reminder\": True,\n \"subscription_revoked\": True,\n \"subscription_trial_conversion_reminder\": True,\n \"subscription_uncanceled\": False,\n \"subscription_updated\": True,\n },\n \"customer_portal_settings\": {\n \"usage\": {\n \"show\": False,\n },\n \"subscription\": {\n \"update_seats\": False,\n \"update_plan\": False,\n },\n },\n \"account_id\": \"\",\n \"payout_account_id\": \"\",\n },\n })\n\n # Handle response\n print(res)" - target: $["paths"]["product.created"]["post"] update: "x-codeSamples": diff --git a/docs/models/customeremailupdaterequest.md b/docs/models/customeremailupdaterequest.md new file mode 100644 index 00000000..c05d3833 --- /dev/null +++ b/docs/models/customeremailupdaterequest.md @@ -0,0 +1,8 @@ +# CustomerEmailUpdateRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `email` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/customeremailupdateverifyrequest.md b/docs/models/customeremailupdateverifyrequest.md new file mode 100644 index 00000000..ddf85b00 --- /dev/null +++ b/docs/models/customeremailupdateverifyrequest.md @@ -0,0 +1,8 @@ +# CustomerEmailUpdateVerifyRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `token` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/customeremailupdateverifyresponse.md b/docs/models/customeremailupdateverifyresponse.md new file mode 100644 index 00000000..19f5e272 --- /dev/null +++ b/docs/models/customeremailupdateverifyresponse.md @@ -0,0 +1,8 @@ +# CustomerEmailUpdateVerifyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `token` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/customerportalcustomerscheckemailupdaterequest.md b/docs/models/customerportalcustomerscheckemailupdaterequest.md new file mode 100644 index 00000000..8599f099 --- /dev/null +++ b/docs/models/customerportalcustomerscheckemailupdaterequest.md @@ -0,0 +1,8 @@ +# CustomerPortalCustomersCheckEmailUpdateRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `token` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/customerportalcustomersettings.md b/docs/models/customerportalcustomersettings.md new file mode 100644 index 00000000..25773c2f --- /dev/null +++ b/docs/models/customerportalcustomersettings.md @@ -0,0 +1,8 @@ +# CustomerPortalCustomerSettings + + +## Fields + +| Field | Type | Required | Description | +| -------------------- | -------------------- | -------------------- | -------------------- | +| `allow_email_change` | *bool* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/customerportalcustomersrequestemailupdatesecurity.md b/docs/models/customerportalcustomersrequestemailupdatesecurity.md new file mode 100644 index 00000000..b386dcb3 --- /dev/null +++ b/docs/models/customerportalcustomersrequestemailupdatesecurity.md @@ -0,0 +1,9 @@ +# CustomerPortalCustomersRequestEmailUpdateSecurity + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `customer_session` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `member_session` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/membersdeletememberbyexternalidrequest.md b/docs/models/membersdeletememberbyexternalidrequest.md index 4bb261fe..6b546f3d 100644 --- a/docs/models/membersdeletememberbyexternalidrequest.md +++ b/docs/models/membersdeletememberbyexternalidrequest.md @@ -3,6 +3,8 @@ ## Fields -| Field | Type | Required | Description | -| ----------------------- | ----------------------- | ----------------------- | ----------------------- | -| `external_id` | *str* | :heavy_check_mark: | The member external ID. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------- | ------------------------- | ------------------------- | ------------------------- | +| `external_id` | *str* | :heavy_check_mark: | The member external ID. | +| `customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer ID. | +| `external_customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer external ID. | \ No newline at end of file diff --git a/docs/models/membersgetmemberbyexternalidrequest.md b/docs/models/membersgetmemberbyexternalidrequest.md index 0e95acd6..8ce70f4e 100644 --- a/docs/models/membersgetmemberbyexternalidrequest.md +++ b/docs/models/membersgetmemberbyexternalidrequest.md @@ -3,6 +3,8 @@ ## Fields -| Field | Type | Required | Description | -| ----------------------- | ----------------------- | ----------------------- | ----------------------- | -| `external_id` | *str* | :heavy_check_mark: | The member external ID. | \ No newline at end of file +| Field | Type | Required | Description | +| ------------------------- | ------------------------- | ------------------------- | ------------------------- | +| `external_id` | *str* | :heavy_check_mark: | The member external ID. | +| `customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer ID. | +| `external_customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer external ID. | \ No newline at end of file diff --git a/docs/models/membersupdatememberbyexternalidrequest.md b/docs/models/membersupdatememberbyexternalidrequest.md index 17b9a241..f71e434d 100644 --- a/docs/models/membersupdatememberbyexternalidrequest.md +++ b/docs/models/membersupdatememberbyexternalidrequest.md @@ -6,4 +6,6 @@ | Field | Type | Required | Description | | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | ------------------------------------------------ | | `external_id` | *str* | :heavy_check_mark: | The member external ID. | +| `customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer ID. | +| `external_customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer external ID. | | `member_update` | [models.MemberUpdate](../models/memberupdate.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/organizationcustomerportalsettings.md b/docs/models/organizationcustomerportalsettings.md index 8cb5faa1..f481868e 100644 --- a/docs/models/organizationcustomerportalsettings.md +++ b/docs/models/organizationcustomerportalsettings.md @@ -3,7 +3,8 @@ ## Fields -| Field | Type | Required | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `usage` | [models.CustomerPortalUsageSettings](../models/customerportalusagesettings.md) | :heavy_check_mark: | N/A | -| `subscription` | [models.CustomerPortalSubscriptionSettings](../models/customerportalsubscriptionsettings.md) | :heavy_check_mark: | N/A | \ No newline at end of file +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `usage` | [models.CustomerPortalUsageSettings](../models/customerportalusagesettings.md) | :heavy_check_mark: | N/A | +| `subscription` | [models.CustomerPortalSubscriptionSettings](../models/customerportalsubscriptionsettings.md) | :heavy_check_mark: | N/A | +| `customer` | [Optional[models.CustomerPortalCustomerSettings]](../models/customerportalcustomersettings.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/organizationfeaturesettings.md b/docs/models/organizationfeaturesettings.md index 24576fd3..10b8d357 100644 --- a/docs/models/organizationfeaturesettings.md +++ b/docs/models/organizationfeaturesettings.md @@ -7,7 +7,6 @@ | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | | `issue_funding_enabled` | *Optional[bool]* | :heavy_minus_sign: | If this organization has issue funding enabled | | `seat_based_pricing_enabled` | *Optional[bool]* | :heavy_minus_sign: | If this organization has seat-based pricing enabled | -| `revops_enabled` | *Optional[bool]* | :heavy_minus_sign: | If this organization has RevOps enabled | | `wallets_enabled` | *Optional[bool]* | :heavy_minus_sign: | If this organization has Wallets enabled | | `member_model_enabled` | *Optional[bool]* | :heavy_minus_sign: | If this organization has the Member model enabled | | `tinybird_read` | *Optional[bool]* | :heavy_minus_sign: | If this organization reads from Tinybird | diff --git a/docs/models/organizationstatus.md b/docs/models/organizationstatus.md index 1e86c4c7..c695cbc8 100644 --- a/docs/models/organizationstatus.md +++ b/docs/models/organizationstatus.md @@ -9,6 +9,8 @@ | `ONBOARDING_STARTED` | onboarding_started | | `INITIAL_REVIEW` | initial_review | | `ONGOING_REVIEW` | ongoing_review | +| `REVIEW` | review | +| `SNOOZED` | snoozed | | `DENIED` | denied | | `ACTIVE` | active | | `OFFBOARDING` | offboarding | \ No newline at end of file diff --git a/docs/sdks/members/README.md b/docs/sdks/members/README.md index 8972e44c..ec4d46a5 100644 --- a/docs/sdks/members/README.md +++ b/docs/sdks/members/README.md @@ -250,7 +250,7 @@ with Polar( ## get_member_by_external_id -Get a member by external ID. +Get a member by external ID. One of customer_id or external_customer_id must be specified. **Scopes**: `members:read` `members:write` @@ -277,6 +277,8 @@ with Polar( | Parameter | Type | Required | Description | | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | | `external_id` | *str* | :heavy_check_mark: | The member external ID. | +| `customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer ID. | +| `external_customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer external ID. | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -293,7 +295,7 @@ with Polar( ## update_member_by_external_id -Update a member by external ID. +Update a member by external ID. One of customer_id or external_customer_id must be specified. **Scopes**: `members:write` @@ -323,6 +325,8 @@ with Polar( | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | | `external_id` | *str* | :heavy_check_mark: | The member external ID. | | `member_update` | [models.MemberUpdate](../../models/memberupdate.md) | :heavy_check_mark: | N/A | +| `customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer ID. | +| `external_customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer external ID. | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response @@ -339,7 +343,7 @@ with Polar( ## delete_member_by_external_id -Delete a member by external ID. +Delete a member by external ID. One of customer_id or external_customer_id must be specified. **Scopes**: `members:write` @@ -365,6 +369,8 @@ with Polar( | Parameter | Type | Required | Description | | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | | `external_id` | *str* | :heavy_check_mark: | The member external ID. | +| `customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer ID. | +| `external_customer_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The customer external ID. | | `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Errors diff --git a/docs/sdks/polarcustomers/README.md b/docs/sdks/polarcustomers/README.md index 20e3b9dc..e5ac8c59 100644 --- a/docs/sdks/polarcustomers/README.md +++ b/docs/sdks/polarcustomers/README.md @@ -11,6 +11,9 @@ * [add_payment_method](#add_payment_method) - Add Customer Payment Method * [confirm_payment_method](#confirm_payment_method) - Confirm Customer Payment Method * [delete_payment_method](#delete_payment_method) - Delete Customer Payment Method +* [request_email_update](#request_email_update) - Request Email Change +* [check_email_update](#check_email_update) - Check Email Change Token +* [verify_email_update](#verify_email_update) - Verify Email Change ## get @@ -274,4 +277,120 @@ with Polar() as polar: | models.PaymentMethodInUseByActiveSubscription | 400 | application/json | | models.ResourceNotFound | 404 | application/json | | models.HTTPValidationError | 422 | application/json | -| models.SDKError | 4XX, 5XX | \*/\* | \ No newline at end of file +| models.SDKError | 4XX, 5XX | \*/\* | + +## request_email_update + +Request an email change for the authenticated customer. + +### Example Usage + + +```python +import polar_sdk +from polar_sdk import Polar + + +with Polar() as polar: + + res = polar.customer_portal.customers.request_email_update(security=polar_sdk.CustomerPortalCustomersRequestEmailUpdateSecurity( + customer_session="", + ), request={ + "email": "Tommie_Larkin78@gmail.com", + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `request` | [models.CustomerEmailUpdateRequest](../../models/customeremailupdaterequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `security` | [models.CustomerPortalCustomersRequestEmailUpdateSecurity](../../customerportalcustomersrequestemailupdatesecurity.md) | :heavy_check_mark: | The security requirements to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[Any](../../models/.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## check_email_update + +Check if an email change verification token is still valid. + +### Example Usage + + +```python +from polar_sdk import Polar + + +with Polar() as polar: + + polar.customer_portal.customers.check_email_update(token="") + + # Use the SDK ... + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `token` | *str* | :heavy_check_mark: | N/A | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Errors + +| Error Type | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| models.HTTPValidationError | 422 | application/json | +| models.SDKError | 4XX, 5XX | \*/\* | + +## verify_email_update + +Verify an email change using the token from the verification email. + +### Example Usage + + +```python +from polar_sdk import Polar + + +with Polar() as polar: + + res = polar.customer_portal.customers.verify_email_update(request={ + "token": "", + }) + + # Handle response + print(res) + +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| `request` | [models.CustomerEmailUpdateVerifyRequest](../../models/customeremailupdateverifyrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + +### Response + +**[models.CustomerEmailUpdateVerifyResponse](../../models/customeremailupdateverifyresponse.md)** + +### Errors + +| Error Type | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| models.SDKError | 4XX, 5XX | \*/\* | \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index ae741218..8b56dbd0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "polar-sdk" -version = "0.31.3" +version = "0.31.4" description = "Polar SDK for Python" authors = [{ name = "Polar" },] readme = "README-PYPI.md" diff --git a/src/polar_sdk/_version.py b/src/polar_sdk/_version.py index 774f1df5..7789ad5f 100644 --- a/src/polar_sdk/_version.py +++ b/src/polar_sdk/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "polar-sdk" -__version__: str = "0.31.3" +__version__: str = "0.31.4" __openapi_doc_version__: str = "0.1.0" __gen_version__: str = "2.737.0" -__user_agent__: str = "speakeasy-sdk/python 0.31.3 2.737.0 0.1.0 polar-sdk" +__user_agent__: str = "speakeasy-sdk/python 0.31.4 2.737.0 0.1.0 polar-sdk" try: if __package__ is not None: diff --git a/src/polar_sdk/members.py b/src/polar_sdk/members.py index e2f10487..bdcd681d 100644 --- a/src/polar_sdk/members.py +++ b/src/polar_sdk/members.py @@ -1074,6 +1074,8 @@ def get_member_by_external_id( self, *, external_id: str, + customer_id: OptionalNullable[str] = UNSET, + external_customer_id: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1081,11 +1083,13 @@ def get_member_by_external_id( ) -> models.Member: r"""Get Member by External ID - Get a member by external ID. + Get a member by external ID. One of customer_id or external_customer_id must be specified. **Scopes**: `members:read` `members:write` :param external_id: The member external ID. + :param customer_id: The customer ID. + :param external_customer_id: The customer external ID. :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 @@ -1103,6 +1107,8 @@ def get_member_by_external_id( request = models.MembersGetMemberByExternalIDRequest( external_id=external_id, + customer_id=customer_id, + external_customer_id=external_customer_id, ) req = self._build_request( @@ -1168,6 +1174,8 @@ async def get_member_by_external_id_async( self, *, external_id: str, + customer_id: OptionalNullable[str] = UNSET, + external_customer_id: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1175,11 +1183,13 @@ async def get_member_by_external_id_async( ) -> models.Member: r"""Get Member by External ID - Get a member by external ID. + Get a member by external ID. One of customer_id or external_customer_id must be specified. **Scopes**: `members:read` `members:write` :param external_id: The member external ID. + :param customer_id: The customer ID. + :param external_customer_id: The customer external ID. :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 @@ -1197,6 +1207,8 @@ async def get_member_by_external_id_async( request = models.MembersGetMemberByExternalIDRequest( external_id=external_id, + customer_id=customer_id, + external_customer_id=external_customer_id, ) req = self._build_request_async( @@ -1263,6 +1275,8 @@ def update_member_by_external_id( *, external_id: str, member_update: Union[models.MemberUpdate, models.MemberUpdateTypedDict], + customer_id: OptionalNullable[str] = UNSET, + external_customer_id: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1270,12 +1284,14 @@ def update_member_by_external_id( ) -> models.Member: r"""Update Member by External ID - Update a member by external ID. + Update a member by external ID. One of customer_id or external_customer_id must be specified. **Scopes**: `members:write` :param external_id: The member external ID. :param member_update: + :param customer_id: The customer ID. + :param external_customer_id: The customer external ID. :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 @@ -1293,6 +1309,8 @@ def update_member_by_external_id( request = models.MembersUpdateMemberByExternalIDRequest( external_id=external_id, + customer_id=customer_id, + external_customer_id=external_customer_id, member_update=utils.get_pydantic_model(member_update, models.MemberUpdate), ) @@ -1363,6 +1381,8 @@ async def update_member_by_external_id_async( *, external_id: str, member_update: Union[models.MemberUpdate, models.MemberUpdateTypedDict], + customer_id: OptionalNullable[str] = UNSET, + external_customer_id: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1370,12 +1390,14 @@ async def update_member_by_external_id_async( ) -> models.Member: r"""Update Member by External ID - Update a member by external ID. + Update a member by external ID. One of customer_id or external_customer_id must be specified. **Scopes**: `members:write` :param external_id: The member external ID. :param member_update: + :param customer_id: The customer ID. + :param external_customer_id: The customer external ID. :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 @@ -1393,6 +1415,8 @@ async def update_member_by_external_id_async( request = models.MembersUpdateMemberByExternalIDRequest( external_id=external_id, + customer_id=customer_id, + external_customer_id=external_customer_id, member_update=utils.get_pydantic_model(member_update, models.MemberUpdate), ) @@ -1462,6 +1486,8 @@ def delete_member_by_external_id( self, *, external_id: str, + customer_id: OptionalNullable[str] = UNSET, + external_customer_id: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1469,11 +1495,13 @@ def delete_member_by_external_id( ): r"""Delete Member by External ID - Delete a member by external ID. + Delete a member by external ID. One of customer_id or external_customer_id must be specified. **Scopes**: `members:write` :param external_id: The member external ID. + :param customer_id: The customer ID. + :param external_customer_id: The customer external ID. :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 @@ -1491,6 +1519,8 @@ def delete_member_by_external_id( request = models.MembersDeleteMemberByExternalIDRequest( external_id=external_id, + customer_id=customer_id, + external_customer_id=external_customer_id, ) req = self._build_request( @@ -1556,6 +1586,8 @@ async def delete_member_by_external_id_async( self, *, external_id: str, + customer_id: OptionalNullable[str] = UNSET, + external_customer_id: OptionalNullable[str] = UNSET, retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, @@ -1563,11 +1595,13 @@ async def delete_member_by_external_id_async( ): r"""Delete Member by External ID - Delete a member by external ID. + Delete a member by external ID. One of customer_id or external_customer_id must be specified. **Scopes**: `members:write` :param external_id: The member external ID. + :param customer_id: The customer ID. + :param external_customer_id: The customer external ID. :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 @@ -1585,6 +1619,8 @@ async def delete_member_by_external_id_async( request = models.MembersDeleteMemberByExternalIDRequest( external_id=external_id, + customer_id=customer_id, + external_customer_id=external_customer_id, ) req = self._build_request_async( diff --git a/src/polar_sdk/models/__init__.py b/src/polar_sdk/models/__init__.py index 668fe044..6ef81cd4 100644 --- a/src/polar_sdk/models/__init__.py +++ b/src/polar_sdk/models/__init__.py @@ -737,6 +737,10 @@ CustomerPortalCustomersAddPaymentMethodSecurity, CustomerPortalCustomersAddPaymentMethodSecurityTypedDict, ) + from .customer_portal_customers_check_email_updateop import ( + CustomerPortalCustomersCheckEmailUpdateRequest, + CustomerPortalCustomersCheckEmailUpdateRequestTypedDict, + ) from .customer_portal_customers_confirm_payment_methodop import ( CustomerPortalCustomersConfirmPaymentMethodSecurity, CustomerPortalCustomersConfirmPaymentMethodSecurityTypedDict, @@ -759,6 +763,10 @@ CustomerPortalCustomersListPaymentMethodsSecurity, CustomerPortalCustomersListPaymentMethodsSecurityTypedDict, ) + from .customer_portal_customers_request_email_updateop import ( + CustomerPortalCustomersRequestEmailUpdateSecurity, + CustomerPortalCustomersRequestEmailUpdateSecurityTypedDict, + ) from .customer_portal_customers_updateop import ( CustomerPortalCustomersUpdateSecurity, CustomerPortalCustomersUpdateSecurityTypedDict, @@ -1053,6 +1061,18 @@ CustomerDeletedMetadata, CustomerDeletedMetadataTypedDict, ) + from .customeremailupdaterequest import ( + CustomerEmailUpdateRequest, + CustomerEmailUpdateRequestTypedDict, + ) + from .customeremailupdateverifyrequest import ( + CustomerEmailUpdateVerifyRequest, + CustomerEmailUpdateVerifyRequestTypedDict, + ) + from .customeremailupdateverifyresponse import ( + CustomerEmailUpdateVerifyResponse, + CustomerEmailUpdateVerifyResponseTypedDict, + ) from .customerindividual import ( CustomerIndividual, CustomerIndividualTaxID, @@ -1139,6 +1159,10 @@ CustomerPortalCustomerTaxIDTypedDict, CustomerPortalCustomerTypedDict, ) + from .customerportalcustomersettings import ( + CustomerPortalCustomerSettings, + CustomerPortalCustomerSettingsTypedDict, + ) from .customerportalcustomerupdate import ( CustomerPortalCustomerUpdate, CustomerPortalCustomerUpdateTypedDict, @@ -3709,6 +3733,12 @@ "CustomerDeletedMetadataTypedDict", "CustomerEmailFilter", "CustomerEmailFilterTypedDict", + "CustomerEmailUpdateRequest", + "CustomerEmailUpdateRequestTypedDict", + "CustomerEmailUpdateVerifyRequest", + "CustomerEmailUpdateVerifyRequestTypedDict", + "CustomerEmailUpdateVerifyResponse", + "CustomerEmailUpdateVerifyResponseTypedDict", "CustomerIDFilter", "CustomerIDFilterTypedDict", "CustomerIndividual", @@ -3810,6 +3840,8 @@ "CustomerPortalCustomerSessionGetAuthenticatedUserSecurityTypedDict", "CustomerPortalCustomerSessionIntrospectSecurity", "CustomerPortalCustomerSessionIntrospectSecurityTypedDict", + "CustomerPortalCustomerSettings", + "CustomerPortalCustomerSettingsTypedDict", "CustomerPortalCustomerTaxID", "CustomerPortalCustomerTaxIDTypedDict", "CustomerPortalCustomerTypedDict", @@ -3817,6 +3849,8 @@ "CustomerPortalCustomerUpdateTypedDict", "CustomerPortalCustomersAddPaymentMethodSecurity", "CustomerPortalCustomersAddPaymentMethodSecurityTypedDict", + "CustomerPortalCustomersCheckEmailUpdateRequest", + "CustomerPortalCustomersCheckEmailUpdateRequestTypedDict", "CustomerPortalCustomersConfirmPaymentMethodSecurity", "CustomerPortalCustomersConfirmPaymentMethodSecurityTypedDict", "CustomerPortalCustomersDeletePaymentMethodRequest", @@ -3831,6 +3865,8 @@ "CustomerPortalCustomersListPaymentMethodsResponseTypedDict", "CustomerPortalCustomersListPaymentMethodsSecurity", "CustomerPortalCustomersListPaymentMethodsSecurityTypedDict", + "CustomerPortalCustomersRequestEmailUpdateSecurity", + "CustomerPortalCustomersRequestEmailUpdateSecurityTypedDict", "CustomerPortalCustomersUpdateSecurity", "CustomerPortalCustomersUpdateSecurityTypedDict", "CustomerPortalDownloadablesListQueryParamBenefitIDFilter", @@ -5809,6 +5845,8 @@ "CustomerPortalCustomerSessionIntrospectSecurityTypedDict": ".customer_portal_customer_session_introspectop", "CustomerPortalCustomersAddPaymentMethodSecurity": ".customer_portal_customers_add_payment_methodop", "CustomerPortalCustomersAddPaymentMethodSecurityTypedDict": ".customer_portal_customers_add_payment_methodop", + "CustomerPortalCustomersCheckEmailUpdateRequest": ".customer_portal_customers_check_email_updateop", + "CustomerPortalCustomersCheckEmailUpdateRequestTypedDict": ".customer_portal_customers_check_email_updateop", "CustomerPortalCustomersConfirmPaymentMethodSecurity": ".customer_portal_customers_confirm_payment_methodop", "CustomerPortalCustomersConfirmPaymentMethodSecurityTypedDict": ".customer_portal_customers_confirm_payment_methodop", "CustomerPortalCustomersDeletePaymentMethodRequest": ".customer_portal_customers_delete_payment_methodop", @@ -5823,6 +5861,8 @@ "CustomerPortalCustomersListPaymentMethodsResponseTypedDict": ".customer_portal_customers_list_payment_methodsop", "CustomerPortalCustomersListPaymentMethodsSecurity": ".customer_portal_customers_list_payment_methodsop", "CustomerPortalCustomersListPaymentMethodsSecurityTypedDict": ".customer_portal_customers_list_payment_methodsop", + "CustomerPortalCustomersRequestEmailUpdateSecurity": ".customer_portal_customers_request_email_updateop", + "CustomerPortalCustomersRequestEmailUpdateSecurityTypedDict": ".customer_portal_customers_request_email_updateop", "CustomerPortalCustomersUpdateSecurity": ".customer_portal_customers_updateop", "CustomerPortalCustomersUpdateSecurityTypedDict": ".customer_portal_customers_updateop", "CustomerPortalDownloadablesListQueryParamBenefitIDFilter": ".customer_portal_downloadables_listop", @@ -6006,6 +6046,12 @@ "CustomerDeletedEventTypedDict": ".customerdeletedevent", "CustomerDeletedMetadata": ".customerdeletedmetadata", "CustomerDeletedMetadataTypedDict": ".customerdeletedmetadata", + "CustomerEmailUpdateRequest": ".customeremailupdaterequest", + "CustomerEmailUpdateRequestTypedDict": ".customeremailupdaterequest", + "CustomerEmailUpdateVerifyRequest": ".customeremailupdateverifyrequest", + "CustomerEmailUpdateVerifyRequestTypedDict": ".customeremailupdateverifyrequest", + "CustomerEmailUpdateVerifyResponse": ".customeremailupdateverifyresponse", + "CustomerEmailUpdateVerifyResponseTypedDict": ".customeremailupdateverifyresponse", "CustomerIndividual": ".customerindividual", "CustomerIndividualTaxID": ".customerindividual", "CustomerIndividualTaxIDTypedDict": ".customerindividual", @@ -6060,6 +6106,8 @@ "CustomerPortalCustomerTaxID": ".customerportalcustomer", "CustomerPortalCustomerTaxIDTypedDict": ".customerportalcustomer", "CustomerPortalCustomerTypedDict": ".customerportalcustomer", + "CustomerPortalCustomerSettings": ".customerportalcustomersettings", + "CustomerPortalCustomerSettingsTypedDict": ".customerportalcustomersettings", "CustomerPortalCustomerUpdate": ".customerportalcustomerupdate", "CustomerPortalCustomerUpdateTypedDict": ".customerportalcustomerupdate", "CustomerPortalMember": ".customerportalmember", diff --git a/src/polar_sdk/models/customer_portal_customers_check_email_updateop.py b/src/polar_sdk/models/customer_portal_customers_check_email_updateop.py new file mode 100644 index 00000000..fb2c9b7b --- /dev/null +++ b/src/polar_sdk/models/customer_portal_customers_check_email_updateop.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from polar_sdk.types import BaseModel +from polar_sdk.utils import FieldMetadata, QueryParamMetadata +from typing_extensions import Annotated, TypedDict + + +class CustomerPortalCustomersCheckEmailUpdateRequestTypedDict(TypedDict): + token: str + + +class CustomerPortalCustomersCheckEmailUpdateRequest(BaseModel): + token: Annotated[ + str, FieldMetadata(query=QueryParamMetadata(style="form", explode=True)) + ] diff --git a/src/polar_sdk/models/customer_portal_customers_request_email_updateop.py b/src/polar_sdk/models/customer_portal_customers_request_email_updateop.py new file mode 100644 index 00000000..a957c401 --- /dev/null +++ b/src/polar_sdk/models/customer_portal_customers_request_email_updateop.py @@ -0,0 +1,38 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from polar_sdk.types import BaseModel +from polar_sdk.utils import FieldMetadata, SecurityMetadata +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class CustomerPortalCustomersRequestEmailUpdateSecurityTypedDict(TypedDict): + customer_session: NotRequired[str] + member_session: NotRequired[str] + + +class CustomerPortalCustomersRequestEmailUpdateSecurity(BaseModel): + customer_session: Annotated[ + Optional[str], + FieldMetadata( + security=SecurityMetadata( + scheme=True, + scheme_type="http", + sub_type="bearer", + field_name="Authorization", + ) + ), + ] = None + + member_session: Annotated[ + Optional[str], + FieldMetadata( + security=SecurityMetadata( + scheme=True, + scheme_type="http", + sub_type="bearer", + field_name="Authorization", + ) + ), + ] = None diff --git a/src/polar_sdk/models/customeremailupdaterequest.py b/src/polar_sdk/models/customeremailupdaterequest.py new file mode 100644 index 00000000..1c72f97f --- /dev/null +++ b/src/polar_sdk/models/customeremailupdaterequest.py @@ -0,0 +1,13 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from polar_sdk.types import BaseModel +from typing_extensions import TypedDict + + +class CustomerEmailUpdateRequestTypedDict(TypedDict): + email: str + + +class CustomerEmailUpdateRequest(BaseModel): + email: str diff --git a/src/polar_sdk/models/customeremailupdateverifyrequest.py b/src/polar_sdk/models/customeremailupdateverifyrequest.py new file mode 100644 index 00000000..a696a68d --- /dev/null +++ b/src/polar_sdk/models/customeremailupdateverifyrequest.py @@ -0,0 +1,13 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from polar_sdk.types import BaseModel +from typing_extensions import TypedDict + + +class CustomerEmailUpdateVerifyRequestTypedDict(TypedDict): + token: str + + +class CustomerEmailUpdateVerifyRequest(BaseModel): + token: str diff --git a/src/polar_sdk/models/customeremailupdateverifyresponse.py b/src/polar_sdk/models/customeremailupdateverifyresponse.py new file mode 100644 index 00000000..be5996b6 --- /dev/null +++ b/src/polar_sdk/models/customeremailupdateverifyresponse.py @@ -0,0 +1,13 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from polar_sdk.types import BaseModel +from typing_extensions import TypedDict + + +class CustomerEmailUpdateVerifyResponseTypedDict(TypedDict): + token: str + + +class CustomerEmailUpdateVerifyResponse(BaseModel): + token: str diff --git a/src/polar_sdk/models/customerportalcustomersettings.py b/src/polar_sdk/models/customerportalcustomersettings.py new file mode 100644 index 00000000..45f73d04 --- /dev/null +++ b/src/polar_sdk/models/customerportalcustomersettings.py @@ -0,0 +1,13 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from polar_sdk.types import BaseModel +from typing_extensions import TypedDict + + +class CustomerPortalCustomerSettingsTypedDict(TypedDict): + allow_email_change: bool + + +class CustomerPortalCustomerSettings(BaseModel): + allow_email_change: bool diff --git a/src/polar_sdk/models/members_delete_member_by_external_idop.py b/src/polar_sdk/models/members_delete_member_by_external_idop.py index 55d81b24..1ef7b006 100644 --- a/src/polar_sdk/models/members_delete_member_by_external_idop.py +++ b/src/polar_sdk/models/members_delete_member_by_external_idop.py @@ -1,14 +1,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from polar_sdk.types import BaseModel -from polar_sdk.utils import FieldMetadata, PathParamMetadata -from typing_extensions import Annotated, TypedDict +from polar_sdk.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL +from polar_sdk.utils import FieldMetadata, PathParamMetadata, QueryParamMetadata +from pydantic import model_serializer +from typing_extensions import Annotated, NotRequired, TypedDict class MembersDeleteMemberByExternalIDRequestTypedDict(TypedDict): external_id: str r"""The member external ID.""" + customer_id: NotRequired[Nullable[str]] + r"""The customer ID.""" + external_customer_id: NotRequired[Nullable[str]] + r"""The customer external ID.""" class MembersDeleteMemberByExternalIDRequest(BaseModel): @@ -16,3 +21,45 @@ class MembersDeleteMemberByExternalIDRequest(BaseModel): str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] r"""The member external ID.""" + + customer_id: Annotated[ + OptionalNullable[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The customer ID.""" + + external_customer_id: Annotated[ + OptionalNullable[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The customer external ID.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["customer_id", "external_customer_id"] + nullable_fields = ["customer_id", "external_customer_id"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/polar_sdk/models/members_get_member_by_external_idop.py b/src/polar_sdk/models/members_get_member_by_external_idop.py index 11ec97b5..64ea0964 100644 --- a/src/polar_sdk/models/members_get_member_by_external_idop.py +++ b/src/polar_sdk/models/members_get_member_by_external_idop.py @@ -1,14 +1,19 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations -from polar_sdk.types import BaseModel -from polar_sdk.utils import FieldMetadata, PathParamMetadata -from typing_extensions import Annotated, TypedDict +from polar_sdk.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL +from polar_sdk.utils import FieldMetadata, PathParamMetadata, QueryParamMetadata +from pydantic import model_serializer +from typing_extensions import Annotated, NotRequired, TypedDict class MembersGetMemberByExternalIDRequestTypedDict(TypedDict): external_id: str r"""The member external ID.""" + customer_id: NotRequired[Nullable[str]] + r"""The customer ID.""" + external_customer_id: NotRequired[Nullable[str]] + r"""The customer external ID.""" class MembersGetMemberByExternalIDRequest(BaseModel): @@ -16,3 +21,45 @@ class MembersGetMemberByExternalIDRequest(BaseModel): str, FieldMetadata(path=PathParamMetadata(style="simple", explode=False)) ] r"""The member external ID.""" + + customer_id: Annotated[ + OptionalNullable[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The customer ID.""" + + external_customer_id: Annotated[ + OptionalNullable[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The customer external ID.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["customer_id", "external_customer_id"] + nullable_fields = ["customer_id", "external_customer_id"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/polar_sdk/models/members_update_member_by_external_idop.py b/src/polar_sdk/models/members_update_member_by_external_idop.py index a9acdefc..f8993f73 100644 --- a/src/polar_sdk/models/members_update_member_by_external_idop.py +++ b/src/polar_sdk/models/members_update_member_by_external_idop.py @@ -2,15 +2,25 @@ from __future__ import annotations from .memberupdate import MemberUpdate, MemberUpdateTypedDict -from polar_sdk.types import BaseModel -from polar_sdk.utils import FieldMetadata, PathParamMetadata, RequestMetadata -from typing_extensions import Annotated, TypedDict +from polar_sdk.types import BaseModel, Nullable, OptionalNullable, UNSET, UNSET_SENTINEL +from polar_sdk.utils import ( + FieldMetadata, + PathParamMetadata, + QueryParamMetadata, + RequestMetadata, +) +from pydantic import model_serializer +from typing_extensions import Annotated, NotRequired, TypedDict class MembersUpdateMemberByExternalIDRequestTypedDict(TypedDict): external_id: str r"""The member external ID.""" member_update: MemberUpdateTypedDict + customer_id: NotRequired[Nullable[str]] + r"""The customer ID.""" + external_customer_id: NotRequired[Nullable[str]] + r"""The customer external ID.""" class MembersUpdateMemberByExternalIDRequest(BaseModel): @@ -23,3 +33,45 @@ class MembersUpdateMemberByExternalIDRequest(BaseModel): MemberUpdate, FieldMetadata(request=RequestMetadata(media_type="application/json")), ] + + customer_id: Annotated[ + OptionalNullable[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The customer ID.""" + + external_customer_id: Annotated[ + OptionalNullable[str], + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = UNSET + r"""The customer external ID.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = ["customer_id", "external_customer_id"] + nullable_fields = ["customer_id", "external_customer_id"] + null_default_fields = [] + + serialized = handler(self) + + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k) + serialized.pop(k, None) + + optional_nullable = k in optional_fields and k in nullable_fields + is_set = ( + self.__pydantic_fields_set__.intersection({n}) + or k in null_default_fields + ) # pylint: disable=no-member + + if val is not None and val != UNSET_SENTINEL: + m[k] = val + elif val != UNSET_SENTINEL and ( + not k in optional_fields or (optional_nullable and is_set) + ): + m[k] = val + + return m diff --git a/src/polar_sdk/models/organizationcustomerportalsettings.py b/src/polar_sdk/models/organizationcustomerportalsettings.py index 58b889a0..78aaa972 100644 --- a/src/polar_sdk/models/organizationcustomerportalsettings.py +++ b/src/polar_sdk/models/organizationcustomerportalsettings.py @@ -1,6 +1,10 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" from __future__ import annotations +from .customerportalcustomersettings import ( + CustomerPortalCustomerSettings, + CustomerPortalCustomerSettingsTypedDict, +) from .customerportalsubscriptionsettings import ( CustomerPortalSubscriptionSettings, CustomerPortalSubscriptionSettingsTypedDict, @@ -10,15 +14,19 @@ CustomerPortalUsageSettingsTypedDict, ) from polar_sdk.types import BaseModel -from typing_extensions import TypedDict +from typing import Optional +from typing_extensions import NotRequired, TypedDict class OrganizationCustomerPortalSettingsTypedDict(TypedDict): usage: CustomerPortalUsageSettingsTypedDict subscription: CustomerPortalSubscriptionSettingsTypedDict + customer: NotRequired[CustomerPortalCustomerSettingsTypedDict] class OrganizationCustomerPortalSettings(BaseModel): usage: CustomerPortalUsageSettings subscription: CustomerPortalSubscriptionSettings + + customer: Optional[CustomerPortalCustomerSettings] = None diff --git a/src/polar_sdk/models/organizationfeaturesettings.py b/src/polar_sdk/models/organizationfeaturesettings.py index 7d88387c..826754f0 100644 --- a/src/polar_sdk/models/organizationfeaturesettings.py +++ b/src/polar_sdk/models/organizationfeaturesettings.py @@ -12,8 +12,6 @@ class OrganizationFeatureSettingsTypedDict(TypedDict): r"""If this organization has issue funding enabled""" seat_based_pricing_enabled: NotRequired[bool] r"""If this organization has seat-based pricing enabled""" - revops_enabled: NotRequired[bool] - r"""If this organization has RevOps enabled""" wallets_enabled: NotRequired[bool] r"""If this organization has Wallets enabled""" member_model_enabled: NotRequired[bool] @@ -37,9 +35,6 @@ class OrganizationFeatureSettings(BaseModel): seat_based_pricing_enabled: Optional[bool] = False r"""If this organization has seat-based pricing enabled""" - revops_enabled: Optional[bool] = False - r"""If this organization has RevOps enabled""" - wallets_enabled: Optional[bool] = False r"""If this organization has Wallets enabled""" @@ -66,7 +61,6 @@ def serialize_model(self, handler): optional_fields = [ "issue_funding_enabled", "seat_based_pricing_enabled", - "revops_enabled", "wallets_enabled", "member_model_enabled", "tinybird_read", diff --git a/src/polar_sdk/models/organizationstatus.py b/src/polar_sdk/models/organizationstatus.py index d5cf0e39..bb287c47 100644 --- a/src/polar_sdk/models/organizationstatus.py +++ b/src/polar_sdk/models/organizationstatus.py @@ -9,6 +9,8 @@ class OrganizationStatus(str, Enum): ONBOARDING_STARTED = "onboarding_started" INITIAL_REVIEW = "initial_review" ONGOING_REVIEW = "ongoing_review" + REVIEW = "review" + SNOOZED = "snoozed" DENIED = "denied" ACTIVE = "active" OFFBOARDING = "offboarding" diff --git a/src/polar_sdk/polar_customers.py b/src/polar_sdk/polar_customers.py index 881d408d..56f9b360 100644 --- a/src/polar_sdk/polar_customers.py +++ b/src/polar_sdk/polar_customers.py @@ -1259,3 +1259,551 @@ async def delete_payment_method_async( raise models.SDKError("API error occurred", http_res, http_res_text) raise models.SDKError("Unexpected response received", http_res) + + def request_email_update( + self, + *, + security: Union[ + models.CustomerPortalCustomersRequestEmailUpdateSecurity, + models.CustomerPortalCustomersRequestEmailUpdateSecurityTypedDict, + ], + request: Union[ + models.CustomerEmailUpdateRequest, + models.CustomerEmailUpdateRequestTypedDict, + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> Any: + r"""Request Email Change + + Request an email change for the authenticated customer. + + :param security: + :param request: The request object to send. + :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) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.CustomerEmailUpdateRequest) + request = cast(models.CustomerEmailUpdateRequest, request) + + req = self._build_request( + method="POST", + path="/v1/customer-portal/customers/me/email-update/request", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=utils.get_pydantic_model( + security, models.CustomerPortalCustomersRequestEmailUpdateSecurity + ), + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.CustomerEmailUpdateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="customer_portal:customers:request_email_update", + oauth2_scopes=None, + security_source=security, + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "202", "application/json"): + return unmarshal_json_response(Any, http_res) + if utils.match_response(http_res, "422", "application/json"): + response_data = unmarshal_json_response( + models.HTTPValidationErrorData, http_res + ) + raise models.HTTPValidationError(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 request_email_update_async( + self, + *, + security: Union[ + models.CustomerPortalCustomersRequestEmailUpdateSecurity, + models.CustomerPortalCustomersRequestEmailUpdateSecurityTypedDict, + ], + request: Union[ + models.CustomerEmailUpdateRequest, + models.CustomerEmailUpdateRequestTypedDict, + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> Any: + r"""Request Email Change + + Request an email change for the authenticated customer. + + :param security: + :param request: The request object to send. + :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) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.CustomerEmailUpdateRequest) + request = cast(models.CustomerEmailUpdateRequest, request) + + req = self._build_request_async( + method="POST", + path="/v1/customer-portal/customers/me/email-update/request", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + security=utils.get_pydantic_model( + security, models.CustomerPortalCustomersRequestEmailUpdateSecurity + ), + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.CustomerEmailUpdateRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="customer_portal:customers:request_email_update", + oauth2_scopes=None, + security_source=security, + ), + request=req, + error_status_codes=["422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "202", "application/json"): + return unmarshal_json_response(Any, http_res) + if utils.match_response(http_res, "422", "application/json"): + response_data = unmarshal_json_response( + models.HTTPValidationErrorData, http_res + ) + raise models.HTTPValidationError(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 check_email_update( + self, + *, + token: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ): + r"""Check Email Change Token + + Check if an email change verification token is still valid. + + :param token: + :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.CustomerPortalCustomersCheckEmailUpdateRequest( + token=token, + ) + + req = self._build_request( + method="GET", + path="/v1/customer-portal/customers/me/email-update/check", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="customer_portal:customers:check_email_update", + oauth2_scopes=None, + security_source=None, + ), + request=req, + error_status_codes=["401", "422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "204", "*"): + return + if utils.match_response(http_res, "422", "application/json"): + response_data = unmarshal_json_response( + models.HTTPValidationErrorData, http_res + ) + raise models.HTTPValidationError(response_data, http_res) + if utils.match_response(http_res, ["401", "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 check_email_update_async( + self, + *, + token: str, + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ): + r"""Check Email Change Token + + Check if an email change verification token is still valid. + + :param token: + :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.CustomerPortalCustomersCheckEmailUpdateRequest( + token=token, + ) + + req = self._build_request_async( + method="GET", + path="/v1/customer-portal/customers/me/email-update/check", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=False, + request_has_path_params=False, + request_has_query_params=True, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="customer_portal:customers:check_email_update", + oauth2_scopes=None, + security_source=None, + ), + request=req, + error_status_codes=["401", "422", "4XX", "5XX"], + retry_config=retry_config, + ) + + response_data: Any = None + if utils.match_response(http_res, "204", "*"): + return + if utils.match_response(http_res, "422", "application/json"): + response_data = unmarshal_json_response( + models.HTTPValidationErrorData, http_res + ) + raise models.HTTPValidationError(response_data, http_res) + if utils.match_response(http_res, ["401", "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 verify_email_update( + self, + *, + request: Union[ + models.CustomerEmailUpdateVerifyRequest, + models.CustomerEmailUpdateVerifyRequestTypedDict, + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.CustomerEmailUpdateVerifyResponse: + r"""Verify Email Change + + Verify an email change using the token from the verification email. + + :param request: The request object to send. + :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) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.CustomerEmailUpdateVerifyRequest) + request = cast(models.CustomerEmailUpdateVerifyRequest, request) + + req = self._build_request( + method="POST", + path="/v1/customer-portal/customers/me/email-update/verify", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=False, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.CustomerEmailUpdateVerifyRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = self.do_request( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="customer_portal:customers:verify_email_update", + oauth2_scopes=None, + security_source=None, + ), + request=req, + error_status_codes=["401", "422", "4XX", "5XX"], + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.CustomerEmailUpdateVerifyResponse, http_res + ) + if utils.match_response(http_res, ["401", "422", "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 verify_email_update_async( + self, + *, + request: Union[ + models.CustomerEmailUpdateVerifyRequest, + models.CustomerEmailUpdateVerifyRequestTypedDict, + ], + retries: OptionalNullable[utils.RetryConfig] = UNSET, + server_url: Optional[str] = None, + timeout_ms: Optional[int] = None, + http_headers: Optional[Mapping[str, str]] = None, + ) -> models.CustomerEmailUpdateVerifyResponse: + r"""Verify Email Change + + Verify an email change using the token from the verification email. + + :param request: The request object to send. + :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) + + if not isinstance(request, BaseModel): + request = utils.unmarshal(request, models.CustomerEmailUpdateVerifyRequest) + request = cast(models.CustomerEmailUpdateVerifyRequest, request) + + req = self._build_request_async( + method="POST", + path="/v1/customer-portal/customers/me/email-update/verify", + base_url=base_url, + url_variables=url_variables, + request=request, + request_body_required=True, + request_has_path_params=False, + request_has_query_params=False, + user_agent_header="user-agent", + accept_header_value="application/json", + http_headers=http_headers, + get_serialized_body=lambda: utils.serialize_request_body( + request, False, False, "json", models.CustomerEmailUpdateVerifyRequest + ), + timeout_ms=timeout_ms, + ) + + if retries == UNSET: + if self.sdk_configuration.retry_config is not UNSET: + retries = self.sdk_configuration.retry_config + + retry_config = None + if isinstance(retries, utils.RetryConfig): + retry_config = (retries, ["429", "500", "502", "503", "504"]) + + http_res = await self.do_request_async( + hook_ctx=HookContext( + config=self.sdk_configuration, + base_url=base_url or "", + operation_id="customer_portal:customers:verify_email_update", + oauth2_scopes=None, + security_source=None, + ), + request=req, + error_status_codes=["401", "422", "4XX", "5XX"], + retry_config=retry_config, + ) + + if utils.match_response(http_res, "200", "application/json"): + return unmarshal_json_response( + models.CustomerEmailUpdateVerifyResponse, http_res + ) + if utils.match_response(http_res, ["401", "422", "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) From 2150af287140da327dc6640471eb85785a003e1e Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 00:33:40 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow