repull 0.2.26 → 0.2.27

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/lib/repull/api/airbnb_api.rb +38 -23
  3. data/lib/repull/api/booking_com_api.rb +9 -2
  4. data/lib/repull/api/connect_api.rb +4 -4
  5. data/lib/repull/api/listings_api.rb +2 -2
  6. data/lib/repull/api/properties_api.rb +2 -2
  7. data/lib/repull/api/reservations_api.rb +93 -6
  8. data/lib/repull/api/vrbo_api.rb +9 -2
  9. data/lib/repull/models/airbnb_listing.rb +13 -2
  10. data/lib/repull/models/airbnb_listing_details_write_request.rb +109 -5
  11. data/lib/repull/models/airbnb_listing_details_write_request_check_in_option.rb +1 -1
  12. data/lib/repull/models/airbnb_permits_write_request_permits_inner.rb +2 -2
  13. data/lib/repull/models/airbnb_pricing_write_request.rb +30 -2
  14. data/lib/repull/models/airbnb_pricing_write_request_fees_inner.rb +291 -0
  15. data/lib/repull/models/booking_property_listings_inner.rb +57 -1
  16. data/lib/repull/models/cancel_reservation200_response.rb +1 -1
  17. data/lib/repull/models/connect_status.rb +35 -4
  18. data/lib/repull/models/connect_status_capabilities.rb +148 -0
  19. data/lib/repull/models/connection.rb +28 -5
  20. data/lib/repull/models/connection_action.rb +188 -0
  21. data/lib/repull/models/create_connect_session_request.rb +39 -1
  22. data/lib/repull/models/create_connection_request.rb +39 -1
  23. data/lib/repull/models/error_error.rb +13 -1
  24. data/lib/repull/models/{cancel_reservation200_response_pms.rb → error_error_listings_inner.rb} +36 -30
  25. data/lib/repull/models/get_booking_extranet_login_status200_response.rb +2 -1
  26. data/lib/repull/models/list_listing_units200_response.rb +2 -1
  27. data/lib/repull/models/listing.rb +23 -2
  28. data/lib/repull/models/listing_capabilities.rb +148 -0
  29. data/lib/repull/models/property.rb +14 -3
  30. data/lib/repull/models/reservation_capabilities.rb +230 -0
  31. data/lib/repull/models/reservation_create_request.rb +172 -33
  32. data/lib/repull/models/reservation_create_response.rb +6 -6
  33. data/lib/repull/models/reservation_create_response_unit.rb +1 -1
  34. data/lib/repull/models/{reservation_create_response_pms.rb → reservation_pms_outcome.rb} +38 -8
  35. data/lib/repull/models/reservation_pms_outcome_quote.rb +168 -0
  36. data/lib/repull/models/{cancel_reservation200_response_pms_errors_inner.rb → reservation_pms_section_error.rb} +16 -16
  37. data/lib/repull/models/reservation_quote_request.rb +312 -0
  38. data/lib/repull/models/reservation_quote_response.rb +228 -0
  39. data/lib/repull/models/reservation_quote_response_breakdown.rb +175 -0
  40. data/lib/repull/models/reservation_update_response.rb +16 -6
  41. data/lib/repull/models/submit_smoobu_credentials_request.rb +2 -5
  42. data/lib/repull/models/submit_smoobu_credentials_request_credentials.rb +193 -0
  43. data/lib/repull/models/update_airbnb_checkin_guide200_response.rb +147 -0
  44. data/lib/repull/models/update_airbnb_checkin_guide200_response_data.rb +177 -0
  45. data/lib/repull/models/{airbnb_permits_write_request_permits_inner_answers_value.rb → update_airbnb_checkin_guide200_response_data_steps_inner.rb} +24 -43
  46. data/lib/repull/models/update_airbnb_checkin_guide_request.rb +186 -0
  47. data/lib/repull/models/update_airbnb_checkin_guide_request_steps_inner.rb +182 -0
  48. data/lib/repull/version.rb +1 -1
  49. data/lib/repull.rb +18 -4
  50. data/openapi/v1.json +2059 -335
  51. data/scripts/regen.sh +1 -1
  52. metadata +20 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fef8493c31534a2fc602d8313b944226dca625c07020289f1f092f52aefcf1a0
4
- data.tar.gz: d89110c66d3cf8712533219602b188406ce24f71c200acc304332045d7db657a
3
+ metadata.gz: 7e8fbc23eb3c3a2167a88f127699dcb1e2e3c8d7e8560b326a0c1fd34119089f
4
+ data.tar.gz: dc06a931b4c2a1aeb5d18c33ec90783980926bdd10280655d99e0de42b2ea64f
5
5
  SHA512:
6
- metadata.gz: f5e3002a7e8ed1d585bd7dcaf3f79281de903c4bdd1bcd2b2f53e60cd26e193fb730784c342f7770363bfb5bbe7d71b2f231c7cbb3b1488b3a00fa3f985e1804
7
- data.tar.gz: f50bc87cb20b444c2d06695b2d60dd85347a9c4aedc9fdf5b1d7798efa19b25a91a02e5994c9a5cec8f7716578a3d8ac6fb95880fb6933c83528500184f76acc
6
+ metadata.gz: 0b81eee51bf0a9c4eebeaa63626cd8cd1d3f177cdd3e70a90da91f12f3f8fadd8b5347c46911b42e958303cce7bcc22c79f4b99da6fd7ca8d57c04787419919f
7
+ data.tar.gz: 640e651cf434400925d6cc435b9994fdd41526fa14f4a3dcdacf607d4d2b24da1a89aa0cfbccfedd9e22b9e6c132cb47124122db297dd4c084d231a4911d0180
@@ -2177,8 +2177,9 @@ module Repull
2177
2177
  end
2178
2178
 
2179
2179
  # List Airbnb listings
2180
- # List every Airbnb listing this workspace has access to via the connected Airbnb account. **Pure DB read — never calls Airbnb upstream.** The connect flow is what populates the local cache; the API serves what's already there. Customers with a disconnected host still see their last-synced data, with the top-level `dataFreshness` envelope flagging the staleness and pointing at the reconnect URL. Pass `?include=amenities` to enrich each connection with its locally-cached amenity set. Returns `null` per connection when the cache is empty. Pass `?include=thumbnail` to add `thumbnailUrl` to each listing — one extra column on the query that already runs, so a selection screen renders from a single request instead of one call per listing. `null` when the listing has no thumbnail stored. Combine comma-separated, e.g. `?include=amenities,thumbnail`. **Can this listing be written to?** Every connection carries `syncCategory` — Airbnb's own per-listing API sync decision (`sync_all`, `sync_rates_and_availability`, or `none`) — and `writable`, which is `false` exactly when that category is `none`. Airbnb authorises sync one listing at a time, so a connected account can still hold listings Airbnb refuses every write to; a write to one of those returns `403 listing_not_api_connected` before anything is sent, and reconnecting the account does not change it (the host must switch the listing on in Airbnb). Check `writable` here before a portfolio-wide push instead of discovering it one 403 at a time. Inactive listings are left out; they keep syncing and reappear once activated. Use `GET /v1/listings?status=inactive` to find them. **Several Airbnb accounts?** A workspace can connect more than one. By default this returns every connected account's rows; pass `?account_id=<airbnb host id>` to scope to one. Every row carries `accountId` + `accountName` either way, and `dataFreshness.accounts[]` reports each account's freshness separately, so one disconnected host no longer marks the whole response stale.
2180
+ # List every Airbnb listing this workspace has access to via the connected Airbnb account. **Pure DB read — never calls Airbnb upstream.** The connect flow is what populates the local cache; the API serves what's already there. Customers with a disconnected host still see their last-synced data, with the top-level `dataFreshness` envelope flagging the staleness and pointing at the reconnect URL. Pass `?include=amenities` to enrich each connection with its locally-cached amenity set. Returns `null` per connection when the cache is empty. Pass `?include=thumbnail` to add `thumbnailUrl` to each listing — one extra column on the query that already runs, so a selection screen renders from a single request instead of one call per listing. `null` when the listing has no thumbnail stored. Combine comma-separated, e.g. `?include=amenities,thumbnail`. **Can this listing be written to?** Every connection carries `syncCategory` — Airbnb's own per-listing API sync decision (`sync_all`, `sync_rates_and_availability`, or `none`) — and `writable`, which is `false` exactly when that category is `none`. Airbnb authorises sync one listing at a time, so a connected account can still hold listings Airbnb refuses every write to; a write to one of those returns `403 listing_not_api_connected` before anything is sent, and reconnecting the account does not change it (the host must switch the listing on in Airbnb). Check `writable` here before a portfolio-wide push instead of discovering it one 403 at a time. Inactive listings are left out unless `?status=inactive|all` asks for them; they then come back with identity fields only — `listingId`, `name`, `city`, `status`, `inactiveReason` (`plan_limit`, `unlisted_on_airbnb` or `deactivated`) and each connection's ids and account — so you can show the user what to activate. They keep syncing and are complete again once activated. **Several Airbnb accounts?** A workspace can connect more than one. By default this returns every connected account's rows; pass `?account_id=<airbnb host id>` to scope to one. Every row carries `accountId` + `accountName` either way, and `dataFreshness.accounts[]` reports each account's freshness separately, so one disconnected host no longer marks the whole response stale.
2181
2181
  # @param [Hash] opts the optional parameters
