repull 0.2.15 → 0.2.16

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 (126) hide show
  1. checksums.yaml +4 -4
  2. data/lib/repull/api/airbnb_api.rb +147 -52
  3. data/lib/repull/api/billing_api.rb +4 -4
  4. data/lib/repull/api/booking_com_api.rb +36 -27
  5. data/lib/repull/api/conversations_api.rb +398 -4
  6. data/lib/repull/api/guests_api.rb +2 -2
  7. data/lib/repull/api/listings_api.rb +4 -4
  8. data/lib/repull/api/reservations_api.rb +157 -6
  9. data/lib/repull/api/webhooks_api.rb +10 -3
  10. data/lib/repull/models/accept_reservation_request200_response.rb +321 -0
  11. data/lib/repull/models/account_created_event.rb +95 -31
  12. data/lib/repull/models/account_disconnected_event.rb +95 -31
  13. data/lib/repull/models/ai_operation_completed_event.rb +95 -31
  14. data/lib/repull/models/ai_operation_failed_event.rb +95 -31
  15. data/lib/repull/models/airbnb_reservation_action200_response.rb +157 -0
  16. data/lib/repull/models/airbnb_reservation_action_request.rb +248 -0
  17. data/lib/repull/models/booking_availability_update.rb +4 -20
  18. data/lib/repull/models/booking_availability_update_date_range.rb +193 -0
  19. data/lib/repull/models/booking_availability_update_request.rb +14 -3
  20. data/lib/repull/models/booking_pricing_rate_update.rb +32 -4
  21. data/lib/repull/models/booking_pricing_rate_update_date_range.rb +3 -0
  22. data/lib/repull/models/booking_pricing_rate_update_restrictions.rb +10 -10
  23. data/lib/repull/models/booking_pricing_response.rb +16 -4
  24. data/lib/repull/models/booking_pricing_update_response.rb +82 -18
  25. data/lib/repull/models/booking_property.rb +107 -36
  26. data/lib/repull/models/booking_property_listings_inner.rb +244 -0
  27. data/lib/repull/models/booking_rate_write_occupancy.rb +187 -0
  28. data/lib/repull/models/booking_rate_write_price_half.rb +188 -0
  29. data/lib/repull/models/booking_rate_write_restriction_half.rb +212 -0
  30. data/lib/repull/models/booking_rate_write_verification.rb +200 -0
  31. data/lib/repull/models/booking_rate_write_verification_row.rb +196 -0
  32. data/lib/repull/models/booking_restriction_request_row.rb +199 -0
  33. data/lib/repull/models/booking_restriction_verification.rb +208 -0
  34. data/lib/repull/models/booking_restriction_verification_row.rb +203 -0
  35. data/lib/repull/models/booking_restriction_verification_row_booking_value.rb +105 -0
  36. data/lib/repull/models/booking_restriction_verification_row_expected.rb +105 -0
  37. data/lib/repull/models/booking_rooms_rates_response.rb +41 -7
  38. data/lib/repull/models/booking_rooms_rates_response_rooms_inner.rb +12 -1
  39. data/lib/repull/models/booking_rooms_rates_response_rooms_inner_rates_inner.rb +1 -0
  40. data/lib/repull/models/booking_upstream_failure.rb +204 -0
  41. data/lib/repull/models/calendar_updated_event.rb +95 -31
  42. data/lib/repull/models/conversation_message_attachment.rb +28 -1
  43. data/lib/repull/models/create_airbnb_offer_request.rb +93 -8
  44. data/lib/repull/models/create_airbnb_offer_request_guest_details.rb +279 -0
  45. data/lib/repull/models/create_conversation_special_offer201_response.rb +293 -0
  46. data/lib/repull/models/create_conversation_special_offer201_response_guests.rb +189 -0
  47. data/lib/repull/models/create_conversation_special_offer_request.rb +263 -0
  48. data/lib/repull/models/create_conversation_special_offer_request_guests.rb +263 -0
  49. data/lib/repull/models/decline_reservation_request_request.rb +234 -0
  50. data/lib/repull/models/get_airbnb_offer200_response.rb +289 -0
  51. data/lib/repull/models/get_usage_summary200_response.rb +10 -1
  52. data/lib/repull/models/get_usage_summary200_response_limits.rb +11 -1
  53. data/lib/repull/models/get_usage_summary200_response_remaining.rb +11 -1
  54. data/lib/repull/models/get_usage_summary200_response_used.rb +10 -1
  55. data/lib/repull/models/get_usage_tier200_response.rb +10 -1
  56. data/lib/repull/models/get_usage_tier200_response_limits.rb +11 -1
  57. data/lib/repull/models/get_usage_tier200_response_remaining.rb +11 -1
  58. data/lib/repull/models/get_usage_tier200_response_used.rb +10 -1
  59. data/lib/repull/models/inquiry_created_event.rb +281 -0
  60. data/lib/repull/models/inquiry_created_payload.rb +185 -0
  61. data/lib/repull/models/inquiry_updated_event.rb +281 -0
  62. data/lib/repull/models/inquiry_updated_payload.rb +213 -0
  63. data/lib/repull/models/inquiry_webhook_object.rb +323 -0
  64. data/lib/repull/models/inquiry_webhook_object_expected_payout.rb +158 -0
  65. data/lib/repull/models/inquiry_webhook_object_guests.rb +188 -0
  66. data/lib/repull/models/list_airbnb_thread_messages200_response.rb +170 -0
  67. data/lib/repull/models/list_airbnb_thread_messages200_response_data_inner.rb +274 -0
  68. data/lib/repull/models/list_airbnb_thread_messages200_response_pagination.rb +158 -0
  69. data/lib/repull/models/list_inquiries200_response.rb +192 -0
  70. data/lib/repull/models/list_inquiries200_response_data_inner.rb +418 -0
  71. data/lib/repull/models/list_inquiries200_response_data_inner_expected_payout.rb +159 -0
  72. data/lib/repull/models/list_inquiries200_response_data_inner_guests.rb +188 -0
  73. data/lib/repull/models/listing_created_event.rb +95 -31
  74. data/lib/repull/models/listing_deleted_event.rb +95 -31
  75. data/lib/repull/models/listing_deleted_payload.rb +55 -21
  76. data/lib/repull/models/listing_reactivated_event.rb +281 -0
  77. data/lib/repull/models/listing_suspended_event.rb +281 -0
  78. data/lib/repull/models/listing_suspension_payload.rb +202 -0
  79. data/lib/repull/models/listing_updated_event.rb +95 -31
  80. data/lib/repull/models/listing_updated_payload.rb +50 -22
  81. data/lib/repull/models/listing_webhook_object.rb +291 -0
  82. data/lib/repull/models/listing_webhook_object_address.rb +168 -0
  83. data/lib/repull/models/listing_webhook_object_channels_inner.rb +184 -0
  84. data/lib/repull/models/message.rb +1 -0
  85. data/lib/repull/models/payment_completed_event.rb +95 -31
  86. data/lib/repull/models/payment_completed_payload.rb +46 -44
  87. data/lib/repull/models/payment_refunded_event.rb +95 -31
  88. data/lib/repull/models/payment_refunded_payload.rb +46 -44
  89. data/lib/repull/models/payment_webhook_object.rb +351 -0
  90. data/lib/repull/models/preapprove_conversation201_response.rb +253 -0
  91. data/lib/repull/models/preapprove_conversation_request.rb +150 -0
  92. data/lib/repull/models/replay_webhook_delivery_request.rb +150 -0
  93. data/lib/repull/models/repull_ping_event.rb +95 -31
  94. data/lib/repull/models/reservation.rb +22 -2
  95. data/lib/repull/models/reservation_alteration_created_event.rb +95 -31
  96. data/lib/repull/models/reservation_alteration_responded_event.rb +95 -31
  97. data/lib/repull/models/reservation_cancelled_event.rb +95 -31
  98. data/lib/repull/models/reservation_created_event.rb +95 -32
  99. data/lib/repull/models/reservation_message_received_event.rb +95 -31
  100. data/lib/repull/models/reservation_message_received_payload.rb +17 -4
  101. data/lib/repull/models/reservation_request_created_event.rb +281 -0
  102. data/lib/repull/models/reservation_request_created_payload.rb +224 -0
  103. data/lib/repull/models/reservation_request_updated_event.rb +281 -0
  104. data/lib/repull/models/reservation_request_updated_payload.rb +251 -0
  105. data/lib/repull/models/reservation_updated_event.rb +95 -31
  106. data/lib/repull/models/review_created_event.rb +95 -31
  107. data/lib/repull/models/review_responded_event.rb +95 -31
  108. data/lib/repull/models/send_airbnb_message201_response.rb +104 -0
  109. data/lib/repull/models/send_airbnb_message_request.rb +4 -20
  110. data/lib/repull/models/send_message_attachment.rb +225 -0
  111. data/lib/repull/models/send_message_part.rb +201 -0
  112. data/lib/repull/models/send_message_request.rb +44 -19
  113. data/lib/repull/models/send_message_response.rb +29 -5
  114. data/lib/repull/models/sent_attachment.rb +196 -0
  115. data/lib/repull/models/usage_quota_warning_event.rb +281 -0
  116. data/lib/repull/models/usage_quota_warning_payload.rb +224 -0
  117. data/lib/repull/models/usage_quota_warning_payload_top_operation.rb +167 -0
  118. data/lib/repull/models/webhook_event.rb +17 -3
  119. data/lib/repull/models/webhook_event_account.rb +171 -0
  120. data/lib/repull/models/webhook_event_type.rb +8 -1
  121. data/lib/repull/models/withdraw_conversation_special_offer200_response.rb +240 -0
  122. data/lib/repull/version.rb +1 -1
  123. data/lib/repull.rb +60 -0
  124. data/openapi/v1.json +19295 -13620
  125. data/scripts/regen.sh +1 -1
  126. metadata +62 -2
