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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be318dd74afc207e5e60ca45159d3912586e024694d86a0de472bcfa4be7a7ad
4
- data.tar.gz: 10dc4925b875275689d7a55b20690864326cdf219308088566588c63df46e843
3
+ metadata.gz: 175702d237d27f33b9679fba7983ccc079f32506c3c41db55d17a86cbddc8890
4
+ data.tar.gz: 4496a29f40b16219d780f5d43a80066dfd000fd6da894d02a678b3eb8b7821ef
5
5
  SHA512:
6
- metadata.gz: 2366c04f207ae0a36fb175ef3e2e0a9bb0cbe87ccf5493a3b791fd132134d2d0cb17dd01a24c25e5e3f72044ba734b08a957564396c56ad844cb5d250884710d
7
- data.tar.gz: 20f5e8a74eb5302f79608bb56e0bd1632259473f91561f442bb3181baa5c1d9b0a69f12a7263fec8e06912fe58090f465486349229e3ae1c60a46b880114150e
6
+ metadata.gz: 315b9b4c7a8f0c641b16d2f6d025eed5dba1206afd6a2d43be4f234ef1636eaafb5470a5e09d96d30cd2dea9a23a3db4f95b84486055d94ecb326bd3032ec279
7
+ data.tar.gz: 92116617f35df2bf5ee0961b8e1a623e072367cd737568a1b4ce6d98a32c32d40e1b4b393380b279be8957c31f636ccba1d7289ed63510ceff37f2fdc6449fea
@@ -93,7 +93,7 @@ module Repull
93
93
  # Apply a state action to a listing by id. The path `id` is the canonical Repull listing id. **Deactivating in Repull and unlisting on Airbnb are different operations.** `delete` is a **deactivate of the Repull record only** — it sets the listing inactive and KEEPS the row; it does NOT touch the Airbnb listing, which stays live and keeps taking bookings. Use it to exclude a listing from the API / trim back under the plan-listings cap; reactivate via `PATCH /v1/listings/{id}` with `{ \"active\": true }`. Idempotent. `unlist` calls Airbnb and **takes the live listing down**: it is deactivated with a valid deactivation reason and then READ BACK, so \"Airbnb accepted the call but the listing is still live\" is reported as a failure rather than a success. Requires `airbnbConnectionId` — a listing can be connected to more than one Airbnb listing, and taking down the wrong one is not undoable through this API. `relist` puts it back up (re-enables sync and makes the listing available again); it does not push content. `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. The result is per-section: see `AirbnbPublishResult`. Any other action (e.g. `pull`) returns a structured 422 naming the supported actions. Returns `403 listing_inactive` for `push`/`publish`/`unlist`/`relist` when the listing is inactive. `delete` (deactivation) is always accepted.
94
94
  # @param id [String]
95
95
  # @param [Hash] opts the optional parameters
96
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged `Idempotency-Status: cached` — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → `409 idempotency_key_in_use`. - Same key with a DIFFERENT payload → `422 idempotency_key_reused`. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status >= 500 are deliberately not stored, so a server error stays retryable.
96
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged `Idempotency-Status: cached` — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → `409 idempotency_key_in_use`. - Same key with a DIFFERENT payload → `422 idempotency_key_reused`. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status >= 500, `408`, `425` and `429`, and the refusals that happen before anything is done and tell you to fix something outside the request first — `connection_reauth_required`, `listing_inactive`, and the rate/daily limits. Every other answer, including a final refusal such as `422 airbnb_rejected`, is stored and replayed.
97
97
  # @option opts [AirbnbListingActionRequest] :airbnb_listing_action_request
98
98
  # @return [AirbnbListingAction200Response]
99
99
  def airbnb_listing_action(id, opts = {})
@@ -105,7 +105,7 @@ module Repull
105
105
  # Apply a state action to a listing by id. The path `id` is the canonical Repull listing id. **Deactivating in Repull and unlisting on Airbnb are different operations.** `delete` is a **deactivate of the Repull record only** — it sets the listing inactive and KEEPS the row; it does NOT touch the Airbnb listing, which stays live and keeps taking bookings. Use it to exclude a listing from the API / trim back under the plan-listings cap; reactivate via `PATCH /v1/listings/{id}` with `{ \"active\": true }`. Idempotent. `unlist` calls Airbnb and **takes the live listing down**: it is deactivated with a valid deactivation reason and then READ BACK, so \"Airbnb accepted the call but the listing is still live\" is reported as a failure rather than a success. Requires `airbnbConnectionId` — a listing can be connected to more than one Airbnb listing, and taking down the wrong one is not undoable through this API. `relist` puts it back up (re-enables sync and makes the listing available again); it does not push content. `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. The result is per-section: see `AirbnbPublishResult`. Any other action (e.g. `pull`) returns a structured 422 naming the supported actions. Returns `403 listing_inactive` for `push`/`publish`/`unlist`/`relist` when the listing is inactive. `delete` (deactivation) is always accepted.
106
106
  # @param id [String]
107
107
  # @param [Hash] opts the optional parameters
108
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged `Idempotency-Status: cached` — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → `409 idempotency_key_in_use`. - Same key with a DIFFERENT payload → `422 idempotency_key_reused`. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status >= 500 are deliberately not stored, so a server error stays retryable.
108
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged `Idempotency-Status: cached` — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → `409 idempotency_key_in_use`. - Same key with a DIFFERENT payload → `422 idempotency_key_reused`. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status >= 500, `408`, `425` and `429`, and the refusals that happen before anything is done and tell you to fix something outside the request first — `connection_reauth_required`, `listing_inactive`, and the rate/daily limits. Every other answer, including a final refusal such as `422 airbnb_rejected`, is stored and replayed.
109
109
  # @option opts [AirbnbListingActionRequest] :airbnb_listing_action_request
110
110
  # @return [Array<(AirbnbListingAction200Response, Integer, Hash)>] AirbnbListingAction200Response data, response status code and response headers
111
111
  def airbnb_listing_action_with_http_info(id, opts = {})
@@ -166,22 +166,26 @@ module Repull
166
166
  return data, status_code, headers
167
167
  end
168
168
 