2182
+ # @option opts [String] :status &#x60;active&#x60; (default) leaves inactive listings out. &#x60;inactive&#x60; returns only them and &#x60;all&#x60; returns both. An inactive listing comes back with identity fields only (ids, &#x60;name&#x60;, &#x60;city&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60;, its account), which is enough to show what can be activated. Every row carries &#x60;status&#x60;. (default to 'active')
2182
2183
  # @option opts [String] :account_id Scope the response to ONE connected Airbnb account. The value is the Airbnb host id — the same &#x60;accounts[].externalAccountId&#x60; that &#x60;GET /v1/connect/airbnb&#x60; returns and &#x60;DELETE /v1/connect/airbnb?accountId&#x3D;&#x60; accepts. A workspace can connect several Airbnb accounts. Omit this and you get every account&#39;s rows (the default, unchanged). Every row carries &#x60;accountId&#x60; + &#x60;accountName&#x60; either way, so you can group without a second call. An id that is not connected to THIS workspace returns &#x60;404 not_found&#x60; with your own ids in &#x60;valid_values&#x60; — we do not distinguish \&quot;no such host\&quot; from \&quot;someone else&#39;s host\&quot;, because confirming the latter would leak another workspace&#39;s account. Note this is NOT the &#x60;X-Account-Id&#x60; header, which carries a connection id and cannot tell two Airbnb hosts apart.
2183
2184
  # @option opts [String] :include Comma-separated expansions. Currently supported: &#x60;amenities&#x60; (adds &#x60;amenities&#x60; and &#x60;accessibility_amenities&#x60; arrays to each connection, sourced from the local &#x60;listings_airbnb_amenities&#x60; cache) and &#x60;thumbnail&#x60; (adds &#x60;thumbnailUrl&#x60; to each listing). Unknown values return 422 with a &#x60;valid_values&#x60; envelope.
2184
2185
  # @return [AirbnbListingListResponse]
@@ -2188,8 +2189,9 @@ module Repull
2188
2189
  end
2189
2190
 
2190
2191
  # List Airbnb listings
2191
- # List every Airbnb listing this workspace has access to via the connected Airbnb account. **Pure DB read — never calls Airbnb upstream.** The connect flow is what populates the local cache; the API serves what&#39;s already there. Customers with a disconnected host still see their last-synced data, with the top-level &#x60;dataFreshness&#x60; envelope flagging the staleness and pointing at the reconnect URL. Pass &#x60;?include&#x3D;amenities&#x60; to enrich each connection with its locally-cached amenity set. Returns &#x60;null&#x60; per connection when the cache is empty. Pass &#x60;?include&#x3D;thumbnail&#x60; to add &#x60;thumbnailUrl&#x60; to each listing — one extra column on the query that already runs, so a selection screen renders from a single request instead of one call per listing. &#x60;null&#x60; when the listing has no thumbnail stored. Combine comma-separated, e.g. &#x60;?include&#x3D;amenities,thumbnail&#x60;. **Can this listing be written to?** Every connection carries &#x60;syncCategory&#x60; — Airbnb&#39;s own per-listing API sync decision (&#x60;sync_all&#x60;, &#x60;sync_rates_and_availability&#x60;, or &#x60;none&#x60;) — and &#x60;writable&#x60;, which is &#x60;false&#x60; exactly when that category is &#x60;none&#x60;. Airbnb authorises sync one listing at a time, so a connected account can still hold listings Airbnb refuses every write to; a write to one of those returns &#x60;403 listing_not_api_connected&#x60; before anything is sent, and reconnecting the account does not change it (the host must switch the listing on in Airbnb). Check &#x60;writable&#x60; here before a portfolio-wide push instead of discovering it one 403 at a time. Inactive listings are left out; they keep syncing and reappear once activated. Use &#x60;GET /v1/listings?status&#x3D;inactive&#x60; to find them. **Several Airbnb accounts?** A workspace can connect more than one. By default this returns every connected account&#39;s rows; pass &#x60;?account_id&#x3D;&lt;airbnb host id&gt;&#x60; to scope to one. Every row carries &#x60;accountId&#x60; + &#x60;accountName&#x60; either way, and &#x60;dataFreshness.accounts[]&#x60; reports each account&#39;s freshness separately, so one disconnected host no longer marks the whole response stale.
2192
+ # List every Airbnb listing this workspace has access to via the connected Airbnb account. **Pure DB read — never calls Airbnb upstream.** The connect flow is what populates the local cache; the API serves what&#39;s already there. Customers with a disconnected host still see their last-synced data, with the top-level &#x60;dataFreshness&#x60; envelope flagging the staleness and pointing at the reconnect URL. Pass &#x60;?include&#x3D;amenities&#x60; to enrich each connection with its locally-cached amenity set. Returns &#x60;null&#x60; per connection when the cache is empty. Pass &#x60;?include&#x3D;thumbnail&#x60; to add &#x60;thumbnailUrl&#x60; to each listing — one extra column on the query that already runs, so a selection screen renders from a single request instead of one call per listing. &#x60;null&#x60; when the listing has no thumbnail stored. Combine comma-separated, e.g. &#x60;?include&#x3D;amenities,thumbnail&#x60;. **Can this listing be written to?** Every connection carries &#x60;syncCategory&#x60; — Airbnb&#39;s own per-listing API sync decision (&#x60;sync_all&#x60;, &#x60;sync_rates_and_availability&#x60;, or &#x60;none&#x60;) — and &#x60;writable&#x60;, which is &#x60;false&#x60; exactly when that category is &#x60;none&#x60;. Airbnb authorises sync one listing at a time, so a connected account can still hold listings Airbnb refuses every write to; a write to one of those returns &#x60;403 listing_not_api_connected&#x60; before anything is sent, and reconnecting the account does not change it (the host must switch the listing on in Airbnb). Check &#x60;writable&#x60; here before a portfolio-wide push instead of discovering it one 403 at a time. Inactive listings are left out unless &#x60;?status&#x3D;inactive|all&#x60; asks for them; they then come back with identity fields only — &#x60;listingId&#x60;, &#x60;name&#x60;, &#x60;city&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60; (&#x60;plan_limit&#x60;, &#x60;unlisted_on_airbnb&#x60; or &#x60;deactivated&#x60;) and each connection&#39;s ids and account — so you can show the user what to activate. They keep syncing and are complete again once activated. **Several Airbnb accounts?** A workspace can connect more than one. By default this returns every connected account&#39;s rows; pass &#x60;?account_id&#x3D;&lt;airbnb host id&gt;&#x60; to scope to one. Every row carries &#x60;accountId&#x60; + &#x60;accountName&#x60; either way, and &#x60;dataFreshness.accounts[]&#x60; reports each account&#39;s freshness separately, so one disconnected host no longer marks the whole response stale.
2192
2193
  # @param [Hash] opts the optional parameters
