# generated by datamodel-codegen:
#   filename:  duffel_openapi.yaml
#   timestamp: 2026-03-12T00:54:44+00:00

from datetime import date, datetime
from enum import StrEnum
from typing import Any

from pydantic import AnyUrl, BaseModel, Field


class PaginationMeta(BaseModel):
    limit: int | None = None
    after: str | None = None
    before: str | None = None


class Type(StrEnum):
    authentication_error = 'authentication_error'
    airline_error = 'airline_error'
    invalid_state_error = 'invalid_state_error'
    rate_limit_error = 'rate_limit_error'
    validation_error = 'validation_error'
    invalid_request_error = 'invalid_request_error'
    api_error = 'api_error'


class Source(BaseModel):
    field: str | None = None
    pointer: str | None = None


class Error(BaseModel):
    title: str | None = Field(default=None, description='Brief error description.')
    message: str | None = Field(
        default=None, description='Detailed human-readable explanation.'
    )
    type: Type | None = None
    code: str | None = Field(default=None, description='Machine-readable error code.')
    documentation_url: AnyUrl | None = None
    source: Source | None = Field(
        default=None, description='Present on validation errors.'
    )


class ErrorResponse(BaseModel):
    errors: list[Error] | None = None


class Airline(BaseModel):
    id: str | None = None
    name: str | None = None
    iata_code: str | None = None
    logo_symbol_url: str | None = None
    logo_lockup_url: str | None = None
    conditions_of_carriage_url: str | None = None


class Aircraft(BaseModel):
    id: str | None = None
    name: str | None = None
    iata_code: str | None = None


class Type1(StrEnum):
    airport = 'airport'
    city = 'city'


class LoyaltyProgramme(BaseModel):
    id: str | None = None
    name: str | None = None
    alliance: str | None = None
    logo_url: str | None = None
    owner_airline_id: str | None = None


class LoyaltyProgrammeAccount(BaseModel):
    airline_iata_code: str | None = None
    account_number: str | None = None


class TimeWindow(BaseModel):
    from_: str | None = Field(default=None, alias='from', description='HH:MM format')
    to: str | None = Field(default=None, description='HH:MM format')


class ConditionDetail(BaseModel):
    allowed: bool | None = None
    penalty_amount: str | None = None
    penalty_currency: str | None = None


class PaymentRequirements(BaseModel):
    requires_instant_payment: bool | None = None
    price_guarantee_expires_at: datetime | None = None
    payment_required_by: datetime | None = None


class PrivateFare(BaseModel):
    corporate_code: str | None = None
    tour_code: str | None = None
    tracking_reference: str | None = None
    type: str | None = None


class SliceRequest(BaseModel):
    origin: str = Field(..., description='IATA airport or city code.')
    destination: str = Field(..., description='IATA airport or city code.')
    departure_date: date
    departure_time: TimeWindow | None = None
    arrival_time: TimeWindow | None = None


class Type2(StrEnum):
    adult = 'adult'
    child = 'child'
    infant_without_seat = 'infant_without_seat'


class PassengerRequest(BaseModel):
    type: Type2 | None = None
    age: int | None = Field(default=None, ge=0, le=130)
    given_name: str | None = None
    family_name: str | None = None
    fare_type: str | None = None
    loyalty_programme_accounts: list[LoyaltyProgrammeAccount] | None = None


class Baggage(BaseModel):
    type: str | None = None
    quantity: int | None = None


class Passenger(BaseModel):
    passenger_id: str | None = None
    cabin_class: str | None = None
    cabin_class_marketing_name: str | None = None
    baggages: list[Baggage] | None = None


class Passenger1(BaseModel):
    id: str | None = None
    type: str | None = None
    given_name: str | None = None
    family_name: str | None = None
    age: int | None = None
    loyalty_programme_accounts: list[LoyaltyProgrammeAccount] | None = None
    fare_type: str | None = None


class Type3(StrEnum):
    baggage = 'baggage'
    seat = 'seat'
    meal = 'meal'


class Service(BaseModel):
    id: str | None = None
    type: Type3 | None = None
    total_amount: str | None = None
    total_currency: str | None = None
    maximum_quantity: int | None = None
    passenger_ids: list[str] | None = None
    segment_ids: list[str] | None = None
    metadata: dict[str, Any] | None = None


class BookingReference(BaseModel):
    airline: Airline | None = None
    reference: str | None = None