@@ -485,13 +485,14 @@ module Repull
485
485
  end
486
486
 
487
487
  # Get Booking.com pricing for a listing
488
- # Resolves the Vanio listing ID to its Booking.com `hotel_id` (via the `listings_booking` mapping owned by the authenticated workspace), then proxies Booking's `getRoomRateAvailability` for the requested window. Pricing on Booking is per-room/per-rate-plan, so `room_id` and `room_level` flow through query params unchanged. Mirrors the per-channel `/listings/{id}/pricing` shape used by Airbnb so SDK consumers can carry a Vanio listing ID across channels. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
489
- # @param id [Integer] Vanio listing IDresolved to a Booking.com hotel ID via the workspace mapping.
488
+ # Resolves the Repull listing id to its Booking.com `hotel_id` (via the room mapping the Connect flow records for the authenticated workspace), then proxies Booking's `getRoomRateAvailability` for the requested window. Pricing on Booking is per-room/per-rate-plan, so `room_id` and `room_level` flow through query params unchanged. Mirrors the per-channel `/listings/{id}/pricing` shape used by Airbnb so SDK consumers can carry a Repull listing id across channels. `id` is a Repull listing id, never a Booking.com hotel id — the hotel-id surface is `/v1/channels/booking/availability`. A listing can be published under several Booking.com properties. GET uses the oldest and reports the rest in `otherHotelIds`; PUT refuses with `409 ambiguous_booking_mapping` rather than push rates into a property it guessed at. `?hotel_id=` names the property explicitly for either. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
489
+ # @param id [Integer] Repull listing idNOT a Booking.com hotel id. Resolved to a Booking.com hotel id via the workspace mapping.
490
490
  # @param [Hash] opts the optional parameters
491
491
  # @option opts [Date] :start_date
492
492
  # @option opts [Integer] :number_of_days
493
493
  # @option opts [String] :room_id
494
494
  # @option opts [Boolean] :room_level When true, returns room-level (vs rate-plan-level) availability.
495
+ # @option opts [String] :hotel_id Booking.com hotel id, when this listing is published under more than one property. Omit it and a read uses the oldest mapping (reporting the rest in `otherHotelIds`), while a write is refused with `409 ambiguous_booking_mapping` rather than guess. `GET /v1/channels/booking/properties` lists the valid ids.
495
496
  # @return [BookingPricingResponse]
496
497
  def get_booking_listing_pricing(id, opts = {})
497
498
  data, _status_code, _headers = get_booking_listing_pricing_with_http_info(id, opts)
@@ -499,13 +500,14 @@ module Repull
499
500
  end
500
501
 
501
502
  # Get Booking.com pricing for a listing
