repull 0.2.10 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/lib/repull/api/airbnb_api.rb +332 -99
  4. data/lib/repull/api/atlas_api.rb +5 -5
  5. data/lib/repull/api/availability_api.rb +145 -3
  6. data/lib/repull/api/billing_api.rb +7 -7
  7. data/lib/repull/api/booking_com_api.rb +210 -54
  8. data/lib/repull/api/connect_api.rb +761 -8
  9. data/lib/repull/api/conversations_api.rb +92 -11
  10. data/lib/repull/api/guests_api.rb +82 -7
  11. data/lib/repull/api/health_api.rb +318 -0
  12. data/lib/repull/api/kv_api.rb +1 -1
  13. data/lib/repull/api/listings_api.rb +303 -24
  14. data/lib/repull/api/markets_api.rb +3 -3
  15. data/lib/repull/api/plumguide_api.rb +19 -11
  16. data/lib/repull/api/pricing_api.rb +15 -15
  17. data/lib/repull/api/properties_api.rb +12 -9
  18. data/lib/repull/api/quotes_api.rb +109 -0
  19. data/lib/repull/api/reservations_api.rb +166 -7
  20. data/lib/repull/api/reviews_api.rb +81 -7
  21. data/lib/repull/api/schema_api.rb +1 -1
  22. data/lib/repull/api/system_api.rb +1 -1
  23. data/lib/repull/api/vrbo_api.rb +10 -10
  24. data/lib/repull/api/webhooks_api.rb +11 -9
  25. data/lib/repull/api_client.rb +1 -1
  26. data/lib/repull/api_error.rb +1 -1
  27. data/lib/repull/api_model_base.rb +1 -1
  28. data/lib/repull/configuration.rb +1 -1
  29. data/lib/repull/models/account_created_event.rb +1 -1
  30. data/lib/repull/models/account_created_payload.rb +1 -1
  31. data/lib/repull/models/account_disconnected_event.rb +1 -1
  32. data/lib/repull/models/account_disconnected_payload.rb +1 -1
  33. data/lib/repull/models/acknowledge_booking_reservations_request.rb +1 -1
  34. data/lib/repull/models/ai_operation.rb +1 -1
  35. data/lib/repull/models/ai_operation_completed_event.rb +1 -1
  36. data/lib/repull/models/ai_operation_completed_payload.rb +1 -1
  37. data/lib/repull/models/ai_operation_failed_event.rb +1 -1
  38. data/lib/repull/models/ai_operation_failed_payload.rb +1 -1
  39. data/lib/repull/models/ai_operation_failed_payload_error.rb +1 -1
  40. data/lib/repull/models/airbnb_alteration.rb +154 -10
  41. data/lib/repull/models/airbnb_amenity.rb +1 -1
  42. data/lib/repull/models/airbnb_availability_write_request.rb +20 -1
  43. data/lib/repull/models/airbnb_calendar_operation.rb +97 -8
  44. data/lib/repull/models/airbnb_connection.rb +4 -4
  45. data/lib/repull/models/airbnb_connection_accessibility_amenities_inner.rb +1 -1
  46. data/lib/repull/models/airbnb_connection_amenities_inner.rb +1 -1
  47. data/lib/repull/models/airbnb_connection_host.rb +1 -1
  48. data/lib/repull/models/airbnb_connection_response.rb +1 -1
  49. data/lib/repull/models/airbnb_connection_summary.rb +1 -1
  50. data/lib/repull/models/airbnb_data_freshness.rb +3 -3
  51. data/lib/repull/models/airbnb_listing.rb +2 -2
  52. data/lib/repull/models/airbnb_listing_action_request.rb +1 -1
  53. data/lib/repull/models/airbnb_listing_list_response.rb +2 -2
  54. data/lib/repull/models/airbnb_pricing_write_request.rb +54 -3
  55. data/lib/repull/models/airbnb_pricing_write_request_records_inner.rb +236 -0
  56. data/lib/repull/models/airbnb_reservation.rb +1 -1
  57. data/lib/repull/models/airbnb_reservation_list_response.rb +2 -2
  58. data/lib/repull/models/airbnb_review.rb +1 -1
  59. data/lib/repull/models/airbnb_review_list_response.rb +1 -1
  60. data/lib/repull/models/airbnb_thread.rb +1 -1
  61. data/lib/repull/models/airbnb_thread_list_response.rb +1 -1
  62. data/lib/repull/models/airbnb_transaction.rb +502 -0
  63. data/lib/repull/models/airbnb_transaction_guest_breakdown.rb +171 -0
  64. data/lib/repull/models/airbnb_transaction_host_breakdown.rb +246 -0
  65. data/lib/repull/models/airbnb_transaction_payout.rb +175 -0
  66. data/lib/repull/models/{booking_conversation_list_response.rb → alteration_change.rb} +22 -19
  67. data/lib/repull/models/alteration_webhook_object.rb +296 -0
  68. data/lib/repull/models/availability_batch_write_request.rb +296 -0
  69. data/lib/repull/models/availability_write_request.rb +259 -0
  70. data/lib/repull/models/availability_write_result.rb +178 -0
  71. data/lib/repull/models/availability_write_result_synced.rb +176 -0
  72. data/lib/repull/models/availability_write_settings.rb +215 -0
  73. data/lib/repull/models/booking_availability_state_response.rb +149 -0
  74. data/lib/repull/models/booking_availability_update.rb +1 -1
  75. data/lib/repull/models/booking_availability_update_request.rb +1 -1
  76. data/lib/repull/models/booking_availability_update_request_property_id.rb +1 -1
  77. data/lib/repull/models/booking_availability_update_request_updates_inner.rb +1 -1
  78. data/lib/repull/models/booking_connect_listing_option.rb +1 -1
  79. data/lib/repull/models/booking_connect_room.rb +1 -1
  80. data/lib/repull/models/booking_connect_rooms_response.rb +39 -5
  81. data/lib/repull/models/booking_conversation.rb +1 -1
  82. data/lib/repull/models/booking_pricing_rate_update.rb +1 -1
  83. data/lib/repull/models/booking_pricing_rate_update_date_range.rb +1 -1
  84. data/lib/repull/models/booking_pricing_rate_update_restrictions.rb +1 -1
  85. data/lib/repull/models/booking_pricing_response.rb +1 -1
  86. data/lib/repull/models/booking_pricing_update_request.rb +1 -1
  87. data/lib/repull/models/booking_pricing_update_response.rb +1 -1
  88. data/lib/repull/models/booking_property.rb +1 -1
  89. data/lib/repull/models/booking_reservation.rb +277 -0
  90. data/lib/repull/models/booking_reservation_room.rb +271 -0
  91. data/lib/repull/models/booking_room_mapping.rb +18 -8
  92. data/lib/repull/models/booking_rooms_rates_response.rb +170 -0
  93. data/lib/repull/models/booking_rooms_rates_response_rooms_inner.rb +170 -0
  94. data/lib/repull/models/booking_rooms_rates_response_rooms_inner_rates_inner.rb +212 -0
  95. data/lib/repull/models/booking_setup_request.rb +1 -1
  96. data/lib/repull/models/booking_verify_hotel_request.rb +1 -1
  97. data/lib/repull/models/booking_verify_hotel_response.rb +40 -6
  98. data/lib/repull/models/bulk_pricing_failure.rb +1 -1
  99. data/lib/repull/models/bulk_pricing_item.rb +1 -1
  100. data/lib/repull/models/bulk_pricing_request.rb +1 -1
  101. data/lib/repull/models/bulk_pricing_response.rb +1 -1
  102. data/lib/repull/models/calendar_day.rb +1 -1
  103. data/lib/repull/models/calendar_response.rb +1 -1
  104. data/lib/repull/models/calendar_updated_event.rb +1 -1
  105. data/lib/repull/models/calendar_updated_payload.rb +1 -1
  106. data/lib/repull/models/calendar_updated_payload_range.rb +1 -1
  107. data/lib/repull/models/clear_kv200_response.rb +1 -1
  108. data/lib/repull/models/connect_host.rb +1 -1
  109. data/lib/repull/models/connect_provider.rb +1 -1
  110. data/lib/repull/models/connect_provider_list_response.rb +1 -1
  111. data/lib/repull/models/connect_session.rb +1 -1
  112. data/lib/repull/models/connect_status.rb +18 -6
  113. data/lib/repull/models/connect_status_accounts_inner.rb +188 -0
  114. data/lib/repull/models/connection.rb +1 -1
  115. data/lib/repull/models/connection_list_response.rb +1 -1
  116. data/lib/repull/models/conversation.rb +13 -2
  117. data/lib/repull/models/conversation_detail.rb +13 -2
  118. data/lib/repull/models/conversation_guest.rb +1 -1
  119. data/lib/repull/models/conversation_guest_contact.rb +1 -1
  120. data/lib/repull/models/conversation_host.rb +1 -1
  121. data/lib/repull/models/conversation_list_response.rb +1 -1
  122. data/lib/repull/models/conversation_message_attachment.rb +1 -1
  123. data/lib/repull/models/create_airbnb_alteration_request.rb +1 -1
  124. data/lib/repull/models/create_airbnb_offer_request.rb +1 -1
  125. data/lib/repull/models/create_billing_checkout_request.rb +1 -1
  126. data/lib/repull/models/create_booking_webhook_request.rb +1 -1
  127. data/lib/repull/models/create_connect_session_request.rb +1 -1
  128. data/lib/repull/models/create_connection_request.rb +2 -2
  129. data/lib/repull/models/create_webhook_request.rb +1 -1
  130. data/lib/repull/models/custom_schema.rb +1 -1
  131. data/lib/repull/models/custom_schema_create.rb +1 -1
  132. data/lib/repull/models/custom_schema_create_response.rb +1 -1
  133. data/lib/repull/models/custom_schema_delete_response.rb +1 -1
  134. data/lib/repull/models/custom_schema_list_response.rb +1 -1
  135. data/lib/repull/models/custom_schema_summary.rb +1 -1
  136. data/lib/repull/models/custom_schema_update.rb +1 -1
  137. data/lib/repull/models/delete_airbnb_listing_photo200_response.rb +1 -1
  138. data/lib/repull/models/delete_connection200_response.rb +234 -0
  139. data/lib/repull/models/delete_kv200_response.rb +1 -1
  140. data/lib/repull/models/error.rb +1 -1
  141. data/lib/repull/models/error_error.rb +14 -2
  142. data/lib/repull/models/error_error_support.rb +1 -1
  143. data/lib/repull/models/get_airbnb_alteration200_response.rb +2 -2
  144. data/lib/repull/models/get_airbnb_checkin_guide200_response.rb +192 -0
  145. data/lib/repull/models/get_airbnb_listing_quality200_response.rb +2 -2
  146. data/lib/repull/models/get_airbnb_listing_settings200_response.rb +2 -2
  147. data/lib/repull/models/get_airbnb_thread200_response.rb +2 -2
  148. data/lib/repull/models/get_health200_response.rb +1 -1
  149. data/lib/repull/models/get_usage_logs200_response.rb +1 -1
  150. data/lib/repull/models/get_usage_logs200_response_data_inner.rb +1 -1
  151. data/lib/repull/models/get_usage_logs200_response_pagination.rb +3 -3
  152. data/lib/repull/models/get_usage_summary200_response.rb +2 -2
  153. data/lib/repull/models/get_usage_summary200_response_breakdown_inner.rb +1 -1
  154. data/lib/repull/models/get_usage_summary200_response_limits.rb +3 -3
  155. data/lib/repull/models/get_usage_summary200_response_remaining.rb +2 -2
  156. data/lib/repull/models/get_usage_summary200_response_status_distribution.rb +1 -1
  157. data/lib/repull/models/get_usage_summary200_response_timeline_inner.rb +1 -1
  158. data/lib/repull/models/get_usage_summary200_response_totals.rb +1 -1
  159. data/lib/repull/models/get_usage_summary200_response_used.rb +2 -2
  160. data/lib/repull/models/get_usage_tier200_response.rb +2 -2
  161. data/lib/repull/models/get_usage_tier200_response_limits.rb +4 -4
  162. data/lib/repull/models/get_usage_tier200_response_remaining.rb +3 -3
  163. data/lib/repull/models/get_usage_tier200_response_used.rb +3 -3
  164. data/lib/repull/models/guest.rb +1 -1
  165. data/lib/repull/models/guest_contact.rb +1 -1
  166. data/lib/repull/models/guest_create_request.rb +250 -0
  167. data/lib/repull/models/guest_create_response.rb +227 -0
  168. data/lib/repull/models/guest_create_response_contacts_inner.rb +199 -0
  169. data/lib/repull/models/guest_flag.rb +1 -1
  170. data/lib/repull/models/guest_list_response.rb +1 -1
  171. data/lib/repull/models/guest_note.rb +1 -1
  172. data/lib/repull/models/guest_profile.rb +1 -1
  173. data/lib/repull/models/guest_reservations_summary.rb +1 -1
  174. data/lib/repull/models/list_airbnb_alterations200_response.rb +2 -2
  175. data/lib/repull/models/list_airbnb_listing_amenities200_response.rb +2 -2
  176. data/lib/repull/models/list_airbnb_listing_amenities200_response_data.rb +1 -1
  177. data/lib/repull/models/list_airbnb_transactions200_response.rb +3 -3
  178. data/lib/repull/models/list_booking_reservations200_response.rb +104 -0
  179. data/lib/repull/models/list_kv200_response.rb +1 -1
  180. data/lib/repull/models/list_kv200_response_data_inner.rb +1 -1
  181. data/lib/repull/models/list_kv200_response_pagination.rb +2 -2
  182. data/lib/repull/models/listing.rb +2 -2
  183. data/lib/repull/models/listing_active_request.rb +2 -2
  184. data/lib/repull/models/listing_active_response.rb +1 -1
  185. data/lib/repull/models/listing_address.rb +1 -1
  186. data/lib/repull/models/listing_amenity.rb +1 -1
  187. data/lib/repull/models/listing_channel.rb +1 -1
  188. data/lib/repull/models/listing_comp.rb +1 -1
  189. data/lib/repull/models/listing_comp_nightly.rb +1 -1
  190. data/lib/repull/models/listing_comp_ratings.rb +1 -1
  191. data/lib/repull/models/listing_comps_response.rb +1 -1
  192. data/lib/repull/models/listing_content.rb +1 -1
  193. data/lib/repull/models/listing_content_update_request.rb +1 -1
  194. data/lib/repull/models/listing_content_update_request_address.rb +1 -1
  195. data/lib/repull/models/listing_content_update_request_amenities.rb +1 -1
  196. data/lib/repull/models/listing_content_update_request_amenities_one_of_inner.rb +1 -1
  197. data/lib/repull/models/listing_content_update_request_occupancy.rb +1 -1
  198. data/lib/repull/models/listing_content_update_request_photos_inner.rb +1 -1
  199. data/lib/repull/models/listing_content_update_request_photos_inner_one_of.rb +1 -1
  200. data/lib/repull/models/listing_content_update_request_policies.rb +1 -1
  201. data/lib/repull/models/listing_content_update_response.rb +1 -1
  202. data/lib/repull/models/listing_create_request.rb +1 -1
  203. data/lib/repull/models/listing_create_response.rb +1 -1
  204. data/lib/repull/models/listing_created_event.rb +1 -1
  205. data/lib/repull/models/listing_created_payload.rb +1 -1
  206. data/lib/repull/models/listing_created_payload_address.rb +1 -1
  207. data/lib/repull/models/listing_deleted_event.rb +1 -1
  208. data/lib/repull/models/listing_deleted_payload.rb +1 -1
  209. data/lib/repull/models/listing_details.rb +1 -1
  210. data/lib/repull/models/listing_generate_content_request.rb +1 -1
  211. data/lib/repull/models/listing_generate_content_response.rb +1 -1
  212. data/lib/repull/models/listing_list_response.rb +1 -1
  213. data/lib/repull/models/{studio_file.rb → listing_photo.rb} +23 -34
  214. data/lib/repull/models/listing_photo_delete_request.rb +165 -0
  215. data/lib/repull/models/{studio_error.rb → listing_photo_delete_response.rb} +20 -12
  216. data/lib/repull/models/listing_photo_upload_url_request.rb +203 -0
  217. data/lib/repull/models/listing_photo_upload_url_response.rb +198 -0
  218. data/lib/repull/models/{vrbo_listing_list_response.rb → listing_photos_response.rb} +19 -19
  219. data/lib/repull/models/listing_pricing_apply_request.rb +1 -1
  220. data/lib/repull/models/listing_pricing_apply_response.rb +1 -1
  221. data/lib/repull/models/listing_pricing_history_entry.rb +2 -2
  222. data/lib/repull/models/listing_pricing_history_response.rb +1 -1
  223. data/lib/repull/models/listing_pricing_recommendation.rb +1 -1
  224. data/lib/repull/models/listing_pricing_response.rb +1 -1
  225. data/lib/repull/models/listing_pricing_response_comp_summary.rb +1 -1
  226. data/lib/repull/models/listing_pricing_response_date_range.rb +1 -1
  227. data/lib/repull/models/listing_pricing_response_listing.rb +1 -1
  228. data/lib/repull/models/listing_pricing_strategy.rb +1 -1
  229. data/lib/repull/models/listing_pricing_strategy_input.rb +1 -1
  230. data/lib/repull/models/listing_publish_airbnb_request.rb +1 -1
  231. data/lib/repull/models/listing_publish_response.rb +1 -1
  232. data/lib/repull/models/listing_publish_status_channel.rb +1 -1
  233. data/lib/repull/models/listing_publish_status_connection.rb +1 -1
  234. data/lib/repull/models/listing_publish_status_response.rb +1 -1
  235. data/lib/repull/models/listing_quality_tier.rb +1 -1
  236. data/lib/repull/models/listing_segment.rb +1 -1
  237. data/lib/repull/models/listing_segment_recommendation.rb +1 -1
  238. data/lib/repull/models/listing_segments_response.rb +1 -1
  239. data/lib/repull/models/listing_segments_response_scope.rb +1 -1
  240. data/lib/repull/models/listing_status_batch_request.rb +212 -0
  241. data/lib/repull/models/listing_status_batch_response.rb +223 -0
  242. data/lib/repull/models/listing_updated_event.rb +1 -1
  243. data/lib/repull/models/listing_updated_payload.rb +1 -1
  244. data/lib/repull/models/map_airbnb_listing_request.rb +1 -1
  245. data/lib/repull/models/map_airbnb_listing_response.rb +1 -1
  246. data/lib/repull/models/map_connect_booking_rooms_request.rb +1 -1
  247. data/lib/repull/models/map_connect_booking_rooms_response.rb +16 -5
  248. data/lib/repull/models/market_browse_category.rb +1 -1
  249. data/lib/repull/models/market_browse_entry.rb +1 -1
  250. data/lib/repull/models/market_browse_featured.rb +1 -1
  251. data/lib/repull/models/market_browse_response.rb +1 -1
  252. data/lib/repull/models/market_calendar_day.rb +1 -1
  253. data/lib/repull/models/market_calendar_day_events_inner.rb +1 -1
  254. data/lib/repull/models/market_calendar_response.rb +1 -1
  255. data/lib/repull/models/market_detail_response.rb +1 -1
  256. data/lib/repull/models/market_detail_response_price_distribution_inner.rb +1 -1
  257. data/lib/repull/models/market_detail_response_property_type_mix_inner.rb +1 -1
  258. data/lib/repull/models/market_detail_response_supply_trend_inner.rb +1 -1
  259. data/lib/repull/models/market_detail_response_top_comps.rb +1 -1
  260. data/lib/repull/models/market_event.rb +1 -1
  261. data/lib/repull/models/market_my_listing.rb +1 -1
  262. data/lib/repull/models/market_summary.rb +1 -1
  263. data/lib/repull/models/market_top_comp.rb +1 -1
  264. data/lib/repull/models/markets_overview_response.rb +1 -1
  265. data/lib/repull/models/markets_overview_response_browse.rb +1 -1
  266. data/lib/repull/models/markets_overview_response_subscriptions.rb +1 -1
  267. data/lib/repull/models/markets_overview_response_totals.rb +1 -1
  268. data/lib/repull/models/message.rb +1 -1
  269. data/lib/repull/models/message_list_response.rb +1 -1
  270. data/lib/repull/models/pagination.rb +1 -1
  271. data/lib/repull/models/payment_completed_event.rb +1 -1
  272. data/lib/repull/models/payment_completed_payload.rb +1 -1
  273. data/lib/repull/models/payment_refunded_event.rb +1 -1
  274. data/lib/repull/models/payment_refunded_payload.rb +1 -1
  275. data/lib/repull/models/plumguide_listing.rb +1 -1
  276. data/lib/repull/models/plumguide_listing_list_response.rb +1 -1
  277. data/lib/repull/models/property.rb +17 -7
  278. data/lib/repull/models/property_availability.rb +33 -7
  279. data/lib/repull/models/property_availability_coverage.rb +222 -0
  280. data/lib/repull/models/property_availability_day.rb +4 -4
  281. data/lib/repull/models/property_list_response.rb +1 -1
  282. data/lib/repull/models/quote.rb +240 -0
  283. data/lib/repull/models/quote_pricing.rb +218 -0
  284. data/lib/repull/models/reply_booking_review200_response.rb +1 -1
  285. data/lib/repull/models/reply_booking_review_request.rb +1 -1
  286. data/lib/repull/models/reply_to_review201_response.rb +165 -0
  287. data/lib/repull/models/reply_to_review_request.rb +165 -0
  288. data/lib/repull/models/repull_ping_event.rb +1 -1
  289. data/lib/repull/models/repull_ping_payload.rb +1 -1
  290. data/lib/repull/models/reservation.rb +1 -1
  291. data/lib/repull/models/{studio_deployment.rb → reservation_alteration_created_event.rb} +67 -57
  292. data/lib/repull/models/reservation_alteration_created_payload.rb +177 -0
  293. data/lib/repull/models/reservation_alteration_responded_event.rb +217 -0
  294. data/lib/repull/models/reservation_alteration_responded_payload.rb +175 -0
  295. data/lib/repull/models/reservation_cancelled_event.rb +1 -1
  296. data/lib/repull/models/reservation_cancelled_payload.rb +1 -1
  297. data/lib/repull/models/reservation_create_request.rb +403 -0
  298. data/lib/repull/models/reservation_create_response.rb +233 -0
  299. data/lib/repull/models/reservation_created_event.rb +1 -1
  300. data/lib/repull/models/reservation_created_payload.rb +1 -1
  301. data/lib/repull/models/reservation_financials.rb +36 -8
  302. data/lib/repull/models/reservation_guest_financials.rb +173 -0
  303. data/lib/repull/models/reservation_guest_input.rb +193 -0
  304. data/lib/repull/models/reservation_host_financials.rb +207 -0
  305. data/lib/repull/models/reservation_list_response.rb +1 -1
  306. data/lib/repull/models/reservation_message_received_event.rb +1 -1
  307. data/lib/repull/models/reservation_message_received_payload.rb +1 -1
  308. data/lib/repull/models/reservation_message_received_payload_from.rb +1 -1
  309. data/lib/repull/models/reservation_money_line.rb +216 -0
  310. data/lib/repull/models/reservation_occupancy.rb +1 -1
  311. data/lib/repull/models/reservation_primary_guest.rb +1 -1
  312. data/lib/repull/models/reservation_update_request.rb +255 -0
  313. data/lib/repull/models/reservation_update_response.rb +240 -0
  314. data/lib/repull/models/reservation_updated_event.rb +1 -1
  315. data/lib/repull/models/reservation_updated_payload.rb +1 -1
  316. data/lib/repull/models/reservation_webhook_object.rb +1 -1
  317. data/lib/repull/models/respond_airbnb_review_request.rb +1 -1
  318. data/lib/repull/models/review.rb +14 -3
  319. data/lib/repull/models/review_category.rb +1 -1
  320. data/lib/repull/models/{sandbox_reset_result.rb → review_created_event.rb} +59 -59
  321. data/lib/repull/models/review_created_payload.rb +165 -0
  322. data/lib/repull/models/review_list_response.rb +1 -1
  323. data/lib/repull/models/review_responded_event.rb +217 -0
  324. data/lib/repull/models/review_responded_payload.rb +175 -0
  325. data/lib/repull/models/review_response.rb +1 -1
  326. data/lib/repull/models/review_webhook_object.rb +277 -0
  327. data/lib/repull/models/rotate_webhook_secret200_response.rb +1 -1
  328. data/lib/repull/models/select_connect_provider_request.rb +1 -1
  329. data/lib/repull/models/select_provider_response.rb +1 -1
  330. data/lib/repull/models/send_airbnb_message_request.rb +187 -0
  331. data/lib/repull/models/{sandbox_reset_result_deleted.rb → send_booking_message_request.rb} +53 -50
  332. data/lib/repull/models/{studio_error_error.rb → send_message_request.rb} +31 -50
  333. data/lib/repull/models/send_message_response.rb +241 -0
  334. data/lib/repull/models/set_kv_request.rb +1 -1
  335. data/lib/repull/models/{booking_property_list_response.rb → submit_beds24_credentials200_response.rb} +19 -19
  336. data/lib/repull/models/submit_beds24_credentials_request.rb +177 -0
  337. data/lib/repull/models/submit_bookingsync_credentials_request.rb +177 -0
  338. data/lib/repull/models/submit_guesty_credentials_request.rb +177 -0
  339. data/lib/repull/models/submit_hospitable_credentials_request.rb +177 -0
  340. data/lib/repull/models/submit_hostaway_credentials_request.rb +177 -0
  341. data/lib/repull/models/submit_igms_credentials_request.rb +177 -0
  342. data/lib/repull/models/submit_lodgify_credentials_request.rb +177 -0
  343. data/lib/repull/models/submit_ownerrez_credentials_request.rb +177 -0
  344. data/lib/repull/models/submit_smoobu_credentials_request.rb +177 -0
  345. data/lib/repull/models/submit_vrbo_credentials_request.rb +177 -0
  346. data/lib/repull/models/{sandbox_fixture_ref.rb → sync_airbnb_transactions200_response.rb} +36 -38
  347. data/lib/repull/models/sync_airbnb_transactions_request.rb +201 -0
  348. data/lib/repull/models/test_webhook_request.rb +1 -1
  349. data/lib/repull/models/update_airbnb_message_request.rb +1 -1
  350. data/lib/repull/models/update_booking_charges_request.rb +1 -1
  351. data/lib/repull/models/update_listing_pricing_strategy200_response.rb +1 -1
  352. data/lib/repull/models/update_webhook_request.rb +1 -1
  353. data/lib/repull/models/vrbo_listing.rb +1 -1
  354. data/lib/repull/models/vrbo_reservation.rb +1 -1
  355. data/lib/repull/models/vrbo_reservation_list_response.rb +1 -1
  356. data/lib/repull/models/webhook_delivery.rb +1 -1
  357. data/lib/repull/models/webhook_delivery_detail.rb +1 -1
  358. data/lib/repull/models/webhook_delivery_list_response.rb +1 -1
  359. data/lib/repull/models/webhook_event.rb +12 -4
  360. data/lib/repull/models/webhook_event_catalog.rb +1 -1
  361. data/lib/repull/models/webhook_event_catalog_domains_inner.rb +1 -1
  362. data/lib/repull/models/webhook_event_catalog_entry.rb +1 -1
  363. data/lib/repull/models/webhook_event_type.rb +6 -2
  364. data/lib/repull/models/webhook_list_response.rb +1 -1
  365. data/lib/repull/models/webhook_subscription.rb +1 -1
  366. data/lib/repull/version.rb +2 -2
  367. data/lib/repull.rb +75 -15
  368. data/openapi/v1.json +6119 -2021
  369. data/scripts/check-spec-freshness.py +399 -0
  370. data/scripts/regen.sh +32 -3
  371. metadata +77 -18
  372. data/lib/repull/api/sandbox_api.rb +0 -136
  373. data/lib/repull/models/sandbox_seed_result.rb +0 -278
  374. data/lib/repull/models/studio_generation.rb +0 -215
  375. data/lib/repull/models/studio_project.rb +0 -241
  376. data/spec/api/ai_api_spec.rb +0 -47