2194
+ # @option opts [String] :status &#x60;active&#x60; (default) leaves inactive listings out. &#x60;inactive&#x60; returns only them and &#x60;all&#x60; returns both. An inactive listing comes back with identity fields only (ids, &#x60;name&#x60;, &#x60;city&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60;, its account), which is enough to show what can be activated. Every row carries &#x60;status&#x60;. (default to 'active')
2193
2195
  # @option opts [String] :account_id Scope the response to ONE connected Airbnb account. The value is the Airbnb host id — the same &#x60;accounts[].externalAccountId&#x60; that &#x60;GET /v1/connect/airbnb&#x60; returns and &#x60;DELETE /v1/connect/airbnb?accountId&#x3D;&#x60; accepts. A workspace can connect several Airbnb accounts. Omit this and you get every account&#39;s rows (the default, unchanged). Every row carries &#x60;accountId&#x60; + &#x60;accountName&#x60; either way, so you can group without a second call. An id that is not connected to THIS workspace returns &#x60;404 not_found&#x60; with your own ids in &#x60;valid_values&#x60; — we do not distinguish \&quot;no such host\&quot; from \&quot;someone else&#39;s host\&quot;, because confirming the latter would leak another workspace&#39;s account. Note this is NOT the &#x60;X-Account-Id&#x60; header, which carries a connection id and cannot tell two Airbnb hosts apart.
2194
2196
  # @option opts [String] :include Comma-separated expansions. Currently supported: &#x60;amenities&#x60; (adds &#x60;amenities&#x60; and &#x60;accessibility_amenities&#x60; arrays to each connection, sourced from the local &#x60;listings_airbnb_amenities&#x60; cache) and &#x60;thumbnail&#x60; (adds &#x60;thumbnailUrl&#x60; to each listing). Unknown values return 422 with a &#x60;valid_values&#x60; envelope.
2195
2197
  # @return [Array<(AirbnbListingListResponse, Integer, Hash)>] AirbnbListingListResponse data, response status code and response headers
@@ -2197,11 +2199,16 @@ module Repull
2197
2199
  if @api_client.config.debugging
2198
2200
  @api_client.config.logger.debug 'Calling API: AirbnbApi.list_airbnb_listings ...'
2199
2201
  end
2202
+ allowable_values = ["active", "inactive", "all"]
2203
+ if @api_client.config.client_side_validation && opts[:'status'] && !allowable_values.include?(opts[:'status'])
2204
+ fail ArgumentError, "invalid value for \"status\", must be one of #{allowable_values}"
2205
+ end
2200
2206
  # resource path
2201
2207
  local_var_path = '/v1/channels/airbnb/listings'
2202
2208
 
2203
2209
  # query parameters
2204
2210
  query_params = opts[:query_params] || {}
2211
+ query_params[:'status'] = opts[:'status'] if !opts[:'status'].nil?
2205
2212
  query_params[:'account_id'] = opts[:'account_id'] if !opts[:'account_id'].nil?
2206
2213
  query_params[:'include'] = opts[:'include'] if !opts[:'include'].nil?
2207
2214
 
@@ -3190,24 +3197,24 @@ module Repull
3190
3197
  return data, status_code, headers
3191
3198
  end
3192
3199
 
3193
- # Upsert Airbnb check-in guide
3194
- # Upsert the check-in guide for one locale on an Airbnb listing. **Write-side** — calls Airbnb upstream; the DB mirror is reconciled by the sync worker once the upstream call returns. Target the locale with `?locale=en` (defaults to `en`). Requires a connected Airbnb host, else `404 no_connection`. 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.
3200
+ # Replace the steps of an Airbnb check-in guide
3201
+ # Write the check-in guide guests see before arrival: an ordered list of text steps. **Replaces** every existing step, so send the whole guide; `{\"steps\": []}` removes them all. The response is the guide re-read from Airbnb after the write. If the listing has no guide yet, one is created in `locale` (default: the existing guide's, else `en`). Safe on failure: the new steps are created before the old ones are removed, and if a create fails the steps this call added are removed again, so the guide is never left emptier than it was. Text steps only. Steps with photos need Airbnb's media upload and are not supported here yet. For the other arrival details use `PUT /v1/channels/airbnb/listings/{id}/details`: `check_in_option.instruction` (arrival instructions), `house_manual`, `directions`, `wifi_network`, `wifi_password`. 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.
3195
3202
  # @param id [String] Repull listing id (numeric string).
3203
+ # @param update_airbnb_checkin_guide_request [UpdateAirbnbCheckinGuideRequest]
3196
3204
  # @param [Hash] opts the optional parameters
3197
- # @option opts [String] :locale Locale to upsert. Defaults to &#x60;en&#x60;. (default to 'en')
3198
- # @return [nil]
3199
- def update_airbnb_checkin_guide(id, opts = {})
3200
- update_airbnb_checkin_guide_with_http_info(id, opts)
3201
- nil
3205
+ # @return [UpdateAirbnbCheckinGuide200Response]
3206
+ def update_airbnb_checkin_guide(id, update_airbnb_checkin_guide_request, opts = {})
3207
+ data, _status_code, _headers = update_airbnb_checkin_guide_with_http_info(id, update_airbnb_checkin_guide_request, opts)
3208
+ data
3202
3209
  end
3203
3210
 
3204
- # Upsert Airbnb check-in guide
3205
- # Upsert the check-in guide for one locale on an Airbnb listing. **Write-side** — calls Airbnb upstream; the DB mirror is reconciled by the sync worker once the upstream call returns. Target the locale with &#x60;?locale&#x3D;en&#x60; (defaults to &#x60;en&#x60;). Requires a connected Airbnb host, else &#x60;404 no_connection&#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.
3211
+ # Replace the steps of an Airbnb check-in guide
3212
+ # Write the check-in guide guests see before arrival: an ordered list of text steps. **Replaces** every existing step, so send the whole guide; &#x60;{\&quot;steps\&quot;: []}&#x60; removes them all. The response is the guide re-read from Airbnb after the write. If the listing has no guide yet, one is created in &#x60;locale&#x60; (default: the existing guide&#39;s, else &#x60;en&#x60;). Safe on failure: the new steps are created before the old ones are removed, and if a create fails the steps this call added are removed again, so the guide is never left emptier than it was. Text steps only. Steps with photos need Airbnb&#39;s media upload and are not supported here yet. For the other arrival details use &#x60;PUT /v1/channels/airbnb/listings/{id}/details&#x60;: &#x60;check_in_option.instruction&#x60; (arrival instructions), &#x60;house_manual&#x60;, &#x60;directions&#x60;, &#x60;wifi_network&#x60;, &#x60;wifi_password&#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.
3206
3213
  # @param id [String] Repull listing id (numeric string).
3214
+ # @param update_airbnb_checkin_guide_request [UpdateAirbnbCheckinGuideRequest]
3207
3215
  # @param [Hash] opts the optional parameters