502
- # Resolves the Vanio listing ID to its Booking.com `hotel_id` (via the `listings_booking` mapping owned by the authenticated workspace), then proxies Booking's `getRoomRateAvailability` for the requested window. Pricing on Booking is per-room/per-rate-plan, so `room_id` and `room_level` flow through query params unchanged. Mirrors the per-channel `/listings/{id}/pricing` shape used by Airbnb so SDK consumers can carry a Vanio listing ID across channels. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
503
- # @param id [Integer] Vanio listing IDresolved to a Booking.com hotel ID via the workspace mapping.
503
+ # Resolves the Repull listing id to its Booking.com `hotel_id` (via the room mapping the Connect flow records for the authenticated workspace), then proxies Booking's `getRoomRateAvailability` for the requested window. Pricing on Booking is per-room/per-rate-plan, so `room_id` and `room_level` flow through query params unchanged. Mirrors the per-channel `/listings/{id}/pricing` shape used by Airbnb so SDK consumers can carry a Repull listing id across channels. `id` is a Repull listing id, never a Booking.com hotel id — the hotel-id surface is `/v1/channels/booking/availability`. A listing can be published under several Booking.com properties. GET uses the oldest and reports the rest in `otherHotelIds`; PUT refuses with `409 ambiguous_booking_mapping` rather than push rates into a property it guessed at. `?hotel_id=` names the property explicitly for either. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
504
+ # @param id [Integer] Repull listing idNOT a Booking.com hotel id. Resolved to a Booking.com hotel id via the workspace mapping.
504
505
  # @param [Hash] opts the optional parameters
505
506
  # @option opts [Date] :start_date
506
507
  # @option opts [Integer] :number_of_days
507
508
  # @option opts [String] :room_id
508
509
  # @option opts [Boolean] :room_level When true, returns room-level (vs rate-plan-level) availability.
510
+ # @option opts [String] :hotel_id Booking.com hotel id, when this listing is published under more than one property. Omit it and a read uses the oldest mapping (reporting the rest in `otherHotelIds`), while a write is refused with `409 ambiguous_booking_mapping` rather than guess. `GET /v1/channels/booking/properties` lists the valid ids.
509
511
  # @return [Array<(BookingPricingResponse, Integer, Hash)>] BookingPricingResponse data, response status code and response headers
510
512
  def get_booking_listing_pricing_with_http_info(id, opts = {})
511
513
  if @api_client.config.debugging
@@ -524,6 +526,7 @@ module Repull
524
526
  query_params[:'number_of_days'] = opts[:'number_of_days'] if !opts[:'number_of_days'].nil?
525
527
  query_params[:'room_id'] = opts[:'room_id'] if !opts[:'room_id'].nil?
526
528
  query_params[:'room_level'] = opts[:'room_level'] if !opts[:'room_level'].nil?
529
+ query_params[:'hotel_id'] = opts[:'hotel_id'] if !opts[:'hotel_id'].nil?
527
530
 
528
531
  # header parameters
529
532
  header_params = opts[:header_params] || {}
@@ -560,8 +563,8 @@ module Repull
560
563
  end
561
564
 
562
565
  # Get Booking.com connection for a listing
563
- # Return the Booking.com connection record(s) for a Vanio listing — the linked Booking hotel id, sync flags, markup, sync category, and suspension state. Scoped to the authenticated workspace; a listing with no Booking.com connection returns 404. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
564
- # @param id [Integer] Vanio listing ID.
566
+ # Return the Booking.com connection record(s) for a Repull listing — the linked Booking hotel id, sync flags, markup, sync category, suspension state, and the Booking room the mapping runs through. `id` is a **Repull listing id**, not a Booking.com hotel id, despite the `properties` segment. (The hotel-id surface is `/v1/channels/booking/availability`.) The mapping is read from wherever the Connect flow recorded it — `listings_booking_rooms` for anything mapped through `POST /v1/connect/booking/map-rooms`, which is essentially every live mapping. An ARRAY, because one listing can be published under several Booking.com properties at once; `mappedVia` says which record carries each mapping. A listing with no Booking.com mapping returns 404, and the message says which id space the path takes. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
567
+ # @param id [Integer] Repull listing id — NOT a Booking.com hotel id.
565
568
  # @param [Hash] opts the optional parameters
566
569
  # @return [nil]
567
570
  def get_booking_property(id, opts = {})
@@ -570,8 +573,8 @@ module Repull
570
573
  end
571
574
 
572
575
  # Get Booking.com connection for a listing
573
- # Return the Booking.com connection record(s) for a Vanio listing — the linked Booking hotel id, sync flags, markup, sync category, and suspension state. Scoped to the authenticated workspace; a listing with no Booking.com connection returns 404. Returns &#x60;403 listing_inactive&#x60; when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
574
- # @param id [Integer] Vanio listing ID.
576
+ # Return the Booking.com connection record(s) for a Repull listing — the linked Booking hotel id, sync flags, markup, sync category, suspension state, and the Booking room the mapping runs through. &#x60;id&#x60; is a **Repull listing id**, not a Booking.com hotel id, despite the &#x60;properties&#x60; segment. (The hotel-id surface is &#x60;/v1/channels/booking/availability&#x60;.) The mapping is read from wherever the Connect flow recorded it — &#x60;listings_booking_rooms&#x60; for anything mapped through &#x60;POST /v1/connect/booking/map-rooms&#x60;, which is essentially every live mapping. An ARRAY, because one listing can be published under several Booking.com properties at once; &#x60;mappedVia&#x60; says which record carries each mapping. A listing with no Booking.com mapping returns 404, and the message says which id space the path takes. Returns &#x60;403 listing_inactive&#x60; when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
577
+ # @param id [Integer] Repull listing id — NOT a Booking.com hotel id.
575
578
  # @param [Hash] opts the optional parameters
576
579
  # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
577
580
  def get_booking_property_with_http_info(id, opts = {})
@@ -680,7 +683,7 @@ module Repull
680
683
  end
681
684
 
682
685
  # List Booking.com properties
