repull 0.2.36 → 0.2.37
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/connect_api.rb +70 -2
- data/lib/repull/api/conversations_api.rb +2 -2
- data/lib/repull/api/reservations_api.rb +4 -4
- data/lib/repull/models/account_disconnected_payload.rb +16 -4
- data/lib/repull/models/account_disconnected_payload_listings_inner.rb +157 -0
- data/lib/repull/models/airbnb_calendar_operation.rb +12 -12
- data/lib/repull/models/inquiry_webhook_object.rb +10 -1
- data/lib/repull/models/inquiry_webhook_object_guest.rb +159 -0
- data/lib/repull/models/list_inquiries200_response_data_inner.rb +27 -1
- data/lib/repull/models/list_inquiries200_response_data_inner_guest.rb +160 -0
- data/lib/repull/models/listing_channel.rb +15 -4
- data/lib/repull/models/listing_webhook_object_channels_inner.rb +16 -5
- data/lib/repull/models/reservation.rb +25 -1
- data/lib/repull/models/reservation_access_code.rb +301 -0
- data/lib/repull/models/reservation_access_code_locks_inner.rb +190 -0
- data/lib/repull/models/submit_ciirus_credentials200_response.rb +213 -0
- data/lib/repull/models/submit_ciirus_credentials200_response_account_info.rb +159 -0
- data/lib/repull/models/submit_ciirus_credentials_request.rb +184 -0
- data/lib/repull/models/submit_ciirus_credentials_request_credentials.rb +203 -0
- data/lib/repull/version.rb +1 -1
- data/lib/repull.rb +9 -0
- data/openapi/v1.json +330 -8
- data/scripts/regen.sh +1 -1
- metadata +11 -2
data/openapi/v1.json
CHANGED
|
@@ -405,6 +405,94 @@
|
|
|
405
405
|
}
|
|
406
406
|
}
|
|
407
407
|
},
|
|
408
|
+
"ReservationAccessCode": {
|
|
409
|
+
"type": "object",
|
|
410
|
+
"description": "One door code for a stay, as the PMS reported it.",
|
|
411
|
+
"required": [
|
|
412
|
+
"code",
|
|
413
|
+
"type",
|
|
414
|
+
"status",
|
|
415
|
+
"validFrom",
|
|
416
|
+
"validUntil",
|
|
417
|
+
"locks",
|
|
418
|
+
"source",
|
|
419
|
+
"updatedAt"
|
|
420
|
+
],
|
|
421
|
+
"properties": {
|
|
422
|
+
"code": {
|
|
423
|
+
"type": "string",
|
|
424
|
+
"description": "The code to enter on the lock.",
|
|
425
|
+
"example": "482913"
|
|
426
|
+
},
|
|
427
|
+
"type": {
|
|
428
|
+
"type": "string",
|
|
429
|
+
"description": "`guest`: the code to give the guest. `backup`: give it only if the guest code fails; Guesty may change a backup code read before check-in day.",
|
|
430
|
+
"example": "guest"
|
|
431
|
+
},
|
|
432
|
+
"status": {
|
|
433
|
+
"type": "string",
|
|
434
|
+
"nullable": true,
|
|
435
|
+
"description": "The PMS's status for the code, lower-cased.",
|
|
436
|
+
"example": "active"
|
|
437
|
+
},
|
|
438
|
+
"validFrom": {
|
|
439
|
+
"type": "string",
|
|
440
|
+
"format": "date-time",
|
|
441
|
+
"nullable": true,
|
|
442
|
+
"description": "When the code starts working. `null` when the PMS gives no window.",
|
|
443
|
+
"example": "2026-11-01T20:00:00.000Z"
|
|
444
|
+
},
|
|
445
|
+
"validUntil": {
|
|
446
|
+
"type": "string",
|
|
447
|
+
"format": "date-time",
|
|
448
|
+
"nullable": true,
|
|
449
|
+
"description": "When the code stops working. `null` when the PMS gives no window.",
|
|
450
|
+
"example": "2026-11-05T15:00:00.000Z"
|
|
451
|
+
},
|
|
452
|
+
"locks": {
|
|
453
|
+
"type": "array",
|
|
454
|
+
"description": "The locks the code opens.",
|
|
455
|
+
"items": {
|
|
456
|
+
"type": "object",
|
|
457
|
+
"required": [
|
|
458
|
+
"id",
|
|
459
|
+
"name",
|
|
460
|
+
"provider"
|
|
461
|
+
],
|
|
462
|
+
"properties": {
|
|
463
|
+
"id": {
|
|
464
|
+
"type": "string",
|
|
465
|
+
"description": "The lock's id in the PMS.",
|
|
466
|
+
"example": "64f0c1aa2b3c4d5e6f708192"
|
|
467
|
+
},
|
|
468
|
+
"name": {
|
|
469
|
+
"type": "string",
|
|
470
|
+
"nullable": true,
|
|
471
|
+
"example": "Front door"
|
|
472
|
+
},
|
|
473
|
+
"provider": {
|
|
474
|
+
"type": "string",
|
|
475
|
+
"nullable": true,
|
|
476
|
+
"description": "The lock brand, as the PMS names it.",
|
|
477
|
+
"example": "schlage"
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
},
|
|
482
|
+
"source": {
|
|
483
|
+
"type": "string",
|
|
484
|
+
"description": "The PMS the code was read from.",
|
|
485
|
+
"example": "guesty"
|
|
486
|
+
},
|
|
487
|
+
"updatedAt": {
|
|
488
|
+
"type": "string",
|
|
489
|
+
"format": "date-time",
|
|
490
|
+
"nullable": true,
|
|
491
|
+
"description": "When the codes were last read from the PMS.",
|
|
492
|
+
"example": "2026-10-31T14:30:00.000Z"
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
},
|
|
408
496
|
"ReservationPrimaryGuest": {
|
|
409
497
|
"type": "object",
|
|
410
498
|
"description": "Inline guest summary resolved by JOIN-ing the `guests` table. Populated for every reservation that has a linked guest row; OMITTED entirely (not null) for owner-blocks / pre-arrival rows / partial-sync gaps. Always optional-chain in SDK consumers.",
|
|
@@ -738,6 +826,20 @@
|
|
|
738
826
|
}
|
|
739
827
|
}
|
|
740
828
|
},
|
|
829
|
+
"pmsReservationId": {
|
|
830
|
+
"type": "string",
|
|
831
|
+
"nullable": true,
|
|
832
|
+
"description": "The PMS's own id for this reservation (for example Guesty's reservation `_id`), so you can look it up in the PMS. `null` when the reservation did not come from a PMS.",
|
|
833
|
+
"example": "6a0374cd5eeb88f1381f9ac1"
|
|
834
|
+
},
|
|
835
|
+
"accessCodes": {
|
|
836
|
+
"type": "array",
|
|
837
|
+
"nullable": true,
|
|
838
|
+
"items": {
|
|
839
|
+
"$ref": "#/components/schemas/ReservationAccessCode"
|
|
840
|
+
},
|
|
841
|
+
"description": "Door codes for the stay from the PMS's lock manager (today: Guesty Locks Manager), refreshed about every 30 minutes for stays checking in within 14 days that have not checked out. `null` when the reservation's codes are not read from a PMS. `[]` when they are and there is none yet, and for a cancelled stay."
|
|
842
|
+
},
|
|
741
843
|
"primaryGuest": {
|
|
742
844
|
"allOf": [
|
|
743
845
|
{
|
|
@@ -3369,6 +3471,20 @@
|
|
|
3369
3471
|
"nullable": true,
|
|
3370
3472
|
"example": "2026-11-11"
|
|
3371
3473
|
},
|
|
3474
|
+
"guest": {
|
|
3475
|
+
"type": "object",
|
|
3476
|
+
"description": "Who asked. Airbnb shares only the first name before the guest books.",
|
|
3477
|
+
"properties": {
|
|
3478
|
+
"id": {
|
|
3479
|
+
"type": "string",
|
|
3480
|
+
"nullable": true
|
|
3481
|
+
},
|
|
3482
|
+
"firstName": {
|
|
3483
|
+
"type": "string",
|
|
3484
|
+
"nullable": true
|
|
3485
|
+
}
|
|
3486
|
+
}
|
|
3487
|
+
},
|
|
3372
3488
|
"guests": {
|
|
3373
3489
|
"type": "object",
|
|
3374
3490
|
"properties": {
|
|
@@ -3624,6 +3740,15 @@
|
|
|
3624
3740
|
"type": "string",
|
|
3625
3741
|
"nullable": true,
|
|
3626
3742
|
"example": "sync_all"
|
|
3743
|
+
},
|
|
3744
|
+
"account": {
|
|
3745
|
+
"allOf": [
|
|
3746
|
+
{
|
|
3747
|
+
"$ref": "#/components/schemas/RecordAccount"
|
|
3748
|
+
}
|
|
3749
|
+
],
|
|
3750
|
+
"nullable": true,
|
|
3751
|
+
"description": "The connected account this listing belongs to on this channel \u2014 for Airbnb the host account (`externalAccountId` is the Airbnb host id). The same account `account.disconnected` names, so a disconnect can be matched to its listings. Null when it cannot be resolved."
|
|
3627
3752
|
}
|
|
3628
3753
|
}
|
|
3629
3754
|
}
|
|
@@ -3893,6 +4018,24 @@
|
|
|
3893
4018
|
"type": "string",
|
|
3894
4019
|
"example": "refresh_token_rejected",
|
|
3895
4020
|
"description": "Why the connection was lost. `refresh_token_rejected` \u2014 upstream OAuth refresh endpoint returned a hard rejection. `manual_disconnect` \u2014 host/admin disconnected via the dashboard. `auth_expired` \u2014 credentials aged out without ever being used. `revoked_upstream` \u2014 provider notified us the user revoked access."
|
|
4021
|
+
},
|
|
4022
|
+
"listings": {
|
|
4023
|
+
"type": "array",
|
|
4024
|
+
"description": "The listings this account holds in your workspace \u2014 the ones that stop syncing until it is reconnected. Identity only; inactive listings included. Matches `channels[].account` on `GET /v1/listings`. Empty when the account has no listings here.",
|
|
4025
|
+
"items": {
|
|
4026
|
+
"type": "object",
|
|
4027
|
+
"properties": {
|
|
4028
|
+
"id": {
|
|
4029
|
+
"type": "integer",
|
|
4030
|
+
"example": 4118
|
|
4031
|
+
},
|
|
4032
|
+
"name": {
|
|
4033
|
+
"type": "string",
|
|
4034
|
+
"nullable": true,
|
|
4035
|
+
"example": "Ocean View Villa"
|
|
4036
|
+
}
|
|
4037
|
+
}
|
|
4038
|
+
}
|
|
3896
4039
|
}
|
|
3897
4040
|
}
|
|
3898
4041
|
},
|
|
@@ -9761,6 +9904,15 @@
|
|
|
9761
9904
|
},
|
|
9762
9905
|
"syncEnabled": {
|
|
9763
9906
|
"type": "boolean"
|
|
9907
|
+
},
|
|
9908
|
+
"account": {
|
|
9909
|
+
"allOf": [
|
|
9910
|
+
{
|
|
9911
|
+
"$ref": "#/components/schemas/RecordAccount"
|
|
9912
|
+
}
|
|
9913
|
+
],
|
|
9914
|
+
"nullable": true,
|
|
9915
|
+
"description": "The connected account this listing belongs to on this channel \u2014 for Airbnb the host account (`externalAccountId` is the Airbnb host id). The same account `account.disconnected` names, so a disconnect can be matched to its listings. Null when it cannot be resolved."
|
|
9764
9916
|
}
|
|
9765
9917
|
}
|
|
9766
9918
|
},
|
|
@@ -12503,17 +12655,17 @@
|
|
|
12503
12655
|
},
|
|
12504
12656
|
"min_nights": {
|
|
12505
12657
|
"type": "integer",
|
|
12506
|
-
"minimum": 1,
|
|
12658
|
+
"minimum": -1,
|
|
12507
12659
|
"maximum": 1125,
|
|
12508
12660
|
"nullable": true,
|
|
12509
|
-
"description": "Minimum length of stay for the date(s)."
|
|
12661
|
+
"description": "Minimum length of stay for the date(s), 1\u20131125. Send `-1` to drop the date's own minimum so it follows the listing default again (`default_min_nights`). `0` and `null` do not clear it."
|
|
12510
12662
|
},
|
|
12511
12663
|
"max_nights": {
|
|
12512
12664
|
"type": "integer",
|
|
12513
|
-
"minimum": 1,
|
|
12665
|
+
"minimum": -1,
|
|
12514
12666
|
"maximum": 1125,
|
|
12515
12667
|
"nullable": true,
|
|
12516
|
-
"description": "Maximum length of stay for the date(s)
|
|
12668
|
+
"description": "Maximum length of stay for the date(s), 1\u20131125 and no lower than `min_nights`. Send `-1` to drop the date's own maximum so it follows the listing default again (`default_max_nights`)."
|
|
12517
12669
|
},
|
|
12518
12670
|
"closed_to_arrival": {
|
|
12519
12671
|
"type": "boolean",
|
|
@@ -16999,7 +17151,7 @@
|
|
|
16999
17151
|
"post": {
|
|
17000
17152
|
"operationId": "create_reservation",
|
|
17001
17153
|
"summary": "Create a reservation",
|
|
17002
|
-
"description": "Creates a reservation \u2014 in the listing's PMS when it has one, otherwise as a direct booking in Repull.\n\n### Where the booking is made\n\n- **A listing managed in a connected PMS** (Mews, Cloudbeds, Hostaway, Guesty, Beds24, BookingSync, Lodgify, Smoobu, Hospitable, iGMS, OwnerRez, Track): the booking is created **in the PMS first**, then recorded in Repull from the PMS's own record, so the next sync lands on the same confirmation code and nothing is duplicated. A booking is **never** created only in Repull for such a listing \u2014 the PMS would keep selling the dates. What the PMS cannot do is refused (`422 pms_write_unsupported`), never faked. The PMS checks availability: taken dates answer `409 pms_unavailable`.\n- **Any other listing**: a direct booking made in Repull, with everything that hangs off one \u2014 the guest, the conversation, the calendar block and the `reservation.created` fan-out that issues the door code and starts the messaging automations. Priced by the listing's own rates; **availability is NOT checked** (call `GET /v1/availability/{propertyId}` first if that matters).\n\n`GET /v1/listings/{id}` \u2192 `capabilities.reservations` says which applies to a listing and exactly what it supports (`create`, `modify`, `cancel`, `quote`, `customPrice`, plus `notes`).\n\n### Fields by listing kind\n\n| Field | PMS listing | Direct-booking listing |\n|---|---|---|\n| `listingId`, `checkIn`, `checkOut`, `guest`, `guestCount`, `adults`, `children` | \u2713 | \u2713 |\n| `status` | `confirmed` (default) or `tentative` | \u2713 |\n| `totalPrice` | \u2713 where `capabilities.reservations.customPrice`; otherwise the PMS prices the stay | `422 unsupported_field` (priced from the listing's rates) |\n| `notes`, `unitId`, `sendConfirmationEmail` | \u2713 | `422 unsupported_field` |\n| `checkInTime`, `checkOutTime`, `currency`, `guestId` | `422 unsupported_field` (the PMS's own settings apply) | \u2713 |\n| `platform` | `direct` or `website` (`owner` \u2192 `422 pms_write_unsupported`; block owner stays in the PMS) | `direct`, `website` or `owner` |\n\nA field a listing cannot take is refused by name, never silently dropped. `platform` never accepts `airbnb` / `booking` / `vrbo`: those reservations are owned by the channel and arrive through sync.\n\n### Per-PMS limits\n\n| PMS | create | change | cancel | quote | `totalPrice` | Limits |\n|---|---|---|---|---|---|---|\n| Mews | \u2713 | \u2713 | \u2713 | \u2013 | \u2713 | \u2014 |\n| Cloudbeds | \u2713 | \u2713 | \u2713 | \u2013 | \u2013 | Books at the rate plan's price; group bookings supported. |\n| Hostaway | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Direct-channel bookings only; a specific unit is refused; a date change keeps the booked total. |\n| Guesty | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Cancels direct and Vrbo bookings; other channel bookings are cancelled on the channel. |\n| Beds24 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Needs the `write:bookings` scope; a multi-room property needs `unitId`. |\n| BookingSync | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Needs `bookings_write`; fees and taxes are not itemized; no guest email. |\n| Lodgify | \u2713 | \u2713 | \u2713 (declines) | \u2713 | \u2713 | Cancel declines the booking; single-room bookings. |\n| Smoobu | \u2713 | \u2713 (no dates) | \u2713 | \u2713 | \u2713 | Dates cannot be changed through Smoobu's API \u2014 cancel and rebook, or change them in Smoobu. |\n| Hospitable | \u2713 | \u2713 | \u2713 | \u2713 (Direct plan) | \u2713 | Manual reservations only; needs `reservation:write`; adds no fees or taxes. |\n| iGMS | \u2713 | \u2713 | \u2713 | \u2013 | \u2713 (required) | iGMS direct bookings only; a price is required; no tentative holds. |\n| OwnerRez | \u2713 | \u2713 | \u2013 | \u2713 | \u2013 | No cancel through OwnerRez's API; priced by the property's own rates; needs the `full` scope. |\n| Track | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Track decides Hold vs Confirmed from the property's channel mode; a set price on a Channel Key needs \"Allow Custom Pricing\"; a unit change needs `moveReasonId` on the connection; a date change re-prices at Track's current rates. |\n\nEvery PMS except Cloudbeds refuses group bookings, and every vacation-rental PMS refuses to change or cancel a booking that came from a channel (Airbnb, Booking.com, Vrbo\u2026) \u2014 that is done on the channel.\n\n**Verification.** Mews and Cloudbeds were run end to end on their vendors' sandboxes. Every other PMS is **verified against the vendor's API documentation only** \u2014 no live account has been written to yet. `capabilities.reservations.verifiedAgainst` says which.\n\n### Idempotency\n\n**Send `Idempotency-Key`.** A network timeout here is exactly the case it exists for. The key is also sent to the PMS as the booking's reference, so even a retry that reaches the PMS again finds the booking instead of making a second one (`409 pms_duplicate` with `existing`, or the existing booking returned). A completed answer is replayed with `Idempotency-Status: cached` and the PMS is not called again. `502 pms_error` (the PMS could not be reached) is NOT stored \u2014 retry with the same key. `502 reservation_created_in_pms_only` IS stored, unlike every other 5xx: the booking exists in the PMS and arrives with the next sync, so a retry replays that answer rather than booking twice.\n\n### Partial success\n\nWhen the PMS created the booking but a follow-up step did not apply (for example the notes, or a tentative state), the response is still `201`, with `pms.partial: true` and the steps in `pms.failedSections`. The booking exists \u2014 do not create it again.\n\n`X-Account-Id` restricts the listing to one connected account. Returns `403 listing_inactive` when the listing is inactive.",
|
|
17154
|
+
"description": "Creates a reservation \u2014 in the listing's PMS when it has one, otherwise as a direct booking in Repull.\n\n### Where the booking is made\n\n- **A listing managed in a connected PMS** (Mews, Cloudbeds, Hostaway, Guesty, Beds24, BookingSync, Lodgify, Smoobu, Hospitable, iGMS, OwnerRez, Track, CiiRUS): the booking is created **in the PMS first**, then recorded in Repull from the PMS's own record, so the next sync lands on the same confirmation code and nothing is duplicated. A booking is **never** created only in Repull for such a listing \u2014 the PMS would keep selling the dates. What the PMS cannot do is refused (`422 pms_write_unsupported`), never faked. The PMS checks availability: taken dates answer `409 pms_unavailable`.\n- **Any other listing**: a direct booking made in Repull, with everything that hangs off one \u2014 the guest, the conversation, the calendar block and the `reservation.created` fan-out that issues the door code and starts the messaging automations. Priced by the listing's own rates; **availability is NOT checked** (call `GET /v1/availability/{propertyId}` first if that matters).\n\n`GET /v1/listings/{id}` \u2192 `capabilities.reservations` says which applies to a listing and exactly what it supports (`create`, `modify`, `cancel`, `quote`, `customPrice`, plus `notes`).\n\n### Fields by listing kind\n\n| Field | PMS listing | Direct-booking listing |\n|---|---|---|\n| `listingId`, `checkIn`, `checkOut`, `guest`, `guestCount`, `adults`, `children` | \u2713 | \u2713 |\n| `status` | `confirmed` (default) or `tentative` | \u2713 |\n| `totalPrice` | \u2713 where `capabilities.reservations.customPrice`; otherwise the PMS prices the stay | `422 unsupported_field` (priced from the listing's rates) |\n| `notes`, `unitId`, `sendConfirmationEmail` | \u2713 | `422 unsupported_field` |\n| `checkInTime`, `checkOutTime`, `currency`, `guestId` | `422 unsupported_field` (the PMS's own settings apply) | \u2713 |\n| `platform` | `direct` or `website` (`owner` \u2192 `422 pms_write_unsupported`; block owner stays in the PMS) | `direct`, `website` or `owner` |\n\nA field a listing cannot take is refused by name, never silently dropped. `platform` never accepts `airbnb` / `booking` / `vrbo`: those reservations are owned by the channel and arrive through sync.\n\n### Per-PMS limits\n\n| PMS | create | change | cancel | quote | `totalPrice` | Limits |\n|---|---|---|---|---|---|---|\n| Mews | \u2713 | \u2713 | \u2713 | \u2013 | \u2713 | \u2014 |\n| Cloudbeds | \u2713 | \u2713 | \u2713 | \u2013 | \u2013 | Books at the rate plan's price; group bookings supported. |\n| Hostaway | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Direct-channel bookings only; a specific unit is refused; a date change keeps the booked total. |\n| Guesty | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Cancels direct and Vrbo bookings; other channel bookings are cancelled on the channel. |\n| Beds24 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Needs the `write:bookings` scope; a multi-room property needs `unitId`. |\n| BookingSync | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Needs `bookings_write`; fees and taxes are not itemized; no guest email. |\n| Lodgify | \u2713 | \u2713 | \u2713 (declines) | \u2713 | \u2713 | Cancel declines the booking; single-room bookings. |\n| Smoobu | \u2713 | \u2713 (no dates) | \u2713 | \u2713 | \u2713 | Dates cannot be changed through Smoobu's API \u2014 cancel and rebook, or change them in Smoobu. |\n| Hospitable | \u2713 | \u2713 | \u2713 | \u2713 (Direct plan) | \u2713 | Manual reservations only; needs `reservation:write`; adds no fees or taxes. |\n| iGMS | \u2713 | \u2713 | \u2713 | \u2013 | \u2713 (required) | iGMS direct bookings only; a price is required; no tentative holds. |\n| OwnerRez | \u2713 | \u2713 | \u2013 | \u2713 | \u2013 | No cancel through OwnerRez's API; priced by the property's own rates; needs the `full` scope. |\n| Track | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Track decides Hold vs Confirmed from the property's channel mode; a set price on a Channel Key needs \"Allow Custom Pricing\"; a unit change needs `moveReasonId` on the connection; a date change re-prices at Track's current rates. |\n| CiiRUS | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | A set price is the rent, with CiiRUS adding its taxes; no tentative holds. |\n\nEvery PMS except Cloudbeds refuses group bookings, and every vacation-rental PMS refuses to change or cancel a booking that came from a channel (Airbnb, Booking.com, Vrbo\u2026) \u2014 that is done on the channel.\n\n**Verification.** Mews and Cloudbeds were run end to end on their vendors' sandboxes. Every other PMS is **verified against the vendor's API documentation only** \u2014 no live account has been written to yet. `capabilities.reservations.verifiedAgainst` says which.\n\n### Idempotency\n\n**Send `Idempotency-Key`.** A network timeout here is exactly the case it exists for. The key is also sent to the PMS as the booking's reference, so even a retry that reaches the PMS again finds the booking instead of making a second one (`409 pms_duplicate` with `existing`, or the existing booking returned). A completed answer is replayed with `Idempotency-Status: cached` and the PMS is not called again. `502 pms_error` (the PMS could not be reached) is NOT stored \u2014 retry with the same key. `502 reservation_created_in_pms_only` IS stored, unlike every other 5xx: the booking exists in the PMS and arrives with the next sync, so a retry replays that answer rather than booking twice.\n\n### Partial success\n\nWhen the PMS created the booking but a follow-up step did not apply (for example the notes, or a tentative state), the response is still `201`, with `pms.partial: true` and the steps in `pms.failedSections`. The booking exists \u2014 do not create it again.\n\n`X-Account-Id` restricts the listing to one connected account. Returns `403 listing_inactive` when the listing is inactive.",
|
|
17003
17155
|
"tags": [
|
|
17004
17156
|
"Reservations"
|
|
17005
17157
|
],
|
|
@@ -18206,7 +18358,7 @@
|
|
|
18206
18358
|
"get": {
|
|
18207
18359
|
"operationId": "getConversation",
|
|
18208
18360
|
"summary": "Get conversation detail",
|
|
18209
|
-
"description": "Returns one thread (the same shape as the list-row `Conversation`) plus expanded `host` (from `airbnb_hosts` for the thread's `host_id`) and `guest` (resolved via the thread's `reservation_id`, with up to 50 contacts) blocks.\n\nA conversation that belongs to an inactive listing (by the thread's listing or its reservation's listing) returns `403 listing_inactive`. Inactive listings keep syncing; activate the listing to use it here.",
|
|
18361
|
+
"description": "Returns one thread (the same shape as the list-row `Conversation`) plus expanded `host` (from `airbnb_hosts` for the thread's `host_id`) and `guest` (resolved via the thread's `reservation_id`, with up to 50 contacts) blocks. On an inquiry (no reservation yet) `guest` carries the first name Airbnb shares with the inquiry; contacts such as the phone number arrive once the guest books.\n\nA conversation that belongs to an inactive listing (by the thread's listing or its reservation's listing) returns `403 listing_inactive`. Inactive listings keep syncing; activate the listing to use it here.",
|
|
18210
18362
|
"tags": [
|
|
18211
18363
|
"Conversations"
|
|
18212
18364
|
],
|
|
@@ -19353,7 +19505,7 @@
|
|
|
19353
19505
|
"delete": {
|
|
19354
19506
|
"operationId": "delete_connection",
|
|
19355
19507
|
"summary": "Disconnect provider",
|
|
19356
|
-
"description": "Disconnect ONE connected account of a provider from this workspace. Supported for `airbnb`, `booking` and `
|
|
19508
|
+
"description": "Disconnect ONE connected account of a provider from this workspace. Supported for `airbnb`, `booking`, `vrbo-login` and every PMS (`guesty`, `hostaway`, `hospitable`, \u2026).\n\n**Which account.** Pass `accountId` \u2014 for Airbnb the host id (`accounts[].externalAccountId` from `GET /v1/connect/airbnb`), for Booking.com the hotel id, for `vrbo-login` the sign-in's `accounts[].externalAccountId` from `GET /v1/connect/vrbo-login`. It is optional only when the workspace has exactly one account for the provider. With several and no `accountId`, the call returns `422` with the account ids in `valid_values` instead of guessing. An `accountId` that is not connected to this workspace returns `404`. Disconnecting one account leaves the others connected.\n\n**What happens.** The account's stored authorization is removed and it stops syncing. Its listings are **deactivated**, not deleted: they stop counting toward your plan's listing limit, their data is kept, and they are returned in `listingsDeactivated`. A listing that is still connected through another account or channel stays active. Reconnect the account, then activate the listings with `POST /v1/listings/status`.\n\nThe change is all or nothing. For Airbnb, the host can also revoke access on Airbnb's side (Account \u2192 Privacy & sharing \u2192 Connected apps); that alone does not update this workspace, so call this endpoint as well.\n\n**PMS.** A workspace has one connection per PMS, so no `accountId` is needed. Disconnecting stops syncing, clears the stored credentials and deactivates the connection's listings; nothing is deleted, and reservations and messages stay. The response also carries `connectionId`. The PMS's own webhook subscription is left in place, because the same PMS account can be connected to another workspace (such as a Repull Migrate workspace). Reconnect with a new Connect session.\n\nOther providers return `501 not_implemented` with instructions for disconnecting on the provider's side. That answer depends only on the provider, not on your workspace: an unsupported provider returns `501` whether or not you have a connection to it. `404 not_found` on a supported provider means this workspace has no connection to it (or, with `accountId`, that the account is not connected here).",
|
|
19357
19509
|
"tags": [
|
|
19358
19510
|
"Connect"
|
|
19359
19511
|
],
|
|
@@ -33675,6 +33827,7 @@
|
|
|
33675
33827
|
"status",
|
|
33676
33828
|
"checkIn",
|
|
33677
33829
|
"checkOut",
|
|
33830
|
+
"guest",
|
|
33678
33831
|
"guests",
|
|
33679
33832
|
"expectedPayout",
|
|
33680
33833
|
"reservationId",
|
|
@@ -33730,6 +33883,23 @@
|
|
|
33730
33883
|
"nullable": true,
|
|
33731
33884
|
"example": "2026-10-11"
|
|
33732
33885
|
},
|
|
33886
|
+
"guest": {
|
|
33887
|
+
"type": "object",
|
|
33888
|
+
"description": "Who asked. Airbnb shares only the guest\u2019s first name before they book; the last name and phone number arrive on the reservation (`GET /v1/reservations/{id}`) once they do.",
|
|
33889
|
+
"properties": {
|
|
33890
|
+
"id": {
|
|
33891
|
+
"type": "string",
|
|
33892
|
+
"nullable": true,
|
|
33893
|
+
"description": "Repull guest id.",
|
|
33894
|
+
"example": "365763"
|
|
33895
|
+
},
|
|
33896
|
+
"firstName": {
|
|
33897
|
+
"type": "string",
|
|
33898
|
+
"nullable": true,
|
|
33899
|
+
"example": "Ximena"
|
|
33900
|
+
}
|
|
33901
|
+
}
|
|
33902
|
+
},
|
|
33733
33903
|
"guests": {
|
|
33734
33904
|
"type": "object",
|
|
33735
33905
|
"properties": {
|
|
@@ -38042,7 +38212,7 @@
|
|
|
38042
38212
|
"post": {
|
|
38043
38213
|
"operationId": "quote_reservation",
|
|
38044
38214
|
"summary": "Quote a reservation in the PMS",
|
|
38045
|
-
"description": "Prices a stay and checks its availability **in the PMS that manages the listing**, without booking anything. It is the same check `POST /v1/reservations` makes before booking when no `totalPrice` is sent, so `available: true` with a `total` is what that create would be priced at (dates can still be taken in between).\n\n`available: false` is an answer, not an error: the PMS's reasons are in `restrictions` (minimum stay, closed to arrival, taken dates\u2026).\n\n- A listing **not managed in a PMS** answers `422 pms_not_linked`. Book it directly with `POST /v1/reservations`, or price it with `GET /v1/quotes`.\n- A PMS **without a quote API** (Mews, Cloudbeds, iGMS) answers `422 pms_write_unsupported`. You can still create the booking; on iGMS a `totalPrice` is required.\n\n`GET /v1/listings/{id}` \u2192 `capabilities.reservations.quote` says whether a listing can be quoted.\n\n### Per-PMS limits\n\n| PMS | create | change | cancel | quote | `totalPrice` | Limits |\n|---|---|---|---|---|---|---|\n| Mews | \u2713 | \u2713 | \u2713 | \u2013 | \u2713 | \u2014 |\n| Cloudbeds | \u2713 | \u2713 | \u2713 | \u2013 | \u2013 | Books at the rate plan's price; group bookings supported. |\n| Hostaway | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Direct-channel bookings only; a specific unit is refused; a date change keeps the booked total. |\n| Guesty | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Cancels direct and Vrbo bookings; other channel bookings are cancelled on the channel. |\n| Beds24 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Needs the `write:bookings` scope; a multi-room property needs `unitId`. |\n| BookingSync | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Needs `bookings_write`; fees and taxes are not itemized; no guest email. |\n| Lodgify | \u2713 | \u2713 | \u2713 (declines) | \u2713 | \u2713 | Cancel declines the booking; single-room bookings. |\n| Smoobu | \u2713 | \u2713 (no dates) | \u2713 | \u2713 | \u2713 | Dates cannot be changed through Smoobu's API \u2014 cancel and rebook, or change them in Smoobu. |\n| Hospitable | \u2713 | \u2713 | \u2713 | \u2713 (Direct plan) | \u2713 | Manual reservations only; needs `reservation:write`; adds no fees or taxes. |\n| iGMS | \u2713 | \u2713 | \u2713 | \u2013 | \u2713 (required) | iGMS direct bookings only; a price is required; no tentative holds. |\n| OwnerRez | \u2713 | \u2713 | \u2013 | \u2713 | \u2013 | No cancel through OwnerRez's API; priced by the property's own rates; needs the `full` scope. |\n| Track | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Track decides Hold vs Confirmed from the property's channel mode; a set price on a Channel Key needs \"Allow Custom Pricing\"; a unit change needs `moveReasonId` on the connection; a date change re-prices at Track's current rates. |\n\nEvery PMS except Cloudbeds refuses group bookings, and every vacation-rental PMS refuses to change or cancel a booking that came from a channel (Airbnb, Booking.com, Vrbo\u2026) \u2014 that is done on the channel.\n\n**Verification.** Mews and Cloudbeds were run end to end on their vendors' sandboxes. Every other PMS is **verified against the vendor's API documentation only** \u2014 no live account has been written to yet. `capabilities.reservations.verifiedAgainst` says which.\n\n`X-Account-Id` restricts the listing to one connected account. Returns `403 listing_inactive` when the listing is inactive.",
|
|
38215
|
+
"description": "Prices a stay and checks its availability **in the PMS that manages the listing**, without booking anything. It is the same check `POST /v1/reservations` makes before booking when no `totalPrice` is sent, so `available: true` with a `total` is what that create would be priced at (dates can still be taken in between).\n\n`available: false` is an answer, not an error: the PMS's reasons are in `restrictions` (minimum stay, closed to arrival, taken dates\u2026).\n\n- A listing **not managed in a PMS** answers `422 pms_not_linked`. Book it directly with `POST /v1/reservations`, or price it with `GET /v1/quotes`.\n- A PMS **without a quote API** (Mews, Cloudbeds, iGMS) answers `422 pms_write_unsupported`. You can still create the booking; on iGMS a `totalPrice` is required.\n\n`GET /v1/listings/{id}` \u2192 `capabilities.reservations.quote` says whether a listing can be quoted.\n\n### Per-PMS limits\n\n| PMS | create | change | cancel | quote | `totalPrice` | Limits |\n|---|---|---|---|---|---|---|\n| Mews | \u2713 | \u2713 | \u2713 | \u2013 | \u2713 | \u2014 |\n| Cloudbeds | \u2713 | \u2713 | \u2713 | \u2013 | \u2013 | Books at the rate plan's price; group bookings supported. |\n| Hostaway | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Direct-channel bookings only; a specific unit is refused; a date change keeps the booked total. |\n| Guesty | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Cancels direct and Vrbo bookings; other channel bookings are cancelled on the channel. |\n| Beds24 | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Needs the `write:bookings` scope; a multi-room property needs `unitId`. |\n| BookingSync | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Needs `bookings_write`; fees and taxes are not itemized; no guest email. |\n| Lodgify | \u2713 | \u2713 | \u2713 (declines) | \u2713 | \u2713 | Cancel declines the booking; single-room bookings. |\n| Smoobu | \u2713 | \u2713 (no dates) | \u2713 | \u2713 | \u2713 | Dates cannot be changed through Smoobu's API \u2014 cancel and rebook, or change them in Smoobu. |\n| Hospitable | \u2713 | \u2713 | \u2713 | \u2713 (Direct plan) | \u2713 | Manual reservations only; needs `reservation:write`; adds no fees or taxes. |\n| iGMS | \u2713 | \u2713 | \u2713 | \u2013 | \u2713 (required) | iGMS direct bookings only; a price is required; no tentative holds. |\n| OwnerRez | \u2713 | \u2713 | \u2013 | \u2713 | \u2013 | No cancel through OwnerRez's API; priced by the property's own rates; needs the `full` scope. |\n| Track | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | Track decides Hold vs Confirmed from the property's channel mode; a set price on a Channel Key needs \"Allow Custom Pricing\"; a unit change needs `moveReasonId` on the connection; a date change re-prices at Track's current rates. |\n| CiiRUS | \u2713 | \u2713 | \u2713 | \u2713 | \u2713 | A set price is the rent, with CiiRUS adding its taxes; no tentative holds. |\n\nEvery PMS except Cloudbeds refuses group bookings, and every vacation-rental PMS refuses to change or cancel a booking that came from a channel (Airbnb, Booking.com, Vrbo\u2026) \u2014 that is done on the channel.\n\n**Verification.** Mews and Cloudbeds were run end to end on their vendors' sandboxes. Every other PMS is **verified against the vendor's API documentation only** \u2014 no live account has been written to yet. `capabilities.reservations.verifiedAgainst` says which.\n\n`X-Account-Id` restricts the listing to one connected account. Returns `403 listing_inactive` when the listing is inactive.",
|
|
38046
38216
|
"tags": [
|
|
38047
38217
|
"Reservations"
|
|
38048
38218
|
],
|
|
@@ -40858,6 +41028,158 @@
|
|
|
40858
41028
|
}
|
|
40859
41029
|
}
|
|
40860
41030
|
}
|
|
41031
|
+
},
|
|
41032
|
+
"/v1/connect/ciirus/credentials": {
|
|
41033
|
+
"post": {
|
|
41034
|
+
"operationId": "submitCiirusCredentials",
|
|
41035
|
+
"summary": "Submit CiiRUS credentials for a Connect session",
|
|
41036
|
+
"description": "Completes a credentials-pattern connection for CiiRUS with the property manager's CiiRUS API username and password.\n\n**What syncs.** Units become listings (with descriptions, photos, amenities, rooms and house rules); reservations (with their charge and tax breakdown and payments) and reviews are imported, then polled for changes. Bookings can be created, quoted, changed and cancelled in CiiRUS \u2014 see `capabilities.reservations` on `GET /v1/connect/ciirus`. Guest messages are not available through CiiRUS's API.\n\n**Where the credentials come from.** The CiiRUS API Explorer gives the API username and password after signing in with the CiiRUS MC username and company password; CiiRUS support can also issue them. Credentials that see several suppliers (management companies) also need `managementCompanyUserId`.\n\n**IP whitelist.** CiiRUS only accepts calls from whitelisted IP addresses, and answers a wrong password and a non-whitelisted address the same way. When this returns `invalid_credentials` with correct credentials, ask CiiRUS support to whitelist Repull for the API user.\n\nThe credentials are validated against CiiRUS before anything is stored, so invalid ones return `invalid_credentials` rather than creating a dead connection. On success only the credential fields below are stored, and the first sync of listings and reservations is queued.\n\nCiiRUS has no webhooks: after the first sync, reservation changes are picked up by polling about once a minute.\n\nReconnecting replaces the stored credentials on the workspace's existing CiiRUS connection \u2014 the `pmsConnectionId` stays the same.\n\nNo API key required when called with a `sessionId` \u2014 the session is the capability token.",
|
|
41037
|
+
"tags": [
|
|
41038
|
+
"Connect"
|
|
41039
|
+
],
|
|
41040
|
+
"requestBody": {
|
|
41041
|
+
"required": true,
|
|
41042
|
+
"content": {
|
|
41043
|
+
"application/json": {
|
|
41044
|
+
"schema": {
|
|
41045
|
+
"type": "object",
|
|
41046
|
+
"properties": {
|
|
41047
|
+
"sessionId": {
|
|
41048
|
+
"type": "string",
|
|
41049
|
+
"description": "Connect session id from `POST /v1/connect/ciirus`. Omit when calling with your API key."
|
|
41050
|
+
},
|
|
41051
|
+
"writePolicy": {
|
|
41052
|
+
"type": "object",
|
|
41053
|
+
"description": "Optional: what the app may change in CiiRUS, set before the first sync. Same shape as `PATCH /v1/connect/{provider}/write-policy`; switches you leave out keep the provider default (everything on).",
|
|
41054
|
+
"example": {
|
|
41055
|
+
"reservations": {
|
|
41056
|
+
"api": false
|
|
41057
|
+
}
|
|
41058
|
+
}
|
|
41059
|
+
},
|
|
41060
|
+
"credentials": {
|
|
41061
|
+
"type": "object",
|
|
41062
|
+
"description": "The CiiRUS API username and password.",
|
|
41063
|
+
"properties": {
|
|
41064
|
+
"apiUsername": {
|
|
41065
|
+
"type": "string",
|
|
41066
|
+
"description": "CiiRUS API username, from the CiiRUS API Explorer or CiiRUS support."
|
|
41067
|
+
},
|
|
41068
|
+
"apiPassword": {
|
|
41069
|
+
"type": "string",
|
|
41070
|
+
"description": "CiiRUS API password."
|
|
41071
|
+
},
|
|
41072
|
+
"managementCompanyUserId": {
|
|
41073
|
+
"type": "integer",
|
|
41074
|
+
"description": "The CiiRUS supplier (management company) id, the MCUserID. Only needed when the credentials see several suppliers.",
|
|
41075
|
+
"example": 42330
|
|
41076
|
+
}
|
|
41077
|
+
},
|
|
41078
|
+
"required": [
|
|
41079
|
+
"apiUsername",
|
|
41080
|
+
"apiPassword"
|
|
41081
|
+
]
|
|
41082
|
+
}
|
|
41083
|
+
},
|
|
41084
|
+
"required": [
|
|
41085
|
+
"credentials"
|
|
41086
|
+
]
|
|
41087
|
+
},
|
|
41088
|
+
"example": {
|
|
41089
|
+
"credentials": {
|
|
41090
|
+
"apiUsername": "AcmeVacationsAPI",
|
|
41091
|
+
"apiPassword": "\u2026"
|
|
41092
|
+
}
|
|
41093
|
+
}
|
|
41094
|
+
}
|
|
41095
|
+
}
|
|
41096
|
+
},
|
|
41097
|
+
"responses": {
|
|
41098
|
+
"200": {
|
|
41099
|
+
"description": "Credentials accepted, the connection stored and its first sync queued",
|
|
41100
|
+
"content": {
|
|
41101
|
+
"application/json": {
|
|
41102
|
+
"schema": {
|
|
41103
|
+
"type": "object",
|
|
41104
|
+
"properties": {
|
|
41105
|
+
"provider": {
|
|
41106
|
+
"type": "string",
|
|
41107
|
+
"example": "ciirus"
|
|
41108
|
+
},
|
|
41109
|
+
"connected": {
|
|
41110
|
+
"type": "boolean"
|
|
41111
|
+
},
|
|
41112
|
+
"pmsConnectionId": {
|
|
41113
|
+
"type": "string",
|
|
41114
|
+
"description": "Id of the stored connection."
|
|
41115
|
+
},
|
|
41116
|
+
"created": {
|
|
41117
|
+
"type": "boolean",
|
|
41118
|
+
"description": "False when an existing connection was updated."
|
|
41119
|
+
},
|
|
41120
|
+
"sessionId": {
|
|
41121
|
+
"type": "string",
|
|
41122
|
+
"nullable": true
|
|
41123
|
+
},
|
|
41124
|
+
"accountInfo": {
|
|
41125
|
+
"type": "object",
|
|
41126
|
+
"properties": {
|
|
41127
|
+
"supplierId": {
|
|
41128
|
+
"type": "string",
|
|
41129
|
+
"description": "The CiiRUS supplier (management company) id the connection reads.",
|
|
41130
|
+
"example": "42330"
|
|
41131
|
+
},
|
|
41132
|
+
"accountName": {
|
|
41133
|
+
"type": "string",
|
|
41134
|
+
"nullable": true,
|
|
41135
|
+
"description": "The supplier's company name."
|
|
41136
|
+
}
|
|
41137
|
+
}
|
|
41138
|
+
},
|
|
41139
|
+
"firstSync": {
|
|
41140
|
+
"type": "object",
|
|
41141
|
+
"description": "Whether the first import of listings and reservations was queued. When it was not, the connection still stands and polling syncs it.",
|
|
41142
|
+
"properties": {
|
|
41143
|
+
"queued": {
|
|
41144
|
+
"type": "boolean"
|
|
41145
|
+
},
|
|
41146
|
+
"error": {
|
|
41147
|
+
"type": "string"
|
|
41148
|
+
}
|
|
41149
|
+
}
|
|
41150
|
+
},
|
|
41151
|
+
"writePolicy": {
|
|
41152
|
+
"$ref": "#/components/schemas/PmsWritePolicy"
|
|
41153
|
+
}
|
|
41154
|
+
}
|
|
41155
|
+
}
|
|
41156
|
+
}
|
|
41157
|
+
}
|
|
41158
|
+
},
|
|
41159
|
+
"400": {
|
|
41160
|
+
"$ref": "#/components/responses/BadRequest"
|
|
41161
|
+
},
|
|
41162
|
+
"401": {
|
|
41163
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
41164
|
+
},
|
|
41165
|
+
"404": {
|
|
41166
|
+
"$ref": "#/components/responses/NotFound"
|
|
41167
|
+
},
|
|
41168
|
+
"422": {
|
|
41169
|
+
"$ref": "#/components/responses/UnprocessableEntity"
|
|
41170
|
+
},
|
|
41171
|
+
"502": {
|
|
41172
|
+
"description": "CiiRUS could not be reached (`network_error`). Nothing was stored.",
|
|
41173
|
+
"content": {
|
|
41174
|
+
"application/json": {
|
|
41175
|
+
"schema": {
|
|
41176
|
+
"$ref": "#/components/schemas/Error"
|
|
41177
|
+
}
|
|
41178
|
+
}
|
|
41179
|
+
}
|
|
41180
|
+
}
|
|
41181
|
+
}
|
|
41182
|
+
}
|
|
40861
41183
|
}
|
|
40862
41184
|
}
|
|
40863
41185
|
}
|
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.
|
|
76
|
+
--additional-properties=gemName=repull,moduleName=Repull,gemVersion=0.2.37
|
|
77
77
|
|
|
78
78
|
echo "==> syncing lib/ + docs/"
|
|
79
79
|
rm -rf "$ROOT/lib/repull" "$ROOT/lib/repull.rb" "$ROOT/docs"
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: repull
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.37
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ivan Nikolov
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-10-
|
|
11
|
+
date: 2026-10-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: typhoeus
|
|
@@ -103,6 +103,7 @@ files:
|
|
|
103
103
|
- lib/repull/models/account_created_payload.rb
|
|
104
104
|
- lib/repull/models/account_disconnected_event.rb
|
|
105
105
|
- lib/repull/models/account_disconnected_payload.rb
|
|
106
|
+
- lib/repull/models/account_disconnected_payload_listings_inner.rb
|
|
106
107
|
- lib/repull/models/account_import.rb
|
|
107
108
|
- lib/repull/models/account_import_completed_event.rb
|
|
108
109
|
- lib/repull/models/account_import_counts.rb
|
|
@@ -389,6 +390,7 @@ files:
|
|
|
389
390
|
- lib/repull/models/inquiry_updated_payload.rb
|
|
390
391
|
- lib/repull/models/inquiry_webhook_object.rb
|
|
391
392
|
- lib/repull/models/inquiry_webhook_object_expected_payout.rb
|
|
393
|
+
- lib/repull/models/inquiry_webhook_object_guest.rb
|
|
392
394
|
- lib/repull/models/inquiry_webhook_object_guests.rb
|
|
393
395
|
- lib/repull/models/invite_booking_extranet_user200_response.rb
|
|
394
396
|
- lib/repull/models/invite_booking_extranet_user_request.rb
|
|
@@ -413,6 +415,7 @@ files:
|
|
|
413
415
|
- lib/repull/models/list_inquiries200_response.rb
|
|
414
416
|
- lib/repull/models/list_inquiries200_response_data_inner.rb
|
|
415
417
|
- lib/repull/models/list_inquiries200_response_data_inner_expected_payout.rb
|
|
418
|
+
- lib/repull/models/list_inquiries200_response_data_inner_guest.rb
|
|
416
419
|
- lib/repull/models/list_inquiries200_response_data_inner_guests.rb
|
|
417
420
|
- lib/repull/models/list_kv200_response.rb
|
|
418
421
|
- lib/repull/models/list_kv200_response_data_inner.rb
|
|
@@ -647,6 +650,8 @@ files:
|
|
|
647
650
|
- lib/repull/models/repull_ping_event.rb
|
|
648
651
|
- lib/repull/models/repull_ping_payload.rb
|
|
649
652
|
- lib/repull/models/reservation.rb
|
|
653
|
+
- lib/repull/models/reservation_access_code.rb
|
|
654
|
+
- lib/repull/models/reservation_access_code_locks_inner.rb
|
|
650
655
|
- lib/repull/models/reservation_alteration_created_event.rb
|
|
651
656
|
- lib/repull/models/reservation_alteration_created_payload.rb
|
|
652
657
|
- lib/repull/models/reservation_alteration_responded_event.rb
|
|
@@ -736,6 +741,10 @@ files:
|
|
|
736
741
|
- lib/repull/models/submit_beds24_credentials200_response.rb
|
|
737
742
|
- lib/repull/models/submit_beds24_credentials_request.rb
|
|
738
743
|
- lib/repull/models/submit_bookingsync_credentials_request.rb
|
|
744
|
+
- lib/repull/models/submit_ciirus_credentials200_response.rb
|
|
745
|
+
- lib/repull/models/submit_ciirus_credentials200_response_account_info.rb
|
|
746
|
+
- lib/repull/models/submit_ciirus_credentials_request.rb
|
|
747
|
+
- lib/repull/models/submit_ciirus_credentials_request_credentials.rb
|
|
739
748
|
- lib/repull/models/submit_cloudbeds_credentials200_response.rb
|
|
740
749
|
- lib/repull/models/submit_cloudbeds_credentials200_response_account_info.rb
|
|
741
750
|
- lib/repull/models/submit_cloudbeds_credentials200_response_webhooks.rb
|