repull 0.2.14 → 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.
- checksums.yaml +4 -4
- data/lib/repull/api/airbnb_api.rb +1387 -152
- data/lib/repull/api/availability_api.rb +2 -2
- data/lib/repull/api/billing_api.rb +4 -4
- data/lib/repull/api/booking_com_api.rb +36 -27
- data/lib/repull/api/connect_api.rb +4 -4
- data/lib/repull/api/conversations_api.rb +398 -4
- data/lib/repull/api/guests_api.rb +2 -2
- data/lib/repull/api/listings_api.rb +97 -13
- data/lib/repull/api/reservations_api.rb +157 -6
- data/lib/repull/api/webhooks_api.rb +10 -3
- data/lib/repull/models/accept_reservation_request200_response.rb +321 -0
- data/lib/repull/models/account_created_event.rb +95 -31
- data/lib/repull/models/account_disconnected_event.rb +95 -31
- data/lib/repull/models/ai_operation_completed_event.rb +95 -31
- data/lib/repull/models/ai_operation_failed_event.rb +95 -31
- data/lib/repull/models/airbnb_account_freshness.rb +239 -0
- data/lib/repull/models/airbnb_alteration.rb +46 -2
- data/lib/repull/models/airbnb_alteration_create_request.rb +264 -0
- data/lib/repull/models/airbnb_connection.rb +69 -2
- data/lib/repull/models/airbnb_connection_host.rb +1 -1
- data/lib/repull/models/airbnb_content_write_response.rb +275 -0
- data/lib/repull/models/airbnb_data_freshness.rb +22 -10
- data/lib/repull/models/airbnb_description_write_request.rb +192 -0
- data/lib/repull/models/airbnb_description_write_request_description.rb +365 -0
- data/lib/repull/models/airbnb_listing.rb +12 -1
- data/lib/repull/models/airbnb_listing_action200_response.rb +105 -0
- data/lib/repull/models/airbnb_listing_action200_response_one_of.rb +157 -0
- data/lib/repull/models/airbnb_listing_action200_response_one_of1.rb +175 -0
- data/lib/repull/models/airbnb_listing_action_request.rb +2 -2
- data/lib/repull/models/airbnb_listing_details_response.rb +284 -0
- data/lib/repull/models/airbnb_listing_details_write_request.rb +209 -0
- data/lib/repull/models/airbnb_listing_details_write_request_check_in_option.rb +214 -0
- data/lib/repull/models/airbnb_listing_details_write_request_quiet_hours_inner.rb +190 -0
- data/lib/repull/models/airbnb_listing_lifecycle_response.rb +196 -0
- data/lib/repull/models/airbnb_permits_response.rb +163 -0
- data/lib/repull/models/airbnb_permits_response_cached_inner.rb +200 -0
- data/lib/repull/models/airbnb_permits_write_request.rb +176 -0
- data/lib/repull/models/airbnb_permits_write_request_permits_inner.rb +228 -0
- data/lib/repull/models/airbnb_permits_write_request_permits_inner_answers_inner.rb +198 -0
- data/lib/repull/models/airbnb_photo_position.rb +159 -0
- data/lib/repull/models/airbnb_publish_result.rb +263 -0
- data/lib/repull/models/airbnb_reservation.rb +23 -1
- data/lib/repull/models/{create_airbnb_alteration_request.rb → airbnb_reservation_action200_response.rb} +12 -50
- data/lib/repull/models/airbnb_reservation_action_request.rb +248 -0
- data/lib/repull/models/airbnb_reservation_list_response.rb +13 -4
- data/lib/repull/models/airbnb_review.rb +23 -1
- data/lib/repull/models/airbnb_review_list_response.rb +13 -4
- data/lib/repull/models/airbnb_safety_disclosure.rb +202 -0
- data/lib/repull/models/airbnb_safety_disclosures_response.rb +162 -0
- data/lib/repull/models/airbnb_safety_disclosures_write_request.rb +176 -0
- data/lib/repull/models/airbnb_thread.rb +23 -1
- data/lib/repull/models/airbnb_thread_list_response.rb +13 -4
- data/lib/repull/models/airbnb_transaction.rb +23 -1
- data/lib/repull/models/booking_availability_update.rb +4 -20
- data/lib/repull/models/booking_availability_update_date_range.rb +193 -0
- data/lib/repull/models/booking_availability_update_request.rb +14 -3
- data/lib/repull/models/booking_pricing_rate_update.rb +32 -4
- data/lib/repull/models/booking_pricing_rate_update_date_range.rb +3 -0
- data/lib/repull/models/booking_pricing_rate_update_restrictions.rb +10 -10
- data/lib/repull/models/booking_pricing_response.rb +16 -4
- data/lib/repull/models/booking_pricing_update_response.rb +82 -18
- data/lib/repull/models/booking_property.rb +107 -36
- data/lib/repull/models/booking_property_listings_inner.rb +244 -0
- data/lib/repull/models/booking_rate_write_occupancy.rb +187 -0
- data/lib/repull/models/booking_rate_write_price_half.rb +188 -0
- data/lib/repull/models/booking_rate_write_restriction_half.rb +212 -0
- data/lib/repull/models/booking_rate_write_verification.rb +200 -0
- data/lib/repull/models/booking_rate_write_verification_row.rb +196 -0
- data/lib/repull/models/booking_restriction_request_row.rb +199 -0
- data/lib/repull/models/booking_restriction_verification.rb +208 -0
- data/lib/repull/models/booking_restriction_verification_row.rb +203 -0
- data/lib/repull/models/booking_restriction_verification_row_booking_value.rb +105 -0
- data/lib/repull/models/booking_restriction_verification_row_expected.rb +105 -0
- data/lib/repull/models/booking_rooms_rates_response.rb +41 -7
- data/lib/repull/models/booking_rooms_rates_response_rooms_inner.rb +12 -1
- data/lib/repull/models/booking_rooms_rates_response_rooms_inner_rates_inner.rb +1 -0
- data/lib/repull/models/booking_upstream_failure.rb +204 -0
- data/lib/repull/models/calendar_updated_event.rb +95 -31
- data/lib/repull/models/conversation_message_attachment.rb +28 -1
- data/lib/repull/models/create_airbnb_listing_room_request.rb +315 -0
- data/lib/repull/models/create_airbnb_offer_request.rb +93 -8
- data/lib/repull/models/create_airbnb_offer_request_guest_details.rb +279 -0
- data/lib/repull/models/create_conversation_special_offer201_response.rb +293 -0
- data/lib/repull/models/create_conversation_special_offer201_response_guests.rb +189 -0
- data/lib/repull/models/create_conversation_special_offer_request.rb +263 -0
- data/lib/repull/models/create_conversation_special_offer_request_guests.rb +263 -0
- data/lib/repull/models/decline_reservation_request_request.rb +234 -0
- data/lib/repull/models/delete_airbnb_listing_photo200_response.rb +14 -4
- data/lib/repull/models/delete_airbnb_listing_room200_response.rb +157 -0
- data/lib/repull/models/error_error.rb +31 -1
- data/lib/repull/models/get_airbnb_booking_settings200_response.rb +190 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data.rb +246 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data_advance_notice.rb +172 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data_booking_window.rb +160 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data_cancellation.rb +203 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data_cancellation_non_refundable.rb +218 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data_check_in.rb +159 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data_check_in_start.rb +104 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data_check_out.rb +172 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data_instant_book.rb +206 -0
- data/lib/repull/models/get_airbnb_booking_settings200_response_data_preparation_time.rb +173 -0
- data/lib/repull/models/get_airbnb_listing_details200_response.rb +192 -0
- data/lib/repull/models/get_airbnb_offer200_response.rb +289 -0
- data/lib/repull/models/get_usage_summary200_response.rb +10 -1
- data/lib/repull/models/get_usage_summary200_response_limits.rb +11 -1
- data/lib/repull/models/get_usage_summary200_response_remaining.rb +11 -1
- data/lib/repull/models/get_usage_summary200_response_used.rb +10 -1
- data/lib/repull/models/get_usage_tier200_response.rb +10 -1
- data/lib/repull/models/get_usage_tier200_response_limits.rb +11 -1
- data/lib/repull/models/get_usage_tier200_response_remaining.rb +11 -1
- data/lib/repull/models/get_usage_tier200_response_used.rb +10 -1
- data/lib/repull/models/inquiry_created_event.rb +281 -0
- data/lib/repull/models/inquiry_created_payload.rb +185 -0
- data/lib/repull/models/inquiry_updated_event.rb +281 -0
- data/lib/repull/models/inquiry_updated_payload.rb +213 -0
- data/lib/repull/models/inquiry_webhook_object.rb +323 -0
- data/lib/repull/models/inquiry_webhook_object_expected_payout.rb +158 -0
- data/lib/repull/models/inquiry_webhook_object_guests.rb +188 -0
- data/lib/repull/models/list_airbnb_listing_permits200_response.rb +190 -0
- data/lib/repull/models/list_airbnb_listing_safety_disclosures200_response.rb +190 -0
- data/lib/repull/models/list_airbnb_thread_messages200_response.rb +170 -0
- data/lib/repull/models/list_airbnb_thread_messages200_response_data_inner.rb +274 -0
- data/lib/repull/models/list_airbnb_thread_messages200_response_pagination.rb +158 -0
- data/lib/repull/models/list_inquiries200_response.rb +192 -0
- data/lib/repull/models/list_inquiries200_response_data_inner.rb +418 -0
- data/lib/repull/models/list_inquiries200_response_data_inner_expected_payout.rb +159 -0
- data/lib/repull/models/list_inquiries200_response_data_inner_guests.rb +188 -0
- data/lib/repull/models/listing.rb +2 -1
- data/lib/repull/models/listing_content.rb +13 -2
- data/lib/repull/models/listing_content_update_request.rb +21 -2
- data/lib/repull/models/listing_content_update_request_details.rb +206 -0
- data/lib/repull/models/listing_content_update_request_policies.rb +95 -5
- data/lib/repull/models/listing_content_update_response.rb +1 -1
- data/lib/repull/models/listing_created_event.rb +95 -31
- data/lib/repull/models/listing_deleted_event.rb +95 -31
- data/lib/repull/models/listing_deleted_payload.rb +55 -21
- data/lib/repull/models/listing_publish_airbnb_response.rb +165 -0
- data/lib/repull/models/listing_pull_airbnb_request.rb +149 -0
- data/lib/repull/models/listing_pull_response.rb +231 -0
- data/lib/repull/models/listing_reactivated_event.rb +281 -0
- data/lib/repull/models/listing_suspended_event.rb +281 -0
- data/lib/repull/models/listing_suspension_payload.rb +202 -0
- data/lib/repull/models/listing_updated_event.rb +95 -31
- data/lib/repull/models/listing_updated_payload.rb +50 -22
- data/lib/repull/models/listing_webhook_object.rb +291 -0
- data/lib/repull/models/listing_webhook_object_address.rb +168 -0
- data/lib/repull/models/listing_webhook_object_channels_inner.rb +184 -0
- data/lib/repull/models/message.rb +1 -0
- data/lib/repull/models/payment_completed_event.rb +95 -31
- data/lib/repull/models/payment_completed_payload.rb +46 -44
- data/lib/repull/models/payment_refunded_event.rb +95 -31
- data/lib/repull/models/payment_refunded_payload.rb +46 -44
- data/lib/repull/models/payment_webhook_object.rb +351 -0
- data/lib/repull/models/preapprove_conversation201_response.rb +253 -0
- data/lib/repull/models/preapprove_conversation_request.rb +150 -0
- data/lib/repull/models/publish_section_error.rb +232 -0
- data/lib/repull/models/reorder_airbnb_listing_photos200_response.rb +191 -0
- data/lib/repull/models/reorder_airbnb_listing_photos200_response_data.rb +172 -0
- data/lib/repull/models/reorder_airbnb_listing_photos_request.rb +185 -0
- data/lib/repull/models/replay_webhook_delivery_request.rb +150 -0
- data/lib/repull/models/repull_ping_event.rb +95 -31
- data/lib/repull/models/reservation.rb +44 -2
- data/lib/repull/models/reservation_alteration_created_event.rb +95 -31
- data/lib/repull/models/reservation_alteration_responded_event.rb +95 -31
- data/lib/repull/models/reservation_cancelled_event.rb +95 -31
- data/lib/repull/models/reservation_created_event.rb +95 -32
- data/lib/repull/models/reservation_message_received_event.rb +95 -31
- data/lib/repull/models/reservation_message_received_payload.rb +17 -4
- data/lib/repull/models/reservation_request_created_event.rb +281 -0
- data/lib/repull/models/reservation_request_created_payload.rb +224 -0
- data/lib/repull/models/reservation_request_updated_event.rb +281 -0
- data/lib/repull/models/reservation_request_updated_payload.rb +251 -0
- data/lib/repull/models/reservation_updated_event.rb +95 -31
- data/lib/repull/models/reservation_webhook_object.rb +38 -5
- data/lib/repull/models/review_created_event.rb +95 -31
- data/lib/repull/models/review_responded_event.rb +95 -31
- data/lib/repull/models/send_airbnb_message201_response.rb +104 -0
- data/lib/repull/models/send_airbnb_message_request.rb +4 -20
- data/lib/repull/models/send_message_attachment.rb +225 -0
- data/lib/repull/models/send_message_part.rb +201 -0
- data/lib/repull/models/send_message_request.rb +44 -19
- data/lib/repull/models/send_message_response.rb +29 -5
- data/lib/repull/models/sent_attachment.rb +196 -0
- data/lib/repull/models/set_airbnb_listing_cover_photo200_response.rb +191 -0
- data/lib/repull/models/set_airbnb_listing_cover_photo200_response_data.rb +171 -0
- data/lib/repull/models/set_airbnb_listing_cover_photo_request.rb +165 -0
- data/lib/repull/models/update_airbnb_booking_settings200_response.rb +164 -0
- data/lib/repull/models/update_airbnb_booking_settings200_response_data.rb +205 -0
- data/lib/repull/models/update_airbnb_booking_settings_request.rb +202 -0
- data/lib/repull/models/update_airbnb_booking_settings_request_advance_notice.rb +183 -0
- data/lib/repull/models/update_airbnb_booking_settings_request_booking_window.rb +183 -0
- data/lib/repull/models/update_airbnb_booking_settings_request_cancellation.rb +201 -0
- data/lib/repull/models/update_airbnb_booking_settings_request_cancellation_non_refundable.rb +183 -0
- data/lib/repull/models/update_airbnb_booking_settings_request_check_in.rb +159 -0
- data/lib/repull/models/update_airbnb_booking_settings_request_check_out.rb +182 -0
- data/lib/repull/models/update_airbnb_booking_settings_request_instant_book.rb +203 -0
- data/lib/repull/models/update_airbnb_booking_settings_request_preparation_time.rb +182 -0
- data/lib/repull/models/update_airbnb_listing_amenities200_response.rb +191 -0
- data/lib/repull/models/update_airbnb_listing_amenities200_response_data.rb +158 -0
- data/lib/repull/models/update_airbnb_listing_amenities_request.rb +199 -0
- data/lib/repull/models/update_airbnb_listing_amenities_request_accessibility_amenities_inner.rb +246 -0
- data/lib/repull/models/update_airbnb_listing_amenities_request_amenities_inner.rb +218 -0
- data/lib/repull/models/update_airbnb_listing_permits200_response.rb +168 -0
- data/lib/repull/models/update_airbnb_listing_photo200_response.rb +194 -0
- data/lib/repull/models/update_airbnb_listing_photo_request.rb +242 -0
- data/lib/repull/models/update_airbnb_listing_room200_response.rb +194 -0
- data/lib/repull/models/update_airbnb_listing_room_request.rb +293 -0
- data/lib/repull/models/update_airbnb_listing_room_request_beds_inner.rb +209 -0
- data/lib/repull/models/update_airbnb_listing_room_request_room_amenities_inner.rb +182 -0
- data/lib/repull/models/update_airbnb_listing_room_request_room_amenities_inner_value.rb +105 -0
- data/lib/repull/models/update_airbnb_listing_safety_disclosures200_response.rb +180 -0
- data/lib/repull/models/upload_airbnb_listing_photos_request.rb +184 -0
- data/lib/repull/models/upload_airbnb_listing_photos_request_photos_inner.rb +305 -0
- data/lib/repull/models/upload_airbnb_listing_photos_request_photos_inner_listing_id.rb +105 -0
- data/lib/repull/models/usage_quota_warning_event.rb +281 -0
- data/lib/repull/models/usage_quota_warning_payload.rb +224 -0
- data/lib/repull/models/usage_quota_warning_payload_top_operation.rb +167 -0
- data/lib/repull/models/webhook_event.rb +17 -3
- data/lib/repull/models/webhook_event_account.rb +171 -0
- data/lib/repull/models/webhook_event_type.rb +8 -1
- data/lib/repull/models/withdraw_conversation_special_offer200_response.rb +240 -0
- data/lib/repull/version.rb +1 -1
- data/lib/repull.rb +138 -1
- data/openapi/v1.json +19578 -10662
- data/scripts/regen.sh +1 -1
- metadata +140 -3
|
@@ -19,6 +19,87 @@ module Repull
|
|
|
19
19
|
def initialize(api_client = ApiClient.default)
|
|
20
20
|
@api_client = api_client
|
|
21
21
|
end
|
|
22
|
+
# Send a special offer
|
|
23
|
+
# Send the guest on this conversation an Airbnb special offer: your own dates, guest count and total price. The guest has 24 hours to book it. Use it to answer an inquiry with different terms, or to make a returning guest a custom price. To accept the guest’s own dates and price as they asked, pre-approve instead (`POST /v1/conversations/{id}/pre-approval`). `listingId` is optional: omit it to offer the listing the guest asked about. It is a **Repull** listing id; Repull sends Airbnb its own listing id, using the link that belongs to this conversation’s Airbnb account. `totalPrice` is the whole stay, in the listing’s Airbnb currency — Airbnb does not take a currency on an offer. **Airbnb only**, and only for listings connected to Airbnb directly; anything else is `422 channel_not_supported` and nothing is sent. Runs the same action as the Vanio dashboard, so the inquiry is marked `special_offer_sent`. An offer Airbnb refuses is never a `201`: dates that are taken, a price below Airbnb’s minimum, too many guests and the like are `422 airbnb_rejected` with Airbnb’s own reason in `message`. 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. Without it, a retry after a timeout can send the guest two offers. Read or withdraw the offer with `GET` / `DELETE /v1/conversations/{id}/special-offers/{offerId}`.
|
|
24
|
+
# @param id [Integer] Repull conversation id (from `GET /v1/conversations` or `conversationId` on `GET /v1/inquiries`) — not the Airbnb thread id.
|
|
25
|
+
# @param create_conversation_special_offer_request [CreateConversationSpecialOfferRequest]
|
|
26
|
+
# @param [Hash] opts the optional parameters
|
|
27
|
+
# @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.
|
|
28
|
+
# @return [CreateConversationSpecialOffer201Response]
|
|
29
|
+
def create_conversation_special_offer(id, create_conversation_special_offer_request, opts = {})
|
|
30
|
+
data, _status_code, _headers = create_conversation_special_offer_with_http_info(id, create_conversation_special_offer_request, opts)
|
|
31
|
+
data
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Send a special offer
|
|
35
|
+
# Send the guest on this conversation an Airbnb special offer: your own dates, guest count and total price. The guest has 24 hours to book it. Use it to answer an inquiry with different terms, or to make a returning guest a custom price. To accept the guest’s own dates and price as they asked, pre-approve instead (`POST /v1/conversations/{id}/pre-approval`). `listingId` is optional: omit it to offer the listing the guest asked about. It is a **Repull** listing id; Repull sends Airbnb its own listing id, using the link that belongs to this conversation’s Airbnb account. `totalPrice` is the whole stay, in the listing’s Airbnb currency — Airbnb does not take a currency on an offer. **Airbnb only**, and only for listings connected to Airbnb directly; anything else is `422 channel_not_supported` and nothing is sent. Runs the same action as the Vanio dashboard, so the inquiry is marked `special_offer_sent`. An offer Airbnb refuses is never a `201`: dates that are taken, a price below Airbnb’s minimum, too many guests and the like are `422 airbnb_rejected` with Airbnb’s own reason in `message`. 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. Without it, a retry after a timeout can send the guest two offers. Read or withdraw the offer with `GET` / `DELETE /v1/conversations/{id}/special-offers/{offerId}`.
|
|
36
|
+
# @param id [Integer] Repull conversation id (from `GET /v1/conversations` or `conversationId` on `GET /v1/inquiries`) — not the Airbnb thread id.
|
|
37
|
+
# @param create_conversation_special_offer_request [CreateConversationSpecialOfferRequest]
|
|
38
|
+
# @param [Hash] opts the optional parameters
|
|
39
|
+
# @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.
|
|
40
|
+
# @return [Array<(CreateConversationSpecialOffer201Response, Integer, Hash)>] CreateConversationSpecialOffer201Response data, response status code and response headers
|
|
41
|
+
def create_conversation_special_offer_with_http_info(id, create_conversation_special_offer_request, opts = {})
|
|
42
|
+
if @api_client.config.debugging
|
|
43
|
+
@api_client.config.logger.debug 'Calling API: ConversationsApi.create_conversation_special_offer ...'
|
|
44
|
+
end
|
|
45
|
+
# verify the required parameter 'id' is set
|
|
46
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
47
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling ConversationsApi.create_conversation_special_offer"
|
|
48
|
+
end
|
|
49
|
+
# verify the required parameter 'create_conversation_special_offer_request' is set
|
|
50
|
+
if @api_client.config.client_side_validation && create_conversation_special_offer_request.nil?
|
|
51
|
+
fail ArgumentError, "Missing the required parameter 'create_conversation_special_offer_request' when calling ConversationsApi.create_conversation_special_offer"
|
|
52
|
+
end
|
|
53
|
+
if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
|
|
54
|
+
fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ConversationsApi.create_conversation_special_offer, the character length must be smaller than or equal to 255.'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# resource path
|
|
58
|
+
local_var_path = '/v1/conversations/{id}/special-offers'.sub('{id}', CGI.escape(id.to_s))
|
|
59
|
+
|
|
60
|
+
# query parameters
|
|
61
|
+
query_params = opts[:query_params] || {}
|
|
62
|
+
|
|
63
|
+
# header parameters
|
|
64
|
+
header_params = opts[:header_params] || {}
|
|
65
|
+
# HTTP header 'Accept' (if needed)
|
|
66
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
67
|
+
# HTTP header 'Content-Type'
|
|
68
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
69
|
+
if !content_type.nil?
|
|
70
|
+
header_params['Content-Type'] = content_type
|
|
71
|
+
end
|
|
72
|
+
header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
|
|
73
|
+
|
|
74
|
+
# form parameters
|
|
75
|
+
form_params = opts[:form_params] || {}
|
|
76
|
+
|
|
77
|
+
# http body (model)
|
|
78
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(create_conversation_special_offer_request)
|
|
79
|
+
|
|
80
|
+
# return_type
|
|
81
|
+
return_type = opts[:debug_return_type] || 'CreateConversationSpecialOffer201Response'
|
|
82
|
+
|
|
83
|
+
# auth_names
|
|
84
|
+
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
85
|
+
|
|
86
|
+
new_options = opts.merge(
|
|
87
|
+
:operation => :"ConversationsApi.create_conversation_special_offer",
|
|
88
|
+
:header_params => header_params,
|
|
89
|
+
:query_params => query_params,
|
|
90
|
+
:form_params => form_params,
|
|
91
|
+
:body => post_body,
|
|
92
|
+
:auth_names => auth_names,
|
|
93
|
+
:return_type => return_type
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
|
|
97
|
+
if @api_client.config.debugging
|
|
98
|
+
@api_client.config.logger.debug "API called: ConversationsApi#create_conversation_special_offer\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
99
|
+
end
|
|
100
|
+
return data, status_code, headers
|
|
101
|
+
end
|
|
102
|
+
|
|
22
103
|
# Get conversation detail
|
|
23
104
|
# Returns one thread (the same shape as the list-row `Conversation`) plus expanded `host` (from `airbnb_hosts` for the thread's `host_id`) and `guest` (resolved via the thread's `reservation_id`, with up to 50 contacts) blocks. A conversation that belongs to an inactive listing (by the thread's listing or its reservation's listing) returns `403 listing_inactive`. Inactive listings keep syncing; activate the listing to use it here.
|
|
24
105
|
# @param id [Integer] Internal Repull thread id.
|
|
@@ -85,6 +166,75 @@ module Repull
|
|
|
85
166
|
return data, status_code, headers
|
|
86
167
|
end
|
|
87
168
|
|
|
169
|
+
# Get a special offer
|
|
170
|
+
# Read a special offer on this conversation back from Airbnb — typically to check its `status` (`active` until the guest books it, it expires, or you withdraw it). Read live from Airbnb with the conversation’s own Airbnb account.
|
|
171
|
+
# @param id [Integer] Repull conversation id (from `GET /v1/conversations` or `conversationId` on `GET /v1/inquiries`) — not the Airbnb thread id.
|
|
172
|
+
# @param offer_id [String] The special offer’s `id`, as returned by `POST /v1/conversations/{id}/special-offers`.
|
|
173
|
+
# @param [Hash] opts the optional parameters
|
|
174
|
+
# @return [CreateConversationSpecialOffer201Response]
|
|
175
|
+
def get_conversation_special_offer(id, offer_id, opts = {})
|
|
176
|
+
data, _status_code, _headers = get_conversation_special_offer_with_http_info(id, offer_id, opts)
|
|
177
|
+
data
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Get a special offer
|
|
181
|
+
# Read a special offer on this conversation back from Airbnb — typically to check its `status` (`active` until the guest books it, it expires, or you withdraw it). Read live from Airbnb with the conversation’s own Airbnb account.
|
|
182
|
+
# @param id [Integer] Repull conversation id (from `GET /v1/conversations` or `conversationId` on `GET /v1/inquiries`) — not the Airbnb thread id.
|
|
183
|
+
# @param offer_id [String] The special offer’s `id`, as returned by `POST /v1/conversations/{id}/special-offers`.
|
|
184
|
+
# @param [Hash] opts the optional parameters
|
|
185
|
+
# @return [Array<(CreateConversationSpecialOffer201Response, Integer, Hash)>] CreateConversationSpecialOffer201Response data, response status code and response headers
|
|
186
|
+
def get_conversation_special_offer_with_http_info(id, offer_id, opts = {})
|
|
187
|
+
if @api_client.config.debugging
|
|
188
|
+
@api_client.config.logger.debug 'Calling API: ConversationsApi.get_conversation_special_offer ...'
|
|
189
|
+
end
|
|
190
|
+
# verify the required parameter 'id' is set
|
|
191
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
192
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling ConversationsApi.get_conversation_special_offer"
|
|
193
|
+
end
|
|
194
|
+
# verify the required parameter 'offer_id' is set
|
|
195
|
+
if @api_client.config.client_side_validation && offer_id.nil?
|
|
196
|
+
fail ArgumentError, "Missing the required parameter 'offer_id' when calling ConversationsApi.get_conversation_special_offer"
|
|
197
|
+
end
|
|
198
|
+
# resource path
|
|
199
|
+
local_var_path = '/v1/conversations/{id}/special-offers/{offerId}'.sub('{id}', CGI.escape(id.to_s)).sub('{offerId}', CGI.escape(offer_id.to_s))
|
|
200
|
+
|
|
201
|
+
# query parameters
|
|
202
|
+
query_params = opts[:query_params] || {}
|
|
203
|
+
|
|
204
|
+
# header parameters
|
|
205
|
+
header_params = opts[:header_params] || {}
|
|
206
|
+
# HTTP header 'Accept' (if needed)
|
|
207
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
208
|
+
|
|
209
|
+
# form parameters
|
|
210
|
+
form_params = opts[:form_params] || {}
|
|
211
|
+
|
|
212
|
+
# http body (model)
|
|
213
|
+
post_body = opts[:debug_body]
|
|
214
|
+
|
|
215
|
+
# return_type
|
|
216
|
+
return_type = opts[:debug_return_type] || 'CreateConversationSpecialOffer201Response'
|
|
217
|
+
|
|
218
|
+
# auth_names
|
|
219
|
+
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
220
|
+
|
|
221
|
+
new_options = opts.merge(
|
|
222
|
+
:operation => :"ConversationsApi.get_conversation_special_offer",
|
|
223
|
+
:header_params => header_params,
|
|
224
|
+
:query_params => query_params,
|
|
225
|
+
:form_params => form_params,
|
|
226
|
+
:body => post_body,
|
|
227
|
+
:auth_names => auth_names,
|
|
228
|
+
:return_type => return_type
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
|
|
232
|
+
if @api_client.config.debugging
|
|
233
|
+
@api_client.config.logger.debug "API called: ConversationsApi#get_conversation_special_offer\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
234
|
+
end
|
|
235
|
+
return data, status_code, headers
|
|
236
|
+
end
|
|
237
|
+
|
|
88
238
|
# List messages in a conversation
|
|
89
239
|
# Cursor-paginated messages within one thread. Defaults to newest-first (`?order=desc`); pass `?order=asc` for chronological replay. Use `pagination.nextCursor` from one response as the `cursor` query param of the next request. `?offset=` is also accepted as a first-class alias for shallow paging (0..10000) — see the `offset` parameter below. Mutually exclusive with `cursor`. A conversation that belongs to an inactive listing returns `403 listing_inactive`. Inactive listings keep syncing; activate the listing to use it here.
|
|
90
240
|
# @param id [Integer] Internal Repull thread id.
|
|
@@ -282,12 +432,187 @@ module Repull
|
|
|
282
432
|
return data, status_code, headers
|
|
283
433
|
end
|
|
284
434
|
|
|
435
|
+
# List inquiries
|
|
436
|
+
# Airbnb inquiries — guests asking about dates before booking — newest first. By default only `open` ones: nobody has answered and the stay is still ahead. Answer one with `POST /v1/conversations/{conversationId}/pre-approval` (accept their dates and price) or `POST /v1/conversations/{conversationId}/special-offers` (your own terms). Booking **requests** are not inquiries: they are reservations with status `pending` — list them with `GET /v1/reservations?status=pending` and answer with `POST /v1/reservations/{id}/accept` or `/decline`. **Pagination:** pass `pagination.nextCursor` back as `?cursor=` until `pagination.hasMore` is `false`. `?offset=` also works (0..10000). `limit` defaults to 50, max 100. Inquiries on inactive listings are left out; `?listing_id=` naming an inactive listing returns `403 listing_inactive`. `X-Account-Id` narrows to one connected account.
|
|
437
|
+
# @param [Hash] opts the optional parameters
|
|
438
|
+
# @option opts [String] :status Which inquiries to return. `all` returns every one. (default to 'open')
|
|
439
|
+
# @option opts [Integer] :listing_id Only inquiries about this Repull listing.
|
|
440
|
+
# @option opts [Integer] :conversation_id The inquiry on one conversation — combine with `status=all` to see it whatever its state.
|
|
441
|
+
# @option opts [Integer] :limit Max inquiries per page (default 50, cap 100; over the cap returns 422). (default to 50)
|
|
442
|
+
# @option opts [String] :cursor Opaque base64 cursor returned in the previous response's `pagination.nextCursor`. Omit to fetch the first page.
|
|
443
|
+
# @option opts [Integer] :offset First-class alias for cursor-based pagination. Mutually exclusive with `cursor` — passing both returns 422. Accepts integers in `[0, 10000]`; deeper walks must use `cursor` (constant per-page cost). The response always includes `pagination.nextCursor` so consumers can switch from offset → cursor mid-walk for deep pagination without re-keying. (default to 0)
|
|
444
|
+
# @option opts [Boolean] :include_total When `true` (default), the response's `pagination.total` carries the count of rows matching the current filter, across all pages. Pass `false` to skip the count for very large workspaces where the per-page COUNT(*) cost matters. (default to true)
|
|
445
|
+
# @return [ListInquiries200Response]
|
|
446
|
+
def list_inquiries(opts = {})
|
|
447
|
+
data, _status_code, _headers = list_inquiries_with_http_info(opts)
|
|
448
|
+
data
|
|
449
|
+
end
|
|
450
|
+
|
|
451
|
+
# List inquiries
|
|
452
|
+
# Airbnb inquiries — guests asking about dates before booking — newest first. By default only `open` ones: nobody has answered and the stay is still ahead. Answer one with `POST /v1/conversations/{conversationId}/pre-approval` (accept their dates and price) or `POST /v1/conversations/{conversationId}/special-offers` (your own terms). Booking **requests** are not inquiries: they are reservations with status `pending` — list them with `GET /v1/reservations?status=pending` and answer with `POST /v1/reservations/{id}/accept` or `/decline`. **Pagination:** pass `pagination.nextCursor` back as `?cursor=` until `pagination.hasMore` is `false`. `?offset=` also works (0..10000). `limit` defaults to 50, max 100. Inquiries on inactive listings are left out; `?listing_id=` naming an inactive listing returns `403 listing_inactive`. `X-Account-Id` narrows to one connected account.
|
|
453
|
+
# @param [Hash] opts the optional parameters
|
|
454
|
+
# @option opts [String] :status Which inquiries to return. `all` returns every one. (default to 'open')
|
|
455
|
+
# @option opts [Integer] :listing_id Only inquiries about this Repull listing.
|
|
456
|
+
# @option opts [Integer] :conversation_id The inquiry on one conversation — combine with `status=all` to see it whatever its state.
|
|
457
|
+
# @option opts [Integer] :limit Max inquiries per page (default 50, cap 100; over the cap returns 422). (default to 50)
|
|
458
|
+
# @option opts [String] :cursor Opaque base64 cursor returned in the previous response's `pagination.nextCursor`. Omit to fetch the first page.
|
|
459
|
+
# @option opts [Integer] :offset First-class alias for cursor-based pagination. Mutually exclusive with `cursor` — passing both returns 422. Accepts integers in `[0, 10000]`; deeper walks must use `cursor` (constant per-page cost). The response always includes `pagination.nextCursor` so consumers can switch from offset → cursor mid-walk for deep pagination without re-keying. (default to 0)
|
|
460
|
+
# @option opts [Boolean] :include_total When `true` (default), the response's `pagination.total` carries the count of rows matching the current filter, across all pages. Pass `false` to skip the count for very large workspaces where the per-page COUNT(*) cost matters. (default to true)
|
|
461
|
+
# @return [Array<(ListInquiries200Response, Integer, Hash)>] ListInquiries200Response data, response status code and response headers
|
|
462
|
+
def list_inquiries_with_http_info(opts = {})
|
|
463
|
+
if @api_client.config.debugging
|
|
464
|
+
@api_client.config.logger.debug 'Calling API: ConversationsApi.list_inquiries ...'
|
|
465
|
+
end
|
|
466
|
+
allowable_values = ["open", "pre_approved", "special_offer_sent", "booked", "expired", "declined", "not_possible", "all"]
|
|
467
|
+
if @api_client.config.client_side_validation && opts[:'status'] && !allowable_values.include?(opts[:'status'])
|
|
468
|
+
fail ArgumentError, "invalid value for \"status\", must be one of #{allowable_values}"
|
|
469
|
+
end
|
|
470
|
+
if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] > 100
|
|
471
|
+
fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling ConversationsApi.list_inquiries, must be smaller than or equal to 100.'
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
if @api_client.config.client_side_validation && !opts[:'limit'].nil? && opts[:'limit'] < 1
|
|
475
|
+
fail ArgumentError, 'invalid value for "opts[:"limit"]" when calling ConversationsApi.list_inquiries, must be greater than or equal to 1.'
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
if @api_client.config.client_side_validation && !opts[:'offset'].nil? && opts[:'offset'] > 10000
|
|
479
|
+
fail ArgumentError, 'invalid value for "opts[:"offset"]" when calling ConversationsApi.list_inquiries, must be smaller than or equal to 10000.'
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
if @api_client.config.client_side_validation && !opts[:'offset'].nil? && opts[:'offset'] < 0
|
|
483
|
+
fail ArgumentError, 'invalid value for "opts[:"offset"]" when calling ConversationsApi.list_inquiries, must be greater than or equal to 0.'
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
# resource path
|
|
487
|
+
local_var_path = '/v1/inquiries'
|
|
488
|
+
|
|
489
|
+
# query parameters
|
|
490
|
+
query_params = opts[:query_params] || {}
|
|
491
|
+
query_params[:'status'] = opts[:'status'] if !opts[:'status'].nil?
|
|
492
|
+
query_params[:'listing_id'] = opts[:'listing_id'] if !opts[:'listing_id'].nil?
|
|
493
|
+
query_params[:'conversation_id'] = opts[:'conversation_id'] if !opts[:'conversation_id'].nil?
|
|
494
|
+
query_params[:'limit'] = opts[:'limit'] if !opts[:'limit'].nil?
|
|
495
|
+
query_params[:'cursor'] = opts[:'cursor'] if !opts[:'cursor'].nil?
|
|
496
|
+
query_params[:'offset'] = opts[:'offset'] if !opts[:'offset'].nil?
|
|
497
|
+
query_params[:'include_total'] = opts[:'include_total'] if !opts[:'include_total'].nil?
|
|
498
|
+
|
|
499
|
+
# header parameters
|
|
500
|
+
header_params = opts[:header_params] || {}
|
|
501
|
+
# HTTP header 'Accept' (if needed)
|
|
502
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
503
|
+
|
|
504
|
+
# form parameters
|
|
505
|
+
form_params = opts[:form_params] || {}
|
|
506
|
+
|
|
507
|
+
# http body (model)
|
|
508
|
+
post_body = opts[:debug_body]
|
|
509
|
+
|
|
510
|
+
# return_type
|
|
511
|
+
return_type = opts[:debug_return_type] || 'ListInquiries200Response'
|
|
512
|
+
|
|
513
|
+
# auth_names
|
|
514
|
+
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
515
|
+
|
|
516
|
+
new_options = opts.merge(
|
|
517
|
+
:operation => :"ConversationsApi.list_inquiries",
|
|
518
|
+
:header_params => header_params,
|
|
519
|
+
:query_params => query_params,
|
|
520
|
+
:form_params => form_params,
|
|
521
|
+
:body => post_body,
|
|
522
|
+
:auth_names => auth_names,
|
|
523
|
+
:return_type => return_type
|
|
524
|
+
)
|
|
525
|
+
|
|
526
|
+
data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
|
|
527
|
+
if @api_client.config.debugging
|
|
528
|
+
@api_client.config.logger.debug "API called: ConversationsApi#list_inquiries\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
529
|
+
end
|
|
530
|
+
return data, status_code, headers
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
# Pre-approve an inquiry
|
|
534
|
+
# Pre-approve the Airbnb inquiry on this conversation: the guest who asked about dates may now book them at the listed price, without waiting on you. To change the dates, guests or price, send a special offer instead (`POST /v1/conversations/{id}/special-offers`). Find inquiries that need an answer with `GET /v1/inquiries` (default `status=open`); each carries the `conversationId` to use here. **Airbnb only**, and only for listings connected to Airbnb directly. A Booking.com, VRBO or direct-booking conversation, or an Airbnb one relayed through a PMS (Hostaway, Guesty), returns `422 channel_not_supported` and nothing is sent. Runs the same action as the Vanio dashboard’s Pre-approve button, so the inquiry is marked `pre_approved` everywhere. An Airbnb refusal is never reported as a success: an inquiry that already moved on is `409 inquiry_no_longer_open`, an expired one `409 inquiry_expired`, a conversation that already has a booking `409 conversation_already_booked`. 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.
|
|
535
|
+
# @param id [Integer] Repull conversation id (from `GET /v1/conversations` or `conversationId` on `GET /v1/inquiries`) — not the Airbnb thread id.
|
|
536
|
+
# @param [Hash] opts the optional parameters
|
|
537
|
+
# @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.
|
|
538
|
+
# @option opts [PreapproveConversationRequest] :preapprove_conversation_request
|
|
539
|
+
# @return [PreapproveConversation201Response]
|
|
540
|
+
def preapprove_conversation(id, opts = {})
|
|
541
|
+
data, _status_code, _headers = preapprove_conversation_with_http_info(id, opts)
|
|
542
|
+
data
|
|
543
|
+
end
|
|
544
|
+
|
|
545
|
+
# Pre-approve an inquiry
|
|
546
|
+
# Pre-approve the Airbnb inquiry on this conversation: the guest who asked about dates may now book them at the listed price, without waiting on you. To change the dates, guests or price, send a special offer instead (`POST /v1/conversations/{id}/special-offers`). Find inquiries that need an answer with `GET /v1/inquiries` (default `status=open`); each carries the `conversationId` to use here. **Airbnb only**, and only for listings connected to Airbnb directly. A Booking.com, VRBO or direct-booking conversation, or an Airbnb one relayed through a PMS (Hostaway, Guesty), returns `422 channel_not_supported` and nothing is sent. Runs the same action as the Vanio dashboard’s Pre-approve button, so the inquiry is marked `pre_approved` everywhere. An Airbnb refusal is never reported as a success: an inquiry that already moved on is `409 inquiry_no_longer_open`, an expired one `409 inquiry_expired`, a conversation that already has a booking `409 conversation_already_booked`. 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.
|
|
547
|
+
# @param id [Integer] Repull conversation id (from `GET /v1/conversations` or `conversationId` on `GET /v1/inquiries`) — not the Airbnb thread id.
|
|
548
|
+
# @param [Hash] opts the optional parameters
|
|
549
|
+
# @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.
|
|
550
|
+
# @option opts [PreapproveConversationRequest] :preapprove_conversation_request
|
|
551
|
+
# @return [Array<(PreapproveConversation201Response, Integer, Hash)>] PreapproveConversation201Response data, response status code and response headers
|
|
552
|
+
def preapprove_conversation_with_http_info(id, opts = {})
|
|
553
|
+
if @api_client.config.debugging
|
|
554
|
+
@api_client.config.logger.debug 'Calling API: ConversationsApi.preapprove_conversation ...'
|
|
555
|
+
end
|
|
556
|
+
# verify the required parameter 'id' is set
|
|
557
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
558
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling ConversationsApi.preapprove_conversation"
|
|
559
|
+
end
|
|
560
|
+
if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
|
|
561
|
+
fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling ConversationsApi.preapprove_conversation, the character length must be smaller than or equal to 255.'
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
# resource path
|
|
565
|
+
local_var_path = '/v1/conversations/{id}/pre-approval'.sub('{id}', CGI.escape(id.to_s))
|
|
566
|
+
|
|
567
|
+
# query parameters
|
|
568
|
+
query_params = opts[:query_params] || {}
|
|
569
|
+
|
|
570
|
+
# header parameters
|
|
571
|
+
header_params = opts[:header_params] || {}
|
|
572
|
+
# HTTP header 'Accept' (if needed)
|
|
573
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
574
|
+
# HTTP header 'Content-Type'
|
|
575
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
576
|
+
if !content_type.nil?
|
|
577
|
+
header_params['Content-Type'] = content_type
|
|
578
|
+
end
|
|
579
|
+
header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
|
|
580
|
+
|
|
581
|
+
# form parameters
|
|
582
|
+
form_params = opts[:form_params] || {}
|
|
583
|
+
|
|
584
|
+
# http body (model)
|
|
585
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(opts[:'preapprove_conversation_request'])
|
|
586
|
+
|
|
587
|
+
# return_type
|
|
588
|
+
return_type = opts[:debug_return_type] || 'PreapproveConversation201Response'
|
|
589
|
+
|
|
590
|
+
# auth_names
|
|
591
|
+
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
592
|
+
|
|
593
|
+
new_options = opts.merge(
|
|
594
|
+
:operation => :"ConversationsApi.preapprove_conversation",
|
|
595
|
+
:header_params => header_params,
|
|
596
|
+
:query_params => query_params,
|
|
597
|
+
:form_params => form_params,
|
|
598
|
+
:body => post_body,
|
|
599
|
+
:auth_names => auth_names,
|
|
600
|
+
:return_type => return_type
|
|
601
|
+
)
|
|
602
|
+
|
|
603
|
+
data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
|
|
604
|
+
if @api_client.config.debugging
|
|
605
|
+
@api_client.config.logger.debug "API called: ConversationsApi#preapprove_conversation\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
606
|
+
end
|
|
607
|
+
return data, status_code, headers
|
|
608
|
+
end
|
|
609
|
+
|
|
285
610
|
# Send a message to the guest
|
|
286
|
-
# Sends a message to the guest on this conversation and records it in the thread. Omit `channel` and the message goes out on whichever channel the conversation already uses (Airbnb, Booking.com, SMS, email or the direct-booking site) — that is the right default. Pass `channel` only to force a specific one. The message is attributed to the API, not to Vanio AI: it is recorded with `aiGenerated` false so an API send is never counted as an automated reply. ### Airbnb rewrites links — check `contentRewritten` Airbnb rejects guest messages containing a link, an email address or a phone number, and names the offending text. When that happens the offending fragment is stripped and the remainder is re-sent once, which means **the guest receives a message that is not the one you wrote**. Reporting that as a plain success would be a lie, so every response carries `contentRewritten`; when it is `true`, `deliveredContent` is the text that actually reached the guest. Check it before assuming your message went out verbatim. When the text cannot be salvaged (the link is most of the message) nothing is delivered and the call returns `422 message_not_sent` with the channel's verbatim refusal in `statusReason`. Send `Idempotency-Key` — without it, retrying after a network timeout sends the guest the same message twice. **Inactive listings:** a conversation that belongs to an inactive listing returns `403 listing_inactive` and no message is sent. Activate the listing first.
|
|
611
|
+
# Sends a message to the guest on this conversation and records it in the thread. Omit `channel` and the message goes out on whichever channel the conversation already uses (Airbnb, Booking.com, SMS, email or the direct-booking site) — that is the right default. Pass `channel` only to force a specific one. The message is attributed to the API, not to Vanio AI: it is recorded with `aiGenerated` false so an API send is never counted as an automated reply. ### Airbnb rewrites links — check `contentRewritten` Airbnb rejects guest messages containing a link, an email address or a phone number, and names the offending text. When that happens the offending fragment is stripped and the remainder is re-sent once, which means **the guest receives a message that is not the one you wrote**. Reporting that as a plain success would be a lie, so every response carries `contentRewritten`; when it is `true`, `deliveredContent` is the text that actually reached the guest. Check it before assuming your message went out verbatim. When the text cannot be salvaged (the link is most of the message) nothing is delivered and the call returns `422 message_not_sent` with the channel's verbatim refusal in `statusReason`. Send `Idempotency-Key` — without it, retrying after a network timeout sends the guest the same message twice. ### Attachments Send files with `attachments: [{ url, contentType?, filename? }]` — public `https://` URLs, up to 5 per request, 10 MB each. `message` may be omitted when there are attachments (except on Booking.com). Repull downloads each file, reads its real type from the bytes, keeps a durable copy and delivers it through the channel's own file flow. **Every file is checked before anything is sent**: if one is unreachable, too large or of a type the channel refuses, the call returns 422 naming the file (`index`) and the guest receives nothing. | Channel | Accepted types | Text | How it arrives | |---|---|---|---| | Airbnb | JPEG, PNG, GIF, WebP (converted to JPEG), MP4, QuickTime | optional | each file as its own message, then the text as a separate message | | Booking.com | JPEG, PNG | **required** | one message carrying the text and every file | | SMS, email, direct-booking site chat | — | — | `422 attachments_not_supported`, nothing sent | Airbnb does not allow files in pre-booking (inquiry) conversations; that refusal comes back as `422 message_not_sent`. Because Airbnb delivers files one message at a time, a later file can be refused after earlier ones arrived — that returns `422 message_partially_sent` with `parts` saying exactly which messages reached the guest; resend only the rest. The response's `attachments` lists each file's durable `url`, and `parts` lists every channel message the send produced. Read-back (`GET /v1/conversations/{id}/messages`) shows the same files in each message's `attachments`. **Inactive listings:** a conversation that belongs to an inactive listing returns `403 listing_inactive` and no message is sent. Activate the listing first.
|
|
287
612
|
# @param id [Integer] Internal Repull thread id.
|
|
288
613
|
# @param send_message_request [SendMessageRequest]
|
|
289
614
|
# @param [Hash] opts the optional parameters
|
|
290
|
-
# @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. -
|
|
615
|
+
# @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.
|
|
291
616
|
# @return [SendMessageResponse]
|
|
292
617
|
def send_conversation_message(id, send_message_request, opts = {})
|
|
293
618
|
data, _status_code, _headers = send_conversation_message_with_http_info(id, send_message_request, opts)
|
|
@@ -295,11 +620,11 @@ module Repull
|
|
|
295
620
|
end
|
|
296
621
|
|
|
297
622
|
# Send a message to the guest
|
|
298
|
-
# Sends a message to the guest on this conversation and records it in the thread. Omit `channel` and the message goes out on whichever channel the conversation already uses (Airbnb, Booking.com, SMS, email or the direct-booking site) — that is the right default. Pass `channel` only to force a specific one. The message is attributed to the API, not to Vanio AI: it is recorded with `aiGenerated` false so an API send is never counted as an automated reply. ### Airbnb rewrites links — check `contentRewritten` Airbnb rejects guest messages containing a link, an email address or a phone number, and names the offending text. When that happens the offending fragment is stripped and the remainder is re-sent once, which means **the guest receives a message that is not the one you wrote**. Reporting that as a plain success would be a lie, so every response carries `contentRewritten`; when it is `true`, `deliveredContent` is the text that actually reached the guest. Check it before assuming your message went out verbatim. When the text cannot be salvaged (the link is most of the message) nothing is delivered and the call returns `422 message_not_sent` with the channel's verbatim refusal in `statusReason`. Send `Idempotency-Key` — without it, retrying after a network timeout sends the guest the same message twice. **Inactive listings:** a conversation that belongs to an inactive listing returns `403 listing_inactive` and no message is sent. Activate the listing first.
|
|
623
|
+
# Sends a message to the guest on this conversation and records it in the thread. Omit `channel` and the message goes out on whichever channel the conversation already uses (Airbnb, Booking.com, SMS, email or the direct-booking site) — that is the right default. Pass `channel` only to force a specific one. The message is attributed to the API, not to Vanio AI: it is recorded with `aiGenerated` false so an API send is never counted as an automated reply. ### Airbnb rewrites links — check `contentRewritten` Airbnb rejects guest messages containing a link, an email address or a phone number, and names the offending text. When that happens the offending fragment is stripped and the remainder is re-sent once, which means **the guest receives a message that is not the one you wrote**. Reporting that as a plain success would be a lie, so every response carries `contentRewritten`; when it is `true`, `deliveredContent` is the text that actually reached the guest. Check it before assuming your message went out verbatim. When the text cannot be salvaged (the link is most of the message) nothing is delivered and the call returns `422 message_not_sent` with the channel's verbatim refusal in `statusReason`. Send `Idempotency-Key` — without it, retrying after a network timeout sends the guest the same message twice. ### Attachments Send files with `attachments: [{ url, contentType?, filename? }]` — public `https://` URLs, up to 5 per request, 10 MB each. `message` may be omitted when there are attachments (except on Booking.com). Repull downloads each file, reads its real type from the bytes, keeps a durable copy and delivers it through the channel's own file flow. **Every file is checked before anything is sent**: if one is unreachable, too large or of a type the channel refuses, the call returns 422 naming the file (`index`) and the guest receives nothing. | Channel | Accepted types | Text | How it arrives | |---|---|---|---| | Airbnb | JPEG, PNG, GIF, WebP (converted to JPEG), MP4, QuickTime | optional | each file as its own message, then the text as a separate message | | Booking.com | JPEG, PNG | **required** | one message carrying the text and every file | | SMS, email, direct-booking site chat | — | — | `422 attachments_not_supported`, nothing sent | Airbnb does not allow files in pre-booking (inquiry) conversations; that refusal comes back as `422 message_not_sent`. Because Airbnb delivers files one message at a time, a later file can be refused after earlier ones arrived — that returns `422 message_partially_sent` with `parts` saying exactly which messages reached the guest; resend only the rest. The response's `attachments` lists each file's durable `url`, and `parts` lists every channel message the send produced. Read-back (`GET /v1/conversations/{id}/messages`) shows the same files in each message's `attachments`. **Inactive listings:** a conversation that belongs to an inactive listing returns `403 listing_inactive` and no message is sent. Activate the listing first.
|
|
299
624
|
# @param id [Integer] Internal Repull thread id.
|
|
300
625
|
# @param send_message_request [SendMessageRequest]
|
|
301
626
|
# @param [Hash] opts the optional parameters
|
|
302
|
-
# @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. -
|
|
627
|
+
# @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.
|
|
303
628
|
# @return [Array<(SendMessageResponse, Integer, Hash)>] SendMessageResponse data, response status code and response headers
|
|
304
629
|
def send_conversation_message_with_http_info(id, send_message_request, opts = {})
|
|
305
630
|
if @api_client.config.debugging
|
|
@@ -362,5 +687,74 @@ module Repull
|
|
|
362
687
|
end
|
|
363
688
|
return data, status_code, headers
|
|
364
689
|
end
|
|
690
|
+
|
|
691
|
+
# Withdraw a special offer
|
|
692
|
+
# Withdraw a special offer the guest has not booked yet, so it can no longer be booked. Runs the same action as the Vanio dashboard’s Withdraw offer. An offer the guest already booked cannot be withdrawn — Airbnb refuses with `409 inquiry_no_longer_open`; cancel the booking instead.
|
|
693
|
+
# @param id [Integer] Repull conversation id (from `GET /v1/conversations` or `conversationId` on `GET /v1/inquiries`) — not the Airbnb thread id.
|
|
694
|
+
# @param offer_id [String] The special offer’s `id`, as returned by `POST /v1/conversations/{id}/special-offers`.
|
|
695
|
+
# @param [Hash] opts the optional parameters
|
|
696
|
+
# @return [WithdrawConversationSpecialOffer200Response]
|
|
697
|
+
def withdraw_conversation_special_offer(id, offer_id, opts = {})
|
|
698
|
+
data, _status_code, _headers = withdraw_conversation_special_offer_with_http_info(id, offer_id, opts)
|
|
699
|
+
data
|
|
700
|
+
end
|
|
701
|
+
|
|
702
|
+
# Withdraw a special offer
|
|
703
|
+
# Withdraw a special offer the guest has not booked yet, so it can no longer be booked. Runs the same action as the Vanio dashboard’s Withdraw offer. An offer the guest already booked cannot be withdrawn — Airbnb refuses with `409 inquiry_no_longer_open`; cancel the booking instead.
|
|
704
|
+
# @param id [Integer] Repull conversation id (from `GET /v1/conversations` or `conversationId` on `GET /v1/inquiries`) — not the Airbnb thread id.
|
|
705
|
+
# @param offer_id [String] The special offer’s `id`, as returned by `POST /v1/conversations/{id}/special-offers`.
|
|
706
|
+
# @param [Hash] opts the optional parameters
|
|
707
|
+
# @return [Array<(WithdrawConversationSpecialOffer200Response, Integer, Hash)>] WithdrawConversationSpecialOffer200Response data, response status code and response headers
|
|
708
|
+
def withdraw_conversation_special_offer_with_http_info(id, offer_id, opts = {})
|
|
709
|
+
if @api_client.config.debugging
|
|
710
|
+
@api_client.config.logger.debug 'Calling API: ConversationsApi.withdraw_conversation_special_offer ...'
|
|
711
|
+
end
|
|
712
|
+
# verify the required parameter 'id' is set
|
|
713
|
+
if @api_client.config.client_side_validation && id.nil?
|
|
714
|
+
fail ArgumentError, "Missing the required parameter 'id' when calling ConversationsApi.withdraw_conversation_special_offer"
|
|
715
|
+
end
|
|
716
|
+
# verify the required parameter 'offer_id' is set
|
|
717
|
+
if @api_client.config.client_side_validation && offer_id.nil?
|
|
718
|
+
fail ArgumentError, "Missing the required parameter 'offer_id' when calling ConversationsApi.withdraw_conversation_special_offer"
|
|
719
|
+
end
|
|
720
|
+
# resource path
|
|
721
|
+
local_var_path = '/v1/conversations/{id}/special-offers/{offerId}'.sub('{id}', CGI.escape(id.to_s)).sub('{offerId}', CGI.escape(offer_id.to_s))
|
|
722
|
+
|
|
723
|
+
# query parameters
|
|
724
|
+
query_params = opts[:query_params] || {}
|
|
725
|
+
|
|
726
|
+
# header parameters
|
|
727
|
+
header_params = opts[:header_params] || {}
|
|
728
|
+
# HTTP header 'Accept' (if needed)
|
|
729
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
730
|
+
|
|
731
|
+
# form parameters
|
|
732
|
+
form_params = opts[:form_params] || {}
|
|
733
|
+
|
|
734
|
+
# http body (model)
|
|
735
|
+
post_body = opts[:debug_body]
|
|
736
|
+
|
|
737
|
+
# return_type
|
|
738
|
+
return_type = opts[:debug_return_type] || 'WithdrawConversationSpecialOffer200Response'
|
|
739
|
+
|
|
740
|
+
# auth_names
|
|
741
|
+
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
742
|
+
|
|
743
|
+
new_options = opts.merge(
|
|
744
|
+
:operation => :"ConversationsApi.withdraw_conversation_special_offer",
|
|
745
|
+
:header_params => header_params,
|
|
746
|
+
:query_params => query_params,
|
|
747
|
+
:form_params => form_params,
|
|
748
|
+
:body => post_body,
|
|
749
|
+
:auth_names => auth_names,
|
|
750
|
+
:return_type => return_type
|
|
751
|
+
)
|
|
752
|
+
|
|
753
|
+
data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
|
|
754
|
+
if @api_client.config.debugging
|
|
755
|
+
@api_client.config.logger.debug "API called: ConversationsApi#withdraw_conversation_special_offer\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
756
|
+
end
|
|
757
|
+
return data, status_code, headers
|
|
758
|
+
end
|
|
365
759
|
end
|
|
366
760
|
end
|
|
@@ -23,7 +23,7 @@ module Repull
|
|
|
23
23
|
# Creates a guest in the workspace, with contact normalisation applied (phone digits, email lowercased) and each contact stored as its own record. **This is find-or-create, and the response tells you which happened.** A guest already on file matching on email — then phone — AND name is returned instead of a duplicate being created. Read the `created` flag rather than inferring from the status: `201` with `created: true` means a new record was written, `200` with `created: false` means an existing guest matched. Quietly handing back an existing record as though it were new is exactly the ambiguity this flag removes. Field names are camelCase, and an unrecognised field is rejected by name rather than silently dropped. Send `Idempotency-Key` to make a retry safe.
|
|
24
24
|
# @param guest_create_request [GuestCreateRequest]
|
|
25
25
|
# @param [Hash] opts the optional parameters
|
|
26
|
-
# @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. -
|
|
26
|
+
# @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.
|
|
27
27
|
# @return [GuestCreateResponse]
|
|
28
28
|
def create_guest(guest_create_request, opts = {})
|
|
29
29
|
data, _status_code, _headers = create_guest_with_http_info(guest_create_request, opts)
|
|
@@ -34,7 +34,7 @@ module Repull
|
|
|
34
34
|
# Creates a guest in the workspace, with contact normalisation applied (phone digits, email lowercased) and each contact stored as its own record. **This is find-or-create, and the response tells you which happened.** A guest already on file matching on email — then phone — AND name is returned instead of a duplicate being created. Read the `created` flag rather than inferring from the status: `201` with `created: true` means a new record was written, `200` with `created: false` means an existing guest matched. Quietly handing back an existing record as though it were new is exactly the ambiguity this flag removes. Field names are camelCase, and an unrecognised field is rejected by name rather than silently dropped. Send `Idempotency-Key` to make a retry safe.
|
|
35
35
|
# @param guest_create_request [GuestCreateRequest]
|
|
36
36
|
# @param [Hash] opts the optional parameters
|
|
37
|
-
# @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. -
|
|
37
|
+
# @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.
|
|
38
38
|
# @return [Array<(GuestCreateResponse, Integer, Hash)>] GuestCreateResponse data, response status code and response headers
|
|
39
39
|
def create_guest_with_http_info(guest_create_request, opts = {})
|
|
40
40
|
if @api_client.config.debugging
|