@@ -1,7 +1,7 @@
1
1
  =begin
2
2
  #Repull API
3
3
 
4
- #The unified API for vacation rental tech. Connect to 50+ PMS platforms and 4 OTA channels through one REST API. Built-in AI operations for guest communication, pricing, and listing optimization. ## Designed for AI agents Every error response on this API includes machine-parseable fields so an LLM (Claude in MCP, Cursor, Cline, GPT, etc.) can self-recover without escalating to a human: - `error.code` — stable string identifier (e.g. `invalid_params`, `rate_limit_exceeded`) - `error.message` — human-readable cause - `error.fix` — exact recovery steps (e.g. \"Pass `check_in_after` as ISO 8601: `?check_in_after=2026-01-15`\") - `error.docs_url` — link to the canonical write-up at `https://repull.dev/docs/errors/{code}` - `error.request_id` — id to correlate with server-side logs - `error.field` / `error.value_received` / `error.valid_values` / `error.did_you_mean` — when the error is parameter-specific - `error.retry_after` — seconds to wait before retrying (rate-limit + transient upstream) `Access-Control-Expose-Headers` lists `x-request-id` and the `X-RateLimit-*` family so browsers can read them on cross-origin responses. ## Quick Start 1. Get an API key at https://repull.dev/dashboard 2. Connect a PMS: `POST /v1/connect/{provider}` 3. List properties: `GET /v1/properties` 4. Get reservations: `GET /v1/reservations` ## Authentication All requests require a Bearer token: ``` Authorization: Bearer sk_test_YOUR_API_KEY ``` Sandbox keys start with `sk_test_`, production with `sk_live_`. ## Request Correlation (X-Request-ID) Every response carries an `X-Request-ID` header, e.g. `X-Request-ID: req_01HXY...`. Include this id in support tickets and bug reports — we can trace the full request lifecycle (auth, rate limit, handler, downstream calls, log row) from a single id. You may set the header on the inbound request to forward your own trace id; we will echo it back instead of generating a new one. Accepted format: `^[\\\\w.-]{1,128}$`. The id is also embedded in error envelopes as `request_id` so server-side log diffs work even when the response headers are stripped by an intermediate proxy. ## Rate Limits The public API enforces a per-API-key sliding-window rate limit on top of the per-tier monthly + daily-AI quotas. **Default policy:** 600 requests per 60 seconds, per API key. Sliding window — there is no fixed-minute boundary you can burst across. Every response includes: | Header | Meaning | |---|---| | `X-RateLimit-Limit` | Requests permitted in the current window. | | `X-RateLimit-Remaining` | Requests left in the current window after this call. | | `X-RateLimit-Reset` | Unix epoch (seconds) when the next slot opens. | | `X-RateLimit-Policy` | Machine-readable policy descriptor, e.g. `600;w=60`. | | `Retry-After` | Seconds to wait before retrying. **Only present on 429 responses.** | **On 429 (rate_limit_exceeded):** the response body matches the standard error envelope with `code: \"rate_limit_exceeded\"`, plus `limit`, `window_seconds`, `retry_after`, and `request_id` fields. SDKs MUST honor `Retry-After` and use exponential backoff with jitter on subsequent retries — never a tight loop. Recommended backoff: ``` sleep_ms = (Retry-After * 1000) + random(0..250) ``` Monthly + daily-AI tier quotas (`free`, `starter`, `custom`) are enforced separately and also surface as 429s; they include `tier`, `scope`, and `resets_at` fields. ## Plan Limits (402 — `listings_limit_exceeded`) The Repull API also enforces a per-tier cap on **active listings**: | Tier | Active listings cap | |---|---| | `free` | 3 | | `starter` | 50 | | `custom` | unlimited | When a customer's active-listing count is above their tier cap, the API returns **`402 Payment Required`** with `error.code = \"listings_limit_exceeded\"` on every route EXCEPT: - `/v1/health` — uptime probes are never gated. - `/v1/usage/*` — so dashboards can render the over-cap state. - Any `DELETE` — so the customer can trim listings to get back under the cap without paying. Unlike 429, 402 is NOT a \"wait and retry\" condition — `Retry-After` is not set. The only paths back to 200 are: 1. `DELETE` enough listings to come back under the cap, or 2. Upgrade at `https://repull.dev/dashboard/billing`. The server-side usage cache is 60s, so the first 200 after an upgrade may take up to a minute. The envelope mirrors `rate_limit_exceeded` for SDK ergonomics: `tier`, `limit`, `active_listings`, `upgrade_url`, plus the standard `code` / `message` / `fix` / `docs_url` / `request_id`.
4
+ #The unified API for vacation rental tech. Connect to 50+ PMS platforms and 4 OTA channels through one REST API. Built-in AI operations for guest communication, pricing, and listing optimization. ## Designed for AI agents Every error response on this API includes machine-parseable fields so an LLM (Claude in MCP, Cursor, Cline, GPT, etc.) can self-recover without escalating to a human: - `error.code` — stable string identifier (e.g. `invalid_params`, `rate_limit_exceeded`) - `error.message` — human-readable cause - `error.fix` — exact recovery steps (e.g. \"Pass `check_in_after` as ISO 8601: `?check_in_after=2026-01-15`\") - `error.docs_url` — link to the canonical write-up at `https://repull.dev/docs/errors/{code}` - `error.request_id` — id to correlate with server-side logs - `error.field` / `error.value_received` / `error.valid_values` / `error.did_you_mean` — when the error is parameter-specific - `error.retry_after` — seconds to wait before retrying (rate-limit + transient upstream) `Access-Control-Expose-Headers` lists `x-request-id` and the `X-RateLimit-*` family so browsers can read them on cross-origin responses. ## Quick Start 1. Get an API key at https://repull.dev/dashboard 2. Connect a PMS: `POST /v1/connect/{provider}` 3. List properties: `GET /v1/properties` 4. Get reservations: `GET /v1/reservations` ## Authentication All requests require a Bearer token: ``` Authorization: Bearer sk_live_YOUR_API_KEY ``` ## Request Correlation (X-Request-ID) Every response carries an `X-Request-ID` header, e.g. `X-Request-ID: req_01HXY...`. Include this id in support tickets and bug reports — we can trace the full request lifecycle (auth, rate limit, handler, downstream calls, log row) from a single id. You may set the header on the inbound request to forward your own trace id; we will echo it back instead of generating a new one. Accepted format: `^[\\\\w.-]{1,128}$`. The id is also embedded in error envelopes as `request_id` so server-side log diffs work even when the response headers are stripped by an intermediate proxy. ## Rate Limits The public API enforces a per-API-key sliding-window rate limit on top of the per-tier monthly + daily-AI quotas. **Default policy:** 600 requests per 60 seconds, per API key. Sliding window — there is no fixed-minute boundary you can burst across. Every response includes: | Header | Meaning | |---|---| | `X-RateLimit-Limit` | Requests permitted in the current window. | | `X-RateLimit-Remaining` | Requests left in the current window after this call. | | `X-RateLimit-Reset` | Unix epoch (seconds) when the next slot opens. | | `X-RateLimit-Policy` | Machine-readable policy descriptor, e.g. `600;w=60`. | | `Retry-After` | Seconds to wait before retrying. **Only present on 429 responses.** | **On 429 (rate_limit_exceeded):** the response body matches the standard error envelope with `code: \"rate_limit_exceeded\"`, plus `limit`, `window_seconds`, `retry_after`, and `request_id` fields. SDKs MUST honor `Retry-After` and use exponential backoff with jitter on subsequent retries — never a tight loop. Recommended backoff: ``` sleep_ms = (Retry-After * 1000) + random(0..250) ``` Monthly + daily-AI tier quotas (`free`, `starter`, `custom`) are enforced separately and also surface as 429s; they include `tier`, `scope`, and `resetsAt` fields. ## Plan Limits (402 — `listings_limit_exceeded`) The Repull API also enforces a per-tier cap on **active listings**: | Tier | Active listings cap | |---|---| | `free` | 3 | | `starter` | 50 | | `custom` | unlimited | When a customer's active-listing count is above their tier cap, the API returns **`402 Payment Required`** with `error.code = \"listings_limit_exceeded\"` on every route EXCEPT: - `/v1/health` — uptime probes are never gated. - `/v1/usage/*` — so dashboards can render the over-cap state. - Any `DELETE` — so the customer can trim listings to get back under the cap without paying. Unlike 429, 402 is NOT a \"wait and retry\" condition — `Retry-After` is not set. The only paths back to 200 are: 1. `DELETE` enough listings to come back under the cap, or 2. Upgrade at `https://repull.dev/dashboard/billing`. The server-side usage cache is 60s, so the first 200 after an upgrade may take up to a minute. The envelope mirrors `rate_limit_exceeded` for SDK ergonomics: `tier`, `limit`, `active_listings`, `upgrade_url`, plus the standard `code` / `message` / `fix` / `docs_url` / `request_id`.
5
5
 