683
- # List Booking.com hotels claimed by this workspace. Each row includes the Booking-side hotel id and the connected room types. Inactive listings are left out; they keep syncing and reappear once activated. Use `GET /v1/listings?status=inactive` to find them.
686
+ # List every Booking.com property this workspace holds. Each property is returned ONCE, with the Repull listings mapped under it. A Booking.com property is a building; its rooms are what guests book, and each room is mapped to one Repull listing — so one property routinely carries many listings. `listings[].roomBookingId` is the Booking.com room id an ARI write takes. A property whose rooms are not mapped yet is still listed, with `mappingStatus: \"unmapped\"` and an empty `listings` array. That is a real mid-onboarding state, not an error: finish `POST /v1/connect/booking/map-rooms` and the listings appear. Such a property used to be dropped silently, which made a mapped-but-unreadable workspace indistinguishable from one with no Booking connection at all. Inactive listings are left out of `listings`; they keep syncing and reappear once activated. Use `GET /v1/listings?status=inactive` to find them.
684
687
  # @param [Hash] opts the optional parameters
685
688
  # @return [Array<BookingProperty>]
686
689
  def list_booking_properties(opts = {})
@@ -689,7 +692,7 @@ module Repull
689
692
  end
690
693
 
691
694
  # List Booking.com properties
692
- # List Booking.com hotels claimed by this workspace. Each row includes the Booking-side hotel id and the connected room types. Inactive listings are left out; they keep syncing and reappear once activated. Use &#x60;GET /v1/listings?status&#x3D;inactive&#x60; to find them.
695
+ # List every Booking.com property this workspace holds. Each property is returned ONCE, with the Repull listings mapped under it. A Booking.com property is a building; its rooms are what guests book, and each room is mapped to one Repull listing — so one property routinely carries many listings. &#x60;listings[].roomBookingId&#x60; is the Booking.com room id an ARI write takes. A property whose rooms are not mapped yet is still listed, with &#x60;mappingStatus: \&quot;unmapped\&quot;&#x60; and an empty &#x60;listings&#x60; array. That is a real mid-onboarding state, not an error: finish &#x60;POST /v1/connect/booking/map-rooms&#x60; and the listings appear. Such a property used to be dropped silently, which made a mapped-but-unreadable workspace indistinguishable from one with no Booking connection at all. Inactive listings are left out of &#x60;listings&#x60;; they keep syncing and reappear once activated. Use &#x60;GET /v1/listings?status&#x3D;inactive&#x60; to find them.
693
696
  # @param [Hash] opts the optional parameters
694
697
  # @return [Array<(Array<BookingProperty>, Integer, Hash)>] Array<BookingProperty> data, response status code and response headers
695
698
  def list_booking_properties_with_http_info(opts = {})
@@ -737,9 +740,10 @@ module Repull
737
740
  end
738
741
 
739
742
  # List Booking.com rooms + rate-plan ids for a listing
740
- # Return every Booking.com room and its rate plans for a listing, each with the `roomId` / `rateId` needed to assemble a restriction write via `PUT /v1/channels/booking/availability`. `id` is a Vanio listing id — resolved to the Booking `hotel_id` via the workspace mapping (a listing with no active Booking.com mapping returns 404). Sourced from Booking's B.XML roomrates feed, which returns rooms and rate plans together (the rooms-unit feed alone omits rate-plan ids). This is the API-key surface for the room/rate ids that were previously only reachable inside the hosted Connect room-mapping flow. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
741
- # @param id [Integer] Vanio listing id — resolved to a Booking.com hotel id via the workspace mapping.
743
+ # Return every Booking.com room and its rate plans for a listing, each with the `roomId` / `rateId` needed to assemble a restriction write via `PUT /v1/channels/booking/availability`. `id` is a **Repull listing id**, not a Booking.com hotel id, despite the `properties` segment — resolved to the Booking `hotel_id` through the workspace mapping, read from wherever the Connect flow recorded it (`listings_booking_rooms` for anything mapped through `POST /v1/connect/booking/map-rooms`). A listing with no active Booking.com mapping returns 404, and the message says which id space the path takes. When the listing is published under several properties the oldest is used, the rest come back in `otherHotelIds`, and `?hotel_id=` names a different one. Sourced from Booking's B.XML roomrates feed, which returns rooms and rate plans together (the rooms-unit feed alone omits rate-plan ids). This is the API-key surface for the room/rate ids that were previously only reachable inside the hosted Connect room-mapping flow. `source` says where the answer came from. `booking` means it was read live just now. If Booking.com returns nothing usable for the property, the rooms and rate plans recorded at the last import are served instead, `source` is `mirror`, and `mirrorReason` names what went wrong live — the ids are Booking.com's own and can be written against, but they can be stale, and `maxPersons`, `policy`, `policyId`, `pricingType` and `isChildRate` come back `null` because only the live feed states them. `rooms` is empty only when Booking.com and the last import both have nothing; a read that failed is an error, never an empty list. Each rate plan carries `maxPersons` — the party size that rate plan prices, which is the `occupancy` a rate amount must be written at. Each room carries `maxAdults`, Booking.com's capacity for the room, which is what a rate write falls back to when the rate plan states no `maxPersons`. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
744
+ # @param id [Integer] Repull listing id — NOT a Booking.com hotel id. Resolved to a Booking.com hotel id via the workspace mapping.
742
745
  # @param [Hash] opts the optional parameters
746
+ # @option opts [String] :hotel_id Booking.com hotel id, when this listing is published under more than one property. Omit it and a read uses the oldest mapping (reporting the rest in &#x60;otherHotelIds&#x60;), while a write is refused with &#x60;409 ambiguous_booking_mapping&#x60; rather than guess. &#x60;GET /v1/channels/booking/properties&#x60; lists the valid ids.
743
747
  # @return [BookingRoomsRatesResponse]
744
748
  def list_booking_property_rooms(id, opts = {})
745
749
  data, _status_code, _headers = list_booking_property_rooms_with_http_info(id, opts)
@@ -747,9 +751,10 @@ module Repull
747
751
  end
748
752
 
749
753
  # List Booking.com rooms + rate-plan ids for a listing
