repull 0.2.7 → 0.2.9

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 (285) hide show
  1. checksums.yaml +4 -4
  2. data/lib/repull/api/airbnb_api.rb +117 -130
  3. data/lib/repull/api/atlas_api.rb +1 -1
  4. data/lib/repull/api/billing_api.rb +1 -56
  5. data/lib/repull/api/booking_com_api.rb +20 -119
  6. data/lib/repull/api/connect_api.rb +1 -1
  7. data/lib/repull/api/conversations_api.rb +1 -1
  8. data/lib/repull/api/guests_api.rb +1 -1
  9. data/lib/repull/api/kv_api.rb +1 -1
  10. data/lib/repull/api/listings_api.rb +212 -1
  11. data/lib/repull/api/markets_api.rb +1 -1
  12. data/lib/repull/api/plumguide_api.rb +1 -1
  13. data/lib/repull/api/pricing_api.rb +1 -1
  14. data/lib/repull/api/properties_api.rb +1 -1
  15. data/lib/repull/api/reservations_api.rb +1 -198
  16. data/lib/repull/api/reviews_api.rb +1 -1
  17. data/lib/repull/api/{availability_api.rb → sandbox_api.rb} +36 -67
  18. data/lib/repull/api/schema_api.rb +1 -1
  19. data/lib/repull/api/system_api.rb +1 -1
  20. data/lib/repull/api/vrbo_api.rb +1 -127
  21. data/lib/repull/api/webhooks_api.rb +1 -1
  22. data/lib/repull/api_client.rb +1 -1
  23. data/lib/repull/api_error.rb +1 -1
  24. data/lib/repull/api_model_base.rb +1 -1
  25. data/lib/repull/configuration.rb +1 -1
  26. data/lib/repull/models/account_created_event.rb +1 -1
  27. data/lib/repull/models/account_created_payload.rb +1 -1
  28. data/lib/repull/models/account_disconnected_event.rb +1 -1
  29. data/lib/repull/models/account_disconnected_payload.rb +1 -1
  30. data/lib/repull/models/ai_operation.rb +1 -1
  31. data/lib/repull/models/ai_operation_completed_event.rb +1 -1
  32. data/lib/repull/models/ai_operation_completed_payload.rb +1 -1
  33. data/lib/repull/models/ai_operation_failed_event.rb +1 -1
  34. data/lib/repull/models/ai_operation_failed_payload.rb +1 -1
  35. data/lib/repull/models/ai_operation_failed_payload_error.rb +1 -1
  36. data/lib/repull/models/{create_studio_project_request.rb → airbnb_availability_write_request.rb} +39 -53
  37. data/lib/repull/models/{create_studio_deployment201_response_data.rb → airbnb_calendar_operation.rb} +109 -58
  38. data/lib/repull/models/airbnb_connection.rb +1 -1
  39. data/lib/repull/models/airbnb_connection_accessibility_amenities_inner.rb +1 -1
  40. data/lib/repull/models/airbnb_connection_amenities_inner.rb +1 -1
  41. data/lib/repull/models/airbnb_connection_host.rb +1 -1
  42. data/lib/repull/models/airbnb_connection_response.rb +1 -1
  43. data/lib/repull/models/airbnb_connection_summary.rb +1 -1
  44. data/lib/repull/models/airbnb_data_freshness.rb +1 -1
  45. data/lib/repull/models/airbnb_listing.rb +1 -1
  46. data/lib/repull/models/{update_studio_project_request.rb → airbnb_listing_action_request.rb} +56 -48
  47. data/lib/repull/models/airbnb_listing_list_response.rb +1 -1
  48. data/lib/repull/models/{update_availability_request.rb → airbnb_pricing_write_request.rb} +101 -12
  49. data/lib/repull/models/airbnb_reservation.rb +1 -1
  50. data/lib/repull/models/airbnb_reservation_list_response.rb +1 -1
  51. data/lib/repull/models/airbnb_review.rb +1 -1
  52. data/lib/repull/models/airbnb_review_list_response.rb +1 -1
  53. data/lib/repull/models/airbnb_thread.rb +1 -1
  54. data/lib/repull/models/airbnb_thread_list_response.rb +1 -1
  55. data/lib/repull/models/{create_studio_project201_response_data.rb → booking_availability_update.rb} +126 -49
  56. data/lib/repull/models/{list_studio_deployments200_response.rb → booking_availability_update_request.rb} +91 -19
  57. data/lib/repull/models/{generate_studio_completion_request_project_id.rb → booking_availability_update_request_property_id.rb} +3 -3
  58. data/lib/repull/models/{get_studio_deployment200_response.rb → booking_availability_update_request_updates_inner.rb} +75 -118
  59. data/lib/repull/models/booking_connect_listing_option.rb +1 -1
  60. data/lib/repull/models/booking_connect_room.rb +1 -1
  61. data/lib/repull/models/booking_connect_rooms_response.rb +1 -1
  62. data/lib/repull/models/booking_conversation.rb +1 -1
  63. data/lib/repull/models/booking_conversation_list_response.rb +1 -1
  64. data/lib/repull/models/booking_pricing_rate_update.rb +2 -1
  65. data/lib/repull/models/booking_pricing_rate_update_date_range.rb +1 -1
  66. data/lib/repull/models/booking_pricing_rate_update_restrictions.rb +66 -7
  67. data/lib/repull/models/booking_pricing_response.rb +1 -1
  68. data/lib/repull/models/booking_pricing_update_request.rb +1 -1
  69. data/lib/repull/models/booking_pricing_update_response.rb +1 -1
  70. data/lib/repull/models/booking_property.rb +1 -1
  71. data/lib/repull/models/booking_property_list_response.rb +1 -1
  72. data/lib/repull/models/booking_room_mapping.rb +1 -1
  73. data/lib/repull/models/booking_verify_hotel_request.rb +1 -1
  74. data/lib/repull/models/booking_verify_hotel_response.rb +1 -1
  75. data/lib/repull/models/bulk_pricing_failure.rb +1 -1
  76. data/lib/repull/models/bulk_pricing_item.rb +1 -1
  77. data/lib/repull/models/bulk_pricing_request.rb +1 -1
  78. data/lib/repull/models/bulk_pricing_response.rb +1 -1
  79. data/lib/repull/models/calendar_day.rb +1 -1
  80. data/lib/repull/models/calendar_response.rb +1 -1
  81. data/lib/repull/models/calendar_updated_event.rb +1 -1
  82. data/lib/repull/models/calendar_updated_payload.rb +1 -1
  83. data/lib/repull/models/calendar_updated_payload_range.rb +1 -1
  84. data/lib/repull/models/clear_kv200_response.rb +1 -1
  85. data/lib/repull/models/connect_host.rb +1 -1
  86. data/lib/repull/models/connect_provider.rb +1 -1
  87. data/lib/repull/models/connect_provider_list_response.rb +1 -1
  88. data/lib/repull/models/connect_session.rb +1 -1
  89. data/lib/repull/models/connect_status.rb +1 -1
  90. data/lib/repull/models/connection.rb +1 -1
  91. data/lib/repull/models/connection_list_response.rb +1 -1
  92. data/lib/repull/models/conversation.rb +1 -1
  93. data/lib/repull/models/conversation_detail.rb +1 -1
  94. data/lib/repull/models/conversation_guest.rb +1 -1
  95. data/lib/repull/models/conversation_guest_contact.rb +1 -1
  96. data/lib/repull/models/conversation_host.rb +1 -1
  97. data/lib/repull/models/conversation_list_response.rb +1 -1
  98. data/lib/repull/models/conversation_message_attachment.rb +1 -1
  99. data/lib/repull/models/create_billing_checkout_request.rb +1 -1
  100. data/lib/repull/models/create_connect_session_request.rb +1 -1
  101. data/lib/repull/models/create_connection_request.rb +1 -1
  102. data/lib/repull/models/create_webhook_request.rb +1 -1
  103. data/lib/repull/models/custom_schema.rb +1 -1
  104. data/lib/repull/models/custom_schema_create.rb +1 -1
  105. data/lib/repull/models/custom_schema_create_response.rb +1 -1
  106. data/lib/repull/models/custom_schema_delete_response.rb +1 -1
  107. data/lib/repull/models/custom_schema_list_response.rb +1 -1
  108. data/lib/repull/models/custom_schema_summary.rb +1 -1
  109. data/lib/repull/models/custom_schema_update.rb +1 -1
  110. data/lib/repull/models/delete_kv200_response.rb +1 -1
  111. data/lib/repull/models/error.rb +1 -1
  112. data/lib/repull/models/error_error.rb +1 -1
  113. data/lib/repull/models/error_error_support.rb +1 -1
  114. data/lib/repull/models/get_health200_response.rb +1 -1
  115. data/lib/repull/models/guest.rb +1 -1
  116. data/lib/repull/models/guest_contact.rb +1 -1
  117. data/lib/repull/models/guest_flag.rb +1 -1
  118. data/lib/repull/models/guest_list_response.rb +1 -1
  119. data/lib/repull/models/guest_note.rb +1 -1
  120. data/lib/repull/models/guest_profile.rb +1 -1
  121. data/lib/repull/models/guest_reservations_summary.rb +1 -1
  122. data/lib/repull/models/list_kv200_response.rb +1 -1
  123. data/lib/repull/models/list_kv200_response_data_inner.rb +1 -1
  124. data/lib/repull/models/list_kv200_response_pagination.rb +1 -1
  125. data/lib/repull/models/listing.rb +1 -1
  126. data/lib/repull/models/{create_studio_project_generation_request.rb → listing_active_request.rb} +21 -21
  127. data/lib/repull/models/{delete_studio_project200_response_data.rb → listing_active_response.rb} +13 -11
  128. data/lib/repull/models/listing_address.rb +1 -1
  129. data/lib/repull/models/listing_amenity.rb +1 -1
  130. data/lib/repull/models/listing_channel.rb +1 -1
  131. data/lib/repull/models/listing_comp.rb +1 -1
  132. data/lib/repull/models/listing_comp_nightly.rb +1 -1
  133. data/lib/repull/models/listing_comp_ratings.rb +1 -1
  134. data/lib/repull/models/listing_comps_response.rb +1 -1
  135. data/lib/repull/models/listing_content.rb +1 -1
  136. data/lib/repull/models/{get_studio_project200_response.rb → listing_content_update_request.rb} +107 -11
  137. data/lib/repull/models/{upsert_studio_project_file200_response.rb → listing_content_update_request_address.rb} +54 -11
  138. data/lib/repull/models/listing_content_update_request_amenities.rb +105 -0
  139. data/lib/repull/models/{create_studio_deployment_request.rb → listing_content_update_request_amenities_one_of_inner.rb} +52 -21
  140. data/lib/repull/models/{update_reservation_request.rb → listing_content_update_request_occupancy.rb} +34 -29
  141. data/lib/repull/{api/ai_api.rb → models/listing_content_update_request_photos_inner.rb} +78 -60
  142. data/lib/repull/models/{generate_studio_completion200_response_data.rb → listing_content_update_request_photos_inner_one_of.rb} +82 -67
  143. data/lib/repull/models/{generate_studio_completion200_response.rb → listing_content_update_request_policies.rb} +117 -11
  144. data/lib/repull/models/{create_ai_operation200_response.rb → listing_content_update_response.rb} +33 -17
  145. data/lib/repull/models/listing_create_request.rb +1 -1
  146. data/lib/repull/models/listing_create_response.rb +1 -1
  147. data/lib/repull/models/listing_created_event.rb +1 -1
  148. data/lib/repull/models/listing_created_payload.rb +1 -1
  149. data/lib/repull/models/listing_created_payload_address.rb +1 -1
  150. data/lib/repull/models/listing_deleted_event.rb +1 -1
  151. data/lib/repull/models/listing_deleted_payload.rb +1 -1
  152. data/lib/repull/models/listing_details.rb +1 -1
  153. data/lib/repull/models/listing_generate_content_request.rb +1 -1
  154. data/lib/repull/models/listing_generate_content_response.rb +1 -1
  155. data/lib/repull/models/listing_list_response.rb +1 -1
  156. data/lib/repull/models/listing_pricing_apply_request.rb +1 -1
  157. data/lib/repull/models/listing_pricing_apply_response.rb +1 -1
  158. data/lib/repull/models/listing_pricing_history_entry.rb +1 -1
  159. data/lib/repull/models/listing_pricing_history_response.rb +1 -1
  160. data/lib/repull/models/listing_pricing_recommendation.rb +1 -1
  161. data/lib/repull/models/listing_pricing_response.rb +1 -1
  162. data/lib/repull/models/listing_pricing_response_comp_summary.rb +1 -1
  163. data/lib/repull/models/listing_pricing_response_date_range.rb +1 -1
  164. data/lib/repull/models/listing_pricing_response_listing.rb +1 -1
  165. data/lib/repull/models/listing_pricing_strategy.rb +1 -1
  166. data/lib/repull/models/listing_pricing_strategy_input.rb +1 -1
  167. data/lib/repull/models/listing_publish_airbnb_request.rb +1 -1
  168. data/lib/repull/models/listing_publish_response.rb +1 -1
  169. data/lib/repull/models/listing_publish_status_channel.rb +1 -1
  170. data/lib/repull/models/listing_publish_status_connection.rb +1 -1
  171. data/lib/repull/models/listing_publish_status_response.rb +1 -1
  172. data/lib/repull/models/listing_quality_tier.rb +1 -1
  173. data/lib/repull/models/listing_segment.rb +1 -1
  174. data/lib/repull/models/listing_segment_recommendation.rb +1 -1
  175. data/lib/repull/models/listing_segments_response.rb +1 -1
  176. data/lib/repull/models/listing_segments_response_scope.rb +1 -1
  177. data/lib/repull/models/listing_updated_event.rb +1 -1
  178. data/lib/repull/models/listing_updated_payload.rb +1 -1
  179. data/lib/repull/models/map_airbnb_listing_request.rb +215 -0
  180. data/lib/repull/models/{create_reservation_request.rb → map_airbnb_listing_response.rb} +138 -117
  181. data/lib/repull/models/map_connect_booking_rooms_request.rb +1 -1
  182. data/lib/repull/models/map_connect_booking_rooms_response.rb +1 -1
  183. data/lib/repull/models/market_browse_category.rb +1 -1
  184. data/lib/repull/models/market_browse_entry.rb +1 -1
  185. data/lib/repull/models/market_browse_featured.rb +1 -1
  186. data/lib/repull/models/market_browse_response.rb +1 -1
  187. data/lib/repull/models/market_calendar_day.rb +1 -1
  188. data/lib/repull/models/market_calendar_day_events_inner.rb +1 -1
  189. data/lib/repull/models/market_calendar_response.rb +1 -1
  190. data/lib/repull/models/market_detail_response.rb +1 -1
  191. data/lib/repull/models/market_detail_response_price_distribution_inner.rb +1 -1
  192. data/lib/repull/models/market_detail_response_property_type_mix_inner.rb +1 -1
  193. data/lib/repull/models/market_detail_response_supply_trend_inner.rb +1 -1
  194. data/lib/repull/models/market_detail_response_top_comps.rb +1 -1
  195. data/lib/repull/models/market_event.rb +1 -1
  196. data/lib/repull/models/market_my_listing.rb +1 -1
  197. data/lib/repull/models/market_summary.rb +1 -1
  198. data/lib/repull/models/market_top_comp.rb +1 -1
  199. data/lib/repull/models/markets_overview_response.rb +1 -1
  200. data/lib/repull/models/markets_overview_response_browse.rb +1 -1
  201. data/lib/repull/models/markets_overview_response_subscriptions.rb +1 -1
  202. data/lib/repull/models/markets_overview_response_totals.rb +1 -1
  203. data/lib/repull/models/message.rb +1 -1
  204. data/lib/repull/models/message_list_response.rb +1 -1
  205. data/lib/repull/models/pagination.rb +1 -1
  206. data/lib/repull/models/payment_completed_event.rb +1 -1
  207. data/lib/repull/models/payment_completed_payload.rb +1 -1
  208. data/lib/repull/models/payment_refunded_event.rb +1 -1
  209. data/lib/repull/models/payment_refunded_payload.rb +1 -1
  210. data/lib/repull/models/plumguide_listing.rb +1 -1
  211. data/lib/repull/models/plumguide_listing_list_response.rb +1 -1
  212. data/lib/repull/models/property.rb +43 -70
  213. data/lib/repull/models/property_list_response.rb +1 -1
  214. data/lib/repull/models/reply_booking_review200_response.rb +1 -1
  215. data/lib/repull/models/reply_booking_review_request.rb +1 -1
  216. data/lib/repull/models/repull_ping_event.rb +1 -1
  217. data/lib/repull/models/repull_ping_payload.rb +1 -1
  218. data/lib/repull/models/reservation.rb +29 -2
  219. data/lib/repull/models/reservation_cancelled_event.rb +1 -1
  220. data/lib/repull/models/reservation_cancelled_payload.rb +1 -1
  221. data/lib/repull/models/reservation_created_event.rb +1 -1
  222. data/lib/repull/models/reservation_created_payload.rb +1 -1
  223. data/lib/repull/models/reservation_financials.rb +1 -1
  224. data/lib/repull/models/reservation_list_response.rb +1 -1
  225. data/lib/repull/models/reservation_message_received_event.rb +1 -1
  226. data/lib/repull/models/reservation_message_received_payload.rb +1 -1
  227. data/lib/repull/models/reservation_message_received_payload_from.rb +1 -1
  228. data/lib/repull/models/reservation_occupancy.rb +1 -1
  229. data/lib/repull/models/reservation_primary_guest.rb +1 -1
  230. data/lib/repull/models/reservation_updated_event.rb +1 -1
  231. data/lib/repull/models/reservation_updated_payload.rb +1 -1
  232. data/lib/repull/models/reservation_webhook_object.rb +1 -1
  233. data/lib/repull/models/respond_airbnb_review_request.rb +1 -1
  234. data/lib/repull/models/review.rb +1 -1
  235. data/lib/repull/models/review_category.rb +1 -1
  236. data/lib/repull/models/review_list_response.rb +1 -1
  237. data/lib/repull/models/review_response.rb +1 -1
  238. data/lib/repull/models/rotate_webhook_secret200_response.rb +1 -1
  239. data/lib/repull/models/{upsert_studio_project_file_request.rb → sandbox_fixture_ref.rb} +49 -21
  240. data/lib/repull/models/{delete_studio_deployment200_response_data.rb → sandbox_reset_result.rb} +73 -12
  241. data/lib/repull/models/sandbox_reset_result_deleted.rb +216 -0
  242. data/lib/repull/models/sandbox_seed_result.rb +278 -0
  243. data/lib/repull/models/select_connect_provider_request.rb +1 -1
  244. data/lib/repull/models/select_provider_response.rb +1 -1
  245. data/lib/repull/models/set_kv_request.rb +1 -1
  246. data/lib/repull/models/studio_deployment.rb +1 -1
  247. data/lib/repull/models/studio_error.rb +1 -1
  248. data/lib/repull/models/studio_error_error.rb +1 -1
  249. data/lib/repull/models/studio_file.rb +1 -1
  250. data/lib/repull/models/studio_generation.rb +1 -1
  251. data/lib/repull/models/studio_project.rb +1 -1
  252. data/lib/repull/models/test_webhook_request.rb +1 -1
  253. data/lib/repull/models/update_listing_pricing_strategy200_response.rb +1 -1
  254. data/lib/repull/models/update_webhook_request.rb +1 -1
  255. data/lib/repull/models/vrbo_listing.rb +1 -1
  256. data/lib/repull/models/vrbo_listing_list_response.rb +1 -1
  257. data/lib/repull/models/vrbo_reservation.rb +1 -1
  258. data/lib/repull/models/vrbo_reservation_list_response.rb +1 -1
  259. data/lib/repull/models/webhook_delivery.rb +1 -1
  260. data/lib/repull/models/webhook_delivery_detail.rb +1 -1
  261. data/lib/repull/models/webhook_delivery_list_response.rb +1 -1
  262. data/lib/repull/models/webhook_event.rb +1 -1
  263. data/lib/repull/models/webhook_event_catalog.rb +1 -1
  264. data/lib/repull/models/webhook_event_catalog_domains_inner.rb +1 -1
  265. data/lib/repull/models/webhook_event_catalog_entry.rb +1 -1
  266. data/lib/repull/models/webhook_event_type.rb +1 -1
  267. data/lib/repull/models/webhook_list_response.rb +1 -1
  268. data/lib/repull/models/webhook_subscription.rb +1 -1
  269. data/lib/repull/version.rb +2 -2
  270. data/lib/repull.rb +27 -36
  271. data/openapi/v1.json +3604 -4346
  272. metadata +28 -37
  273. data/lib/repull/api/studio_api.rb +0 -1094
  274. data/lib/repull/models/create_studio_deployment201_response.rb +0 -147
  275. data/lib/repull/models/create_studio_project201_response.rb +0 -147
  276. data/lib/repull/models/create_studio_project_generation201_response.rb +0 -147
  277. data/lib/repull/models/create_studio_project_generation201_response_data.rb +0 -165
  278. data/lib/repull/models/delete_studio_deployment200_response.rb +0 -147
  279. data/lib/repull/models/delete_studio_project200_response.rb +0 -147
  280. data/lib/repull/models/delete_studio_project_file200_response.rb +0 -147
  281. data/lib/repull/models/delete_studio_project_file200_response_data.rb +0 -156
  282. data/lib/repull/models/generate_studio_completion_request.rb +0 -305
  283. data/lib/repull/models/list_studio_project_files200_response.rb +0 -149
  284. data/lib/repull/models/list_studio_projects200_response.rb +0 -149
  285. data/lib/repull/models/upsert_studio_project_file200_response_data.rb +0 -147
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2002ffeade6c17fff58ce091ca2b9ef17dc9e2bb8b78ce00f5be7c384bf2dab1
4
- data.tar.gz: f95b91551c7e754d0f274a4bed957a3fedd46e3afff565e350f89659b2b91293
3
+ metadata.gz: d5a9c9093f7135eb3837ed3df58d351a65a81d6514335bf0bf8aaad034f7a1bd
4
+ data.tar.gz: b21581271dc40c44f0c0634120b9fd4494ccad184b6892119c9219a426095181
5
5
  SHA512:
