BokaMera.API.Host

<back to all web services

CustomerQuery

Requires Authentication
The following routes are available for this service:
GET/customersFind customers for currently logged in administratorThis service is used to get customers for the current user, the result will be paged if the query returns a to large set of values.
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


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QueryBase:
    skip: Optional[int] = None
    """
    Skip over a given number of elements in a sequence and then return the remainder. Use this when you need paging.<br/><br/><strong>Example:</strong><br/><code>?skip=10&orderBy=Id</code>
    """

    take: Optional[int] = None
    """
    Return a given number of elements in a sequence and then skip over the remainder. Use this when you need paging.<br/><br/><strong>Example:</strong><br/><code>?take=20</code>
    """

    order_by: Optional[str] = None
    """
    Comma separated list of fields to order by. Prefix the field name with a minus if you wan't to invert the sort for that field.<br/><br/><strong>Example:</strong><br/><code>?orderBy=Id,-Age,FirstName</code>
    """

    order_by_desc: Optional[str] = None
    """
    Comma separated list of fields to order by in descending order. Prefix the field name with a minus if you wan't to invert the sort for that field.<br/><br/><strong>Example:</strong><br/><code>?orderByDesc=Id,-Age,FirstName</code>
    """

    include: Optional[str] = None
    """
    Include any of the aggregates <code>AVG, COUNT, FIRST, LAST, MAX, MIN, SUM</code> in your result set. The results will be returned in the meta field.<br/><br/><strong>Example:</strong><br/><code>?include=COUNT(*) as Total</code><br/><br/>or multiple fields with<br/><code>?include=Count(*) Total, Min(Age), AVG(Age) AverageAge</code><br/></br>or unique with<br/><code>?include=COUNT(DISTINCT LivingStatus) as UniqueStatus</code>
    """

    fields: Optional[str] = None
    meta: Optional[Dict[str, str]] = None