6
6
  The version of the OpenAPI document: 1.0.0
7
7
  Contact: ivan@vanio.ai
@@ -19,6 +19,74 @@ module Repull
19
19
  def initialize(api_client = ApiClient.default)
20
20
  @api_client = api_client
21
21
  end
22
+ # Booking.com connectivity callback
23
+ # Receives Booking.com's asynchronous confirmation that a property has designated Repull as its connectivity provider, and advances the Connect session. Called by Booking.com, not by integrators.
24
+ # @param request_body [Hash<String, Object>]
25
+ # @param [Hash] opts the optional parameters
26
+ # @return [nil]
27
+ def booking_connect_callback(request_body, opts = {})
28
+ booking_connect_callback_with_http_info(request_body, opts)
29
+ nil
30
+ end
31
+
32
+ # Booking.com connectivity callback
33
+ # Receives Booking.com&#39;s asynchronous confirmation that a property has designated Repull as its connectivity provider, and advances the Connect session. Called by Booking.com, not by integrators.
34
+ # @param request_body [Hash<String, Object>]
35
+ # @param [Hash] opts the optional parameters
36
+ # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
37
+ def booking_connect_callback_with_http_info(request_body, opts = {})
38
+ if @api_client.config.debugging
39
+ @api_client.config.logger.debug 'Calling API: ConnectApi.booking_connect_callback ...'
40
+ end
41
+ # verify the required parameter 'request_body' is set
42
+ if @api_client.config.client_side_validation && request_body.nil?
43
+ fail ArgumentError, "Missing the required parameter 'request_body' when calling ConnectApi.booking_connect_callback"
44
+ end
45
+ # resource path
46
+ local_var_path = '/v1/connect/booking/callback'
47
+
48
+ # query parameters
49
+ query_params = opts[:query_params] || {}
50
+
51
+ # header parameters
52
+ header_params = opts[:header_params] || {}
53
+ # HTTP header 'Accept' (if needed)
54
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
55
+ # HTTP header 'Content-Type'
56
+ content_type = @api_client.select_header_content_type(['application/json'])
57
+ if !content_type.nil?
58
+ header_params['Content-Type'] = content_type
59
+ end
60
+
61
+ # form parameters
62
+ form_params = opts[:form_params] || {}
63
+
64
+ # http body (model)
65
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(request_body)
66
+
67
+ # return_type
68
+ return_type = opts[:debug_return_type]
69
+
70
+ # auth_names
71
+ auth_names = opts[:debug_auth_names] || []
72
+
73
+ new_options = opts.merge(
74
+ :operation => :"ConnectApi.booking_connect_callback",
75
+ :header_params => header_params,
76
+ :query_params => query_params,
77
+ :form_params => form_params,
78
+ :body => post_body,
79
+ :auth_names => auth_names,
80
+ :return_type => return_type
81
+ )
82
+
83
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
84
+ if @api_client.config.debugging
85
+ @api_client.config.logger.debug "API called: ConnectApi#booking_connect_callback\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
86
+ end
87
+ return data, status_code, headers
88
+ end
89
+
22
90
  # Create a multi-channel Connect picker session
