BokaMera.API.Host

<back to all web services

ResourceTimeExceptionQuery

Requires Authentication
Requires any of the roles:bookingsupplier-administrator-write, superadmin, bookingsupplier-administrator-read
The following routes are available for this service:
GET/timeexceptionsFind time exceptions belonging to resourcesFind time exceptions belonging to resources that the user have access to. This method can only be called by users with administrative privilegies.
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 TimeExceptionReosurceDetails:
    # @ApiMember(Description="Ids of the resources that owns this exception")
    id: int = 0
    """
    Ids of the resources that owns this exception
    """


    # @ApiMember(Description="Name of the resource")
    name: Optional[str] = None
    """
    Name of the resource
    """


    # @ApiMember(Description="Description of the resource")
    description: Optional[str] = None
    """
    Description of the resource
    """


    # @ApiMember(Description="Color of the resource")
    color: Optional[str] = None
    """
    Color of the resource
    """


    # @ApiMember(Description="Image of the resource")
    image_url: Optional[str] = None
    """
    Image of the resource
    """


    response_status: Optional[ResponseStatus] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ExceptionCalendarExportStatus:
    calendar_id: Optional[str] = None
    exception_id: int = 0
    synced: Optional[bool] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DayOfWeekDto:
    day_of_week_id: int = 0
    dot_net_day_of_week_id: int = 0
    day_of_week: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ResourceTimeExceptionQueryResponse:
    # @ApiMember(Description="Time exception id")
    id: int = 0
    """
    Time exception id
    """


    # @ApiMember(Description="Time company id")
    company_id: Optional[str] = None
    """
    Time company id
    """


    # @ApiMember(Description="If it's locked for editing for the logged in administrator")
    locked: bool = False
    """
    If it's locked for editing for the logged in administrator
    """


    # @ApiMember(Description="Resources that owns this exception")
    resource_ids: Optional[List[int]] = None
    """
    Resources that owns this exception
    """


    # @ApiMember(Description="Resources that owns this exception")
    resources: Optional[List[TimeExceptionReosurceDetails]] = None
    """
    Resources that owns this exception
    """


    # @ApiMember(Description="Indicates wheter or not the time exception is recurring")
    is_recurring: bool = False
    """
    Indicates wheter or not the time exception is recurring
    """


    # @ApiMember(Description="Time exception starting timestamp")
    from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1))
    """
    Time exception starting timestamp
    """


    # @ApiMember(Description="Time exception ending timestamp")
    to: datetime.datetime = datetime.datetime(1, 1, 1)
    """
    Time exception ending timestamp
    """


    # @ApiMember(Description="If recurring then this value indicates the time of day when the time exception begins")
    from_time: datetime.timedelta = datetime.timedelta()
    """
    If recurring then this value indicates the time of day when the time exception begins
    """


    # @ApiMember(Description="If recurring then this value indicates the time of day when the time exception ends")
    to_time: datetime.timedelta = datetime.timedelta()
    """
    If recurring then this value indicates the time of day when the time exception ends
    """


    # @ApiMember(Description="The reason of the time exception, example: Vacation, doctors appointment, ...")
    reason_text: Optional[str] = None
    """
    The reason of the time exception, example: Vacation, doctors appointment, ...
    """


    # @ApiMember(Description="The reason of the time exception that could be public to customers, example: Vacation, Closed, Sick leave, ...")
    reason_text_public: Optional[str] = None
    """
    The reason of the time exception that could be public to customers, example: Vacation, Closed, Sick leave, ...
    """


    # @ApiMember(Description="What hexadecimal color code the exception should have in the scheduler")
    color: Optional[str] = None
    """
    What hexadecimal color code the exception should have in the scheduler
    """


    # @ApiMember(Description="If the time exception should block the time in the scheduler so it's not avaialable to book")
    block_time: bool = False
    """
    If the time exception should block the time in the scheduler so it's not avaialable to book
    """


    # @ApiMember(Description="If the ReasonText should only be visible to conncted resources. If false, all resources will be able to see it")
    private: bool = False
    """
    If the ReasonText should only be visible to conncted resources. If false, all resources will be able to see it
    """


    # @ApiMember(Description="The status for export to calendars like Gcal")
    calendar_export_status: Optional[ExceptionCalendarExportStatus] = None
    """
    The status for export to calendars like Gcal
    """


    # @ApiMember(Description="If recurring, an array indicating which days of the week the exception recures on where 1 = Monday .. 7 = Sunday. When recurring then the time portion of the Fields From and To indicates the time of day the recurrence occurs")
    days_of_week: Optional[List[DayOfWeekDto]] = None
    """
    If recurring, an array indicating which days of the week the exception recures on where 1 = Monday .. 7 = Sunday. When recurring then the time portion of the Fields From and To indicates the time of day the recurrence occurs
    """


    # @ApiMember(Description="The datetime the exception was created")
    created: datetime.datetime = datetime.datetime(1, 1, 1)
    """
    The datetime the exception was created
    """


    response_status: Optional[ResponseStatus] = None


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


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 ResourceTimeExceptionDayOfWeekRelation(BaseModel):
    # @Ignore()
    day_of_week: Optional[BokaMeraDayOfWeek] = None

    # @Required()
    day_of_week_id: int = 0

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

    # @Required()
    resource_time_exception_id: int = 0

    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 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


@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


@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 CustomerType(str, Enum):
    PERSON = 'Person'
    BUSINESS = 'Business'


@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 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 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 BookingStatusOptions:
    id: int = 0
    name: Optional[str] = None
    description: Optional[str] = None