169
- # Accept/decline/cancel Airbnb reservation
170
- # Apply a state action to an Airbnb reservation — `accept` / `decline` (for inquiries and reservation requests), `cancel` (host cancellation, carries penalties), `pre-approve` (for inquiries). Returns `403 listing_inactive` when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
171
- # @param code [String]
169
+ # Accept, decline or cancel an Airbnb reservation
170
+ # Act on an Airbnb reservation by its Airbnb confirmation code. **Write-side** calls Airbnb upstream, as the Airbnb account that owns the booking. - `accept` accept a pending booking request. - `decline` — decline a pending booking request. Requires `reason` (one of Airbnb's decline reasons) and `message` (sent to the guest, at most 500 characters). - `cancel` — cancel a confirmed booking as the host. Requires `reason` (one of Airbnb's host-cancellation reasons). **Host cancellations carry Airbnb penalties.** The body is validated before anything reaches Airbnb; unknown fields are refused. There is no `pre-approve` action: a pre-approval answers an inquiry, which has no confirmation code — use `POST /v1/conversations/{id}/pre-approval`. For accept/decline, `POST /v1/reservations/{id}/accept` and `/decline` do the same by Repull id and also update Vanio. Airbnb refusals are mapped rather than returned as a 500: a request that already moved on is `409 request_no_longer_pending` (do not retry), an expired one `409 request_expired`, any other refusal `422 airbnb_rejected` with Airbnb's reason. Returns `403 listing_inactive` when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated. Send `Idempotency-Key` to make a retry safe.
171
+ # @param code [String] Airbnb confirmation code, e.g. &#x60;HM9J2MFR3W&#x60;.
172
+ # @param airbnb_reservation_action_request [AirbnbReservationActionRequest]
172
173
  # @param [Hash] opts the optional parameters
173
- # @return [nil]
174
- def airbnb_reservation_action(code, opts = {})
175
- airbnb_reservation_action_with_http_info(code, opts)
176
- nil
174
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
175
+ # @return [AirbnbReservationAction200Response]
176
+ def airbnb_reservation_action(code, airbnb_reservation_action_request, opts = {})
177
+ data, _status_code, _headers = airbnb_reservation_action_with_http_info(code, airbnb_reservation_action_request, opts)
178
+ data
177
179
  end
178
180
 
179
- # Accept/decline/cancel Airbnb reservation
180
- # Apply a state action to an Airbnb reservation — &#x60;accept&#x60; / &#x60;decline&#x60; (for inquiries and reservation requests), &#x60;cancel&#x60; (host cancellation, carries penalties), &#x60;pre-approve&#x60; (for inquiries). Returns &#x60;403 listing_inactive&#x60; when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
181
- # @param code [String]
181
+ # Accept, decline or cancel an Airbnb reservation
182
+ # Act on an Airbnb reservation by its Airbnb confirmation code. **Write-side** calls Airbnb upstream, as the Airbnb account that owns the booking. - &#x60;accept&#x60; accept a pending booking request. - &#x60;decline&#x60; — decline a pending booking request. Requires &#x60;reason&#x60; (one of Airbnb&#39;s decline reasons) and &#x60;message&#x60; (sent to the guest, at most 500 characters). - &#x60;cancel&#x60; — cancel a confirmed booking as the host. Requires &#x60;reason&#x60; (one of Airbnb&#39;s host-cancellation reasons). **Host cancellations carry Airbnb penalties.** The body is validated before anything reaches Airbnb; unknown fields are refused. There is no &#x60;pre-approve&#x60; action: a pre-approval answers an inquiry, which has no confirmation code — use &#x60;POST /v1/conversations/{id}/pre-approval&#x60;. For accept/decline, &#x60;POST /v1/reservations/{id}/accept&#x60; and &#x60;/decline&#x60; do the same by Repull id and also update Vanio. Airbnb refusals are mapped rather than returned as a 500: a request that already moved on is &#x60;409 request_no_longer_pending&#x60; (do not retry), an expired one &#x60;409 request_expired&#x60;, any other refusal &#x60;422 airbnb_rejected&#x60; with Airbnb&#39;s reason. Returns &#x60;403 listing_inactive&#x60; when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated. Send &#x60;Idempotency-Key&#x60; to make a retry safe.
183
+ # @param code [String] Airbnb confirmation code, e.g. &#x60;HM9J2MFR3W&#x60;.
184
+ # @param airbnb_reservation_action_request [AirbnbReservationActionRequest]
182
185
  # @param [Hash] opts the optional parameters
183
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
184
- def airbnb_reservation_action_with_http_info(code, opts = {})
186
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
187
+ # @return [Array<(AirbnbReservationAction200Response, Integer, Hash)>] AirbnbReservationAction200Response data, response status code and response headers
188
+ def airbnb_reservation_action_with_http_info(code, airbnb_reservation_action_request, opts = {})
185
189
  if @api_client.config.debugging
186
190
  @api_client.config.logger.debug 'Calling API: AirbnbApi.airbnb_reservation_action ...'
187
191
  end
@@ -189,6 +193,14 @@ module Repull
189
193
  if @api_client.config.client_side_validation && code.nil?
190
194
  fail ArgumentError, "Missing the required parameter 'code' when calling AirbnbApi.airbnb_reservation_action"
191
195
  end
196
+ # verify the required parameter 'airbnb_reservation_action_request' is set
197
+ if @api_client.config.client_side_validation && airbnb_reservation_action_request.nil?
198
+ fail ArgumentError, "Missing the required parameter 'airbnb_reservation_action_request' when calling AirbnbApi.airbnb_reservation_action"
199
+ end
200
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
201
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling AirbnbApi.airbnb_reservation_action, the character length must be smaller than or equal to 255.'
202
+ end
203
+
192
204
  # resource path
193
205
  local_var_path = '/v1/channels/airbnb/reservations/{code}'.sub('{code}', CGI.escape(code.to_s))
194
206
 
@@ -199,15 +211,21 @@ module Repull
199
211
  header_params = opts[:header_params] || {}
200
212
  # HTTP header 'Accept' (if needed)
201
213
  header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
214
+ # HTTP header 'Content-Type'
215
+ content_type = @api_client.select_header_content_type(['application/json'])
216
+ if !content_type.nil?
217
+ header_params['Content-Type'] = content_type
218
+ end
219
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
202
220
 