class Type4(StrEnum):
    instant = 'instant'
    hold = 'hold'


class Content(StrEnum):
    self_managed = 'self-managed'
    managed = 'managed'


class PaymentStatus(BaseModel):
    awaiting_payment: bool | None = None
    paid_at: datetime | None = None
    payment_required_by: datetime | None = None
    price_guarantee_expires_at: datetime | None = None


class AvailableAction(StrEnum):
    cancel = 'cancel'
    change = 'change'
    update = 'update'


class Type5(StrEnum):
    adult = 'adult'
    child = 'child'
    infant_without_seat = 'infant_without_seat'


class Gender(StrEnum):
    m = 'm'
    f = 'f'


class IdentityDocument(BaseModel):
    type: str | None = None
    unique_identifier: str | None = None
    issuing_country_code: str | None = None
    expires_on: date | None = None


class OrderPassenger(BaseModel):
    id: str | None = None
    type: Type5 | None = None
    given_name: str | None = None
    family_name: str | None = None
    born_on: date | None = None
    gender: Gender | None = None
    title: str | None = None
    email: str | None = None
    phone_number: str | None = None
    loyalty_programme_accounts: list[LoyaltyProgrammeAccount] | None = None
    identity_documents: list[IdentityDocument] | None = None


class RefundTo(StrEnum):
    arc_bsp_cash = 'arc_bsp_cash'
    balance = 'balance'
    card = 'card'
    voucher = 'voucher'
    awaiting_payment = 'awaiting_payment'
    airline_credits = 'airline_credits'


class OrderCancellation(BaseModel):
    id: str | None = None
    order_id: str | None = None
    live_mode: bool | None = None
    created_at: datetime | None = None
    expires_at: datetime | None = None
    confirmed_at: datetime | None = None
    refund_amount: str | None = None
    refund_currency: str | None = None
    refund_to: RefundTo | None = None
    airline_credits: list[dict[str, Any]] | None = None


class Slices(BaseModel):
    add: list[dict[str, Any]] | None = None
    remove: list[dict[str, Any]] | None = None


class RefundTo1(StrEnum):
    original_form_of_payment = 'original_form_of_payment'
    airline_credits = 'airline_credits'
    voucher = 'voucher'


class RefundTo2(StrEnum):
    original_form_of_payment = 'original_form_of_payment'
    voucher = 'voucher'
    airline_credits = 'airline_credits'


class ActionTaken(StrEnum):
    accepted = 'accepted'
    cancelled = 'cancelled'
    changed = 'changed'


class AvailableAction1(StrEnum):
    accept = 'accept'
    cancel = 'cancel'
    change = 'change'
    update = 'update'


class Type6(StrEnum):
    arc_bsp_cash = 'arc_bsp_cash'
    balance = 'balance'
    card = 'card'


class Status(StrEnum):
    pending = 'pending'
    failed = 'failed'
    succeeded = 'succeeded'
    cancelled = 'cancelled'


class Payment(BaseModel):
    id: str | None = None
    order_id: str | None = None
    amount: str | None = None
    currency: str | None = None
    type: Type6 | None = None
    status: Status | None = None
    created_at: datetime | None = None
    live_mode: bool | None = None
    failure_reason: str | None = None
    airline_credit_id: str | None = None


class Type7(StrEnum):
    eticket = 'eticket'
    mco = 'mco'


class AirlineCredit(BaseModel):
    id: str | None = None
    airline_iata_code: str | None = None
    amount: str | None = None
    amount_currency: str | None = None
    code: str | None = None
    created_at: datetime | None = None
    credit_amount: str | None = None
    credit_code: str | None = None
    credit_currency: str | None = None
    credit_name: str | None = None
    expires_at: datetime | None = None
    family_name: str | None = None
    given_name: str | None = None
    invalidated_at: datetime | None = None
    issued_on: date | None = None
    live_mode: bool | None = None
    order_id: str | None = None
    passenger_id: str | None = None
    spent_at: datetime | None = None
    type: Type7 | None = None
    user_id: str | None = None


class CabinClass(StrEnum):
    first = 'first'
    business = 'business'
    premium_economy = 'premium_economy'
    economy = 'economy'


class Wings(BaseModel):
    first_row_index: int | None = None
    last_row_index: int | None = None