750
- # Return every Booking.com room and its rate plans for a listing, each with the &#x60;roomId&#x60; / &#x60;rateId&#x60; needed to assemble a restriction write via &#x60;PUT /v1/channels/booking/availability&#x60;. &#x60;id&#x60; is a Vanio listing id — resolved to the Booking &#x60;hotel_id&#x60; via the workspace mapping (a listing with no active Booking.com mapping returns 404). Sourced from Booking&#39;s B.XML roomrates feed, which returns rooms and rate plans together (the rooms-unit feed alone omits rate-plan ids). This is the API-key surface for the room/rate ids that were previously only reachable inside the hosted Connect room-mapping flow. Returns &#x60;403 listing_inactive&#x60; when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
751
- # @param id [Integer] Vanio listing id — resolved to a Booking.com hotel id via the workspace mapping.
754
+ # Return every Booking.com room and its rate plans for a listing, each with the &#x60;roomId&#x60; / &#x60;rateId&#x60; needed to assemble a restriction write via &#x60;PUT /v1/channels/booking/availability&#x60;. &#x60;id&#x60; is a **Repull listing id**, not a Booking.com hotel id, despite the &#x60;properties&#x60; segment — resolved to the Booking &#x60;hotel_id&#x60; through the workspace mapping, read from wherever the Connect flow recorded it (&#x60;listings_booking_rooms&#x60; for anything mapped through &#x60;POST /v1/connect/booking/map-rooms&#x60;). A listing with no active Booking.com mapping returns 404, and the message says which id space the path takes. When the listing is published under several properties the oldest is used, the rest come back in &#x60;otherHotelIds&#x60;, and &#x60;?hotel_id&#x3D;&#x60; names a different one. Sourced from Booking&#39;s B.XML roomrates feed, which returns rooms and rate plans together (the rooms-unit feed alone omits rate-plan ids). This is the API-key surface for the room/rate ids that were previously only reachable inside the hosted Connect room-mapping flow. &#x60;source&#x60; says where the answer came from. &#x60;booking&#x60; means it was read live just now. If Booking.com returns nothing usable for the property, the rooms and rate plans recorded at the last import are served instead, &#x60;source&#x60; is &#x60;mirror&#x60;, and &#x60;mirrorReason&#x60; names what went wrong live — the ids are Booking.com&#39;s own and can be written against, but they can be stale, and &#x60;maxPersons&#x60;, &#x60;policy&#x60;, &#x60;policyId&#x60;, &#x60;pricingType&#x60; and &#x60;isChildRate&#x60; come back &#x60;null&#x60; because only the live feed states them. &#x60;rooms&#x60; is empty only when Booking.com and the last import both have nothing; a read that failed is an error, never an empty list. Each rate plan carries &#x60;maxPersons&#x60; — the party size that rate plan prices, which is the &#x60;occupancy&#x60; a rate amount must be written at. Each room carries &#x60;maxAdults&#x60;, Booking.com&#39;s capacity for the room, which is what a rate write falls back to when the rate plan states no &#x60;maxPersons&#x60;. Returns &#x60;403 listing_inactive&#x60; when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
755
+ # @param id [Integer] Repull listing id — NOT a Booking.com hotel id. Resolved to a Booking.com hotel id via the workspace mapping.
752
756
  # @param [Hash] opts the optional parameters
757
+ # @option opts [String] :hotel_id Booking.com hotel id, when this listing is published under more than one property. Omit it and a read uses the oldest mapping (reporting the rest in &#x60;otherHotelIds&#x60;), while a write is refused with &#x60;409 ambiguous_booking_mapping&#x60; rather than guess. &#x60;GET /v1/channels/booking/properties&#x60; lists the valid ids.
753
758
  # @return [Array<(BookingRoomsRatesResponse, Integer, Hash)>] BookingRoomsRatesResponse data, response status code and response headers
754
759
  def list_booking_property_rooms_with_http_info(id, opts = {})
755
760
  if @api_client.config.debugging
@@ -764,6 +769,7 @@ module Repull
764
769
 
765
770
  # query parameters
766
771
  query_params = opts[:query_params] || {}
772
+ query_params[:'hotel_id'] = opts[:'hotel_id'] if !opts[:'hotel_id'].nil?
767
773
 
768
774
  # header parameters
769
775
  header_params = opts[:header_params] || {}
@@ -1059,7 +1065,7 @@ module Repull
1059
1065
  end
1060
1066
 
1061
1067
  # Send Booking.com message
1062
- # Send a message in a Booking.com conversation as the host. Booking enforces content rules similar to Airbnb. `property_id` must be a Booking.com property connected to this workspace (`GET /v1/channels/booking/properties` lists them). Any other id — including one connected to a different workspace — returns `404 not_found`, the same answer as an id that does not exist. Returns `403 listing_inactive` when any listing mapped to the Booking.com property is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1068
+ # Send a text message in a Booking.com conversation as the host. Booking enforces content rules similar to Airbnb. **Text only.** To send photos, use `POST /v1/conversations/{id}/messages` with `attachments` (JPEG or PNG, up to 10 MB each, with message text) — it uploads the files to Booking.com and records them in the conversation. Passing `attachments`, `attachment_ids` or `mediaUrl` here returns `422 attachments_not_supported` and sends nothing. `property_id` must be a Booking.com property connected to this workspace (`GET /v1/channels/booking/properties` lists them). Any other id — including one connected to a different workspace — returns `404 not_found`, the same answer as an id that does not exist. Returns `403 listing_inactive` when any listing mapped to the Booking.com property is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1063
1069
  # @param send_booking_message_request [SendBookingMessageRequest]
1064
1070
  # @param [Hash] opts the optional parameters
1065
1071
  # @return [nil]
@@ -1069,7 +1075,7 @@ module Repull
1069
1075
  end
1070
1076
 
1071
1077
  # Send Booking.com message
1072
- # Send a message in a Booking.com conversation as the host. Booking enforces content rules similar to Airbnb. &#x60;property_id&#x60; must be a Booking.com property connected to this workspace (&#x60;GET /v1/channels/booking/properties&#x60; lists them). Any other id — including one connected to a different workspace — returns &#x60;404 not_found&#x60;, the same answer as an id that does not exist. Returns &#x60;403 listing_inactive&#x60; when any listing mapped to the Booking.com property is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1078
+ # Send a text message in a Booking.com conversation as the host. Booking enforces content rules similar to Airbnb. **Text only.** To send photos, use &#x60;POST /v1/conversations/{id}/messages&#x60; with &#x60;attachments&#x60; (JPEG or PNG, up to 10 MB each, with message text) — it uploads the files to Booking.com and records them in the conversation. Passing &#x60;attachments&#x60;, &#x60;attachment_ids&#x60; or &#x60;mediaUrl&#x60; here returns &#x60;422 attachments_not_supported&#x60; and sends nothing. &#x60;property_id&#x60; must be a Booking.com property connected to this workspace (&#x60;GET /v1/channels/booking/properties&#x60; lists them). Any other id — including one connected to a different workspace — returns &#x60;404 not_found&#x60;, the same answer as an id that does not exist. Returns &#x60;403 listing_inactive&#x60; when any listing mapped to the Booking.com property is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1073
1079
  # @param send_booking_message_request [SendBookingMessageRequest]