3208
- # @option opts [String] :locale Locale to upsert. Defaults to &#x60;en&#x60;. (default to 'en')
3209
- # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
3210
- def update_airbnb_checkin_guide_with_http_info(id, opts = {})
3216
+ # @return [Array<(UpdateAirbnbCheckinGuide200Response, Integer, Hash)>] UpdateAirbnbCheckinGuide200Response data, response status code and response headers
3217
+ def update_airbnb_checkin_guide_with_http_info(id, update_airbnb_checkin_guide_request, opts = {})
3211
3218
  if @api_client.config.debugging
3212
3219
  @api_client.config.logger.debug 'Calling API: AirbnbApi.update_airbnb_checkin_guide ...'
3213
3220
  end
@@ -3215,26 +3222,34 @@ module Repull
3215
3222
  if @api_client.config.client_side_validation && id.nil?
3216
3223
  fail ArgumentError, "Missing the required parameter 'id' when calling AirbnbApi.update_airbnb_checkin_guide"
3217
3224
  end
3225
+ # verify the required parameter 'update_airbnb_checkin_guide_request' is set
3226
+ if @api_client.config.client_side_validation && update_airbnb_checkin_guide_request.nil?
3227
+ fail ArgumentError, "Missing the required parameter 'update_airbnb_checkin_guide_request' when calling AirbnbApi.update_airbnb_checkin_guide"
3228
+ end
3218
3229
  # resource path
3219
3230
  local_var_path = '/v1/channels/airbnb/listings/{id}/checkin-guide'.sub('{id}', CGI.escape(id.to_s))
3220
3231
 
3221
3232
  # query parameters
3222
3233
  query_params = opts[:query_params] || {}
3223
- query_params[:'locale'] = opts[:'locale'] if !opts[:'locale'].nil?
3224
3234
 
3225
3235
  # header parameters
3226
3236
  header_params = opts[:header_params] || {}
3227
3237
  # HTTP header 'Accept' (if needed)
3228
3238
  header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
3239
+ # HTTP header 'Content-Type'
3240
+ content_type = @api_client.select_header_content_type(['application/json'])
3241
+ if !content_type.nil?
3242
+ header_params['Content-Type'] = content_type
3243
+ end
3229
3244
 
3230
3245
  # form parameters
3231
3246
  form_params = opts[:form_params] || {}
3232
3247
 
3233
3248
  # http body (model)
3234
- post_body = opts[:debug_body]
3249
+ post_body = opts[:debug_body] || @api_client.object_to_http_body(update_airbnb_checkin_guide_request)
3235
3250
 
3236
3251
  # return_type
3237
- return_type = opts[:debug_return_type]
3252
+ return_type = opts[:debug_return_type] || 'UpdateAirbnbCheckinGuide200Response'
3238
3253
 
3239
3254
  # auth_names
3240
3255
  auth_names = opts[:debug_auth_names] || ['bearerAuth']
@@ -3485,8 +3500,8 @@ module Repull
3485
3500
  return data, status_code, headers
3486
3501
  end
3487
3502
 
3488
- # Update property type, room type, quiet hours or check-in method
3489
- # Change what kind of property the Airbnb listing is, when its quiet hours are, or how the guest gets in. Partial: only the fields you send are written. At least one required; an unknown field is refused by name rather than dropped. This is the UPDATE path for fields that previously had none. `POST /v1/listings` accepts a `propertyType` when a listing is CREATED and nothing could change it afterwards, so a listing mis-typed at import stayed mis-typed; the check-in method was mirrored and never exposed at all. **A 200 does not by itself mean the change was applied.** `property_type_category`, `property_type_group` and `check_in_option` are among the attributes Airbnb locks on established listings: the write returns 200, and Airbnb applies nothing for the locked ones. The response reports `blockedFields` — the fields YOU sent that Airbnb dropped — and `blockedFields: []` is what a landed write looks like. `GET …/details` reports the same list as `lockedFields` so you can check first. Canonical property type (the value Repull keeps and republishes) is set with `PUT /v1/listings/{id}/content` under `details`; this endpoint writes straight to Airbnb. Send `Idempotency-Key` to make a retry safe.
3503
+ # Update property type, quiet hours, check-in method, house manual, directions or Wi-Fi
3504
+ # Change what kind of property the Airbnb listing is, when its quiet hours are, how the guest gets in (`check_in_option.instruction` is the arrival instructions), the house manual, directions to the property, or the Wi-Fi network and password. Partial: only the fields you send are written. At least one required; an unknown field is refused by name rather than dropped. This is the UPDATE path for fields that previously had none. `POST /v1/listings` accepts a `propertyType` when a listing is CREATED and nothing could change it afterwards, so a listing mis-typed at import stayed mis-typed; the check-in method was mirrored and never exposed at all. **A 200 does not by itself mean the change was applied.** `property_type_category`, `property_type_group`, `check_in_option`, `house_manual`, `directions`, `wifi_network` and `wifi_password` are among the attributes Airbnb locks on some listings: the write returns 200, and Airbnb applies nothing for the locked ones. The response reports `blockedFields` — the fields YOU sent that Airbnb dropped — and `blockedFields: []` is what a landed write looks like. `GET …/details` reports the same list as `lockedFields` so you can check first. Canonical property type (the value Repull keeps and republishes) is set with `PUT /v1/listings/{id}/content` under `details`; this endpoint writes straight to Airbnb. Send `Idempotency-Key` to make a retry safe.
3490
3505
  # @param id [String] Repull listing id (numeric string).
3491
3506
  # @param airbnb_listing_details_write_request [AirbnbListingDetailsWriteRequest]
3492
3507
  # @param [Hash] opts the optional parameters
@@ -3497,8 +3512,8 @@ module Repull
3497
3512
  data
3498
3513
  end
3499
3514
 
3500
- # Update property type, room type, quiet hours or check-in method
3501
- # Change what kind of property the Airbnb listing is, when its quiet hours are, or how the guest gets in. Partial: only the fields you send are written. At least one required; an unknown field is refused by name rather than dropped. This is the UPDATE path for fields that previously had none. &#x60;POST /v1/listings&#x60; accepts a &#x60;propertyType&#x60; when a listing is CREATED and nothing could change it afterwards, so a listing mis-typed at import stayed mis-typed; the check-in method was mirrored and never exposed at all. **A 200 does not by itself mean the change was applied.** &#x60;property_type_category&#x60;, &#x60;property_type_group&#x60; and &#x60;check_in_option&#x60; are among the attributes Airbnb locks on established listings: the write returns 200, and Airbnb applies nothing for the locked ones. The response reports &#x60;blockedFields&#x60; — the fields YOU sent that Airbnb dropped — and &#x60;blockedFields: []&#x60; is what a landed write looks like. &#x60;GET …/details&#x60; reports the same list as &#x60;lockedFields&#x60; so you can check first. Canonical property type (the value Repull keeps and republishes) is set with &#x60;PUT /v1/listings/{id}/content&#x60; under &#x60;details&#x60;; this endpoint writes straight to Airbnb. Send &#x60;Idempotency-Key&#x60; to make a retry safe.
3515
+ # Update property type, quiet hours, check-in method, house manual, directions or Wi-Fi
3516
+ # Change what kind of property the Airbnb listing is, when its quiet hours are, how the guest gets in (&#x60;check_in_option.instruction&#x60; is the arrival instructions), the house manual, directions to the property, or the Wi-Fi network and password. Partial: only the fields you send are written. At least one required; an unknown field is refused by name rather than dropped. This is the UPDATE path for fields that previously had none. &#x60;POST /v1/listings&#x60; accepts a &#x60;propertyType&#x60; when a listing is CREATED and nothing could change it afterwards, so a listing mis-typed at import stayed mis-typed; the check-in method was mirrored and never exposed at all. **A 200 does not by itself mean the change was applied.** &#x60;property_type_category&#x60;, &#x60;property_type_group&#x60;, &#x60;check_in_option&#x60;, &#x60;house_manual&#x60;, &#x60;directions&#x60;, &#x60;wifi_network&#x60; and &#x60;wifi_password&#x60; are among the attributes Airbnb locks on some listings: the write returns 200, and Airbnb applies nothing for the locked ones. The response reports &#x60;blockedFields&#x60; — the fields YOU sent that Airbnb dropped — and &#x60;blockedFields: []&#x60; is what a landed write looks like. &#x60;GET …/details&#x60; reports the same list as &#x60;lockedFields&#x60; so you can check first. Canonical property type (the value Repull keeps and republishes) is set with &#x60;PUT /v1/listings/{id}/content&#x60; under &#x60;details&#x60;; this endpoint writes straight to Airbnb. Send &#x60;Idempotency-Key&#x60; to make a retry safe.
3502
3517
  # @param id [String] Repull listing id (numeric string).