6
- metadata.gz: 1b1b860a983ba03fd156f3b2d8feeff8c33cae0b3711f9ca1553f77d649353a7bd4573a895e945029fcd1f137dc994b4fc4ab298bd4e38c4170f9c910fe64dcd
7
- data.tar.gz: 5228ab1cdbd8b06e884f45d3cb7533aec85e0105afb5ab1deb51b1586fadd8ff24a66dd9e3fbfba6b1d2b637749c0db83f9b3e0efd3d4b36c254f1db8e576185
6
+ metadata.gz: 7d0587b8990f6170058fb1143b0171798cee901a84f98223fd83676c9c20a877649c2685c85cd384a6428edee0c763d4f2b6441cffde79e0b48d681a7e0741a3
7
+ data.tar.gz: '09c9692f5218ef24bae4009c4eac92f1c7e5853c531093dffa516b7861fbcf160c7c35e1a7bea01c9ae9b1141e053b167b4cec3a0fb007ba3b400b552b875ca0'
@@ -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` | 5 | | `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_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`.
5
5
 
6
6
  The version of the OpenAPI document: 1.0.0
7
7
  Contact: ivan@vanio.ai
@@ -19,20 +19,22 @@ module Repull
19
19
  def initialize(api_client = ApiClient.default)
20
20
  @api_client = api_client
21
21
  end
22
- # Listing action (push/publish/unlist/delete)
23
- # Apply a state action to an Airbnb listing `push` (sync local changes upstream), `publish` (make publicly bookable), `unlist` (hide), or `delete` (permanent). Each action has different reversibility see docs.
22
+ # Listing action (delete/push/publish)
23
+ # Apply a state action to a listing by id. The path `id` is the canonical Repull listing id. `delete` is a **deactivate of the Repull record only** — it sets the listing inactive and KEEPS the row; it does NOT touch the upstream Airbnb listing (Repull never deletes or deactivates on Airbnb's side). Use it to exclude a listing / trim back under the plan-listings cap; reactivate via `PATCH /v1/listings/{id}` with `{ \"active\": true }`. Idempotent. `push` / `publish` push the listing's content to Airbnb via the same host-side sync orchestrator as `POST /v1/listings/{id}/publish/airbnb` — pass `airbnbConnectionId` to update an already-mapped Airbnb listing, or `hostId` to create + publish a new one under that host. `force` re-pushes every field, ignoring dirty-field tracking. Any other action (e.g. `pull`, `unlist`) returns a structured 422 naming the supported actions.
24
24
  # @param id [String]
25
25
  # @param [Hash] opts the optional parameters
26
+ # @option opts [AirbnbListingActionRequest] :airbnb_listing_action_request
26
27
  # @return [nil]
27
28
  def airbnb_listing_action(id, opts = {})
28
29
  airbnb_listing_action_with_http_info(id, opts)
29
30
  nil
30
31
  end
31
32
 
32
- # Listing action (push/publish/unlist/delete)
33
- # Apply a state action to an Airbnb listing `push` (sync local changes upstream), `publish` (make publicly bookable), `unlist` (hide), or `delete` (permanent). Each action has different reversibility see docs.
33
+ # Listing action (delete/push/publish)
34
+ # Apply a state action to a listing by id. The path `id` is the canonical Repull listing id. `delete` is a **deactivate of the Repull record only** — it sets the listing inactive and KEEPS the row; it does NOT touch the upstream Airbnb listing (Repull never deletes or deactivates on Airbnb's side). Use it to exclude a listing / trim back under the plan-listings cap; reactivate via `PATCH /v1/listings/{id}` with `{ \"active\": true }`. Idempotent. `push` / `publish` push the listing's content to Airbnb via the same host-side sync orchestrator as `POST /v1/listings/{id}/publish/airbnb` — pass `airbnbConnectionId` to update an already-mapped Airbnb listing, or `hostId` to create + publish a new one under that host. `force` re-pushes every field, ignoring dirty-field tracking. Any other action (e.g. `pull`, `unlist`) returns a structured 422 naming the supported actions.
34
35
  # @param id [String]
35
36
  # @param [Hash] opts the optional parameters
37
+ # @option opts [AirbnbListingActionRequest] :airbnb_listing_action_request
36
38
  # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
37
39
  def airbnb_listing_action_with_http_info(id, opts = {})
38
40
  if @api_client.config.debugging
@@ -50,12 +52,19 @@ module Repull
50
52
 
51
53
  # header parameters
52
54
  header_params = opts[:header_params] || {}
55
+ # HTTP header 'Accept' (if needed)
56
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
57
+ # HTTP header 'Content-Type'
58
+ content_type = @api_client.select_header_content_type(['application/json'])
59
+ if !content_type.nil?
60
+ header_params['Content-Type'] = content_type
61
+ end
53
62
 
54
63
  # form parameters
55
64
  form_params = opts[:form_params] || {}
56
65
 
57
66
  # http body (model)
58
- post_body = opts[:debug_body]
67
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(opts[:'airbnb_listing_action_request'])
59
68
 
60
69
  # return_type
61
70
  return_type = opts[:debug_return_type]
@@ -141,63 +150,6 @@ module Repull
141
150
  return data, status_code, headers
142
151
  end
143
152
 
144
- # Create/push Airbnb listing
145
- # Create a new Airbnb listing or push an existing Repull listing to Airbnb. Requires a connected Airbnb account. Returns the created listing id; publishing happens via the listing-action endpoint.
146
- # @param [Hash] opts the optional parameters
147
- # @return [AirbnbListing]
148
- def create_airbnb_listing(opts = {})
149
- data, _status_code, _headers = create_airbnb_listing_with_http_info(opts)
150
- data
151
- end
152
-
153
- # Create/push Airbnb listing
154
- # Create a new Airbnb listing or push an existing Repull listing to Airbnb. Requires a connected Airbnb account. Returns the created listing id; publishing happens via the listing-action endpoint.
155
- # @param [Hash] opts the optional parameters
156
- # @return [Array<(AirbnbListing, Integer, Hash)>] AirbnbListing data, response status code and response headers
157
- def create_airbnb_listing_with_http_info(opts = {})
158
- if @api_client.config.debugging
159
- @api_client.config.logger.debug 'Calling API: AirbnbApi.create_airbnb_listing ...'
160
- end
161
- # resource path
162
- local_var_path = '/v1/channels/airbnb/listings'
163
-
164
- # query parameters
165
- query_params = opts[:query_params] || {}
166
-
167
- # header parameters
168
- header_params = opts[:header_params] || {}
169
- # HTTP header 'Accept' (if needed)
170
- header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
171
-
172
- # form parameters
173
- form_params = opts[:form_params] || {}
174
-
175
- # http body (model)
176
- post_body = opts[:debug_body]
177
-
178
- # return_type
179
- return_type = opts[:debug_return_type] || 'AirbnbListing'
180
-
181
- # auth_names
182
- auth_names = opts[:debug_auth_names] || ['bearerAuth']
183
-
184
- new_options = opts.merge(
185
- :operation => :"AirbnbApi.create_airbnb_listing",
186
- :header_params => header_params,
187
- :query_params => query_params,
188
- :form_params => form_params,
189
- :body => post_body,
190
- :auth_names => auth_names,
191
- :return_type => return_type
192
- )
193
-
194
- data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
195
- if @api_client.config.debugging
196
- @api_client.config.logger.debug "API called: AirbnbApi#create_airbnb_listing\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
197
- end
198
- return data, status_code, headers
199
- end
200
-
201
153
  # Edit Airbnb host review
202
154
  # Edit a host-side review for an Airbnb stay. Airbnb collapses POST + PUT into the same upstream call (`PUT /v2/listing_reviews/{id}`), so this endpoint covers both initial submit and subsequent edits while the review window is open. Body is a partial `AirbnbReview` — pass the fields you want to change (rating, public review, private feedback, category ratings).
203
155
  # @param id [String] Airbnb review id (&#x60;HRabc123&#x60; style).
@@ -979,6 +931,74 @@ module Repull
979
931
  return data, status_code, headers
980
932
  end
981
933
 
934
+ # Map an Airbnb listing to a Repull listing
935
+ # Link an existing Airbnb listing to a canonical Repull listing/property. **API-key-scoped** (unlike the Booking room mapping, which is Connect-session-scoped). Discover the `airbnbId` (+ `hostId`) via `GET /v1/channels/airbnb/listings`, then re-point it at the `listingId` of your choice — the dedup / consolidation case where the Airbnb sync auto-created its own listing but you want the inventory under an existing property. Repoints both the Airbnb record and its platform link to the target listing in one transaction. Idempotent — re-mapping to the same listing is a 200 no-op (`alreadyMapped: true`). Scope is enforced against your workspace on both the target listing and the existing Airbnb record; a listing that already links a different Airbnb listing returns 409.
936
+ # @param map_airbnb_listing_request [MapAirbnbListingRequest]
937
+ # @param [Hash] opts the optional parameters
938
+ # @return [MapAirbnbListingResponse]
939
+ def map_airbnb_listing(map_airbnb_listing_request, opts = {})
940
+ data, _status_code, _headers = map_airbnb_listing_with_http_info(map_airbnb_listing_request, opts)
941
+ data
942
+ end
943
+
944
+ # Map an Airbnb listing to a Repull listing
945
+ # Link an existing Airbnb listing to a canonical Repull listing/property. **API-key-scoped** (unlike the Booking room mapping, which is Connect-session-scoped). Discover the &#x60;airbnbId&#x60; (+ &#x60;hostId&#x60;) via &#x60;GET /v1/channels/airbnb/listings&#x60;, then re-point it at the &#x60;listingId&#x60; of your choice — the dedup / consolidation case where the Airbnb sync auto-created its own listing but you want the inventory under an existing property. Repoints both the Airbnb record and its platform link to the target listing in one transaction. Idempotent — re-mapping to the same listing is a 200 no-op (&#x60;alreadyMapped: true&#x60;). Scope is enforced against your workspace on both the target listing and the existing Airbnb record; a listing that already links a different Airbnb listing returns 409.
946
+ # @param map_airbnb_listing_request [MapAirbnbListingRequest]
947
+ # @param [Hash] opts the optional parameters
948
+ # @return [Array<(MapAirbnbListingResponse, Integer, Hash)>] MapAirbnbListingResponse data, response status code and response headers
949
+ def map_airbnb_listing_with_http_info(map_airbnb_listing_request, opts = {})
950
+ if @api_client.config.debugging
951
+ @api_client.config.logger.debug 'Calling API: AirbnbApi.map_airbnb_listing ...'
952
+ end
953
+ # verify the required parameter 'map_airbnb_listing_request' is set
954
+ if @api_client.config.client_side_validation && map_airbnb_listing_request.nil?
955
+ fail ArgumentError, "Missing the required parameter 'map_airbnb_listing_request' when calling AirbnbApi.map_airbnb_listing"
956
+ end
957
+ # resource path
958
+ local_var_path = '/v1/channels/airbnb/listings/map'
959
+
960
+ # query parameters
961
+ query_params = opts[:query_params] || {}
962
+
963
+ # header parameters
964
+ header_params = opts[:header_params] || {}
965
+ # HTTP header 'Accept' (if needed)
966
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
967
+ # HTTP header 'Content-Type'
968
+ content_type = @api_client.select_header_content_type(['application/json'])
969
+ if !content_type.nil?
970
+ header_params['Content-Type'] = content_type
971
+ end
972
+
973
+ # form parameters
974
+ form_params = opts[:form_params] || {}
975
+
976
+ # http body (model)
977
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(map_airbnb_listing_request)
978
+
979
+ # return_type
980
+ return_type = opts[:debug_return_type] || 'MapAirbnbListingResponse'
981
+
982
+ # auth_names
983
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
984
+
985
+ new_options = opts.merge(
986
+ :operation => :"AirbnbApi.map_airbnb_listing",
987
+ :header_params => header_params,
988
+ :query_params => query_params,
989
+ :form_params => form_params,
990
+ :body => post_body,
991
+ :auth_names => auth_names,
992
+ :return_type => return_type
993
+ )
994
+
995
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
996
+ if @api_client.config.debugging
997
+ @api_client.config.logger.debug "API called: AirbnbApi#map_airbnb_listing\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
998
+ end
999
+ return data, status_code, headers
1000
+ end
1001
+
982
1002
  # Respond to Airbnb review
983
1003
  # Post a public host response to a guest review. Airbnb allows one response per review — repeated POSTs return 409. Response text is capped at 1000 characters.
984
1004
  # @param id [String] Airbnb review id.
@@ -1169,77 +1189,24 @@ module Repull
1169
1189
  return data, status_code, headers
1170
1190
  end
1171
1191
 
1172
- # Bulk sync to Airbnb
1173
- # Push all property data to Airbnb in one call.
1174
- # @param [Hash] opts the optional parameters
1175
- # @return [nil]
1176
- def sync_airbnb(opts = {})
1177
- sync_airbnb_with_http_info(opts)
1178
- nil
1179
- end
1180
-
1181
- # Bulk sync to Airbnb
1182
- # Push all property data to Airbnb in one call.
1183
- # @param [Hash] opts the optional parameters
1184
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
1185
- def sync_airbnb_with_http_info(opts = {})
1186
- if @api_client.config.debugging
1187
- @api_client.config.logger.debug 'Calling API: AirbnbApi.sync_airbnb ...'
1188
- end
1189
- # resource path
1190
- local_var_path = '/v1/channels/airbnb/sync'
1191
-
1192
- # query parameters
1193
- query_params = opts[:query_params] || {}
1194
-
1195
- # header parameters
1196
- header_params = opts[:header_params] || {}
1197
-
1198
- # form parameters
1199
- form_params = opts[:form_params] || {}
1200
-
1201
- # http body (model)
1202
- post_body = opts[:debug_body]
1203
-
1204
- # return_type
1205
- return_type = opts[:debug_return_type]
1206
-
1207
- # auth_names
1208
- auth_names = opts[:debug_auth_names] || ['bearerAuth']
1209
-
1210
- new_options = opts.merge(
1211
- :operation => :"AirbnbApi.sync_airbnb",
1212
- :header_params => header_params,
1213
- :query_params => query_params,
1214
- :form_params => form_params,
1215
- :body => post_body,
1216
- :auth_names => auth_names,
1217
- :return_type => return_type
1218
- )
1219
-
1220
- data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
1221
- if @api_client.config.debugging
1222
- @api_client.config.logger.debug "API called: AirbnbApi#sync_airbnb\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1223
- end
1224
- return data, status_code, headers
1225
- end
1226
-
1227
1192
  # Update Airbnb availability
1228
- # Push per-day availability + pricing overrides to Airbnb. Accepts a sparse map (date fields) — only included dates are updated.
1193
+ # Push availability + restrictions to Airbnb. `type: \"calendar\"` writes per-date restrictions — min/max nights, closed-to-arrival, closed-to-departure, and stop-sell (`availability: \"unavailable\"`) — via a batch of operations that each target either a date range or an explicit date list. `type: \"rules\"` writes listing-level availability rules (default min/max nights, booking lead time, turnover days, seasonal/day-of-week min nights). Restrictions never leak across channels this endpoint writes only to Airbnb.
1229
1194
  # @param id [String]
1195
+ # @param airbnb_availability_write_request [AirbnbAvailabilityWriteRequest]
1230
1196
  # @param [Hash] opts the optional parameters
1231
1197
  # @return [nil]
1232
- def update_airbnb_listing_availability(id, opts = {})
1233
- update_airbnb_listing_availability_with_http_info(id, opts)
1198
+ def update_airbnb_listing_availability(id, airbnb_availability_write_request, opts = {})
1199
+ update_airbnb_listing_availability_with_http_info(id, airbnb_availability_write_request, opts)
1234
1200
  nil
1235
1201
  end
1236
1202
 
1237
1203
  # Update Airbnb availability
1238
- # Push per-day availability + pricing overrides to Airbnb. Accepts a sparse map (date fields) — only included dates are updated.
1204
+ # Push availability + restrictions to Airbnb. &#x60;type: \&quot;calendar\&quot;&#x60; writes per-date restrictions — min/max nights, closed-to-arrival, closed-to-departure, and stop-sell (&#x60;availability: \&quot;unavailable\&quot;&#x60;) — via a batch of operations that each target either a date range or an explicit date list. &#x60;type: \&quot;rules\&quot;&#x60; writes listing-level availability rules (default min/max nights, booking lead time, turnover days, seasonal/day-of-week min nights). Restrictions never leak across channels this endpoint writes only to Airbnb.
1239
1205
  # @param id [String]
1206
+ # @param airbnb_availability_write_request [AirbnbAvailabilityWriteRequest]
1240
1207
  # @param [Hash] opts the optional parameters
1241
1208
  # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
1242
- def update_airbnb_listing_availability_with_http_info(id, opts = {})
1209
+ def update_airbnb_listing_availability_with_http_info(id, airbnb_availability_write_request, opts = {})
1243
1210
  if @api_client.config.debugging
1244
1211
  @api_client.config.logger.debug 'Calling API: AirbnbApi.update_airbnb_listing_availability ...'
1245
1212
  end
@@ -1247,6 +1214,10 @@ module Repull
1247
1214
  if @api_client.config.client_side_validation && id.nil?
1248
1215
  fail ArgumentError, "Missing the required parameter 'id' when calling AirbnbApi.update_airbnb_listing_availability"
1249
1216
  end
1217
+ # verify the required parameter 'airbnb_availability_write_request' is set
1218
+ if @api_client.config.client_side_validation && airbnb_availability_write_request.nil?
1219
+ fail ArgumentError, "Missing the required parameter 'airbnb_availability_write_request' when calling AirbnbApi.update_airbnb_listing_availability"
1220
+ end
1250
1221
  # resource path
1251
1222
  local_var_path = '/v1/channels/airbnb/listings/{id}/availability'.sub('{id}', CGI.escape(id.to_s))
1252
1223
 
@@ -1255,12 +1226,17 @@ module Repull
1255
1226
 
1256
1227
  # header parameters
1257
1228
  header_params = opts[:header_params] || {}
1229
+ # HTTP header 'Content-Type'
1230
+ content_type = @api_client.select_header_content_type(['application/json'])
1231
+ if !content_type.nil?
1232
+ header_params['Content-Type'] = content_type
1233
+ end
1258
1234
 
1259
1235
  # form parameters
1260
1236
  form_params = opts[:form_params] || {}
1261
1237
 
1262
1238
  # http body (model)
1263
- post_body = opts[:debug_body]
1239
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(airbnb_availability_write_request)
1264
1240
 
1265
1241
  # return_type
1266
1242
  return_type = opts[:debug_return_type]
@@ -1286,21 +1262,23 @@ module Repull
1286
1262
  end
1287
1263
 
1288
1264
  # Update Airbnb pricing
1289
- # Push pricing changes to Airbnb. The full pricing object is replaced to patch a single field, GET first, mutate locally, then PUT the whole object.
1265
+ # Push pricing changes to Airbnb. The `type` discriminator selects the sub-resource (model, standard settings, LOS, rate-plan, fees, currency, rule, or per-date `calendar`). `type: \"calendar\"` carries the full per-date restriction setnightly price, min/max nights, closed-to-arrival, closed-to-departure, and stop-sell (`availability: \"unavailable\"`). For settings sub-resources the full object is replaced — GET first, mutate locally, then PUT the whole object.
1290
1266
  # @param id [String]
1267
+ # @param airbnb_pricing_write_request [AirbnbPricingWriteRequest]
1291
1268
  # @param [Hash] opts the optional parameters
1292
1269
  # @return [nil]
1293
- def update_airbnb_listing_pricing(id, opts = {})
1294
- update_airbnb_listing_pricing_with_http_info(id, opts)
1270
+ def update_airbnb_listing_pricing(id, airbnb_pricing_write_request, opts = {})
1271
+ update_airbnb_listing_pricing_with_http_info(id, airbnb_pricing_write_request, opts)
1295
1272
  nil
1296
1273
  end
1297
1274
 
1298
1275
  # Update Airbnb pricing
1299
- # Push pricing changes to Airbnb. The full pricing object is replaced to patch a single field, GET first, mutate locally, then PUT the whole object.
1276
+ # Push pricing changes to Airbnb. The &#x60;type&#x60; discriminator selects the sub-resource (model, standard settings, LOS, rate-plan, fees, currency, rule, or per-date &#x60;calendar&#x60;). &#x60;type: \&quot;calendar\&quot;&#x60; carries the full per-date restriction setnightly price, min/max nights, closed-to-arrival, closed-to-departure, and stop-sell (&#x60;availability: \&quot;unavailable\&quot;&#x60;). For settings sub-resources the full object is replaced — GET first, mutate locally, then PUT the whole object.
1300
1277
  # @param id [String]
1278
+ # @param airbnb_pricing_write_request [AirbnbPricingWriteRequest]
1301
1279
  # @param [Hash] opts the optional parameters
1302
1280
  # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
1303
- def update_airbnb_listing_pricing_with_http_info(id, opts = {})
1281
+ def update_airbnb_listing_pricing_with_http_info(id, airbnb_pricing_write_request, opts = {})
1304
1282
  if @api_client.config.debugging
1305
1283
  @api_client.config.logger.debug 'Calling API: AirbnbApi.update_airbnb_listing_pricing ...'
1306
1284
  end
@@ -1308,6 +1286,10 @@ module Repull
1308
1286
  if @api_client.config.client_side_validation && id.nil?
1309
1287
  fail ArgumentError, "Missing the required parameter 'id' when calling AirbnbApi.update_airbnb_listing_pricing"
1310
1288
  end
1289
+ # verify the required parameter 'airbnb_pricing_write_request' is set
1290
+ if @api_client.config.client_side_validation && airbnb_pricing_write_request.nil?
1291
+ fail ArgumentError, "Missing the required parameter 'airbnb_pricing_write_request' when calling AirbnbApi.update_airbnb_listing_pricing"
1292
+ end
1311
1293
  # resource path
1312
1294
  local_var_path = '/v1/channels/airbnb/listings/{id}/pricing'.sub('{id}', CGI.escape(id.to_s))
1313
1295
 
@@ -1316,12 +1298,17 @@ module Repull
1316
1298
 
1317
1299
  # header parameters
1318
1300
  header_params = opts[:header_params] || {}
1301
+ # HTTP header 'Content-Type'
1302
+ content_type = @api_client.select_header_content_type(['application/json'])
1303
+ if !content_type.nil?
1304
+ header_params['Content-Type'] = content_type
1305
+ end
1319
1306
 
1320
1307
  # form parameters
1321
1308
  form_params = opts[:form_params] || {}
1322
1309
 
1323
1310
  # http body (model)
1324
- post_body = opts[:debug_body]
1311
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(airbnb_pricing_write_request)
1325
1312
 
1326
1313
  # return_type
1327
1314
  return_type = opts[:debug_return_type]
@@ -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` | 5 | | `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_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`.
5
5
 
6
6
  The version of the OpenAPI document: 1.0.0
7
7
  Contact: ivan@vanio.ai
@@ -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` | 5 | | `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_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`.
5
5
 
6
6
  The version of the OpenAPI document: 1.0.0
7
7
  Contact: ivan@vanio.ai
@@ -80,60 +80,5 @@ module Repull
80
80
  end
81
81
  return data, status_code, headers
82
82
  end
83
-
84
- # Get plan and usage
85
- # Fetch the current plan, usage counters, and billing-cycle reset date for this workspace. Use this to surface a \"you have used X / Y\" indicator in your dashboard.
86
- # @param [Hash] opts the optional parameters
87
- # @return [nil]
88
- def get_billing(opts = {})
89
- get_billing_with_http_info(opts)
90
- nil
91
- end
92
-
93
- # Get plan and usage
94
- # Fetch the current plan, usage counters, and billing-cycle reset date for this workspace. Use this to surface a \&quot;you have used X / Y\&quot; indicator in your dashboard.
95
- # @param [Hash] opts the optional parameters
96
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
97
- def get_billing_with_http_info(opts = {})
98
- if @api_client.config.debugging
99
- @api_client.config.logger.debug 'Calling API: BillingApi.get_billing ...'
100
- end
101
- # resource path
102
- local_var_path = '/v1/billing'
103
-
104
- # query parameters
105
- query_params = opts[:query_params] || {}
106
-
107
- # header parameters
108
- header_params = opts[:header_params] || {}
109
-
110
- # form parameters
111
- form_params = opts[:form_params] || {}
112
-
113
- # http body (model)
114
- post_body = opts[:debug_body]
115
-
116
- # return_type
117
- return_type = opts[:debug_return_type]
118
-
119
- # auth_names
120
- auth_names = opts[:debug_auth_names] || ['bearerAuth']
121
-
122
- new_options = opts.merge(
123
- :operation => :"BillingApi.get_billing",
124
- :header_params => header_params,
125
- :query_params => query_params,
126
- :form_params => form_params,
127
- :body => post_body,
128
- :auth_names => auth_names,
129
- :return_type => return_type
130
- )
131
-
132
- data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
133
- if @api_client.config.debugging
134
- @api_client.config.logger.debug "API called: BillingApi#get_billing\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
135
- end
136
- return data, status_code, headers
137
- end
138
83
  end
139
84
  end