203
221
  # form parameters
204
222
  form_params = opts[:form_params] || {}
205
223
 
206
224
  # http body (model)
207
- post_body = opts[:debug_body]
225
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(airbnb_reservation_action_request)
208
226
 
209
227
  # return_type
210
- return_type = opts[:debug_return_type]
228
+ return_type = opts[:debug_return_type] || 'AirbnbReservationAction200Response'
211
229
 
212
230
  # auth_names
213
231
  auth_names = opts[:debug_auth_names] || ['bearerAuth']
@@ -442,20 +460,22 @@ module Repull
442
460
  end
443
461
 
444
462
  # Create Airbnb special offer or pre-approval
445
- # Create a special offer or a pre-approval on Airbnb. **Write-side** — calls Airbnb upstream. The `type` discriminator selects the flavour: - `offer` — a special offer with custom terms (the remaining body fields are the offer params). - `preapproval` pre-approve an inquiry thread (requires `threadId`; optional `blockInstantBooking`). Requires a connected Airbnb host, else `404 no_connection`. Returns `403 listing_inactive` when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
463
+ # Create a pre-approval or a special offer on an Airbnb thread, addressed by **Airbnb** ids. **Write-side** — calls Airbnb upstream. The Repull-id equivalents, which also update the inquiry in Vanio, are `POST /v1/conversations/{id}/pre-approval` and `POST /v1/conversations/{id}/special-offers` — prefer those unless you only hold Airbnb ids. - `type: \"preapproval\"` — let the guest book the dates and price they asked about. Requires `thread_id`; optional `block_instant_booking`. - `type: \"offer\"` your own terms. Requires `thread_id`, `listing_id` (the **Airbnb** listing id, as a string), `start_date`, `nights`, `total_price` (whole stay, listing currency) and `guest_details` with `number_of_guests` (or `number_of_adults`; Airbnb counts adults + children). The body is validated before anything reaches Airbnb (a `422 invalid_params` names the field), and unknown fields are refused. The legacy spellings `threadId` and `blockInstantBooking` still work. The request is sent as the Airbnb account that owns the thread or listing. Airbnb refusals are mapped rather than returned as a 500: `409 inquiry_no_longer_open` / `inquiry_expired` when the inquiry moved on, `422 airbnb_rejected` with Airbnb’s reason otherwise, `403 connection_reauth_required` when the grant does not allow it. Returns `403 listing_inactive` when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated. Send `Idempotency-Key`: a repeat with the same key replays the first response instead of acting twice (a `409 idempotency_key_in_use` while the first is still running). A 5xx, a `429 airbnb_rate_limited` or a `403 connection_reauth_required` is not stored — nothing was done — so retrying with the same key reaches Airbnb again.
446
464
  # @param create_airbnb_offer_request [CreateAirbnbOfferRequest]
447
465
  # @param [Hash] opts the optional parameters
448
- # @return [nil]
466
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
467
+ # @return [GetAirbnbOffer200Response]
449
468
  def create_airbnb_offer(create_airbnb_offer_request, opts = {})
450
- create_airbnb_offer_with_http_info(create_airbnb_offer_request, opts)
451
- nil
469
+ data, _status_code, _headers = create_airbnb_offer_with_http_info(create_airbnb_offer_request, opts)
470
+ data
452
471
  end
453
472
 
454
473
  # Create Airbnb special offer or pre-approval
455
- # Create a special offer or a pre-approval on Airbnb. **Write-side** — calls Airbnb upstream. The &#x60;type&#x60; discriminator selects the flavour: - &#x60;offer&#x60; — a special offer with custom terms (the remaining body fields are the offer params). - &#x60;preapproval&#x60; pre-approve an inquiry thread (requires &#x60;threadId&#x60;; optional &#x60;blockInstantBooking&#x60;). Requires a connected Airbnb host, else &#x60;404 no_connection&#x60;. Returns &#x60;403 listing_inactive&#x60; when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
474
+ # Create a pre-approval or a special offer on an Airbnb thread, addressed by **Airbnb** ids. **Write-side** — calls Airbnb upstream. The Repull-id equivalents, which also update the inquiry in Vanio, are &#x60;POST /v1/conversations/{id}/pre-approval&#x60; and &#x60;POST /v1/conversations/{id}/special-offers&#x60; — prefer those unless you only hold Airbnb ids. - &#x60;type: \&quot;preapproval\&quot;&#x60; — let the guest book the dates and price they asked about. Requires &#x60;thread_id&#x60;; optional &#x60;block_instant_booking&#x60;. - &#x60;type: \&quot;offer\&quot;&#x60; your own terms. Requires &#x60;thread_id&#x60;, &#x60;listing_id&#x60; (the **Airbnb** listing id, as a string), &#x60;start_date&#x60;, &#x60;nights&#x60;, &#x60;total_price&#x60; (whole stay, listing currency) and &#x60;guest_details&#x60; with &#x60;number_of_guests&#x60; (or &#x60;number_of_adults&#x60;; Airbnb counts adults + children). The body is validated before anything reaches Airbnb (a &#x60;422 invalid_params&#x60; names the field), and unknown fields are refused. The legacy spellings &#x60;threadId&#x60; and &#x60;blockInstantBooking&#x60; still work. The request is sent as the Airbnb account that owns the thread or listing. Airbnb refusals are mapped rather than returned as a 500: &#x60;409 inquiry_no_longer_open&#x60; / &#x60;inquiry_expired&#x60; when the inquiry moved on, &#x60;422 airbnb_rejected&#x60; with Airbnb’s reason otherwise, &#x60;403 connection_reauth_required&#x60; when the grant does not allow it. Returns &#x60;403 listing_inactive&#x60; when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated. Send &#x60;Idempotency-Key&#x60;: a repeat with the same key replays the first response instead of acting twice (a &#x60;409 idempotency_key_in_use&#x60; while the first is still running). A 5xx, a &#x60;429 airbnb_rate_limited&#x60; or a &#x60;403 connection_reauth_required&#x60; is not stored — nothing was done — so retrying with the same key reaches Airbnb again.
456
475
  # @param create_airbnb_offer_request [CreateAirbnbOfferRequest]