From = TypeVar('From')
Into = TypeVar('Into')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QueryDb2(Generic[From, Into], QueryBase, IReturn[QueryResponse[Into]]):
    @staticmethod
    def response_type(): return QueryResponse[Into]


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldValueResponse:
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldConfigData:
    # @ApiMember(Description="Custom field id")
    id: int = 0
    """
    Custom field id
    """


    # @ApiMember(Description="Configuration name. Example: 'Number of persons'.")
    name: Optional[str] = None
    """
    Configuration name. Example: 'Number of persons'.
    """


    # @ApiMember(Description="Custom field description. Example: 'For how many persons is this booking?'")
    description: Optional[str] = None
    """
    Custom field description. Example: 'For how many persons is this booking?'
    """


    # @ApiMember(Description="Field width. Example: 20 for 20px")
    width: Optional[int] = None
    """
    Field width. Example: 20 for 20px
    """


    # @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    data_type: Optional[str] = None
    """
    Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    """


    # @ApiMember(Description="Default value of the field. Example: '3'")
    default_value: Optional[str] = None
    """
    Default value of the field. Example: '3'
    """


    # @ApiMember(Description="Determines if the field is required to have a value or not")
    is_mandatory: bool = False
    """
    Determines if the field is required to have a value or not
    """


    # @ApiMember(Description="Error message shown to the user if the field data is required but not entered")
    mandatory_error_message: Optional[str] = None
    """
    Error message shown to the user if the field data is required but not entered
    """


    # @ApiMember(Description="Max lenght of the field")
    max_length: int = 0
    """
    Max lenght of the field
    """


    # @ApiMember(Description="If the field should have multiple lines")
    multiple_line_text: bool = False
    """
    If the field should have multiple lines
    """


    # @ApiMember(Description="Regular expression used for validation of the field")
    reg_ex: Optional[str] = None
    """
    Regular expression used for validation of the field
    """


    # @ApiMember(Description="Error message shown if the regular expression validation failed")
    reg_ex_error_message: Optional[str] = None
    """
    Error message shown if the regular expression validation failed
    """


    # @ApiMember(Description="The values to select from if Datatype is DropDown for this custom field")
    values: Optional[List[CustomFieldValueResponse]] = None
    """
    The values to select from if Datatype is DropDown for this custom field
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldDataResponse:
    id: int = 0
    column: Optional[str] = None
    name: Optional[str] = None
    description: Optional[str] = None
    value: Optional[str] = None
    # @ApiMember(Description="Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'")
    data_type: Optional[str] = None
    """
    Data field of custom field. Valid values are: TextBox, ... Example: 'TextBox'
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerCommentsResponse:
    id: int = 0
    customer_id: Optional[str] = None
    comments: Optional[str] = None
    updated: datetime.datetime = datetime.datetime(1, 1, 1)
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    image_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BaseModel:
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class UserAccessKeys(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    access_key_type_id: int = 0

    # @Required()
    value: Optional[str] = None

    # @Required()
    customer_id: Optional[str] = None

    description: Optional[str] = None
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class InvoiceAddress:
    corporate_identity_number: Optional[str] = None
    invoice_address1: Optional[str] = None
    invoice_address2: Optional[str] = None
    invoice_city: Optional[str] = None
    invoice_postal_code: Optional[str] = None
    invoice_country_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerQueryResponse:
    id: Optional[str] = None
    firstname: Optional[str] = None
    lastname: Optional[str] = None
    email: Optional[str] = None
    phone: Optional[str] = None
    image_url: Optional[str] = None
    custom_fields: Optional[List[CustomFieldConfigData]] = None
    custom_field_values: Optional[List[CustomFieldDataResponse]] = None
    comments: Optional[List[CustomerCommentsResponse]] = None
    access_keys: Optional[List[UserAccessKeys]] = None
    updated: datetime.datetime = datetime.datetime(1, 1, 1)
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    response_status: Optional[Object] = None
    subscribed_to_newsletter: bool = False
    invoice_address: Optional[InvoiceAddress] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ExternalReference(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    id: Optional[str] = None

    # @Required()
    owner_id: Optional[str] = None

    # @Required()
    reference_type: Optional[str] = None

    external_data: Optional[str] = None
    created_by: Optional[str] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


class CompanyStatus(IntEnum):
    REGISTERED = 1
    AWAITING_APPROVAL = 2
    APPROVED = 3
    INACTIVE = 4
    CLOSED_DOWN = 5
    NOT_APPROVED = 6


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldValue(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    value: Optional[str] = None

    # @Required()
    active: bool = False

    sort_order: Optional[int] = None
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomField(BaseModel):
    # @Required()
    table: Optional[str] = None

    # @Required()
    column: Optional[str] = None

    # @Required()
    data_type: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    active: bool = False

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RegEx(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    reg_ex_code: Optional[str] = None

    error_message: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


class ScheduleType(str, Enum):
    NOT_DEFINED = 'NotDefined'
    RECURRING_SCHEDULE = 'RecurringSchedule'
    DATE_SCHEDULE = 'DateSchedule'


class ISchedule:
    company_id: Optional[str] = None
    resources: Optional[IList[Resource]] = None
    type: Optional[ScheduleType] = None
    active: bool = False
    is_resource_specific: bool = False


class ITimeException(IInterval):
    id: int = 0
    reason_text: Optional[str] = None
    is_block: bool = False
    reason_text_public: Optional[str] = None
    is_recurring: bool = False
    resource_ids: Optional[List[int]] = None


class BookingStatusEnum(IntEnum):
    BOOKED = 1
    UNBOOKED = 2
    RESERVED = 3
    CANCELED = 4
    AWAITING_PAYMENT = 5
    AWAITING_PAYMENT_NO_TIME_LIMIT = 6
    PAYED = 7
    AWAITING_PAYMENT_REQUEST_FROM_ADMIN = 8
    AWAITING_PAYMENT_FROM_PROVIDER = 9
    INVOICED = 10


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookedCustomer:
    id: Optional[str] = None
    firstname: Optional[str] = None
    lastname: Optional[str] = None
    email: Optional[str] = None
    phone: Optional[str] = None
    facebook_user_name: Optional[str] = None
    image_url: Optional[str] = None
    corporate_identity_number: Optional[str] = None
    invoice_address1: Optional[str] = None
    invoice_address2: Optional[str] = None
    invoice_city: Optional[str] = None
    invoice_postal_code: Optional[str] = None
    invoice_country_code: Optional[str] = None


class IBookedTime(IInterval):
    id: int = 0
    service_id: int = 0
    booked_spots: int = 0
    total_spots: int = 0
    pause_after_in_minutes: int = 0
    status: Optional[BookingStatusEnum] = None
    status_id: int = 0
    customer: Optional[BookedCustomer] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Resource(BaseModel, ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    priority: int = 0

    # @Ignore()
    schedules: Optional[IList[ISchedule]] = None

    # @Ignore()
    exceptions: Optional[IList[ITimeException]] = None

    # @Ignore()
    bookings: Optional[IList[IBookedTime]] = None

    # @Ignore()
    custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_data: Optional[IList[CustomFieldDataResponse]] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    name: Optional[str] = None

    # @Required()
    active: bool = False

    description: Optional[str] = None
    image_url: Optional[str] = None
    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    color: Optional[str] = None

    email: Optional[str] = None
    mobile_phone: Optional[str] = None
    email_notification: Optional[bool] = None
    sms_notification: Optional[bool] = None
    # @Required()
    send_s_m_s_reminder: bool = False

    # @Required()
    send_email_reminder: bool = False

    modified_date: Optional[datetime.datetime] = None
    access_group: Optional[str] = None
    text_field1: Optional[str] = None
    text_field2: Optional[str] = None
    text_field3: Optional[str] = None
    text_field4: Optional[str] = None
    text_field5: Optional[str] = None
    text_field6: Optional[str] = None
    text_field7: Optional[str] = None
    text_field8: Optional[str] = None
    text_field9: Optional[str] = None
    text_field10: Optional[str] = None
    text_field11: Optional[str] = None
    text_field12: Optional[str] = None
    text_field13: Optional[str] = None
    text_field14: Optional[str] = None
    text_field15: Optional[str] = None
    text_field16: Optional[str] = None
    text_field17: Optional[str] = None
    text_field18: Optional[str] = None
    text_field19: Optional[str] = None
    text_field20: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ResourceType(BaseModel, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    selectable_by_user: bool = False

    # @Ignore()
    resources: Optional[List[Resource]] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    name: Optional[str] = None

    description: Optional[str] = None
    # @Required()
    active: bool = False

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeType(BaseModel):
    # @Required()
    name: Optional[str] = None

    description: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AppliedRebateCodes:
    rebate_code_id: int = 0
    rebate_code_sign: Optional[str] = None
    rebate_code_value: int = 0
    rebate_amount: float = 0.0
    rebate_code_type: Optional[RebateCodeType] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class TotalPriceInformation:
    total_price: float = 0.0
    total_v_a_t_amount: float = 0.0
    total_rebate: float = 0.0
    total_price_before_rebate: float = 0.0
    applied_codes: Optional[List[AppliedRebateCodes]] = None
    price_sign: Optional[str] = None
    currency_id: Optional[str] = None
    vat: Decimal = decimal.Decimal(0)


class Currency(IntEnum):
    SEK = 1
    EUR = 2


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceMapping(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    id: Optional[str] = None

    # @Required()
    service_price_id: int = 0

    reference_type: Optional[str] = None
    external_reference: Optional[str] = None
    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


class BokaMeraDayOfWeek(IntEnum):
    MONDAY = 1
    TUESDAY = 2
    WEDNESDAY = 3
    THURSDAY = 4
    FRIDAY = 5
    SATURDAY = 6
    SUNDAY = 7


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ServicePriceDayOfWeekRelation(BaseModel):
    # @Ignore()
    day_of_week: Optional[BokaMeraDayOfWeek] = None

    # @Required()
    company_id: Optional[str] = None

    # @Required()
    service_price_id: int = 0

    # @Required()
    day_of_week_id: int = 0

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


class IDbConnectionFactory:
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ServerData:
    htt_p__h_o_s_t: Optional[str] = None
    htt_p__c_o_n_n_e_c_t_i_o_n: Optional[str] = None
    htt_p__c_a_c_h_e__c_o_n_t_r_o_l: Optional[str] = None
    htt_p__a_c_c_e_p_t: Optional[str] = None
    htt_p__u_s_e_r__a_g_e_n_t: Optional[str] = None
    htt_p__a_c_c_e_p_t__e_n_c_o_d_i_n_g: Optional[str] = None
    htt_p__a_c_c_e_p_t__l_a_n_g_u_a_g_e: Optional[str] = None
    path: Optional[str] = None
    serve_r__s_o_f_t_w_a_r_e: Optional[str] = None
    serve_r__n_a_m_e: Optional[str] = None
    serve_r__a_d_d_r: Optional[str] = None
    serve_r__p_o_r_t: Optional[str] = None
    remot_e__a_d_d_r: Optional[str] = None
    remot_e__p_o_r_t: Optional[str] = None
    gatewa_y__i_n_t_e_r_f_a_c_e: Optional[str] = None
    serve_r__p_r_o_t_o_c_o_l: Optional[str] = None
    reques_t__m_e_t_h_o_d: Optional[str] = None
    quer_y__s_t_r_i_n_g: Optional[str] = None
    reques_t__t_i_m_e: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Credentials:
    hash: Optional[str] = None
    id: Optional[str] = None
    version: Optional[str] = None
    client: Optional[str] = None
    serverdata: Optional[ServerData] = None
    time: Optional[str] = None
    test: Optional[str] = None
    language: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CheckoutData:
    terms: Optional[str] = None
    privacy_policy: Optional[str] = None
    redirect_on_success: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CheckoutPaymentData:
    currency: Optional[str] = None
    language: Optional[str] = None
    country: Optional[str] = None
    autoactivate: Optional[str] = None
    orderid: Optional[str] = None
    returnmethod: Optional[str] = None
    accepturl: Optional[str] = None
    cancelurl: Optional[str] = None
    callbackurl: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentInfo:
    paymentdate: Optional[str] = None
    paymentterms: Optional[str] = None
    yourreference: Optional[str] = None
    ourreference: Optional[str] = None
    projectname: Optional[str] = None
    deliverymethod: Optional[str] = None
    deliveryterms: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CartHandling:
    withouttax: Optional[str] = None
    taxrate: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CartTotal:
    rounding: Optional[str] = None
    withouttax: Optional[str] = None
    tax: Optional[str] = None
    withtax: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Address(StripeEntity1["Address"]):
    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 Shipping(StripeEntity1["Shipping"]):
    address: Optional[Address] = None
    carrier: Optional[str] = None
    name: Optional[str] = None
    phone: Optional[str] = None
    tracking_number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Cart:
    handling: Optional[CartHandling] = None
    total: Optional[CartTotal] = None
    shipping: Optional[Shipping] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerBilling:
    firstname: Optional[str] = None
    lastname: Optional[str] = None
    company: Optional[str] = None
    street: Optional[str] = None
    street2: Optional[str] = None
    zip: Optional[str] = None
    city: Optional[str] = None
    country: Optional[str] = None
    phone: Optional[str] = None
    email: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvicklyCustomer:
    nr: Optional[str] = None
    pno: Optional[str] = None
    billing: Optional[CustomerBilling] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class InitCheckoutData:
    checkout_data: Optional[CheckoutData] = None
    payment_data: Optional[CheckoutPaymentData] = None
    payment_info: Optional[PaymentInfo] = None
    articles: Optional[List[QvicklyArticle]] = None
    cart: Optional[Cart] = None
    qvickly_customer: Optional[QvicklyCustomer] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class InitCheckoutRequestBody:
    credentials: Optional[Credentials] = None
    data: Optional[InitCheckoutData] = None
    function: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvicklyCheckoutResponse:
    number: int = 0
    status: Optional[str] = None
    order_id: Optional[str] = None
    url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvikclyPaymentData:
    method: Optional[str] = None
    paymentplanid: Optional[str] = None
    currency: Optional[str] = None
    country: Optional[str] = None
    language: Optional[str] = None
    autoactivate: Optional[str] = None
    orderid: Optional[str] = None
    status: Optional[str] = None
    paymentid_related: Optional[str] = None
    url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Card:
    promptname: Optional[str] = None
    recurring: Optional[str] = None
    recurringnr: Optional[str] = None
    accepturl: Optional[str] = None
    cancelurl: Optional[str] = None
    callbackurl: Optional[str] = None
    returnmethod: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Settlement:
    number: Optional[str] = None
    date: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvicklyPaymentResponse:
    payment_data: Optional[QvikclyPaymentData] = None
    payment_info: Optional[PaymentInfo] = None
    card: Optional[Card] = None
    settlement: Optional[Settlement] = None
    qvickly_customer: Optional[QvicklyCustomer] = None
    articles: Optional[List[QvicklyArticle]] = None
    cart: Optional[Cart] = None


class Payson2CheckoutStatus(str, Enum):
    NONE = 'None'
    CREATED = 'Created'
    FORMS_FILLED = 'FormsFilled'
    READY_TO_PAY = 'ReadyToPay'
    PROCESSING_PAYMENT = 'ProcessingPayment'
    READY_TO_SHIP = 'ReadyToShip'
    SHIPPED = 'Shipped'
    PAID_TO_ACCOUNT = 'PaidToAccount'
    CANCELED = 'Canceled'
    CREDITED = 'Credited'
    EXPIRED = 'Expired'
    DENIED = 'Denied'


class ItemType(str, Enum):
    PHYSICAL = 'Physical'
    SERVICE = 'Service'
    FEE = 'Fee'
    DISCOUNT = 'Discount'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Item:
    item_id: Optional[str] = None
    discount_rate: Decimal = decimal.Decimal(0)
    ean: Optional[str] = None
    image_uri: Optional[str] = None
    name: Optional[str] = None
    quantity: Decimal = decimal.Decimal(0)
    reference: Optional[str] = None
    tax_rate: Decimal = decimal.Decimal(0)
    total_price_excluding_tax: Decimal = decimal.Decimal(0)
    total_price_including_tax: Decimal = decimal.Decimal(0)
    total_tax_amount: Decimal = decimal.Decimal(0)
    credited_amount: Decimal = decimal.Decimal(0)
    type: Optional[ItemType] = None
    unit_price: Decimal = decimal.Decimal(0)
    uri: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Order:
    currency: Optional[Currency] = None
    total_fee_excluding_tax: Decimal = decimal.Decimal(0)
    total_fee_including_tax: Decimal = decimal.Decimal(0)
    total_price_excluding_tax: Decimal = decimal.Decimal(0)
    total_price_including_tax: Decimal = decimal.Decimal(0)
    total_tax_amount: Decimal = decimal.Decimal(0)
    total_credited_amount: Decimal = decimal.Decimal(0)
    items: Optional[IList[Item]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Merchant:
    checkout_uri: Optional[str] = None
    confirmation_uri: Optional[str] = None
    notification_uri: Optional[str] = None
    validation_uri: Optional[str] = None
    terms_uri: Optional[str] = None
    reference: Optional[str] = None
    partner_id: Optional[str] = None


class ColorScheme(str, Enum):
    WHITE = 'White'
    BLUE = 'Blue'
    GRAY = 'Gray'
    GRAY_TEXT_LOGOS = 'GrayTextLogos'
    BLUE_TEXT_LOGOS = 'BlueTextLogos'
    WHITE_TEXT_LOGOS = 'WhiteTextLogos'
    WHITE_NO_FOOTER = 'WhiteNoFooter'
    GRAY_NO_FOOTER = 'GrayNoFooter'
    BLUE_NO_FOOTER = 'BlueNoFooter'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Gui:
    color_scheme: Optional[ColorScheme] = None
    locale: Optional[str] = None
    request_phone: bool = False
    phone_optional: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class History:
    created: Optional[datetime.datetime] = None
    ready_to_pay: Optional[datetime.datetime] = None
    ready_to_ship: Optional[datetime.datetime] = None
    shipped: Optional[datetime.datetime] = None
    paid_to_account: Optional[datetime.datetime] = None
    canceled: Optional[datetime.datetime] = None
    expired: Optional[datetime.datetime] = None
    denied: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Payson2CheckoutResponse:
    id: Optional[str] = None
    expiration_time: Optional[datetime.datetime] = None
    snippet: Optional[str] = None
    status: Optional[Payson2CheckoutStatus] = None
    customer: Optional[Customer] = None
    order: Optional[Order] = None
    merchant: Optional[Merchant] = None
    gui: Optional[Gui] = None
    history: Optional[History] = None
    purchase_id: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BaseOptions(INestedOptions):
    expand: Optional[List[str]] = None
    extra_params: Optional[Dict[str, Object]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionAfterExpirationRecoveryOptions(INestedOptions):
    allow_promotion_codes: Optional[bool] = None
    enabled: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionAfterExpirationOptions(INestedOptions):
    recovery: Optional[SessionAfterExpirationRecoveryOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionAutomaticTaxLiabilityOptions(INestedOptions):
    account: Optional[str] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionAutomaticTaxOptions(INestedOptions):
    enabled: Optional[bool] = None
    liability: Optional[SessionAutomaticTaxLiabilityOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionConsentCollectionPaymentMethodReuseAgreementOptions(INestedOptions):
    position: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionConsentCollectionOptions(INestedOptions):
    payment_method_reuse_agreement: Optional[SessionConsentCollectionPaymentMethodReuseAgreementOptions] = None
    promotions: Optional[str] = None
    terms_of_service: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldDropdownOptionOptions(INestedOptions):
    label: Optional[str] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldDropdownOptions(INestedOptions):
    default_value: Optional[str] = None
    options: Optional[List[SessionCustomFieldDropdownOptionOptions]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldLabelOptions(INestedOptions):
    custom: Optional[str] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldNumericOptions(INestedOptions):
    default_value: Optional[str] = None
    maximum_length: Optional[int] = None
    minimum_length: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldTextOptions(INestedOptions):
    default_value: Optional[str] = None
    maximum_length: Optional[int] = None
    minimum_length: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldOptions(INestedOptions):
    dropdown: Optional[SessionCustomFieldDropdownOptions] = None
    key: Optional[str] = None
    label: Optional[SessionCustomFieldLabelOptions] = None
    numeric: Optional[SessionCustomFieldNumericOptions] = None
    optional: Optional[bool] = None
    text: Optional[SessionCustomFieldTextOptions] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomTextAfterSubmitOptions(INestedOptions):
    message: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomTextShippingAddressOptions(INestedOptions):
    message: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomTextSubmitOptions(INestedOptions):
    message: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomTextTermsOfServiceAcceptanceOptions(INestedOptions):
    message: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomTextOptions(INestedOptions):
    after_submit: Optional[SessionCustomTextAfterSubmitOptions] = None
    shipping_address: Optional[SessionCustomTextShippingAddressOptions] = None
    submit: Optional[SessionCustomTextSubmitOptions] = None
    terms_of_service_acceptance: Optional[SessionCustomTextTermsOfServiceAcceptanceOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomerUpdateOptions(INestedOptions):
    address: Optional[str] = None
    name: Optional[str] = None
    shipping: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionDiscountOptions(INestedOptions):
    coupon: Optional[str] = None
    promotion_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreationInvoiceDataCustomFieldOptions(INestedOptions):
    name: Optional[str] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreationInvoiceDataIssuerOptions(INestedOptions):
    account: Optional[str] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreationInvoiceDataRenderingOptionsOptions(INestedOptions):
    amount_tax_display: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreationInvoiceDataOptions(INestedOptions, IHasMetadata):
    account_tax_ids: Optional[List[str]] = None
    custom_fields: Optional[List[SessionInvoiceCreationInvoiceDataCustomFieldOptions]] = None
    description: Optional[str] = None
    footer: Optional[str] = None
    issuer: Optional[SessionInvoiceCreationInvoiceDataIssuerOptions] = None
    metadata: Optional[Dict[str, str]] = None
    rendering_options: Optional[SessionInvoiceCreationInvoiceDataRenderingOptionsOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreationOptions(INestedOptions):
    enabled: Optional[bool] = None
    invoice_data: Optional[SessionInvoiceCreationInvoiceDataOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionLineItemAdjustableQuantityOptions(INestedOptions):
    enabled: Optional[bool] = None
    maximum: Optional[int] = None
    minimum: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionLineItemPriceDataProductDataOptions(INestedOptions, IHasMetadata):
    description: Optional[str] = None
    images: Optional[List[str]] = None
    metadata: Optional[Dict[str, str]] = None
    name: Optional[str] = None
    tax_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionLineItemPriceDataRecurringOptions(INestedOptions):
    interval: Optional[str] = None
    interval_count: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionLineItemPriceDataOptions(INestedOptions):
    currency: Optional[str] = None
    product: Optional[str] = None
    product_data: Optional[SessionLineItemPriceDataProductDataOptions] = None
    recurring: Optional[SessionLineItemPriceDataRecurringOptions] = None
    tax_behavior: Optional[str] = None
    unit_amount: Optional[int] = None
    unit_amount_decimal: Optional[Decimal] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionLineItemOptions(INestedOptions):
    adjustable_quantity: Optional[SessionLineItemAdjustableQuantityOptions] = None
    dynamic_tax_rates: Optional[List[str]] = None
    price: Optional[str] = None
    price_data: Optional[SessionLineItemPriceDataOptions] = None
    quantity: Optional[int] = None
    tax_rates: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AddressOptions(INestedOptions):
    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 ChargeShippingOptions(INestedOptions):
    address: Optional[AddressOptions] = None
    carrier: Optional[str] = None
    name: Optional[str] = None
    phone: Optional[str] = None
    tracking_number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentIntentDataTransferDataOptions(INestedOptions):
    amount: Optional[int] = None
    destination: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentIntentDataOptions(INestedOptions, IHasMetadata):
    application_fee_amount: Optional[int] = None
    capture_method: Optional[str] = None
    description: Optional[str] = None
    metadata: Optional[Dict[str, str]] = None
    on_behalf_of: Optional[str] = None
    receipt_email: Optional[str] = None
    setup_future_usage: Optional[str] = None
    shipping: Optional[ChargeShippingOptions] = None
    statement_descriptor: Optional[str] = None
    statement_descriptor_suffix: Optional[str] = None
    transfer_data: Optional[SessionPaymentIntentDataTransferDataOptions] = None
    transfer_group: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodDataOptions(INestedOptions):
    allow_redisplay: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions(INestedOptions):
    custom_mandate_url: Optional[str] = None
    default_for: Optional[List[str]] = None
    interval_description: Optional[str] = None
    payment_schedule: Optional[str] = None
    transaction_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAcssDebitOptions(INestedOptions):
    currency: Optional[str] = None
    mandate_options: Optional[SessionPaymentMethodOptionsAcssDebitMandateOptionsOptions] = None
    setup_future_usage: Optional[str] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAffirmOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAfterpayClearpayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAlipayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAmazonPayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAuBecsDebitOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsBacsDebitOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsBancontactOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsBoletoOptions(INestedOptions):
    expires_after_days: Optional[int] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCardInstallmentsOptions(INestedOptions):
    enabled: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCardOptions(INestedOptions):
    installments: Optional[SessionPaymentMethodOptionsCardInstallmentsOptions] = None
    request_three_d_secure: Optional[str] = None
    setup_future_usage: Optional[str] = None
    statement_descriptor_suffix_kana: Optional[str] = None
    statement_descriptor_suffix_kanji: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCashappOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions(INestedOptions):
    country: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions(INestedOptions):
    eu_bank_transfer: Optional[SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions] = None
    requested_address_types: Optional[List[str]] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCustomerBalanceOptions(INestedOptions):
    bank_transfer: Optional[SessionPaymentMethodOptionsCustomerBalanceBankTransferOptions] = None
    funding_type: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsEpsOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsFpxOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsGiropayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsGrabpayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsIdealOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsKlarnaOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsKonbiniOptions(INestedOptions):
    expires_after_days: Optional[int] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsLinkOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsMobilepayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsMultibancoOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsOxxoOptions(INestedOptions):
    expires_after_days: Optional[int] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsP24Options(INestedOptions):
    setup_future_usage: Optional[str] = None
    tos_shown_and_accepted: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsPaynowOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsPaypalOptions(INestedOptions):
    capture_method: Optional[str] = None
    preferred_locale: Optional[str] = None
    reference: Optional[str] = None
    risk_correlation_id: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsPixOptions(INestedOptions):
    expires_after_seconds: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsRevolutPayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsSepaDebitOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsSofortOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsSwishOptions(INestedOptions):
    reference: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions(INestedOptions):
    permissions: Optional[List[str]] = None
    prefetch: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsUsBankAccountOptions(INestedOptions):
    financial_connections: Optional[SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions] = None
    setup_future_usage: Optional[str] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsWechatPayOptions(INestedOptions):
    app_id: Optional[str] = None
    client: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsOptions(INestedOptions):
    acss_debit: Optional[SessionPaymentMethodOptionsAcssDebitOptions] = None
    affirm: Optional[SessionPaymentMethodOptionsAffirmOptions] = None
    afterpay_clearpay: Optional[SessionPaymentMethodOptionsAfterpayClearpayOptions] = None
    alipay: Optional[SessionPaymentMethodOptionsAlipayOptions] = None
    amazon_pay: Optional[SessionPaymentMethodOptionsAmazonPayOptions] = None
    au_becs_debit: Optional[SessionPaymentMethodOptionsAuBecsDebitOptions] = None
    bacs_debit: Optional[SessionPaymentMethodOptionsBacsDebitOptions] = None
    bancontact: Optional[SessionPaymentMethodOptionsBancontactOptions] = None
    boleto: Optional[SessionPaymentMethodOptionsBoletoOptions] = None
    card: Optional[SessionPaymentMethodOptionsCardOptions] = None
    cashapp: Optional[SessionPaymentMethodOptionsCashappOptions] = None
    customer_balance: Optional[SessionPaymentMethodOptionsCustomerBalanceOptions] = None
    eps: Optional[SessionPaymentMethodOptionsEpsOptions] = None
    fpx: Optional[SessionPaymentMethodOptionsFpxOptions] = None
    giropay: Optional[SessionPaymentMethodOptionsGiropayOptions] = None
    grabpay: Optional[SessionPaymentMethodOptionsGrabpayOptions] = None
    ideal: Optional[SessionPaymentMethodOptionsIdealOptions] = None
    klarna: Optional[SessionPaymentMethodOptionsKlarnaOptions] = None
    konbini: Optional[SessionPaymentMethodOptionsKonbiniOptions] = None
    link: Optional[SessionPaymentMethodOptionsLinkOptions] = None
    mobilepay: Optional[SessionPaymentMethodOptionsMobilepayOptions] = None
    multibanco: Optional[SessionPaymentMethodOptionsMultibancoOptions] = None
    oxxo: Optional[SessionPaymentMethodOptionsOxxoOptions] = None
    p24: Optional[SessionPaymentMethodOptionsP24Options] = None
    paynow: Optional[SessionPaymentMethodOptionsPaynowOptions] = None
    paypal: Optional[SessionPaymentMethodOptionsPaypalOptions] = None
    pix: Optional[SessionPaymentMethodOptionsPixOptions] = None
    revolut_pay: Optional[SessionPaymentMethodOptionsRevolutPayOptions] = None
    sepa_debit: Optional[SessionPaymentMethodOptionsSepaDebitOptions] = None
    sofort: Optional[SessionPaymentMethodOptionsSofortOptions] = None
    swish: Optional[SessionPaymentMethodOptionsSwishOptions] = None
    us_bank_account: Optional[SessionPaymentMethodOptionsUsBankAccountOptions] = None
    wechat_pay: Optional[SessionPaymentMethodOptionsWechatPayOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPhoneNumberCollectionOptions(INestedOptions):
    enabled: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionSavedPaymentMethodOptionsOptions(INestedOptions):
    allow_redisplay_filters: Optional[List[str]] = None
    payment_method_save: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionSetupIntentDataOptions(INestedOptions, IHasMetadata):
    description: Optional[str] = None
    metadata: Optional[Dict[str, str]] = None
    on_behalf_of: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingAddressCollectionOptions(INestedOptions):
    allowed_countries: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions(INestedOptions):
    unit: Optional[str] = None
    value: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions(INestedOptions):
    unit: Optional[str] = None
    value: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingOptionShippingRateDataDeliveryEstimateOptions(INestedOptions):
    maximum: Optional[SessionShippingOptionShippingRateDataDeliveryEstimateMaximumOptions] = None
    minimum: Optional[SessionShippingOptionShippingRateDataDeliveryEstimateMinimumOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions(INestedOptions):
    amount: Optional[int] = None
    tax_behavior: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingOptionShippingRateDataFixedAmountOptions(INestedOptions):
    amount: Optional[int] = None
    currency: Optional[str] = None
    currency_options: Optional[Dict[str, SessionShippingOptionShippingRateDataFixedAmountCurrencyOptionsOptions]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingOptionShippingRateDataOptions(INestedOptions, IHasMetadata):
    delivery_estimate: Optional[SessionShippingOptionShippingRateDataDeliveryEstimateOptions] = None
    display_name: Optional[str] = None
    fixed_amount: Optional[SessionShippingOptionShippingRateDataFixedAmountOptions] = None
    metadata: Optional[Dict[str, str]] = None
    tax_behavior: Optional[str] = None
    tax_code: Optional[str] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingOptionOptions(INestedOptions):
    shipping_rate: Optional[str] = None
    shipping_rate_data: Optional[SessionShippingOptionShippingRateDataOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionSubscriptionDataInvoiceSettingsIssuerOptions(INestedOptions):
    account: Optional[str] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionSubscriptionDataInvoiceSettingsOptions(INestedOptions):
    issuer: Optional[SessionSubscriptionDataInvoiceSettingsIssuerOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionSubscriptionDataTransferDataOptions(INestedOptions):
    amount_percent: Optional[Decimal] = None
    destination: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionSubscriptionDataTrialSettingsEndBehaviorOptions(INestedOptions):
    missing_payment_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionSubscriptionDataTrialSettingsOptions(INestedOptions):
    end_behavior: Optional[SessionSubscriptionDataTrialSettingsEndBehaviorOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionSubscriptionDataOptions(INestedOptions, IHasMetadata):
    application_fee_percent: Optional[Decimal] = None
    billing_cycle_anchor: Optional[datetime.datetime] = None
    default_tax_rates: Optional[List[str]] = None
    description: Optional[str] = None
    invoice_settings: Optional[SessionSubscriptionDataInvoiceSettingsOptions] = None
    metadata: Optional[Dict[str, str]] = None
    on_behalf_of: Optional[str] = None
    proration_behavior: Optional[str] = None
    transfer_data: Optional[SessionSubscriptionDataTransferDataOptions] = None
    trial_end: Optional[datetime.datetime] = None
    trial_period_days: Optional[int] = None
    trial_settings: Optional[SessionSubscriptionDataTrialSettingsOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionTaxIdCollectionOptions(INestedOptions):
    enabled: Optional[bool] = None
    required: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCreateOptions(BaseOptions, IHasMetadata):
    after_expiration: Optional[SessionAfterExpirationOptions] = None
    allow_promotion_codes: Optional[bool] = None
    automatic_tax: Optional[SessionAutomaticTaxOptions] = None
    billing_address_collection: Optional[str] = None
    cancel_url: Optional[str] = None
    client_reference_id: Optional[str] = None
    consent_collection: Optional[SessionConsentCollectionOptions] = None
    currency: Optional[str] = None
    custom_fields: Optional[List[SessionCustomFieldOptions]] = None
    custom_text: Optional[SessionCustomTextOptions] = None
    customer: Optional[str] = None
    customer_creation: Optional[str] = None
    customer_email: Optional[str] = None
    customer_update: Optional[SessionCustomerUpdateOptions] = None
    discounts: Optional[List[SessionDiscountOptions]] = None
    expires_at: Optional[datetime.datetime] = None
    invoice_creation: Optional[SessionInvoiceCreationOptions] = None
    line_items: Optional[List[SessionLineItemOptions]] = None
    locale: Optional[str] = None
    metadata: Optional[Dict[str, str]] = None
    mode: Optional[str] = None
    payment_intent_data: Optional[SessionPaymentIntentDataOptions] = None
    payment_method_collection: Optional[str] = None
    payment_method_configuration: Optional[str] = None
    payment_method_data: Optional[SessionPaymentMethodDataOptions] = None
    payment_method_options: Optional[SessionPaymentMethodOptionsOptions] = None
    payment_method_types: Optional[List[str]] = None
    phone_number_collection: Optional[SessionPhoneNumberCollectionOptions] = None
    redirect_on_completion: Optional[str] = None
    return_url: Optional[str] = None
    saved_payment_method_options: Optional[SessionSavedPaymentMethodOptionsOptions] = None
    setup_intent_data: Optional[SessionSetupIntentDataOptions] = None
    shipping_address_collection: Optional[SessionShippingAddressCollectionOptions] = None
    shipping_options: Optional[List[SessionShippingOptionOptions]] = None
    submit_type: Optional[str] = None
    subscription_data: Optional[SessionSubscriptionDataOptions] = None
    success_url: Optional[str] = None
    tax_id_collection: Optional[SessionTaxIdCollectionOptions] = None
    ui_mode: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentAutomaticPaymentMethodsOptions(INestedOptions):
    allow_redirects: Optional[str] = None
    enabled: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentMandateDataCustomerAcceptanceOfflineOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentMandateDataCustomerAcceptanceOnlineOptions(INestedOptions):
    ip_address: Optional[str] = None
    user_agent: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentMandateDataCustomerAcceptanceOptions(INestedOptions):
    accepted_at: Optional[datetime.datetime] = None
    offline: Optional[PaymentIntentMandateDataCustomerAcceptanceOfflineOptions] = None
    online: Optional[PaymentIntentMandateDataCustomerAcceptanceOnlineOptions] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentMandateDataOptions(INestedOptions):
    customer_acceptance: Optional[PaymentIntentMandateDataCustomerAcceptanceOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataAcssDebitOptions(INestedOptions):
    account_number: Optional[str] = None
    institution_number: Optional[str] = None
    transit_number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataAffirmOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataAfterpayClearpayOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataAlipayOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataAmazonPayOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataAuBecsDebitOptions(INestedOptions):
    account_number: Optional[str] = None
    bsb_number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataBacsDebitOptions(INestedOptions):
    account_number: Optional[str] = None
    sort_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataBancontactOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataBillingDetailsOptions(INestedOptions):
    address: Optional[AddressOptions] = None
    email: Optional[str] = None
    name: Optional[str] = None
    phone: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataBlikOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataBoletoOptions(INestedOptions):
    tax_id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataCashappOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataCustomerBalanceOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataEpsOptions(INestedOptions):
    bank: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataFpxOptions(INestedOptions):
    account_holder_type: Optional[str] = None
    bank: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataGiropayOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataGrabpayOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataIdealOptions(INestedOptions):
    bank: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataInteracPresentOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DobOptions(INestedOptions):
    day: Optional[int] = None
    month: Optional[int] = None
    year: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataKlarnaOptions(INestedOptions):
    dob: Optional[DobOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataKonbiniOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataLinkOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataMobilepayOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataMultibancoOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataOxxoOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataP24Options(INestedOptions):
    bank: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataPaynowOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataPaypalOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataPixOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataPromptpayOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataRadarOptionsOptions(INestedOptions):
    session: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataRevolutPayOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataSepaDebitOptions(INestedOptions):
    iban: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataSofortOptions(INestedOptions):
    country: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataSwishOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataTwintOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataUsBankAccountOptions(INestedOptions):
    account_holder_type: Optional[str] = None
    account_number: Optional[str] = None
    account_type: Optional[str] = None
    financial_connections_account: Optional[str] = None
    routing_number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataWechatPayOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataZipOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodDataOptions(INestedOptions, IHasMetadata):
    acss_debit: Optional[PaymentIntentPaymentMethodDataAcssDebitOptions] = None
    affirm: Optional[PaymentIntentPaymentMethodDataAffirmOptions] = None
    afterpay_clearpay: Optional[PaymentIntentPaymentMethodDataAfterpayClearpayOptions] = None
    alipay: Optional[PaymentIntentPaymentMethodDataAlipayOptions] = None
    allow_redisplay: Optional[str] = None
    amazon_pay: Optional[PaymentIntentPaymentMethodDataAmazonPayOptions] = None
    au_becs_debit: Optional[PaymentIntentPaymentMethodDataAuBecsDebitOptions] = None
    bacs_debit: Optional[PaymentIntentPaymentMethodDataBacsDebitOptions] = None
    bancontact: Optional[PaymentIntentPaymentMethodDataBancontactOptions] = None
    billing_details: Optional[PaymentIntentPaymentMethodDataBillingDetailsOptions] = None
    blik: Optional[PaymentIntentPaymentMethodDataBlikOptions] = None
    boleto: Optional[PaymentIntentPaymentMethodDataBoletoOptions] = None
    cashapp: Optional[PaymentIntentPaymentMethodDataCashappOptions] = None
    customer_balance: Optional[PaymentIntentPaymentMethodDataCustomerBalanceOptions] = None
    eps: Optional[PaymentIntentPaymentMethodDataEpsOptions] = None
    fpx: Optional[PaymentIntentPaymentMethodDataFpxOptions] = None
    giropay: Optional[PaymentIntentPaymentMethodDataGiropayOptions] = None
    grabpay: Optional[PaymentIntentPaymentMethodDataGrabpayOptions] = None
    ideal: Optional[PaymentIntentPaymentMethodDataIdealOptions] = None
    interac_present: Optional[PaymentIntentPaymentMethodDataInteracPresentOptions] = None
    klarna: Optional[PaymentIntentPaymentMethodDataKlarnaOptions] = None
    konbini: Optional[PaymentIntentPaymentMethodDataKonbiniOptions] = None
    link: Optional[PaymentIntentPaymentMethodDataLinkOptions] = None
    metadata: Optional[Dict[str, str]] = None
    mobilepay: Optional[PaymentIntentPaymentMethodDataMobilepayOptions] = None
    multibanco: Optional[PaymentIntentPaymentMethodDataMultibancoOptions] = None
    oxxo: Optional[PaymentIntentPaymentMethodDataOxxoOptions] = None
    p24: Optional[PaymentIntentPaymentMethodDataP24Options] = None
    paynow: Optional[PaymentIntentPaymentMethodDataPaynowOptions] = None
    paypal: Optional[PaymentIntentPaymentMethodDataPaypalOptions] = None
    pix: Optional[PaymentIntentPaymentMethodDataPixOptions] = None
    promptpay: Optional[PaymentIntentPaymentMethodDataPromptpayOptions] = None
    radar_options: Optional[PaymentIntentPaymentMethodDataRadarOptionsOptions] = None
    revolut_pay: Optional[PaymentIntentPaymentMethodDataRevolutPayOptions] = None
    sepa_debit: Optional[PaymentIntentPaymentMethodDataSepaDebitOptions] = None
    sofort: Optional[PaymentIntentPaymentMethodDataSofortOptions] = None
    swish: Optional[PaymentIntentPaymentMethodDataSwishOptions] = None
    twint: Optional[PaymentIntentPaymentMethodDataTwintOptions] = None
    type: Optional[str] = None
    us_bank_account: Optional[PaymentIntentPaymentMethodDataUsBankAccountOptions] = None
    wechat_pay: Optional[PaymentIntentPaymentMethodDataWechatPayOptions] = None
    zip: Optional[PaymentIntentPaymentMethodDataZipOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions(INestedOptions):
    custom_mandate_url: Optional[str] = None
    interval_description: Optional[str] = None
    payment_schedule: Optional[str] = None
    transaction_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAcssDebitOptions(INestedOptions):
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsAcssDebitMandateOptionsOptions] = None
    setup_future_usage: Optional[str] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAffirmOptions(INestedOptions):
    capture_method: Optional[str] = None
    preferred_locale: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions(INestedOptions):
    capture_method: Optional[str] = None
    reference: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAlipayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAmazonPayOptions(INestedOptions):
    capture_method: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAuBecsDebitOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBacsDebitOptions(INestedOptions):
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsBacsDebitMandateOptionsOptions] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBancontactOptions(INestedOptions):
    preferred_language: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBlikOptions(INestedOptions):
    code: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBoletoOptions(INestedOptions):
    expires_after_days: Optional[int] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions(INestedOptions):
    count: Optional[int] = None
    interval: Optional[str] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardInstallmentsOptions(INestedOptions):
    enabled: Optional[bool] = None
    plan: Optional[PaymentIntentPaymentMethodOptionsCardInstallmentsPlanOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions(INestedOptions):
    amount: Optional[int] = None
    amount_type: Optional[str] = None
    description: Optional[str] = None
    end_date: Optional[datetime.datetime] = None
    interval: Optional[str] = None
    interval_count: Optional[int] = None
    reference: Optional[str] = None
    start_date: Optional[datetime.datetime] = None
    supported_types: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions(INestedOptions):
    cb_avalgo: Optional[str] = None
    cb_exemption: Optional[str] = None
    cb_score: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions(INestedOptions):
    cartes_bancaires: Optional[PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsCartesBancairesOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions(INestedOptions):
    ares_trans_status: Optional[str] = None
    cryptogram: Optional[str] = None
    electronic_commerce_indicator: Optional[str] = None
    exemption_indicator: Optional[str] = None
    network_options: Optional[PaymentIntentPaymentMethodOptionsCardThreeDSecureNetworkOptionsOptions] = None
    requestor_challenge_indicator: Optional[str] = None
    transaction_id: Optional[str] = None
    version: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardOptions(INestedOptions):
    capture_method: Optional[str] = None
    cvc_token: Optional[str] = None
    installments: Optional[PaymentIntentPaymentMethodOptionsCardInstallmentsOptions] = None
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsCardMandateOptionsOptions] = None
    moto: Optional[bool] = None
    network: Optional[str] = None
    request_extended_authorization: Optional[str] = None
    request_incremental_authorization: Optional[str] = None
    request_multicapture: Optional[str] = None
    request_overcapture: Optional[str] = None
    request_three_d_secure: Optional[str] = None
    require_cvc_recollection: Optional[bool] = None
    setup_future_usage: Optional[str] = None
    statement_descriptor_suffix_kana: Optional[str] = None
    statement_descriptor_suffix_kanji: Optional[str] = None
    three_d_secure: Optional[PaymentIntentPaymentMethodOptionsCardThreeDSecureOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions(INestedOptions):
    requested_priority: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardPresentOptions(INestedOptions):
    request_extended_authorization: Optional[bool] = None
    request_incremental_authorization_support: Optional[bool] = None
    routing: Optional[PaymentIntentPaymentMethodOptionsCardPresentRoutingOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCashappOptions(INestedOptions):
    capture_method: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions(INestedOptions):
    country: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions(INestedOptions):
    eu_bank_transfer: Optional[PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransferOptions] = None
    requested_address_types: Optional[List[str]] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCustomerBalanceOptions(INestedOptions):
    bank_transfer: Optional[PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferOptions] = None
    funding_type: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsEpsOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsFpxOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsGiropayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsGrabpayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsIdealOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsInteracPresentOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsKlarnaOptions(INestedOptions):
    capture_method: Optional[str] = None
    preferred_locale: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsKonbiniOptions(INestedOptions):
    confirmation_number: Optional[str] = None
    expires_after_days: Optional[int] = None
    expires_at: Optional[datetime.datetime] = None
    product_description: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsLinkOptions(INestedOptions):
    capture_method: Optional[str] = None
    persistent_token: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsMobilepayOptions(INestedOptions):
    capture_method: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsMultibancoOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsOxxoOptions(INestedOptions):
    expires_after_days: Optional[int] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsP24Options(INestedOptions):
    setup_future_usage: Optional[str] = None
    tos_shown_and_accepted: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsPaynowOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsPaypalOptions(INestedOptions):
    capture_method: Optional[str] = None
    preferred_locale: Optional[str] = None
    reference: Optional[str] = None
    risk_correlation_id: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsPixOptions(INestedOptions):
    expires_after_seconds: Optional[int] = None
    expires_at: Optional[datetime.datetime] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsPromptpayOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsRevolutPayOptions(INestedOptions):
    capture_method: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions(INestedOptions):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsSepaDebitOptions(INestedOptions):
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsSepaDebitMandateOptionsOptions] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsSofortOptions(INestedOptions):
    preferred_language: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsSwishOptions(INestedOptions):
    reference: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsTwintOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions(INestedOptions):
    account_subcategories: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions(INestedOptions):
    filters: Optional[PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFiltersOptions] = None
    permissions: Optional[List[str]] = None
    prefetch: Optional[List[str]] = None
    return_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions(INestedOptions):
    collection_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions(INestedOptions):
    requested: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsUsBankAccountOptions(INestedOptions):
    financial_connections: Optional[PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsOptions] = None
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptionsOptions] = None
    networks: Optional[PaymentIntentPaymentMethodOptionsUsBankAccountNetworksOptions] = None
    preferred_settlement_speed: Optional[str] = None
    setup_future_usage: Optional[str] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsWechatPayOptions(INestedOptions):
    app_id: Optional[str] = None
    client: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsZipOptions(INestedOptions):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsOptions(INestedOptions):
    acss_debit: Optional[PaymentIntentPaymentMethodOptionsAcssDebitOptions] = None
    affirm: Optional[PaymentIntentPaymentMethodOptionsAffirmOptions] = None
    afterpay_clearpay: Optional[PaymentIntentPaymentMethodOptionsAfterpayClearpayOptions] = None
    alipay: Optional[PaymentIntentPaymentMethodOptionsAlipayOptions] = None
    amazon_pay: Optional[PaymentIntentPaymentMethodOptionsAmazonPayOptions] = None
    au_becs_debit: Optional[PaymentIntentPaymentMethodOptionsAuBecsDebitOptions] = None
    bacs_debit: Optional[PaymentIntentPaymentMethodOptionsBacsDebitOptions] = None
    bancontact: Optional[PaymentIntentPaymentMethodOptionsBancontactOptions] = None
    blik: Optional[PaymentIntentPaymentMethodOptionsBlikOptions] = None
    boleto: Optional[PaymentIntentPaymentMethodOptionsBoletoOptions] = None
    card: Optional[PaymentIntentPaymentMethodOptionsCardOptions] = None
    card_present: Optional[PaymentIntentPaymentMethodOptionsCardPresentOptions] = None
    cashapp: Optional[PaymentIntentPaymentMethodOptionsCashappOptions] = None
    customer_balance: Optional[PaymentIntentPaymentMethodOptionsCustomerBalanceOptions] = None
    eps: Optional[PaymentIntentPaymentMethodOptionsEpsOptions] = None
    fpx: Optional[PaymentIntentPaymentMethodOptionsFpxOptions] = None
    giropay: Optional[PaymentIntentPaymentMethodOptionsGiropayOptions] = None
    grabpay: Optional[PaymentIntentPaymentMethodOptionsGrabpayOptions] = None
    ideal: Optional[PaymentIntentPaymentMethodOptionsIdealOptions] = None
    interac_present: Optional[PaymentIntentPaymentMethodOptionsInteracPresentOptions] = None
    klarna: Optional[PaymentIntentPaymentMethodOptionsKlarnaOptions] = None
    konbini: Optional[PaymentIntentPaymentMethodOptionsKonbiniOptions] = None
    link: Optional[PaymentIntentPaymentMethodOptionsLinkOptions] = None
    mobilepay: Optional[PaymentIntentPaymentMethodOptionsMobilepayOptions] = None
    multibanco: Optional[PaymentIntentPaymentMethodOptionsMultibancoOptions] = None
    oxxo: Optional[PaymentIntentPaymentMethodOptionsOxxoOptions] = None
    p24: Optional[PaymentIntentPaymentMethodOptionsP24Options] = None
    paynow: Optional[PaymentIntentPaymentMethodOptionsPaynowOptions] = None
    paypal: Optional[PaymentIntentPaymentMethodOptionsPaypalOptions] = None
    pix: Optional[PaymentIntentPaymentMethodOptionsPixOptions] = None
    promptpay: Optional[PaymentIntentPaymentMethodOptionsPromptpayOptions] = None
    revolut_pay: Optional[PaymentIntentPaymentMethodOptionsRevolutPayOptions] = None
    sepa_debit: Optional[PaymentIntentPaymentMethodOptionsSepaDebitOptions] = None
    sofort: Optional[PaymentIntentPaymentMethodOptionsSofortOptions] = None
    swish: Optional[PaymentIntentPaymentMethodOptionsSwishOptions] = None
    twint: Optional[PaymentIntentPaymentMethodOptionsTwintOptions] = None
    us_bank_account: Optional[PaymentIntentPaymentMethodOptionsUsBankAccountOptions] = None
    wechat_pay: Optional[PaymentIntentPaymentMethodOptionsWechatPayOptions] = None
    zip: Optional[PaymentIntentPaymentMethodOptionsZipOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentRadarOptionsOptions(INestedOptions):
    session: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentTransferDataOptions(INestedOptions):
    amount: Optional[int] = None
    destination: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentCreateOptions(BaseOptions, IHasMetadata):
    amount: Optional[int] = None
    application_fee_amount: Optional[int] = None
    automatic_payment_methods: Optional[PaymentIntentAutomaticPaymentMethodsOptions] = None
    capture_method: Optional[str] = None
    confirm: Optional[bool] = None
    confirmation_method: Optional[str] = None
    confirmation_token: Optional[str] = None
    currency: Optional[str] = None
    customer: Optional[str] = None
    description: Optional[str] = None
    error_on_requires_action: Optional[bool] = None
    mandate: Optional[str] = None
    mandate_data: Optional[PaymentIntentMandateDataOptions] = None
    metadata: Optional[Dict[str, str]] = None
    off_session: Optional[bool] = None
    on_behalf_of: Optional[str] = None
    payment_method: Optional[str] = None
    payment_method_configuration: Optional[str] = None
    payment_method_data: Optional[PaymentIntentPaymentMethodDataOptions] = None
    payment_method_options: Optional[PaymentIntentPaymentMethodOptionsOptions] = None
    payment_method_types: Optional[List[str]] = None
    radar_options: Optional[PaymentIntentRadarOptionsOptions] = None
    receipt_email: Optional[str] = None
    return_url: Optional[str] = None
    setup_future_usage: Optional[str] = None
    shipping: Optional[ChargeShippingOptions] = None
    statement_descriptor: Optional[str] = None
    statement_descriptor_suffix: Optional[str] = None
    transfer_data: Optional[PaymentIntentTransferDataOptions] = None
    transfer_group: Optional[str] = None
    use_stripe_sdk: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerCashBalanceSettingsOptions(INestedOptions):
    reconciliation_mode: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerCashBalanceOptions(INestedOptions):
    settings: Optional[CustomerCashBalanceSettingsOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerInvoiceSettingsCustomFieldOptions(INestedOptions):
    name: Optional[str] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerInvoiceSettingsRenderingOptionsOptions(INestedOptions):
    amount_tax_display: Optional[str] = None
    template: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerInvoiceSettingsOptions(INestedOptions):
    custom_fields: Optional[List[CustomerInvoiceSettingsCustomFieldOptions]] = None
    default_payment_method: Optional[str] = None
    footer: Optional[str] = None
    rendering_options: Optional[CustomerInvoiceSettingsRenderingOptionsOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ShippingOptions(INestedOptions):
    address: Optional[AddressOptions] = None
    name: Optional[str] = None
    phone: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CardCreateNestedOptions(INestedOptions, IHasMetadata, IHasObject):
    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
    currency: Optional[str] = None
    cvc: Optional[str] = None
    exp_month: Optional[int] = None
    exp_year: Optional[int] = None
    metadata: Optional[Dict[str, str]] = None
    name: Optional[str] = None
    number: Optional[str] = None
    object: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerTaxOptions(INestedOptions):
    ip_address: Optional[str] = None
    validate_location: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerTaxIdDataOptions(INestedOptions):
    type: Optional[str] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerCreateOptions(BaseOptions, IHasMetadata):
    address: Optional[AddressOptions] = None
    balance: Optional[int] = None
    cash_balance: Optional[CustomerCashBalanceOptions] = None
    coupon: Optional[str] = None
    description: Optional[str] = None
    email: Optional[str] = None
    invoice_prefix: Optional[str] = None
    invoice_settings: Optional[CustomerInvoiceSettingsOptions] = None
    metadata: Optional[Dict[str, str]] = None
    name: Optional[str] = None
    next_invoice_sequence: Optional[int] = None
    payment_method: Optional[str] = None
    phone: Optional[str] = None
    plan: Optional[str] = None
    preferred_locales: Optional[List[str]] = None
    promotion_code: Optional[str] = None
    shipping: Optional[ShippingOptions] = None
    source: Optional[AnyOf2[str, CardCreateNestedOptions]] = None
    tax: Optional[CustomerTaxOptions] = None
    tax_exempt: Optional[str] = None
    tax_id_data: Optional[List[CustomerTaxIdDataOptions]] = None
    test_clock: Optional[str] = None
    validate: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCreatePaymentOptions:
    session_create_options: Optional[SessionCreateOptions] = None
    payment_intent_create_options: Optional[PaymentIntentCreateOptions] = None
    customer_create_options: Optional[CustomerCreateOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RequestOptions:
    api_key: Optional[str] = None
    idempotency_key: Optional[str] = None
    stripe_account: Optional[str] = None
    stripe_context: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeCreateCheckoutQuery:
    checkout_data: Optional[StripeCreatePaymentOptions] = None
    request_options: Optional[RequestOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionAfterExpirationRecovery(StripeEntity1["SessionAfterExpirationRecovery"]):
    allow_promotion_codes: bool = False
    enabled: bool = False
    expires_at: Optional[datetime.datetime] = None
    url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionAfterExpiration(StripeEntity1["SessionAfterExpiration"]):
    recovery: Optional[SessionAfterExpirationRecovery] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionAutomaticTaxLiability(StripeEntity1["SessionAutomaticTaxLiability"]):
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionAutomaticTax(StripeEntity1["SessionAutomaticTax"]):
    enabled: bool = False
    liability: Optional[SessionAutomaticTaxLiability] = None
    status: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionConsent(StripeEntity1["SessionConsent"]):
    promotions: Optional[str] = None
    terms_of_service: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionConsentCollectionPaymentMethodReuseAgreement(StripeEntity1["SessionConsentCollectionPaymentMethodReuseAgreement"]):
    position: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionConsentCollection(StripeEntity1["SessionConsentCollection"]):
    payment_method_reuse_agreement: Optional[SessionConsentCollectionPaymentMethodReuseAgreement] = None
    promotions: Optional[str] = None
    terms_of_service: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCurrencyConversion(StripeEntity1["SessionCurrencyConversion"]):
    amount_subtotal: int = 0
    amount_total: int = 0
    fx_rate: Decimal = decimal.Decimal(0)
    source_currency: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldDropdownOption(StripeEntity1["SessionCustomFieldDropdownOption"]):
    label: Optional[str] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldDropdown(StripeEntity1["SessionCustomFieldDropdown"]):
    default_value: Optional[str] = None
    options: Optional[List[SessionCustomFieldDropdownOption]] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldLabel(StripeEntity1["SessionCustomFieldLabel"]):
    custom: Optional[str] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldNumeric(StripeEntity1["SessionCustomFieldNumeric"]):
    default_value: Optional[str] = None
    maximum_length: Optional[int] = None
    minimum_length: Optional[int] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomFieldText(StripeEntity1["SessionCustomFieldText"]):
    default_value: Optional[str] = None
    maximum_length: Optional[int] = None
    minimum_length: Optional[int] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomField(StripeEntity1["SessionCustomField"]):
    dropdown: Optional[SessionCustomFieldDropdown] = None
    key: Optional[str] = None
    label: Optional[SessionCustomFieldLabel] = None
    numeric: Optional[SessionCustomFieldNumeric] = None
    optional: bool = False
    text: Optional[SessionCustomFieldText] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomTextAfterSubmit(StripeEntity1["SessionCustomTextAfterSubmit"]):
    message: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomTextShippingAddress(StripeEntity1["SessionCustomTextShippingAddress"]):
    message: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomTextSubmit(StripeEntity1["SessionCustomTextSubmit"]):
    message: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomTextTermsOfServiceAcceptance(StripeEntity1["SessionCustomTextTermsOfServiceAcceptance"]):
    message: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomText(StripeEntity1["SessionCustomText"]):
    after_submit: Optional[SessionCustomTextAfterSubmit] = None
    shipping_address: Optional[SessionCustomTextShippingAddress] = None
    submit: Optional[SessionCustomTextSubmit] = None
    terms_of_service_acceptance: Optional[SessionCustomTextTermsOfServiceAcceptance] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomerDetailsTaxId(StripeEntity1["SessionCustomerDetailsTaxId"]):
    type: Optional[str] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionCustomerDetails(StripeEntity1["SessionCustomerDetails"]):
    address: Optional[Address] = None
    email: Optional[str] = None
    name: Optional[str] = None
    phone: Optional[str] = None
    tax_exempt: Optional[str] = None
    tax_ids: Optional[List[SessionCustomerDetailsTaxId]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreationInvoiceDataCustomField(StripeEntity1["SessionInvoiceCreationInvoiceDataCustomField"]):
    name: Optional[str] = None
    value: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreationInvoiceDataIssuer(StripeEntity1["SessionInvoiceCreationInvoiceDataIssuer"]):
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreationInvoiceDataRenderingOptions(StripeEntity1["SessionInvoiceCreationInvoiceDataRenderingOptions"]):
    amount_tax_display: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreationInvoiceData(StripeEntity1["SessionInvoiceCreationInvoiceData"], IHasMetadata):
    custom_fields: Optional[List[SessionInvoiceCreationInvoiceDataCustomField]] = None
    description: Optional[str] = None
    footer: Optional[str] = None
    issuer: Optional[SessionInvoiceCreationInvoiceDataIssuer] = None
    metadata: Optional[Dict[str, str]] = None
    rendering_options: Optional[SessionInvoiceCreationInvoiceDataRenderingOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionInvoiceCreation(StripeEntity1["SessionInvoiceCreation"]):
    enabled: bool = False
    invoice_data: Optional[SessionInvoiceCreationInvoiceData] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CouponAppliesTo(StripeEntity1["CouponAppliesTo"]):
    products: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CouponCurrencyOptions(StripeEntity1["CouponCurrencyOptions"]):
    amount_off: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Coupon(StripeEntity1["Coupon"], IHasId, IHasMetadata, IHasObject):
    id: Optional[str] = None
    object: Optional[str] = None
    amount_off: Optional[int] = None
    applies_to: Optional[CouponAppliesTo] = None
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    currency: Optional[str] = None
    currency_options: Optional[Dict[str, CouponCurrencyOptions]] = None
    deleted: Optional[bool] = None
    duration: Optional[str] = None
    duration_in_months: Optional[int] = None
    livemode: bool = False
    max_redemptions: Optional[int] = None
    metadata: Optional[Dict[str, str]] = None
    name: Optional[str] = None
    percent_off: Optional[Decimal] = 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 Discount(StripeEntity1["Discount"], IHasId, IHasObject):
    id: Optional[str] = None
    object: Optional[str] = None
    checkout_session: Optional[str] = None
    coupon: Optional[Coupon] = None
    deleted: Optional[bool] = None
    end: Optional[datetime.datetime] = None
    invoice: Optional[str] = None
    invoice_item: Optional[str] = None
    start: datetime.datetime = datetime.datetime(1, 1, 1)
    subscription: Optional[str] = None
    subscription_item: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LineItemDiscount(StripeEntity1["LineItemDiscount"]):
    amount: int = 0
    discount: Optional[Discount] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceCurrencyOptionsCustomUnitAmount(StripeEntity1["PriceCurrencyOptionsCustomUnitAmount"]):
    maximum: Optional[int] = None
    minimum: Optional[int] = None
    preset: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceCurrencyOptionsTier(StripeEntity1["PriceCurrencyOptionsTier"]):
    flat_amount: Optional[int] = None
    flat_amount_decimal: Optional[Decimal] = None
    unit_amount: Optional[int] = None
    unit_amount_decimal: Optional[Decimal] = None
    up_to: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceCurrencyOptions(StripeEntity1["PriceCurrencyOptions"]):
    custom_unit_amount: Optional[PriceCurrencyOptionsCustomUnitAmount] = None
    tax_behavior: Optional[str] = None
    tiers: Optional[List[PriceCurrencyOptionsTier]] = None
    unit_amount: Optional[int] = None
    unit_amount_decimal: Optional[Decimal] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceCustomUnitAmount(StripeEntity1["PriceCustomUnitAmount"]):
    maximum: Optional[int] = None
    minimum: Optional[int] = None
    preset: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceRecurring(StripeEntity1["PriceRecurring"]):
    aggregate_usage: Optional[str] = None
    interval: Optional[str] = None
    interval_count: int = 0
    meter: Optional[str] = None
    trial_period_days: Optional[int] = None
    usage_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceTier(StripeEntity1["PriceTier"]):
    flat_amount: Optional[int] = None
    flat_amount_decimal: Optional[Decimal] = None
    unit_amount: Optional[int] = None
    unit_amount_decimal: Optional[Decimal] = None
    up_to: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PriceTransformQuantity(StripeEntity1["PriceTransformQuantity"]):
    divide_by: int = 0
    round: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Price(StripeEntity1["Price"], IHasId, IHasMetadata, IHasObject):
    id: Optional[str] = None
    object: Optional[str] = None
    active: bool = False
    billing_scheme: Optional[str] = None
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    currency: Optional[str] = None
    currency_options: Optional[Dict[str, PriceCurrencyOptions]] = None
    custom_unit_amount: Optional[PriceCustomUnitAmount] = None
    deleted: Optional[bool] = None
    livemode: bool = False
    lookup_key: Optional[str] = None
    metadata: Optional[Dict[str, str]] = None
    nickname: Optional[str] = None
    recurring: Optional[PriceRecurring] = None
    tax_behavior: Optional[str] = None
    tiers: Optional[List[PriceTier]] = None
    tiers_mode: Optional[str] = None
    transform_quantity: Optional[PriceTransformQuantity] = None
    type: Optional[str] = None
    unit_amount: Optional[int] = None
    unit_amount_decimal: Optional[Decimal] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class TaxRate(StripeEntity1["TaxRate"], IHasId, IHasMetadata, IHasObject):
    id: Optional[str] = None
    object: Optional[str] = None
    active: bool = False
    country: Optional[str] = None
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    description: Optional[str] = None
    display_name: Optional[str] = None
    effective_percentage: Optional[Decimal] = None
    inclusive: bool = False
    jurisdiction: Optional[str] = None
    jurisdiction_level: Optional[str] = None
    livemode: bool = False
    metadata: Optional[Dict[str, str]] = None
    percentage: Decimal = decimal.Decimal(0)
    state: Optional[str] = None
    tax_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LineItemTax(StripeEntity1["LineItemTax"]):
    amount: int = 0
    rate: Optional[TaxRate] = None
    taxability_reason: Optional[str] = None
    taxable_amount: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LineItem(StripeEntity1["LineItem"], IHasId, IHasObject):
    id: Optional[str] = None
    object: Optional[str] = None
    amount_discount: int = 0
    amount_subtotal: int = 0
    amount_tax: int = 0
    amount_total: int = 0
    currency: Optional[str] = None
    deleted: Optional[bool] = None
    description: Optional[str] = None
    discounts: Optional[List[LineItemDiscount]] = None
    price: Optional[Price] = None
    quantity: Optional[int] = None
    taxes: Optional[List[LineItemTax]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodConfigurationDetails(StripeEntity1["SessionPaymentMethodConfigurationDetails"], IHasId):
    id: Optional[str] = None
    parent: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAcssDebitMandateOptions(StripeEntity1["SessionPaymentMethodOptionsAcssDebitMandateOptions"]):
    custom_mandate_url: Optional[str] = None
    default_for: Optional[List[str]] = None
    interval_description: Optional[str] = None
    payment_schedule: Optional[str] = None
    transaction_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAcssDebit(StripeEntity1["SessionPaymentMethodOptionsAcssDebit"]):
    currency: Optional[str] = None
    mandate_options: Optional[SessionPaymentMethodOptionsAcssDebitMandateOptions] = None
    setup_future_usage: Optional[str] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAffirm(StripeEntity1["SessionPaymentMethodOptionsAffirm"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAfterpayClearpay(StripeEntity1["SessionPaymentMethodOptionsAfterpayClearpay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAlipay(StripeEntity1["SessionPaymentMethodOptionsAlipay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAmazonPay(StripeEntity1["SessionPaymentMethodOptionsAmazonPay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsAuBecsDebit(StripeEntity1["SessionPaymentMethodOptionsAuBecsDebit"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsBacsDebit(StripeEntity1["SessionPaymentMethodOptionsBacsDebit"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsBancontact(StripeEntity1["SessionPaymentMethodOptionsBancontact"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsBoleto(StripeEntity1["SessionPaymentMethodOptionsBoleto"]):
    expires_after_days: int = 0
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCardInstallments(StripeEntity1["SessionPaymentMethodOptionsCardInstallments"]):
    enabled: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCard(StripeEntity1["SessionPaymentMethodOptionsCard"]):
    installments: Optional[SessionPaymentMethodOptionsCardInstallments] = None
    request_three_d_secure: Optional[str] = None
    setup_future_usage: Optional[str] = None
    statement_descriptor_suffix_kana: Optional[str] = None
    statement_descriptor_suffix_kanji: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCashapp(StripeEntity1["SessionPaymentMethodOptionsCashapp"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer(StripeEntity1["SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer"]):
    country: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCustomerBalanceBankTransfer(StripeEntity1["SessionPaymentMethodOptionsCustomerBalanceBankTransfer"]):
    eu_bank_transfer: Optional[SessionPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer] = None
    requested_address_types: Optional[List[str]] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsCustomerBalance(StripeEntity1["SessionPaymentMethodOptionsCustomerBalance"]):
    bank_transfer: Optional[SessionPaymentMethodOptionsCustomerBalanceBankTransfer] = None
    funding_type: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsEps(StripeEntity1["SessionPaymentMethodOptionsEps"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsFpx(StripeEntity1["SessionPaymentMethodOptionsFpx"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsGiropay(StripeEntity1["SessionPaymentMethodOptionsGiropay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsGrabpay(StripeEntity1["SessionPaymentMethodOptionsGrabpay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsIdeal(StripeEntity1["SessionPaymentMethodOptionsIdeal"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsKlarna(StripeEntity1["SessionPaymentMethodOptionsKlarna"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsKonbini(StripeEntity1["SessionPaymentMethodOptionsKonbini"]):
    expires_after_days: Optional[int] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsLink(StripeEntity1["SessionPaymentMethodOptionsLink"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsMobilepay(StripeEntity1["SessionPaymentMethodOptionsMobilepay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsMultibanco(StripeEntity1["SessionPaymentMethodOptionsMultibanco"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsOxxo(StripeEntity1["SessionPaymentMethodOptionsOxxo"]):
    expires_after_days: int = 0
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsP24(StripeEntity1["SessionPaymentMethodOptionsP24"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsPaynow(StripeEntity1["SessionPaymentMethodOptionsPaynow"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsPaypal(StripeEntity1["SessionPaymentMethodOptionsPaypal"]):
    capture_method: Optional[str] = None
    preferred_locale: Optional[str] = None
    reference: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsPix(StripeEntity1["SessionPaymentMethodOptionsPix"]):
    expires_after_seconds: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsRevolutPay(StripeEntity1["SessionPaymentMethodOptionsRevolutPay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsSepaDebit(StripeEntity1["SessionPaymentMethodOptionsSepaDebit"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsSofort(StripeEntity1["SessionPaymentMethodOptionsSofort"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsSwish(StripeEntity1["SessionPaymentMethodOptionsSwish"]):
    reference: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters(StripeEntity1["SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters"]):
    account_subcategories: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsUsBankAccountFinancialConnections(StripeEntity1["SessionPaymentMethodOptionsUsBankAccountFinancialConnections"]):
    filters: Optional[SessionPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters] = None
    permissions: Optional[List[str]] = None
    prefetch: Optional[List[str]] = None
    return_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptionsUsBankAccount(StripeEntity1["SessionPaymentMethodOptionsUsBankAccount"]):
    financial_connections: Optional[SessionPaymentMethodOptionsUsBankAccountFinancialConnections] = None
    setup_future_usage: Optional[str] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPaymentMethodOptions(StripeEntity1["SessionPaymentMethodOptions"]):
    acss_debit: Optional[SessionPaymentMethodOptionsAcssDebit] = None
    affirm: Optional[SessionPaymentMethodOptionsAffirm] = None
    afterpay_clearpay: Optional[SessionPaymentMethodOptionsAfterpayClearpay] = None
    alipay: Optional[SessionPaymentMethodOptionsAlipay] = None
    amazon_pay: Optional[SessionPaymentMethodOptionsAmazonPay] = None
    au_becs_debit: Optional[SessionPaymentMethodOptionsAuBecsDebit] = None
    bacs_debit: Optional[SessionPaymentMethodOptionsBacsDebit] = None
    bancontact: Optional[SessionPaymentMethodOptionsBancontact] = None
    boleto: Optional[SessionPaymentMethodOptionsBoleto] = None
    card: Optional[SessionPaymentMethodOptionsCard] = None
    cashapp: Optional[SessionPaymentMethodOptionsCashapp] = None
    customer_balance: Optional[SessionPaymentMethodOptionsCustomerBalance] = None
    eps: Optional[SessionPaymentMethodOptionsEps] = None
    fpx: Optional[SessionPaymentMethodOptionsFpx] = None
    giropay: Optional[SessionPaymentMethodOptionsGiropay] = None
    grabpay: Optional[SessionPaymentMethodOptionsGrabpay] = None
    ideal: Optional[SessionPaymentMethodOptionsIdeal] = None
    klarna: Optional[SessionPaymentMethodOptionsKlarna] = None
    konbini: Optional[SessionPaymentMethodOptionsKonbini] = None
    link: Optional[SessionPaymentMethodOptionsLink] = None
    mobilepay: Optional[SessionPaymentMethodOptionsMobilepay] = None
    multibanco: Optional[SessionPaymentMethodOptionsMultibanco] = None
    oxxo: Optional[SessionPaymentMethodOptionsOxxo] = None
    p24: Optional[SessionPaymentMethodOptionsP24] = None
    paynow: Optional[SessionPaymentMethodOptionsPaynow] = None
    paypal: Optional[SessionPaymentMethodOptionsPaypal] = None
    pix: Optional[SessionPaymentMethodOptionsPix] = None
    revolut_pay: Optional[SessionPaymentMethodOptionsRevolutPay] = None
    sepa_debit: Optional[SessionPaymentMethodOptionsSepaDebit] = None
    sofort: Optional[SessionPaymentMethodOptionsSofort] = None
    swish: Optional[SessionPaymentMethodOptionsSwish] = None
    us_bank_account: Optional[SessionPaymentMethodOptionsUsBankAccount] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionPhoneNumberCollection(StripeEntity1["SessionPhoneNumberCollection"]):
    enabled: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionSavedPaymentMethodOptions(StripeEntity1["SessionSavedPaymentMethodOptions"]):
    allow_redisplay_filters: Optional[List[str]] = None
    payment_method_remove: Optional[str] = None
    payment_method_save: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingAddressCollection(StripeEntity1["SessionShippingAddressCollection"]):
    allowed_countries: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingCostTax(StripeEntity1["SessionShippingCostTax"]):
    amount: int = 0
    rate: Optional[TaxRate] = None
    taxability_reason: Optional[str] = None
    taxable_amount: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingCost(StripeEntity1["SessionShippingCost"]):
    amount_subtotal: int = 0
    amount_tax: int = 0
    amount_total: int = 0
    taxes: Optional[List[SessionShippingCostTax]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingDetails(StripeEntity1["SessionShippingDetails"]):
    address: Optional[Address] = None
    carrier: Optional[str] = None
    name: Optional[str] = None
    phone: Optional[str] = None
    tracking_number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionShippingOption(StripeEntity1["SessionShippingOption"]):
    shipping_amount: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionTaxIdCollection(StripeEntity1["SessionTaxIdCollection"]):
    enabled: bool = False
    required: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionTotalDetailsBreakdownDiscount(StripeEntity1["SessionTotalDetailsBreakdownDiscount"]):
    amount: int = 0
    discount: Optional[Discount] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionTotalDetailsBreakdownTax(StripeEntity1["SessionTotalDetailsBreakdownTax"]):
    amount: int = 0
    rate: Optional[TaxRate] = None
    taxability_reason: Optional[str] = None
    taxable_amount: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionTotalDetailsBreakdown(StripeEntity1["SessionTotalDetailsBreakdown"]):
    discounts: Optional[List[SessionTotalDetailsBreakdownDiscount]] = None
    taxes: Optional[List[SessionTotalDetailsBreakdownTax]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SessionTotalDetails(StripeEntity1["SessionTotalDetails"]):
    amount_discount: int = 0
    amount_shipping: Optional[int] = None
    amount_tax: int = 0
    breakdown: Optional[SessionTotalDetailsBreakdown] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Session(StripeEntity1["Session"], IHasId, IHasMetadata, IHasObject):
    id: Optional[str] = None
    object: Optional[str] = None
    after_expiration: Optional[SessionAfterExpiration] = None
    allow_promotion_codes: Optional[bool] = None
    amount_subtotal: Optional[int] = None
    amount_total: Optional[int] = None
    automatic_tax: Optional[SessionAutomaticTax] = None
    billing_address_collection: Optional[str] = None
    cancel_url: Optional[str] = None
    client_reference_id: Optional[str] = None
    client_secret: Optional[str] = None
    consent: Optional[SessionConsent] = None
    consent_collection: Optional[SessionConsentCollection] = None
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    currency: Optional[str] = None
    currency_conversion: Optional[SessionCurrencyConversion] = None
    custom_fields: Optional[List[SessionCustomField]] = None
    custom_text: Optional[SessionCustomText] = None
    customer_creation: Optional[str] = None
    customer_details: Optional[SessionCustomerDetails] = None
    customer_email: Optional[str] = None
    expires_at: datetime.datetime = datetime.datetime(1, 1, 1)
    invoice_creation: Optional[SessionInvoiceCreation] = None
    line_items: Optional[StripeList[LineItem]] = None
    livemode: bool = False
    locale: Optional[str] = None
    metadata: Optional[Dict[str, str]] = None
    mode: Optional[str] = None
    payment_method_collection: Optional[str] = None
    payment_method_configuration_details: Optional[SessionPaymentMethodConfigurationDetails] = None
    payment_method_options: Optional[SessionPaymentMethodOptions] = None
    payment_method_types: Optional[List[str]] = None
    payment_status: Optional[str] = None
    phone_number_collection: Optional[SessionPhoneNumberCollection] = None
    recovered_from: Optional[str] = None
    redirect_on_completion: Optional[str] = None
    return_url: Optional[str] = None
    saved_payment_method_options: Optional[SessionSavedPaymentMethodOptions] = None
    shipping_address_collection: Optional[SessionShippingAddressCollection] = None
    shipping_cost: Optional[SessionShippingCost] = None
    shipping_details: Optional[SessionShippingDetails] = None
    shipping_options: Optional[List[SessionShippingOption]] = None
    status: Optional[str] = None
    submit_type: Optional[str] = None
    success_url: Optional[str] = None
    tax_id_collection: Optional[SessionTaxIdCollection] = None
    total_details: Optional[SessionTotalDetails] = None
    ui_mode: Optional[str] = None
    url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentAmountDetailsTip(StripeEntity1["PaymentIntentAmountDetailsTip"]):
    amount: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentAmountDetails(StripeEntity1["PaymentIntentAmountDetails"]):
    tip: Optional[PaymentIntentAmountDetailsTip] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentAutomaticPaymentMethods(StripeEntity1["PaymentIntentAutomaticPaymentMethods"]):
    allow_redirects: Optional[str] = None
    enabled: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodAcssDebit(StripeEntity1["PaymentMethodAcssDebit"]):
    bank_name: Optional[str] = None
    fingerprint: Optional[str] = None
    institution_number: Optional[str] = None
    last4: Optional[str] = None
    transit_number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodAffirm(StripeEntity1["PaymentMethodAffirm"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodAfterpayClearpay(StripeEntity1["PaymentMethodAfterpayClearpay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodAlipay(StripeEntity1["PaymentMethodAlipay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodAmazonPay(StripeEntity1["PaymentMethodAmazonPay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodAuBecsDebit(StripeEntity1["PaymentMethodAuBecsDebit"]):
    bsb_number: Optional[str] = None
    fingerprint: Optional[str] = None
    last4: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodBacsDebit(StripeEntity1["PaymentMethodBacsDebit"]):
    fingerprint: Optional[str] = None
    last4: Optional[str] = None
    sort_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodBancontact(StripeEntity1["PaymentMethodBancontact"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodBillingDetails(StripeEntity1["PaymentMethodBillingDetails"]):
    address: Optional[Address] = None
    email: Optional[str] = None
    name: Optional[str] = None
    phone: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodBlik(StripeEntity1["PaymentMethodBlik"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodBoleto(StripeEntity1["PaymentMethodBoleto"]):
    tax_id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardChecks(StripeEntity1["PaymentMethodCardChecks"]):
    address_line1_check: Optional[str] = None
    address_postal_code_check: Optional[str] = None
    cvc_check: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline(StripeEntity1["PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline"]):
    stored_at: Optional[datetime.datetime] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt(StripeEntity1["PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt"]):
    account_type: Optional[str] = None
    application_cryptogram: Optional[str] = None
    application_preferred_name: Optional[str] = None
    authorization_code: Optional[str] = None
    authorization_response_code: Optional[str] = None
    cardholder_verification_method: Optional[str] = None
    dedicated_file_name: Optional[str] = None
    terminal_verification_results: Optional[str] = None
    transaction_status_information: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet(StripeEntity1["PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet"]):
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent(StripeEntity1["PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent"]):
    amount_authorized: Optional[int] = None
    brand: Optional[str] = None
    brand_product: Optional[str] = None
    capture_before: datetime.datetime = datetime.datetime(1, 1, 1)
    cardholder_name: Optional[str] = None
    country: Optional[str] = None
    description: Optional[str] = None
    emv_auth_data: Optional[str] = None
    exp_month: int = 0
    exp_year: int = 0
    fingerprint: Optional[str] = None
    funding: Optional[str] = None
    generated_card: Optional[str] = None
    iin: Optional[str] = None
    incremental_authorization_supported: bool = False
    issuer: Optional[str] = None
    last4: Optional[str] = None
    network: Optional[str] = None
    network_transaction_id: Optional[str] = None
    offline: Optional[PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentOffline] = None
    overcapture_supported: bool = False
    preferred_locales: Optional[List[str]] = None
    read_method: Optional[str] = None
    receipt: Optional[PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentReceipt] = None
    wallet: Optional[PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresentWallet] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardGeneratedFromPaymentMethodDetails(StripeEntity1["PaymentMethodCardGeneratedFromPaymentMethodDetails"]):
    card_present: Optional[PaymentMethodCardGeneratedFromPaymentMethodDetailsCardPresent] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardGeneratedFrom(StripeEntity1["PaymentMethodCardGeneratedFrom"]):
    charge: Optional[str] = None
    payment_method_details: Optional[PaymentMethodCardGeneratedFromPaymentMethodDetails] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardNetworks(StripeEntity1["PaymentMethodCardNetworks"]):
    available: Optional[List[str]] = None
    preferred: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardThreeDSecureUsage(StripeEntity1["PaymentMethodCardThreeDSecureUsage"]):
    supported: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardWalletAmexExpressCheckout(StripeEntity1["PaymentMethodCardWalletAmexExpressCheckout"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardWalletApplePay(StripeEntity1["PaymentMethodCardWalletApplePay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardWalletGooglePay(StripeEntity1["PaymentMethodCardWalletGooglePay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardWalletLink(StripeEntity1["PaymentMethodCardWalletLink"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardWalletMasterpass(StripeEntity1["PaymentMethodCardWalletMasterpass"]):
    billing_address: Optional[Address] = None
    email: Optional[str] = None
    name: Optional[str] = None
    shipping_address: Optional[Address] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardWalletSamsungPay(StripeEntity1["PaymentMethodCardWalletSamsungPay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardWalletVisaCheckout(StripeEntity1["PaymentMethodCardWalletVisaCheckout"]):
    billing_address: Optional[Address] = None
    email: Optional[str] = None
    name: Optional[str] = None
    shipping_address: Optional[Address] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardWallet(StripeEntity1["PaymentMethodCardWallet"]):
    amex_express_checkout: Optional[PaymentMethodCardWalletAmexExpressCheckout] = None
    apple_pay: Optional[PaymentMethodCardWalletApplePay] = None
    dynamic_last4: Optional[str] = None
    google_pay: Optional[PaymentMethodCardWalletGooglePay] = None
    link: Optional[PaymentMethodCardWalletLink] = None
    masterpass: Optional[PaymentMethodCardWalletMasterpass] = None
    samsung_pay: Optional[PaymentMethodCardWalletSamsungPay] = None
    type: Optional[str] = None
    visa_checkout: Optional[PaymentMethodCardWalletVisaCheckout] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCard(StripeEntity1["PaymentMethodCard"]):
    brand: Optional[str] = None
    checks: Optional[PaymentMethodCardChecks] = None
    country: Optional[str] = None
    description: Optional[str] = None
    display_brand: Optional[str] = None
    exp_month: int = 0
    exp_year: int = 0
    fingerprint: Optional[str] = None
    funding: Optional[str] = None
    generated_from: Optional[PaymentMethodCardGeneratedFrom] = None
    iin: Optional[str] = None
    issuer: Optional[str] = None
    last4: Optional[str] = None
    networks: Optional[PaymentMethodCardNetworks] = None
    three_d_secure_usage: Optional[PaymentMethodCardThreeDSecureUsage] = None
    wallet: Optional[PaymentMethodCardWallet] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardPresentNetworks(StripeEntity1["PaymentMethodCardPresentNetworks"]):
    available: Optional[List[str]] = None
    preferred: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardPresentOffline(StripeEntity1["PaymentMethodCardPresentOffline"]):
    stored_at: Optional[datetime.datetime] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardPresentWallet(StripeEntity1["PaymentMethodCardPresentWallet"]):
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCardPresent(StripeEntity1["PaymentMethodCardPresent"]):
    brand: Optional[str] = None
    brand_product: Optional[str] = None
    cardholder_name: Optional[str] = None
    country: Optional[str] = None
    description: Optional[str] = None
    exp_month: int = 0
    exp_year: int = 0
    fingerprint: Optional[str] = None
    funding: Optional[str] = None
    iin: Optional[str] = None
    issuer: Optional[str] = None
    last4: Optional[str] = None
    networks: Optional[PaymentMethodCardPresentNetworks] = None
    offline: Optional[PaymentMethodCardPresentOffline] = None
    preferred_locales: Optional[List[str]] = None
    read_method: Optional[str] = None
    wallet: Optional[PaymentMethodCardPresentWallet] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCashapp(StripeEntity1["PaymentMethodCashapp"]):
    buyer_id: Optional[str] = None
    cashtag: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodCustomerBalance(StripeEntity1["PaymentMethodCustomerBalance"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodEps(StripeEntity1["PaymentMethodEps"]):
    bank: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodFpx(StripeEntity1["PaymentMethodFpx"]):
    account_holder_type: Optional[str] = None
    bank: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodGiropay(StripeEntity1["PaymentMethodGiropay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodGrabpay(StripeEntity1["PaymentMethodGrabpay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodIdeal(StripeEntity1["PaymentMethodIdeal"]):
    bank: Optional[str] = None
    bic: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodInteracPresentNetworks(StripeEntity1["PaymentMethodInteracPresentNetworks"]):
    available: Optional[List[str]] = None
    preferred: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodInteracPresent(StripeEntity1["PaymentMethodInteracPresent"]):
    brand: Optional[str] = None
    cardholder_name: Optional[str] = None
    country: Optional[str] = None
    description: Optional[str] = None
    exp_month: int = 0
    exp_year: int = 0
    fingerprint: Optional[str] = None
    funding: Optional[str] = None
    iin: Optional[str] = None
    issuer: Optional[str] = None
    last4: Optional[str] = None
    networks: Optional[PaymentMethodInteracPresentNetworks] = None
    preferred_locales: Optional[List[str]] = None
    read_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodKlarnaDob(StripeEntity1["PaymentMethodKlarnaDob"]):
    day: Optional[int] = None
    month: Optional[int] = None
    year: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodKlarna(StripeEntity1["PaymentMethodKlarna"]):
    dob: Optional[PaymentMethodKlarnaDob] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodKonbini(StripeEntity1["PaymentMethodKonbini"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodLink(StripeEntity1["PaymentMethodLink"]):
    email: Optional[str] = None
    persistent_token: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodMobilepay(StripeEntity1["PaymentMethodMobilepay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodMultibanco(StripeEntity1["PaymentMethodMultibanco"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodOxxo(StripeEntity1["PaymentMethodOxxo"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodP24(StripeEntity1["PaymentMethodP24"]):
    bank: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodPaynow(StripeEntity1["PaymentMethodPaynow"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodPaypal(StripeEntity1["PaymentMethodPaypal"]):
    payer_email: Optional[str] = None
    payer_id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodPix(StripeEntity1["PaymentMethodPix"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodPromptpay(StripeEntity1["PaymentMethodPromptpay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodRadarOptions(StripeEntity1["PaymentMethodRadarOptions"]):
    session: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodRevolutPay(StripeEntity1["PaymentMethodRevolutPay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodSepaDebitGeneratedFrom(StripeEntity1["PaymentMethodSepaDebitGeneratedFrom"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodSepaDebit(StripeEntity1["PaymentMethodSepaDebit"]):
    bank_code: Optional[str] = None
    branch_code: Optional[str] = None
    country: Optional[str] = None
    fingerprint: Optional[str] = None
    generated_from: Optional[PaymentMethodSepaDebitGeneratedFrom] = None
    last4: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodSofort(StripeEntity1["PaymentMethodSofort"]):
    country: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodSwish(StripeEntity1["PaymentMethodSwish"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodTwint(StripeEntity1["PaymentMethodTwint"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodUsBankAccountNetworks(StripeEntity1["PaymentMethodUsBankAccountNetworks"]):
    preferred: Optional[str] = None
    supported: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodUsBankAccountStatusDetailsBlocked(StripeEntity1["PaymentMethodUsBankAccountStatusDetailsBlocked"]):
    network_code: Optional[str] = None
    reason: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodUsBankAccountStatusDetails(StripeEntity1["PaymentMethodUsBankAccountStatusDetails"]):
    blocked: Optional[PaymentMethodUsBankAccountStatusDetailsBlocked] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodUsBankAccount(StripeEntity1["PaymentMethodUsBankAccount"]):
    account_holder_type: Optional[str] = None
    account_type: Optional[str] = None
    bank_name: Optional[str] = None
    financial_connections_account: Optional[str] = None
    fingerprint: Optional[str] = None
    last4: Optional[str] = None
    networks: Optional[PaymentMethodUsBankAccountNetworks] = None
    routing_number: Optional[str] = None
    status_details: Optional[PaymentMethodUsBankAccountStatusDetails] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodWechatPay(StripeEntity1["PaymentMethodWechatPay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethodZip(StripeEntity1["PaymentMethodZip"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentMethod(StripeEntity1["PaymentMethod"], IHasId, IHasMetadata, IHasObject):
    id: Optional[str] = None
    object: Optional[str] = None
    acss_debit: Optional[PaymentMethodAcssDebit] = None
    affirm: Optional[PaymentMethodAffirm] = None
    afterpay_clearpay: Optional[PaymentMethodAfterpayClearpay] = None
    alipay: Optional[PaymentMethodAlipay] = None
    allow_redisplay: Optional[str] = None
    amazon_pay: Optional[PaymentMethodAmazonPay] = None
    au_becs_debit: Optional[PaymentMethodAuBecsDebit] = None
    bacs_debit: Optional[PaymentMethodBacsDebit] = None
    bancontact: Optional[PaymentMethodBancontact] = None
    billing_details: Optional[PaymentMethodBillingDetails] = None
    blik: Optional[PaymentMethodBlik] = None
    boleto: Optional[PaymentMethodBoleto] = None
    card: Optional[PaymentMethodCard] = None
    card_present: Optional[PaymentMethodCardPresent] = None
    cashapp: Optional[PaymentMethodCashapp] = None
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    customer_balance: Optional[PaymentMethodCustomerBalance] = None
    eps: Optional[PaymentMethodEps] = None
    fpx: Optional[PaymentMethodFpx] = None
    giropay: Optional[PaymentMethodGiropay] = None
    grabpay: Optional[PaymentMethodGrabpay] = None
    ideal: Optional[PaymentMethodIdeal] = None
    interac_present: Optional[PaymentMethodInteracPresent] = None
    klarna: Optional[PaymentMethodKlarna] = None
    konbini: Optional[PaymentMethodKonbini] = None
    link: Optional[PaymentMethodLink] = None
    livemode: bool = False
    metadata: Optional[Dict[str, str]] = None
    mobilepay: Optional[PaymentMethodMobilepay] = None
    multibanco: Optional[PaymentMethodMultibanco] = None
    oxxo: Optional[PaymentMethodOxxo] = None
    p24: Optional[PaymentMethodP24] = None
    paynow: Optional[PaymentMethodPaynow] = None
    paypal: Optional[PaymentMethodPaypal] = None
    pix: Optional[PaymentMethodPix] = None
    promptpay: Optional[PaymentMethodPromptpay] = None
    radar_options: Optional[PaymentMethodRadarOptions] = None
    revolut_pay: Optional[PaymentMethodRevolutPay] = None
    sepa_debit: Optional[PaymentMethodSepaDebit] = None
    sofort: Optional[PaymentMethodSofort] = None
    swish: Optional[PaymentMethodSwish] = None
    twint: Optional[PaymentMethodTwint] = None
    type: Optional[str] = None
    us_bank_account: Optional[PaymentMethodUsBankAccount] = None
    wechat_pay: Optional[PaymentMethodWechatPay] = None
    zip: Optional[PaymentMethodZip] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentAutomaticPaymentMethods(StripeEntity1["SetupIntentAutomaticPaymentMethods"]):
    allow_redirects: Optional[str] = None
    enabled: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode(StripeEntity1["SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode"]):
    expires_at: datetime.datetime = datetime.datetime(1, 1, 1)
    image_url_png: Optional[str] = None
    image_url_svg: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode(StripeEntity1["SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode"]):
    hosted_instructions_url: Optional[str] = None
    mobile_auth_url: Optional[str] = None
    qr_code: Optional[SetupIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentNextActionRedirectToUrl(StripeEntity1["SetupIntentNextActionRedirectToUrl"]):
    return_url: Optional[str] = None
    url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentNextActionUseStripeSdk(StripeEntity1["SetupIntentNextActionUseStripeSdk"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentNextActionVerifyWithMicrodeposits(StripeEntity1["SetupIntentNextActionVerifyWithMicrodeposits"]):
    arrival_date: datetime.datetime = datetime.datetime(1, 1, 1)
    hosted_verification_url: Optional[str] = None
    microdeposit_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentNextAction(StripeEntity1["SetupIntentNextAction"]):
    cashapp_handle_redirect_or_display_qr_code: Optional[SetupIntentNextActionCashappHandleRedirectOrDisplayQrCode] = None
    redirect_to_url: Optional[SetupIntentNextActionRedirectToUrl] = None
    type: Optional[str] = None
    use_stripe_sdk: Optional[SetupIntentNextActionUseStripeSdk] = None
    verify_with_microdeposits: Optional[SetupIntentNextActionVerifyWithMicrodeposits] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodConfigurationDetails(StripeEntity1["SetupIntentPaymentMethodConfigurationDetails"], IHasId):
    id: Optional[str] = None
    parent: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsAcssDebitMandateOptions(StripeEntity1["SetupIntentPaymentMethodOptionsAcssDebitMandateOptions"]):
    custom_mandate_url: Optional[str] = None
    default_for: Optional[List[str]] = None
    interval_description: Optional[str] = None
    payment_schedule: Optional[str] = None
    transaction_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsAcssDebit(StripeEntity1["SetupIntentPaymentMethodOptionsAcssDebit"]):
    currency: Optional[str] = None
    mandate_options: Optional[SetupIntentPaymentMethodOptionsAcssDebitMandateOptions] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsAmazonPay(StripeEntity1["SetupIntentPaymentMethodOptionsAmazonPay"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsBacsDebitMandateOptions(StripeEntity1["SetupIntentPaymentMethodOptionsBacsDebitMandateOptions"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsBacsDebit(StripeEntity1["SetupIntentPaymentMethodOptionsBacsDebit"]):
    mandate_options: Optional[SetupIntentPaymentMethodOptionsBacsDebitMandateOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsCardMandateOptions(StripeEntity1["SetupIntentPaymentMethodOptionsCardMandateOptions"]):
    amount: int = 0
    amount_type: Optional[str] = None
    currency: Optional[str] = None
    description: Optional[str] = None
    end_date: Optional[datetime.datetime] = None
    interval: Optional[str] = None
    interval_count: Optional[int] = None
    reference: Optional[str] = None
    start_date: datetime.datetime = datetime.datetime(1, 1, 1)
    supported_types: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsCard(StripeEntity1["SetupIntentPaymentMethodOptionsCard"]):
    mandate_options: Optional[SetupIntentPaymentMethodOptionsCardMandateOptions] = None
    network: Optional[str] = None
    request_three_d_secure: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsCardPresent(StripeEntity1["SetupIntentPaymentMethodOptionsCardPresent"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsLink(StripeEntity1["SetupIntentPaymentMethodOptionsLink"]):
    persistent_token: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsPaypal(StripeEntity1["SetupIntentPaymentMethodOptionsPaypal"]):
    billing_agreement_id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsSepaDebitMandateOptions(StripeEntity1["SetupIntentPaymentMethodOptionsSepaDebitMandateOptions"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsSepaDebit(StripeEntity1["SetupIntentPaymentMethodOptionsSepaDebit"]):
    mandate_options: Optional[SetupIntentPaymentMethodOptionsSepaDebitMandateOptions] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters(StripeEntity1["SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters"]):
    account_subcategories: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections(StripeEntity1["SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections"]):
    filters: Optional[SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters] = None
    permissions: Optional[List[str]] = None
    prefetch: Optional[List[str]] = None
    return_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions(StripeEntity1["SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions"]):
    collection_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptionsUsBankAccount(StripeEntity1["SetupIntentPaymentMethodOptionsUsBankAccount"]):
    financial_connections: Optional[SetupIntentPaymentMethodOptionsUsBankAccountFinancialConnections] = None
    mandate_options: Optional[SetupIntentPaymentMethodOptionsUsBankAccountMandateOptions] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntentPaymentMethodOptions(StripeEntity1["SetupIntentPaymentMethodOptions"]):
    acss_debit: Optional[SetupIntentPaymentMethodOptionsAcssDebit] = None
    amazon_pay: Optional[SetupIntentPaymentMethodOptionsAmazonPay] = None
    bacs_debit: Optional[SetupIntentPaymentMethodOptionsBacsDebit] = None
    card: Optional[SetupIntentPaymentMethodOptionsCard] = None
    card_present: Optional[SetupIntentPaymentMethodOptionsCardPresent] = None
    link: Optional[SetupIntentPaymentMethodOptionsLink] = None
    paypal: Optional[SetupIntentPaymentMethodOptionsPaypal] = None
    sepa_debit: Optional[SetupIntentPaymentMethodOptionsSepaDebit] = None
    us_bank_account: Optional[SetupIntentPaymentMethodOptionsUsBankAccount] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SetupIntent(StripeEntity1["SetupIntent"], IHasId, IHasMetadata, IHasObject):
    id: Optional[str] = None
    object: Optional[str] = None
    attach_to_self: bool = False
    automatic_payment_methods: Optional[SetupIntentAutomaticPaymentMethods] = None
    cancellation_reason: Optional[str] = None
    client_secret: Optional[str] = None
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    description: Optional[str] = None
    flow_directions: Optional[List[str]] = None
    last_setup_error: Optional[StripeError] = None
    livemode: bool = False
    metadata: Optional[Dict[str, str]] = None
    next_action: Optional[SetupIntentNextAction] = None
    payment_method_configuration_details: Optional[SetupIntentPaymentMethodConfigurationDetails] = None
    payment_method_options: Optional[SetupIntentPaymentMethodOptions] = None
    payment_method_types: Optional[List[str]] = None
    status: Optional[str] = None
    usage: Optional[str] = None


class IPaymentSource(IStripeEntity, IHasId, IHasObject):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeError(StripeEntity1["StripeError"]):
    charge: Optional[str] = None
    code: Optional[str] = None
    decline_code: Optional[str] = None
    doc_url: Optional[str] = None
    message: Optional[str] = None
    param: Optional[str] = None
    payment_intent: Optional[PaymentIntent] = None
    payment_method: Optional[PaymentMethod] = None
    payment_method_type: Optional[str] = None
    request_log_url: Optional[str] = None
    setup_intent: Optional[SetupIntent] = None
    source: Optional[IPaymentSource] = None
    type: Optional[str] = None
    error: Optional[str] = None
    error_description: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionAlipayHandleRedirect(StripeEntity1["PaymentIntentNextActionAlipayHandleRedirect"]):
    native_data: Optional[str] = None
    native_url: Optional[str] = None
    return_url: Optional[str] = None
    url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionBoletoDisplayDetails(StripeEntity1["PaymentIntentNextActionBoletoDisplayDetails"]):
    expires_at: Optional[datetime.datetime] = None
    hosted_voucher_url: Optional[str] = None
    number: Optional[str] = None
    pdf: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionCardAwaitNotification(StripeEntity1["PaymentIntentNextActionCardAwaitNotification"]):
    charge_attempt_at: Optional[datetime.datetime] = None
    customer_approval_required: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode(StripeEntity1["PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode"]):
    expires_at: datetime.datetime = datetime.datetime(1, 1, 1)
    image_url_png: Optional[str] = None
    image_url_svg: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode(StripeEntity1["PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode"]):
    hosted_instructions_url: Optional[str] = None
    mobile_auth_url: Optional[str] = None
    qr_code: Optional[PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCodeQrCode] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba(StripeEntity1["PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba"]):
    account_number: Optional[str] = None
    bank_name: Optional[str] = None
    routing_number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban(StripeEntity1["PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban"]):
    account_holder_name: Optional[str] = None
    bic: Optional[str] = None
    country: Optional[str] = None
    iban: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode(StripeEntity1["PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode"]):
    account_holder_name: Optional[str] = None
    account_number: Optional[str] = None
    sort_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei(StripeEntity1["PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei"]):
    bank_code: Optional[str] = None
    bank_name: Optional[str] = None
    clabe: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift(StripeEntity1["PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift"]):
    account_number: Optional[str] = None
    bank_name: Optional[str] = None
    swift_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin(StripeEntity1["PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin"]):
    account_holder_name: Optional[str] = None
    account_number: Optional[str] = None
    account_type: Optional[str] = None
    bank_code: Optional[str] = None
    bank_name: Optional[str] = None
    branch_code: Optional[str] = None
    branch_name: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress(StripeEntity1["PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress"]):
    aba: Optional[PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressAba] = None
    iban: Optional[PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressIban] = None
    sort_code: Optional[PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSortCode] = None
    spei: Optional[PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSpei] = None
    supported_networks: Optional[List[str]] = None
    swift: Optional[PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressSwift] = None
    type: Optional[str] = None
    zengin: Optional[PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddressZengin] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionDisplayBankTransferInstructions(StripeEntity1["PaymentIntentNextActionDisplayBankTransferInstructions"]):
    amount_remaining: Optional[int] = None
    currency: Optional[str] = None
    financial_addresses: Optional[List[PaymentIntentNextActionDisplayBankTransferInstructionsFinancialAddress]] = None
    hosted_instructions_url: Optional[str] = None
    reference: Optional[str] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart(StripeEntity1["PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart"]):
    confirmation_number: Optional[str] = None
    payment_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson(StripeEntity1["PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson"]):
    confirmation_number: Optional[str] = None
    payment_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop(StripeEntity1["PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop"]):
    confirmation_number: Optional[str] = None
    payment_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart(StripeEntity1["PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart"]):
    confirmation_number: Optional[str] = None
    payment_code: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionKonbiniDisplayDetailsStores(StripeEntity1["PaymentIntentNextActionKonbiniDisplayDetailsStores"]):
    familymart: Optional[PaymentIntentNextActionKonbiniDisplayDetailsStoresFamilymart] = None
    lawson: Optional[PaymentIntentNextActionKonbiniDisplayDetailsStoresLawson] = None
    ministop: Optional[PaymentIntentNextActionKonbiniDisplayDetailsStoresMinistop] = None
    seicomart: Optional[PaymentIntentNextActionKonbiniDisplayDetailsStoresSeicomart] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionKonbiniDisplayDetails(StripeEntity1["PaymentIntentNextActionKonbiniDisplayDetails"]):
    expires_at: datetime.datetime = datetime.datetime(1, 1, 1)
    hosted_voucher_url: Optional[str] = None
    stores: Optional[PaymentIntentNextActionKonbiniDisplayDetailsStores] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionMultibancoDisplayDetails(StripeEntity1["PaymentIntentNextActionMultibancoDisplayDetails"]):
    entity: Optional[str] = None
    expires_at: Optional[datetime.datetime] = None
    hosted_voucher_url: Optional[str] = None
    reference: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionOxxoDisplayDetails(StripeEntity1["PaymentIntentNextActionOxxoDisplayDetails"]):
    expires_after: Optional[datetime.datetime] = None
    hosted_voucher_url: Optional[str] = None
    number: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionPaynowDisplayQrCode(StripeEntity1["PaymentIntentNextActionPaynowDisplayQrCode"]):
    data: Optional[str] = None
    hosted_instructions_url: Optional[str] = None
    image_url_png: Optional[str] = None
    image_url_svg: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionPixDisplayQrCode(StripeEntity1["PaymentIntentNextActionPixDisplayQrCode"]):
    data: Optional[str] = None
    expires_at: datetime.datetime = datetime.datetime(1, 1, 1)
    hosted_instructions_url: Optional[str] = None
    image_url_png: Optional[str] = None
    image_url_svg: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionPromptpayDisplayQrCode(StripeEntity1["PaymentIntentNextActionPromptpayDisplayQrCode"]):
    data: Optional[str] = None
    hosted_instructions_url: Optional[str] = None
    image_url_png: Optional[str] = None
    image_url_svg: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionRedirectToUrl(StripeEntity1["PaymentIntentNextActionRedirectToUrl"]):
    return_url: Optional[str] = None
    url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode(StripeEntity1["PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode"]):
    data: Optional[str] = None
    image_url_png: Optional[str] = None
    image_url_svg: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode(StripeEntity1["PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode"]):
    hosted_instructions_url: Optional[str] = None
    mobile_auth_url: Optional[str] = None
    qr_code: Optional[PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCodeQrCode] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionUseStripeSdk(StripeEntity1["PaymentIntentNextActionUseStripeSdk"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionVerifyWithMicrodeposits(StripeEntity1["PaymentIntentNextActionVerifyWithMicrodeposits"]):
    arrival_date: datetime.datetime = datetime.datetime(1, 1, 1)
    hosted_verification_url: Optional[str] = None
    microdeposit_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionWechatPayDisplayQrCode(StripeEntity1["PaymentIntentNextActionWechatPayDisplayQrCode"]):
    data: Optional[str] = None
    hosted_instructions_url: Optional[str] = None
    image_data_url: Optional[str] = None
    image_url_png: Optional[str] = None
    image_url_svg: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionWechatPayRedirectToAndroidApp(StripeEntity1["PaymentIntentNextActionWechatPayRedirectToAndroidApp"]):
    app_id: Optional[str] = None
    nonce_str: Optional[str] = None
    package: Optional[str] = None
    partner_id: Optional[str] = None
    prepay_id: Optional[str] = None
    sign: Optional[str] = None
    timestamp: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextActionWechatPayRedirectToIosApp(StripeEntity1["PaymentIntentNextActionWechatPayRedirectToIosApp"]):
    native_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentNextAction(StripeEntity1["PaymentIntentNextAction"]):
    alipay_handle_redirect: Optional[PaymentIntentNextActionAlipayHandleRedirect] = None
    boleto_display_details: Optional[PaymentIntentNextActionBoletoDisplayDetails] = None
    card_await_notification: Optional[PaymentIntentNextActionCardAwaitNotification] = None
    cashapp_handle_redirect_or_display_qr_code: Optional[PaymentIntentNextActionCashappHandleRedirectOrDisplayQrCode] = None
    display_bank_transfer_instructions: Optional[PaymentIntentNextActionDisplayBankTransferInstructions] = None
    konbini_display_details: Optional[PaymentIntentNextActionKonbiniDisplayDetails] = None
    multibanco_display_details: Optional[PaymentIntentNextActionMultibancoDisplayDetails] = None
    oxxo_display_details: Optional[PaymentIntentNextActionOxxoDisplayDetails] = None
    paynow_display_qr_code: Optional[PaymentIntentNextActionPaynowDisplayQrCode] = None
    pix_display_qr_code: Optional[PaymentIntentNextActionPixDisplayQrCode] = None
    promptpay_display_qr_code: Optional[PaymentIntentNextActionPromptpayDisplayQrCode] = None
    redirect_to_url: Optional[PaymentIntentNextActionRedirectToUrl] = None
    swish_handle_redirect_or_display_qr_code: Optional[PaymentIntentNextActionSwishHandleRedirectOrDisplayQrCode] = None
    type: Optional[str] = None
    use_stripe_sdk: Optional[PaymentIntentNextActionUseStripeSdk] = None
    verify_with_microdeposits: Optional[PaymentIntentNextActionVerifyWithMicrodeposits] = None
    wechat_pay_display_qr_code: Optional[PaymentIntentNextActionWechatPayDisplayQrCode] = None
    wechat_pay_redirect_to_android_app: Optional[PaymentIntentNextActionWechatPayRedirectToAndroidApp] = None
    wechat_pay_redirect_to_ios_app: Optional[PaymentIntentNextActionWechatPayRedirectToIosApp] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodConfigurationDetails(StripeEntity1["PaymentIntentPaymentMethodConfigurationDetails"], IHasId):
    id: Optional[str] = None
    parent: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions(StripeEntity1["PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions"]):
    custom_mandate_url: Optional[str] = None
    interval_description: Optional[str] = None
    payment_schedule: Optional[str] = None
    transaction_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAcssDebit(StripeEntity1["PaymentIntentPaymentMethodOptionsAcssDebit"]):
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsAcssDebitMandateOptions] = None
    setup_future_usage: Optional[str] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAffirm(StripeEntity1["PaymentIntentPaymentMethodOptionsAffirm"]):
    capture_method: Optional[str] = None
    preferred_locale: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAfterpayClearpay(StripeEntity1["PaymentIntentPaymentMethodOptionsAfterpayClearpay"]):
    capture_method: Optional[str] = None
    reference: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAlipay(StripeEntity1["PaymentIntentPaymentMethodOptionsAlipay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAmazonPay(StripeEntity1["PaymentIntentPaymentMethodOptionsAmazonPay"]):
    capture_method: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsAuBecsDebit(StripeEntity1["PaymentIntentPaymentMethodOptionsAuBecsDebit"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions(StripeEntity1["PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBacsDebit(StripeEntity1["PaymentIntentPaymentMethodOptionsBacsDebit"]):
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsBacsDebitMandateOptions] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBancontact(StripeEntity1["PaymentIntentPaymentMethodOptionsBancontact"]):
    preferred_language: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBlik(StripeEntity1["PaymentIntentPaymentMethodOptionsBlik"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsBoleto(StripeEntity1["PaymentIntentPaymentMethodOptionsBoleto"]):
    expires_after_days: int = 0
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardInstallmentsPlan(StripeEntity1["PaymentIntentPaymentMethodOptionsCardInstallmentsPlan"]):
    count: Optional[int] = None
    interval: Optional[str] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardInstallments(StripeEntity1["PaymentIntentPaymentMethodOptionsCardInstallments"]):
    available_plans: Optional[List[PaymentIntentPaymentMethodOptionsCardInstallmentsPlan]] = None
    enabled: bool = False
    plan: Optional[PaymentIntentPaymentMethodOptionsCardInstallmentsPlan] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardMandateOptions(StripeEntity1["PaymentIntentPaymentMethodOptionsCardMandateOptions"]):
    amount: int = 0
    amount_type: Optional[str] = None
    description: Optional[str] = None
    end_date: Optional[datetime.datetime] = None
    interval: Optional[str] = None
    interval_count: Optional[int] = None
    reference: Optional[str] = None
    start_date: datetime.datetime = datetime.datetime(1, 1, 1)
    supported_types: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCard(StripeEntity1["PaymentIntentPaymentMethodOptionsCard"]):
    capture_method: Optional[str] = None
    installments: Optional[PaymentIntentPaymentMethodOptionsCardInstallments] = None
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsCardMandateOptions] = None
    network: Optional[str] = None
    request_extended_authorization: Optional[str] = None
    request_incremental_authorization: Optional[str] = None
    request_multicapture: Optional[str] = None
    request_overcapture: Optional[str] = None
    request_three_d_secure: Optional[str] = None
    require_cvc_recollection: bool = False
    setup_future_usage: Optional[str] = None
    statement_descriptor_suffix_kana: Optional[str] = None
    statement_descriptor_suffix_kanji: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardPresentRouting(StripeEntity1["PaymentIntentPaymentMethodOptionsCardPresentRouting"]):
    requested_priority: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCardPresent(StripeEntity1["PaymentIntentPaymentMethodOptionsCardPresent"]):
    request_extended_authorization: Optional[bool] = None
    request_incremental_authorization_support: Optional[bool] = None
    routing: Optional[PaymentIntentPaymentMethodOptionsCardPresentRouting] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCashapp(StripeEntity1["PaymentIntentPaymentMethodOptionsCashapp"]):
    capture_method: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer(StripeEntity1["PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer"]):
    country: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer(StripeEntity1["PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer"]):
    eu_bank_transfer: Optional[PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransferEuBankTransfer] = None
    requested_address_types: Optional[List[str]] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsCustomerBalance(StripeEntity1["PaymentIntentPaymentMethodOptionsCustomerBalance"]):
    bank_transfer: Optional[PaymentIntentPaymentMethodOptionsCustomerBalanceBankTransfer] = None
    funding_type: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsEps(StripeEntity1["PaymentIntentPaymentMethodOptionsEps"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsFpx(StripeEntity1["PaymentIntentPaymentMethodOptionsFpx"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsGiropay(StripeEntity1["PaymentIntentPaymentMethodOptionsGiropay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsGrabpay(StripeEntity1["PaymentIntentPaymentMethodOptionsGrabpay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsIdeal(StripeEntity1["PaymentIntentPaymentMethodOptionsIdeal"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsInteracPresent(StripeEntity1["PaymentIntentPaymentMethodOptionsInteracPresent"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsKlarna(StripeEntity1["PaymentIntentPaymentMethodOptionsKlarna"]):
    capture_method: Optional[str] = None
    preferred_locale: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsKonbini(StripeEntity1["PaymentIntentPaymentMethodOptionsKonbini"]):
    confirmation_number: Optional[str] = None
    expires_after_days: Optional[int] = None
    expires_at: Optional[datetime.datetime] = None
    product_description: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsLink(StripeEntity1["PaymentIntentPaymentMethodOptionsLink"]):
    capture_method: Optional[str] = None
    persistent_token: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsMobilepay(StripeEntity1["PaymentIntentPaymentMethodOptionsMobilepay"]):
    capture_method: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsMultibanco(StripeEntity1["PaymentIntentPaymentMethodOptionsMultibanco"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsOxxo(StripeEntity1["PaymentIntentPaymentMethodOptionsOxxo"]):
    expires_after_days: int = 0
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsP24(StripeEntity1["PaymentIntentPaymentMethodOptionsP24"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsPaynow(StripeEntity1["PaymentIntentPaymentMethodOptionsPaynow"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsPaypal(StripeEntity1["PaymentIntentPaymentMethodOptionsPaypal"]):
    capture_method: Optional[str] = None
    preferred_locale: Optional[str] = None
    reference: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsPix(StripeEntity1["PaymentIntentPaymentMethodOptionsPix"]):
    expires_after_seconds: Optional[int] = None
    expires_at: Optional[datetime.datetime] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsPromptpay(StripeEntity1["PaymentIntentPaymentMethodOptionsPromptpay"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsRevolutPay(StripeEntity1["PaymentIntentPaymentMethodOptionsRevolutPay"]):
    capture_method: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions(StripeEntity1["PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions"]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsSepaDebit(StripeEntity1["PaymentIntentPaymentMethodOptionsSepaDebit"]):
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsSepaDebitMandateOptions] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsSofort(StripeEntity1["PaymentIntentPaymentMethodOptionsSofort"]):
    preferred_language: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsSwish(StripeEntity1["PaymentIntentPaymentMethodOptionsSwish"]):
    reference: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsTwint(StripeEntity1["PaymentIntentPaymentMethodOptionsTwint"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters(StripeEntity1["PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters"]):
    account_subcategories: Optional[List[str]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections(StripeEntity1["PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections"]):
    filters: Optional[PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnectionsFilters] = None
    permissions: Optional[List[str]] = None
    prefetch: Optional[List[str]] = None
    return_url: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions(StripeEntity1["PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions"]):
    collection_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsUsBankAccount(StripeEntity1["PaymentIntentPaymentMethodOptionsUsBankAccount"]):
    financial_connections: Optional[PaymentIntentPaymentMethodOptionsUsBankAccountFinancialConnections] = None
    mandate_options: Optional[PaymentIntentPaymentMethodOptionsUsBankAccountMandateOptions] = None
    preferred_settlement_speed: Optional[str] = None
    setup_future_usage: Optional[str] = None
    verification_method: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsWechatPay(StripeEntity1["PaymentIntentPaymentMethodOptionsWechatPay"]):
    app_id: Optional[str] = None
    client: Optional[str] = None
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptionsZip(StripeEntity1["PaymentIntentPaymentMethodOptionsZip"]):
    setup_future_usage: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentPaymentMethodOptions(StripeEntity1["PaymentIntentPaymentMethodOptions"]):
    acss_debit: Optional[PaymentIntentPaymentMethodOptionsAcssDebit] = None
    affirm: Optional[PaymentIntentPaymentMethodOptionsAffirm] = None
    afterpay_clearpay: Optional[PaymentIntentPaymentMethodOptionsAfterpayClearpay] = None
    alipay: Optional[PaymentIntentPaymentMethodOptionsAlipay] = None
    amazon_pay: Optional[PaymentIntentPaymentMethodOptionsAmazonPay] = None
    au_becs_debit: Optional[PaymentIntentPaymentMethodOptionsAuBecsDebit] = None
    bacs_debit: Optional[PaymentIntentPaymentMethodOptionsBacsDebit] = None
    bancontact: Optional[PaymentIntentPaymentMethodOptionsBancontact] = None
    blik: Optional[PaymentIntentPaymentMethodOptionsBlik] = None
    boleto: Optional[PaymentIntentPaymentMethodOptionsBoleto] = None
    card: Optional[PaymentIntentPaymentMethodOptionsCard] = None
    card_present: Optional[PaymentIntentPaymentMethodOptionsCardPresent] = None
    cashapp: Optional[PaymentIntentPaymentMethodOptionsCashapp] = None
    customer_balance: Optional[PaymentIntentPaymentMethodOptionsCustomerBalance] = None
    eps: Optional[PaymentIntentPaymentMethodOptionsEps] = None
    fpx: Optional[PaymentIntentPaymentMethodOptionsFpx] = None
    giropay: Optional[PaymentIntentPaymentMethodOptionsGiropay] = None
    grabpay: Optional[PaymentIntentPaymentMethodOptionsGrabpay] = None
    ideal: Optional[PaymentIntentPaymentMethodOptionsIdeal] = None
    interac_present: Optional[PaymentIntentPaymentMethodOptionsInteracPresent] = None
    klarna: Optional[PaymentIntentPaymentMethodOptionsKlarna] = None
    konbini: Optional[PaymentIntentPaymentMethodOptionsKonbini] = None
    link: Optional[PaymentIntentPaymentMethodOptionsLink] = None
    mobilepay: Optional[PaymentIntentPaymentMethodOptionsMobilepay] = None
    multibanco: Optional[PaymentIntentPaymentMethodOptionsMultibanco] = None
    oxxo: Optional[PaymentIntentPaymentMethodOptionsOxxo] = None
    p24: Optional[PaymentIntentPaymentMethodOptionsP24] = None
    paynow: Optional[PaymentIntentPaymentMethodOptionsPaynow] = None
    paypal: Optional[PaymentIntentPaymentMethodOptionsPaypal] = None
    pix: Optional[PaymentIntentPaymentMethodOptionsPix] = None
    promptpay: Optional[PaymentIntentPaymentMethodOptionsPromptpay] = None
    revolut_pay: Optional[PaymentIntentPaymentMethodOptionsRevolutPay] = None
    sepa_debit: Optional[PaymentIntentPaymentMethodOptionsSepaDebit] = None
    sofort: Optional[PaymentIntentPaymentMethodOptionsSofort] = None
    swish: Optional[PaymentIntentPaymentMethodOptionsSwish] = None
    twint: Optional[PaymentIntentPaymentMethodOptionsTwint] = None
    us_bank_account: Optional[PaymentIntentPaymentMethodOptionsUsBankAccount] = None
    wechat_pay: Optional[PaymentIntentPaymentMethodOptionsWechatPay] = None
    zip: Optional[PaymentIntentPaymentMethodOptionsZip] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentProcessingCardCustomerNotification(StripeEntity1["PaymentIntentProcessingCardCustomerNotification"]):
    approval_requested: Optional[bool] = None
    completes_at: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentProcessingCard(StripeEntity1["PaymentIntentProcessingCard"]):
    customer_notification: Optional[PaymentIntentProcessingCardCustomerNotification] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentProcessing(StripeEntity1["PaymentIntentProcessing"]):
    card: Optional[PaymentIntentProcessingCard] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntentTransferData(StripeEntity1["PaymentIntentTransferData"]):
    amount: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentIntent(StripeEntity1["PaymentIntent"], IHasId, IHasMetadata, IHasObject):
    id: Optional[str] = None
    object: Optional[str] = None
    amount: int = 0
    amount_capturable: int = 0
    amount_details: Optional[PaymentIntentAmountDetails] = None
    amount_received: int = 0
    application_fee_amount: Optional[int] = None
    automatic_payment_methods: Optional[PaymentIntentAutomaticPaymentMethods] = None
    canceled_at: Optional[datetime.datetime] = None
    cancellation_reason: Optional[str] = None
    capture_method: Optional[str] = None
    client_secret: Optional[str] = None
    confirmation_method: Optional[str] = None
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    currency: Optional[str] = None
    description: Optional[str] = None
    last_payment_error: Optional[StripeError] = None
    livemode: bool = False
    metadata: Optional[Dict[str, str]] = None
    next_action: Optional[PaymentIntentNextAction] = None
    payment_method_configuration_details: Optional[PaymentIntentPaymentMethodConfigurationDetails] = None
    payment_method_options: Optional[PaymentIntentPaymentMethodOptions] = None
    payment_method_types: Optional[List[str]] = None
    processing: Optional[PaymentIntentProcessing] = None
    receipt_email: Optional[str] = None
    setup_future_usage: Optional[str] = None
    shipping: Optional[Shipping] = None
    statement_descriptor: Optional[str] = None
    statement_descriptor_suffix: Optional[str] = None
    status: Optional[str] = None
    transfer_data: Optional[PaymentIntentTransferData] = None
    transfer_group: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomSessionData:
    session: Optional[Session] = None
    line_items: Optional[List[LineItem]] = None
    payment_intent: Optional[PaymentIntent] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomPaymentIntentData:
    payment_intent: Optional[PaymentIntent] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomCheckoutData:
    custom_session_data: Optional[CustomSessionData] = None
    custom_payment_intent_data: Optional[CustomPaymentIntentData] = None


class IPaysonPaymentCheckout1:
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentLog(BaseModel):
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    currency_info: Optional[Currency] = None
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    internal_reference_id: Optional[str] = None

    # @Required()
    article_type_id: int = 0

    payment_reference_id: Optional[str] = None
    payment_provider_id: Optional[int] = None
    order_item_reference_id: Optional[str] = None
    amount: Optional[float] = None
    vat: Optional[Decimal] = None
    amount_credited: Optional[float] = None
    comments: Optional[str] = None
    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PayableEntity(BaseModel):
    # @Ignore()
    db_factory: Optional[IDbConnectionFactory] = None

    # @Ignore()
    qvickly_payment_manager: Optional[IBokameraPaymentManager[InitCheckoutRequestBody, QvicklyCheckoutResponse, QvicklyPaymentResponse]] = None

    # @Ignore()
    payson2_payment_manager: Optional[IBokameraPaymentManager[Payson2CheckoutResponse, Payson2CheckoutResponse, Payson2CheckoutResponse]] = None

    # @Ignore()
    stripe_payment_manager: Optional[IBokameraPaymentManager[StripeCreateCheckoutQuery, CustomCheckoutData, CustomCheckoutData]] = None

    # @Ignore()
    payson_payment_checkout1: Optional[IPaysonPaymentCheckout1] = None

    # @Ignore()
    logger: Optional[ILogger[PayableEntity]] = None

    # @Ignore()
    internal_reference_id: Optional[str] = None

    # @Ignore()
    payment_log: Optional[List[PaymentLog]] = None

    company_id: Optional[str] = None
    price_vat: Optional[Decimal] = None
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    # @Ignore()
    customer: Optional[Customer] = None

    # @Ignore()
    customers: Optional[List[Customer]] = None

    # @Ignore()
    company: Optional[Company] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeStatus(BaseModel):
    # @Required()
    name: Optional[str] = None

    description: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ArticleServiceRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    service_id: int = 0

    # @Required()
    article_id: int = 0


class ArticleTypeEnum(IntEnum):
    SERVICE_ARTICLE = 1
    STAND_ALONE_ARTICLE = 2
    REBATE_CODE_PUNCH_TICKET_ARTICLE = 3
    REBATE_CODE_GIFT_CARD_ARTICLE = 4
    REBATE_CODE_VALUE_CARD_ARTICLE = 5


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Article(BaseModel, IBaseModelCreated, IBaseModelUpdated):
    company: Optional[Company] = None
    currency_info: Optional[Currency] = None
    article_service_relations: Optional[List[ArticleServiceRelation]] = None
    # @Ignore()
    service_ids: Optional[List[int]] = None

    # @Ignore()
    article_type: Optional[ArticleTypeEnum] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    name: Optional[str] = None

    # @Required()
    article_type_id: int = 0

    description: Optional[str] = None
    image_url: Optional[str] = None
    # @Required()
    active: bool = False

    # @Required()
    amount: int = 0

    # @Required()
    price: float = 0.0

    vat: Optional[Decimal] = None
    # @Required()
    # @StringLength(50)
    currency_id: Optional[str] = None

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeDayOfWeekRelation(BaseModel):
    # @Ignore()
    day_of_week: Optional[BokaMeraDayOfWeek] = None

    # @Required()
    day_of_week_id: int = 0

    # @Required()
    rebate_code_id: int = 0

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeServiceRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    service_id: int = 0

    # @Required()
    rebate_code_id: int = 0

    id: int = 0
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeBookingPriceRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    price_id: int = 0

    # @Required()
    rebate_code_id: int = 0

    id: int = 0
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeCustomerRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    customer_id: Optional[str] = None

    # @Required()
    rebate_code_id: int = 0

    id: int = 0
    modified_date: Optional[datetime.datetime] = None
    rebate_code_email_sent_to_customer: bool = False
    message_to_receiver: Optional[str] = None
    buyer: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DaysOfWeek(BaseModel):
    # @Required()
    day_of_week: Optional[str] = None

    # @Required()
    day_of_week_translation: Optional[str] = None

    day_of_week_active: Optional[bool] = None
    day_of_week_sort_order: Optional[int] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CalendarExport(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    booking_id: int = 0

    # @Required()
    exception_id: int = 0

    calendar_sync: Optional[bool] = None
    calendar_id: Optional[str] = None
    is_exception_deleted: Optional[bool] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingLogEventType(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingLog(BaseModel):
    # @References(typeof(BookingLogEventType))
    event_type_id: int = 0

    event_type: Optional[BookingLogEventType] = None
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    booking_id: int = 0

    id: int = 0
    comments: Optional[str] = None
    user_id: Optional[str] = None
    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentDetails(BaseModel, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    qvickly_checkout_serialized: Optional[QvicklyCheckoutResponse] = None

    # @Ignore()
    payson2_checkout_serialized: Optional[Payson2CheckoutResponse] = None

    # @Ignore()
    stripe_checkout_serialized: Optional[CustomCheckoutData] = None

    # @Required()
    company_id: Optional[str] = None

    # @Required()
    internal_reference_id: Optional[str] = None

    # @Required()
    article_type_id: int = 0

    # @Required()
    external_response_data: Optional[str] = None

    # @Required()
    external_response_reference: Optional[str] = None

    # @Required()
    payment_provider_id: int = 0

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingPrice(BaseModel):
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    service_price_id: Optional[int] = None
    service_price: Optional[ServicePrice] = None
    currency_info: Optional[Currency] = None
    # @Ignore()
    price_text: Optional[str] = None

    # @Ignore()
    applied_codes: Optional[List[AppliedRebateCodes]] = None

    # @Ignore()
    is_rebate: bool = False

    # @Required()
    company_id: Optional[str] = None

    # @Required()
    booking_id: int = 0

    # @Required()
    quantity: int = 0

    price: Optional[float] = None
    vat: Optional[Decimal] = None
    category: Optional[str] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    invoiced: bool = False

    # @Required()
    occupies_spot: bool = False

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingStatus(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    color: Optional[str] = None

    # @Required()
    icon: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookedResource:
    id: int = 0
    name: Optional[str] = None
    color: Optional[str] = None
    image_url: Optional[str] = None
    email: Optional[str] = None
    mobile_phone: Optional[str] = None
    access_group: Optional[str] = None
    email_notification: bool = False
    sms_notification: bool = False
    email_reminder: bool = False
    sms_reminder: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookedResourceType:
    # @ApiMember(Description="The resource type id")
    id: int = 0
    """
    The resource type id
    """


    # @ApiMember(Description="The resource type name")
    name: Optional[str] = None
    """
    The resource type name
    """


    # @ApiMember(Description="The resources inside resource type")
    resources: Optional[List[BookedResource]] = None
    """
    The resources inside resource type
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Booking(PayableEntity, IInterval, ICustomFieldTable, IBaseModelUpdated, IBaseModelCreated):
    # @Ignore()
    service: Optional[Service] = None

    # @Ignore()
    calendar_export: Optional[CalendarExport] = None

    # @Ignore()
    log: Optional[List[BookingLog]] = None

    # @Ignore()
    checkout_logs: Optional[List[PaymentDetails]] = None

    # @Ignore()
    prices: Optional[List[BookingPrice]] = None

    # @Ignore()
    status: Optional[BookingStatusEnum] = None

    # @Ignore()
    is_reserved: bool = False

    # @Ignore()
    status_name: Optional[str] = None

    currency_info: Optional[Currency] = None
    booking_status: Optional[BookingStatus] = None
    # @Ignore()
    total_price: Optional[float] = None

    # @Ignore()
    total_spots: Optional[int] = None

    # @Ignore()
    resources: Optional[IList[Resource]] = None

    # @Ignore()
    external_references: Optional[IList[ExternalReference]] = None

    # @Ignore()
    booked_resources: Optional[IList[BookedResourceType]] = None

    # @Ignore()
    custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_data: Optional[IList[CustomFieldDataResponse]] = None

    # @Ignore()
    deterministic_id: Optional[str] = None

    # @Ignore()
    active: bool = False

    # @Ignore()
    last_time_to_un_book: Optional[datetime.datetime] = None

    # @Ignore()
    price_mappings: Optional[List[PriceMapping]] = None

    # @Ignore()
    internal_reference_id: Optional[str] = None

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    id: int = 0
    # @Required()
    customer_id: Optional[str] = None

    # @Required()
    service_id: int = 0

    # @Required()
    status_id: int = 0

    unbooked_on: Optional[datetime.datetime] = None
    unbooked_comments: Optional[str] = None
    booked_comments: Optional[str] = None
    # @Required()
    booked_by: Optional[str] = None

    un_booked_by: Optional[str] = None
    # @Required()
    send_sms_reminder: bool = False

    # @Required()
    send_email_reminder: bool = False

    # @Required()
    send_sms_confirmation: bool = False

    rebate_code: Optional[str] = None
    comments: Optional[str] = None
    ip_address: Optional[str] = None
    # @Required()
    number_of_booked_spots: int = 0

    comments_to_customer: Optional[str] = None
    payment_expiration: Optional[datetime.datetime] = None
    # @Required()
    send_email_confirmation: bool = False

    cancellation_code: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    rating_code: Optional[str] = None
    text_field1: Optional[str] = None
    text_field2: Optional[str] = None
    text_field3: Optional[str] = None
    text_field4: Optional[str] = None
    text_field5: Optional[str] = None
    text_field6: Optional[str] = None
    text_field7: Optional[str] = None
    text_field8: Optional[str] = None
    text_field9: Optional[str] = None
    text_field10: Optional[str] = None
    text_field11: Optional[str] = None
    text_field12: Optional[str] = None
    text_field13: Optional[str] = None
    text_field14: Optional[str] = None
    text_field15: Optional[str] = None
    text_field16: Optional[str] = None
    text_field17: Optional[str] = None
    text_field18: Optional[str] = None
    text_field19: Optional[str] = None
    text_field20: Optional[str] = None
    # @Required()
    from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1))

    # @Required()
    to: datetime.datetime = datetime.datetime(1, 1, 1)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCodeTransaction(BaseModel, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    booking: Optional[Booking] = None

    # @Ignore()
    rebate_code: Optional[RebateCode] = None

    # @Ignore()
    customer: Optional[Customer] = None

    id: int = 0
    company_id: Optional[str] = None
    note: Optional[str] = None
    # @Required()
    rebate_code_id: int = 0

    # @Required()
    amount: float = 0.0

    # @Required()
    usage: int = 0

    booking_id: Optional[int] = None
    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RebateCode(PayableEntity):
    # @References(typeof(RebateCodeType))
    rebate_code_type_id: int = 0

    rebate_code_type_info: Optional[RebateCodeType] = None
    # @References(typeof(RebateCodeStatus))
    rebate_code_status_id: int = 0

    rebate_code_status_info: Optional[RebateCodeStatus] = None
    # @Ignore()
    article: Optional[Article] = None

    # @Ignore()
    services: Optional[List[Service]] = None

    rebate_code_day_of_week_relation: Optional[List[RebateCodeDayOfWeekRelation]] = None
    rebate_code_service_relation: Optional[List[RebateCodeServiceRelation]] = None
    rebate_code_booking_price_relation: Optional[List[RebateCodeBookingPriceRelation]] = None
    rebate_code_customer_relation: Optional[List[RebateCodeCustomerRelation]] = None
    # @Ignore()
    services_names: Optional[str] = None

    # @Ignore()
    days_of_week: Optional[List[DaysOfWeek]] = None

    # @Ignore()
    rebate_code_status: Optional[RebateCodeStatus] = None

    # @Ignore()
    rebate_code_type: Optional[RebateCodeType] = None

    # @Ignore()
    transactions: Optional[List[RebateCodeTransaction]] = None

    # @Ignore()
    remaining_amount: Optional[float] = None

    # @Ignore()
    remaining_usage: Optional[int] = None

    # @Ignore()
    current_number_of_uses_per_customer: int = 0

    # @Ignore()
    is_specific_by_day_of_week: bool = False

    # @Ignore()
    active: bool = False

    # @Ignore()
    active_by_status: bool = False

    # @Ignore()
    rebate_code_currency_sign: Optional[str] = None

    currency_info: Optional[Currency] = None
    # @Ignore()
    payment_received: bool = False

    # @Ignore()
    internal_reference_id: Optional[str] = None

    # @Required()
    valid_from: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    valid_to: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    rebate_code_sign: Optional[str] = None

    # @Required()
    rebate_code_value: int = 0

    # @Required()
    max_number_of_uses: int = 0

    # @Required()
    max_number_of_uses_per_customer: int = 0

    # @Required()
    number_of_uses_used: int = 0

    personal_note: Optional[str] = None
    # @Required()
    created_by: Optional[str] = None

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated_by: Optional[str] = None

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    from_time: datetime.timedelta = datetime.timedelta()

    # @Required()
    to_time: datetime.timedelta = datetime.timedelta()

    modified_date: Optional[datetime.datetime] = None
    id: int = 0
    article_id: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ServicePrice(BaseModel, IInterval):
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    currency_info: Optional[Currency] = None
    # @Ignore()
    service: Optional[Service] = None

    # @Ignore()
    price_mappings: Optional[List[PriceMapping]] = None

    # @Ignore()
    is_time_specific: bool = False

    # @Ignore()
    is_days_of_week_specific: bool = False

    day_of_weeks: Optional[List[ServicePriceDayOfWeekRelation]] = None
    # @Ignore()
    price_before_rebate: Optional[float] = None

    # @Ignore()
    rebate_codes_applied: Optional[List[RebateCode]] = None

    # @Ignore()
    price_text: Optional[str] = None

    # @Ignore()
    overlapping_prices: Optional[List[ServicePrice]] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    service_id: int = 0

    price: Optional[float] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    from_time: datetime.timedelta = datetime.timedelta()

    # @Required()
    to_time: datetime.timedelta = datetime.timedelta()

    # @Required()
    vat: Decimal = decimal.Decimal(0)

    category: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    # @Required()
    from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1))

    # @Required()
    to: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    calculation_type_id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingStatusOptions:
    id: int = 0
    name: Optional[str] = None
    description: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ScheduleView(BaseModel):
    # @Required()
    name: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WeekNumberSetting(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingTemplate(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    used_by_application: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CalendarType(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    active: bool = False

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class FreeSpotTexts(BaseModel):
    # @Required()
    text_singular: Optional[str] = None

    # @Required()
    text_plural: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BookingSettings(BaseModel):
    # @References(typeof(FreeSpotTexts))
    free_spot_texts_id: int = 0

    # @Ignore()
    send_email_confirmation: bool = False

    # @Ignore()
    schedule_view_options: Optional[List[ScheduleView]] = None

    # @Ignore()
    week_number_setting_options: Optional[List[WeekNumberSetting]] = None

    # @Ignore()
    booking_template_options: Optional[List[BookingTemplate]] = None

    # @Ignore()
    calendar_type_options: Optional[List[CalendarType]] = None

    # @Ignore()
    free_spot_text_options: Optional[List[FreeSpotTexts]] = None

    # @Ignore()
    booking_status_options: Optional[List[BookingStatusOptions]] = None

    free_spot_texts_info: Optional[FreeSpotTexts] = None
    # @Ignore()
    free_spots_text_singular: Optional[str] = None

    # @Ignore()
    free_spots_text_plural: Optional[str] = None

    # @Required()
    booking_status_id: int = 0

    # @Required()
    schedule_view_id: int = 0

    # @Required()
    booking_template_id: int = 0

    # @Required()
    calendar_type_id: int = 0

    # @Required()
    allow_booking_on_unbooked_times: bool = False

    # @Required()
    send_email_reminder: bool = False

    # @Required()
    send_sms_reminder: bool = False

    # @Required()
    send_sms_confirmation: bool = False

    # @Required()
    email_reminder_time: int = 0

    # @Required()
    sms_reminder_time: int = 0

    # @Required()
    max_active_bookings: int = 0

    # @Required()
    send_notifications: bool = False

    send_notifications_email: Optional[str] = None
    # @Required()
    enable_mobile_app: bool = False

    schedule_start_time: Optional[datetime.timedelta] = None
    schedule_end_time: Optional[datetime.timedelta] = None
    receipt_template: Optional[str] = None
    # @Required()
    schedule_time_slot_minutes: int = 0

    # @Required()
    show_free_times_left: bool = False

    # @Required()
    enable_i_cal_group_bookings: bool = False

    agreement_template: Optional[str] = None
    # @Required()
    schedule_show_time_exeptions: bool = False

    # @Required()
    enable_bookings_on_same_time: bool = False

    # @Required()
    show_week_number_setting_id: int = 0

    # @Required()
    enable_show_booked_times: bool = False

    # @Required()
    enable_send_follow_up_message: bool = False

    # @Required()
    follow_up_message_time: int = 0

    message_text: Optional[str] = None
    # @Required()
    schedule_group_resources: bool = False

    # @Required()
    book_spot_user_response_minutes: int = 0

    # @Required()
    is_book_spot_directly: bool = False

    # @Required()
    book_spot_directly_time_left_minutes: int = 0

    # @Required()
    send_email_notification_queue: bool = False

    # @Required()
    send_s_m_s_notification_queue: bool = False

    # @Required()
    scheduler_disable_horizontal_scrolling: bool = False

    # @Required()
    book_only_on_existing_customers: bool = False

    # @Required()
    auto_generate_unique_pin_code: bool = False

    # @Required()
    weighted_prices: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    auto_create_user_profile: bool = False

    show_multiple_resources_as_one: bool = False
    show_multi_day_as_time: bool = False
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AdminPaymentOptions(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentProviders(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    category: Optional[str] = None

    url: Optional[str] = None
    # @Required()
    active: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentSetting(BaseModel):
    admin_payment_option: Optional[AdminPaymentOptions] = None
    # @Ignore()
    admin_payment_options: Optional[List[AdminPaymentOptions]] = None

    # @Ignore()
    payment_provider_options: Optional[List[PaymentProviders]] = None

    # @Required()
    enabled: bool = False

    # @Required()
    invoice_fee: int = 0

    # @Required()
    allow_credit_card_payment: bool = False

    # @Required()
    allow_invoice_payment: bool = False

    # @Required()
    allow_bank_payment: bool = False

    # @Required()
    guarantee_offered: bool = False

    # @Required()
    refund_on_cancel_booking: bool = False

    default_payment_option_id: Optional[int] = None
    # @Required()
    payment_provider_id: int = 0

    # @Required()
    send_payment_request_directly: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AverageRatingScore:
    average_score: float = 0.0
    score1_count: int = 0
    score2_count: int = 0
    score3_count: int = 0
    score4_count: int = 0
    score5_count: int = 0
    count: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Review(BaseModel):
    review_id: Optional[str] = None
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    title: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    author: Optional[str] = None

    # @Required()
    status: int = 0

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None
    review_answer: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Rating(BaseModel):
    review_id: Optional[str] = None
    review: Optional[Review] = None
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    booking_id: int = 0

    # @Required()
    rating_score: int = 0

    # @Required()
    status: int = 0

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Service(BaseModel, ICustomFieldTable, IBaseModelCreated, IBaseModelUpdated):
    # @Ignore()
    resource_types: Optional[List[ResourceType]] = None

    # @Ignore()
    resources: Optional[List[Resource]] = None

    # @Ignore()
    total_price: Optional[TotalPriceInformation] = None

    # @Ignore()
    prices: Optional[List[ServicePrice]] = None

    # @Ignore()
    booking_status_options: Optional[List[BookingStatusOptions]] = None

    # @Ignore()
    is_group_booking: bool = False

    # @Ignore()
    is_multiple_resource: bool = False

    # @Ignore()
    settings: Optional[BookingSettings] = None

    # @Ignore()
    payment_setting: Optional[PaymentSetting] = None

    # @Ignore()
    booking_custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    customer_custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_data: Optional[IList[CustomFieldDataResponse]] = None

    # @Ignore()
    schedules: Optional[IList[ISchedule]] = None

    # @Ignore()
    customer_active_bookings: Optional[IList[Booking]] = None

    # @Ignore()
    schedule_type: Optional[ScheduleType] = None

    # @Ignore()
    last_time_to_unbook_threshold: datetime.timedelta = datetime.timedelta()

    # @Ignore()
    last_time_to_book_threshold: datetime.timedelta = datetime.timedelta()

    # @Ignore()
    rating_score: Optional[AverageRatingScore] = None

    # @Ignore()
    ratings: Optional[List[Rating]] = None

    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    group: Optional[str] = None
    # @Required()
    active: bool = False

    # @Required()
    sort_order: int = 0

    # @Required()
    pause_after_booking: int = 0

    # @Required()
    unbook_before_days: int = 0

    # @Required()
    unbook_before_hours: int = 0

    # @Required()
    unbook_before_minutes: int = 0

    # @Required()
    book_before_days: int = 0

    # @Required()
    book_before_hours: int = 0

    # @Required()
    book_before_minutes: int = 0

    duration: Optional[int] = None
    duration_type_id: int = 0
    min_duration: Optional[int] = None
    max_duration: Optional[int] = None
    duration_interval: Optional[int] = None
    total_spots: Optional[int] = None
    image_url: Optional[str] = None
    # @Required()
    schedule_type_id: int = 0

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    only_visible_by_admin: bool = False

    # @Required()
    min_number_of_spots_per_booking: int = 0

    # @Required()
    max_number_of_spots_per_booking: int = 0

    # @Required()
    min_number_of_resources_to_book: int = 0

    # @Required()
    max_number_of_resources_to_book: int = 0

    # @Required()
    is_payment_enabled: bool = False

    # @Required()
    max_payment_time: int = 0

    # @Required()
    lock_spots_to_booking: bool = False

    # @Required()
    enable_booking_queue: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    booking_status_id: int = 0

    # @Required()
    enable_code_lock_sync: bool = False

    # @Required()
    enable_customer_manual_payment: bool = False

    price_view_type_id: Optional[int] = None
    text_field1: Optional[str] = None
    text_field2: Optional[str] = None
    text_field3: Optional[str] = None
    text_field4: Optional[str] = None
    text_field5: Optional[str] = None
    text_field6: Optional[str] = None
    text_field7: Optional[str] = None
    text_field8: Optional[str] = None
    text_field9: Optional[str] = None
    text_field10: Optional[str] = None
    text_field11: Optional[str] = None
    text_field12: Optional[str] = None
    text_field13: Optional[str] = None
    text_field14: Optional[str] = None
    text_field15: Optional[str] = None
    text_field16: Optional[str] = None
    text_field17: Optional[str] = None
    text_field18: Optional[str] = None
    text_field19: Optional[str] = None
    text_field20: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldServiceRelation(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    custom_field_config_id: int = 0

    # @Required()
    service_id: int = 0

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomFieldConfig(BaseModel):
    # @Ignore()
    values: Optional[List[CustomFieldValue]] = None

    custom_field: Optional[CustomField] = None
    # @Ignore()
    reg_ex: Optional[RegEx] = None

    # @Ignore()
    services: Optional[List[Service]] = None

    custom_field_service_relation: Optional[List[CustomFieldServiceRelation]] = None
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    group_id: Optional[int] = None
    # @Required()
    field_id: int = 0

    # @Required()
    icon_id: int = 0

    reg_ex_id: Optional[int] = None
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    datatype: Optional[str] = None

    # @Required()
    max_length: int = 0

    # @Required()
    is_public: bool = False

    # @Required()
    is_hidden: bool = False

    # @Required()
    is_mandatory: bool = False

    default_value: Optional[str] = None
    reg_ex_error_message: Optional[str] = None
    mandatory_error_message: Optional[str] = None
    width: Optional[int] = None
    # @Required()
    multiple_line_text: bool = False

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyType(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CodeLockSystem(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    supplier: Optional[str] = None

    logo_type: Optional[str] = None
    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CodeLockSetting(BaseModel):
    # @Ignore()
    code_lock_system_options: Optional[List[CodeLockSystem]] = None

    # @Required()
    active: bool = False

    # @Required()
    code_lock_systems_id: int = 0

    # @Required()
    valid_before_minutes: int = 0

    # @Required()
    valid_after_minutes: int = 0

    # @Required()
    delete_old_by_schedule: bool = False

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    send_email_notification: bool = False

    # @Required()
    send_s_m_s_notification: bool = False

    # @Required()
    email_notification_time: int = 0

    # @Required()
    sms_notification_time: int = 0

    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LanguageResponse:
    id: Optional[str] = None
    name: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanySetting(BaseModel):
    # @Ignore()
    languages: Optional[List[LanguageResponse]] = None

    # @Required()
    active: bool = False

    inactive_message: Optional[str] = None
    # @Required()
    searchable: bool = False

    ga_tracking_id: Optional[str] = None
    facebook_pixel_id: Optional[str] = None
    # @Required()
    multi_language: bool = False

    # @Required()
    enable_a_p_i_translation: bool = False

    # @Required()
    default_language: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    gtm_tracking_id: Optional[str] = None
    # @Required()
    show_on_market_place: bool = False

    google_ads_conversion_id: Optional[str] = None
    linkedin_tag_id: Optional[str] = None
    google_ads_conversion_label: Optional[str] = None
    send_customer_information_to_external_providers: bool = False
    # @Required()
    id: Optional[str] = None

    is_webhook_feature_enabled: bool = False
    sms_message_send_limit: Optional[int] = None
    email_message_send_limit: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WidgetServiceLayouts(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    code: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WidgetTimeLayouts(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    code: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WidgetBookingLayouts(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    code: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class WidgetBookingMethods(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    code: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HomepageWidgetSetting(BaseModel):
    # @Ignore()
    widget_service_layout_options: Optional[List[WidgetServiceLayouts]] = None

    # @Ignore()
    widget_time_layout_options: Optional[List[WidgetTimeLayouts]] = None

    # @Ignore()
    widget_booking_layout_options: Optional[List[WidgetBookingLayouts]] = None

    # @Ignore()
    widget_booking_method_options: Optional[List[WidgetBookingMethods]] = None

    # @Required()
    service_layout_id: int = 0

    # @Required()
    time_layout_id: int = 0

    # @Required()
    booking_layout_id: int = 0

    # @Required()
    primary_color: Optional[str] = None

    # @Required()
    show_service_image: bool = False

    # @Required()
    show_next_available_time: bool = False

    # @Required()
    show_end_time: bool = False

    booked_time_slot_text: Optional[str] = None
    # @Required()
    dark_theme: bool = False

    # @Required()
    show_rebate_code_field: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    enable_create_account: bool = False

    # @Required()
    enable_login: bool = False

    # @Required()
    enable_direct_booking: bool = False

    # @Required()
    enable_facebook_login: bool = False

    # @Required()
    show_subscribe_to_newsletter: bool = False

    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HomepageTemplate(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    image_url: Optional[str] = None
    # @Required()
    premium: bool = False

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HeroSectionStyle(BaseModel):
    # @Required()
    name: Optional[str] = None

    description: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class HomepageSetting(BaseModel, ICompany):
    # @Ignore()
    homepage_template_options: Optional[List[HomepageTemplate]] = None

    # @Ignore()
    homepage_hero_section_style_options: Optional[List[HeroSectionStyle]] = None

    # @Ignore()
    company_id: Optional[str] = None

    welcome_page_heading: Optional[str] = None
    welcome_page_body: Optional[str] = None
    about_us_page_heading: Optional[str] = None
    about_us_page_body: Optional[str] = None
    # @Required()
    home_page_template_id: int = 0

    image_url: Optional[str] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    homepage_heading: Optional[str] = None
    # @Required()
    hero_section_style_id: int = 0

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    show_rating: bool = False

    # @Required()
    enable_homepage: bool = False

    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LicenseTypeItem(BaseModel):
    # @Ignore()
    name: Optional[str] = None

    # @Ignore()
    license_type: Optional[LicenseType] = None

    # @Required()
    license_types_id: int = 0

    # @Required()
    license_items_id: int = 0

    # @Required()
    number_of_items: int = 0

    id: int = 0
    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Country(BaseModel):
    # @References(typeof(Currency))
    currency_id: Optional[str] = None

    currency_info: Optional[Currency] = None
    # @Required()
    name: Optional[str] = None

    culture: Optional[str] = None
    time_zone: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LicensePrice(BaseModel):
    # @Ignore()
    country: Optional[Country] = None

    # @Required()
    license_type_id: int = 0

    # @Required()
    country_id: Optional[str] = None

    # @Required()
    price: int = 0

    modified_date: Optional[datetime.datetime] = None
    license_plan_id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class LicenseType(BaseModel):
    # @Ignore()
    license_items: Optional[IList[LicenseTypeItem]] = None

    # @Ignore()
    prices: Optional[IList[LicensePrice]] = None

    # @Ignore()
    is_free: bool = False

    # @Ignore()
    period_of_notice_days: int = 0

    # @Ignore()
    next_license_option: Optional[LicenseType] = None

    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    # @Required()
    extra_license_option: bool = False

    modified_date: Optional[datetime.datetime] = None
    active: bool = False
    voss_tier_id: Optional[str] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class License(BaseModel):
    type: Optional[LicenseType] = None
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    type_id: int = 0

    voss_subscription_id: Optional[str] = None
    # @Required()
    valid_from: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    valid_to: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    active: bool = False

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None
    meta_data: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillingMethodCountriesRelation(BaseModel):
    # @Required()
    billing_method_id: int = 0

    # @Required()
    country_id: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillingMethod(BaseModel):
    billing_method_countries_relation: Optional[List[BillingMethodCountriesRelation]] = None
    # @Required()
    name: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillingInformation(BaseModel, IBaseModelCreated, IBaseModelUpdated):
    billing_method: Optional[BillingMethod] = None
    # @Required()
    billing_method_id: int = 0

    # @Required()
    name: Optional[str] = None

    attention: Optional[str] = None
    street1: Optional[str] = None
    street2: Optional[str] = None
    zip_code: Optional[str] = None
    city: Optional[str] = None
    email: Optional[str] = None
    credit_card: Optional[str] = None
    credit_card_holder: Optional[str] = None
    credit_card_number: Optional[str] = None
    valid_to_year: Optional[int] = None
    valid_to_month: Optional[int] = None
    csv: Optional[str] = None
    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    country_id: Optional[str] = None

    # @Required()
    payment_terms_days: int = 0

    vat_registration_number: Optional[str] = None
    license_plan_id: int = 0
    gln: Optional[str] = None
    reference_line1: Optional[str] = None
    reference_line2: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class KeyCloakRole:
    id: Optional[str] = None
    name: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyUser(BaseModel, IUser, IBaseModelCreated, IBaseModelUpdated):
    resource: Optional[Resource] = None
    # @Ignore()
    roles: Optional[List[KeyCloakRole]] = None

    # @Ignore()
    company: Optional[Company] = None

    email: Optional[str] = None
    # @Ignore()
    full_name: Optional[str] = None

    resource_id: Optional[int] = None
    worker_id: Optional[str] = None
    # @Required()
    active: bool = False

    # @Required()
    is_super_admin: bool = False

    # @Required()
    created_date: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    updated_date: datetime.datetime = datetime.datetime(1, 1, 1)

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    company_id: Optional[str] = None

    # @Required()
    id: Optional[str] = None

    user_id: Optional[str] = None
    firstname: Optional[str] = None
    lastname: Optional[str] = None
    phone: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyCategory(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    header: Optional[str] = None

    # @Required()
    description: Optional[str] = None

    image_url: Optional[str] = None
    # @Required()
    active: bool = False

    sort_order: Optional[int] = None
    modified_date: Optional[datetime.datetime] = None
    id: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Company(BaseModel):
    # @Ignore()
    status: Optional[CompanyStatus] = None

    # @Ignore()
    active: bool = False

    # @Ignore()
    customer_custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    booking_agreements: Optional[str] = None

    # @Ignore()
    booking_settings: Optional[BookingSettings] = None

    # @Ignore()
    company_type: Optional[CompanyType] = None

    # @Ignore()
    code_lock_settings: Optional[CodeLockSetting] = None

    # @Ignore()
    payment_settings: Optional[PaymentSetting] = None

    # @Ignore()
    settings: Optional[CompanySetting] = None

    # @Ignore()
    widget_settings: Optional[HomepageWidgetSetting] = None

    # @Ignore()
    homepage_settings: Optional[HomepageSetting] = None

    # @Ignore()
    rating_score: Optional[AverageRatingScore] = None

    # @Ignore()
    ratings: Optional[List[Rating]] = None

    # @Ignore()
    distance: Optional[float] = None

    # @Ignore()
    licenses: Optional[List[License]] = None

    # @Ignore()
    billing_information: Optional[BillingInformation] = None

    # @Ignore()
    company_users: Optional[List[CompanyUser]] = None

    # @Ignore()
    active_licenses: Optional[List[License]] = None

    # @Ignore()
    current_license: Optional[License] = None

    # @Ignore()
    is_free_account: bool = False

    # @Ignore()
    default_language: Optional[CultureInfo] = None

    category: Optional[CompanyCategory] = None
    # @Ignore()
    lat: float = 0.0

    # @Ignore()
    lon: float = 0.0

    # @Ignore()
    is_favorite: bool = False

    # @Ignore()
    external_references: Optional[IList[ExternalReference]] = None

    # @Required()
    organisation_number: Optional[str] = None

    # @Required()
    status_id: int = 0

    # @Required()
    category_id: int = 0

    # @Required()
    site_path: Optional[str] = None

    # @Required()
    name: Optional[str] = None

    street1: Optional[str] = None
    street2: Optional[str] = None
    zip_code: Optional[str] = None
    city: Optional[str] = None
    opening_hours: Optional[str] = None
    fax_number: Optional[str] = None
    # @Required()
    email: Optional[str] = None

    phone: Optional[str] = None
    details: Optional[str] = None
    logo_type: Optional[str] = None
    # @Required()
    approved_by_admin: bool = False

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    ip_address: Optional[str] = None
    homepage: Optional[str] = None
    domain_name: Optional[str] = None
    # @Required()
    country_id: Optional[str] = None

    # @Required()
    company_owner_id: int = 0

    type_id: Optional[int] = None
    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: Optional[str] = None

    deletion_notification_date: Optional[datetime.datetime] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerComment(BaseModel):
    # @Required()
    company_id: Optional[str] = None

    id: int = 0
    # @Required()
    customer_id: Optional[str] = None

    # @Required()
    comments: Optional[str] = None

    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    image_url: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None


class CustomerType(str, Enum):
    PERSON = 'Person'
    BUSINESS = 'Business'


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Customer:
    city: Optional[str] = None
    country_code: Optional[str] = None
    identity_number: Optional[str] = None
    email: Optional[str] = None
    first_name: Optional[str] = None
    last_name: Optional[str] = None
    phone: Optional[str] = None
    postal_code: Optional[str] = None
    street: Optional[str] = None
    reference: Optional[str] = None
    type: Optional[CustomerType] = None


# @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
# @ValidateRequest(Validator="IsAuthenticated")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CustomerQuery(QueryDb2[Customer, CustomerQueryResponse]):
    # @ApiMember(Description="Enter the company and id you want to see the information for a customer, if blank company id and you are an admin, your company id will be used. If blank id, all resources will be shown ", IsRequired=true, ParameterType="query")
    company_id: Optional[str] = None
    """
    Enter the company and id you want to see the information for a customer, if blank company id and you are an admin, your company id will be used. If blank id, all resources will be shown 
    """


    # @ApiMember(Description="Enter the customer id you want to see the information for a customer. Only admins are allowed to see all customers on their company, users can only see their own customer info.", ParameterType="query")
    customer_id: Optional[str] = None
    """
    Enter the customer id you want to see the information for a customer. Only admins are allowed to see all customers on their company, users can only see their own customer info.
    """


    # @ApiMember(Description="Enter the user id you want to see the information for a customer. Only admins are allowed to see all customers on their company, users can only see their own customer info. User Id is the userprofile", ParameterType="query")
    user_id: Optional[str] = None
    """
    Enter the user id you want to see the information for a customer. Only admins are allowed to see all customers on their company, users can only see their own customer info. User Id is the userprofile
    """


    # @ApiMember(Description="Will search by any customer name,phone or email that contains the searchstring provided.", ParameterType="query")
    search: Optional[str] = None
    """
    Will search by any customer name,phone or email that contains the searchstring provided.
    """


    # @ApiMember(Description="If you want to filter on visible customers.", ParameterType="query")
    visible: Optional[bool] = None
    """
    If you want to filter on visible customers.
    """


    # @ApiMember(DataType="boolean", Description="If you want to include the connected custom fields", ParameterType="query")
    include_custom_field_values: bool = False
    """
    If you want to include the connected custom fields
    """


    # @ApiMember(DataType="boolean", Description="If you want to include the connected custom fields", ParameterType="query")
    include_custom_fields: bool = False
    """
    If you want to include the connected custom fields
    """


    # @ApiMember(DataType="boolean", Description="If you want to include the comments on the customer", ParameterType="query")
    include_comments: bool = False
    """
    If you want to include the comments on the customer
    """


    # @ApiMember(Description="If you want to include the accesskeys")
    include_access_keys: bool = False
    """
    If you want to include the accesskeys
    """


    # @ApiMember(Description="If you want to include invoice address")
    include_invoice_address: bool = False
    """
    If you want to include invoice address
    """


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Customer(BaseModel, IUser, ICustomFieldTable):
    identity_id: int = 0
    id: Optional[str] = None
    # @Ignore()
    customer_id: Optional[str] = None

    # @Ignore()
    access_keys: Optional[IList[UserAccessKeys]] = None

    email: Optional[str] = None
    # @Ignore()
    external_references: Optional[IList[ExternalReference]] = None

    # @Ignore()
    company: Optional[Company] = None

    # @Ignore()
    custom_fields_config: Optional[IList[CustomFieldConfig]] = None

    # @Ignore()
    custom_fields_data: Optional[IList[CustomFieldDataResponse]] = None

    # @Ignore()
    comments: Optional[IList[CustomerComment]] = None

    # @Ignore()
    rebate_codes: Optional[IList[RebateCode]] = None

    firstname: Optional[str] = None
    # @Ignore()
    full_name: Optional[str] = None

    # @Ignore()
    image_url: Optional[str] = None

    # @Required()
    active: bool = False

    facebook_username: Optional[str] = None
    # @Required()
    updated: datetime.datetime = datetime.datetime(1, 1, 1)

    # @Required()
    created: datetime.datetime = datetime.datetime(1, 1, 1)

    ip_address: Optional[str] = None
    modified_date: Optional[datetime.datetime] = None
    text_field1: Optional[str] = None
    text_field2: Optional[str] = None
    text_field3: Optional[str] = None
    text_field4: Optional[str] = None
    text_field5: Optional[str] = None
    text_field6: Optional[str] = None
    text_field7: Optional[str] = None
    text_field8: Optional[str] = None
    text_field9: Optional[str] = None
    text_field10: Optional[str] = None
    text_field11: Optional[str] = None
    text_field12: Optional[str] = None
    text_field13: Optional[str] = None
    text_field14: Optional[str] = None
    text_field15: Optional[str] = None
    text_field16: Optional[str] = None
    text_field17: Optional[str] = None
    text_field18: Optional[str] = None
    text_field19: Optional[str] = None
    text_field20: Optional[str] = None
    user_id: Optional[str] = None
    lastname: Optional[str] = None
    phone: Optional[str] = None
    corporate_identity_number: Optional[str] = None
    invoice_address1: Optional[str] = None
    invoice_address2: Optional[str] = None
    invoice_city: Optional[str] = None
    invoice_postal_code: Optional[str] = None
    invoice_country_code: Optional[str] = None
    # @Required()
    company_id: Optional[str] = None

    subscribed_to_newsletter: bool = False


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Currency(BaseModel):
    # @Required()
    name: Optional[str] = None

    # @Required()
    currency_sign: Optional[str] = None

    # @Required()
    active: bool = False

    modified_date: Optional[datetime.datetime] = None
    # @Required()
    id: Optional[str] = None


TCreatedCheckoutResponse = TypeVar('TCreatedCheckoutResponse')
TCheckoutResponse = TypeVar('TCheckoutResponse')
TPaymentResponse = TypeVar('TPaymentResponse')


class IBokameraPaymentManager(Generic[TCreatedCheckoutResponse, TCheckoutResponse, TPaymentResponse]):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QvicklyArticle:
    artnr: Optional[str] = None
    title: Optional[str] = None
    quantity: int = 0
    aprice: int = 0
    tax: int = 0
    discount: int = 0
    withouttax: int = 0
    taxrate: int = 0


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Shipping:
    firstname: Optional[str] = None
    lastname: Optional[str] = None
    company: Optional[str] = None
    street: Optional[str] = None
    street2: Optional[str] = None
    zip: Optional[str] = None
    city: Optional[str] = None
    country: Optional[str] = None
    phone: Optional[str] = None
    withouttax: Optional[str] = None
    taxrate: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AnyOf(IAnyOf):
    value: Optional[Object] = None
    type: Optional[str] = None


T1 = TypeVar('T1')
T2 = TypeVar('T2')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AnyOf2(Generic[T1, T2], AnyOf):
    value: Optional[Object] = None
    type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeEntity(IStripeEntity):
    pass


T = TypeVar('T')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeEntity1(Generic[T], StripeEntity):
    pass


T = TypeVar('T')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class StripeList(Generic[T], StripeEntity1[StripeList[T]], IHasObject):
    pass


TCategoryName = TypeVar('TCategoryName')


class ILogger(Generic[TCategoryName], ILogger):
    pass


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AccessKeyTypeResponse:
    id: int = 0
    key_type: Optional[str] = None
    description: Optional[str] = None


AccessKeyTypeResponse = TypeVar('AccessKeyTypeResponse')


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class QueryResponse(Generic[AccessKeyTypeResponse]):
    offset: int = 0
    total: int = 0
    results: Optional[List[AccessKeyTypeResponse]] = None
    meta: Optional[Dict[str, str]] = None
    response_status: Optional[ResponseStatus] = None

Python CustomerQuery DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /customers HTTP/1.1 
Host: testapi.bokamera.se 
Accept: application/xml
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<QueryResponseOfCustomerQueryResponseWg5EthtI xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.servicestack.net/types">
  <Offset>0</Offset>
  <Total>0</Total>
  <Results xmlns:d2p1="http://schemas.datacontract.org/2004/07/BokaMera.API.ServiceModel.Dtos">
    <d2p1:CustomerQueryResponse>
      <d2p1:AccessKeys xmlns:d4p1="http://schemas.datacontract.org/2004/07/BokaMera.API.ServiceModel.Db">
        <d4p1:UserAccessKeys>
          <d4p1:AccessKeyTypeId>0</d4p1:AccessKeyTypeId>
          <d4p1:CompanyId>00000000-0000-0000-0000-000000000000</d4p1:CompanyId>
          <d4p1:CustomerId>00000000-0000-0000-0000-000000000000</d4p1:CustomerId>
          <d4p1:Description>String</d4p1:Description>
          <d4p1:Id>00000000-0000-0000-0000-000000000000</d4p1:Id>
          <d4p1:Value>String</d4p1:Value>
        </d4p1:UserAccessKeys>
      </d2p1:AccessKeys>
      <d2p1:Comments>
        <d2p1:CustomerCommentsResponse>
          <d2p1:Comments>String</d2p1:Comments>
          <d2p1:Created>0001-01-01T00:00:00</d2p1:Created>
          <d2p1:CustomerId>00000000-0000-0000-0000-000000000000</d2p1:CustomerId>
          <d2p1:Id>0</d2p1:Id>
          <d2p1:ImageUrl i:nil="true" />
          <d2p1:Updated>0001-01-01T00:00:00</d2p1:Updated>
        </d2p1:CustomerCommentsResponse>
      </d2p1:Comments>
      <d2p1:Created>0001-01-01T00:00:00</d2p1:Created>
      <d2p1:CustomFieldValues>
        <d2p1:CustomFieldDataResponse>
          <d2p1:Column>String</d2p1:Column>
          <d2p1:DataType>String</d2p1:DataType>
          <d2p1:Description>String</d2p1:Description>
          <d2p1:Id>0</d2p1:Id>
          <d2p1:Name>String</d2p1:Name>
          <d2p1:Value>String</d2p1:Value>
        </d2p1:CustomFieldDataResponse>
      </d2p1:CustomFieldValues>
      <d2p1:CustomFields>
        <d2p1:CustomFieldConfigData>
          <d2p1:DataType>String</d2p1:DataType>
          <d2p1:DefaultValue>String</d2p1:DefaultValue>
          <d2p1:Description>String</d2p1:Description>
          <d2p1:Id>0</d2p1:Id>
          <d2p1:IsMandatory>false</d2p1:IsMandatory>
          <d2p1:MandatoryErrorMessage>String</d2p1:MandatoryErrorMessage>
          <d2p1:MaxLength>0</d2p1:MaxLength>
          <d2p1:MultipleLineText>false</d2p1:MultipleLineText>
          <d2p1:Name>String</d2p1:Name>
          <d2p1:RegEx>String</d2p1:RegEx>
          <d2p1:RegExErrorMessage>String</d2p1:RegExErrorMessage>
          <d2p1:Values>
            <d2p1:CustomFieldValueResponse>
              <d2p1:Value>String</d2p1:Value>
            </d2p1:CustomFieldValueResponse>
          </d2p1:Values>
          <d2p1:Width>0</d2p1:Width>
        </d2p1:CustomFieldConfigData>
      </d2p1:CustomFields>
      <d2p1:Email>String</d2p1:Email>
      <d2p1:Firstname>String</d2p1:Firstname>
      <d2p1:Id>00000000-0000-0000-0000-000000000000</d2p1:Id>
      <d2p1:ImageUrl>String</d2p1:ImageUrl>
      <d2p1:InvoiceAddress>
        <d2p1:CorporateIdentityNumber>String</d2p1:CorporateIdentityNumber>
        <d2p1:InvoiceAddress1>String</d2p1:InvoiceAddress1>
        <d2p1:InvoiceAddress2>String</d2p1:InvoiceAddress2>
        <d2p1:InvoiceCity>String</d2p1:InvoiceCity>
        <d2p1:InvoiceCountryCode>String</d2p1:InvoiceCountryCode>
        <d2p1:InvoicePostalCode>String</d2p1:InvoicePostalCode>
      </d2p1:InvoiceAddress>
      <d2p1:Lastname>String</d2p1:Lastname>
      <d2p1:Phone>String</d2p1:Phone>
      <d2p1:ResponseStatus />
      <d2p1:SubscribedToNewsletter>false</d2p1:SubscribedToNewsletter>
      <d2p1:Updated>0001-01-01T00:00:00</d2p1:Updated>
    </d2p1:CustomerQueryResponse>
  </Results>
  <Meta xmlns:d2p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d2p1:KeyValueOfstringstring>
      <d2p1:Key>String</d2p1:Key>
      <d2p1:Value>String</d2p1:Value>
    </d2p1:KeyValueOfstringstring>
  </Meta>
  <ResponseStatus>
    <ErrorCode>String</ErrorCode>
    <Message>String</Message>
    <StackTrace>String</StackTrace>
    <Errors>
      <ResponseError>
        <ErrorCode>String</ErrorCode>
        <FieldName>String</FieldName>
        <Message>String</Message>
        <Meta xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
          <d5p1:KeyValueOfstringstring>
            <d5p1:Key>String</d5p1:Key>
            <d5p1:Value>String</d5p1:Value>
          </d5p1:KeyValueOfstringstring>
        </Meta>
      </ResponseError>
    </Errors>
    <Meta xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
      <d3p1:KeyValueOfstringstring>
        <d3p1:Key>String</d3p1:Key>
        <d3p1:Value>String</d3p1:Value>
      </d3p1:KeyValueOfstringstring>
    </Meta>
  </ResponseStatus>
</QueryResponseOfCustomerQueryResponseWg5EthtI>