class Type8(StrEnum):
    seat = 'seat'
    bassinet = 'bassinet'
    empty = 'empty'
    exit_row = 'exit_row'
    lavatory = 'lavatory'
    galley = 'galley'
    closet = 'closet'
    stairs = 'stairs'
    restricted_seat_general = 'restricted_seat_general'


class AvailableService(BaseModel):
    id: str | None = None
    passenger_id: str | None = None
    total_amount: str | None = None
    total_currency: str | None = None


class Element(BaseModel):
    type: Type8 | None = None
    designator: str | None = None
    name: str | None = None
    disclosures: list[str] | None = None
    available_services: list[AvailableService] | None = None


class Section(BaseModel):
    elements: list[Element] | None = None


class Row(BaseModel):
    sections: list[Section] | None = None


class Cabin(BaseModel):
    deck: int | None = None
    cabin_class: CabinClass | None = None
    aisles: int | None = None
    wings: Wings | None = None
    rows: list[Row] | None = None


class SeatMap(BaseModel):
    id: str | None = None
    slice_id: str | None = None
    segment_id: str | None = None
    cabins: list[Cabin] | None = None


class Type9(StrEnum):
    adult = 'adult'
    child = 'child'


class StaysGuest(BaseModel):
    type: Type9 | None = None
    age: int | None = None


class GeographicCoordinates(BaseModel):
    latitude: float | None = None
    longitude: float | None = None


class Location(BaseModel):
    address: dict[str, Any] | None = None
    geographic_coordinates: GeographicCoordinates | None = None


class Photo(BaseModel):
    url: str | None = None


class PaymentType(StrEnum):
    pay_now = 'pay_now'
    guarantee = 'guarantee'
    deposit = 'deposit'


class AvailablePaymentMethod(StrEnum):
    balance = 'balance'
    card = 'card'


class BoardType(StrEnum):
    room_only = 'room_only'
    breakfast = 'breakfast'
    half_board = 'half_board'
    full_board = 'full_board'
    all_inclusive = 'all_inclusive'


class CancellationTimelineItem(BaseModel):
    before: datetime | None = None
    refund_amount: str | None = None


class StaysRate(BaseModel):
    id: str | None = None
    total_amount: str | None = None
    total_currency: str | None = None
    base_amount: str | None = None
    base_currency: str | None = None
    tax_amount: str | None = None
    fee_amount: str | None = None
    due_at_accommodation_amount: str | None = None
    public_amount: str | None = None
    payment_type: PaymentType | None = None
    available_payment_methods: list[AvailablePaymentMethod] | None = None
    board_type: BoardType | None = None
    cancellation_timeline: list[CancellationTimelineItem] | None = None
    expires_at: datetime | None = None
    quantity_available: int | None = None
    supported_loyalty_programme: str | None = None
    loyalty_programme_required: bool | None = None
    deal_types: list[str] | None = None
    conditions: dict[str, Any] | None = None
    description: str | None = None


class SupportedNegotiatedRate(BaseModel):
    id: str | None = None
    display_name: str | None = None


class Status1(StrEnum):
    confirmed = 'confirmed'
    cancelled = 'cancelled'


class Guest(BaseModel):
    given_name: str | None = None
    family_name: str | None = None
    user_id: str | None = None


class NegotiatedRate(BaseModel):
    id: str | None = None
    display_name: str | None = None
    rate_access_code: str | None = None
    accommodation_ids: list[str] | None = None
    live_mode: bool | None = None


class StaysBrand(BaseModel):
    id: str | None = None
    name: str | None = None


class AccommodationLoyaltyProgramme(BaseModel):
    reference: str | None = None
    name: str | None = None
    logo_url_svg: str | None = None
    logo_url_png_small: str | None = None


class AccommodationReview(BaseModel):
    created_at: datetime | None = None
    reviewer_name: str | None = None
    score: float | None = Field(default=None, ge=1.0, le=10.0)
    text: str | None = None


class Brand(StrEnum):
    visa = 'visa'
    mastercard = 'mastercard'
    uatp = 'uatp'
    american_express = 'american_express'
    diners_club = 'diners_club'
    jcb = 'jcb'
    discover = 'discover'


class Card(BaseModel):
    id: str | None = None
    brand: Brand | None = None
    last_4_digits: str | None = None
    name: str | None = None
    multi_use: bool | None = None
    live_mode: bool | None = None
    unavailable_at: datetime | None = None