457
476
  # @param [Hash] opts the optional parameters
458
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
477
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
478
+ # @return [Array<(GetAirbnbOffer200Response, Integer, Hash)>] GetAirbnbOffer200Response data, response status code and response headers
459
479
  def create_airbnb_offer_with_http_info(create_airbnb_offer_request, opts = {})
460
480
  if @api_client.config.debugging
461
481
  @api_client.config.logger.debug 'Calling API: AirbnbApi.create_airbnb_offer ...'
@@ -464,6 +484,10 @@ module Repull
464
484
  if @api_client.config.client_side_validation && create_airbnb_offer_request.nil?
465
485
  fail ArgumentError, "Missing the required parameter 'create_airbnb_offer_request' when calling AirbnbApi.create_airbnb_offer"
466
486
  end
487
+ if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
488
+ fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling AirbnbApi.create_airbnb_offer, the character length must be smaller than or equal to 255.'
489
+ end
490
+
467
491
  # resource path
468
492
  local_var_path = '/v1/channels/airbnb/offers'
469
493
 
@@ -479,6 +503,7 @@ module Repull
479
503
  if !content_type.nil?
480
504
  header_params['Content-Type'] = content_type
481
505
  end
506
+ header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
482
507
 
483
508
  # form parameters
484
509
  form_params = opts[:form_params] || {}
@@ -487,7 +512,7 @@ module Repull
487
512
  post_body = opts[:debug_body] || @api_client.object_to_http_body(create_airbnb_offer_request)
488
513
 
489
514
  # return_type
490
- return_type = opts[:debug_return_type]
515
+ return_type = opts[:debug_return_type] || 'GetAirbnbOffer200Response'
491
516
 
492
517
  # auth_names
493
518
  auth_names = opts[:debug_auth_names] || ['bearerAuth']
@@ -1500,6 +1525,70 @@ module Repull
1500
1525
  return data, status_code, headers
1501
1526
  end
1502
1527
 
1528
+ # Get Airbnb special offer
1529
+ # Read a pre-approval or special offer from Airbnb by its Airbnb id. **Live read** — calls Airbnb upstream. Pass the id as `?offerId=`. The Repull-id equivalent is `GET /v1/conversations/{id}/special-offers/{offerId}`, which also confirms the offer belongs to that conversation.
1530
+ # @param offer_id [String] Airbnb special-offer id (the &#x60;id&#x60; Airbnb returned when the offer was created).
1531
+ # @param [Hash] opts the optional parameters
1532
+ # @return [GetAirbnbOffer200Response]
1533
+ def get_airbnb_offer(offer_id, opts = {})
1534
+ data, _status_code, _headers = get_airbnb_offer_with_http_info(offer_id, opts)
1535
+ data
1536
+ end
1537
+
1538
+ # Get Airbnb special offer
1539
+ # Read a pre-approval or special offer from Airbnb by its Airbnb id. **Live read** — calls Airbnb upstream. Pass the id as &#x60;?offerId&#x3D;&#x60;. The Repull-id equivalent is &#x60;GET /v1/conversations/{id}/special-offers/{offerId}&#x60;, which also confirms the offer belongs to that conversation.
1540
+ # @param offer_id [String] Airbnb special-offer id (the &#x60;id&#x60; Airbnb returned when the offer was created).
1541
+ # @param [Hash] opts the optional parameters
1542
+ # @return [Array<(GetAirbnbOffer200Response, Integer, Hash)>] GetAirbnbOffer200Response data, response status code and response headers
1543
+ def get_airbnb_offer_with_http_info(offer_id, opts = {})
1544
+ if @api_client.config.debugging
1545
+ @api_client.config.logger.debug 'Calling API: AirbnbApi.get_airbnb_offer ...'
1546
+ end
1547
+ # verify the required parameter 'offer_id' is set
1548
+ if @api_client.config.client_side_validation && offer_id.nil?
1549
+ fail ArgumentError, "Missing the required parameter 'offer_id' when calling AirbnbApi.get_airbnb_offer"
1550
+ end
1551
+ # resource path
1552
+ local_var_path = '/v1/channels/airbnb/offers'
1553
+
1554
+ # query parameters
1555
+ query_params = opts[:query_params] || {}
1556
+ query_params[:'offerId'] = offer_id
1557
+
1558
+ # header parameters
1559
+ header_params = opts[:header_params] || {}
1560
+ # HTTP header 'Accept' (if needed)
1561
+ header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
1562
+
1563
+ # form parameters
1564
+ form_params = opts[:form_params] || {}
1565
+
1566
+ # http body (model)
1567
+ post_body = opts[:debug_body]
1568
+
1569
+ # return_type
1570
+ return_type = opts[:debug_return_type] || 'GetAirbnbOffer200Response'
1571
+
1572
+ # auth_names
1573
+ auth_names = opts[:debug_auth_names] || ['bearerAuth']
1574
+
1575
+ new_options = opts.merge(
1576
+ :operation => :"AirbnbApi.get_airbnb_offer",
1577
+ :header_params => header_params,
1578
+ :query_params => query_params,
1579
+ :form_params => form_params,
1580
+ :body => post_body,
1581
+ :auth_names => auth_names,
1582
+ :return_type => return_type
1583
+ )
1584
+
1585
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
1586
+ if @api_client.config.debugging
1587
+ @api_client.config.logger.debug "API called: AirbnbApi#get_airbnb_offer\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
1588
+ end
1589
+ return data, status_code, headers
1590
+ end
1591
+
1503
1592
  # Get Airbnb reservation
1504
1593
  # Fetch a single Airbnb reservation by Airbnb confirmation code (e.g. `HMABCDEF12`). Returns `403 listing_inactive` when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
1505
1594
  # @param code [String]
@@ -2315,20 +2404,24 @@ module Repull
2315
2404
  end
2316
2405
 
2317
2406
  # Get Airbnb messages
