repull 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/repull/api/airbnb_api.rb +117 -130
- data/lib/repull/api/atlas_api.rb +1 -1
- data/lib/repull/api/billing_api.rb +1 -56
- data/lib/repull/api/booking_com_api.rb +20 -119
- data/lib/repull/api/connect_api.rb +1 -1
- data/lib/repull/api/conversations_api.rb +1 -1
- data/lib/repull/api/guests_api.rb +1 -1
- data/lib/repull/api/kv_api.rb +1 -1
- data/lib/repull/api/listings_api.rb +212 -1
- data/lib/repull/api/markets_api.rb +1 -1
- data/lib/repull/api/plumguide_api.rb +1 -1
- data/lib/repull/api/pricing_api.rb +1 -1
- data/lib/repull/api/properties_api.rb +1 -1
- data/lib/repull/api/reservations_api.rb +1 -198
- data/lib/repull/api/reviews_api.rb +1 -1
- data/lib/repull/api/{availability_api.rb → sandbox_api.rb} +36 -67
- data/lib/repull/api/schema_api.rb +1 -1
- data/lib/repull/api/system_api.rb +1 -1
- data/lib/repull/api/vrbo_api.rb +1 -127
- data/lib/repull/api/webhooks_api.rb +1 -1
- data/lib/repull/api_client.rb +1 -1
- data/lib/repull/api_error.rb +1 -1
- data/lib/repull/api_model_base.rb +1 -1
- data/lib/repull/configuration.rb +1 -1
- data/lib/repull/models/account_created_event.rb +1 -1
- data/lib/repull/models/account_created_payload.rb +1 -1
- data/lib/repull/models/account_disconnected_event.rb +1 -1
- data/lib/repull/models/account_disconnected_payload.rb +1 -1
- data/lib/repull/models/ai_operation.rb +1 -1
- data/lib/repull/models/ai_operation_completed_event.rb +1 -1
- data/lib/repull/models/ai_operation_completed_payload.rb +1 -1
- data/lib/repull/models/ai_operation_failed_event.rb +1 -1
- data/lib/repull/models/ai_operation_failed_payload.rb +1 -1
- data/lib/repull/models/ai_operation_failed_payload_error.rb +1 -1
- data/lib/repull/models/{create_studio_project_request.rb → airbnb_availability_write_request.rb} +39 -53
- data/lib/repull/models/{create_studio_deployment201_response_data.rb → airbnb_calendar_operation.rb} +109 -58
- data/lib/repull/models/airbnb_connection.rb +1 -1
- data/lib/repull/models/airbnb_connection_accessibility_amenities_inner.rb +1 -1
- data/lib/repull/models/airbnb_connection_amenities_inner.rb +1 -1
- data/lib/repull/models/airbnb_connection_host.rb +1 -1
- data/lib/repull/models/airbnb_connection_response.rb +1 -1
- data/lib/repull/models/airbnb_connection_summary.rb +1 -1
- data/lib/repull/models/airbnb_data_freshness.rb +1 -1
- data/lib/repull/models/airbnb_listing.rb +1 -1
- data/lib/repull/models/{update_studio_project_request.rb → airbnb_listing_action_request.rb} +56 -48
- data/lib/repull/models/airbnb_listing_list_response.rb +1 -1
- data/lib/repull/models/{update_availability_request.rb → airbnb_pricing_write_request.rb} +101 -12
- data/lib/repull/models/airbnb_reservation.rb +1 -1
- data/lib/repull/models/airbnb_reservation_list_response.rb +1 -1
- data/lib/repull/models/airbnb_review.rb +1 -1
- data/lib/repull/models/airbnb_review_list_response.rb +1 -1
- data/lib/repull/models/airbnb_thread.rb +1 -1
- data/lib/repull/models/airbnb_thread_list_response.rb +1 -1
- data/lib/repull/models/{create_studio_project201_response_data.rb → booking_availability_update.rb} +126 -49
- data/lib/repull/models/{list_studio_deployments200_response.rb → booking_availability_update_request.rb} +91 -19
- data/lib/repull/models/{generate_studio_completion_request_project_id.rb → booking_availability_update_request_property_id.rb} +3 -3
- data/lib/repull/models/{get_studio_deployment200_response.rb → booking_availability_update_request_updates_inner.rb} +75 -118
- data/lib/repull/models/booking_connect_listing_option.rb +1 -1
- data/lib/repull/models/booking_connect_room.rb +1 -1
- data/lib/repull/models/booking_connect_rooms_response.rb +1 -1
- data/lib/repull/models/booking_conversation.rb +1 -1
- data/lib/repull/models/booking_conversation_list_response.rb +1 -1
- data/lib/repull/models/booking_pricing_rate_update.rb +2 -1
- data/lib/repull/models/booking_pricing_rate_update_date_range.rb +1 -1
- data/lib/repull/models/booking_pricing_rate_update_restrictions.rb +66 -7
- data/lib/repull/models/booking_pricing_response.rb +1 -1
- data/lib/repull/models/booking_pricing_update_request.rb +1 -1
- data/lib/repull/models/booking_pricing_update_response.rb +1 -1
- data/lib/repull/models/booking_property.rb +1 -1
- data/lib/repull/models/booking_property_list_response.rb +1 -1
- data/lib/repull/models/booking_room_mapping.rb +1 -1
- data/lib/repull/models/booking_verify_hotel_request.rb +1 -1
- data/lib/repull/models/booking_verify_hotel_response.rb +1 -1
- data/lib/repull/models/bulk_pricing_failure.rb +1 -1
- data/lib/repull/models/bulk_pricing_item.rb +1 -1
- data/lib/repull/models/bulk_pricing_request.rb +1 -1
- data/lib/repull/models/bulk_pricing_response.rb +1 -1
- data/lib/repull/models/calendar_day.rb +1 -1
- data/lib/repull/models/calendar_response.rb +1 -1
- data/lib/repull/models/calendar_updated_event.rb +1 -1
- data/lib/repull/models/calendar_updated_payload.rb +1 -1
- data/lib/repull/models/calendar_updated_payload_range.rb +1 -1
- data/lib/repull/models/clear_kv200_response.rb +1 -1
- data/lib/repull/models/connect_host.rb +1 -1
- data/lib/repull/models/connect_provider.rb +1 -1
- data/lib/repull/models/connect_provider_list_response.rb +1 -1
- data/lib/repull/models/connect_session.rb +1 -1
- data/lib/repull/models/connect_status.rb +1 -1
- data/lib/repull/models/connection.rb +1 -1
- data/lib/repull/models/connection_list_response.rb +1 -1
- data/lib/repull/models/conversation.rb +1 -1
- data/lib/repull/models/conversation_detail.rb +1 -1
- data/lib/repull/models/conversation_guest.rb +1 -1
- data/lib/repull/models/conversation_guest_contact.rb +1 -1
- data/lib/repull/models/conversation_host.rb +1 -1
- data/lib/repull/models/conversation_list_response.rb +1 -1
- data/lib/repull/models/conversation_message_attachment.rb +1 -1
- data/lib/repull/models/create_billing_checkout_request.rb +1 -1
- data/lib/repull/models/create_connect_session_request.rb +1 -1
- data/lib/repull/models/create_connection_request.rb +1 -1
- data/lib/repull/models/create_webhook_request.rb +1 -1
- data/lib/repull/models/custom_schema.rb +1 -1
- data/lib/repull/models/custom_schema_create.rb +1 -1
- data/lib/repull/models/custom_schema_create_response.rb +1 -1
- data/lib/repull/models/custom_schema_delete_response.rb +1 -1
- data/lib/repull/models/custom_schema_list_response.rb +1 -1
- data/lib/repull/models/custom_schema_summary.rb +1 -1
- data/lib/repull/models/custom_schema_update.rb +1 -1
- data/lib/repull/models/delete_kv200_response.rb +1 -1
- data/lib/repull/models/error.rb +1 -1
- data/lib/repull/models/error_error.rb +1 -1
- data/lib/repull/models/error_error_support.rb +1 -1
- data/lib/repull/models/get_health200_response.rb +1 -1
- data/lib/repull/models/guest.rb +1 -1
- data/lib/repull/models/guest_contact.rb +1 -1
- data/lib/repull/models/guest_flag.rb +1 -1
- data/lib/repull/models/guest_list_response.rb +1 -1
- data/lib/repull/models/guest_note.rb +1 -1
- data/lib/repull/models/guest_profile.rb +1 -1
- data/lib/repull/models/guest_reservations_summary.rb +1 -1
- data/lib/repull/models/list_kv200_response.rb +1 -1
- data/lib/repull/models/list_kv200_response_data_inner.rb +1 -1
- data/lib/repull/models/list_kv200_response_pagination.rb +1 -1
- data/lib/repull/models/listing.rb +1 -1
- data/lib/repull/models/{create_studio_project_generation_request.rb → listing_active_request.rb} +21 -21
- data/lib/repull/models/{delete_studio_project200_response_data.rb → listing_active_response.rb} +13 -11
- data/lib/repull/models/listing_address.rb +1 -1
- data/lib/repull/models/listing_amenity.rb +1 -1
- data/lib/repull/models/listing_channel.rb +1 -1
- data/lib/repull/models/listing_comp.rb +1 -1
- data/lib/repull/models/listing_comp_nightly.rb +1 -1
- data/lib/repull/models/listing_comp_ratings.rb +1 -1
- data/lib/repull/models/listing_comps_response.rb +1 -1
- data/lib/repull/models/listing_content.rb +1 -1
- data/lib/repull/models/{get_studio_project200_response.rb → listing_content_update_request.rb} +107 -11
- data/lib/repull/models/{upsert_studio_project_file200_response.rb → listing_content_update_request_address.rb} +54 -11
- data/lib/repull/models/listing_content_update_request_amenities.rb +105 -0
- data/lib/repull/models/{create_studio_deployment_request.rb → listing_content_update_request_amenities_one_of_inner.rb} +52 -21
- data/lib/repull/models/{update_reservation_request.rb → listing_content_update_request_occupancy.rb} +34 -29
- data/lib/repull/{api/ai_api.rb → models/listing_content_update_request_photos_inner.rb} +78 -60
- data/lib/repull/models/{generate_studio_completion200_response_data.rb → listing_content_update_request_photos_inner_one_of.rb} +82 -67
- data/lib/repull/models/{generate_studio_completion200_response.rb → listing_content_update_request_policies.rb} +117 -11
- data/lib/repull/models/{create_ai_operation200_response.rb → listing_content_update_response.rb} +33 -17
- data/lib/repull/models/listing_create_request.rb +1 -1
- data/lib/repull/models/listing_create_response.rb +1 -1
- data/lib/repull/models/listing_created_event.rb +1 -1
- data/lib/repull/models/listing_created_payload.rb +1 -1
- data/lib/repull/models/listing_created_payload_address.rb +1 -1
- data/lib/repull/models/listing_deleted_event.rb +1 -1
- data/lib/repull/models/listing_deleted_payload.rb +1 -1
- data/lib/repull/models/listing_details.rb +1 -1
- data/lib/repull/models/listing_generate_content_request.rb +1 -1
- data/lib/repull/models/listing_generate_content_response.rb +1 -1
- data/lib/repull/models/listing_list_response.rb +1 -1
- data/lib/repull/models/listing_pricing_apply_request.rb +1 -1
- data/lib/repull/models/listing_pricing_apply_response.rb +1 -1
- data/lib/repull/models/listing_pricing_history_entry.rb +1 -1
- data/lib/repull/models/listing_pricing_history_response.rb +1 -1
- data/lib/repull/models/listing_pricing_recommendation.rb +1 -1
- data/lib/repull/models/listing_pricing_response.rb +1 -1
- data/lib/repull/models/listing_pricing_response_comp_summary.rb +1 -1
- data/lib/repull/models/listing_pricing_response_date_range.rb +1 -1
- data/lib/repull/models/listing_pricing_response_listing.rb +1 -1
- data/lib/repull/models/listing_pricing_strategy.rb +1 -1
- data/lib/repull/models/listing_pricing_strategy_input.rb +1 -1
- data/lib/repull/models/listing_publish_airbnb_request.rb +1 -1
- data/lib/repull/models/listing_publish_response.rb +1 -1
- data/lib/repull/models/listing_publish_status_channel.rb +1 -1
- data/lib/repull/models/listing_publish_status_connection.rb +1 -1
- data/lib/repull/models/listing_publish_status_response.rb +1 -1
- data/lib/repull/models/listing_quality_tier.rb +1 -1
- data/lib/repull/models/listing_segment.rb +1 -1
- data/lib/repull/models/listing_segment_recommendation.rb +1 -1
- data/lib/repull/models/listing_segments_response.rb +1 -1
- data/lib/repull/models/listing_segments_response_scope.rb +1 -1
- data/lib/repull/models/listing_updated_event.rb +1 -1
- data/lib/repull/models/listing_updated_payload.rb +1 -1
- data/lib/repull/models/map_airbnb_listing_request.rb +215 -0
- data/lib/repull/models/{create_reservation_request.rb → map_airbnb_listing_response.rb} +138 -117
- data/lib/repull/models/map_connect_booking_rooms_request.rb +1 -1
- data/lib/repull/models/map_connect_booking_rooms_response.rb +1 -1
- data/lib/repull/models/market_browse_category.rb +1 -1
- data/lib/repull/models/market_browse_entry.rb +1 -1
- data/lib/repull/models/market_browse_featured.rb +1 -1
- data/lib/repull/models/market_browse_response.rb +1 -1
- data/lib/repull/models/market_calendar_day.rb +1 -1
- data/lib/repull/models/market_calendar_day_events_inner.rb +1 -1
- data/lib/repull/models/market_calendar_response.rb +1 -1
- data/lib/repull/models/market_detail_response.rb +1 -1
- data/lib/repull/models/market_detail_response_price_distribution_inner.rb +1 -1
- data/lib/repull/models/market_detail_response_property_type_mix_inner.rb +1 -1
- data/lib/repull/models/market_detail_response_supply_trend_inner.rb +1 -1
- data/lib/repull/models/market_detail_response_top_comps.rb +1 -1
- data/lib/repull/models/market_event.rb +1 -1
- data/lib/repull/models/market_my_listing.rb +1 -1
- data/lib/repull/models/market_summary.rb +1 -1
- data/lib/repull/models/market_top_comp.rb +1 -1
- data/lib/repull/models/markets_overview_response.rb +1 -1
- data/lib/repull/models/markets_overview_response_browse.rb +1 -1
- data/lib/repull/models/markets_overview_response_subscriptions.rb +1 -1
- data/lib/repull/models/markets_overview_response_totals.rb +1 -1
- data/lib/repull/models/message.rb +1 -1
- data/lib/repull/models/message_list_response.rb +1 -1
- data/lib/repull/models/pagination.rb +1 -1
- data/lib/repull/models/payment_completed_event.rb +1 -1
- data/lib/repull/models/payment_completed_payload.rb +1 -1
- data/lib/repull/models/payment_refunded_event.rb +1 -1
- data/lib/repull/models/payment_refunded_payload.rb +1 -1
- data/lib/repull/models/plumguide_listing.rb +1 -1
- data/lib/repull/models/plumguide_listing_list_response.rb +1 -1
- data/lib/repull/models/property.rb +43 -70
- data/lib/repull/models/property_list_response.rb +1 -1
- data/lib/repull/models/reply_booking_review200_response.rb +1 -1
- data/lib/repull/models/reply_booking_review_request.rb +1 -1
- data/lib/repull/models/repull_ping_event.rb +1 -1
- data/lib/repull/models/repull_ping_payload.rb +1 -1
- data/lib/repull/models/reservation.rb +29 -2
- data/lib/repull/models/reservation_cancelled_event.rb +1 -1
- data/lib/repull/models/reservation_cancelled_payload.rb +1 -1
- data/lib/repull/models/reservation_created_event.rb +1 -1
- data/lib/repull/models/reservation_created_payload.rb +1 -1
- data/lib/repull/models/reservation_financials.rb +1 -1
- data/lib/repull/models/reservation_list_response.rb +1 -1
- data/lib/repull/models/reservation_message_received_event.rb +1 -1
- data/lib/repull/models/reservation_message_received_payload.rb +1 -1
- data/lib/repull/models/reservation_message_received_payload_from.rb +1 -1
- data/lib/repull/models/reservation_occupancy.rb +1 -1
- data/lib/repull/models/reservation_primary_guest.rb +1 -1
- data/lib/repull/models/reservation_updated_event.rb +1 -1
- data/lib/repull/models/reservation_updated_payload.rb +1 -1
- data/lib/repull/models/reservation_webhook_object.rb +1 -1
- data/lib/repull/models/respond_airbnb_review_request.rb +1 -1
- data/lib/repull/models/review.rb +1 -1
- data/lib/repull/models/review_category.rb +1 -1
- data/lib/repull/models/review_list_response.rb +1 -1
- data/lib/repull/models/review_response.rb +1 -1
- data/lib/repull/models/rotate_webhook_secret200_response.rb +1 -1
- data/lib/repull/models/{upsert_studio_project_file_request.rb → sandbox_fixture_ref.rb} +49 -21
- data/lib/repull/models/{delete_studio_deployment200_response_data.rb → sandbox_reset_result.rb} +73 -12
- data/lib/repull/models/sandbox_reset_result_deleted.rb +216 -0
- data/lib/repull/models/sandbox_seed_result.rb +278 -0
- data/lib/repull/models/select_connect_provider_request.rb +1 -1
- data/lib/repull/models/select_provider_response.rb +1 -1
- data/lib/repull/models/set_kv_request.rb +1 -1
- data/lib/repull/models/studio_deployment.rb +1 -1
- data/lib/repull/models/studio_error.rb +1 -1
- data/lib/repull/models/studio_error_error.rb +1 -1
- data/lib/repull/models/studio_file.rb +1 -1
- data/lib/repull/models/studio_generation.rb +1 -1
- data/lib/repull/models/studio_project.rb +1 -1
- data/lib/repull/models/test_webhook_request.rb +1 -1
- data/lib/repull/models/update_listing_pricing_strategy200_response.rb +1 -1
- data/lib/repull/models/update_webhook_request.rb +1 -1
- data/lib/repull/models/vrbo_listing.rb +1 -1
- data/lib/repull/models/vrbo_listing_list_response.rb +1 -1
- data/lib/repull/models/vrbo_reservation.rb +1 -1
- data/lib/repull/models/vrbo_reservation_list_response.rb +1 -1
- data/lib/repull/models/webhook_delivery.rb +1 -1
- data/lib/repull/models/webhook_delivery_detail.rb +1 -1
- data/lib/repull/models/webhook_delivery_list_response.rb +1 -1
- data/lib/repull/models/webhook_event.rb +1 -1
- data/lib/repull/models/webhook_event_catalog.rb +1 -1
- data/lib/repull/models/webhook_event_catalog_domains_inner.rb +1 -1
- data/lib/repull/models/webhook_event_catalog_entry.rb +1 -1
- data/lib/repull/models/webhook_event_type.rb +1 -1
- data/lib/repull/models/webhook_list_response.rb +1 -1
- data/lib/repull/models/webhook_subscription.rb +1 -1
- data/lib/repull/version.rb +2 -2
- data/lib/repull.rb +27 -36
- data/openapi/v1.json +3604 -4346
- metadata +28 -37
- data/lib/repull/api/studio_api.rb +0 -1094
- data/lib/repull/models/create_studio_deployment201_response.rb +0 -147
- data/lib/repull/models/create_studio_project201_response.rb +0 -147
- data/lib/repull/models/create_studio_project_generation201_response.rb +0 -147
- data/lib/repull/models/create_studio_project_generation201_response_data.rb +0 -165
- data/lib/repull/models/delete_studio_deployment200_response.rb +0 -147
- data/lib/repull/models/delete_studio_project200_response.rb +0 -147
- data/lib/repull/models/delete_studio_project_file200_response.rb +0 -147
- data/lib/repull/models/delete_studio_project_file200_response_data.rb +0 -156
- data/lib/repull/models/generate_studio_completion_request.rb +0 -305
- data/lib/repull/models/list_studio_project_files200_response.rb +0 -149
- data/lib/repull/models/list_studio_projects200_response.rb +0 -149
- data/lib/repull/models/upsert_studio_project_file200_response_data.rb +0 -147
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d5a9c9093f7135eb3837ed3df58d351a65a81d6514335bf0bf8aaad034f7a1bd
|
|
4
|
+
data.tar.gz: b21581271dc40c44f0c0634120b9fd4494ccad184b6892119c9219a426095181
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7d0587b8990f6170058fb1143b0171798cee901a84f98223fd83676c9c20a877649c2685c85cd384a6428edee0c763d4f2b6441cffde79e0b48d681a7e0741a3
|
|
7
|
+
data.tar.gz: '09c9692f5218ef24bae4009c4eac92f1c7e5853c531093dffa516b7861fbcf160c7c35e1a7bea01c9ae9b1141e053b167b4cec3a0fb007ba3b400b552b875ca0'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
=begin
|
|
2
2
|
#Repull API
|
|
3
3
|
|
|
4
|
-
#The unified API for vacation rental tech. Connect to 50+ PMS platforms and 4 OTA channels through one REST API. Built-in AI operations for guest communication, pricing, and listing optimization. ## Designed for AI agents Every error response on this API includes machine-parseable fields so an LLM (Claude in MCP, Cursor, Cline, GPT, etc.) can self-recover without escalating to a human: - `error.code` — stable string identifier (e.g. `invalid_params`, `rate_limit_exceeded`) - `error.message` — human-readable cause - `error.fix` — exact recovery steps (e.g. \"Pass `check_in_after` as ISO 8601: `?check_in_after=2026-01-15`\") - `error.docs_url` — link to the canonical write-up at `https://repull.dev/docs/errors/{code}` - `error.request_id` — id to correlate with server-side logs - `error.field` / `error.value_received` / `error.valid_values` / `error.did_you_mean` — when the error is parameter-specific - `error.retry_after` — seconds to wait before retrying (rate-limit + transient upstream) `Access-Control-Expose-Headers` lists `x-request-id` and the `X-RateLimit-*` family so browsers can read them on cross-origin responses. ## Quick Start 1. Get an API key at https://repull.dev/dashboard 2. Connect a PMS: `POST /v1/connect/{provider}` 3. List properties: `GET /v1/properties` 4. Get reservations: `GET /v1/reservations` ## Authentication All requests require a Bearer token: ``` Authorization: Bearer sk_test_YOUR_API_KEY ``` Sandbox keys start with `sk_test_`, production with `sk_live_`. ## Request Correlation (X-Request-ID) Every response carries an `X-Request-ID` header, e.g. `X-Request-ID: req_01HXY...`. Include this id in support tickets and bug reports — we can trace the full request lifecycle (auth, rate limit, handler, downstream calls, log row) from a single id. You may set the header on the inbound request to forward your own trace id; we will echo it back instead of generating a new one. Accepted format: `^[\\\\w.-]{1,128}$`. The id is also embedded in error envelopes as `request_id` so server-side log diffs work even when the response headers are stripped by an intermediate proxy. ## Rate Limits The public API enforces a per-API-key sliding-window rate limit on top of the per-tier monthly + daily-AI quotas. **Default policy:** 600 requests per 60 seconds, per API key. Sliding window — there is no fixed-minute boundary you can burst across. Every response includes: | Header | Meaning | |---|---| | `X-RateLimit-Limit` | Requests permitted in the current window. | | `X-RateLimit-Remaining` | Requests left in the current window after this call. | | `X-RateLimit-Reset` | Unix epoch (seconds) when the next slot opens. | | `X-RateLimit-Policy` | Machine-readable policy descriptor, e.g. `600;w=60`. | | `Retry-After` | Seconds to wait before retrying. **Only present on 429 responses.** | **On 429 (rate_limit_exceeded):** the response body matches the standard error envelope with `code: \"rate_limit_exceeded\"`, plus `limit`, `window_seconds`, `retry_after`, and `request_id` fields. SDKs MUST honor `Retry-After` and use exponential backoff with jitter on subsequent retries — never a tight loop. Recommended backoff: ``` sleep_ms = (Retry-After * 1000) + random(0..250) ``` Monthly + daily-AI tier quotas (`free`, `starter`, `custom`) are enforced separately and also surface as 429s; they include `tier`, `scope`, and `resets_at` fields. ## Plan Limits (402 — `listings_limit_exceeded`) The Repull API also enforces a per-tier cap on **active listings**: | Tier | Active listings cap | |---|---| | `free` |
|
|
4
|
+
#The unified API for vacation rental tech. Connect to 50+ PMS platforms and 4 OTA channels through one REST API. Built-in AI operations for guest communication, pricing, and listing optimization. ## Designed for AI agents Every error response on this API includes machine-parseable fields so an LLM (Claude in MCP, Cursor, Cline, GPT, etc.) can self-recover without escalating to a human: - `error.code` — stable string identifier (e.g. `invalid_params`, `rate_limit_exceeded`) - `error.message` — human-readable cause - `error.fix` — exact recovery steps (e.g. \"Pass `check_in_after` as ISO 8601: `?check_in_after=2026-01-15`\") - `error.docs_url` — link to the canonical write-up at `https://repull.dev/docs/errors/{code}` - `error.request_id` — id to correlate with server-side logs - `error.field` / `error.value_received` / `error.valid_values` / `error.did_you_mean` — when the error is parameter-specific - `error.retry_after` — seconds to wait before retrying (rate-limit + transient upstream) `Access-Control-Expose-Headers` lists `x-request-id` and the `X-RateLimit-*` family so browsers can read them on cross-origin responses. ## Quick Start 1. Get an API key at https://repull.dev/dashboard 2. Connect a PMS: `POST /v1/connect/{provider}` 3. List properties: `GET /v1/properties` 4. Get reservations: `GET /v1/reservations` ## Authentication All requests require a Bearer token: ``` Authorization: Bearer sk_test_YOUR_API_KEY ``` Sandbox keys start with `sk_test_`, production with `sk_live_`. ## Request Correlation (X-Request-ID) Every response carries an `X-Request-ID` header, e.g. `X-Request-ID: req_01HXY...`. Include this id in support tickets and bug reports — we can trace the full request lifecycle (auth, rate limit, handler, downstream calls, log row) from a single id. You may set the header on the inbound request to forward your own trace id; we will echo it back instead of generating a new one. Accepted format: `^[\\\\w.-]{1,128}$`. The id is also embedded in error envelopes as `request_id` so server-side log diffs work even when the response headers are stripped by an intermediate proxy. ## Rate Limits The public API enforces a per-API-key sliding-window rate limit on top of the per-tier monthly + daily-AI quotas. **Default policy:** 600 requests per 60 seconds, per API key. Sliding window — there is no fixed-minute boundary you can burst across. Every response includes: | Header | Meaning | |---|---| | `X-RateLimit-Limit` | Requests permitted in the current window. | | `X-RateLimit-Remaining` | Requests left in the current window after this call. | | `X-RateLimit-Reset` | Unix epoch (seconds) when the next slot opens. | | `X-RateLimit-Policy` | Machine-readable policy descriptor, e.g. `600;w=60`. | | `Retry-After` | Seconds to wait before retrying. **Only present on 429 responses.** | **On 429 (rate_limit_exceeded):** the response body matches the standard error envelope with `code: \"rate_limit_exceeded\"`, plus `limit`, `window_seconds`, `retry_after`, and `request_id` fields. SDKs MUST honor `Retry-After` and use exponential backoff with jitter on subsequent retries — never a tight loop. Recommended backoff: ``` sleep_ms = (Retry-After * 1000) + random(0..250) ``` Monthly + daily-AI tier quotas (`free`, `starter`, `custom`) are enforced separately and also surface as 429s; they include `tier`, `scope`, and `resets_at` fields. ## Plan Limits (402 — `listings_limit_exceeded`) The Repull API also enforces a per-tier cap on **active listings**: | Tier | Active listings cap | |---|---| | `free` | 3 | | `starter` | 50 | | `custom` | unlimited | When a customer's active-listing count is above their tier cap, the API returns **`402 Payment Required`** with `error.code = \"listings_limit_exceeded\"` on every route EXCEPT: - `/v1/health` — uptime probes are never gated. - `/v1/usage/*` — so dashboards can render the over-cap state. - Any `DELETE` — so the customer can trim listings to get back under the cap without paying. Unlike 429, 402 is NOT a \"wait and retry\" condition — `Retry-After` is not set. The only paths back to 200 are: 1. `DELETE` enough listings to come back under the cap, or 2. Upgrade at `https://repull.dev/dashboard/billing`. The server-side usage cache is 60s, so the first 200 after an upgrade may take up to a minute. The envelope mirrors `rate_limit_exceeded` for SDK ergonomics: `tier`, `limit`, `active_listings`, `upgrade_url`, plus the standard `code` / `message` / `fix` / `docs_url` / `request_id`.
|
|
5
5
|
|
|
6
6
|
The version of the OpenAPI document: 1.0.0
|
|
7
7
|
Contact: ivan@vanio.ai
|
|
@@ -19,20 +19,22 @@ module Repull
|
|
|
19
19
|
def initialize(api_client = ApiClient.default)
|
|
20
20
|
@api_client = api_client
|
|
21
21
|
end
|
|
22
|
-
# Listing action (push/publish
|
|
23
|
-
# Apply a state action to
|
|
22
|
+
# Listing action (delete/push/publish)
|
|
23
|
+
# Apply a state action to a listing by id. The path `id` is the canonical Repull listing id. `delete` is a **deactivate of the Repull record only** — it sets the listing inactive and KEEPS the row; it does NOT touch the upstream Airbnb listing (Repull never deletes or deactivates on Airbnb's side). Use it to exclude a listing / trim back under the plan-listings cap; reactivate via `PATCH /v1/listings/{id}` with `{ \"active\": true }`. Idempotent. `push` / `publish` push the listing's content to Airbnb via the same host-side sync orchestrator as `POST /v1/listings/{id}/publish/airbnb` — pass `airbnbConnectionId` to update an already-mapped Airbnb listing, or `hostId` to create + publish a new one under that host. `force` re-pushes every field, ignoring dirty-field tracking. Any other action (e.g. `pull`, `unlist`) returns a structured 422 naming the supported actions.
|
|
24
24
|
# @param id [String]
|
|
25
25
|
# @param [Hash] opts the optional parameters
|
|
26
|
+
# @option opts [AirbnbListingActionRequest] :airbnb_listing_action_request
|
|
26
27
|
# @return [nil]
|
|
27
28
|
def airbnb_listing_action(id, opts = {})
|
|
28
29
|
airbnb_listing_action_with_http_info(id, opts)
|
|
29
30
|
nil
|
|
30
31
|
end
|
|
31
32
|
|
|
32
|
-
# Listing action (push/publish
|
|
33
|
-
# Apply a state action to
|
|
33
|
+
# Listing action (delete/push/publish)
|
|
34
|
+
# Apply a state action to a listing by id. The path `id` is the canonical Repull listing id. `delete` is a **deactivate of the Repull record only** — it sets the listing inactive and KEEPS the row; it does NOT touch the upstream Airbnb listing (Repull never deletes or deactivates on Airbnb's side). Use it to exclude a listing / trim back under the plan-listings cap; reactivate via `PATCH /v1/listings/{id}` with `{ \"active\": true }`. Idempotent. `push` / `publish` push the listing's content to Airbnb via the same host-side sync orchestrator as `POST /v1/listings/{id}/publish/airbnb` — pass `airbnbConnectionId` to update an already-mapped Airbnb listing, or `hostId` to create + publish a new one under that host. `force` re-pushes every field, ignoring dirty-field tracking. Any other action (e.g. `pull`, `unlist`) returns a structured 422 naming the supported actions.
|
|
34
35
|
# @param id [String]
|
|
35
36
|
# @param [Hash] opts the optional parameters
|
|
37
|
+
# @option opts [AirbnbListingActionRequest] :airbnb_listing_action_request
|
|
36
38
|
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
37
39
|
def airbnb_listing_action_with_http_info(id, opts = {})
|
|
38
40
|
if @api_client.config.debugging
|
|
@@ -50,12 +52,19 @@ module Repull
|
|
|
50
52
|
|
|
51
53
|
# header parameters
|
|
52
54
|
header_params = opts[:header_params] || {}
|
|
55
|
+
# HTTP header 'Accept' (if needed)
|
|
56
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
57
|
+
# HTTP header 'Content-Type'
|
|
58
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
59
|
+
if !content_type.nil?
|
|
60
|
+
header_params['Content-Type'] = content_type
|
|
61
|
+
end
|
|
53
62
|
|
|
54
63
|
# form parameters
|
|
55
64
|
form_params = opts[:form_params] || {}
|
|
56
65
|
|
|
57
66
|
# http body (model)
|
|
58
|
-
post_body = opts[:debug_body]
|
|
67
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(opts[:'airbnb_listing_action_request'])
|
|
59
68
|
|
|
60
69
|
# return_type
|
|
61
70
|
return_type = opts[:debug_return_type]
|
|
@@ -141,63 +150,6 @@ module Repull
|
|
|
141
150
|
return data, status_code, headers
|
|
142
151
|
end
|
|
143
152
|
|
|
144
|
-
# Create/push Airbnb listing
|
|
145
|
-
# Create a new Airbnb listing or push an existing Repull listing to Airbnb. Requires a connected Airbnb account. Returns the created listing id; publishing happens via the listing-action endpoint.
|
|
146
|
-
# @param [Hash] opts the optional parameters
|
|
147
|
-
# @return [AirbnbListing]
|
|
148
|
-
def create_airbnb_listing(opts = {})
|
|
149
|
-
data, _status_code, _headers = create_airbnb_listing_with_http_info(opts)
|
|
150
|
-
data
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
# Create/push Airbnb listing
|
|
154
|
-
# Create a new Airbnb listing or push an existing Repull listing to Airbnb. Requires a connected Airbnb account. Returns the created listing id; publishing happens via the listing-action endpoint.
|
|
155
|
-
# @param [Hash] opts the optional parameters
|
|
156
|
-
# @return [Array<(AirbnbListing, Integer, Hash)>] AirbnbListing data, response status code and response headers
|
|
157
|
-
def create_airbnb_listing_with_http_info(opts = {})
|
|
158
|
-
if @api_client.config.debugging
|
|
159
|
-
@api_client.config.logger.debug 'Calling API: AirbnbApi.create_airbnb_listing ...'
|
|
160
|
-
end
|
|
161
|
-
# resource path
|
|
162
|
-
local_var_path = '/v1/channels/airbnb/listings'
|
|
163
|
-
|
|
164
|
-
# query parameters
|
|
165
|
-
query_params = opts[:query_params] || {}
|
|
166
|
-
|
|
167
|
-
# header parameters
|
|
168
|
-
header_params = opts[:header_params] || {}
|
|
169
|
-
# HTTP header 'Accept' (if needed)
|
|
170
|
-
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
171
|
-
|
|
172
|
-
# form parameters
|
|
173
|
-
form_params = opts[:form_params] || {}
|
|
174
|
-
|
|
175
|
-
# http body (model)
|
|
176
|
-
post_body = opts[:debug_body]
|
|
177
|
-
|
|
178
|
-
# return_type
|
|
179
|
-
return_type = opts[:debug_return_type] || 'AirbnbListing'
|
|
180
|
-
|
|
181
|
-
# auth_names
|
|
182
|
-
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
183
|
-
|
|
184
|
-
new_options = opts.merge(
|
|
185
|
-
:operation => :"AirbnbApi.create_airbnb_listing",
|
|
186
|
-
:header_params => header_params,
|
|
187
|
-
:query_params => query_params,
|
|
188
|
-
:form_params => form_params,
|
|
189
|
-
:body => post_body,
|
|
190
|
-
:auth_names => auth_names,
|
|
191
|
-
:return_type => return_type
|
|
192
|
-
)
|
|
193
|
-
|
|
194
|
-
data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
|
|
195
|
-
if @api_client.config.debugging
|
|
196
|
-
@api_client.config.logger.debug "API called: AirbnbApi#create_airbnb_listing\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
197
|
-
end
|
|
198
|
-
return data, status_code, headers
|
|
199
|
-
end
|
|
200
|
-
|
|
201
153
|
# Edit Airbnb host review
|
|
202
154
|
# Edit a host-side review for an Airbnb stay. Airbnb collapses POST + PUT into the same upstream call (`PUT /v2/listing_reviews/{id}`), so this endpoint covers both initial submit and subsequent edits while the review window is open. Body is a partial `AirbnbReview` — pass the fields you want to change (rating, public review, private feedback, category ratings).
|
|
203
155
|
# @param id [String] Airbnb review id (`HRabc123` style).
|
|
@@ -979,6 +931,74 @@ module Repull
|
|
|
979
931
|
return data, status_code, headers
|
|
980
932
|
end
|
|
981
933
|
|
|
934
|
+
# Map an Airbnb listing to a Repull listing
|
|
935
|
+
# Link an existing Airbnb listing to a canonical Repull listing/property. **API-key-scoped** (unlike the Booking room mapping, which is Connect-session-scoped). Discover the `airbnbId` (+ `hostId`) via `GET /v1/channels/airbnb/listings`, then re-point it at the `listingId` of your choice — the dedup / consolidation case where the Airbnb sync auto-created its own listing but you want the inventory under an existing property. Repoints both the Airbnb record and its platform link to the target listing in one transaction. Idempotent — re-mapping to the same listing is a 200 no-op (`alreadyMapped: true`). Scope is enforced against your workspace on both the target listing and the existing Airbnb record; a listing that already links a different Airbnb listing returns 409.
|
|
936
|
+
# @param map_airbnb_listing_request [MapAirbnbListingRequest]
|
|
937
|
+
# @param [Hash] opts the optional parameters
|
|
938
|
+
# @return [MapAirbnbListingResponse]
|
|
939
|
+
def map_airbnb_listing(map_airbnb_listing_request, opts = {})
|
|
940
|
+
data, _status_code, _headers = map_airbnb_listing_with_http_info(map_airbnb_listing_request, opts)
|
|
941
|
+
data
|
|
942
|
+
end
|
|
943
|
+
|
|
944
|
+
# Map an Airbnb listing to a Repull listing
|
|
945
|
+
# Link an existing Airbnb listing to a canonical Repull listing/property. **API-key-scoped** (unlike the Booking room mapping, which is Connect-session-scoped). Discover the `airbnbId` (+ `hostId`) via `GET /v1/channels/airbnb/listings`, then re-point it at the `listingId` of your choice — the dedup / consolidation case where the Airbnb sync auto-created its own listing but you want the inventory under an existing property. Repoints both the Airbnb record and its platform link to the target listing in one transaction. Idempotent — re-mapping to the same listing is a 200 no-op (`alreadyMapped: true`). Scope is enforced against your workspace on both the target listing and the existing Airbnb record; a listing that already links a different Airbnb listing returns 409.
|
|
946
|
+
# @param map_airbnb_listing_request [MapAirbnbListingRequest]
|
|
947
|
+
# @param [Hash] opts the optional parameters
|
|
948
|
+
# @return [Array<(MapAirbnbListingResponse, Integer, Hash)>] MapAirbnbListingResponse data, response status code and response headers
|
|
949
|
+
def map_airbnb_listing_with_http_info(map_airbnb_listing_request, opts = {})
|
|
950
|
+
if @api_client.config.debugging
|
|
951
|
+
@api_client.config.logger.debug 'Calling API: AirbnbApi.map_airbnb_listing ...'
|
|
952
|
+
end
|
|
953
|
+
# verify the required parameter 'map_airbnb_listing_request' is set
|
|
954
|
+
if @api_client.config.client_side_validation && map_airbnb_listing_request.nil?
|
|
955
|
+
fail ArgumentError, "Missing the required parameter 'map_airbnb_listing_request' when calling AirbnbApi.map_airbnb_listing"
|
|
956
|
+
end
|
|
957
|
+
# resource path
|
|
958
|
+
local_var_path = '/v1/channels/airbnb/listings/map'
|
|
959
|
+
|
|
960
|
+
# query parameters
|
|
961
|
+
query_params = opts[:query_params] || {}
|
|
962
|
+
|
|
963
|
+
# header parameters
|
|
964
|
+
header_params = opts[:header_params] || {}
|
|
965
|
+
# HTTP header 'Accept' (if needed)
|
|
966
|
+
header_params['Accept'] = @api_client.select_header_accept(['application/json']) unless header_params['Accept']
|
|
967
|
+
# HTTP header 'Content-Type'
|
|
968
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
969
|
+
if !content_type.nil?
|
|
970
|
+
header_params['Content-Type'] = content_type
|
|
971
|
+
end
|
|
972
|
+
|
|
973
|
+
# form parameters
|
|
974
|
+
form_params = opts[:form_params] || {}
|
|
975
|
+
|
|
976
|
+
# http body (model)
|
|
977
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(map_airbnb_listing_request)
|
|
978
|
+
|
|
979
|
+
# return_type
|
|
980
|
+
return_type = opts[:debug_return_type] || 'MapAirbnbListingResponse'
|
|
981
|
+
|
|
982
|
+
# auth_names
|
|
983
|
+
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
984
|
+
|
|
985
|
+
new_options = opts.merge(
|
|
986
|
+
:operation => :"AirbnbApi.map_airbnb_listing",
|
|
987
|
+
:header_params => header_params,
|
|
988
|
+
:query_params => query_params,
|
|
989
|
+
:form_params => form_params,
|
|
990
|
+
:body => post_body,
|
|
991
|
+
:auth_names => auth_names,
|
|
992
|
+
:return_type => return_type
|
|
993
|
+
)
|
|
994
|
+
|
|
995
|
+
data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
|
|
996
|
+
if @api_client.config.debugging
|
|
997
|
+
@api_client.config.logger.debug "API called: AirbnbApi#map_airbnb_listing\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
998
|
+
end
|
|
999
|
+
return data, status_code, headers
|
|
1000
|
+
end
|
|
1001
|
+
|
|
982
1002
|
# Respond to Airbnb review
|
|
983
1003
|
# Post a public host response to a guest review. Airbnb allows one response per review — repeated POSTs return 409. Response text is capped at 1000 characters.
|
|
984
1004
|
# @param id [String] Airbnb review id.
|
|
@@ -1169,77 +1189,24 @@ module Repull
|
|
|
1169
1189
|
return data, status_code, headers
|
|
1170
1190
|
end
|
|
1171
1191
|
|
|
1172
|
-
# Bulk sync to Airbnb
|
|
1173
|
-
# Push all property data to Airbnb in one call.
|
|
1174
|
-
# @param [Hash] opts the optional parameters
|
|
1175
|
-
# @return [nil]
|
|
1176
|
-
def sync_airbnb(opts = {})
|
|
1177
|
-
sync_airbnb_with_http_info(opts)
|
|
1178
|
-
nil
|
|
1179
|
-
end
|
|
1180
|
-
|
|
1181
|
-
# Bulk sync to Airbnb
|
|
1182
|
-
# Push all property data to Airbnb in one call.
|
|
1183
|
-
# @param [Hash] opts the optional parameters
|
|
1184
|
-
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
1185
|
-
def sync_airbnb_with_http_info(opts = {})
|
|
1186
|
-
if @api_client.config.debugging
|
|
1187
|
-
@api_client.config.logger.debug 'Calling API: AirbnbApi.sync_airbnb ...'
|
|
1188
|
-
end
|
|
1189
|
-
# resource path
|
|
1190
|
-
local_var_path = '/v1/channels/airbnb/sync'
|
|
1191
|
-
|
|
1192
|
-
# query parameters
|
|
1193
|
-
query_params = opts[:query_params] || {}
|
|
1194
|
-
|
|
1195
|
-
# header parameters
|
|
1196
|
-
header_params = opts[:header_params] || {}
|
|
1197
|
-
|
|
1198
|
-
# form parameters
|
|
1199
|
-
form_params = opts[:form_params] || {}
|
|
1200
|
-
|
|
1201
|
-
# http body (model)
|
|
1202
|
-
post_body = opts[:debug_body]
|
|
1203
|
-
|
|
1204
|
-
# return_type
|
|
1205
|
-
return_type = opts[:debug_return_type]
|
|
1206
|
-
|
|
1207
|
-
# auth_names
|
|
1208
|
-
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
1209
|
-
|
|
1210
|
-
new_options = opts.merge(
|
|
1211
|
-
:operation => :"AirbnbApi.sync_airbnb",
|
|
1212
|
-
:header_params => header_params,
|
|
1213
|
-
:query_params => query_params,
|
|
1214
|
-
:form_params => form_params,
|
|
1215
|
-
:body => post_body,
|
|
1216
|
-
:auth_names => auth_names,
|
|
1217
|
-
:return_type => return_type
|
|
1218
|
-
)
|
|
1219
|
-
|
|
1220
|
-
data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
|
|
1221
|
-
if @api_client.config.debugging
|
|
1222
|
-
@api_client.config.logger.debug "API called: AirbnbApi#sync_airbnb\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
1223
|
-
end
|
|
1224
|
-
return data, status_code, headers
|
|
1225
|
-
end
|
|
1226
|
-
|
|
1227
1192
|
# Update Airbnb availability
|
|
1228
|
-
# Push
|
|
1193
|
+
# Push availability + restrictions to Airbnb. `type: \"calendar\"` writes per-date restrictions — min/max nights, closed-to-arrival, closed-to-departure, and stop-sell (`availability: \"unavailable\"`) — via a batch of operations that each target either a date range or an explicit date list. `type: \"rules\"` writes listing-level availability rules (default min/max nights, booking lead time, turnover days, seasonal/day-of-week min nights). Restrictions never leak across channels — this endpoint writes only to Airbnb.
|
|
1229
1194
|
# @param id [String]
|
|
1195
|
+
# @param airbnb_availability_write_request [AirbnbAvailabilityWriteRequest]
|
|
1230
1196
|
# @param [Hash] opts the optional parameters
|
|
1231
1197
|
# @return [nil]
|
|
1232
|
-
def update_airbnb_listing_availability(id, opts = {})
|
|
1233
|
-
update_airbnb_listing_availability_with_http_info(id, opts)
|
|
1198
|
+
def update_airbnb_listing_availability(id, airbnb_availability_write_request, opts = {})
|
|
1199
|
+
update_airbnb_listing_availability_with_http_info(id, airbnb_availability_write_request, opts)
|
|
1234
1200
|
nil
|
|
1235
1201
|
end
|
|
1236
1202
|
|
|
1237
1203
|
# Update Airbnb availability
|
|
1238
|
-
# Push
|
|
1204
|
+
# Push availability + restrictions to Airbnb. `type: \"calendar\"` writes per-date restrictions — min/max nights, closed-to-arrival, closed-to-departure, and stop-sell (`availability: \"unavailable\"`) — via a batch of operations that each target either a date range or an explicit date list. `type: \"rules\"` writes listing-level availability rules (default min/max nights, booking lead time, turnover days, seasonal/day-of-week min nights). Restrictions never leak across channels — this endpoint writes only to Airbnb.
|
|
1239
1205
|
# @param id [String]
|
|
1206
|
+
# @param airbnb_availability_write_request [AirbnbAvailabilityWriteRequest]
|
|
1240
1207
|
# @param [Hash] opts the optional parameters
|
|
1241
1208
|
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
1242
|
-
def update_airbnb_listing_availability_with_http_info(id, opts = {})
|
|
1209
|
+
def update_airbnb_listing_availability_with_http_info(id, airbnb_availability_write_request, opts = {})
|
|
1243
1210
|
if @api_client.config.debugging
|
|
1244
1211
|
@api_client.config.logger.debug 'Calling API: AirbnbApi.update_airbnb_listing_availability ...'
|
|
1245
1212
|
end
|
|
@@ -1247,6 +1214,10 @@ module Repull
|
|
|
1247
1214
|
if @api_client.config.client_side_validation && id.nil?
|
|
1248
1215
|
fail ArgumentError, "Missing the required parameter 'id' when calling AirbnbApi.update_airbnb_listing_availability"
|
|
1249
1216
|
end
|
|
1217
|
+
# verify the required parameter 'airbnb_availability_write_request' is set
|
|
1218
|
+
if @api_client.config.client_side_validation && airbnb_availability_write_request.nil?
|
|
1219
|
+
fail ArgumentError, "Missing the required parameter 'airbnb_availability_write_request' when calling AirbnbApi.update_airbnb_listing_availability"
|
|
1220
|
+
end
|
|
1250
1221
|
# resource path
|
|
1251
1222
|
local_var_path = '/v1/channels/airbnb/listings/{id}/availability'.sub('{id}', CGI.escape(id.to_s))
|
|
1252
1223
|
|
|
@@ -1255,12 +1226,17 @@ module Repull
|
|
|
1255
1226
|
|
|
1256
1227
|
# header parameters
|
|
1257
1228
|
header_params = opts[:header_params] || {}
|
|
1229
|
+
# HTTP header 'Content-Type'
|
|
1230
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
1231
|
+
if !content_type.nil?
|
|
1232
|
+
header_params['Content-Type'] = content_type
|
|
1233
|
+
end
|
|
1258
1234
|
|
|
1259
1235
|
# form parameters
|
|
1260
1236
|
form_params = opts[:form_params] || {}
|
|
1261
1237
|
|
|
1262
1238
|
# http body (model)
|
|
1263
|
-
post_body = opts[:debug_body]
|
|
1239
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(airbnb_availability_write_request)
|
|
1264
1240
|
|
|
1265
1241
|
# return_type
|
|
1266
1242
|
return_type = opts[:debug_return_type]
|
|
@@ -1286,21 +1262,23 @@ module Repull
|
|
|
1286
1262
|
end
|
|
1287
1263
|
|
|
1288
1264
|
# Update Airbnb pricing
|
|
1289
|
-
# Push pricing changes to Airbnb. The full
|
|
1265
|
+
# Push pricing changes to Airbnb. The `type` discriminator selects the sub-resource (model, standard settings, LOS, rate-plan, fees, currency, rule, or per-date `calendar`). `type: \"calendar\"` carries the full per-date restriction set — nightly price, min/max nights, closed-to-arrival, closed-to-departure, and stop-sell (`availability: \"unavailable\"`). For settings sub-resources the full object is replaced — GET first, mutate locally, then PUT the whole object.
|
|
1290
1266
|
# @param id [String]
|
|
1267
|
+
# @param airbnb_pricing_write_request [AirbnbPricingWriteRequest]
|
|
1291
1268
|
# @param [Hash] opts the optional parameters
|
|
1292
1269
|
# @return [nil]
|
|
1293
|
-
def update_airbnb_listing_pricing(id, opts = {})
|
|
1294
|
-
update_airbnb_listing_pricing_with_http_info(id, opts)
|
|
1270
|
+
def update_airbnb_listing_pricing(id, airbnb_pricing_write_request, opts = {})
|
|
1271
|
+
update_airbnb_listing_pricing_with_http_info(id, airbnb_pricing_write_request, opts)
|
|
1295
1272
|
nil
|
|
1296
1273
|
end
|
|
1297
1274
|
|
|
1298
1275
|
# Update Airbnb pricing
|
|
1299
|
-
# Push pricing changes to Airbnb. The full
|
|
1276
|
+
# Push pricing changes to Airbnb. The `type` discriminator selects the sub-resource (model, standard settings, LOS, rate-plan, fees, currency, rule, or per-date `calendar`). `type: \"calendar\"` carries the full per-date restriction set — nightly price, min/max nights, closed-to-arrival, closed-to-departure, and stop-sell (`availability: \"unavailable\"`). For settings sub-resources the full object is replaced — GET first, mutate locally, then PUT the whole object.
|
|
1300
1277
|
# @param id [String]
|
|
1278
|
+
# @param airbnb_pricing_write_request [AirbnbPricingWriteRequest]
|
|
1301
1279
|
# @param [Hash] opts the optional parameters
|
|
1302
1280
|
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
1303
|
-
def update_airbnb_listing_pricing_with_http_info(id, opts = {})
|
|
1281
|
+
def update_airbnb_listing_pricing_with_http_info(id, airbnb_pricing_write_request, opts = {})
|
|
1304
1282
|
if @api_client.config.debugging
|
|
1305
1283
|
@api_client.config.logger.debug 'Calling API: AirbnbApi.update_airbnb_listing_pricing ...'
|
|
1306
1284
|
end
|
|
@@ -1308,6 +1286,10 @@ module Repull
|
|
|
1308
1286
|
if @api_client.config.client_side_validation && id.nil?
|
|
1309
1287
|
fail ArgumentError, "Missing the required parameter 'id' when calling AirbnbApi.update_airbnb_listing_pricing"
|
|
1310
1288
|
end
|
|
1289
|
+
# verify the required parameter 'airbnb_pricing_write_request' is set
|
|
1290
|
+
if @api_client.config.client_side_validation && airbnb_pricing_write_request.nil?
|
|
1291
|
+
fail ArgumentError, "Missing the required parameter 'airbnb_pricing_write_request' when calling AirbnbApi.update_airbnb_listing_pricing"
|
|
1292
|
+
end
|
|
1311
1293
|
# resource path
|
|
1312
1294
|
local_var_path = '/v1/channels/airbnb/listings/{id}/pricing'.sub('{id}', CGI.escape(id.to_s))
|
|
1313
1295
|
|
|
@@ -1316,12 +1298,17 @@ module Repull
|
|
|
1316
1298
|
|
|
1317
1299
|
# header parameters
|
|
1318
1300
|
header_params = opts[:header_params] || {}
|
|
1301
|
+
# HTTP header 'Content-Type'
|
|
1302
|
+
content_type = @api_client.select_header_content_type(['application/json'])
|
|
1303
|
+
if !content_type.nil?
|
|
1304
|
+
header_params['Content-Type'] = content_type
|
|
1305
|
+
end
|
|
1319
1306
|
|
|
1320
1307
|
# form parameters
|
|
1321
1308
|
form_params = opts[:form_params] || {}
|
|
1322
1309
|
|
|
1323
1310
|
# http body (model)
|
|
1324
|
-
post_body = opts[:debug_body]
|
|
1311
|
+
post_body = opts[:debug_body] || @api_client.object_to_http_body(airbnb_pricing_write_request)
|
|
1325
1312
|
|
|
1326
1313
|
# return_type
|
|
1327
1314
|
return_type = opts[:debug_return_type]
|
data/lib/repull/api/atlas_api.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
=begin
|
|
2
2
|
#Repull API
|
|
3
3
|
|
|
4
|
-
#The unified API for vacation rental tech. Connect to 50+ PMS platforms and 4 OTA channels through one REST API. Built-in AI operations for guest communication, pricing, and listing optimization. ## Designed for AI agents Every error response on this API includes machine-parseable fields so an LLM (Claude in MCP, Cursor, Cline, GPT, etc.) can self-recover without escalating to a human: - `error.code` — stable string identifier (e.g. `invalid_params`, `rate_limit_exceeded`) - `error.message` — human-readable cause - `error.fix` — exact recovery steps (e.g. \"Pass `check_in_after` as ISO 8601: `?check_in_after=2026-01-15`\") - `error.docs_url` — link to the canonical write-up at `https://repull.dev/docs/errors/{code}` - `error.request_id` — id to correlate with server-side logs - `error.field` / `error.value_received` / `error.valid_values` / `error.did_you_mean` — when the error is parameter-specific - `error.retry_after` — seconds to wait before retrying (rate-limit + transient upstream) `Access-Control-Expose-Headers` lists `x-request-id` and the `X-RateLimit-*` family so browsers can read them on cross-origin responses. ## Quick Start 1. Get an API key at https://repull.dev/dashboard 2. Connect a PMS: `POST /v1/connect/{provider}` 3. List properties: `GET /v1/properties` 4. Get reservations: `GET /v1/reservations` ## Authentication All requests require a Bearer token: ``` Authorization: Bearer sk_test_YOUR_API_KEY ``` Sandbox keys start with `sk_test_`, production with `sk_live_`. ## Request Correlation (X-Request-ID) Every response carries an `X-Request-ID` header, e.g. `X-Request-ID: req_01HXY...`. Include this id in support tickets and bug reports — we can trace the full request lifecycle (auth, rate limit, handler, downstream calls, log row) from a single id. You may set the header on the inbound request to forward your own trace id; we will echo it back instead of generating a new one. Accepted format: `^[\\\\w.-]{1,128}$`. The id is also embedded in error envelopes as `request_id` so server-side log diffs work even when the response headers are stripped by an intermediate proxy. ## Rate Limits The public API enforces a per-API-key sliding-window rate limit on top of the per-tier monthly + daily-AI quotas. **Default policy:** 600 requests per 60 seconds, per API key. Sliding window — there is no fixed-minute boundary you can burst across. Every response includes: | Header | Meaning | |---|---| | `X-RateLimit-Limit` | Requests permitted in the current window. | | `X-RateLimit-Remaining` | Requests left in the current window after this call. | | `X-RateLimit-Reset` | Unix epoch (seconds) when the next slot opens. | | `X-RateLimit-Policy` | Machine-readable policy descriptor, e.g. `600;w=60`. | | `Retry-After` | Seconds to wait before retrying. **Only present on 429 responses.** | **On 429 (rate_limit_exceeded):** the response body matches the standard error envelope with `code: \"rate_limit_exceeded\"`, plus `limit`, `window_seconds`, `retry_after`, and `request_id` fields. SDKs MUST honor `Retry-After` and use exponential backoff with jitter on subsequent retries — never a tight loop. Recommended backoff: ``` sleep_ms = (Retry-After * 1000) + random(0..250) ``` Monthly + daily-AI tier quotas (`free`, `starter`, `custom`) are enforced separately and also surface as 429s; they include `tier`, `scope`, and `resets_at` fields. ## Plan Limits (402 — `listings_limit_exceeded`) The Repull API also enforces a per-tier cap on **active listings**: | Tier | Active listings cap | |---|---| | `free` |
|
|
4
|
+
#The unified API for vacation rental tech. Connect to 50+ PMS platforms and 4 OTA channels through one REST API. Built-in AI operations for guest communication, pricing, and listing optimization. ## Designed for AI agents Every error response on this API includes machine-parseable fields so an LLM (Claude in MCP, Cursor, Cline, GPT, etc.) can self-recover without escalating to a human: - `error.code` — stable string identifier (e.g. `invalid_params`, `rate_limit_exceeded`) - `error.message` — human-readable cause - `error.fix` — exact recovery steps (e.g. \"Pass `check_in_after` as ISO 8601: `?check_in_after=2026-01-15`\") - `error.docs_url` — link to the canonical write-up at `https://repull.dev/docs/errors/{code}` - `error.request_id` — id to correlate with server-side logs - `error.field` / `error.value_received` / `error.valid_values` / `error.did_you_mean` — when the error is parameter-specific - `error.retry_after` — seconds to wait before retrying (rate-limit + transient upstream) `Access-Control-Expose-Headers` lists `x-request-id` and the `X-RateLimit-*` family so browsers can read them on cross-origin responses. ## Quick Start 1. Get an API key at https://repull.dev/dashboard 2. Connect a PMS: `POST /v1/connect/{provider}` 3. List properties: `GET /v1/properties` 4. Get reservations: `GET /v1/reservations` ## Authentication All requests require a Bearer token: ``` Authorization: Bearer sk_test_YOUR_API_KEY ``` Sandbox keys start with `sk_test_`, production with `sk_live_`. ## Request Correlation (X-Request-ID) Every response carries an `X-Request-ID` header, e.g. `X-Request-ID: req_01HXY...`. Include this id in support tickets and bug reports — we can trace the full request lifecycle (auth, rate limit, handler, downstream calls, log row) from a single id. You may set the header on the inbound request to forward your own trace id; we will echo it back instead of generating a new one. Accepted format: `^[\\\\w.-]{1,128}$`. The id is also embedded in error envelopes as `request_id` so server-side log diffs work even when the response headers are stripped by an intermediate proxy. ## Rate Limits The public API enforces a per-API-key sliding-window rate limit on top of the per-tier monthly + daily-AI quotas. **Default policy:** 600 requests per 60 seconds, per API key. Sliding window — there is no fixed-minute boundary you can burst across. Every response includes: | Header | Meaning | |---|---| | `X-RateLimit-Limit` | Requests permitted in the current window. | | `X-RateLimit-Remaining` | Requests left in the current window after this call. | | `X-RateLimit-Reset` | Unix epoch (seconds) when the next slot opens. | | `X-RateLimit-Policy` | Machine-readable policy descriptor, e.g. `600;w=60`. | | `Retry-After` | Seconds to wait before retrying. **Only present on 429 responses.** | **On 429 (rate_limit_exceeded):** the response body matches the standard error envelope with `code: \"rate_limit_exceeded\"`, plus `limit`, `window_seconds`, `retry_after`, and `request_id` fields. SDKs MUST honor `Retry-After` and use exponential backoff with jitter on subsequent retries — never a tight loop. Recommended backoff: ``` sleep_ms = (Retry-After * 1000) + random(0..250) ``` Monthly + daily-AI tier quotas (`free`, `starter`, `custom`) are enforced separately and also surface as 429s; they include `tier`, `scope`, and `resets_at` fields. ## Plan Limits (402 — `listings_limit_exceeded`) The Repull API also enforces a per-tier cap on **active listings**: | Tier | Active listings cap | |---|---| | `free` | 3 | | `starter` | 50 | | `custom` | unlimited | When a customer's active-listing count is above their tier cap, the API returns **`402 Payment Required`** with `error.code = \"listings_limit_exceeded\"` on every route EXCEPT: - `/v1/health` — uptime probes are never gated. - `/v1/usage/*` — so dashboards can render the over-cap state. - Any `DELETE` — so the customer can trim listings to get back under the cap without paying. Unlike 429, 402 is NOT a \"wait and retry\" condition — `Retry-After` is not set. The only paths back to 200 are: 1. `DELETE` enough listings to come back under the cap, or 2. Upgrade at `https://repull.dev/dashboard/billing`. The server-side usage cache is 60s, so the first 200 after an upgrade may take up to a minute. The envelope mirrors `rate_limit_exceeded` for SDK ergonomics: `tier`, `limit`, `active_listings`, `upgrade_url`, plus the standard `code` / `message` / `fix` / `docs_url` / `request_id`.
|
|
5
5
|
|
|
6
6
|
The version of the OpenAPI document: 1.0.0
|
|
7
7
|
Contact: ivan@vanio.ai
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
=begin
|
|
2
2
|
#Repull API
|
|
3
3
|
|
|
4
|
-
#The unified API for vacation rental tech. Connect to 50+ PMS platforms and 4 OTA channels through one REST API. Built-in AI operations for guest communication, pricing, and listing optimization. ## Designed for AI agents Every error response on this API includes machine-parseable fields so an LLM (Claude in MCP, Cursor, Cline, GPT, etc.) can self-recover without escalating to a human: - `error.code` — stable string identifier (e.g. `invalid_params`, `rate_limit_exceeded`) - `error.message` — human-readable cause - `error.fix` — exact recovery steps (e.g. \"Pass `check_in_after` as ISO 8601: `?check_in_after=2026-01-15`\") - `error.docs_url` — link to the canonical write-up at `https://repull.dev/docs/errors/{code}` - `error.request_id` — id to correlate with server-side logs - `error.field` / `error.value_received` / `error.valid_values` / `error.did_you_mean` — when the error is parameter-specific - `error.retry_after` — seconds to wait before retrying (rate-limit + transient upstream) `Access-Control-Expose-Headers` lists `x-request-id` and the `X-RateLimit-*` family so browsers can read them on cross-origin responses. ## Quick Start 1. Get an API key at https://repull.dev/dashboard 2. Connect a PMS: `POST /v1/connect/{provider}` 3. List properties: `GET /v1/properties` 4. Get reservations: `GET /v1/reservations` ## Authentication All requests require a Bearer token: ``` Authorization: Bearer sk_test_YOUR_API_KEY ``` Sandbox keys start with `sk_test_`, production with `sk_live_`. ## Request Correlation (X-Request-ID) Every response carries an `X-Request-ID` header, e.g. `X-Request-ID: req_01HXY...`. Include this id in support tickets and bug reports — we can trace the full request lifecycle (auth, rate limit, handler, downstream calls, log row) from a single id. You may set the header on the inbound request to forward your own trace id; we will echo it back instead of generating a new one. Accepted format: `^[\\\\w.-]{1,128}$`. The id is also embedded in error envelopes as `request_id` so server-side log diffs work even when the response headers are stripped by an intermediate proxy. ## Rate Limits The public API enforces a per-API-key sliding-window rate limit on top of the per-tier monthly + daily-AI quotas. **Default policy:** 600 requests per 60 seconds, per API key. Sliding window — there is no fixed-minute boundary you can burst across. Every response includes: | Header | Meaning | |---|---| | `X-RateLimit-Limit` | Requests permitted in the current window. | | `X-RateLimit-Remaining` | Requests left in the current window after this call. | | `X-RateLimit-Reset` | Unix epoch (seconds) when the next slot opens. | | `X-RateLimit-Policy` | Machine-readable policy descriptor, e.g. `600;w=60`. | | `Retry-After` | Seconds to wait before retrying. **Only present on 429 responses.** | **On 429 (rate_limit_exceeded):** the response body matches the standard error envelope with `code: \"rate_limit_exceeded\"`, plus `limit`, `window_seconds`, `retry_after`, and `request_id` fields. SDKs MUST honor `Retry-After` and use exponential backoff with jitter on subsequent retries — never a tight loop. Recommended backoff: ``` sleep_ms = (Retry-After * 1000) + random(0..250) ``` Monthly + daily-AI tier quotas (`free`, `starter`, `custom`) are enforced separately and also surface as 429s; they include `tier`, `scope`, and `resets_at` fields. ## Plan Limits (402 — `listings_limit_exceeded`) The Repull API also enforces a per-tier cap on **active listings**: | Tier | Active listings cap | |---|---| | `free` |
|
|
4
|
+
#The unified API for vacation rental tech. Connect to 50+ PMS platforms and 4 OTA channels through one REST API. Built-in AI operations for guest communication, pricing, and listing optimization. ## Designed for AI agents Every error response on this API includes machine-parseable fields so an LLM (Claude in MCP, Cursor, Cline, GPT, etc.) can self-recover without escalating to a human: - `error.code` — stable string identifier (e.g. `invalid_params`, `rate_limit_exceeded`) - `error.message` — human-readable cause - `error.fix` — exact recovery steps (e.g. \"Pass `check_in_after` as ISO 8601: `?check_in_after=2026-01-15`\") - `error.docs_url` — link to the canonical write-up at `https://repull.dev/docs/errors/{code}` - `error.request_id` — id to correlate with server-side logs - `error.field` / `error.value_received` / `error.valid_values` / `error.did_you_mean` — when the error is parameter-specific - `error.retry_after` — seconds to wait before retrying (rate-limit + transient upstream) `Access-Control-Expose-Headers` lists `x-request-id` and the `X-RateLimit-*` family so browsers can read them on cross-origin responses. ## Quick Start 1. Get an API key at https://repull.dev/dashboard 2. Connect a PMS: `POST /v1/connect/{provider}` 3. List properties: `GET /v1/properties` 4. Get reservations: `GET /v1/reservations` ## Authentication All requests require a Bearer token: ``` Authorization: Bearer sk_test_YOUR_API_KEY ``` Sandbox keys start with `sk_test_`, production with `sk_live_`. ## Request Correlation (X-Request-ID) Every response carries an `X-Request-ID` header, e.g. `X-Request-ID: req_01HXY...`. Include this id in support tickets and bug reports — we can trace the full request lifecycle (auth, rate limit, handler, downstream calls, log row) from a single id. You may set the header on the inbound request to forward your own trace id; we will echo it back instead of generating a new one. Accepted format: `^[\\\\w.-]{1,128}$`. The id is also embedded in error envelopes as `request_id` so server-side log diffs work even when the response headers are stripped by an intermediate proxy. ## Rate Limits The public API enforces a per-API-key sliding-window rate limit on top of the per-tier monthly + daily-AI quotas. **Default policy:** 600 requests per 60 seconds, per API key. Sliding window — there is no fixed-minute boundary you can burst across. Every response includes: | Header | Meaning | |---|---| | `X-RateLimit-Limit` | Requests permitted in the current window. | | `X-RateLimit-Remaining` | Requests left in the current window after this call. | | `X-RateLimit-Reset` | Unix epoch (seconds) when the next slot opens. | | `X-RateLimit-Policy` | Machine-readable policy descriptor, e.g. `600;w=60`. | | `Retry-After` | Seconds to wait before retrying. **Only present on 429 responses.** | **On 429 (rate_limit_exceeded):** the response body matches the standard error envelope with `code: \"rate_limit_exceeded\"`, plus `limit`, `window_seconds`, `retry_after`, and `request_id` fields. SDKs MUST honor `Retry-After` and use exponential backoff with jitter on subsequent retries — never a tight loop. Recommended backoff: ``` sleep_ms = (Retry-After * 1000) + random(0..250) ``` Monthly + daily-AI tier quotas (`free`, `starter`, `custom`) are enforced separately and also surface as 429s; they include `tier`, `scope`, and `resets_at` fields. ## Plan Limits (402 — `listings_limit_exceeded`) The Repull API also enforces a per-tier cap on **active listings**: | Tier | Active listings cap | |---|---| | `free` | 3 | | `starter` | 50 | | `custom` | unlimited | When a customer's active-listing count is above their tier cap, the API returns **`402 Payment Required`** with `error.code = \"listings_limit_exceeded\"` on every route EXCEPT: - `/v1/health` — uptime probes are never gated. - `/v1/usage/*` — so dashboards can render the over-cap state. - Any `DELETE` — so the customer can trim listings to get back under the cap without paying. Unlike 429, 402 is NOT a \"wait and retry\" condition — `Retry-After` is not set. The only paths back to 200 are: 1. `DELETE` enough listings to come back under the cap, or 2. Upgrade at `https://repull.dev/dashboard/billing`. The server-side usage cache is 60s, so the first 200 after an upgrade may take up to a minute. The envelope mirrors `rate_limit_exceeded` for SDK ergonomics: `tier`, `limit`, `active_listings`, `upgrade_url`, plus the standard `code` / `message` / `fix` / `docs_url` / `request_id`.
|
|
5
5
|
|
|
6
6
|
The version of the OpenAPI document: 1.0.0
|
|
7
7
|
Contact: ivan@vanio.ai
|
|
@@ -80,60 +80,5 @@ module Repull
|
|
|
80
80
|
end
|
|
81
81
|
return data, status_code, headers
|
|
82
82
|
end
|
|
83
|
-
|
|
84
|
-
# Get plan and usage
|
|
85
|
-
# Fetch the current plan, usage counters, and billing-cycle reset date for this workspace. Use this to surface a \"you have used X / Y\" indicator in your dashboard.
|
|
86
|
-
# @param [Hash] opts the optional parameters
|
|
87
|
-
# @return [nil]
|
|
88
|
-
def get_billing(opts = {})
|
|
89
|
-
get_billing_with_http_info(opts)
|
|
90
|
-
nil
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Get plan and usage
|
|
94
|
-
# Fetch the current plan, usage counters, and billing-cycle reset date for this workspace. Use this to surface a \"you have used X / Y\" indicator in your dashboard.
|
|
95
|
-
# @param [Hash] opts the optional parameters
|
|
96
|
-
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
97
|
-
def get_billing_with_http_info(opts = {})
|
|
98
|
-
if @api_client.config.debugging
|
|
99
|
-
@api_client.config.logger.debug 'Calling API: BillingApi.get_billing ...'
|
|
100
|
-
end
|
|
101
|
-
# resource path
|
|
102
|
-
local_var_path = '/v1/billing'
|
|
103
|
-
|
|
104
|
-
# query parameters
|
|
105
|
-
query_params = opts[:query_params] || {}
|
|
106
|
-
|
|
107
|
-
# header parameters
|
|
108
|
-
header_params = opts[:header_params] || {}
|
|
109
|
-
|
|
110
|
-
# form parameters
|
|
111
|
-
form_params = opts[:form_params] || {}
|
|
112
|
-
|
|
113
|
-
# http body (model)
|
|
114
|
-
post_body = opts[:debug_body]
|
|
115
|
-
|
|
116
|
-
# return_type
|
|
117
|
-
return_type = opts[:debug_return_type]
|
|
118
|
-
|
|
119
|
-
# auth_names
|
|
120
|
-
auth_names = opts[:debug_auth_names] || ['bearerAuth']
|
|
121
|
-
|
|
122
|
-
new_options = opts.merge(
|
|
123
|
-
:operation => :"BillingApi.get_billing",
|
|
124
|
-
:header_params => header_params,
|
|
125
|
-
:query_params => query_params,
|
|
126
|
-
:form_params => form_params,
|
|
127
|
-
:body => post_body,
|
|
128
|
-
:auth_names => auth_names,
|
|
129
|
-
:return_type => return_type
|
|
130
|
-
)
|
|
131
|
-
|
|
132
|
-
data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
|
|
133
|
-
if @api_client.config.debugging
|
|
134
|
-
@api_client.config.logger.debug "API called: BillingApi#get_billing\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
|
|
135
|
-
end
|
|
136
|
-
return data, status_code, headers
|
|
137
|
-
end
|
|
138
83
|
end
|
|
139
84
|
end
|