class Status2(StrEnum):
    challenge_required = 'challenge_required'
    ready_for_payment = 'ready_for_payment'
    failed = 'failed'
    expired = 'expired'


class ThreeDSecureSession(BaseModel):
    id: str | None = None
    card_id: str | None = None
    resource_id: str | None = None
    client_id: str | None = None
    status: Status2 | None = None
    live_mode: bool | None = None


class Webhook(BaseModel):
    id: str | None = None
    url: AnyUrl | None = None
    events: list[str] | None = None
    active: bool | None = None
    live_mode: bool | None = None
    secret: str | None = Field(default=None, description='Only returned on creation.')
    created_at: datetime | None = None
    updated_at: datetime | None = None


class WebhookDelivery(BaseModel):
    id: str | None = None
    endpoint_id: str | None = None
    event_id: str | None = None
    type: str | None = None
    url: str | None = None
    response_status_code: int | None = None
    response_body: str | None = None
    live_mode: bool | None = None
    created_at: datetime | None = None


class Type10(StrEnum):
    air_airline_credit_created = 'air.airline_credit.created'
    air_airline_credit_spent = 'air.airline_credit.spent'
    air_airline_credit_invalidated = 'air.airline_credit.invalidated'
    air_payment_failed = 'air.payment.failed'
    air_payment_succeeded = 'air.payment.succeeded'
    air_payment_cancelled = 'air.payment.cancelled'
    air_payment_pending = 'air.payment.pending'
    order_airline_initiated_change_detected = 'order.airline_initiated_change_detected'
    order_created = 'order.created'
    order_creation_failed = 'order.creation_failed'
    air_order_changed = 'air.order.changed'
    order_cancellation_created = 'order_cancellation.created'
    order_cancellation_confirmed = 'order_cancellation.confirmed'
    stays_booking_creation_failed = 'stays.booking_creation_failed'
    stays_booking_created = 'stays.booking.created'
    stays_booking_cancelled = 'stays.booking.cancelled'
    assistant_conversation_updated = 'assistant.conversation.updated'
    ping_triggered = 'ping.triggered'


class WebhookEvent(BaseModel):
    id: str | None = None
    type: Type10 | None = None
    created_at: datetime | None = None
    api_version: str | None = None
    live_mode: bool | None = None
    idempotency_key: str | None = None
    data: dict[str, Any] | None = None


class Group(BaseModel):
    id: str | None = None
    name: str | None = None


class CustomerUser(BaseModel):
    id: str | None = None
    email: str | None = None
    given_name: str | None = None
    family_name: str | None = None
    phone_number: str | None = None
    preferred_language: str | None = None
    group: Group | None = None
    created_at: datetime | None = None
    live_mode: bool | None = None


class CustomerUserGroup(BaseModel):
    id: str | None = None
    name: str | None = None
    user_ids: list[str] | None = None


class Conditions(BaseModel):
    change_before_departure: ConditionDetail | None = None
    refund_before_departure: ConditionDetail | None = None


class StaysRoom(BaseModel):
    id: str | None = None
    name: str | None = None
    photos: list[Photo] | None = None
    beds: list[dict[str, Any]] | None = None
    rates: list[StaysRate] | None = None


class StaysAccommodation(BaseModel):
    id: str | None = None
    name: str | None = None
    description: str | None = None
    location: Location | None = None
    photos: list[Photo] | None = None
    amenities: list[str] | None = None
    chain: dict[str, Any] | None = None
    brand: dict[str, Any] | None = None
    rating: float | None = None
    review_score: float | None = None
    review_count: int | None = None
    rooms: list[StaysRoom] | None = None
    check_in_information: dict[str, Any] | None = None
    key_collection: dict[str, Any] | None = None
    supported_loyalty_programme: str | None = None


class StaysSearchResult(BaseModel):
    id: str | None = None
    check_in_date: date | None = None
    check_out_date: date | None = None
    expires_at: datetime | None = None
    cheapest_rate_total_amount: str | None = None
    cheapest_rate_currency: str | None = None
    cheapest_rate_public_amount: str | None = None
    cheapest_rate_base_amount: str | None = None
    cheapest_rate_due_at_accommodation_amount: str | None = None
    accommodation: StaysAccommodation | None = None
    rooms: int | None = None
    guests: list[StaysGuest] | None = None
    supported_negotiated_rates: list[SupportedNegotiatedRate] | None = None