2318
- # Fetch the full message log for an Airbnb thread, ordered oldest-to-newest. Walk pages with `?cursor=` until `pagination.hasMore` is `false`. Returns `403 listing_inactive` when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
2407
+ # Messages stored for an Airbnb thread, as recorded rows (not the unified `Message` shape — use `GET /v1/conversations/{id}/messages` for that). By default returns 50 per page, newest first; walk older pages with `?cursor=` (the `pagination.nextCursor` of the previous page) until `pagination.hasMore` is `false`. `?all=true` returns up to 1000 rows oldest-first in one response, with no `pagination`. Each row carries `attachments` — photos and other files on that message, inbound or outbound — in the same shape as the unified endpoint. Returns `403 listing_inactive` when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
2319
2408
  # @param thread_id [String]
2320
2409
  # @param [Hash] opts the optional parameters
2321
- # @return [MessageListResponse]
2410
+ # @option opts [String] :cursor &#x60;pagination.nextCursor&#x60; from the previous page.
2411
+ # @option opts [Boolean] :all &#x60;true&#x60; returns up to 1000 messages oldest-first in one response, without &#x60;pagination&#x60;.
2412
+ # @return [ListAirbnbThreadMessages200Response]
2322
2413
  def list_airbnb_thread_messages(thread_id, opts = {})
2323
2414
  data, _status_code, _headers = list_airbnb_thread_messages_with_http_info(thread_id, opts)
2324
2415
  data
2325
2416
  end
2326
2417
 
2327
2418
  # Get Airbnb messages
2328
- # Fetch the full message log for an Airbnb thread, ordered oldest-to-newest. Walk pages with &#x60;?cursor&#x3D;&#x60; until &#x60;pagination.hasMore&#x60; is &#x60;false&#x60;. Returns &#x60;403 listing_inactive&#x60; when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
2419
+ # Messages stored for an Airbnb thread, as recorded rows (not the unified &#x60;Message&#x60; shape — use &#x60;GET /v1/conversations/{id}/messages&#x60; for that). By default returns 50 per page, newest first; walk older pages with &#x60;?cursor&#x3D;&#x60; (the &#x60;pagination.nextCursor&#x60; of the previous page) until &#x60;pagination.hasMore&#x60; is &#x60;false&#x60;. &#x60;?all&#x3D;true&#x60; returns up to 1000 rows oldest-first in one response, with no &#x60;pagination&#x60;. Each row carries &#x60;attachments&#x60; — photos and other files on that message, inbound or outbound — in the same shape as the unified endpoint. Returns &#x60;403 listing_inactive&#x60; when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
2329
2420
  # @param thread_id [String]
2330
2421
  # @param [Hash] opts the optional parameters
2331
- # @return [Array<(MessageListResponse, Integer, Hash)>] MessageListResponse data, response status code and response headers
2422
+ # @option opts [String] :cursor &#x60;pagination.nextCursor&#x60; from the previous page.
2423
+ # @option opts [Boolean] :all &#x60;true&#x60; returns up to 1000 messages oldest-first in one response, without &#x60;pagination&#x60;.
2424
+ # @return [Array<(ListAirbnbThreadMessages200Response, Integer, Hash)>] ListAirbnbThreadMessages200Response data, response status code and response headers
2332
2425
  def list_airbnb_thread_messages_with_http_info(thread_id, opts = {})
2333
2426
  if @api_client.config.debugging
2334
2427
  @api_client.config.logger.debug 'Calling API: AirbnbApi.list_airbnb_thread_messages ...'
@@ -2342,6 +2435,8 @@ module Repull
2342
2435
 
2343
2436
  # query parameters
2344
2437
  query_params = opts[:query_params] || {}
2438
+ query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
2439
+ query_params[:'all'] = opts[:'all'] if !opts[:'all'].nil?
2345
2440
 
2346
2441
  # header parameters
2347
2442
  header_params = opts[:header_params] || {}
@@ -2355,7 +2450,7 @@ module Repull
2355
2450
  post_body = opts[:debug_body]
2356
2451
 
2357
2452
  # return_type
2358
- return_type = opts[:debug_return_type] || 'MessageListResponse'
2453
+ return_type = opts[:debug_return_type] || 'ListAirbnbThreadMessages200Response'
2359
2454
 
2360
2455
  # auth_names
2361
2456
  auth_names = opts[:debug_auth_names] || ['bearerAuth']
@@ -2771,22 +2866,22 @@ module Repull
2771
2866
  end
2772
2867
 
2773
2868
  # Send Airbnb message
2774
- # Send a message in an Airbnb thread as the host. Airbnb enforces content rules (no off-platform contact info, no external URLs) — violating messages are rejected upstream and surface as `airbnb_error`. The `{threadId}` is the Airbnb thread id — the `externalThreadId` field on a unified `Conversation` (`GET /v1/conversations`). Returns `403 listing_inactive` when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
2869
+ # Send a message in an Airbnb thread as the host. Airbnb enforces content rules (no off-platform contact info, no external URLs) — violating messages are rejected upstream and surface as `airbnb_error`. ### Sending a photo or video (`mediaUrl`) Airbnb only accepts media uploaded to a signed URL it issues, one file per message and no text on the same message. With `mediaUrl`, Repull downloads the file (public `https://` only, 10 MB max), reads its real type from the bytes (JPEG, PNG, GIF, WebP — converted to JPEG — or MP4/QuickTime), uploads it to Airbnb and sends it; `message`, if given, follows as a separate message. This is the same flow as `POST /v1/conversations/{id}/messages` with `attachments` — prefer that endpoint, which also takes several files per request. The response is a `SendMessageResponse`, the send is recorded in the conversation, and failures are the 422 codes documented there (`attachment_type_not_supported`, `attachment_too_large`, `message_not_sent` for a pre-booking thread, …). The thread must already be synced to Repull (`GET /v1/conversations` lists them), otherwise `404`. Text-only sends (no `mediaUrl`) go straight to Airbnb and return Airbnb's message object. The `{threadId}` is the Airbnb thread id — the `externalThreadId` field on a unified `Conversation` (`GET /v1/conversations`). Returns `403 listing_inactive` when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
2775
2870
  # @param thread_id [String] Airbnb thread id (the &#x60;externalThreadId&#x60; on a unified &#x60;Conversation&#x60;).
2776
2871
  # @param send_airbnb_message_request [SendAirbnbMessageRequest]
2777
2872
  # @param [Hash] opts the optional parameters
2778
- # @return [nil]
2873
+ # @return [SendAirbnbMessage201Response]
2779
2874
  def send_airbnb_message(thread_id, send_airbnb_message_request, opts = {})
