repull 0.2.25 → 0.2.26

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.
@@ -16,6 +16,9 @@ require 'time'
16
16
  module Repull
17
17
  # A booking/reservation from a connected PMS. Identical shape between list-row (`GET /v1/reservations`) and detail (`GET /v1/reservations/{id}`) — SDK consumers can use the same type for both. The canonical (post-2026-05) shape uses nested `primaryGuest`, `occupancy`, `financials` blocks. The legacy flat fields (`guestId`, `totalPrice`, `currency`, `guestDetails`) remain populated for back-compat and are marked `deprecated` here. New consumers should read from the nested blocks; existing consumers continue to work unchanged.
18
18
  class Reservation < ApiModelBase
19
+ # The connected account this reservation belongs to. List endpoint.
20
+ attr_accessor :account
21
+
19
22
  # Internal Repull reservation ID
20
23
  attr_accessor :id
21
24
 
@@ -91,6 +94,7 @@ module Repull
91
94
  # Attribute mapping from ruby-style variable name to JSON key.
92
95
  def self.attribute_map
93
96
  {
97
+ :'account' => :'account',
94
98
  :'id' => :'id',
95
99
  :'listing_id' => :'listingId',
96
100
  :'guest_id' => :'guestId',
@@ -132,6 +136,7 @@ module Repull
132
136
  # Attribute type mapping.
133
137
  def self.openapi_types
134
138
  {
139
+ :'account' => :'RecordAccount',
135
140
  :'id' => :'String',
136
141
  :'listing_id' => :'String',
137
142
  :'guest_id' => :'String',
@@ -163,6 +168,7 @@ module Repull
163
168
  # List of attributes with nullable: true
164
169
  def self.openapi_nullable
165
170
  Set.new([
171
+ :'account',
166
172
  :'check_in_time',
167
173
  :'check_out_time',
168
174
  :'source',
@@ -189,6 +195,10 @@ module Repull
189
195
  h[k.to_sym] = v
190
196
  }
191
197
 
198
+ if attributes.key?(:'account')
199
+ self.account = attributes[:'account']
200
+ end
201
+
192
202
  if attributes.key?(:'id')
193
203
  self.id = attributes[:'id']
194
204
  else
@@ -448,6 +458,7 @@ module Repull
448
458
  def ==(o)
449
459
  return true if self.equal?(o)
450
460
  self.class == o.class &&
461
+ account == o.account &&
451
462
  id == o.id &&
452
463
  listing_id == o.listing_id &&
453
464
  guest_id == o.guest_id &&
@@ -484,7 +495,7 @@ module Repull
484
495
  # Calculates hash code according to all attributes.
485
496
  # @return [Integer] Hash code
486
497
  def hash
487
- [id, listing_id, guest_id, check_in, check_out, check_in_time, check_out_time, status, status_detail, pending_reason, respond_by, source, platform, confirmation_code, unit, primary_guest, occupancy, financials, total_price, currency, guest_details, created_at, updated_at, booked_at, guest_name].hash
498
+ [account, id, listing_id, guest_id, check_in, check_out, check_in_time, check_out_time, status, status_detail, pending_reason, respond_by, source, platform, confirmation_code, unit, primary_guest, occupancy, financials, total_price, currency, guest_details, created_at, updated_at, booked_at, guest_name].hash
488
499
  end
489
500
 
490
501
  # Builds the object from hash
@@ -16,6 +16,9 @@ require 'time'
16
16
  module Repull
17
17
  # A guest or host review unified across channels. Returned by `GET /v1/reviews` and `GET /v1/reviews/{id}`. Includes every channel's reviews once they have been imported.
18
18
  class Review < ApiModelBase
19
+ # The connected account this review belongs to. List endpoint.
20
+ attr_accessor :account
21
+
19
22
  # Internal Repull review id — pass back to `/v1/reviews/{id}`.
20
23
  attr_accessor :id
21
24
 
@@ -75,6 +78,7 @@ module Repull
75
78
  # Attribute mapping from ruby-style variable name to JSON key.
76
79
  def self.attribute_map
77
80
  {
81
+ :'account' => :'account',
78
82
  :'id' => :'id',
79
83
  :'external_id' => :'externalId',
80
84
  :'platform' => :'platform',
@@ -113,6 +117,7 @@ module Repull
113
117
  # Attribute type mapping.
114
118
  def self.openapi_types
115
119
  {
120
+ :'account' => :'RecordAccount',
116
121
  :'id' => :'String',
117
122
  :'external_id' => :'String',
118
123
  :'platform' => :'String',
@@ -141,6 +146,7 @@ module Repull
141
146
  # List of attributes with nullable: true
142
147
  def self.openapi_nullable
143
148
  Set.new([
149
+ :'account',
144
150
  :'platform',
145
151
  :'listing_id',
146
152
  :'provider_property_id',
@@ -177,6 +183,10 @@ module Repull
177
183
  h[k.to_sym] = v
178
184
  }
179
185
 
186
+ if attributes.key?(:'account')
187
+ self.account = attributes[:'account']
188
+ end
189
+
180
190
  if attributes.key?(:'id')
181
191
  self.id = attributes[:'id']
182
192
  end
@@ -288,6 +298,7 @@ module Repull
288
298
  def ==(o)
289
299
  return true if self.equal?(o)
290
300
  self.class == o.class &&
301
+ account == o.account &&
291
302
  id == o.id &&
292
303
  external_id == o.external_id &&
293
304
  platform == o.platform &&
@@ -321,7 +332,7 @@ module Repull
321
332
  # Calculates hash code according to all attributes.
322
333
  # @return [Integer] Hash code
323
334
  def hash
324
- [id, external_id, platform, listing_id, provider_property_id, reservation_id, reservation_confirmation_code, guest_id, guest_name, guest_avatar, reviewer_role, rating, categories, public_review, private_feedback, is_reviewee_recommended, response, submitted_at, updated_at, expires_at, hidden, language].hash
335
+ [account, id, external_id, platform, listing_id, provider_property_id, reservation_id, reservation_confirmation_code, guest_id, guest_name, guest_avatar, reviewer_role, rating, categories, public_review, private_feedback, is_reviewee_recommended, response, submitted_at, updated_at, expires_at, hidden, language].hash
325
336
  end
326
337
 
327
338
  # Builds the object from hash
@@ -25,6 +25,7 @@ module Repull
25
25
  :'AiOperationCompletedEvent',
26
26
  :'AiOperationFailedEvent',
27
27
  :'CalendarUpdatedEvent',
28
+ :'ConnectSessionCompletedEvent',
28
29
  :'InquiryCreatedEvent',
29
30
  :'InquiryUpdatedEvent',
30
31
  :'ListingCreatedEvent',
@@ -67,6 +68,7 @@ module Repull
67
68
  :'ai.operation.completed' => :'AiOperationCompletedEvent',
68
69
  :'ai.operation.failed' => :'AiOperationFailedEvent',
69
70
  :'calendar.updated' => :'CalendarUpdatedEvent',
71
+ :'connect.session.completed' => :'ConnectSessionCompletedEvent',
70
72
  :'inquiry.created' => :'InquiryCreatedEvent',
71
73
  :'inquiry.updated' => :'InquiryUpdatedEvent',
72
74
  :'listing.created' => :'ListingCreatedEvent',
@@ -34,6 +34,7 @@ module Repull
34
34
  LISTING_REACTIVATED = "listing.reactivated".freeze
35
35
  CALENDAR_UPDATED = "calendar.updated".freeze
36
36
  ACCOUNT_CREATED = "account.created".freeze
37
+ CONNECT_SESSION_COMPLETED = "connect.session.completed".freeze
37
38
  ACCOUNT_DISCONNECTED = "account.disconnected".freeze
38
39
  REVIEW_CREATED = "review.created".freeze
39
40
  REVIEW_RESPONDED = "review.responded".freeze
@@ -48,7 +49,7 @@ module Repull
48
49
  USAGE_QUOTA_WARNING = "usage.quota.warning".freeze
49
50
 
50
51
  def self.all_vars
51
- @all_vars ||= [RESERVATION_CREATED, RESERVATION_UPDATED, RESERVATION_CANCELLED, RESERVATION_MESSAGE_RECEIVED, RESERVATION_MESSAGE_SENT, RESERVATION_MESSAGE_UPDATED, RESERVATION_ALTERATION_CREATED, RESERVATION_ALTERATION_RESPONDED, RESERVATION_REQUEST_CREATED, RESERVATION_REQUEST_UPDATED, INQUIRY_CREATED, INQUIRY_UPDATED, LISTING_CREATED, LISTING_UPDATED, LISTING_DELETED, LISTING_SUSPENDED, LISTING_REACTIVATED, CALENDAR_UPDATED, ACCOUNT_CREATED, ACCOUNT_DISCONNECTED, REVIEW_CREATED, REVIEW_RESPONDED, AI_OPERATION_COMPLETED, AI_OPERATION_FAILED, PAYMENT_COMPLETED, PAYMENT_REFUNDED, PAYOUT_COMPLETED, MIGRATION_COMPLETED, MIGRATION_FAILED, REPULL_PING, USAGE_QUOTA_WARNING].freeze
52
+ @all_vars ||= [RESERVATION_CREATED, RESERVATION_UPDATED, RESERVATION_CANCELLED, RESERVATION_MESSAGE_RECEIVED, RESERVATION_MESSAGE_SENT, RESERVATION_MESSAGE_UPDATED, RESERVATION_ALTERATION_CREATED, RESERVATION_ALTERATION_RESPONDED, RESERVATION_REQUEST_CREATED, RESERVATION_REQUEST_UPDATED, INQUIRY_CREATED, INQUIRY_UPDATED, LISTING_CREATED, LISTING_UPDATED, LISTING_DELETED, LISTING_SUSPENDED, LISTING_REACTIVATED, CALENDAR_UPDATED, ACCOUNT_CREATED, CONNECT_SESSION_COMPLETED, ACCOUNT_DISCONNECTED, REVIEW_CREATED, REVIEW_RESPONDED, AI_OPERATION_COMPLETED, AI_OPERATION_FAILED, PAYMENT_COMPLETED, PAYMENT_REFUNDED, PAYOUT_COMPLETED, MIGRATION_COMPLETED, MIGRATION_FAILED, REPULL_PING, USAGE_QUOTA_WARNING].freeze
52
53
  end
53
54
 
54
55
  # Builds the enum from string
@@ -11,5 +11,5 @@ Generator version: 7.22.0
11
11
  =end
12
12
 
13
13
  module Repull
14
- VERSION = '0.2.25'
14
+ VERSION = '0.2.26'
15
15
  end
data/lib/repull.rb CHANGED
@@ -160,6 +160,8 @@ require 'repull/models/connect_host'
160
160
  require 'repull/models/connect_provider'
161
161
  require 'repull/models/connect_provider_list_response'
162
162
  require 'repull/models/connect_session'
163
+ require 'repull/models/connect_session_completed_event'
164
+ require 'repull/models/connect_session_completed_payload'
163
165
  require 'repull/models/connect_status'
164
166
  require 'repull/models/connect_status_accounts_inner'
165
167
  require 'repull/models/connection'
@@ -453,6 +455,7 @@ require 'repull/models/property_list_response'
453
455
  require 'repull/models/publish_section_error'
454
456
  require 'repull/models/quote'
455
457
  require 'repull/models/quote_pricing'
458
+ require 'repull/models/record_account'
456
459
  require 'repull/models/reorder_airbnb_listing_photos200_response'
457
460
  require 'repull/models/reorder_airbnb_listing_photos200_response_data'
458
461
  require 'repull/models/reorder_airbnb_listing_photos_request'
data/openapi/v1.json CHANGED
@@ -151,8 +151,15 @@
151
151
  "schemas": {
152
152
  "Property": {
153
153
  "type": "object",
154
- "description": "A vacation rental property in your Repull workspace. Backed by the core `listings` row \u2014 enriched per-PMS fields (bedrooms, property type, provider id, etc.) live in provider-specific detail tables and are NOT returned here.\n\nField availability differs by endpoint:\n- `channels` is returned by the list endpoint (`GET /v1/properties`) only.\n- `latitude`, `longitude`, `createdAt`, and `amenities` are returned by the detail endpoint (`GET /v1/properties/{id}`) only. `amenities` requires `?include=amenities`.\n\nAn **inactive** property (`status: inactive`) appears only in the list endpoint, and only when `?status=inactive|all` asks for it. Such a row carries identity fields only \u2014 `id`, `name`, `status`, `lifecycleStatus`, `channels`, `updatedAt` \u2014 so every other field is absent until the property is activated. Every other endpoint answers `403 listing_inactive` for it.",
154
+ "description": "A vacation rental property in your Repull workspace. Backed by the core `listings` row \u2014 enriched per-PMS fields (bedrooms, property type, provider id, etc.) live in provider-specific detail tables and are NOT returned here.\n\nField availability differs by endpoint:\n- `channels` is returned by the list endpoint (`GET /v1/properties`) only.\n- `latitude`, `longitude`, `createdAt`, and `amenities` are returned by the detail endpoint (`GET /v1/properties/{id}`) only. `amenities` requires `?include=amenities`.\n\nAn **inactive** property (`status: inactive`) appears only in the list endpoint, and only when `?status=inactive|all` asks for it. Such a row carries identity fields only \u2014 `id`, `name`, `status`, `lifecycleStatus`, `channels`, `accounts`, `updatedAt` \u2014 so every other field is absent until the property is activated. Every other endpoint answers `403 listing_inactive` for it.",
155
155
  "properties": {
156
+ "accounts": {
157
+ "type": "array",
158
+ "items": {
159
+ "$ref": "#/components/schemas/RecordAccount"
160
+ },
161
+ "description": "The connected account the property belongs to on each channel it is on. List endpoint."
162
+ },
156
163
  "id": {
157
164
  "type": "string",
158
165
  "description": "Internal Repull property ID. Equal to the listing id (`listings.id`); the same integer is used as `listingId` on reservations and `propertyId` on availability."
@@ -537,6 +544,14 @@
537
544
  "type": "object",
538
545
  "description": "A booking/reservation from a connected PMS. Identical shape between list-row (`GET /v1/reservations`) and detail (`GET /v1/reservations/{id}`) \u2014 SDK consumers can use the same type for both.\n\nThe canonical (post-2026-05) shape uses nested `primaryGuest`, `occupancy`, `financials` blocks. The legacy flat fields (`guestId`, `totalPrice`, `currency`, `guestDetails`) remain populated for back-compat and are marked `deprecated` here. New consumers should read from the nested blocks; existing consumers continue to work unchanged.",
539
546
  "properties": {
547
+ "account": {
548
+ "allOf": [
549
+ {
550
+ "$ref": "#/components/schemas/RecordAccount"
551
+ }
552
+ ],
553
+ "description": "The connected account this reservation belongs to. List endpoint."
554
+ },
540
555
  "id": {
541
556
  "type": "string",
542
557
  "description": "Internal Repull reservation ID"
@@ -977,6 +992,14 @@
977
992
  "type": "object",
978
993
  "description": "Channel-agnostic message thread between the host workspace and a guest. Returned by `GET /v1/conversations`. The `id` is the internal Repull thread id (integer) \u2014 pass it back as the `{id}` path param on detail / messages calls.",
979
994
  "properties": {
995
+ "account": {
996
+ "allOf": [
997
+ {
998
+ "$ref": "#/components/schemas/RecordAccount"
999
+ }
1000
+ ],
1001
+ "description": "The connected account this conversation belongs to. List endpoint."
1002
+ },
980
1003
  "id": {
981
1004
  "type": "string"
982
1005
  },
@@ -1319,6 +1342,14 @@
1319
1342
  "type": "object",
1320
1343
  "description": "A guest or host review unified across channels. Returned by `GET /v1/reviews` and `GET /v1/reviews/{id}`. Includes every channel's reviews once they have been imported.",
1321
1344
  "properties": {
1345
+ "account": {
1346
+ "allOf": [
1347
+ {
1348
+ "$ref": "#/components/schemas/RecordAccount"
1349
+ }
1350
+ ],
1351
+ "description": "The connected account this review belongs to. List endpoint."
1352
+ },
1322
1353
  "id": {
1323
1354
  "type": "string",
1324
1355
  "description": "Internal Repull review id \u2014 pass back to `/v1/reviews/{id}`."
@@ -2491,6 +2522,7 @@
2491
2522
  "listing.reactivated",
2492
2523
  "calendar.updated",
2493
2524
  "account.created",
2525
+ "connect.session.completed",
2494
2526
  "account.disconnected",
2495
2527
  "review.created",
2496
2528
  "review.responded",
@@ -3543,6 +3575,46 @@
3543
3575
  }
3544
3576
  }
3545
3577
  },
3578
+ "ConnectSessionCompletedPayload": {
3579
+ "type": "object",
3580
+ "description": "Payload for `connect.session.completed`. A user finished a Connect session, on any channel or PMS. Use `state` (your token from session creation) or `sessionId` to tie the connection to your own user; the account it names is keyed the same way as every other event's `account` block.",
3581
+ "properties": {
3582
+ "sessionId": {
3583
+ "type": "string",
3584
+ "example": "cs_abc123"
3585
+ },
3586
+ "state": {
3587
+ "type": "string",
3588
+ "nullable": true,
3589
+ "description": "The `state` you passed when creating the session.",
3590
+ "example": "user_8421"
3591
+ },
3592
+ "provider": {
3593
+ "type": "string",
3594
+ "nullable": true,
3595
+ "description": "Channel or PMS: airbnb, booking, booking_extranet, vrbo, plumguide, hostaway, \u2026",
3596
+ "example": "vrbo"
3597
+ },
3598
+ "externalAccountId": {
3599
+ "type": "string",
3600
+ "nullable": true,
3601
+ "description": "The provider's own account id \u2014 Airbnb host id, Booking.com hotel id, Vrbo account id, or the PMS account.",
3602
+ "example": "36"
3603
+ },
3604
+ "connectionId": {
3605
+ "type": "integer",
3606
+ "nullable": true,
3607
+ "description": "Repull connection id, when the account has one (the `X-Account-Id` value)."
3608
+ },
3609
+ "purpose": {
3610
+ "type": "string"
3611
+ },
3612
+ "completedAt": {
3613
+ "type": "string",
3614
+ "format": "date-time"
3615
+ }
3616
+ }
3617
+ },
3546
3618
  "AccountDisconnectedPayload": {
3547
3619
  "type": "object",
3548
3620
  "description": "Payload for `account.disconnected`. A PMS or channel connection was revoked, expired, or rejected by the upstream provider.",
@@ -3892,6 +3964,29 @@
3892
3964
  }
3893
3965
  }
3894
3966
  },
3967
+ "RecordAccount": {
3968
+ "type": "object",
3969
+ "nullable": true,
3970
+ "description": "The connected account a record belongs to \u2014 keyed exactly like the webhook `account` block and `connect.session.completed`, so one `provider:externalAccountId` key routes reads and events to the same user. `null` when it cannot be resolved (never guessed).",
3971
+ "properties": {
3972
+ "provider": {
3973
+ "type": "string",
3974
+ "example": "airbnb",
3975
+ "description": "airbnb, booking, booking_extranet, vrbo, or the PMS id (hostaway, cloudbeds, \u2026)."
3976
+ },
3977
+ "externalAccountId": {
3978
+ "type": "string",
3979
+ "example": "79730216",
3980
+ "description": "The provider's own account id \u2014 Airbnb host id, Booking.com hotel id, Extranet login, Vrbo account, or the PMS account."
3981
+ },
3982
+ "connectionId": {
3983
+ "type": "string",
3984
+ "nullable": true,
3985
+ "description": "Repull connection id (`X-Account-Id`), when the account has one. A string, like every id in API responses.",
3986
+ "example": "126"
3987
+ }
3988
+ }
3989
+ },
3895
3990
  "WebhookEventAccount": {
3896
3991
  "type": "object",
3897
3992
  "nullable": true,
@@ -4599,6 +4694,42 @@
4599
4694
  }
4600
4695
  }
4601
4696
  },
4697
+ "ConnectSessionCompletedEvent": {
4698
+ "type": "object",
4699
+ "required": [
4700
+ "event",
4701
+ "eventId",
4702
+ "apiVersion",
4703
+ "timestamp",
4704
+ "data"
4705
+ ],
4706
+ "properties": {
4707
+ "event": {
4708
+ "type": "string",
4709
+ "description": "The event name. This field is `event`, not `type`."
4710
+ },
4711
+ "eventId": {
4712
+ "type": "string",
4713
+ "format": "uuid",
4714
+ "description": "Stable across every delivery and replay of this logical event \u2014 dedupe on it."
4715
+ },
4716
+ "apiVersion": {
4717
+ "type": "string",
4718
+ "example": "2026-04"
4719
+ },
4720
+ "timestamp": {
4721
+ "type": "string",
4722
+ "format": "date-time",
4723
+ "description": "When this delivery was built."
4724
+ },
4725
+ "account": {
4726
+ "$ref": "#/components/schemas/WebhookEventAccount"
4727
+ },
4728
+ "data": {
4729
+ "$ref": "#/components/schemas/ConnectSessionCompletedPayload"
4730
+ }
4731
+ }
4732
+ },
4602
4733
  "AccountDisconnectedEvent": {
4603
4734
  "type": "object",
4604
4735
  "required": [
@@ -5156,6 +5287,9 @@
5156
5287
  {
5157
5288
  "$ref": "#/components/schemas/AccountCreatedEvent"
5158
5289
  },
5290
+ {
5291
+ "$ref": "#/components/schemas/ConnectSessionCompletedEvent"
5292
+ },
5159
5293
  {
5160
5294
  "$ref": "#/components/schemas/AccountDisconnectedEvent"
5161
5295
  },
@@ -5215,6 +5349,7 @@
5215
5349
  "listing.reactivated": "#/components/schemas/ListingReactivatedEvent",
5216
5350
  "calendar.updated": "#/components/schemas/CalendarUpdatedEvent",
5217
5351
  "account.created": "#/components/schemas/AccountCreatedEvent",
5352
+ "connect.session.completed": "#/components/schemas/ConnectSessionCompletedEvent",
5218
5353
  "account.disconnected": "#/components/schemas/AccountDisconnectedEvent",
5219
5354
  "review.created": "#/components/schemas/ReviewCreatedEvent",
5220
5355
  "review.responded": "#/components/schemas/ReviewRespondedEvent",
@@ -12935,6 +13070,16 @@
12935
13070
  "example": "2026-08-01T00:00:00Z"
12936
13071
  }
12937
13072
  },
13073
+ "Account": {
13074
+ "name": "account",
13075
+ "in": "query",
13076
+ "required": false,
13077
+ "schema": {
13078
+ "type": "string",
13079
+ "example": "airbnb:79730216"
13080
+ },
13081
+ "description": "Only the records of one connected account, as `provider:externalAccountId` \u2014 the pair from a webhook `account` block, `connect.session.completed`, or `GET /v1/connect/{provider}` \u2192 `accounts`. A record belongs to an account when it is on that account's listings and on its channel (a PMS account: came in through that PMS). An account with no listings returns an empty page."
13082
+ },
12938
13083
  "Offset": {
12939
13084
  "name": "offset",
12940
13085
  "in": "query",
@@ -13546,6 +13691,9 @@
13546
13691
  "Properties"
13547
13692
  ],
13548
13693
  "parameters": [
13694
+ {
13695
+ "$ref": "#/components/parameters/Account"
13696
+ },
13549
13697
  {
13550
13698
  "name": "limit",
13551
13699
  "in": "query",
@@ -13816,6 +13964,9 @@
13816
13964
  "Reservations"
13817
13965
  ],
13818
13966
  "parameters": [
13967
+ {
13968
+ "$ref": "#/components/parameters/Account"
13969
+ },
13819
13970
  {
13820
13971
  "$ref": "#/components/parameters/XSchemaHeader"
13821
13972
  },
@@ -14427,6 +14578,9 @@
14427
14578
  "Conversations"
14428
14579
  ],
14429
14580
  "parameters": [
14581
+ {
14582
+ "$ref": "#/components/parameters/Account"
14583
+ },
14430
14584
  {
14431
14585
  "$ref": "#/components/parameters/XSchemaHeader"
14432
14586
  },
@@ -15065,6 +15219,9 @@
15065
15219
  "Reviews"
15066
15220
  ],
15067
15221
  "parameters": [
15222
+ {
15223
+ "$ref": "#/components/parameters/Account"
15224
+ },
15068
15225
  {
15069
15226
  "$ref": "#/components/parameters/XSchemaHeader"
15070
15227
  },
@@ -15329,7 +15486,7 @@
15329
15486
  "state": {
15330
15487
  "type": "string",
15331
15488
  "nullable": true,
15332
- "description": "Opaque pass-through correlation token. Echoed back in the response."
15489
+ "description": "Your own correlation token, e.g. your user id (at most 500 characters). Echoed in this response, on the redirect back (`&state=`), in the popup message, and in the `connect.session.completed` webhook."
15333
15490
  },
15334
15491
  "accessType": {
15335
15492
  "type": "string",
@@ -15552,7 +15709,7 @@
15552
15709
  "post": {
15553
15710
  "operationId": "create_connection",
15554
15711
  "summary": "Connect to PMS/OTA provider",
15555
- "description": "Establish a connection to a PMS or OTA platform. Credentials vary by provider \u2014 see docs for each provider.\n\nAirbnb-specific: pass `redirectUrl` (where to send the user after consent) and optionally `accessType`. Three tiers: `read_only` grants read-only scopes; `messaging` grants read scopes plus message read/send but NOT property management, so it can coexist with another app (e.g. an existing PMS) that already holds property management on the same Airbnb account; `full_access` \u2014 the default \u2014 grants full host scopes including the exclusive property management (only one app per Airbnb account can hold it). The response returns a hosted `url` to redirect the user to.\n\nBooking.com: pass `redirectUrl` (no `accessType`). The response returns a hosted `url` \u2014 send the user there to designate FantasticStay in their Booking.com Extranet and paste their Hotel ID. Same response shape as Airbnb (`url`, `sessionId`, `expiresAt`).\n\nPMS providers (api-key based) pass `apiKey` instead; Plumguide passes `clientId`/`clientSecret`.",
15712
+ "description": "Establish a connection to a PMS or OTA platform. Credentials vary by provider \u2014 see docs for each provider.\n\nAirbnb-specific: pass `redirectUrl` (where to send the user after consent) and optionally `accessType`. Three tiers: `read_only` grants read-only scopes; `messaging` grants read scopes plus message read/send but NOT property management, so it can coexist with another app (e.g. an existing PMS) that already holds property management on the same Airbnb account; `full_access` \u2014 the default \u2014 grants full host scopes including the exclusive property management (only one app per Airbnb account can hold it). The response returns a hosted `url` to redirect the user to.\n\nBooking.com: pass `redirectUrl` (no `accessType`). The response returns a hosted `url` \u2014 send the user there to designate FantasticStay in their Booking.com Extranet and paste their Hotel ID. Same response shape as Airbnb (`url`, `sessionId`, `expiresAt`).\n\nPlumguide passes `clientId`/`clientSecret`. PMS providers are not connected by this call: send their credentials to `POST /v1/connect/{provider}/credentials`, or start a hosted session with `POST /v1/connect`.",
15556
15713
  "tags": [
15557
15714
  "Connect"
15558
15715
  ],
@@ -15583,9 +15740,9 @@
15583
15740
  "default": "full_access",
15584
15741
  "description": "Airbnb only \u2014 selects the OAuth scope set. 'read_only' grants read-only scopes; 'messaging' grants read scopes plus message read/send but NOT property management, so it can coexist with another app (e.g. an existing PMS) that already holds property management on the same Airbnb account; 'full_access' (default) grants full host scopes including the exclusive property management (only one app per Airbnb account can hold it). The hosted consent screen normally lets the host pick a tier; passing `accessType` explicitly fixes the tier and hides that choice, so the host can only continue with the tier you requested. Omit it to let the host choose."
15585
15742
  },
15586
- "apiKey": {
15743
+ "state": {
15587
15744
  "type": "string",
15588
- "description": "PMS providers \u2014 API key."
15745
+ "description": "Airbnb + Booking.com \u2014 your own correlation token, e.g. your user id (at most 500 characters). Echoed on the redirect back (`&state=`) and in the `connect.session.completed` webhook."
15589
15746
  },
15590
15747
  "clientId": {
15591
15748
  "type": "string",
@@ -24181,7 +24338,7 @@
24181
24338
  "get": {
24182
24339
  "operationId": "list_vrbo_listings",
24183
24340
  "summary": "List VRBO listings",
24184
- "description": "List VRBO listings this workspace owns. VRBO is agency-model \u2014 Repull reads listings via the public iCal/HTTP feeds.\n\nInactive listings are left out; they keep syncing and reappear once activated. Use `GET /v1/listings?status=inactive` to find them.",
24341
+ "description": "List the Vrbo units linked to this workspace's listings, from the host's connected Vrbo account (host sign-in, beta).\n\nInactive listings are left out; they keep syncing and reappear once activated. Use `GET /v1/listings?status=inactive` to find them.",
24185
24342
  "tags": [
24186
24343
  "VRBO"
24187
24344
  ],
@@ -24203,7 +24360,7 @@
24203
24360
  "get": {
24204
24361
  "operationId": "list_vrbo_reservations",
24205
24362
  "summary": "List VRBO reservations",
24206
- "description": "Cursor-paginated list of VRBO reservations sourced from the public booking feed. Lag is typically 5-10 minutes vs. Airbnb / Booking.com. `?offset=` is accepted as a first-class alias for `?cursor=` (mutually exclusive; offset capped at 10000).\n\nReservations on inactive listings are left out (counts and cursors included); they keep syncing and reappear once the listing is activated.",
24363
+ "description": "Cursor-paginated list of Vrbo reservations imported from the host's connected Vrbo account (host sign-in, beta). The full normalised record \u2014 guest, price breakdown, policy \u2014 is on `GET /v1/reservations?platform=vrbo`. `?offset=` is accepted as a first-class alias for `?cursor=` (mutually exclusive; offset capped at 10000).\n\nReservations on inactive listings are left out (counts and cursors included); they keep syncing and reappear once the listing is activated.",
24207
24364
  "tags": [
24208
24365
  "VRBO"
24209
24366
  ],
data/scripts/regen.sh CHANGED
@@ -73,7 +73,7 @@ npx --yes @openapitools/openapi-generator-cli@latest generate \
73
73
  -i "$SPEC_PATH" \
74
74
  -g ruby \
75
75
  -o "$GEN_OUT" \
76
- --additional-properties=gemName=repull,moduleName=Repull,gemVersion=0.2.25
76
+ --additional-properties=gemName=repull,moduleName=Repull,gemVersion=0.2.26
77
77
 
78
78
  echo "==> syncing lib/ + docs/"
79
79
  rm -rf "$ROOT/lib/repull" "$ROOT/lib/repull.rb" "$ROOT/docs"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: repull
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.25
4
+ version: 0.2.26
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nikolov
@@ -236,6 +236,8 @@ files:
236
236
  - lib/repull/models/connect_provider.rb
237
237
  - lib/repull/models/connect_provider_list_response.rb
238
238
  - lib/repull/models/connect_session.rb
239
+ - lib/repull/models/connect_session_completed_event.rb
240
+ - lib/repull/models/connect_session_completed_payload.rb
239
241
  - lib/repull/models/connect_status.rb
240
242
  - lib/repull/models/connect_status_accounts_inner.rb
241
243
  - lib/repull/models/connection.rb
@@ -529,6 +531,7 @@ files:
529
531
  - lib/repull/models/publish_section_error.rb
530
532
  - lib/repull/models/quote.rb
531
533
  - lib/repull/models/quote_pricing.rb
534
+ - lib/repull/models/record_account.rb
532
535
  - lib/repull/models/reorder_airbnb_listing_photos200_response.rb
533
536
  - lib/repull/models/reorder_airbnb_listing_photos200_response_data.rb
534
537
  - lib/repull/models/reorder_airbnb_listing_photos_request.rb