23
91
  # Mints a session that lands the user on the channel picker at `connect.repull.dev/{sessionId}` instead of jumping straight to a single provider. The user picks a channel from the registry, the picker page POSTs `selectConnectProvider` to bind the choice, and the per-provider flow takes over. Use this when you want one entry point for all 13 channels. Use `POST /v1/connect/{provider}` instead when your UI already knows which channel to connect.
24
92
  # @param create_connect_session_request [CreateConnectSessionRequest]
@@ -158,20 +226,22 @@ module Repull
158
226
  end
159
227
 
160
228
  # Disconnect provider
161
- # Disconnect a PMS or OTA from this workspace. Revokes the OAuth token (where applicable), purges credentials, and stops all sync jobs. Resources synced from the provider remain queryable but become read-only and stop receiving updates.
229
+ # Disconnect ONE connected account of a provider from this workspace. Supported for `airbnb` and `booking`. **Which account.** Pass `accountId` — for Airbnb the host id (`accounts[].externalAccountId` from `GET /v1/connect/airbnb`), for Booking.com the hotel id. It is optional only when the workspace has exactly one account for the provider. With several and no `accountId`, the call returns `422` with the account ids in `valid_values` instead of guessing. An `accountId` that is not connected to this workspace returns `404`. Disconnecting one account leaves the others connected. **What happens.** The account's stored authorization is removed and it stops syncing. Its listings are **deactivated**, not deleted: they stop counting toward your plan's listing limit, their data is kept, and they are returned in `listingsDeactivated`. A listing that is still connected through another account or channel stays active. Reconnect the account, then activate the listings with `POST /v1/listings/status`. The change is all or nothing. For Airbnb, the host can also revoke access on Airbnb's side (Account → Privacy & sharing → Connected apps); that alone does not update this workspace, so call this endpoint as well. Other providers return `501 not_implemented` with instructions for disconnecting on the provider's side.
162
230
  # @param provider [String] PMS provider slug (e.g., hostaway, guesty, ownerrez)