2780
- send_airbnb_message_with_http_info(thread_id, send_airbnb_message_request, opts)
2781
- nil
2875
+ data, _status_code, _headers = send_airbnb_message_with_http_info(thread_id, send_airbnb_message_request, opts)
2876
+ data
2782
2877
  end
2783
2878
 
2784
2879
  # Send Airbnb message
2785
- # Send a message in an Airbnb thread as the host. Airbnb enforces content rules (no off-platform contact info, no external URLs) — violating messages are rejected upstream and surface as &#x60;airbnb_error&#x60;. The &#x60;{threadId}&#x60; is the Airbnb thread id — the &#x60;externalThreadId&#x60; field on a unified &#x60;Conversation&#x60; (&#x60;GET /v1/conversations&#x60;). Returns &#x60;403 listing_inactive&#x60; when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
2880
+ # Send a message in an Airbnb thread as the host. Airbnb enforces content rules (no off-platform contact info, no external URLs) — violating messages are rejected upstream and surface as &#x60;airbnb_error&#x60;. ### Sending a photo or video (&#x60;mediaUrl&#x60;) Airbnb only accepts media uploaded to a signed URL it issues, one file per message and no text on the same message. With &#x60;mediaUrl&#x60;, Repull downloads the file (public &#x60;https://&#x60; only, 10 MB max), reads its real type from the bytes (JPEG, PNG, GIF, WebP — converted to JPEG — or MP4/QuickTime), uploads it to Airbnb and sends it; &#x60;message&#x60;, if given, follows as a separate message. This is the same flow as &#x60;POST /v1/conversations/{id}/messages&#x60; with &#x60;attachments&#x60; — prefer that endpoint, which also takes several files per request. The response is a &#x60;SendMessageResponse&#x60;, the send is recorded in the conversation, and failures are the 422 codes documented there (&#x60;attachment_type_not_supported&#x60;, &#x60;attachment_too_large&#x60;, &#x60;message_not_sent&#x60; for a pre-booking thread, …). The thread must already be synced to Repull (&#x60;GET /v1/conversations&#x60; lists them), otherwise &#x60;404&#x60;. Text-only sends (no &#x60;mediaUrl&#x60;) go straight to Airbnb and return Airbnb&#39;s message object. The &#x60;{threadId}&#x60; is the Airbnb thread id — the &#x60;externalThreadId&#x60; field on a unified &#x60;Conversation&#x60; (&#x60;GET /v1/conversations&#x60;). Returns &#x60;403 listing_inactive&#x60; when the listing this resolves to is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.
2786
2881
  # @param thread_id [String] Airbnb thread id (the &#x60;externalThreadId&#x60; on a unified &#x60;Conversation&#x60;).
2787
2882
  # @param send_airbnb_message_request [SendAirbnbMessageRequest]
2788
2883
  # @param [Hash] opts the optional parameters
2789
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
2884
+ # @return [Array<(SendAirbnbMessage201Response, Integer, Hash)>] SendAirbnbMessage201Response data, response status code and response headers
2790
2885
  def send_airbnb_message_with_http_info(thread_id, send_airbnb_message_request, opts = {})
2791
2886
  if @api_client.config.debugging
2792
2887
  @api_client.config.logger.debug 'Calling API: AirbnbApi.send_airbnb_message ...'
@@ -2822,7 +2917,7 @@ module Repull
2822
2917
  post_body = opts[:debug_body] || @api_client.object_to_http_body(send_airbnb_message_request)
2823
2918
 
2824
2919
  # return_type
2825
- return_type = opts[:debug_return_type]
2920
+ return_type = opts[:debug_return_type] || 'SendAirbnbMessage201Response'
2826
2921
 
2827
2922
  # auth_names
2828
2923
  auth_names = opts[:debug_auth_names] || ['bearerAuth']
@@ -3275,7 +3370,7 @@ module Repull
3275
3370
  # @param id [String] Repull listing id (numeric string).
3276
3371
  # @param airbnb_description_write_request [AirbnbDescriptionWriteRequest]
3277
3372
  # @param [Hash] opts the optional parameters
3278
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status &gt;&#x3D; 500 are deliberately not stored, so a server error stays retryable.
3373
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
3279
3374
  # @return [AirbnbContentWriteResponse]
3280
3375
  def update_airbnb_listing_description(id, airbnb_description_write_request, opts = {})
3281
3376
  data, _status_code, _headers = update_airbnb_listing_description_with_http_info(id, airbnb_description_write_request, opts)
@@ -3287,7 +3382,7 @@ module Repull
3287
3382
  # @param id [String] Repull listing id (numeric string).
3288
3383
  # @param airbnb_description_write_request [AirbnbDescriptionWriteRequest]
3289
3384
  # @param [Hash] opts the optional parameters
3290
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status &gt;&#x3D; 500 are deliberately not stored, so a server error stays retryable.
3385
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
3291
3386
  # @return [Array<(AirbnbContentWriteResponse, Integer, Hash)>] AirbnbContentWriteResponse data, response status code and response headers
3292
3387
  def update_airbnb_listing_description_with_http_info(id, airbnb_description_write_request, opts = {})
3293
3388
  if @api_client.config.debugging
@@ -3356,7 +3451,7 @@ module Repull
3356
3451
  # @param id [String] Repull listing id (numeric string).
3357
3452
  # @param airbnb_listing_details_write_request [AirbnbListingDetailsWriteRequest]
3358
3453
  # @param [Hash] opts the optional parameters
3359
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status &gt;&#x3D; 500 are deliberately not stored, so a server error stays retryable.
3454
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
3360
3455
  # @return [AirbnbContentWriteResponse]
3361
3456
  def update_airbnb_listing_details(id, airbnb_listing_details_write_request, opts = {})
3362
3457
  data, _status_code, _headers = update_airbnb_listing_details_with_http_info(id, airbnb_listing_details_write_request, opts)
@@ -3368,7 +3463,7 @@ module Repull
3368
3463
  # @param id [String] Repull listing id (numeric string).
3369
3464
  # @param airbnb_listing_details_write_request [AirbnbListingDetailsWriteRequest]
3370
3465
  # @param [Hash] opts the optional parameters