class StaysQuote(BaseModel):
    id: str | None = None
    total_amount: str | None = None
    total_currency: str | None = None
    base_amount: str | None = None
    base_currency: str | None = None
    tax_amount: str | None = None
    tax_currency: str | None = None
    fee_amount: str | None = None
    fee_currency: str | None = None
    deposit_amount: str | None = None
    deposit_currency: str | None = None
    due_at_accommodation_amount: str | None = None
    due_at_accommodation_currency: str | None = None
    check_in_date: date | None = None
    check_out_date: date | None = None
    rooms: int | None = None
    guests: list[StaysGuest] | None = None
    supported_loyalty_programme: str | None = None
    accommodation: StaysAccommodation | None = None


class StaysBooking(BaseModel):
    id: str | None = None
    status: Status1 | None = None
    reference: str | None = None
    check_in_date: date | None = None
    check_out_date: date | None = None
    confirmed_at: datetime | None = None
    cancelled_at: datetime | None = None
    guests: list[Guest] | None = None
    accommodation: StaysAccommodation | None = None
    estimated_commission_amount: str | None = None
    loyalty_programme_account_number: str | None = None
    metadata: dict[str, str] | None = None


class Airport(BaseModel):
    id: str | None = None
    name: str | None = None
    iata_code: str | None = None
    icao_code: str | None = None
    iata_country_code: str | None = None
    iata_city_code: str | None = None
    city_name: str | None = None
    latitude: float | None = None
    longitude: float | None = None
    time_zone: str | None = None
    city: "City | None" = None


class City(BaseModel):
    id: str | None = None
    name: str | None = None
    iata_code: str | None = None
    iata_country_code: str | None = None
    airports: list[Airport] | None = None


class Place(BaseModel):
    type: Type1 | None = None
    id: str | None = None
    name: str | None = None
    iata_code: str | None = None
    iata_country_code: str | None = None
    latitude: float | None = None
    longitude: float | None = None
    icao_code: str | None = None
    time_zone: str | None = None
    city_name: str | None = None
    iata_city_code: str | None = None
    city: City | None = None
    airports: list[Airport] | None = None


class Stop(BaseModel):
    id: str | None = None
    airport: Airport | None = None
    arriving_at: datetime | None = None
    departing_at: datetime | None = None
    duration: str | None = None


class Segment(BaseModel):
    id: str | None = None
    aircraft: Aircraft | None = None
    arriving_at: datetime | None = None
    departing_at: datetime | None = None
    destination: Airport | None = None
    destination_terminal: str | None = None
    origin: Airport | None = None
    origin_terminal: str | None = None
    duration: str | None = Field(default=None, description='ISO 8601 duration.')
    distance: str | None = None
    marketing_carrier: Airline | None = None
    marketing_carrier_flight_number: str | None = None
    operating_carrier: Airline | None = None
    operating_carrier_flight_number: str | None = None
    passengers: list[Passenger] | None = None
    stops: list[Stop] | None = None


class OfferSlice(BaseModel):
    id: str | None = None
    origin: Airport | None = None
    origin_type: str | None = None
    destination: Airport | None = None
    destination_type: str | None = None
    duration: str | None = None
    fare_brand_name: str | None = None
    conditions: Conditions | None = None
    segments: list[Segment] | None = None


class Offer(BaseModel):
    id: str | None = None
    live_mode: bool | None = None
    created_at: datetime | None = None
    updated_at: datetime | None = None
    expires_at: datetime | None = None
    base_amount: str | None = None
    base_currency: str | None = None
    tax_amount: str | None = None
    tax_currency: str | None = None
    total_amount: str | None = None
    total_currency: str | None = None
    total_emissions_kg: str | None = None
    owner: Airline | None = None
    partial: bool | None = None
    passenger_identity_documents_required: bool | None = None
    supported_passenger_identity_document_types: list[str] | None = None
    supported_loyalty_programmes: list[str] | None = None
    slices: list[OfferSlice] | None = None
    passengers: list[Passenger1] | None = None
    conditions: Conditions | None = None
    payment_requirements: PaymentRequirements | None = None
    available_services: list[Service] | None = None
    private_fares: list[PrivateFare] | None = None