@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 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 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 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 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 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 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 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


@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


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 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 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 ResourceTimeExceptionResourceRelation(BaseModel):
    # @Ignore()
    resource: Optional[Resource] = None

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

    # @Required()
    resource_time_exception_id: int = 0

    # @Required()
    resource_id: int = 0

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


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ResourceTimeException(BaseModel, IInterval, IBaseModelCreated, IBaseModelUpdated):
    day_of_weeks: Optional[List[ResourceTimeExceptionDayOfWeekRelation]] = None
    resources: Optional[List[ResourceTimeExceptionResourceRelation]] = None
    # @Ignore()
    calendar_export: Optional[CalendarExport] = None

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

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

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

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

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

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

    color: Optional[str] = None
    reason_text_public: Optional[str] = None
    # @Required()
    block_time: bool = False

    # @Required()
    private: bool = False

    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)


# @ApiResponse(Description="You were unauthorized to call this service", StatusCode=401)
# @ApiResponse(Description="You have too low privilegies to call this service", StatusCode=403)
# @ValidateRequest(Validator="IsAuthenticated")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ResourceTimeExceptionQuery(QueryDb2[ResourceTimeException, ResourceTimeExceptionQueryResponse]):
    # @ApiMember(Description="The company id, if empty will use the company id for the user you are logged in with.")
    company_id: Optional[str] = None
    """
    The company id, if empty will use the company id for the user you are logged in with.
    """


    # @ApiMember(Description="Enter the resource id's separated by comma that you want to see time exceptions for, if no value is given all time exceptions will be returned", ParameterType="query")
    resource_ids: Optional[List[int]] = None
    """
    Enter the resource id's separated by comma that you want to see time exceptions for, if no value is given all time exceptions will be returned
    """


    # @ApiMember(DataType="dateTime", Description="Start of interval to query for time exceptions. UTC+0 and parameter as defined by date-time - RFC3339")
    time_exception_start: Optional[datetime.datetime] = None
    """
    Start of interval to query for time exceptions. UTC+0 and parameter as defined by date-time - RFC3339
    """


    # @ApiMember(DataType="dateTime", Description="End of interval to query for time exceptions. UTC+0 and parameter as defined by date-time - RFC3339")
    time_exception_end: Optional[datetime.datetime] = None
    """
    End of interval to query for time exceptions. UTC+0 and parameter as defined by date-time - RFC3339
    """


    # @ApiMember(Description="Include only recurring time exceptions or not, if no value is given, all time exceptions will be returned", ParameterType="query")
    is_recurring: Optional[bool] = None
    """
    Include only recurring time exceptions or not, if no value is given, all time exceptions will be returned
    """


    # @ApiMember(Description="Include only time exceptions that are blocking, if no value is given, all time exceptions will be returned", ParameterType="query")
    is_blocking: Optional[bool] = None
    """
    Include only time exceptions that are blocking, if no value is given, all time exceptions will be returned
    """


    # @ApiMember(DataType="boolean", Description="If you want to include the resource details", ParameterType="query")
    include_resource_details: bool = False
    """
    If you want to include the resource details
    """


    # @ApiMember(DataType="boolean", Description="If you want to include google calendar sync status", ParameterType="query")
    include_calendar_export_status: bool = False
    """
    If you want to include google calendar sync status
    """


    # @ApiMember(DataType="int", Description="The max limit of records you want to retrieve, default is 200", ParameterType="query")
    max_limit: Optional[int] = None
    """
    The max limit of records you want to retrieve, default is 200
    """


@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 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


@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 ResourceTimeExceptionQuery DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

GET /timeexceptions HTTP/1.1 
Host: testapi.bokamera.se 
Accept: text/jsv
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	Offset: 0,
	Total: 0,
	Results: 
	[
		{
			Id: 0,
			Locked: False,
			ResourceIds: 
			[
				0
			],
			Resources: 
			[
				{
					Id: 0,
					Name: String,
					Description: String,
					Color: String,
					ResponseStatus: 
					{
						ErrorCode: String,
						Message: String,
						StackTrace: String,
						Errors: 
						[
							{
								ErrorCode: String,
								FieldName: String,
								Message: String,
								Meta: 
								{
									String: String
								}
							}
						],
						Meta: 
						{
							String: String
						}
					}
				}
			],
			IsRecurring: False,
			FromTime: PT0S,
			ToTime: PT0S,
			ReasonText: String,
			ReasonTextPublic: String,
			Color: String,
			BlockTime: False,
			Private: False,
			CalendarExportStatus: 
			{
				CalendarId: String,
				ExceptionId: 0,
				Synced: False
			},
			DaysOfWeek: 
			[
				{
					DayOfWeekId: 0,
					DotNetDayOfWeekId: 0,
					DayOfWeek: String
				}
			],
			ResponseStatus: 
			{
				ErrorCode: String,
				Message: String,
				StackTrace: String,
				Errors: 
				[
					{
						ErrorCode: String,
						FieldName: String,
						Message: String,
						Meta: 
						{
							String: String
						}
					}
				],
				Meta: 
				{
					String: String
				}
			}
		}
	],
	Meta: 
	{
		String: String
	},
	ResponseStatus: 
	{
		ErrorCode: String,
		Message: String,
		StackTrace: String,
		Errors: 
		[
			{
				ErrorCode: String,
				FieldName: String,
				Message: String,
				Meta: 
				{
					String: String
				}
			}
		],
		Meta: 
		{
			String: String
		}
	}
}