3371
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status &gt;&#x3D; 500 are deliberately not stored, so a server error stays retryable.
3466
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
3372
3467
  # @return [Array<(AirbnbContentWriteResponse, Integer, Hash)>] AirbnbContentWriteResponse data, response status code and response headers
3373
3468
  def update_airbnb_listing_details_with_http_info(id, airbnb_listing_details_write_request, opts = {})
3374
3469
  if @api_client.config.debugging
@@ -3437,7 +3532,7 @@ module Repull
3437
3532
  # @param id [String] Repull listing id (numeric string).
3438
3533
  # @param airbnb_permits_write_request [AirbnbPermitsWriteRequest]
3439
3534
  # @param [Hash] opts the optional parameters
3440
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status &gt;&#x3D; 500 are deliberately not stored, so a server error stays retryable.
3535
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
3441
3536
  # @return [UpdateAirbnbListingPermits200Response]
3442
3537
  def update_airbnb_listing_permits(id, airbnb_permits_write_request, opts = {})
3443
3538
  data, _status_code, _headers = update_airbnb_listing_permits_with_http_info(id, airbnb_permits_write_request, opts)
@@ -3449,7 +3544,7 @@ module Repull
3449
3544
  # @param id [String] Repull listing id (numeric string).
3450
3545
  # @param airbnb_permits_write_request [AirbnbPermitsWriteRequest]
3451
3546
  # @param [Hash] opts the optional parameters
3452
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status &gt;&#x3D; 500 are deliberately not stored, so a server error stays retryable.
3547
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
3453
3548
  # @return [Array<(UpdateAirbnbListingPermits200Response, Integer, Hash)>] UpdateAirbnbListingPermits200Response data, response status code and response headers
3454
3549
  def update_airbnb_listing_permits_with_http_info(id, airbnb_permits_write_request, opts = {})
3455
3550
  if @api_client.config.debugging
@@ -3747,7 +3842,7 @@ module Repull
3747
3842
  # @param id [String] Repull listing id (numeric string).
3748
3843
  # @param airbnb_safety_disclosures_write_request [AirbnbSafetyDisclosuresWriteRequest]
3749
3844
  # @param [Hash] opts the optional parameters
3750
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status &gt;&#x3D; 500 are deliberately not stored, so a server error stays retryable.
3845
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
3751
3846
  # @return [UpdateAirbnbListingSafetyDisclosures200Response]
3752
3847
  def update_airbnb_listing_safety_disclosures(id, airbnb_safety_disclosures_write_request, opts = {})
3753
3848
  data, _status_code, _headers = update_airbnb_listing_safety_disclosures_with_http_info(id, airbnb_safety_disclosures_write_request, opts)
@@ -3759,7 +3854,7 @@ module Repull
3759
3854
  # @param id [String] Repull listing id (numeric string).
3760
3855
  # @param airbnb_safety_disclosures_write_request [AirbnbSafetyDisclosuresWriteRequest]
3761
3856
  # @param [Hash] opts the optional parameters
3762
- # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Responses with status &gt;&#x3D; 500 are deliberately not stored, so a server error stays retryable.
3857
+ # @option opts [String] :idempotency_key Makes a retry of this request safe. Send a unique string (a UUID generated at the point you build the request) and the response is stored for 24 hours: a repeat with the SAME key replays that stored response — tagged &#x60;Idempotency-Status: cached&#x60; — without running the operation again, so no duplicate reservation, guest or guest message is created. - Same key while the first request is still in flight → &#x60;409 idempotency_key_in_use&#x60;. - Same key with a DIFFERENT payload → &#x60;422 idempotency_key_reused&#x60;. Generate a new key per distinct request; reuse one only when retrying that exact request. - Retryable outcomes are deliberately not stored, so a retry with the same key runs for real: any status &gt;&#x3D; 500, &#x60;408&#x60;, &#x60;425&#x60; and &#x60;429&#x60;, and the refusals that happen before anything is done and tell you to fix something outside the request first — &#x60;connection_reauth_required&#x60;, &#x60;listing_inactive&#x60;, and the rate/daily limits. Every other answer, including a final refusal such as &#x60;422 airbnb_rejected&#x60;, is stored and replayed.
3763
3858
  # @return [Array<(UpdateAirbnbListingSafetyDisclosures200Response, Integer, Hash)>] UpdateAirbnbListingSafetyDisclosures200Response data, response status code and response headers
3764
3859
  def update_airbnb_listing_safety_disclosures_with_http_info(id, airbnb_safety_disclosures_write_request, opts = {})
3765
3860
  if @api_client.config.debugging
@@ -3978,20 +4073,20 @@ module Repull
3978
4073
  end
3979
4074
 
3980
4075
  # Withdraw Airbnb special offer
3981
- # Withdraw a previously-created Airbnb special offer. **Write-side** — calls Airbnb upstream. Pass the offer id as `?offerId=`. Requires a connected Airbnb host, else `404 no_connection`.
3982
- # @param offer_id [String] Airbnb special-offer id to withdraw.
4076
+ # Withdraw a special offer the guest has not booked. **Write-side** — calls Airbnb upstream. Pass the Airbnb offer id as `?offerId=`. The Repull-id equivalent is `DELETE /v1/conversations/{id}/special-offers/{offerId}`.
4077
+ # @param offer_id [String] Airbnb special-offer id (the &#x60;id&#x60; Airbnb returned when the offer was created).
3983
4078
  # @param [Hash] opts the optional parameters
3984
- # @return [nil]
4079
+ # @return [GetAirbnbOffer200Response]
3985
4080
  def withdraw_airbnb_offer(offer_id, opts = {})
3986
- withdraw_airbnb_offer_with_http_info(offer_id, opts)
3987
- nil
4081
+ data, _status_code, _headers = withdraw_airbnb_offer_with_http_info(offer_id, opts)
4082
+ data
3988
4083
  end
3989
4084
 
3990
4085
  # Withdraw Airbnb special offer
