This commit is contained in:
Iliyan Angelov
2025-11-17 18:26:30 +02:00
parent 48353cde9c
commit 0c59fe1173
2535 changed files with 278997 additions and 2480 deletions

View File

@@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
# File generated from our OpenAPI spec
from importlib import import_module
from typing_extensions import TYPE_CHECKING
if TYPE_CHECKING:
from stripe.billing_portal._configuration import (
Configuration as Configuration,
)
from stripe.billing_portal._configuration_service import (
ConfigurationService as ConfigurationService,
)
from stripe.billing_portal._session import Session as Session
from stripe.billing_portal._session_service import (
SessionService as SessionService,
)
# name -> (import_target, is_submodule)
_import_map = {
"Configuration": ("stripe.billing_portal._configuration", False),
"ConfigurationService": (
"stripe.billing_portal._configuration_service",
False,
),
"Session": ("stripe.billing_portal._session", False),
"SessionService": ("stripe.billing_portal._session_service", False),
}
if not TYPE_CHECKING:
def __getattr__(name):
try:
target, is_submodule = _import_map[name]
module = import_module(target)
if is_submodule:
return module
return getattr(
module,
name,
)
except KeyError:
raise AttributeError()

View File

@@ -0,0 +1,401 @@
# -*- coding: utf-8 -*-
# File generated from our OpenAPI spec
from stripe._createable_api_resource import CreateableAPIResource
from stripe._expandable_field import ExpandableField
from stripe._list_object import ListObject
from stripe._listable_api_resource import ListableAPIResource
from stripe._stripe_object import StripeObject
from stripe._updateable_api_resource import UpdateableAPIResource
from stripe._util import sanitize_id
from typing import ClassVar, Dict, List, Optional, cast
from typing_extensions import Literal, Unpack, TYPE_CHECKING
if TYPE_CHECKING:
from stripe._application import Application
from stripe.params.billing_portal._configuration_create_params import (
ConfigurationCreateParams,
)
from stripe.params.billing_portal._configuration_list_params import (
ConfigurationListParams,
)
from stripe.params.billing_portal._configuration_modify_params import (
ConfigurationModifyParams,
)
from stripe.params.billing_portal._configuration_retrieve_params import (
ConfigurationRetrieveParams,
)
class Configuration(
CreateableAPIResource["Configuration"],
ListableAPIResource["Configuration"],
UpdateableAPIResource["Configuration"],
):
"""
A portal configuration describes the functionality and behavior you embed in a portal session. Related guide: [Configure the customer portal](https://docs.stripe.com/customer-management/configure-portal).
"""
OBJECT_NAME: ClassVar[Literal["billing_portal.configuration"]] = (
"billing_portal.configuration"
)
class BusinessProfile(StripeObject):
headline: Optional[str]
"""
The messaging shown to customers in the portal.
"""
privacy_policy_url: Optional[str]
"""
A link to the business's publicly available privacy policy.
"""
terms_of_service_url: Optional[str]
"""
A link to the business's publicly available terms of service.
"""
class Features(StripeObject):
class CustomerUpdate(StripeObject):
allowed_updates: List[
Literal[
"address", "email", "name", "phone", "shipping", "tax_id"
]
]
"""
The types of customer updates that are supported. When empty, customers are not updateable.
"""
enabled: bool
"""
Whether the feature is enabled.
"""
class InvoiceHistory(StripeObject):
enabled: bool
"""
Whether the feature is enabled.
"""
class PaymentMethodUpdate(StripeObject):
enabled: bool
"""
Whether the feature is enabled.
"""
class SubscriptionCancel(StripeObject):
class CancellationReason(StripeObject):
enabled: bool
"""
Whether the feature is enabled.
"""
options: List[
Literal[
"customer_service",
"low_quality",
"missing_features",
"other",
"switched_service",
"too_complex",
"too_expensive",
"unused",
]
]
"""
Which cancellation reasons will be given as options to the customer.
"""
cancellation_reason: CancellationReason
enabled: bool
"""
Whether the feature is enabled.
"""
mode: Literal["at_period_end", "immediately"]
"""
Whether to cancel subscriptions immediately or at the end of the billing period.
"""
proration_behavior: Literal[
"always_invoice", "create_prorations", "none"
]
"""
Whether to create prorations when canceling subscriptions. Possible values are `none` and `create_prorations`.
"""
_inner_class_types = {"cancellation_reason": CancellationReason}
class SubscriptionUpdate(StripeObject):
class Product(StripeObject):
class AdjustableQuantity(StripeObject):
enabled: bool
"""
If true, the quantity can be adjusted to any non-negative integer.
"""
maximum: Optional[int]
"""
The maximum quantity that can be set for the product.
"""
minimum: int
"""
The minimum quantity that can be set for the product.
"""
adjustable_quantity: AdjustableQuantity
prices: List[str]
"""
The list of price IDs which, when subscribed to, a subscription can be updated.
"""
product: str
"""
The product ID.
"""
_inner_class_types = {
"adjustable_quantity": AdjustableQuantity
}
class ScheduleAtPeriodEnd(StripeObject):
class Condition(StripeObject):
type: Literal[
"decreasing_item_amount", "shortening_interval"
]
"""
The type of condition.
"""
conditions: List[Condition]
"""
List of conditions. When any condition is true, an update will be scheduled at the end of the current period.
"""
_inner_class_types = {"conditions": Condition}
default_allowed_updates: List[
Literal["price", "promotion_code", "quantity"]
]
"""
The types of subscription updates that are supported for items listed in the `products` attribute. When empty, subscriptions are not updateable.
"""
enabled: bool
"""
Whether the feature is enabled.
"""
products: Optional[List[Product]]
"""
The list of up to 10 products that support subscription updates.
"""
proration_behavior: Literal[
"always_invoice", "create_prorations", "none"
]
"""
Determines how to handle prorations resulting from subscription updates. Valid values are `none`, `create_prorations`, and `always_invoice`. Defaults to a value of `none` if you don't set it during creation.
"""
schedule_at_period_end: ScheduleAtPeriodEnd
trial_update_behavior: Literal["continue_trial", "end_trial"]
"""
Determines how handle updates to trialing subscriptions. Valid values are `end_trial` and `continue_trial`. Defaults to a value of `end_trial` if you don't set it during creation.
"""
_inner_class_types = {
"products": Product,
"schedule_at_period_end": ScheduleAtPeriodEnd,
}
customer_update: CustomerUpdate
invoice_history: InvoiceHistory
payment_method_update: PaymentMethodUpdate
subscription_cancel: SubscriptionCancel
subscription_update: SubscriptionUpdate
_inner_class_types = {
"customer_update": CustomerUpdate,
"invoice_history": InvoiceHistory,
"payment_method_update": PaymentMethodUpdate,
"subscription_cancel": SubscriptionCancel,
"subscription_update": SubscriptionUpdate,
}
class LoginPage(StripeObject):
enabled: bool
"""
If `true`, a shareable `url` will be generated that will take your customers to a hosted login page for the customer portal.
If `false`, the previously generated `url`, if any, will be deactivated.
"""
url: Optional[str]
"""
A shareable URL to the hosted portal login page. Your customers will be able to log in with their [email](https://stripe.com/docs/api/customers/object#customer_object-email) and receive a link to their customer portal.
"""
active: bool
"""
Whether the configuration is active and can be used to create portal sessions.
"""
application: Optional[ExpandableField["Application"]]
"""
ID of the Connect Application that created the configuration.
"""
business_profile: BusinessProfile
created: int
"""
Time at which the object was created. Measured in seconds since the Unix epoch.
"""
default_return_url: Optional[str]
"""
The default URL to redirect customers to when they click on the portal's link to return to your website. This can be [overriden](https://stripe.com/docs/api/customer_portal/sessions/create#create_portal_session-return_url) when creating the session.
"""
features: Features
id: str
"""
Unique identifier for the object.
"""
is_default: bool
"""
Whether the configuration is the default. If `true`, this configuration can be managed in the Dashboard and portal sessions will use this configuration unless it is overriden when creating the session.
"""
livemode: bool
"""
Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
"""
login_page: LoginPage
metadata: Optional[Dict[str, str]]
"""
Set of [key-value pairs](https://stripe.com/docs/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
"""
name: Optional[str]
"""
The name of the configuration.
"""
object: Literal["billing_portal.configuration"]
"""
String representing the object's type. Objects of the same type share the same value.
"""
updated: int
"""
Time at which the object was last updated. Measured in seconds since the Unix epoch.
"""
@classmethod
def create(
cls, **params: Unpack["ConfigurationCreateParams"]
) -> "Configuration":
"""
Creates a configuration that describes the functionality and behavior of a PortalSession
"""
return cast(
"Configuration",
cls._static_request(
"post",
cls.class_url(),
params=params,
),
)
@classmethod
async def create_async(
cls, **params: Unpack["ConfigurationCreateParams"]
) -> "Configuration":
"""
Creates a configuration that describes the functionality and behavior of a PortalSession
"""
return cast(
"Configuration",
await cls._static_request_async(
"post",
cls.class_url(),
params=params,
),
)
@classmethod
def list(
cls, **params: Unpack["ConfigurationListParams"]
) -> ListObject["Configuration"]:
"""
Returns a list of configurations that describe the functionality of the customer portal.
"""
result = cls._static_request(
"get",
cls.class_url(),
params=params,
)
if not isinstance(result, ListObject):
raise TypeError(
"Expected list object from API, got %s"
% (type(result).__name__)
)
return result
@classmethod
async def list_async(
cls, **params: Unpack["ConfigurationListParams"]
) -> ListObject["Configuration"]:
"""
Returns a list of configurations that describe the functionality of the customer portal.
"""
result = await cls._static_request_async(
"get",
cls.class_url(),
params=params,
)
if not isinstance(result, ListObject):
raise TypeError(
"Expected list object from API, got %s"
% (type(result).__name__)
)
return result
@classmethod
def modify(
cls, id: str, **params: Unpack["ConfigurationModifyParams"]
) -> "Configuration":
"""
Updates a configuration that describes the functionality of the customer portal.
"""
url = "%s/%s" % (cls.class_url(), sanitize_id(id))
return cast(
"Configuration",
cls._static_request(
"post",
url,
params=params,
),
)
@classmethod
async def modify_async(
cls, id: str, **params: Unpack["ConfigurationModifyParams"]
) -> "Configuration":
"""
Updates a configuration that describes the functionality of the customer portal.
"""
url = "%s/%s" % (cls.class_url(), sanitize_id(id))
return cast(
"Configuration",
await cls._static_request_async(
"post",
url,
params=params,
),
)
@classmethod
def retrieve(
cls, id: str, **params: Unpack["ConfigurationRetrieveParams"]
) -> "Configuration":
"""
Retrieves a configuration that describes the functionality of the customer portal.
"""
instance = cls(id, **params)
instance.refresh()
return instance
@classmethod
async def retrieve_async(
cls, id: str, **params: Unpack["ConfigurationRetrieveParams"]
) -> "Configuration":
"""
Retrieves a configuration that describes the functionality of the customer portal.
"""
instance = cls(id, **params)
await instance.refresh_async()
return instance
_inner_class_types = {
"business_profile": BusinessProfile,
"features": Features,
"login_page": LoginPage,
}