1074
1080
  # @param [Hash] opts the optional parameters
1075
1081
  # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
@@ -1127,20 +1133,20 @@ module Repull
1127
1133
  end
1128
1134
 
1129
1135
  # Update Booking.com rates/availability
1130
- # Push availability, rates, and the full restriction set to Booking.com. `type` selects the write path: - `rates` — nightly price + length-of-stay / arrival restrictions (min/max stay, closed-to-arrival, closed-to-departure, advance-reservation window). - `availability` — inventory (`availableRooms`), the dedicated stop-sell flag (`closed`), and the same restriction set. - `derived-pricing` — occupancy-derived pricing rules. Restrictions never leak across channels — this endpoint writes only to Booking.com. Errors from upstream surface as `booking_error`. `property_id` must be a Booking.com property connected to this workspace (`GET /v1/channels/booking/properties` lists them). Any other id — including one connected to a different workspace — returns `404 not_found`, the same answer as an id that does not exist. Returns `403 listing_inactive` when any listing mapped to the Booking.com property is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1136
+ # Write rates, availability and restrictions to a Booking.com property. `type` selects the write: - `rates` — nightly prices, plus any length-of-stay / arrival restrictions sent with them. - `availability` — inventory (`availableRooms`), the stop-sell flag (`closed`), and restrictions. Omit `availableRooms` and `closed` for a restriction-only write. - `derived-pricing` — occupancy-derived pricing rules. **Dates are inclusive at both ends.** `{ \"start\": \"2026-11-04\", \"end\": \"2026-11-04\" }` is exactly one night. **A rate amount needs an occupancy.** Booking.com stores the amount against the party size the rate plan prices: sent above that number it declines the price in silence, sent below it it answers 400. Send `occupancy`, or omit it and Repull resolves it from Booking.com's own data and echoes the value and its `source` back in `occupancy[]`. If it cannot be resolved the write is refused with `422` naming `updates[N].occupancy`. **Restrictions are sent in the same call, on their own wire.** A price and a minimum stay are two writes on Booking.com's side. Send them together and the response reports each separately: `price` and `restrictions` carry their own state, their own read-back, and — when refused — Booking.com's own reason. The top-level `applied` is `partial` when they disagree, so a price that landed is never reported as a failure. `minStay`, `maxStay`, `minStayArrival`, `maxStayArrival`, `closedToArrival` and `closedToDeparture` are written; `exactStayArrival`, `minAdvanceRes` and `maxAdvanceRes` are refused with `422 restriction_not_supported` because Booking.com's notification has no element for them — set those on the rate plan in the Extranet. Nothing you send is ever silently ignored. **Inventory is not part of a rate update.** `roomsToSell` on a `rates` update returns `422 inventory_not_in_rate_update`; send it as `type: \"availability\"` instead. **The response says what is known.** Booking.com acknowledges a write with no per-date status, so the nights are read back — prices and restrictions out of the same read: `applied` is `verified`, `mismatch`, `partial`, `rejected` or `unverified` (send `verify: false` to skip the read-back). A bare acknowledgement is never reported as \"all updates applied\". Booking.com stores a 1-night minimum as no minimum, so `minStay: 1` reads back as `0` and still counts as applied. Restrictions never leak across channels — this endpoint writes only to Booking.com. When Booking.com refuses a write outright, their own reason comes back as `422 booking_rejected` with `booking_ruid`; a genuine outage on their side is `502 booking_error`. `property_id` must be a Booking.com property connected to this workspace (`GET /v1/channels/booking/properties` lists them). Any other id — including one connected to a different workspace — returns `404 not_found`, the same answer as an id that does not exist. Returns `403 listing_inactive` when any listing mapped to the Booking.com property is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1131
1137
  # @param booking_availability_update_request [BookingAvailabilityUpdateRequest]
1132
1138
  # @param [Hash] opts the optional parameters
1133
- # @return [nil]
1139
+ # @return [BookingPricingUpdateResponse]
1134
1140
  def update_booking_availability(booking_availability_update_request, opts = {})
1135
- update_booking_availability_with_http_info(booking_availability_update_request, opts)
1136
- nil
1141
+ data, _status_code, _headers = update_booking_availability_with_http_info(booking_availability_update_request, opts)
1142
+ data
1137
1143
  end
1138
1144
 
1139
1145
  # Update Booking.com rates/availability