3503
3518
  # @param airbnb_listing_details_write_request [AirbnbListingDetailsWriteRequest]
3504
3519
  # @param [Hash] opts the optional parameters
@@ -3567,7 +3582,7 @@ module Repull
3567
3582
  end
3568
3583
 
3569
3584
  # Answer Airbnb permit questions
3570
- # Answer the regulatory permit questions for a listing — the licence or registration number a city requires to keep the listing up. Read the questions first with `GET …/permits?source=live`. For each permit, pick one of its `flows[]` and send its `slug` as `flow_slug`; key every answer by the question's `answer_key`, and let the question's `type` decide the value field (`text_value`, `attestation_value`, `radio_value`, `date_value` or `selected_options_value`). Answers are forwarded verbatim — nothing is defaulted or inferred, because a wrong licence number can take a listing down in a regulated city. Send `Idempotency-Key`: a timeout here leaves you unable to tell \"never arrived\" from \"arrived, response lost\", and this is a compliance filing. Airbnb refusing the answers (an unknown `answer_key`, a malformed licence number) is `422 airbnb_rejected` carrying Airbnb's own reason. An expired or revoked Airbnb connection is `403 connection_reauth_required`.
3585
+ # Answer the regulatory permit questions for a listing — the licence or registration number a city requires to keep the listing up. Read the questions first with `GET …/permits?source=live`. For each permit, pick one of its `flows[]` and send its `slug` as `flow_slug`; key every answer by the question's `answer_key`, and let the question's `type` decide the value field — `<type>_value`: `text_value`, `attestation_value`, `radio_value`, `dropdown_value`, `email_value`, `future_date_value`, `file_upload_value`, and so on. Answers are forwarded verbatim — nothing is defaulted or inferred, because a wrong licence number can take a listing down in a regulated city. Send `Idempotency-Key`: a timeout here leaves you unable to tell \"never arrived\" from \"arrived, response lost\", and this is a compliance filing. Airbnb refusing the answers (an unknown `answer_key`, a malformed licence number) is `422 airbnb_rejected` carrying Airbnb's own reason. An expired or revoked Airbnb connection is `403 connection_reauth_required`. **Changing and removing answers.** Airbnb has no call that deletes or withdraws a submitted registration, so neither does Repull, and at least one permit is required. To change an answer Airbnb marks `answer_editable`, submit the flow again with the new answers — the latest submission replaces the previous one. When a submission fails with status `failed_recoverable`, fix it and submit again; `failed` cannot be resubmitted. Hosts can also manage this at airbnb.com/verify-listing/{listing_id}.
3571
3586
  # @param id [String] Repull listing id (numeric string).
3572
3587
  # @param airbnb_permits_write_request [AirbnbPermitsWriteRequest]
3573
3588
  # @param [Hash] opts the optional parameters
@@ -3579,7 +3594,7 @@ module Repull
3579
3594
  end
3580
3595
 
3581
3596
  # Answer Airbnb permit questions
3582
- # Answer the regulatory permit questions for a listing — the licence or registration number a city requires to keep the listing up. Read the questions first with &#x60;GET …/permits?source&#x3D;live&#x60;. For each permit, pick one of its &#x60;flows[]&#x60; and send its &#x60;slug&#x60; as &#x60;flow_slug&#x60;; key every answer by the question&#39;s &#x60;answer_key&#x60;, and let the question&#39;s &#x60;type&#x60; decide the value field (&#x60;text_value&#x60;, &#x60;attestation_value&#x60;, &#x60;radio_value&#x60;, &#x60;date_value&#x60; or &#x60;selected_options_value&#x60;). Answers are forwarded verbatim — nothing is defaulted or inferred, because a wrong licence number can take a listing down in a regulated city. Send &#x60;Idempotency-Key&#x60;: a timeout here leaves you unable to tell \&quot;never arrived\&quot; from \&quot;arrived, response lost\&quot;, and this is a compliance filing. Airbnb refusing the answers (an unknown &#x60;answer_key&#x60;, a malformed licence number) is &#x60;422 airbnb_rejected&#x60; carrying Airbnb&#39;s own reason. An expired or revoked Airbnb connection is &#x60;403 connection_reauth_required&#x60;.
3597
+ # Answer the regulatory permit questions for a listing — the licence or registration number a city requires to keep the listing up. Read the questions first with &#x60;GET …/permits?source&#x3D;live&#x60;. For each permit, pick one of its &#x60;flows[]&#x60; and send its &#x60;slug&#x60; as &#x60;flow_slug&#x60;; key every answer by the question&#39;s &#x60;answer_key&#x60;, and let the question&#39;s &#x60;type&#x60; decide the value field — &#x60;&lt;type&gt;_value&#x60;: &#x60;text_value&#x60;, &#x60;attestation_value&#x60;, &#x60;radio_value&#x60;, &#x60;dropdown_value&#x60;, &#x60;email_value&#x60;, &#x60;future_date_value&#x60;, &#x60;file_upload_value&#x60;, and so on. Answers are forwarded verbatim — nothing is defaulted or inferred, because a wrong licence number can take a listing down in a regulated city. Send &#x60;Idempotency-Key&#x60;: a timeout here leaves you unable to tell \&quot;never arrived\&quot; from \&quot;arrived, response lost\&quot;, and this is a compliance filing. Airbnb refusing the answers (an unknown &#x60;answer_key&#x60;, a malformed licence number) is &#x60;422 airbnb_rejected&#x60; carrying Airbnb&#39;s own reason. An expired or revoked Airbnb connection is &#x60;403 connection_reauth_required&#x60;. **Changing and removing answers.** Airbnb has no call that deletes or withdraws a submitted registration, so neither does Repull, and at least one permit is required. To change an answer Airbnb marks &#x60;answer_editable&#x60;, submit the flow again with the new answers — the latest submission replaces the previous one. When a submission fails with status &#x60;failed_recoverable&#x60;, fix it and submit again; &#x60;failed&#x60; cannot be resubmitted. Hosts can also manage this at airbnb.com/verify-listing/{listing_id}.
3583
3598
  # @param id [String] Repull listing id (numeric string).
3584
3599
  # @param airbnb_permits_write_request [AirbnbPermitsWriteRequest]
3585
3600
  # @param [Hash] opts the optional parameters
@@ -784,8 +784,9 @@ module Repull
784
784
  end
785
785
 
786
786
  # List Booking.com properties
787
- # 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.
787
+ # 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` unless `?status=inactive|all` asks for them; they then appear with identity fields only (`listingId`, `name`, `city`, `status`, `inactiveReason`, room). `mappingStatus` counts every mapped listing, inactive ones included, so a property whose listings are all inactive is still `mapped`.
788
788
  # @param [Hash] opts the optional parameters
789
+ # @option opts [String] :status &#x60;active&#x60; (default) leaves inactive listings out. &#x60;inactive&#x60; returns only them and &#x60;all&#x60; returns both. An inactive listing comes back with identity fields only (ids, &#x60;name&#x60;, &#x60;city&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60;, its account), which is enough to show what can be activated. Every row carries &#x60;status&#x60;. (default to 'active')
789
790
  # @return [Array<BookingProperty>]