View File

@@ -0,0 +1,189 @@
# -*- coding: utf-8 -*-
# File generated from our OpenAPI spec
from stripe._stripe_service import StripeService
from stripe._util import sanitize_id
from typing import Optional, cast
from typing_extensions import TYPE_CHECKING
if TYPE_CHECKING:
from stripe._list_object import ListObject
from stripe._request_options import RequestOptions
from stripe.billing_portal._configuration import Configuration
from stripe.params.billing_portal._configuration_create_params import (
ConfigurationCreateParams,
)
from stripe.params.billing_portal._configuration_list_params import (
ConfigurationListParams,
)
from stripe.params.billing_portal._configuration_retrieve_params import (
ConfigurationRetrieveParams,
)
from stripe.params.billing_portal._configuration_update_params import (
ConfigurationUpdateParams,
)
class ConfigurationService(StripeService):
def list(
self,
params: Optional["ConfigurationListParams"] = None,
options: Optional["RequestOptions"] = None,
) -> "ListObject[Configuration]":
"""
Returns a list of configurations that describe the functionality of the customer portal.
"""
return cast(
"ListObject[Configuration]",
self._request(
"get",
"/v1/billing_portal/configurations",
base_address="api",
params=params,
options=options,
),
)
async def list_async(
self,
params: Optional["ConfigurationListParams"] = None,
options: Optional["RequestOptions"] = None,
) -> "ListObject[Configuration]":
"""
Returns a list of configurations that describe the functionality of the customer portal.
"""
return cast(
"ListObject[Configuration]",
await self._request_async(
"get",
"/v1/billing_portal/configurations",
base_address="api",
params=params,
options=options,
),
)
def create(
self,
params: "ConfigurationCreateParams",
options: Optional["RequestOptions"] = None,
) -> "Configuration":
"""
Creates a configuration that describes the functionality and behavior of a PortalSession
"""
return cast(
"Configuration",
self._request(
"post",
"/v1/billing_portal/configurations",
base_address="api",
params=params,
options=options,
),
)
async def create_async(
self,
params: "ConfigurationCreateParams",
options: Optional["RequestOptions"] = None,
) -> "Configuration":
"""
Creates a configuration that describes the functionality and behavior of a PortalSession
"""
return cast(
"Configuration",
await self._request_async(
"post",
"/v1/billing_portal/configurations",
base_address="api",
params=params,
options=options,
),
)
def retrieve(
self,
configuration: str,
params: Optional["ConfigurationRetrieveParams"] = None,
options: Optional["RequestOptions"] = None,
) -> "Configuration":
"""
Retrieves a configuration that describes the functionality of the customer portal.
"""
return cast(
"Configuration",
self._request(
"get",
"/v1/billing_portal/configurations/{configuration}".format(
configuration=sanitize_id(configuration),
),
base_address="api",
params=params,
options=options,
),
)
async def retrieve_async(
self,
configuration: str,
params: Optional["ConfigurationRetrieveParams"] = None,
options: Optional["RequestOptions"] = None,
) -> "Configuration":
"""
Retrieves a configuration that describes the functionality of the customer portal.
"""
return cast(
"Configuration",
await self._request_async(
"get",
"/v1/billing_portal/configurations/{configuration}".format(
configuration=sanitize_id(configuration),
),
base_address="api",
params=params,
options=options,
),
)
def update(
self,
configuration: str,
params: Optional["ConfigurationUpdateParams"] = None,
options: Optional["RequestOptions"] = None,
) -> "Configuration":
"""
Updates a configuration that describes the functionality of the customer portal.
"""
return cast(
"Configuration",
self._request(
"post",
"/v1/billing_portal/configurations/{configuration}".format(
configuration=sanitize_id(configuration),
),
base_address="api",
params=params,
options=options,
),
)
async def update_async(
self,
configuration: str,
params: Optional["ConfigurationUpdateParams"] = None,
options: Optional["RequestOptions"] = None,
) -> "Configuration":
"""
Updates a configuration that describes the functionality of the customer portal.
"""
return cast(
"Configuration",
await self._request_async(
"post",
"/v1/billing_portal/configurations/{configuration}".format(
configuration=sanitize_id(configuration),
),
base_address="api",
params=params,
options=options,
),
)

