{"openapi":"3.1.0","info":{"title":"TravAI","version":"0.1.0"},"paths":{"/auth/signup":{"post":{"tags":["auth"],"summary":"Sign Up","description":"Register a new user with default 'customer' role","operationId":"sign_up_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSignUp"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sign Up Auth Signup Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/signin":{"post":{"tags":["auth"],"summary":"Sign In","description":"Authenticate user and return access token","operationId":"sign_in_auth_signin_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSignIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sign In Auth Signin Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/change-password":{"post":{"tags":["auth"],"summary":"Change Password","description":"Change user password","operationId":"change_password_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserChangePassword"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Change Password Auth Change Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/me":{"get":{"tags":["auth"],"summary":"Get Current User Info","description":"Get current user information","operationId":"get_current_user_info_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithRole"}}}}},"security":[{"HTTPBearer":[]}]}},"/users/":{"get":{"tags":["users"],"summary":"Get All Users","description":"Get all users with their active status - Admin only","operationId":"get_all_users_users__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserListItem"},"type":"array","title":"Response Get All Users Users  Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/users/update":{"put":{"tags":["users"],"summary":"Update User","description":"Update user role and/or active status - Admin only","operationId":"update_user_users_update_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update User Users Update Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/users/create":{"post":{"tags":["users"],"summary":"Create User","description":"Create a new user with specified role - Admin only","operationId":"create_user_users_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create User Users Create Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/users/currency":{"put":{"tags":["users"],"summary":"Update User Currency","description":"Update current user's default currency","operationId":"update_user_currency_users_currency_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCurrencyUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update User Currency Users Currency Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/customers/":{"get":{"tags":["customers"],"summary":"Get All Customers","description":"Get all customers","operationId":"get_all_customers_customers__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CustomerResponse"},"type":"array","title":"Response Get All Customers Customers  Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["customers"],"summary":"Create Personal Customer","description":"Create personal customer profile - User can create their own profile","operationId":"create_personal_customer_customers__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Personal Customer Customers  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/customers/profile":{"get":{"tags":["customers"],"summary":"Get Customer Profile","description":"Get customer profile information - User can view their own profile","operationId":"get_customer_profile_customers_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["customers"],"summary":"Update Customer Profile","description":"Update customer profile information - User can update their own profile","operationId":"update_customer_profile_customers_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Update Customer Profile Customers Profile Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/customers/{customer_id}":{"put":{"tags":["customers"],"summary":"Update Any Customer","description":"Update any customer profile information - Admin only","operationId":"update_any_customer_customers__customer_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"integer","title":"Customer Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Any Customer Customers  Customer Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["customers"],"summary":"Get Any Customer","description":"Get any customer profile information - Admin only","operationId":"get_any_customer_customers__customer_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"integer","title":"Customer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["customers"],"summary":"Delete Personal Customer","description":"Delete a customer profile owned by the current user","operationId":"delete_personal_customer_customers__customer_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"integer","title":"Customer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Personal Customer Customers  Customer Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/customers/create":{"post":{"tags":["customers"],"summary":"Create Customer","description":"Create new customer - Admin only","operationId":"create_customer_customers_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCustomerCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Customer Customers Create Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/customers/update/{customer_id}":{"put":{"tags":["customers"],"summary":"Update Personal Customer Profile","description":"Update personal customer profile information - User can update their own profile","operationId":"update_personal_customer_profile_customers_update__customer_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"customer_id","in":"path","required":true,"schema":{"type":"integer","title":"Customer Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Personal Customer Profile Customers Update  Customer Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat/messages":{"post":{"tags":["chat"],"summary":"Send Message","operationId":"send_message_chat_messages_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendChatMessageRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendChatMessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/chat/{chat_id}":{"get":{"tags":["chat"],"summary":"Get Chat","operationId":"get_chat_chat__chat_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"chat_id","in":"path","required":true,"schema":{"type":"integer","title":"Chat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat/":{"get":{"tags":["chat"],"summary":"List Chats","operationId":"list_chats_chat__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ChatListItem"},"type":"array","title":"Response List Chats Chat  Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/chat/payments/{payment_id}":{"get":{"tags":["chat"],"summary":"Get Payment","operationId":"get_payment_chat_payments__payment_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"integer","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat/credit-card":{"get":{"tags":["chat"],"summary":"List Credit Cards","operationId":"list_credit_cards_chat_credit_card_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PaymentCardResponse"},"type":"array","title":"Response List Credit Cards Chat Credit Card Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["chat"],"summary":"Add Credit Card","operationId":"add_credit_card_chat_credit_card_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCreditCardRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCreditCardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/chat/payments/{payment_id}/stripe-status":{"get":{"tags":["chat"],"summary":"Get Stripe Payment Status","description":"Check the status of a Stripe payment.\n\nReturns the current payment status from both the database and Stripe.\nUse this endpoint to poll for payment completion after redirect.","operationId":"get_stripe_payment_status_chat_payments__payment_id__stripe_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"integer","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/waitlist/":{"get":{"tags":["waitlist"],"summary":"Get Waitlist Table","operationId":"get_waitlist_table_waitlist__get","security":[{"HTTPBasic":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000,"minimum":1},{"type":"null"}],"description":"Optional limit for the number of waitlist entries to return.","title":"Limit"},"description":"Optional limit for the number of waitlist entries to return."}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/invites/":{"get":{"tags":["invites"],"summary":"Invite Form","operationId":"invite_form_invites__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}},"security":[{"HTTPBasic":[]}]},"post":{"tags":["invites"],"summary":"Create Invite","operationId":"create_invite_invites__post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_create_invite_invites__post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBasic":[]}]}},"/bookings/":{"get":{"tags":["bookings"],"summary":"Get All Bookings","description":"Get all bookings for the authenticated user","operationId":"get_all_bookings_bookings__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BookingResponse"},"type":"array","title":"Response Get All Bookings Bookings  Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/rates/convert":{"post":{"tags":["rates"],"summary":"Convert Price","operationId":"convert_price_rates_convert_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertPriceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertPriceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments":{"post":{"tags":["payments"],"summary":"Create Payment","operationId":"create_payment_payments_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePaymentFromOffersRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Payment Payments Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/payments/{payment_id}":{"get":{"tags":["payments"],"summary":"Get Payment","description":"Get a single payment by ID for the current user.","operationId":"get_payment_payments__payment_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"integer","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Payment Payments  Payment Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/itineraries":{"get":{"tags":["itineraries"],"summary":"List Itineraries","description":"List user itineraries that have a successful payment, paginated.","operationId":"list_itineraries_itineraries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page","default":20,"title":"Page Size"},"description":"Items per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedItinerariesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/itineraries/{itinerary_id}/offers":{"get":{"tags":["itineraries"],"summary":"List Itinerary Offers","description":"List all offers for an itinerary (no pagination).","operationId":"list_itinerary_offers_itineraries__itinerary_id__offers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"itinerary_id","in":"path","required":true,"schema":{"type":"integer","title":"Itinerary Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ItineraryOfferListItem"},"title":"Response List Itinerary Offers Itineraries  Itinerary Id  Offers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/itineraries/{itinerary_id}/offers/{offer_id}":{"get":{"tags":["itineraries"],"summary":"Get Itinerary Offer","description":"Get full data for a single itinerary offer.","operationId":"get_itinerary_offer_itineraries__itinerary_id__offers__offer_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"itinerary_id","in":"path","required":true,"schema":{"type":"integer","title":"Itinerary Id"}},{"name":"offer_id","in":"path","required":true,"schema":{"type":"integer","title":"Offer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItineraryOfferDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/searches":{"post":{"tags":["searches"],"summary":"Create Search","description":"Run a flight or stay search, persist all results, and return a preview.","operationId":"create_search_searches_post","requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/FlightSearchRequest"},{"$ref":"#/components/schemas/StaySearchRequest"}],"title":"Body","discriminator":{"propertyName":"type","mapping":{"FLIGHT":"#/components/schemas/FlightSearchRequest","STAY":"#/components/schemas/StaySearchRequest"}}}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Search Searches Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/searches/{search_id}/offers":{"get":{"tags":["searches"],"summary":"Get Offers","description":"Retrieve a saved search with paginated offers.","operationId":"get_offers_searches__search_id__offers_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max offers to return","default":20,"title":"Limit"},"description":"Max offers to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset into the offers list","default":0,"title":"Offset"},"description":"Offset into the offers list"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Offers Searches  Search Id  Offers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/searches/{search_id}/offers/{offer_id}":{"get":{"tags":["searches"],"summary":"Get Offer","operationId":"get_offer_searches__search_id__offers__offer_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"offer_id","in":"path","required":true,"schema":{"type":"string","title":"Offer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Offer Searches  Search Id  Offers  Offer Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/searches/{search_id}/offers/{offer_id}/pricing":{"get":{"tags":["searches"],"summary":"Get Offer Pricing","description":"Lock pricing for a flight offer from a saved search.","operationId":"get_offer_pricing_searches__search_id__offers__offer_id__pricing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"offer_id","in":"path","required":true,"schema":{"type":"string","title":"Offer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Offer Pricing Searches  Search Id  Offers  Offer Id  Pricing Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/searches/{search_id}/offers/{offer_id}/rates":{"get":{"tags":["searches"],"summary":"Get Offer Rates","operationId":"get_offer_rates_searches__search_id__offers__offer_id__rates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"offer_id","in":"path","required":true,"schema":{"type":"string","title":"Offer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StayRoom"},"title":"Response Get Offer Rates Searches  Search Id  Offers  Offer Id  Rates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/searches/{search_id}/offers/{offer_id}/rates/{rate_id}/pricing":{"get":{"tags":["searches"],"summary":"Get Offer Rate Pricing","description":"Create a Duffel quote from a rate_id and return pricing details.","operationId":"get_offer_rate_pricing_searches__search_id__offers__offer_id__rates__rate_id__pricing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"offer_id","in":"path","required":true,"schema":{"type":"string","title":"Offer Id"}},{"name":"rate_id","in":"path","required":true,"schema":{"type":"string","title":"Rate Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Offer Rate Pricing Searches  Search Id  Offers  Offer Id  Rates  Rate Id  Pricing Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/searches/{search_id}/offers/{offer_id}/photos":{"get":{"tags":["searches"],"summary":"Offer Photo Gallery","description":"Serve an HTML photo gallery for a hotel offer.","operationId":"offer_photo_gallery_searches__search_id__offers__offer_id__photos_get","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"offer_id","in":"path","required":true,"schema":{"type":"string","title":"Offer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/searches/{search_id}/offers/{offer_id}/photos/{photo_index}":{"get":{"tags":["searches"],"summary":"Offer Photo Proxy","description":"Proxy a single hotel photo, fetching from the upstream CDN server-side.","operationId":"offer_photo_proxy_searches__search_id__offers__offer_id__photos__photo_index__get","parameters":[{"name":"search_id","in":"path","required":true,"schema":{"type":"string","title":"Search Id"}},{"name":"offer_id","in":"path","required":true,"schema":{"type":"string","title":"Offer Id"}},{"name":"photo_index","in":"path","required":true,"schema":{"type":"integer","title":"Photo Index"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/stripe/webhook":{"post":{"tags":["stripe"],"summary":"Stripe Webhook","description":"Handle Stripe webhook events.\n\nThis endpoint receives events from Stripe when payment status changes.\nConfigure this URL in your Stripe Dashboard: https://dashboard.stripe.com/webhooks","operationId":"stripe_webhook_stripe_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/tokens":{"get":{"tags":["tokens"],"summary":"Get Tokens","description":"Return all available tokens from the 1Click API.","operationId":"get_tokens_tokens_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response Get Tokens Tokens Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/SKILL.md":{"get":{"tags":["skill"],"summary":"Get Skill","operationId":"get_skill_SKILL_md_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"AddCreditCardRequest":{"properties":{"number":{"type":"string","title":"Number","description":"Full credit card number"},"name":{"type":"string","title":"Name","description":"Cardholder name"},"expiry_year":{"type":"string","title":"Expiry Year","description":"Card expiration year in YY format"},"expiry_month":{"type":"string","title":"Expiry Month","description":"Card expiration month in MM format"},"cvc":{"type":"string","title":"Cvc","description":"Card security code"},"address_region":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Region","description":"State or region of billing address"},"address_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Postal Code","description":"Postal code of billing address"},"address_line_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 2","description":"Optional second address line"},"address_line_1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 1","description":"Primary address line"},"address_country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Country Code","description":"ISO country code of billing address"},"address_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address City","description":"City of billing address"}},"type":"object","required":["number","name","expiry_year","expiry_month","cvc"],"title":"AddCreditCardRequest"},"AddCreditCardResponse":{"properties":{"card_id":{"type":"string","title":"Card Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"last_4_digits":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last 4 Digits"},"live_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Live Mode"},"multi_use":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Multi Use"},"unavailable_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unavailable At"},"result":{"type":"boolean","title":"Result"},"user_id":{"type":"integer","title":"User Id"}},"type":"object","required":["card_id","result","user_id"],"title":"AddCreditCardResponse"},"AdminCustomerCreate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Of Birth"},"nationality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nationality"},"document_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Number"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"document_issuance_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Document Issuance Date"},"document_expiry_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Document Expiry Date"},"document_holder":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Document Holder"},"additional_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Additional Info"},"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"AdminCustomerCreate"},"AdminUserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"role":{"type":"string","title":"Role"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true},"currency":{"anyOf":[{"type":"string","enum":["USD","EUR","AED"]},{"type":"null"}],"title":"Currency","default":"USD"}},"type":"object","required":["email","password","role"],"title":"AdminUserCreate"},"Body_create_invite_invites__post":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"Body_create_invite_invites__post"},"BookingResponse":{"properties":{"payment_id":{"type":"integer","title":"Payment Id"},"offer_id":{"type":"string","title":"Offer Id"},"search_id":{"type":"string","title":"Search Id"},"status":{"type":"string","title":"Status"},"booking_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Booking Reference"},"total_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"passengers":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Passengers"},"booking_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Booking Data"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["payment_id","offer_id","search_id","status","created_at","updated_at"],"title":"BookingResponse"},"ChatListItem":{"properties":{"chat_id":{"type":"integer","title":"Chat Id"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["chat_id","status","created_at","updated_at"],"title":"ChatListItem"},"ChatMessageResponse":{"properties":{"message_id":{"type":"integer","title":"Message Id"},"role":{"type":"string","title":"Role"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"last_event":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Event"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["message_id","role","text","data","last_event","created_at"],"title":"ChatMessageResponse"},"ChatStatusResponse":{"properties":{"chat_id":{"type":"integer","title":"Chat Id"},"status":{"type":"string","title":"Status"},"messages":{"items":{"$ref":"#/components/schemas/ChatMessageResponse"},"type":"array","title":"Messages"}},"type":"object","required":["chat_id","status","messages"],"title":"ChatStatusResponse"},"ConvertPriceRequest":{"properties":{"total_fiat_amount":{"type":"number","title":"Total Fiat Amount"},"total_fiat_currency":{"type":"string","title":"Total Fiat Currency"},"origin_token":{"type":"string","title":"Origin Token"}},"type":"object","required":["total_fiat_amount","total_fiat_currency","origin_token"],"title":"ConvertPriceRequest"},"ConvertPriceResponse":{"properties":{"origin_token":{"type":"string","title":"Origin Token"},"origin_token_decimals":{"type":"string","title":"Origin Token Decimals"},"origin_token_amount":{"type":"string","title":"Origin Token Amount"}},"type":"object","required":["origin_token","origin_token_decimals","origin_token_amount"],"title":"ConvertPriceResponse"},"CreatePaymentFromOffersRequest":{"properties":{"method":{"$ref":"#/components/schemas/PaymentMethod","description":"Payment method: CRYPTO or CARD"},"chat_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chat Id","description":"Chat ID to associate with the itinerary"},"offers":{"items":{"$ref":"#/components/schemas/PaymentOfferInput"},"type":"array","minItems":1,"title":"Offers","description":"Offers to price and include"},"origin_asset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin Asset","description":"Token asset ID for payment (e.g. from OneClick)"},"refund_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refund To","description":"Refund address if payment fails or is cancelled"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url","description":"URL to redirect after successful payment (required for CARD)"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url","description":"URL to redirect if payment is cancelled (required for CARD)"}},"type":"object","required":["method","offers"],"title":"CreatePaymentFromOffersRequest","description":"Request body for POST /payments (create payment from chat session offers)."},"CustomerAge":{"properties":{"age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Age","description":"Age of a customer","examples":[2,30,68]},"type":{"$ref":"#/components/schemas/CustomerType","description":"Type of customer. Infant is a customer under 2 years old. Child is a customer between 2 and 18 years old.","default":"ADULT","examples":["ADULT"]}},"type":"object","title":"CustomerAge","description":"Information about a customer's age"},"CustomerResponse":{"properties":{"customer_id":{"type":"integer","title":"Customer Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Of Birth"},"nationality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nationality"},"document_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Number"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"document_issuance_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Document Issuance Date"},"document_expiry_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Document Expiry Date"},"document_holder":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Document Holder"},"additional_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Additional Info"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"}},"type":"object","required":["customer_id","title","first_name","last_name","gender","date_of_birth","nationality","document_number","phone_number","country_code","document_issuance_date","document_expiry_date","document_holder","additional_info","email"],"title":"CustomerResponse"},"CustomerType":{"type":"string","enum":["HELD_INFANT","CHILD","ADULT","SENIOR"],"title":"CustomerType","description":"Type of customer"},"CustomerUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"gender":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gender"},"date_of_birth":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Of Birth"},"nationality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nationality"},"document_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Number"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"document_issuance_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Document Issuance Date"},"document_expiry_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Document Expiry Date"},"document_holder":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Document Holder"},"additional_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Additional Info"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"}},"type":"object","title":"CustomerUpdate"},"FlightSearchRequest":{"properties":{"type":{"type":"string","const":"FLIGHT","title":"Type"},"origin_iata":{"type":"string","maxLength":3,"minLength":3,"pattern":"^[A-Z]{3}$","title":"Origin Iata","description":"Origin IATA code","examples":["LON","LIS"]},"destination_iata":{"type":"string","maxLength":3,"minLength":3,"pattern":"^[A-Z]{3}$","title":"Destination Iata","description":"Destination IATA code","examples":["LON","LIS"]},"departure_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Departure Date","description":"Departure date in YYYY-MM-DD format","examples":["2025-10-10"]},"return_date":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"title":"Return Date","description":"Return date in YYYY-MM-DD format (omit for one-way)","examples":["2025-10-17"]},"customers":{"items":{"$ref":"#/components/schemas/CustomerAge"},"type":"array","title":"Customers","description":"List of passengers with age/type info"}},"type":"object","required":["type","origin_iata","destination_iata","departure_date","customers"],"title":"FlightSearchRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ItineraryListItem":{"properties":{"itinerary_id":{"type":"integer","title":"Itinerary Id"},"title":{"type":"string","title":"Title"},"chat_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chat Id"},"created_at":{"type":"string","title":"Created At"},"offers":{"items":{"$ref":"#/components/schemas/ItineraryOfferListItem"},"type":"array","title":"Offers","default":[]},"payment":{"anyOf":[{"$ref":"#/components/schemas/PaymentSummary"},{"type":"null"}]}},"type":"object","required":["itinerary_id","title","created_at"],"title":"ItineraryListItem"},"ItineraryOfferDetail":{"properties":{"itinerary_offer_id":{"type":"integer","title":"Itinerary Offer Id"},"itinerary_id":{"type":"integer","title":"Itinerary Id"},"type":{"type":"string","title":"Type"},"provider":{"type":"string","title":"Provider"},"customers":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Customers"},"booking_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Booking Summary"},"price":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["itinerary_offer_id","itinerary_id","type","provider","created_at","updated_at"],"title":"ItineraryOfferDetail"},"ItineraryOfferListItem":{"properties":{"itinerary_offer_id":{"type":"integer","title":"Itinerary Offer Id"},"type":{"type":"string","title":"Type"},"provider":{"type":"string","title":"Provider"},"price":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"booking_summary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Booking Summary"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["itinerary_offer_id","type","provider","created_at"],"title":"ItineraryOfferListItem"},"PaginatedItinerariesResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ItineraryListItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"PaginatedItinerariesResponse"},"PaymentCardResponse":{"properties":{"card_id":{"type":"string","title":"Card Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand"},"last_4_digits":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last 4 Digits"},"live_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Live Mode"},"multi_use":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Multi Use"},"unavailable_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unavailable At"}},"type":"object","required":["card_id"],"title":"PaymentCardResponse"},"PaymentMethod":{"type":"string","enum":["CRYPTO","CARD"],"title":"PaymentMethod"},"PaymentOfferInput":{"properties":{"type":{"type":"string","enum":["FLIGHT","STAY"],"title":"Type","description":"Offer type"},"provider":{"type":"string","const":"DUFFEL","title":"Provider","description":"Provider","default":"DUFFEL"},"offer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Offer Id","description":"Duffel offer ID (required for FLIGHT)"},"search_id":{"type":"string","title":"Search Id","description":"Search ID from chat session"},"rate_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Id","description":"Duffel rate ID (required for STAY)"},"customers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Customers","description":"Customer data"}},"type":"object","required":["type","search_id","customers"],"title":"PaymentOfferInput","description":"Single offer input for POST /payments - fetches pricing from Duffel."},"PaymentResponse":{"properties":{"payment_id":{"type":"integer","title":"Payment Id"},"user_id":{"type":"integer","title":"User Id"},"chat_id":{"type":"integer","title":"Chat Id"},"search_id":{"type":"string","title":"Search Id"},"offer_id":{"type":"string","title":"Offer Id"},"deposit_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deposit Address"},"deposit_addresses":{"items":{"type":"string"},"type":"array","title":"Deposit Addresses"},"status":{"type":"string","title":"Status"},"passengers":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Passengers"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"expected_fiat_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Fiat Amount"},"expected_fiat_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Fiat Currency"},"expected_token_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Token Amount"},"expected_token_asset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Token Asset"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["payment_id","user_id","chat_id","search_id","offer_id","deposit_address","deposit_addresses","status","passengers","data","expected_fiat_amount","expected_fiat_currency","expected_token_amount","expected_token_asset","created_at","updated_at"],"title":"PaymentResponse"},"PaymentSummary":{"properties":{"payment_id":{"type":"integer","title":"Payment Id"},"status":{"type":"string","title":"Status"},"fiat_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fiat Amount"},"fiat_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fiat Currency"},"token_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Amount"},"token_asset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Asset"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["payment_id","status","created_at"],"title":"PaymentSummary"},"SendChatMessageRequest":{"properties":{"chat_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chat Id","description":"Existing chat id. If omitted, a new chat will be created"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"}},"type":"object","title":"SendChatMessageRequest"},"SendChatMessageResponse":{"properties":{"chat_id":{"type":"integer","title":"Chat Id"},"message_id":{"type":"integer","title":"Message Id"}},"type":"object","required":["chat_id","message_id"],"title":"SendChatMessageResponse"},"StayCancellationTimelineEntry":{"properties":{"before":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Before"},"refund_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refund Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"}},"type":"object","title":"StayCancellationTimelineEntry"},"StayRateCondition":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"StayRateCondition"},"StayRoom":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"size_sqm":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Size Sqm"},"max_occupancy":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Occupancy"},"photos":{"items":{"$ref":"#/components/schemas/StayRoomPhoto"},"type":"array","title":"Photos","default":[]},"beds":{"items":{"$ref":"#/components/schemas/StayRoomBed"},"type":"array","title":"Beds","default":[]},"rates":{"items":{"$ref":"#/components/schemas/StayRoomRate"},"type":"array","title":"Rates","default":[]}},"type":"object","title":"StayRoom"},"StayRoomBed":{"properties":{"count":{"type":"integer","title":"Count"},"type":{"type":"string","title":"Type"}},"type":"object","required":["count","type"],"title":"StayRoomBed"},"StayRoomPhoto":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"StayRoomPhoto"},"StayRoomRate":{"properties":{"id":{"type":"string","title":"Id"},"board_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Board Type"},"base_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Amount"},"base_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Currency"},"tax_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tax Amount"},"tax_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tax Currency"},"fee_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Amount"},"fee_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fee Currency"},"total_amount":{"type":"string","title":"Total Amount"},"total_currency":{"type":"string","title":"Total Currency"},"due_at_accommodation_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Due At Accommodation Amount"},"due_at_accommodation_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Due At Accommodation Currency"},"payment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Type"},"meal_inclusive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Meal Inclusive"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"cancellation_timeline":{"items":{"$ref":"#/components/schemas/StayCancellationTimelineEntry"},"type":"array","title":"Cancellation Timeline","default":[]},"conditions":{"items":{"$ref":"#/components/schemas/StayRateCondition"},"type":"array","title":"Conditions","default":[]}},"type":"object","required":["id","total_amount","total_currency"],"title":"StayRoomRate"},"StaySearchRequest":{"properties":{"type":{"type":"string","const":"STAY","title":"Type"},"location_anchor":{"$ref":"#/components/schemas/StaysSearchAnchor","description":"Location reference point. Use type='airport' + 3-letter IATA value for airport-based searches. Other types: city, city_center, region, address, place, others."},"check_in_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Check In Date","description":"Check-in date in YYYY-MM-DD format","examples":["2025-10-10"]},"check_out_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Check Out Date","description":"Check-out date in YYYY-MM-DD format","examples":["2025-10-17"]},"rooms":{"type":"integer","maximum":8.0,"minimum":1.0,"title":"Rooms","description":"Number of rooms","default":1},"guests":{"type":"integer","minimum":1.0,"title":"Guests","description":"Number of adult guests","default":1},"radius_km":{"type":"integer","exclusiveMinimum":0.0,"title":"Radius Km","description":"Search radius in km around the anchor","default":50}},"type":"object","required":["type","location_anchor","check_in_date","check_out_date"],"title":"StaySearchRequest"},"StaysSearchAnchor":{"properties":{"value":{"type":"string","title":"Value","description":"Reference point text (may be enriched with destination context)."},"type":{"type":"string","enum":["airport","city","city_center","region","address","place","others"],"title":"Type","description":"How to interpret 'value'. Examples: 'city' (Milano), 'city_center' (London center), 'region' (Manhattan), 'address' (Via G.B. Pioda 10), 'place' (Parque Edgar Sampaio Fontes), 'others'."}},"type":"object","required":["value","type"],"title":"StaysSearchAnchor","description":"User-provided reference point for the stays search."},"UserChangePassword":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"UserChangePassword"},"UserCurrencyUpdate":{"properties":{"currency":{"type":"string","enum":["USD","EUR","AED"],"title":"Currency"}},"type":"object","required":["currency"],"title":"UserCurrencyUpdate"},"UserListItem":{"properties":{"user_id":{"type":"integer","title":"User Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"currency":{"type":"string","title":"Currency"}},"type":"object","required":["user_id","email","role","is_active","created_at","currency"],"title":"UserListItem"},"UserSignIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"UserSignIn"},"UserSignUp":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"}},"type":"object","required":["email","password","first_name","last_name"],"title":"UserSignUp"},"UserUpdate":{"properties":{"user_id":{"type":"integer","title":"User Id"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","required":["user_id"],"title":"UserUpdate"},"UserWithRole":{"properties":{"user_id":{"type":"integer","title":"User Id"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","title":"Created At"},"currency":{"type":"string","title":"Currency"}},"type":"object","required":["user_id","email","role","is_active","created_at","currency"],"title":"UserWithRole"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"},"HTTPBasic":{"type":"http","scheme":"basic"}}}}