790
791
  def list_booking_properties(opts = {})
791
792
  data, _status_code, _headers = list_booking_properties_with_http_info(opts)
@@ -793,18 +794,24 @@ module Repull
793
794
  end
794
795
 
795
796
  # List Booking.com properties
796
- # 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.
797
+ # 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; unless &#x60;?status&#x3D;inactive|all&#x60; asks for them; they then appear with identity fields only (&#x60;listingId&#x60;, &#x60;name&#x60;, &#x60;city&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60;, room). &#x60;mappingStatus&#x60; counts every mapped listing, inactive ones included, so a property whose listings are all inactive is still &#x60;mapped&#x60;.
797
798
  # @param [Hash] opts the optional parameters
799
+ # @option opts [String] :status &#x60;active&#x60; (default) leaves inactive listings out. &#x60;inactive&#x60; returns only them and &#x60;all&#x60; returns both. An inactive listing comes back with identity fields only (ids, &#x60;name&#x60;, &#x60;city&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60;, its account), which is enough to show what can be activated. Every row carries &#x60;status&#x60;. (default to 'active')
798
800
  # @return [Array<(Array<BookingProperty>, Integer, Hash)>] Array<BookingProperty> data, response status code and response headers
799
801
  def list_booking_properties_with_http_info(opts = {})
800
802
  if @api_client.config.debugging
801
803
  @api_client.config.logger.debug 'Calling API: BookingComApi.list_booking_properties ...'
802
804
  end
805
+ allowable_values = ["active", "inactive", "all"]
806
+ if @api_client.config.client_side_validation && opts[:'status'] && !allowable_values.include?(opts[:'status'])
807
+ fail ArgumentError, "invalid value for \"status\", must be one of #{allowable_values}"
808
+ end
803
809
  # resource path
804
810
  local_var_path = '/v1/channels/booking/properties'
805
811
 
806
812
  # query parameters
807
813
  query_params = opts[:query_params] || {}
814
+ query_params[:'status'] = opts[:'status'] if !opts[:'status'].nil?
808
815
 
809
816
  # header parameters
810
817
  header_params = opts[:header_params] || {}
@@ -806,7 +806,7 @@ module Repull
806
806
  end
807
807
 
808
808
  # List PMS/OTA connections
809
- # Returns all active connections to PMS and OTA platforms.
809
+ # Returns every PMS and OTA connection in the workspace, each with its `status`. **Spot connections that need attention.** A connection whose `status` is not `active` may need the host to do something before it works — most commonly a Booking.com Extranet connection where the invited user was granted only partial access (`status: \"needs_permissions\"`). A Smoobu connection still on a legacy single API key carries `action.reason: \"reauth_required\"` while its `status` is `active`: Smoobu stops accepting those keys on October 31, 2026, and `fixUrl` opens the form for a new API key + secret (the connection id stays the same). These connections carry two extra fields: - `action` — `{ required: true, reason, message }`. `reason` is a stable machine code (e.g. `needs_permissions`); `message` is a host-facing one-liner describing what to do. - `fixUrl` — a durable link that reopens the hosted Connect flow **bound to that account, on the fix screen** (e.g. \"grant full access\" + a Re-check button). It is safe to store and show in your own dashboard. **Self-serve repair:** when `action.required` is true, surface a \"Fix\" button that opens `fixUrl` in a new tab (or embed it). The host resolves the issue (e.g. grants the user full access in Booking.com) and clicks Re-check; the import finishes on its own and the connection flips back to `active` — no re-invite, no support ticket. Poll this endpoint (or read it after the host returns) to confirm `action` has cleared.
810
810
  # @param [Hash] opts the optional parameters
811
811
  # @return [ConnectionListResponse]
812
812
  def list_connections(opts = {})
@@ -815,7 +815,7 @@ module Repull
815
815
  end
816
816
 
817
817
  # List PMS/OTA connections
818
- # Returns all active connections to PMS and OTA platforms.
818
+ # Returns every PMS and OTA connection in the workspace, each with its &#x60;status&#x60;. **Spot connections that need attention.** A connection whose &#x60;status&#x60; is not &#x60;active&#x60; may need the host to do something before it works — most commonly a Booking.com Extranet connection where the invited user was granted only partial access (&#x60;status: \&quot;needs_permissions\&quot;&#x60;). A Smoobu connection still on a legacy single API key carries &#x60;action.reason: \&quot;reauth_required\&quot;&#x60; while its &#x60;status&#x60; is &#x60;active&#x60;: Smoobu stops accepting those keys on October 31, 2026, and &#x60;fixUrl&#x60; opens the form for a new API key + secret (the connection id stays the same). These connections carry two extra fields: - &#x60;action&#x60; — &#x60;{ required: true, reason, message }&#x60;. &#x60;reason&#x60; is a stable machine code (e.g. &#x60;needs_permissions&#x60;); &#x60;message&#x60; is a host-facing one-liner describing what to do. - &#x60;fixUrl&#x60; — a durable link that reopens the hosted Connect flow **bound to that account, on the fix screen** (e.g. \&quot;grant full access\&quot; + a Re-check button). It is safe to store and show in your own dashboard. **Self-serve repair:** when &#x60;action.required&#x60; is true, surface a \&quot;Fix\&quot; button that opens &#x60;fixUrl&#x60; in a new tab (or embed it). The host resolves the issue (e.g. grants the user full access in Booking.com) and clicks Re-check; the import finishes on its own and the connection flips back to &#x60;active&#x60; — no re-invite, no support ticket. Poll this endpoint (or read it after the host returns) to confirm &#x60;action&#x60; has cleared.
819
819
  # @param [Hash] opts the optional parameters
820
820
  # @return [Array<(ConnectionListResponse, Integer, Hash)>] ConnectionListResponse data, response status code and response headers
821
821
  def list_connections_with_http_info(opts = {})
@@ -1830,7 +1830,7 @@ module Repull
1830
1830
  end
1831
1831
 
1832
1832
  # Submit Smoobu credentials for a Connect session
1833
- # Completes a credentials-pattern connection for Smoobu. API key from Smoobu → Settings → For developers. The credentials are validated against Smoobu before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
1833
+ # Completes a credentials-pattern connection for Smoobu with an HMAC API key + API secret, created in Smoobu → Settings → Advanced → API Keys (Create API Key, then Generate Secret — the secret is shown only once). Smoobu retires single legacy API keys on October 31, 2026, so `apiSecret` is required; a request with only `apiKey` returns `invalid_params`. Reconnecting replaces the stored credentials on the workspace's existing Smoobu connection — the `pmsConnectionId` stays the same. The credentials are validated against Smoobu before anything is persisted, so an invalid pair returns `invalid_credentials` rather than creating a dead connection. On success the `pms_connections` row is written and the Connect session moves to its terminal state. No API key required when called with a `sessionId` — the session is the capability token.
1834
1834
  # @param submit_smoobu_credentials_request [SubmitSmoobuCredentialsRequest]
1835
1835
  # @param [Hash] opts the optional parameters
1836
1836
  # @return [SubmitBeds24Credentials200Response]
@@ -1840,7 +1840,7 @@ module Repull
1840
1840
  end
1841
1841
 
1842
1842
  # Submit Smoobu credentials for a Connect session