163
231
  # @param [Hash] opts the optional parameters
164
- # @return [nil]
232
+ # @option opts [String] :account_id The account to disconnect: the Airbnb host id (&#x60;accounts[].externalAccountId&#x60; on &#x60;GET /v1/connect/airbnb&#x60;) or the Booking.com hotel id. Required when the workspace has more than one connected account for the provider. Not the same as the &#x60;X-Account-Id&#x60; header.
233
+ # @return [DeleteConnection200Response]
165
234
  def delete_connection(provider, opts = {})
166
- delete_connection_with_http_info(provider, opts)
167
- nil
235
+ data, _status_code, _headers = delete_connection_with_http_info(provider, opts)
236
+ data
168
237
  end
169
238
 
170
239
  # Disconnect provider
171
- # Disconnect a PMS or OTA from this workspace. Revokes the OAuth token (where applicable), purges credentials, and stops all sync jobs. Resources synced from the provider remain queryable but become read-only and stop receiving updates.
240
+ # Disconnect ONE connected account of a provider from this workspace. Supported for &#x60;airbnb&#x60; and &#x60;booking&#x60;. **Which account.** Pass &#x60;accountId&#x60; — for Airbnb the host id (&#x60;accounts[].externalAccountId&#x60; from &#x60;GET /v1/connect/airbnb&#x60;), for Booking.com the hotel id. It is optional only when the workspace has exactly one account for the provider. With several and no &#x60;accountId&#x60;, the call returns &#x60;422&#x60; with the account ids in &#x60;valid_values&#x60; instead of guessing. An &#x60;accountId&#x60; that is not connected to this workspace returns &#x60;404&#x60;. Disconnecting one account leaves the others connected. **What happens.** The account&#39;s stored authorization is removed and it stops syncing. Its listings are **deactivated**, not deleted: they stop counting toward your plan&#39;s listing limit, their data is kept, and they are returned in &#x60;listingsDeactivated&#x60;. A listing that is still connected through another account or channel stays active. Reconnect the account, then activate the listings with &#x60;POST /v1/listings/status&#x60;. The change is all or nothing. For Airbnb, the host can also revoke access on Airbnb&#39;s side (Account → Privacy &amp; sharing → Connected apps); that alone does not update this workspace, so call this endpoint as well. Other providers return &#x60;501 not_implemented&#x60; with instructions for disconnecting on the provider&#39;s side.
172
241
  # @param provider [String] PMS provider slug (e.g., hostaway, guesty, ownerrez)
173
242
  # @param [Hash] opts the optional parameters
174
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
243
+ # @option opts [String] :account_id The account to disconnect: the Airbnb host id (&#x60;accounts[].externalAccountId&#x60; on &#x60;GET /v1/connect/airbnb&#x60;) or the Booking.com hotel id. Required when the workspace has more than one connected account for the provider. Not the same as the &#x60;X-Account-Id&#x60; header.
244
+ # @return [Array<(DeleteConnection200Response, Integer, Hash)>] DeleteConnection200Response data, response status code and response headers
175
245
  def delete_connection_with_http_info(provider, opts = {})
176
246
  if @api_client.config.debugging
177
247
  @api_client.config.logger.debug 'Calling API: ConnectApi.delete_connection ...'
@@ -185,9 +255,12 @@ module Repull
185
255
 
186
256
  # query parameters
187
257
  query_params = opts[:query_params] || {}
258
+ query_params[:'accountId'] = opts[:'account_id'] if !opts[:'account_id'].nil?
188
259
 
189
260
  # header parameters
190
261
  header_params = opts[:header_params] || {}
262
+ # HTTP header 'Accept' (if needed)
263
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
191
264
 
192
265
  # form parameters
193
266
  form_params = opts[:form_params] || {}
@@ -196,7 +269,7 @@ module Repull
196
269
  post_body = opts[:debug_body]
197
270
 
198
271
  # return_type
199
- return_type = opts[:debug_return_type]
272
+ return_type = opts[:debug_return_type] || 'DeleteConnection200Response'
200
273
 
201
274
  # auth_names
202
275
  auth_names = opts[:debug_auth_names] || ['bearerAuth']
@@ -601,6 +674,686 @@ module Repull
601
674
  return data, status_code, headers
602
675
  end
603
676
 