1140
- # Push availability, rates, and the full restriction set to Booking.com. &#x60;type&#x60; selects the write path: - &#x60;rates&#x60; — nightly price + length-of-stay / arrival restrictions (min/max stay, closed-to-arrival, closed-to-departure, advance-reservation window). - &#x60;availability&#x60; — inventory (&#x60;availableRooms&#x60;), the dedicated stop-sell flag (&#x60;closed&#x60;), and the same restriction set. - &#x60;derived-pricing&#x60; — occupancy-derived pricing rules. Restrictions never leak across channels — this endpoint writes only to Booking.com. Errors from upstream surface as &#x60;booking_error&#x60;. &#x60;property_id&#x60; must be a Booking.com property connected to this workspace (&#x60;GET /v1/channels/booking/properties&#x60; lists them). Any other id — including one connected to a different workspace — returns &#x60;404 not_found&#x60;, the same answer as an id that does not exist. Returns &#x60;403 listing_inactive&#x60; when any listing mapped to the Booking.com property is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1146
+ # Write rates, availability and restrictions to a Booking.com property. &#x60;type&#x60; selects the write: - &#x60;rates&#x60; — nightly prices, plus any length-of-stay / arrival restrictions sent with them. - &#x60;availability&#x60; — inventory (&#x60;availableRooms&#x60;), the stop-sell flag (&#x60;closed&#x60;), and restrictions. Omit &#x60;availableRooms&#x60; and &#x60;closed&#x60; for a restriction-only write. - &#x60;derived-pricing&#x60; — occupancy-derived pricing rules. **Dates are inclusive at both ends.** &#x60;{ \&quot;start\&quot;: \&quot;2026-11-04\&quot;, \&quot;end\&quot;: \&quot;2026-11-04\&quot; }&#x60; is exactly one night. **A rate amount needs an occupancy.** Booking.com stores the amount against the party size the rate plan prices: sent above that number it declines the price in silence, sent below it it answers 400. Send &#x60;occupancy&#x60;, or omit it and Repull resolves it from Booking.com&#39;s own data and echoes the value and its &#x60;source&#x60; back in &#x60;occupancy[]&#x60;. If it cannot be resolved the write is refused with &#x60;422&#x60; naming &#x60;updates[N].occupancy&#x60;. **Restrictions are sent in the same call, on their own wire.** A price and a minimum stay are two writes on Booking.com&#39;s side. Send them together and the response reports each separately: &#x60;price&#x60; and &#x60;restrictions&#x60; carry their own state, their own read-back, and — when refused — Booking.com&#39;s own reason. The top-level &#x60;applied&#x60; is &#x60;partial&#x60; when they disagree, so a price that landed is never reported as a failure. &#x60;minStay&#x60;, &#x60;maxStay&#x60;, &#x60;minStayArrival&#x60;, &#x60;maxStayArrival&#x60;, &#x60;closedToArrival&#x60; and &#x60;closedToDeparture&#x60; are written; &#x60;exactStayArrival&#x60;, &#x60;minAdvanceRes&#x60; and &#x60;maxAdvanceRes&#x60; are refused with &#x60;422 restriction_not_supported&#x60; because Booking.com&#39;s notification has no element for them — set those on the rate plan in the Extranet. Nothing you send is ever silently ignored. **Inventory is not part of a rate update.** &#x60;roomsToSell&#x60; on a &#x60;rates&#x60; update returns &#x60;422 inventory_not_in_rate_update&#x60;; send it as &#x60;type: \&quot;availability\&quot;&#x60; instead. **The response says what is known.** Booking.com acknowledges a write with no per-date status, so the nights are read back — prices and restrictions out of the same read: &#x60;applied&#x60; is &#x60;verified&#x60;, &#x60;mismatch&#x60;, &#x60;partial&#x60;, &#x60;rejected&#x60; or &#x60;unverified&#x60; (send &#x60;verify: false&#x60; to skip the read-back). A bare acknowledgement is never reported as \&quot;all updates applied\&quot;. Booking.com stores a 1-night minimum as no minimum, so &#x60;minStay: 1&#x60; reads back as &#x60;0&#x60; and still counts as applied. Restrictions never leak across channels — this endpoint writes only to Booking.com. When Booking.com refuses a write outright, their own reason comes back as &#x60;422 booking_rejected&#x60; with &#x60;booking_ruid&#x60;; a genuine outage on their side is &#x60;502 booking_error&#x60;. &#x60;property_id&#x60; must be a Booking.com property connected to this workspace (&#x60;GET /v1/channels/booking/properties&#x60; lists them). Any other id — including one connected to a different workspace — returns &#x60;404 not_found&#x60;, the same answer as an id that does not exist. Returns &#x60;403 listing_inactive&#x60; when any listing mapped to the Booking.com property is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1141
1147
  # @param booking_availability_update_request [BookingAvailabilityUpdateRequest]
1142
1148
  # @param [Hash] opts the optional parameters
1143
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
1149
+ # @return [Array<(BookingPricingUpdateResponse, Integer, Hash)>] BookingPricingUpdateResponse data, response status code and response headers
1144
1150
  def update_booking_availability_with_http_info(booking_availability_update_request, opts = {})
1145
1151
  if @api_client.config.debugging
1146
1152
  @api_client.config.logger.debug 'Calling API: BookingComApi.update_booking_availability ...'
@@ -1172,7 +1178,7 @@ module Repull
1172
1178
  post_body = opts[:debug_body] || @api_client.object_to_http_body(booking_availability_update_request)
1173
1179
 
1174
1180
  # return_type
1175
- return_type = opts[:debug_return_type]
1181
+ return_type = opts[:debug_return_type] || 'BookingPricingUpdateResponse'
1176
1182
 
1177
1183
  # auth_names
1178
1184
  auth_names = opts[:debug_auth_names] || ['bearerAuth']
@@ -1320,10 +1326,11 @@ module Repull
1320
1326
  end
1321
1327
 
1322
1328
  # Update Booking.com pricing for a listing
1323
- # Pushes one or more rate updates to Booking.com via `updateRates`. Each update needs `roomId` + `rateId` + `dateRange` + `price` + `currency`. Field-level validation runs up front so callers don't have to parse Booking's XML error envelope to discover a missing `roomId`. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1324
- # @param id [Integer]
1329
+ # Writes nightly prices for a listing's Booking.com room + rate plan. Each update needs `roomId` + `rateId` + `dateRange` + `price` + `currency`; `dateRange` is inclusive at both ends, so `start` equal to `end` writes exactly one night. **Occupancy.** Booking.com stores a rate amount against the party size the rate plan prices. Send `occupancy` and that is what is used; omit it and it is resolved from Booking.com's own data for that (room, rate plan) and echoed back in `occupancy[]` with its `source`. When it cannot be resolved the write is refused with `422` naming `updates[N].occupancy` — a price is never sent at a guessed party size, because Booking.com declines such an amount without saying so. **Inventory is a separate write.** `roomsToSell` on a rate update returns `422 inventory_not_in_rate_update`; use `PUT /v1/channels/booking/availability` with `type: \"availability\"`. **Restrictions ride along, on their own wire.** Send `restrictions` with the price and Booking.com receives two writes; the response reports each separately in `price` and `restrictions`, each with its own state, read-back and — when refused — Booking.com's own reason. `minStay`, `maxStay`, `minStayArrival`, `maxStayArrival`, `closedToArrival` and `closedToDeparture` are written; `exactStayArrival`, `minAdvanceRes` and `maxAdvanceRes` are refused with `422 restriction_not_supported` (Booking.com's notification has no element for them — set those on the rate plan in the Extranet). Nothing you send is silently ignored. **The response says what is known.** Booking.com acknowledges a write without per-date status, so the affected nights are read back — prices and restrictions out of the same read — and `applied` reports `verified`, `mismatch`, `partial`, `rejected` or `unverified`. `partial` means one half landed and the other did not, which is never reported as a total failure. Send `verify: false` to skip the read-back; `applied` is then `unverified`. Booking.com stores a 1-night minimum as no minimum, so `minStay: 1` reads back as `0` and still counts as applied. `id` is a Repull listing id. When it is published under several Booking.com properties this returns `409 ambiguous_booking_mapping` and pushes nothing — name the property with `?hotel_id=` instead. Returns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1330
+ # @param id [Integer] Repull listing id — NOT a Booking.com hotel id.
1325
1331
  # @param booking_pricing_update_request [BookingPricingUpdateRequest]