3991
- # Withdraw a previously-created Airbnb special offer. **Write-side** — calls Airbnb upstream. Pass the offer id as &#x60;?offerId&#x3D;&#x60;. Requires a connected Airbnb host, else &#x60;404 no_connection&#x60;.
3992
- # @param offer_id [String] Airbnb special-offer id to withdraw.
4086
+ # Withdraw a special offer the guest has not booked. **Write-side** — calls Airbnb upstream. Pass the Airbnb offer id as &#x60;?offerId&#x3D;&#x60;. The Repull-id equivalent is &#x60;DELETE /v1/conversations/{id}/special-offers/{offerId}&#x60;.
4087
+ # @param offer_id [String] Airbnb special-offer id (the &#x60;id&#x60; Airbnb returned when the offer was created).
3993
4088
  # @param [Hash] opts the optional parameters
3994
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
4089
+ # @return [Array<(GetAirbnbOffer200Response, Integer, Hash)>] GetAirbnbOffer200Response data, response status code and response headers
3995
4090
  def withdraw_airbnb_offer_with_http_info(offer_id, opts = {})
3996
4091
  if @api_client.config.debugging
3997
4092
  @api_client.config.logger.debug 'Calling API: AirbnbApi.withdraw_airbnb_offer ...'
@@ -4019,7 +4114,7 @@ module Repull
4019
4114
  post_body = opts[:debug_body]
4020
4115
 
4021
4116
  # return_type
4022
- return_type = opts[:debug_return_type]
4117
+ return_type = opts[:debug_return_type] || 'GetAirbnbOffer200Response'
4023
4118
 
4024
4119
  # auth_names
4025
4120
  auth_names = opts[:debug_auth_names] || ['bearerAuth']
@@ -187,7 +187,7 @@ module Repull
187
187
  end
188
188
 
189
189
  # Get usage summary
190
- # Aggregated usage over the requested `range` — tier + plan limits, quota used/remaining, next reset, a per-operation breakdown (request/error counts, error rate, avg latency), a daily timeline, status-class distribution, and range totals.
190
+ # Aggregated usage over the requested `range` — tier + plan limits, quota used/remaining, next reset, a per-operation breakdown (request/error counts, error rate, avg latency), a daily timeline, status-class distribution, and range totals. Two request quotas are reported and they reset at different times: `dailyRequests` is the daily circuit breaker that stops runaway client loops (resets at `dailyResetsAt`, the next UTC midnight) and `monthlyRequests` is the billing quota (resets at `resetsAt`). `null` limits mean unlimited on that dimension.
191
191
  # @param [Hash] opts the optional parameters
192
192
  # @option opts [String] :range Aggregation window ending now. (default to '30d')
193
193
  # @return [GetUsageSummary200Response]
@@ -197,7 +197,7 @@ module Repull
197
197
  end
198
198
 
199
199
  # Get usage summary
200
- # Aggregated usage over the requested &#x60;range&#x60; — tier + plan limits, quota used/remaining, next reset, a per-operation breakdown (request/error counts, error rate, avg latency), a daily timeline, status-class distribution, and range totals.
200
+ # Aggregated usage over the requested &#x60;range&#x60; — tier + plan limits, quota used/remaining, next reset, a per-operation breakdown (request/error counts, error rate, avg latency), a daily timeline, status-class distribution, and range totals. Two request quotas are reported and they reset at different times: &#x60;dailyRequests&#x60; is the daily circuit breaker that stops runaway client loops (resets at &#x60;dailyResetsAt&#x60;, the next UTC midnight) and &#x60;monthlyRequests&#x60; is the billing quota (resets at &#x60;resetsAt&#x60;). &#x60;null&#x60; limits mean unlimited on that dimension.
201
201
  # @param [Hash] opts the optional parameters
202
202
  # @option opts [String] :range Aggregation window ending now. (default to '30d')
203
203
  # @return [Array<(GetUsageSummary200Response, Integer, Hash)>] GetUsageSummary200Response data, response status code and response headers
@@ -251,7 +251,7 @@ module Repull
251
251
  end
252
252
 
253
253
  # Get tier and quota
254
- # Lightweight current-tier snapshot for status badges and quota meters — plan limits (monthly requests, daily AI requests, dynamic-pricing listings), the amount used, the amount remaining, and the next reset. `null` limits mean unlimited on that dimension.
254
+ # Lightweight current-tier snapshot for status badges and quota meters — plan limits (daily requests, monthly requests, daily AI requests, dynamic-pricing listings), the amount used, the amount remaining, and the next reset. Two request quotas are reported and they reset at different times: `dailyRequests` is the daily circuit breaker that stops runaway client loops (resets at `dailyResetsAt`, the next UTC midnight) and `monthlyRequests` is the billing quota (resets at `resetsAt`). Exceeding the daily cap returns 429 `daily_limit_exceeded`; exceeding the monthly one returns 429 `rate_limit_exceeded`. `null` limits mean unlimited on that dimension.
255
255
  # @param [Hash] opts the optional parameters
256
256
  # @return [GetUsageTier200Response]
257
257
  def get_usage_tier(opts = {})
@@ -260,7 +260,7 @@ module Repull
260
260
  end
261
261
 
262
262
  # Get tier and quota
263
- # Lightweight current-tier snapshot for status badges and quota meters — plan limits (monthly requests, daily AI requests, dynamic-pricing listings), the amount used, the amount remaining, and the next reset. &#x60;null&#x60; limits mean unlimited on that dimension.
263
+ # Lightweight current-tier snapshot for status badges and quota meters — plan limits (daily requests, monthly requests, daily AI requests, dynamic-pricing listings), the amount used, the amount remaining, and the next reset. Two request quotas are reported and they reset at different times: &#x60;dailyRequests&#x60; is the daily circuit breaker that stops runaway client loops (resets at &#x60;dailyResetsAt&#x60;, the next UTC midnight) and &#x60;monthlyRequests&#x60; is the billing quota (resets at &#x60;resetsAt&#x60;). Exceeding the daily cap returns 429 &#x60;daily_limit_exceeded&#x60;; exceeding the monthly one returns 429 &#x60;rate_limit_exceeded&#x60;. &#x60;null&#x60; limits mean unlimited on that dimension.
264
264
  # @param [Hash] opts the optional parameters
265
265
  # @return [Array<(GetUsageTier200Response, Integer, Hash)>] GetUsageTier200Response data, response status code and response headers
266
266
  def get_usage_tier_with_http_info(opts = {})