1843
- # Completes a credentials-pattern connection for Smoobu. API key from Smoobu → Settings → For developers. The credentials are validated against Smoobu before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
1843
+ # Completes a credentials-pattern connection for Smoobu with an HMAC API key + API secret, created in Smoobu → Settings → Advanced → API Keys (Create API Key, then Generate Secret — the secret is shown only once). Smoobu retires single legacy API keys on October 31, 2026, so &#x60;apiSecret&#x60; is required; a request with only &#x60;apiKey&#x60; returns &#x60;invalid_params&#x60;. Reconnecting replaces the stored credentials on the workspace&#39;s existing Smoobu connection — the &#x60;pmsConnectionId&#x60; stays the same. The credentials are validated against Smoobu before anything is persisted, so an invalid pair returns &#x60;invalid_credentials&#x60; rather than creating a dead connection. On success the &#x60;pms_connections&#x60; row is written and the Connect session moves to its terminal state. No API key required when called with a &#x60;sessionId&#x60; — the session is the capability token.
1844
1844
  # @param submit_smoobu_credentials_request [SubmitSmoobuCredentialsRequest]
1845
1845
  # @param [Hash] opts the optional parameters
1846
1846
  # @return [Array<(SubmitBeds24Credentials200Response, Integer, Hash)>] SubmitBeds24Credentials200Response data, response status code and response headers
@@ -760,7 +760,7 @@ module Repull
760
760
  # @option opts [Integer] :offset First-class alias for cursor-based pagination. Mutually exclusive with &#x60;cursor&#x60; — passing both returns 422. Accepts integers in &#x60;[0, 10000]&#x60;; deeper walks must use &#x60;cursor&#x60; (constant per-page cost). The response always includes &#x60;pagination.nextCursor&#x60; so consumers can switch from offset → cursor mid-walk for deep pagination without re-keying. (default to 0)
761
761
  # @option opts [Integer] :limit Max items per page. Hard cap is 100. (default to 20)
762
762
  # @option opts [String] :q Case-insensitive substring search on name, street, or city.
763
- # @option opts [String] :status Filter by listing status. Defaults to &#x60;active&#x60;. Pass &#x60;inactive&#x60; to list the listings you can activate, &#x60;archived&#x60; for archived ones, or &#x60;all&#x60; for every status. Inactive listings are returned with identity fields only — &#x60;id&#x60;, &#x60;name&#x60;, &#x60;status&#x60; and &#x60;channels&#x60; — and never with &#x60;address&#x60;, &#x60;content&#x60; or &#x60;details&#x60;; activate one to see the rest. The only field you can add to an inactive row is &#x60;thumbnailUrl&#x60;, via &#x60;?include&#x3D;thumbnail&#x60;. (default to 'active')
763
+ # @option opts [String] :status Filter by listing status. Defaults to &#x60;active&#x60;. Pass &#x60;inactive&#x60; to list the listings you can activate, &#x60;archived&#x60; for archived ones, or &#x60;all&#x60; for every status. Inactive listings are returned with identity fields only — &#x60;id&#x60;, &#x60;name&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60; (&#x60;plan_limit&#x60;, &#x60;unlisted_on_airbnb&#x60; or &#x60;deactivated&#x60;), &#x60;address.city&#x60; and &#x60;channels&#x60; — and never with the street, &#x60;content&#x60; or &#x60;details&#x60;; activate one to see the rest. The only field you can add to an inactive row is &#x60;thumbnailUrl&#x60;, via &#x60;?include&#x3D;thumbnail&#x60;. (default to 'active')
764
764
  # @option opts [String] :channel Restrict to listings published on the given channel (&#x60;airbnb&#x60;, &#x60;booking&#x60;, &#x60;vrbo&#x60;, etc.). Joins through &#x60;listing_platform_links&#x60; and matches active links only.
765
765
  # @option opts [String] :include Comma-separated optional expansions. Currently supported: &#x60;content&#x60;, &#x60;details&#x60;, &#x60;thumbnail&#x60;. &#x60;thumbnail&#x60; guarantees &#x60;thumbnailUrl&#x60; on every row and is the only expansion that applies to inactive listings. Unknown values return 422 with a &#x60;valid_values&#x60; envelope. (Note: &#x60;amenities&#x60; is not yet supported on the list endpoint — use the detail endpoint to fetch amenity rows for a single listing.)
766
766
  # @return [ListingListResponse]
@@ -777,7 +777,7 @@ module Repull
777
777
  # @option opts [Integer] :offset First-class alias for cursor-based pagination. Mutually exclusive with &#x60;cursor&#x60; — passing both returns 422. Accepts integers in &#x60;[0, 10000]&#x60;; deeper walks must use &#x60;cursor&#x60; (constant per-page cost). The response always includes &#x60;pagination.nextCursor&#x60; so consumers can switch from offset → cursor mid-walk for deep pagination without re-keying. (default to 0)
778
778
  # @option opts [Integer] :limit Max items per page. Hard cap is 100. (default to 20)
779
779
  # @option opts [String] :q Case-insensitive substring search on name, street, or city.
780
- # @option opts [String] :status Filter by listing status. Defaults to &#x60;active&#x60;. Pass &#x60;inactive&#x60; to list the listings you can activate, &#x60;archived&#x60; for archived ones, or &#x60;all&#x60; for every status. Inactive listings are returned with identity fields only — &#x60;id&#x60;, &#x60;name&#x60;, &#x60;status&#x60; and &#x60;channels&#x60; — and never with &#x60;address&#x60;, &#x60;content&#x60; or &#x60;details&#x60;; activate one to see the rest. The only field you can add to an inactive row is &#x60;thumbnailUrl&#x60;, via &#x60;?include&#x3D;thumbnail&#x60;. (default to 'active')
780
+ # @option opts [String] :status Filter by listing status. Defaults to &#x60;active&#x60;. Pass &#x60;inactive&#x60; to list the listings you can activate, &#x60;archived&#x60; for archived ones, or &#x60;all&#x60; for every status. Inactive listings are returned with identity fields only — &#x60;id&#x60;, &#x60;name&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60; (&#x60;plan_limit&#x60;, &#x60;unlisted_on_airbnb&#x60; or &#x60;deactivated&#x60;), &#x60;address.city&#x60; and &#x60;channels&#x60; — and never with the street, &#x60;content&#x60; or &#x60;details&#x60;; activate one to see the rest. The only field you can add to an inactive row is &#x60;thumbnailUrl&#x60;, via &#x60;?include&#x3D;thumbnail&#x60;. (default to 'active')
781
781
  # @option opts [String] :channel Restrict to listings published on the given channel (&#x60;airbnb&#x60;, &#x60;booking&#x60;, &#x60;vrbo&#x60;, etc.). Joins through &#x60;listing_platform_links&#x60; and matches active links only.
782
782
  # @option opts [String] :include Comma-separated optional expansions. Currently supported: &#x60;content&#x60;, &#x60;details&#x60;, &#x60;thumbnail&#x60;. &#x60;thumbnail&#x60; guarantees &#x60;thumbnailUrl&#x60; on every row and is the only expansion that applies to inactive listings. Unknown values return 422 with a &#x60;valid_values&#x60; envelope. (Note: &#x60;amenities&#x60; is not yet supported on the list endpoint — use the detail endpoint to fetch amenity rows for a single listing.)
783
783
  # @return [Array<(ListingListResponse, Integer, Hash)>] ListingListResponse data, response status code and response headers
@@ -97,7 +97,7 @@ module Repull
97
97
  # @option opts [String] :cursor Opaque cursor returned in the previous response&#39;s &#x60;pagination.nextCursor&#x60;. Omit to fetch the first page.
98
98
  # @option opts [Integer] :offset First-class alias for cursor-based pagination. Mutually exclusive with &#x60;cursor&#x60; — passing both returns 422. Accepts integers in &#x60;[0, 10000]&#x60;; deeper walks must use &#x60;cursor&#x60; (constant per-page cost). The response always includes &#x60;pagination.nextCursor&#x60; so consumers can switch from offset → cursor mid-walk for deep pagination without re-keying. (default to 0)