1326
1332
  # @param [Hash] opts the optional parameters
1333
+ # @option opts [String] :hotel_id Booking.com hotel id, when this listing is published under more than one property. Omit it and a read uses the oldest mapping (reporting the rest in &#x60;otherHotelIds&#x60;), while a write is refused with &#x60;409 ambiguous_booking_mapping&#x60; rather than guess. &#x60;GET /v1/channels/booking/properties&#x60; lists the valid ids.
1327
1334
  # @return [BookingPricingUpdateResponse]
1328
1335
  def update_booking_listing_pricing(id, booking_pricing_update_request, opts = {})
1329
1336
  data, _status_code, _headers = update_booking_listing_pricing_with_http_info(id, booking_pricing_update_request, opts)
@@ -1331,10 +1338,11 @@ module Repull
1331
1338
  end
1332
1339
 
1333
1340
  # Update Booking.com pricing for a listing
1334
- # Pushes one or more rate updates to Booking.com via &#x60;updateRates&#x60;. Each update needs &#x60;roomId&#x60; + &#x60;rateId&#x60; + &#x60;dateRange&#x60; + &#x60;price&#x60; + &#x60;currency&#x60;. Field-level validation runs up front so callers don&#39;t have to parse Booking&#39;s XML error envelope to discover a missing &#x60;roomId&#x60;. Returns &#x60;403 listing_inactive&#x60; when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1335
- # @param id [Integer]
1341
+ # Writes nightly prices for a listing&#39;s Booking.com room + rate plan. Each update needs &#x60;roomId&#x60; + &#x60;rateId&#x60; + &#x60;dateRange&#x60; + &#x60;price&#x60; + &#x60;currency&#x60;; &#x60;dateRange&#x60; is inclusive at both ends, so &#x60;start&#x60; equal to &#x60;end&#x60; writes exactly one night. **Occupancy.** Booking.com stores a rate amount against the party size the rate plan prices. Send &#x60;occupancy&#x60; and that is what is used; omit it and it is resolved from Booking.com&#39;s own data for that (room, rate plan) and echoed back in &#x60;occupancy[]&#x60; with its &#x60;source&#x60;. When it cannot be resolved the write is refused with &#x60;422&#x60; naming &#x60;updates[N].occupancy&#x60; — a price is never sent at a guessed party size, because Booking.com declines such an amount without saying so. **Inventory is a separate write.** &#x60;roomsToSell&#x60; on a rate update returns &#x60;422 inventory_not_in_rate_update&#x60;; use &#x60;PUT /v1/channels/booking/availability&#x60; with &#x60;type: \&quot;availability\&quot;&#x60;. **Restrictions ride along, on their own wire.** Send &#x60;restrictions&#x60; with the price and Booking.com receives two writes; the response reports each separately in &#x60;price&#x60; and &#x60;restrictions&#x60;, each with its own state, read-back and — when refused — Booking.com&#39;s own reason. &#x60;minStay&#x60;, &#x60;maxStay&#x60;, &#x60;minStayArrival&#x60;, &#x60;maxStayArrival&#x60;, &#x60;closedToArrival&#x60; and &#x60;closedToDeparture&#x60; are written; &#x60;exactStayArrival&#x60;, &#x60;minAdvanceRes&#x60; and &#x60;maxAdvanceRes&#x60; are refused with &#x60;422 restriction_not_supported&#x60; (Booking.com&#39;s notification has no element for them — set those on the rate plan in the Extranet). Nothing you send is silently ignored. **The response says what is known.** Booking.com acknowledges a write without per-date status, so the affected nights are read back — prices and restrictions out of the same read — and &#x60;applied&#x60; reports &#x60;verified&#x60;, &#x60;mismatch&#x60;, &#x60;partial&#x60;, &#x60;rejected&#x60; or &#x60;unverified&#x60;. &#x60;partial&#x60; means one half landed and the other did not, which is never reported as a total failure. Send &#x60;verify: false&#x60; to skip the read-back; &#x60;applied&#x60; is then &#x60;unverified&#x60;. Booking.com stores a 1-night minimum as no minimum, so &#x60;minStay: 1&#x60; reads back as &#x60;0&#x60; and still counts as applied. &#x60;id&#x60; is a Repull listing id. When it is published under several Booking.com properties this returns &#x60;409 ambiguous_booking_mapping&#x60; and pushes nothing — name the property with &#x60;?hotel_id&#x3D;&#x60; instead. Returns &#x60;403 listing_inactive&#x60; when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1342
+ # @param id [Integer] Repull listing id — NOT a Booking.com hotel id.
1336
1343
  # @param booking_pricing_update_request [BookingPricingUpdateRequest]
1337
1344
  # @param [Hash] opts the optional parameters
1345
+ # @option opts [String] :hotel_id Booking.com hotel id, when this listing is published under more than one property. Omit it and a read uses the oldest mapping (reporting the rest in &#x60;otherHotelIds&#x60;), while a write is refused with &#x60;409 ambiguous_booking_mapping&#x60; rather than guess. &#x60;GET /v1/channels/booking/properties&#x60; lists the valid ids.
1338
1346
  # @return [Array<(BookingPricingUpdateResponse, Integer, Hash)>] BookingPricingUpdateResponse data, response status code and response headers
1339
1347
  def update_booking_listing_pricing_with_http_info(id, booking_pricing_update_request, opts = {})
1340
1348
  if @api_client.config.debugging
@@ -1353,6 +1361,7 @@ module Repull
1353
1361
 
1354
1362
  # query parameters
1355
1363
  query_params = opts[:query_params] || {}
1364
+ query_params[:'hotel_id'] = opts[:'hotel_id'] if !opts[:'hotel_id'].nil?
1356
1365
 
1357
1366
  # header parameters
1358
1367
  header_params = opts[:header_params] || {}