""" Options: Date: 2025-12-06 12:17:33 Version: 8.0 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://sfgboxapi.dev.scadsoftware.com #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: CreateSubscribeCustomer.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum class StripeType(str, Enum): UNKNOWN = 'unknown' ACCOUNT = 'account' CARD = 'card' CHARGE = 'charge' COUPON = 'coupon' CUSTOMER = 'customer' DISCOUNT = 'discount' DISPUTE = 'dispute' EVENT = 'event' INVOICEITEM = 'invoiceitem' INVOICE = 'invoice' LINE_ITEM = 'line_item' PLAN = 'plan' SUBSCRIPTION = 'subscription' TOKEN = 'token' TRANSFER = 'transfer' LIST = 'list' PRODUCT = 'product' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeObject: object: Optional[StripeType] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeId(StripeObject): id: Optional[str] = None class StripeCouponDuration(str, Enum): FOREVER = 'forever' ONCE = 'once' REPEATING = 'repeating' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeCoupon(StripeId): amount_off: Optional[int] = None created: Optional[datetime.datetime] = None currency: Optional[str] = None duration: Optional[StripeCouponDuration] = None duration_in_months: Optional[int] = None livemode: bool = False max_redemptions: Optional[int] = None metadata: Optional[Dict[str, str]] = None percent_off: Optional[int] = None redeem_by: Optional[datetime.datetime] = None times_redeemed: int = 0 valid: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeDiscount(StripeId): customer: Optional[str] = None coupon: Optional[StripeCoupon] = None start: Optional[datetime.datetime] = None end: Optional[datetime.datetime] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeAddress: city: Optional[str] = None country: Optional[str] = None line1: Optional[str] = None line2: Optional[str] = None postal_code: Optional[str] = None state: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeShipping: address: Optional[StripeAddress] = None name: Optional[str] = None phone: Optional[str] = None T = TypeVar('T') @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeCollection(Generic[T], StripeId): url: Optional[str] = None total_count: int = 0 has_more: Optional[bool] = None data: Optional[List[T]] = None class StripeCvcCheck(str, Enum): UNKNOWN = 'Unknown' PASS_ = 'Pass' FAIL = 'Fail' UNCHECKED = 'Unchecked' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeCard(StripeId): brand: Optional[str] = None number: Optional[str] = None last4: Optional[str] = None dynamic_last4: Optional[str] = None exp_month: int = 0 exp_year: int = 0 cvc: Optional[str] = None name: Optional[str] = None address_city: Optional[str] = None address_country: Optional[str] = None address_line1: Optional[str] = None address_line2: Optional[str] = None address_state: Optional[str] = None address_zip: Optional[str] = None cvc_check: Optional[StripeCvcCheck] = None address_line1_check: Optional[str] = None address_zip_check: Optional[str] = None funding: Optional[str] = None fingerprint: Optional[str] = None customer: Optional[str] = None country: Optional[str] = None class StripeSubscriptionStatus(str, Enum): UNKNOWN = 'Unknown' TRIALING = 'Trialing' ACTIVE = 'Active' PAST_DUE = 'PastDue' CANCELED = 'Canceled' UNPAID = 'Unpaid' class StripePlanInterval(str, Enum): MONTH = 'month' YEAR = 'year' @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripePlan(StripeId): amount: int = 0 created: Optional[datetime.datetime] = None currency: Optional[str] = None interval: Optional[StripePlanInterval] = None interval_count: Optional[int] = None livemode: bool = False metadata: Optional[Dict[str, str]] = None nickname: Optional[str] = None product: Optional[str] = None trial_period_days: Optional[int] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeSubscription(StripeId): current_period_end: Optional[datetime.datetime] = None status: Optional[StripeSubscriptionStatus] = None plan: Optional[StripePlan] = None current_period_start: Optional[datetime.datetime] = None start: Optional[datetime.datetime] = None trial_start: Optional[datetime.datetime] = None cancel_at_period_end: Optional[bool] = None trial_end: Optional[datetime.datetime] = None canceled_at: Optional[datetime.datetime] = None ended_at: Optional[datetime.datetime] = None customer: Optional[str] = None quantity: int = 0 @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class StripeCustomer(StripeId): account_balance: int = 0 business_vat_id: Optional[str] = None created: Optional[datetime.datetime] = None default_source: Optional[str] = None delinquent: Optional[bool] = None description: Optional[str] = None discount: Optional[StripeDiscount] = None email: Optional[str] = None invoice_prefix: Optional[str] = None livemode: bool = False metadata: Optional[Dict[str, str]] = None shipping: Optional[StripeShipping] = None sources: Optional[StripeCollection[StripeCard]] = None subscriptions: Optional[StripeCollection[StripeSubscription]] = None deleted: bool = False currency: Optional[str] = None # @Route("/create-customer", "POST") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class CreateSubscribeCustomer(IReturn[StripeCustomer], IPost): email: Optional[str] = None