677
+ # Submit Beds24 credentials for a Connect session
678
+ # Completes a credentials-pattern connection for Beds24. API key + prop key from Beds24 → Settings → Apps & Integrations. The credentials are validated against Beds24 before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
679
+ # @param submit_beds24_credentials_request [SubmitBeds24CredentialsRequest]
680
+ # @param [Hash] opts the optional parameters
681
+ # @return [SubmitBeds24Credentials200Response]
682
+ def submit_beds24_credentials(submit_beds24_credentials_request, opts = {})
683
+ data, _status_code, _headers = submit_beds24_credentials_with_http_info(submit_beds24_credentials_request, opts)
684
+ data
685
+ end
686
+
687
+ # Submit Beds24 credentials for a Connect session
688
+ # Completes a credentials-pattern connection for Beds24. API key + prop key from Beds24 → Settings → Apps &amp; Integrations. The credentials are validated against Beds24 before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
689
+ # @param submit_beds24_credentials_request [SubmitBeds24CredentialsRequest]
690
+ # @param [Hash] opts the optional parameters
691
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
692
+ def submit_beds24_credentials_with_http_info(submit_beds24_credentials_request, opts = {})
693
+ if @api_client.config.debugging
694
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_beds24_credentials ...'
695
+ end
696
+ # verify the required parameter 'submit_beds24_credentials_request' is set
697
+ if @api_client.config.client_side_validation && submit_beds24_credentials_request.nil?
698
+ fail ArgumentError, "Missing the required parameter 'submit_beds24_credentials_request' when calling ConnectApi.submit_beds24_credentials"
699
+ end
700
+ # resource path
701
+ local_var_path = '/v1/connect/beds24/credentials'
702
+
703
+ # query parameters
704
+ query_params = opts[:query_params] || {}
705
+
706
+ # header parameters
707
+ header_params = opts[:header_params] || {}
708
+ # HTTP header 'Accept' (if needed)
709
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
710
+ # HTTP header 'Content-Type'
711
+ content_type = @api_client.select_header_content_type(['application/json'])
712
+ if !content_type.nil?
713
+ header_params['Content-Type'] = content_type
714
+ end
715
+
716
+ # form parameters
717
+ form_params = opts[:form_params] || {}
718
+
719
+ # http body (model)
720
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_beds24_credentials_request)
721
+
722
+ # return_type
723
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
724
+
725
+ # auth_names
726
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
727
+
728
+ new_options = opts.merge(
729
+ :operation => :"ConnectApi.submit_beds24_credentials",
730
+ :header_params => header_params,
731
+ :query_params => query_params,
732
+ :form_params => form_params,
733
+ :body => post_body,
734
+ :auth_names => auth_names,
735
+ :return_type => return_type
736
+ )
737
+
738
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
739
+ if @api_client.config.debugging
740
+ @api_client.config.logger.debug "API called: ConnectApi#submit_beds24_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
741
+ end
742
+ return data, status_code, headers
743
+ end
744
+
745
+ # Submit BookingSync credentials for a Connect session
746
+ # Completes a credentials-pattern connection for BookingSync. OAuth client credentials issued by BookingSync. The credentials are validated against BookingSync before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
747
+ # @param submit_bookingsync_credentials_request [SubmitBookingsyncCredentialsRequest]
748
+ # @param [Hash] opts the optional parameters
749
+ # @return [SubmitBeds24Credentials200Response]
750
+ def submit_bookingsync_credentials(submit_bookingsync_credentials_request, opts = {})
751
+ data, _status_code, _headers = submit_bookingsync_credentials_with_http_info(submit_bookingsync_credentials_request, opts)
752
+ data
753
+ end
754
+
755
+ # Submit BookingSync credentials for a Connect session
756
+ # Completes a credentials-pattern connection for BookingSync. OAuth client credentials issued by BookingSync. The credentials are validated against BookingSync before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
757
+ # @param submit_bookingsync_credentials_request [SubmitBookingsyncCredentialsRequest]
758
+ # @param [Hash] opts the optional parameters
759
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
760
+ def submit_bookingsync_credentials_with_http_info(submit_bookingsync_credentials_request, opts = {})
761
+ if @api_client.config.debugging
762
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_bookingsync_credentials ...'
763
+ end
764
+ # verify the required parameter 'submit_bookingsync_credentials_request' is set
765
+ if @api_client.config.client_side_validation && submit_bookingsync_credentials_request.nil?
766
+ fail ArgumentError, "Missing the required parameter 'submit_bookingsync_credentials_request' when calling ConnectApi.submit_bookingsync_credentials"
767
+ end
768
+ # resource path
769
+ local_var_path = '/v1/connect/bookingsync/credentials'
770
+
771
+ # query parameters
772
+ query_params = opts[:query_params] || {}
773
+
774
+ # header parameters
775
+ header_params = opts[:header_params] || {}
776
+ # HTTP header 'Accept' (if needed)
777
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
778
+ # HTTP header 'Content-Type'
779
+ content_type = @api_client.select_header_content_type(['application/json'])
780
+ if !content_type.nil?
781
+ header_params['Content-Type'] = content_type
782
+ end
783
+
784
+ # form parameters
785
+ form_params = opts[:form_params] || {}
786
+
787
+ # http body (model)
788
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_bookingsync_credentials_request)
789
+
790
+ # return_type
791
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
792
+
793
+ # auth_names
794
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
795
+
796
+ new_options = opts.merge(
797
+ :operation => :"ConnectApi.submit_bookingsync_credentials",
798
+ :header_params => header_params,
799
+ :query_params => query_params,
800
+ :form_params => form_params,
801
+ :body => post_body,
802
+ :auth_names => auth_names,
803
+ :return_type => return_type
804
+ )
805
+
806
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
807
+ if @api_client.config.debugging
808
+ @api_client.config.logger.debug "API called: ConnectApi#submit_bookingsync_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
809
+ end
810
+ return data, status_code, headers
811
+ end
812
+
813
+ # Submit Guesty credentials for a Connect session
814
+ # Completes a credentials-pattern connection for Guesty. Client ID + secret from Guesty → Integrations → Open API. The credentials are validated against Guesty before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
815
+ # @param submit_guesty_credentials_request [SubmitGuestyCredentialsRequest]
816
+ # @param [Hash] opts the optional parameters
817
+ # @return [SubmitBeds24Credentials200Response]
818
+ def submit_guesty_credentials(submit_guesty_credentials_request, opts = {})
819
+ data, _status_code, _headers = submit_guesty_credentials_with_http_info(submit_guesty_credentials_request, opts)
820
+ data
821
+ end
822
+
823
+ # Submit Guesty credentials for a Connect session
824
+ # Completes a credentials-pattern connection for Guesty. Client ID + secret from Guesty → Integrations → Open API. The credentials are validated against Guesty before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
825
+ # @param submit_guesty_credentials_request [SubmitGuestyCredentialsRequest]
826
+ # @param [Hash] opts the optional parameters
827
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
828
+ def submit_guesty_credentials_with_http_info(submit_guesty_credentials_request, opts = {})
829
+ if @api_client.config.debugging
830
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_guesty_credentials ...'
831
+ end
832
+ # verify the required parameter 'submit_guesty_credentials_request' is set
833
+ if @api_client.config.client_side_validation && submit_guesty_credentials_request.nil?
834
+ fail ArgumentError, "Missing the required parameter 'submit_guesty_credentials_request' when calling ConnectApi.submit_guesty_credentials"
835
+ end
836
+ # resource path
837
+ local_var_path = '/v1/connect/guesty/credentials'
838
+
839
+ # query parameters
840
+ query_params = opts[:query_params] || {}
841
+
842
+ # header parameters
843
+ header_params = opts[:header_params] || {}
844
+ # HTTP header 'Accept' (if needed)
845
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
846
+ # HTTP header 'Content-Type'
847
+ content_type = @api_client.select_header_content_type(['application/json'])
848
+ if !content_type.nil?
849
+ header_params['Content-Type'] = content_type
850
+ end
851
+
852
+ # form parameters
853
+ form_params = opts[:form_params] || {}
854
+
855
+ # http body (model)
856
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_guesty_credentials_request)
857
+
858
+ # return_type
859
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
860
+
861
+ # auth_names
862
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
863
+
864
+ new_options = opts.merge(
865
+ :operation => :"ConnectApi.submit_guesty_credentials",
866
+ :header_params => header_params,
867
+ :query_params => query_params,
868
+ :form_params => form_params,
869
+ :body => post_body,
870
+ :auth_names => auth_names,
871
+ :return_type => return_type
872
+ )
873
+
874
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
875
+ if @api_client.config.debugging
876
+ @api_client.config.logger.debug "API called: ConnectApi#submit_guesty_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
877
+ end
878
+ return data, status_code, headers
879
+ end
880
+
881
+ # Submit Hospitable credentials for a Connect session
882
+ # Completes a credentials-pattern connection for Hospitable. Personal access token from Hospitable → Settings → API. The credentials are validated against Hospitable before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
883
+ # @param submit_hospitable_credentials_request [SubmitHospitableCredentialsRequest]
884
+ # @param [Hash] opts the optional parameters
885
+ # @return [SubmitBeds24Credentials200Response]
886
+ def submit_hospitable_credentials(submit_hospitable_credentials_request, opts = {})
887
+ data, _status_code, _headers = submit_hospitable_credentials_with_http_info(submit_hospitable_credentials_request, opts)
888
+ data
889
+ end
890
+
891
+ # Submit Hospitable credentials for a Connect session
892
+ # Completes a credentials-pattern connection for Hospitable. Personal access token from Hospitable → Settings → API. The credentials are validated against Hospitable before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
893
+ # @param submit_hospitable_credentials_request [SubmitHospitableCredentialsRequest]
894
+ # @param [Hash] opts the optional parameters
895
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
896
+ def submit_hospitable_credentials_with_http_info(submit_hospitable_credentials_request, opts = {})
897
+ if @api_client.config.debugging
898
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_hospitable_credentials ...'
899
+ end
900
+ # verify the required parameter 'submit_hospitable_credentials_request' is set
901
+ if @api_client.config.client_side_validation && submit_hospitable_credentials_request.nil?
902
+ fail ArgumentError, "Missing the required parameter 'submit_hospitable_credentials_request' when calling ConnectApi.submit_hospitable_credentials"
903
+ end
904
+ # resource path
905
+ local_var_path = '/v1/connect/hospitable/credentials'
906
+
907
+ # query parameters
908
+ query_params = opts[:query_params] || {}
909
+
910
+ # header parameters
911
+ header_params = opts[:header_params] || {}
912
+ # HTTP header 'Accept' (if needed)
913
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
914
+ # HTTP header 'Content-Type'
915
+ content_type = @api_client.select_header_content_type(['application/json'])
916
+ if !content_type.nil?
917
+ header_params['Content-Type'] = content_type
918
+ end
919
+
920
+ # form parameters
921
+ form_params = opts[:form_params] || {}
922
+
923
+ # http body (model)
924
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_hospitable_credentials_request)
925
+
926
+ # return_type
927
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
928
+
929
+ # auth_names
930
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
931
+
932
+ new_options = opts.merge(
933
+ :operation => :"ConnectApi.submit_hospitable_credentials",
934
+ :header_params => header_params,
935
+ :query_params => query_params,
936
+ :form_params => form_params,
937
+ :body => post_body,
938
+ :auth_names => auth_names,
939
+ :return_type => return_type
940
+ )
941
+
942
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
943
+ if @api_client.config.debugging
944
+ @api_client.config.logger.debug "API called: ConnectApi#submit_hospitable_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
945
+ end
946
+ return data, status_code, headers
947
+ end
948
+
949
+ # Submit Hostaway credentials for a Connect session
950
+ # Completes a credentials-pattern connection for Hostaway. Account ID + API key from Hostaway → Settings → Public API. The credentials are validated against Hostaway before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
951
+ # @param submit_hostaway_credentials_request [SubmitHostawayCredentialsRequest]
952
+ # @param [Hash] opts the optional parameters
953
+ # @return [SubmitBeds24Credentials200Response]
954
+ def submit_hostaway_credentials(submit_hostaway_credentials_request, opts = {})
955
+ data, _status_code, _headers = submit_hostaway_credentials_with_http_info(submit_hostaway_credentials_request, opts)
956
+ data
957
+ end
958
+
959
+ # Submit Hostaway credentials for a Connect session
960
+ # Completes a credentials-pattern connection for Hostaway. Account ID + API key from Hostaway → Settings → Public API. The credentials are validated against Hostaway before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
961
+ # @param submit_hostaway_credentials_request [SubmitHostawayCredentialsRequest]
962
+ # @param [Hash] opts the optional parameters
963
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
964
+ def submit_hostaway_credentials_with_http_info(submit_hostaway_credentials_request, opts = {})
965
+ if @api_client.config.debugging
966
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_hostaway_credentials ...'
967
+ end
968
+ # verify the required parameter 'submit_hostaway_credentials_request' is set
969
+ if @api_client.config.client_side_validation && submit_hostaway_credentials_request.nil?
970
+ fail ArgumentError, "Missing the required parameter 'submit_hostaway_credentials_request' when calling ConnectApi.submit_hostaway_credentials"
971
+ end
972
+ # resource path
973
+ local_var_path = '/v1/connect/hostaway/credentials'
974
+
975
+ # query parameters
976
+ query_params = opts[:query_params] || {}
977
+
978
+ # header parameters
979
+ header_params = opts[:header_params] || {}
980
+ # HTTP header 'Accept' (if needed)
981
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
982
+ # HTTP header 'Content-Type'
983
+ content_type = @api_client.select_header_content_type(['application/json'])
984
+ if !content_type.nil?
985
+ header_params['Content-Type'] = content_type
986
+ end
987
+
988
+ # form parameters
989
+ form_params = opts[:form_params] || {}
990
+
991
+ # http body (model)
992
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_hostaway_credentials_request)
993
+
994
+ # return_type
995
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
996
+
997
+ # auth_names
998
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
999
+
1000
+ new_options = opts.merge(
1001
+ :operation => :"ConnectApi.submit_hostaway_credentials",
1002
+ :header_params => header_params,
1003
+ :query_params => query_params,
1004
+ :form_params => form_params,
1005
+ :body => post_body,
1006
+ :auth_names => auth_names,
1007
+ :return_type => return_type
1008
+ )
1009
+
1010
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1011
+ if @api_client.config.debugging
1012
+ @api_client.config.logger.debug "API called: ConnectApi#submit_hostaway_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1013
+ end
1014
+ return data, status_code, headers
1015
+ end
1016
+
1017
+ # Submit iGMS credentials for a Connect session
1018
+ # Completes a credentials-pattern connection for iGMS. API token from iGMS → Settings → Integrations. The credentials are validated against iGMS before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
1019
+ # @param submit_igms_credentials_request [SubmitIgmsCredentialsRequest]
1020
+ # @param [Hash] opts the optional parameters
1021
+ # @return [SubmitBeds24Credentials200Response]
1022
+ def submit_igms_credentials(submit_igms_credentials_request, opts = {})
1023
+ data, _status_code, _headers = submit_igms_credentials_with_http_info(submit_igms_credentials_request, opts)
1024
+ data
1025
+ end
1026
+
1027
+ # Submit iGMS credentials for a Connect session
1028
+ # Completes a credentials-pattern connection for iGMS. API token from iGMS → Settings → Integrations. The credentials are validated against iGMS before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
1029
+ # @param submit_igms_credentials_request [SubmitIgmsCredentialsRequest]
1030
+ # @param [Hash] opts the optional parameters
1031
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
1032
+ def submit_igms_credentials_with_http_info(submit_igms_credentials_request, opts = {})
1033
+ if @api_client.config.debugging
1034
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_igms_credentials ...'
1035
+ end
1036
+ # verify the required parameter 'submit_igms_credentials_request' is set
1037
+ if @api_client.config.client_side_validation && submit_igms_credentials_request.nil?
1038
+ fail ArgumentError, "Missing the required parameter 'submit_igms_credentials_request' when calling ConnectApi.submit_igms_credentials"
1039
+ end
1040
+ # resource path
1041
+ local_var_path = '/v1/connect/igms/credentials'
1042
+
1043
+ # query parameters
1044
+ query_params = opts[:query_params] || {}
1045
+
1046
+ # header parameters
1047
+ header_params = opts[:header_params] || {}
1048
+ # HTTP header 'Accept' (if needed)
1049
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1050
+ # HTTP header 'Content-Type'
1051
+ content_type = @api_client.select_header_content_type(['application/json'])
1052
+ if !content_type.nil?
1053
+ header_params['Content-Type'] = content_type
1054
+ end
1055
+
1056
+ # form parameters
1057
+ form_params = opts[:form_params] || {}
1058
+
1059
+ # http body (model)
1060
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_igms_credentials_request)
1061
+
1062
+ # return_type
1063
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
1064
+
1065
+ # auth_names
1066
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1067
+
1068
+ new_options = opts.merge(
1069
+ :operation => :"ConnectApi.submit_igms_credentials",
1070
+ :header_params => header_params,
1071
+ :query_params => query_params,
1072
+ :form_params => form_params,
1073
+ :body => post_body,
1074
+ :auth_names => auth_names,
1075
+ :return_type => return_type
1076
+ )
1077
+
1078
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1079
+ if @api_client.config.debugging
1080
+ @api_client.config.logger.debug "API called: ConnectApi#submit_igms_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1081
+ end
1082
+ return data, status_code, headers
1083
+ end
1084
+
1085
+ # Submit Lodgify credentials for a Connect session
1086
+ # Completes a credentials-pattern connection for Lodgify. API key from Lodgify → Settings → Public API. The credentials are validated against Lodgify before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
1087
+ # @param submit_lodgify_credentials_request [SubmitLodgifyCredentialsRequest]
1088
+ # @param [Hash] opts the optional parameters
1089
+ # @return [SubmitBeds24Credentials200Response]
1090
+ def submit_lodgify_credentials(submit_lodgify_credentials_request, opts = {})
1091
+ data, _status_code, _headers = submit_lodgify_credentials_with_http_info(submit_lodgify_credentials_request, opts)
1092
+ data
1093
+ end
1094
+
1095
+ # Submit Lodgify credentials for a Connect session
1096
+ # Completes a credentials-pattern connection for Lodgify. API key from Lodgify → Settings → Public API. The credentials are validated against Lodgify before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
1097
+ # @param submit_lodgify_credentials_request [SubmitLodgifyCredentialsRequest]
1098
+ # @param [Hash] opts the optional parameters
1099
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
1100
+ def submit_lodgify_credentials_with_http_info(submit_lodgify_credentials_request, opts = {})
1101
+ if @api_client.config.debugging
1102
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_lodgify_credentials ...'
1103
+ end
1104
+ # verify the required parameter 'submit_lodgify_credentials_request' is set
1105
+ if @api_client.config.client_side_validation && submit_lodgify_credentials_request.nil?
1106
+ fail ArgumentError, "Missing the required parameter 'submit_lodgify_credentials_request' when calling ConnectApi.submit_lodgify_credentials"
1107
+ end
1108
+ # resource path
1109
+ local_var_path = '/v1/connect/lodgify/credentials'
1110
+
1111
+ # query parameters
1112
+ query_params = opts[:query_params] || {}
1113
+
1114
+ # header parameters
1115
+ header_params = opts[:header_params] || {}
1116
+ # HTTP header 'Accept' (if needed)
1117
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1118
+ # HTTP header 'Content-Type'
1119
+ content_type = @api_client.select_header_content_type(['application/json'])
1120
+ if !content_type.nil?
1121
+ header_params['Content-Type'] = content_type
1122
+ end
1123
+
1124
+ # form parameters
1125
+ form_params = opts[:form_params] || {}
1126
+
1127
+ # http body (model)
1128
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_lodgify_credentials_request)
1129
+
1130
+ # return_type
1131
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
1132
+
1133
+ # auth_names
1134
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1135
+
1136
+ new_options = opts.merge(
1137
+ :operation => :"ConnectApi.submit_lodgify_credentials",
1138
+ :header_params => header_params,
1139
+ :query_params => query_params,
1140
+ :form_params => form_params,
1141
+ :body => post_body,
1142
+ :auth_names => auth_names,
1143
+ :return_type => return_type
1144
+ )
1145
+
1146
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1147
+ if @api_client.config.debugging
1148
+ @api_client.config.logger.debug "API called: ConnectApi#submit_lodgify_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1149
+ end
1150
+ return data, status_code, headers
1151
+ end
1152
+
1153
+ # Submit OwnerRez credentials for a Connect session
1154
+ # Completes a credentials-pattern connection for OwnerRez. Username + API token from OwnerRez → Settings → API. The credentials are validated against OwnerRez before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
1155
+ # @param submit_ownerrez_credentials_request [SubmitOwnerrezCredentialsRequest]
1156
+ # @param [Hash] opts the optional parameters
1157
+ # @return [SubmitBeds24Credentials200Response]
1158
+ def submit_ownerrez_credentials(submit_ownerrez_credentials_request, opts = {})
1159
+ data, _status_code, _headers = submit_ownerrez_credentials_with_http_info(submit_ownerrez_credentials_request, opts)
1160
+ data
1161
+ end
1162
+
1163
+ # Submit OwnerRez credentials for a Connect session
1164
+ # Completes a credentials-pattern connection for OwnerRez. Username + API token from OwnerRez → Settings → API. The credentials are validated against OwnerRez before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
1165
+ # @param submit_ownerrez_credentials_request [SubmitOwnerrezCredentialsRequest]
1166
+ # @param [Hash] opts the optional parameters
1167
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
1168
+ def submit_ownerrez_credentials_with_http_info(submit_ownerrez_credentials_request, opts = {})
1169
+ if @api_client.config.debugging
1170
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_ownerrez_credentials ...'
1171
+ end
1172
+ # verify the required parameter 'submit_ownerrez_credentials_request' is set
1173
+ if @api_client.config.client_side_validation && submit_ownerrez_credentials_request.nil?
1174
+ fail ArgumentError, "Missing the required parameter 'submit_ownerrez_credentials_request' when calling ConnectApi.submit_ownerrez_credentials"
1175
+ end
1176
+ # resource path
1177
+ local_var_path = '/v1/connect/ownerrez/credentials'
1178
+
1179
+ # query parameters
1180
+ query_params = opts[:query_params] || {}
1181
+
1182
+ # header parameters
1183
+ header_params = opts[:header_params] || {}
1184
+ # HTTP header 'Accept' (if needed)
1185
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1186
+ # HTTP header 'Content-Type'
1187
+ content_type = @api_client.select_header_content_type(['application/json'])
1188
+ if !content_type.nil?
1189
+ header_params['Content-Type'] = content_type
1190
+ end
1191
+
1192
+ # form parameters
1193
+ form_params = opts[:form_params] || {}
1194
+
1195
+ # http body (model)
1196
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_ownerrez_credentials_request)
1197
+
1198
+ # return_type
1199
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
1200
+
1201
+ # auth_names
1202
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1203
+
1204
+ new_options = opts.merge(
1205
+ :operation => :"ConnectApi.submit_ownerrez_credentials",
1206
+ :header_params => header_params,
1207
+ :query_params => query_params,
1208
+ :form_params => form_params,
1209
+ :body => post_body,
1210
+ :auth_names => auth_names,
1211
+ :return_type => return_type
1212
+ )
1213
+
1214
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1215
+ if @api_client.config.debugging
1216
+ @api_client.config.logger.debug "API called: ConnectApi#submit_ownerrez_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1217
+ end
1218
+ return data, status_code, headers
1219
+ end
1220
+
1221
+ # Submit Smoobu credentials for a Connect session
1222
+ # Completes a credentials-pattern connection for Smoobu. API key from Smoobu → Settings → For developers. The credentials are validated against Smoobu before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
1223
+ # @param submit_smoobu_credentials_request [SubmitSmoobuCredentialsRequest]
1224
+ # @param [Hash] opts the optional parameters
1225
+ # @return [SubmitBeds24Credentials200Response]
1226
+ def submit_smoobu_credentials(submit_smoobu_credentials_request, opts = {})
1227
+ data, _status_code, _headers = submit_smoobu_credentials_with_http_info(submit_smoobu_credentials_request, opts)
1228
+ data
1229
+ end
1230
+
1231
+ # Submit Smoobu credentials for a Connect session
1232
+ # Completes a credentials-pattern connection for Smoobu. API key from Smoobu → Settings → For developers. The credentials are validated against Smoobu before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
1233
+ # @param submit_smoobu_credentials_request [SubmitSmoobuCredentialsRequest]
1234
+ # @param [Hash] opts the optional parameters
1235
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
1236
+ def submit_smoobu_credentials_with_http_info(submit_smoobu_credentials_request, opts = {})
1237
+ if @api_client.config.debugging
1238
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_smoobu_credentials ...'
1239
+ end
1240
+ # verify the required parameter 'submit_smoobu_credentials_request' is set
1241
+ if @api_client.config.client_side_validation && submit_smoobu_credentials_request.nil?
1242
+ fail ArgumentError, "Missing the required parameter 'submit_smoobu_credentials_request' when calling ConnectApi.submit_smoobu_credentials"
1243
+ end
1244
+ # resource path
1245
+ local_var_path = '/v1/connect/smoobu/credentials'
1246
+
1247
+ # query parameters
1248
+ query_params = opts[:query_params] || {}
1249
+
1250
+ # header parameters
1251
+ header_params = opts[:header_params] || {}
1252
+ # HTTP header 'Accept' (if needed)
1253
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1254
+ # HTTP header 'Content-Type'
1255
+ content_type = @api_client.select_header_content_type(['application/json'])
1256
+ if !content_type.nil?
1257
+ header_params['Content-Type'] = content_type
1258
+ end
1259
+
1260
+ # form parameters
1261
+ form_params = opts[:form_params] || {}
1262
+
1263
+ # http body (model)
1264
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_smoobu_credentials_request)
1265
+
1266
+ # return_type
1267
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
1268
+
1269
+ # auth_names
1270
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1271
+
1272
+ new_options = opts.merge(
1273
+ :operation => :"ConnectApi.submit_smoobu_credentials",
1274
+ :header_params => header_params,
1275
+ :query_params => query_params,
1276
+ :form_params => form_params,
1277
+ :body => post_body,
1278
+ :auth_names => auth_names,
1279
+ :return_type => return_type
1280
+ )
1281
+
1282
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1283
+ if @api_client.config.debugging
1284
+ @api_client.config.logger.debug "API called: ConnectApi#submit_smoobu_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1285
+ end
1286
+ return data, status_code, headers
1287
+ end
1288
+
1289
+ # Submit Vrbo credentials for a Connect session
1290
+ # Completes a credentials-pattern connection for Vrbo. Activation handshake — Repull mints the Basic-Auth pair the host pastes into Vrbo Partner Central. The credentials are validated against Vrbo before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
1291
+ # @param submit_vrbo_credentials_request [SubmitVrboCredentialsRequest]
1292
+ # @param [Hash] opts the optional parameters
1293
+ # @return [SubmitBeds24Credentials200Response]
1294
+ def submit_vrbo_credentials(submit_vrbo_credentials_request, opts = {})
1295
+ data, _status_code, _headers = submit_vrbo_credentials_with_http_info(submit_vrbo_credentials_request, opts)
1296
+ data
1297
+ end
1298
+
1299
+ # Submit Vrbo credentials for a Connect session
1300
+ # Completes a credentials-pattern connection for Vrbo. Activation handshake — Repull mints the Basic-Auth pair the host pastes into Vrbo Partner Central. The credentials are validated against Vrbo before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
1301
+ # @param submit_vrbo_credentials_request [SubmitVrboCredentialsRequest]
1302
+ # @param [Hash] opts the optional parameters
1303
+ # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
1304
+ def submit_vrbo_credentials_with_http_info(submit_vrbo_credentials_request, opts = {})
1305
+ if @api_client.config.debugging
1306
+ @api_client.config.logger.debug 'Calling API: ConnectApi.submit_vrbo_credentials ...'
1307
+ end
1308
+ # verify the required parameter 'submit_vrbo_credentials_request' is set
1309
+ if @api_client.config.client_side_validation && submit_vrbo_credentials_request.nil?
1310
+ fail ArgumentError, "Missing the required parameter 'submit_vrbo_credentials_request' when calling ConnectApi.submit_vrbo_credentials"
1311
+ end
1312
+ # resource path
1313
+ local_var_path = '/v1/connect/vrbo/credentials'
1314
+
1315
+ # query parameters
1316
+ query_params = opts[:query_params] || {}
1317
+
1318
+ # header parameters
1319
+ header_params = opts[:header_params] || {}
1320
+ # HTTP header 'Accept' (if needed)
1321
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1322
+ # HTTP header 'Content-Type'
1323
+ content_type = @api_client.select_header_content_type(['application/json'])
1324
+ if !content_type.nil?
1325
+ header_params['Content-Type'] = content_type
1326
+ end
1327
+
1328
+ # form parameters
1329
+ form_params = opts[:form_params] || {}
1330
+
1331
+ # http body (model)
1332
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(submit_vrbo_credentials_request)
1333
+
1334
+ # return_type
1335
+ return_type = opts[:debug_return_type] || 'SubmitBeds24Credentials200Response'
1336
+
1337
+ # auth_names
1338
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1339
+
1340
+ new_options = opts.merge(
1341
+ :operation => :"ConnectApi.submit_vrbo_credentials",
1342
+ :header_params => header_params,
1343
+ :query_params => query_params,
1344
+ :form_params => form_params,
1345
+ :body => post_body,
1346
+ :auth_names => auth_names,
1347
+ :return_type => return_type
1348
+ )
1349
+
1350
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1351
+ if @api_client.config.debugging
1352
+ @api_client.config.logger.debug "API called: ConnectApi#submit_vrbo_credentials\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1353
+ end
1354
+ return data, status_code, headers
1355
+ end
1356
+
604
1357
  # Verify a Booking.com hotel ID for a Connect session
605
1358
  # Manual-paste fallback that closes the Booking.com claim flow. Call this after the customer completes Stage 1 designation in their Booking Extranet (ticking FantasticStay/Repull as their connectivity provider) and pastes their Hotel ID into the hosted picker. Validates the hotel against Booking's property API, persists the `pms_connections` row, kicks off the room import, and transitions the Connect session to `awaiting_room_mapping`. No API key required — the `sessionId` is the capability token. Sessions in any terminal state are rejected.
606
1359
  # @param booking_verify_hotel_request [BookingVerifyHotelRequest]