class Order(BaseModel):
    id: str | None = None
    live_mode: bool | None = None
    booking_reference: str | None = None
    booking_references: list[BookingReference] | None = None
    offer_id: str | None = None
    type: Type4 | None = None
    content: Content | None = None
    owner: Airline | None = None
    passengers: list[OrderPassenger] | None = None
    slices: list[OfferSlice] | None = None
    services: list[Service] | None = None
    base_amount: str | None = None
    base_currency: str | None = None
    tax_amount: str | None = None
    tax_currency: str | None = None
    total_amount: str | None = None
    total_currency: str | None = None
    payment_status: PaymentStatus | None = None
    conditions: Conditions | None = None
    available_actions: list[AvailableAction] | None = None
    documents: list[dict[str, Any]] | None = None
    created_at: datetime | None = None
    synced_at: datetime | None = None
    cancelled_at: datetime | None = None
    cancellation: dict[str, Any] | None = None
    changes: list[dict[str, Any]] | None = None
    airline_initiated_changes: list[dict[str, Any]] | None = None
    void_window_ends_at: datetime | None = None
    metadata: dict[str, str] | None = None
    users: list[str] | None = None


class OrderChangeRequest(BaseModel):
    id: str | None = None
    order_id: str | None = None
    live_mode: bool | None = None
    created_at: datetime | None = None
    updated_at: datetime | None = None
    slices: Slices | None = None
    order_change_offers: "list[OrderChangeOffer] | None" = None


class Slices1(BaseModel):
    add: list[OfferSlice] | None = None
    remove: list[OfferSlice] | None = None


class OrderChangeOffer(BaseModel):
    id: str | None = None
    live_mode: bool | None = None
    created_at: datetime | None = None
    updated_at: datetime | None = None
    expires_at: datetime | None = None
    change_total_amount: str | None = None
    change_total_currency: str | None = None
    new_total_amount: str | None = None
    new_total_currency: str | None = None
    penalty_total_amount: str | None = None
    penalty_total_currency: str | None = None
    order_change_id: str | None = None
    refund_to: RefundTo1 | None = None
    conditions: Conditions | None = None
    slices: Slices1 | None = None
    private_fares: list[PrivateFare] | None = None


class OrderChange(BaseModel):
    id: str | None = None
    order_id: str | None = None
    live_mode: bool | None = None
    created_at: datetime | None = None
    confirmed_at: datetime | None = None
    expires_at: datetime | None = None
    change_total_amount: str | None = None
    change_total_currency: str | None = None
    new_total_amount: str | None = None
    new_total_currency: str | None = None
    penalty_total_amount: str | None = None
    penalty_total_currency: str | None = None
    refund_to: RefundTo2 | None = None
    slices: Slices1 | None = None


class AirlineInitiatedChange(BaseModel):
    id: str | None = None
    order_id: str | None = None
    action_taken: ActionTaken | None = None
    action_taken_at: datetime | None = None
    created_at: datetime | None = None
    updated_at: datetime | None = None
    available_actions: list[AvailableAction1] | None = None
    added: list[OfferSlice] | None = None
    removed: list[OfferSlice] | None = None
    travel_agent_ticket: dict[str, Any] | None = None


class Slice(BaseModel):
    origin_type: str | None = None
    origin: Airport | None = None
    destination_type: str | None = None
    destination: Airport | None = None
    departure_date: date | None = None


class OfferRequest(BaseModel):
    id: str | None = None
    live_mode: bool | None = None
    created_at: datetime | None = None
    cabin_class: CabinClass | None = None
    slices: list[Slice] | None = None
    offers: list[Offer] | None = None
    passengers: list[PassengerRequest] | None = None
    airline_credit_ids: list[str] | None = None
    client_key: str | None = None


class PartialOfferRequest(BaseModel):
    id: str | None = None
    live_mode: bool | None = None
    created_at: datetime | None = None
    client_key: str | None = None
    cabin_class: CabinClass | None = None
    airline_credit_ids: list[str] | None = None
    passengers: list[PassengerRequest] | None = None
    slices: list[dict[str, Any]] | None = None
    offers: list[Offer] | None = None


class BatchOfferRequest(BaseModel):
    id: str | None = None
    total_batches: int | None = None
    remaining_batches: int | None = None
    created_at: datetime | None = None
    live_mode: bool | None = None
    client_key: str | None = None
    offers: list[Offer] | None = None


Airport.model_rebuild()
OrderChangeRequest.model_rebuild()