View File

@@ -0,0 +1,296 @@
# -*- coding: utf-8 -*-
# File generated from our OpenAPI spec
from stripe._createable_api_resource import CreateableAPIResource
from stripe._expandable_field import ExpandableField
from stripe._stripe_object import StripeObject
from typing import ClassVar, List, Optional, cast
from typing_extensions import Literal, Unpack, TYPE_CHECKING
if TYPE_CHECKING:
from stripe.billing_portal._configuration import Configuration
from stripe.params.billing_portal._session_create_params import (
SessionCreateParams,
)
class Session(CreateableAPIResource["Session"]):
"""
The Billing customer portal is a Stripe-hosted UI for subscription and
billing management.
A portal configuration describes the functionality and features that you
want to provide to your customers through the portal.
A portal session describes the instantiation of the customer portal for
a particular customer. By visiting the session's URL, the customer
can manage their subscriptions and billing details. For security reasons,
sessions are short-lived and will expire if the customer does not visit the URL.
Create sessions on-demand when customers intend to manage their subscriptions
and billing details.
Related guide: [Customer management](https://docs.stripe.com/customer-management)
"""
OBJECT_NAME: ClassVar[Literal["billing_portal.session"]] = (
"billing_portal.session"
)
class Flow(StripeObject):
class AfterCompletion(StripeObject):
class HostedConfirmation(StripeObject):
custom_message: Optional[str]
"""
A custom message to display to the customer after the flow is completed.
"""
class Redirect(StripeObject):
return_url: str
"""
The URL the customer will be redirected to after the flow is completed.
"""
hosted_confirmation: Optional[HostedConfirmation]
"""
Configuration when `after_completion.type=hosted_confirmation`.
"""
redirect: Optional[Redirect]
"""
Configuration when `after_completion.type=redirect`.
"""
type: Literal["hosted_confirmation", "portal_homepage", "redirect"]
"""
The specified type of behavior after the flow is completed.
"""
_inner_class_types = {
"hosted_confirmation": HostedConfirmation,
"redirect": Redirect,
}
class SubscriptionCancel(StripeObject):
class Retention(StripeObject):
class CouponOffer(StripeObject):
coupon: str
"""
The ID of the coupon to be offered.
"""
coupon_offer: Optional[CouponOffer]
"""
Configuration when `retention.type=coupon_offer`.
"""
type: Literal["coupon_offer"]
"""
Type of retention strategy that will be used.
"""
_inner_class_types = {"coupon_offer": CouponOffer}
retention: Optional[Retention]
"""
Specify a retention strategy to be used in the cancellation flow.
"""
subscription: str
"""
The ID of the subscription to be canceled.
"""
_inner_class_types = {"retention": Retention}
class SubscriptionUpdate(StripeObject):
subscription: str
"""
The ID of the subscription to be updated.
"""
class SubscriptionUpdateConfirm(StripeObject):
class Discount(StripeObject):
coupon: Optional[str]
"""
The ID of the coupon to apply to this subscription update.
"""
promotion_code: Optional[str]
"""
The ID of a promotion code to apply to this subscription update.
"""
class Item(StripeObject):
id: Optional[str]
"""
The ID of the [subscription item](https://stripe.com/docs/api/subscriptions/object#subscription_object-items-data-id) to be updated.
"""
price: Optional[str]
"""
The price the customer should subscribe to through this flow. The price must also be included in the configuration's [`features.subscription_update.products`](https://stripe.com/docs/api/customer_portal/configuration#portal_configuration_object-features-subscription_update-products).
"""
quantity: Optional[int]
"""
[Quantity](https://stripe.com/docs/subscriptions/quantities) for this item that the customer should subscribe to through this flow.
"""
discounts: Optional[List[Discount]]
"""
The coupon or promotion code to apply to this subscription update.
"""
items: List[Item]
"""
The [subscription item](https://stripe.com/docs/api/subscription_items) to be updated through this flow. Currently, only up to one may be specified and subscriptions with multiple items are not updatable.
"""
subscription: str
"""
The ID of the subscription to be updated.
"""
_inner_class_types = {"discounts": Discount, "items": Item}
after_completion: AfterCompletion
subscription_cancel: Optional[SubscriptionCancel]
"""
Configuration when `flow.type=subscription_cancel`.
"""
subscription_update: Optional[SubscriptionUpdate]
"""
Configuration when `flow.type=subscription_update`.
"""
subscription_update_confirm: Optional[SubscriptionUpdateConfirm]
"""
Configuration when `flow.type=subscription_update_confirm`.
"""
type: Literal[
"payment_method_update",
"subscription_cancel",
"subscription_update",
"subscription_update_confirm",
]
"""
Type of flow that the customer will go through.
"""
_inner_class_types = {
"after_completion": AfterCompletion,
"subscription_cancel": SubscriptionCancel,
"subscription_update": SubscriptionUpdate,
"subscription_update_confirm": SubscriptionUpdateConfirm,
}
configuration: ExpandableField["Configuration"]
"""
The configuration used by this session, describing the features available.
"""
created: int
"""
Time at which the object was created. Measured in seconds since the Unix epoch.
"""
customer: str
"""
The ID of the customer for this session.
"""
flow: Optional[Flow]
"""
Information about a specific flow for the customer to go through. See the [docs](https://stripe.com/docs/customer-management/portal-deep-links) to learn more about using customer portal deep links and flows.
"""
id: str
"""
Unique identifier for the object.
"""
livemode: bool
"""
Has the value `true` if the object exists in live mode or the value `false` if the object exists in test mode.
"""
locale: Optional[
Literal[
"auto",
"bg",
"cs",
"da",
"de",
"el",
"en",
"en-AU",
"en-CA",
"en-GB",
"en-IE",
"en-IN",
"en-NZ",
"en-SG",
"es",
"es-419",
"et",
"fi",
"fil",
"fr",
"fr-CA",
"hr",
"hu",
"id",
"it",
"ja",
"ko",
"lt",
"lv",
"ms",
"mt",
"nb",
"nl",
"pl",
"pt",
"pt-BR",
"ro",
"ru",
"sk",
"sl",
"sv",
"th",
"tr",
"vi",
"zh",
"zh-HK",
"zh-TW",
]
]
"""
The IETF language tag of the locale Customer Portal is displayed in. If blank or auto, the customer's `preferred_locales` or browser's locale is used.
"""
object: Literal["billing_portal.session"]
"""
String representing the object's type. Objects of the same type share the same value.
"""
on_behalf_of: Optional[str]
"""
The account for which the session was created on behalf of. When specified, only subscriptions and invoices with this `on_behalf_of` account appear in the portal. For more information, see the [docs](https://stripe.com/docs/connect/separate-charges-and-transfers#settlement-merchant). Use the [Accounts API](https://stripe.com/docs/api/accounts/object#account_object-settings-branding) to modify the `on_behalf_of` account's branding settings, which the portal displays.
"""
return_url: Optional[str]
"""
The URL to redirect customers to when they click on the portal's link to return to your website.
"""
url: str
"""
The short-lived URL of the session that gives customers access to the customer portal.
"""
@classmethod
def create(cls, **params: Unpack["SessionCreateParams"]) -> "Session":
"""
Creates a session of the customer portal.
"""
return cast(
"Session",
cls._static_request(
"post",
cls.class_url(),
params=params,
),
)
@classmethod
async def create_async(
cls, **params: Unpack["SessionCreateParams"]
) -> "Session":
"""
Creates a session of the customer portal.
"""
return cast(
"Session",
await cls._static_request_async(
"post",
cls.class_url(),
params=params,
),
)
_inner_class_types = {"flow": Flow}

View File

@@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
# File generated from our OpenAPI spec
from stripe._stripe_service import StripeService
from typing import Optional, cast
from typing_extensions import TYPE_CHECKING
if TYPE_CHECKING:
from stripe._request_options import RequestOptions
from stripe.billing_portal._session import Session
from stripe.params.billing_portal._session_create_params import (
SessionCreateParams,
)
class SessionService(StripeService):
def create(
self,
params: "SessionCreateParams",
options: Optional["RequestOptions"] = None,
) -> "Session":
"""
Creates a session of the customer portal.
"""
return cast(
"Session",
self._request(
"post",
"/v1/billing_portal/sessions",
base_address="api",
params=params,
options=options,
),
)
async def create_async(
self,
params: "SessionCreateParams",
options: Optional["RequestOptions"] = None,
) -> "Session":
"""
Creates a session of the customer portal.
"""
return cast(
"Session",
await self._request_async(
"post",
"/v1/billing_portal/sessions",
base_address="api",
params=params,
options=options,
),
)