99
99
  # @option opts [String] :q Case-insensitive substring search on name, street, or city.
100
- # @option opts [String] :status Filter by status. Default returns active only; pass &#x60;inactive&#x60; to invert or &#x60;all&#x60; to include both. Inactive properties carry identity fields only — &#x60;id&#x60;, &#x60;name&#x60;, &#x60;status&#x60;, &#x60;lifecycleStatus&#x60;, &#x60;channels&#x60; and &#x60;updatedAt&#x60; — never &#x60;address&#x60;, &#x60;city&#x60; or &#x60;currency&#x60;. (default to 'active')
100
+ # @option opts [String] :status Filter by status. Default returns active only; pass &#x60;inactive&#x60; to invert or &#x60;all&#x60; to include both. Inactive properties carry identity fields only — &#x60;id&#x60;, &#x60;name&#x60;, &#x60;city&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60; (&#x60;plan_limit&#x60;, &#x60;unlisted_on_airbnb&#x60; or &#x60;deactivated&#x60;), &#x60;lifecycleStatus&#x60;, &#x60;channels&#x60; and &#x60;updatedAt&#x60; — never &#x60;address&#x60; or &#x60;currency&#x60;. (default to 'active')
101
101
  # @option opts [String] :lifecycle_status Filter by lifecycle status (e.g. &#x60;live&#x60;, &#x60;draft&#x60;, &#x60;archived&#x60;). Pass &#x60;all&#x60; to disable the filter.
102
102
  # @option opts [String] :channel Filter to properties with an active link on the given OTA/channel (airbnb, booking, vrbo). Omit to include every channel. Each property also returns a &#x60;channels&#x60; array listing the OTAs it is published on.
103
103
  # @option opts [Time] :updated_since Incremental sync: return only records whose &#x60;updatedAt&#x60; is at or after this instant. This is the only filter on record **mutation** time — every &#x60;check_*&#x60; filter targets guest **stay** dates. **Accepted formats.** ISO 8601, with &#x60;Z&#x60; or a numeric offset — both work: - &#x60;2026-08-01T00:00:00Z&#x60; - &#x60;2026-08-01T00:00:00.123Z&#x60; - &#x60;2026-08-01T00:00:00+00:00&#x60; - &#x60;2026-08-01T02:30:00-07:00&#x60; (offset colon optional: &#x60;-0700&#x60;) - &#x60;2026-08-01T00:00&#x60; (seconds optional) - &#x60;2026-08-01T00:00:00&#x60; — no zone designator, interpreted as **UTC** - &#x60;2026-08-01&#x60; — date only, means midnight UTC Anything else returns 422 &#x60;invalid_params&#x60; naming the field; the value is never silently ignored. **Ordering changes when you pass this.** Results are ordered &#x60;updatedAt ASC, id ASC&#x60; (instead of the endpoint default) and the cursor keys on the same pair. That is required for correctness: under the default ordering a record amended mid-walk can move behind the cursor and never be emitted — which is exactly the event you are polling for. Ascending mutation time is monotonic with the cursor, so anything touched during a walk resurfaces later in it or on the next poll. **Cursors are not interchangeable between the two orderings.** Keep &#x60;updated_since&#x60; on every page of an incremental walk; replaying a cursor from the other ordering returns 422 rather than a page that silently skips rows. **Watermark.** The bound is inclusive (&#x60;updatedAt &gt;&#x3D; value&#x60;), so the last row of the final page is the watermark for the next poll — re-polling with it re-emits that row. Delivery is at-least-once; upsert by &#x60;id&#x60;.
@@ -116,7 +116,7 @@ module Repull
116
116
  # @option opts [String] :cursor Opaque cursor returned in the previous response&#39;s &#x60;pagination.nextCursor&#x60;. Omit to fetch the first page.
117
117
  # @option opts [Integer] :offset First-class alias for cursor-based pagination. Mutually exclusive with &#x60;cursor&#x60; — passing both returns 422. Accepts integers in &#x60;[0, 10000]&#x60;; deeper walks must use &#x60;cursor&#x60; (constant per-page cost). The response always includes &#x60;pagination.nextCursor&#x60; so consumers can switch from offset → cursor mid-walk for deep pagination without re-keying. (default to 0)
118
118
  # @option opts [String] :q Case-insensitive substring search on name, street, or city.
119
- # @option opts [String] :status Filter by status. Default returns active only; pass &#x60;inactive&#x60; to invert or &#x60;all&#x60; to include both. Inactive properties carry identity fields only — &#x60;id&#x60;, &#x60;name&#x60;, &#x60;status&#x60;, &#x60;lifecycleStatus&#x60;, &#x60;channels&#x60; and &#x60;updatedAt&#x60; — never &#x60;address&#x60;, &#x60;city&#x60; or &#x60;currency&#x60;. (default to 'active')
119
+ # @option opts [String] :status Filter by status. Default returns active only; pass &#x60;inactive&#x60; to invert or &#x60;all&#x60; to include both. Inactive properties carry identity fields only — &#x60;id&#x60;, &#x60;name&#x60;, &#x60;city&#x60;, &#x60;status&#x60;, &#x60;inactiveReason&#x60; (&#x60;plan_limit&#x60;, &#x60;unlisted_on_airbnb&#x60; or &#x60;deactivated&#x60;), &#x60;lifecycleStatus&#x60;, &#x60;channels&#x60; and &#x60;updatedAt&#x60; — never &#x60;address&#x60; or &#x60;currency&#x60;. (default to 'active')
120
120
  # @option opts [String] :lifecycle_status Filter by lifecycle status (e.g. &#x60;live&#x60;, &#x60;draft&#x60;, &#x60;archived&#x60;). Pass &#x60;all&#x60; to disable the filter.
121
121
  # @option opts [String] :channel Filter to properties with an active link on the given OTA/channel (airbnb, booking, vrbo). Omit to include every channel. Each property also returns a &#x60;channels&#x60; array listing the OTAs it is published on.
122
122
  # @option opts [Time] :updated_since Incremental sync: return only records whose &#x60;updatedAt&#x60; is at or after this instant. This is the only filter on record **mutation** time — every &#x60;check_*&#x60; filter targets guest **stay** dates. **Accepted formats.** ISO 8601, with &#x60;Z&#x60; or a numeric offset — both work: - &#x60;2026-08-01T00:00:00Z&#x60; - &#x60;2026-08-01T00:00:00.123Z&#x60; - &#x60;2026-08-01T00:00:00+00:00&#x60; - &#x60;2026-08-01T02:30:00-07:00&#x60; (offset colon optional: &#x60;-0700&#x60;) - &#x60;2026-08-01T00:00&#x60; (seconds optional) - &#x60;2026-08-01T00:00:00&#x60; — no zone designator, interpreted as **UTC** - &#x60;2026-08-01&#x60; — date only, means midnight UTC Anything else returns 422 &#x60;invalid_params&#x60; naming the field; the value is never silently ignored. **Ordering changes when you pass this.** Results are ordered &#x60;updatedAt ASC, id ASC&#x60; (instead of the endpoint default) and the cursor keys on the same pair. That is required for correctness: under the default ordering a record amended mid-walk can move behind the cursor and never be emitted — which is exactly the event you are polling for. Ascending mutation time is monotonic with the cursor, so anything touched during a walk resurfaces later in it or on the next poll. **Cursors are not interchangeable between the two orderings.** Keep &#x60;updated_since&#x60; on every page of an incremental walk; replaying a cursor from the other ordering returns 422 rather than a page that silently skips rows. **Watermark.** The bound is inclusive (&#x60;updatedAt &gt;&#x3D; value&#x60;), so the last row of the final page is the watermark for the next poll — re-polling with it re-emits that row. Delivery is at-least-once; upsert by &#x60;id&#x60;.