repull 0.2.29 → 0.2.31
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 +2 -2
- data/lib/repull/api/billing_api.rb +68 -9
- data/lib/repull/api/connect_api.rb +139 -0
- data/lib/repull/api/conversations_api.rb +5 -2
- data/lib/repull/api/health_api.rb +2 -2
- data/lib/repull/api/hotels_api.rb +142 -0
- data/lib/repull/api/workspaces_api.rb +96 -0
- data/lib/repull/configuration.rb +0 -4
- data/lib/repull/models/availability_batch_write_request.rb +30 -1
- data/lib/repull/models/availability_write_request.rb +30 -1
- data/lib/repull/models/availability_write_settings.rb +33 -4
- data/lib/repull/models/connect_provider.rb +2 -2
- data/lib/repull/models/connect_session.rb +12 -2
- data/lib/repull/models/create_billing_checkout200_response.rb +156 -0
- data/lib/repull/models/create_billing_checkout_request.rb +2 -2
- data/lib/repull/models/create_connect_session_request.rb +13 -1
- data/lib/repull/models/create_connect_session_request_workspace.rb +1 -1
- data/lib/repull/models/get_billing200_response.rb +183 -0
- data/lib/repull/models/get_billing200_response_limits.rb +160 -0
- data/lib/repull/models/get_billing200_response_used.rb +156 -0
- data/lib/repull/models/get_channel_health200_response_vrbo.rb +11 -1
- data/lib/repull/models/get_hotel200_response.rb +252 -0
- data/lib/repull/models/get_hotel200_response_room_types_inner.rb +168 -0
- data/lib/repull/models/get_usage_summary200_response.rb +10 -1
- data/lib/repull/models/get_usage_summary200_response_credits.rb +186 -0
- data/lib/repull/models/list_hotels200_response.rb +158 -0
- data/lib/repull/models/list_hotels200_response_data_inner.rb +241 -0
- data/lib/repull/models/list_workspaces200_response.rb +158 -0
- data/lib/repull/models/listing.rb +50 -1
- data/lib/repull/models/listing_hotel.rb +202 -0
- data/lib/repull/models/record_account.rb +15 -5
- data/lib/repull/models/reservation_message_received_payload.rb +12 -1
- data/lib/repull/models/reservation_message_sent_payload.rb +12 -1
- data/lib/repull/models/reservation_message_updated_payload.rb +12 -1
- data/lib/repull/models/select_provider_response.rb +1 -1
- data/lib/repull/models/workspace.rb +265 -0
- data/lib/repull/version.rb +1 -1
- data/lib/repull.rb +14 -0
- data/openapi/v1.json +643 -28
- metadata +16 -2
data/openapi/v1.json
CHANGED
|
@@ -38,10 +38,6 @@
|
|
|
38
38
|
{
|
|
39
39
|
"url": "https://api.repull.dev",
|
|
40
40
|
"description": "Production"
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"url": "http://repull.localhost:3000/api/repull",
|
|
44
|
-
"description": "Local development"
|
|
45
41
|
}
|
|
46
42
|
],
|
|
47
43
|
"security": [
|
|
@@ -82,6 +78,10 @@
|
|
|
82
78
|
"name": "Connect",
|
|
83
79
|
"description": "Manage PMS/OTA connections. Supports 50+ platforms."
|
|
84
80
|
},
|
|
81
|
+
{
|
|
82
|
+
"name": "Workspaces",
|
|
83
|
+
"description": "Sub-workspaces \u2014 one per customer of yours. Open one with `POST /v1/connect` and `workspace`, then read and write its data with `X-Workspace-Id`."
|
|
84
|
+
},
|
|
85
85
|
{
|
|
86
86
|
"name": "Migrate",
|
|
87
87
|
"description": "Repull Migrate \u2014 move a property manager's data out of their old PMS: import, report, channel links, cutover."
|
|
@@ -1598,11 +1598,11 @@
|
|
|
1598
1598
|
},
|
|
1599
1599
|
"connectPattern": {
|
|
1600
1600
|
"type": "string",
|
|
1601
|
-
"description": "How the host is connected. `oauth`: provider-side consent screen. `credentials`: hosted form collects API keys. `activation`: push-only handshake
|
|
1601
|
+
"description": "How the host is connected. `oauth`: provider-side consent screen. `credentials`: hosted form collects API keys. `activation`: push-only handshake. `claim`: connectivity-provider designation in the channel's Extranet (Booking.com). `extranet`: the host signs in with their Booking.com Extranet user."
|
|
1602
1602
|
},
|
|
1603
1603
|
"status": {
|
|
1604
1604
|
"type": "string",
|
|
1605
|
-
"description": "Pickers should hide / disable `coming-soon` cards. `beta` cards are clickable but show a Beta pill."
|
|
1605
|
+
"description": "Pickers should hide / disable `coming-soon` cards. `beta` cards are clickable but show a Beta pill. `request-only` is a PMS Repull doesn't connect yet, listed only with `includeRequestOnly`: picking it collects the host's access details for the Repull team, and the session ends as `requested` instead of connecting."
|
|
1606
1606
|
},
|
|
1607
1607
|
"logoUrl": {
|
|
1608
1608
|
"type": "string",
|
|
@@ -1708,6 +1708,44 @@
|
|
|
1708
1708
|
}
|
|
1709
1709
|
}
|
|
1710
1710
|
},
|
|
1711
|
+
"Workspace": {
|
|
1712
|
+
"type": "object",
|
|
1713
|
+
"description": "A sub-workspace: one customer of yours, with its own connections, listings and data. Send its `workspaceId` as `X-Workspace-Id` to act on it.",
|
|
1714
|
+
"properties": {
|
|
1715
|
+
"workspaceId": {
|
|
1716
|
+
"type": "string",
|
|
1717
|
+
"example": "1204"
|
|
1718
|
+
},
|
|
1719
|
+
"name": {
|
|
1720
|
+
"type": "string",
|
|
1721
|
+
"example": "Seaside Rentals"
|
|
1722
|
+
},
|
|
1723
|
+
"externalRef": {
|
|
1724
|
+
"type": "string",
|
|
1725
|
+
"nullable": true,
|
|
1726
|
+
"description": "Your own id for this customer, as you sent it.",
|
|
1727
|
+
"example": "acct_8812"
|
|
1728
|
+
},
|
|
1729
|
+
"createdVia": {
|
|
1730
|
+
"type": "string",
|
|
1731
|
+
"nullable": true,
|
|
1732
|
+
"description": "`connect` \u2014 opened by a Connect session; `migrate` \u2014 opened by Repull Migrate."
|
|
1733
|
+
},
|
|
1734
|
+
"active": {
|
|
1735
|
+
"type": "boolean"
|
|
1736
|
+
},
|
|
1737
|
+
"createdAt": {
|
|
1738
|
+
"type": "string",
|
|
1739
|
+
"format": "date-time"
|
|
1740
|
+
}
|
|
1741
|
+
},
|
|
1742
|
+
"required": [
|
|
1743
|
+
"workspaceId",
|
|
1744
|
+
"name",
|
|
1745
|
+
"active",
|
|
1746
|
+
"createdAt"
|
|
1747
|
+
]
|
|
1748
|
+
},
|
|
1711
1749
|
"Migration": {
|
|
1712
1750
|
"type": "object",
|
|
1713
1751
|
"description": "One migration: a property manager moved through Repull Migrate, living in its own workspace.",
|
|
@@ -2038,9 +2076,13 @@
|
|
|
2038
2076
|
"type": "string",
|
|
2039
2077
|
"description": "Present only on a Repull Migrate session."
|
|
2040
2078
|
},
|
|
2079
|
+
"includeRequestOnly": {
|
|
2080
|
+
"type": "boolean",
|
|
2081
|
+
"description": "Present (`true`) when the session also lists PMSes Repull doesn't connect yet."
|
|
2082
|
+
},
|
|
2041
2083
|
"workspaceId": {
|
|
2042
2084
|
"type": "string",
|
|
2043
|
-
"description": "
|
|
2085
|
+
"description": "Present when the session lands on a sub-workspace (`workspace` or `X-Workspace-Id` on the request): the workspace the connection lands in. Read and write it with `X-Workspace-Id`; on a migrate session, track the import with `GET /v1/migrations/{workspaceId}`.",
|
|
2044
2086
|
"example": "1204"
|
|
2045
2087
|
}
|
|
2046
2088
|
},
|
|
@@ -2067,7 +2109,7 @@
|
|
|
2067
2109
|
"nextUrl": {
|
|
2068
2110
|
"type": "string",
|
|
2069
2111
|
"format": "uri",
|
|
2070
|
-
"description": "Where to send the user next \u2014 OAuth consent, credentials form, activation checklist, or
|
|
2112
|
+
"description": "Where to send the user next \u2014 OAuth consent, credentials form, activation checklist, claim form, or (for a `request-only` PMS) the request form."
|
|
2071
2113
|
}
|
|
2072
2114
|
}
|
|
2073
2115
|
},
|
|
@@ -2125,7 +2167,7 @@
|
|
|
2125
2167
|
"name": {
|
|
2126
2168
|
"type": "string",
|
|
2127
2169
|
"nullable": true,
|
|
2128
|
-
"example": "
|
|
2170
|
+
"example": "Casey"
|
|
2129
2171
|
},
|
|
2130
2172
|
"pictureUrl": {
|
|
2131
2173
|
"type": "string",
|
|
@@ -2633,12 +2675,12 @@
|
|
|
2633
2675
|
"id": {
|
|
2634
2676
|
"type": "integer",
|
|
2635
2677
|
"description": "Repull-internal reservation id. Pass to `GET /v1/reservations/{id}`.",
|
|
2636
|
-
"example":
|
|
2678
|
+
"example": 900001
|
|
2637
2679
|
},
|
|
2638
2680
|
"uid": {
|
|
2639
2681
|
"type": "string",
|
|
2640
2682
|
"description": "Channel-side confirmation code (Airbnb HM-prefixed, Booking.com numeric, etc.). Stable across the lifetime of the reservation.",
|
|
2641
|
-
"example": "
|
|
2683
|
+
"example": "HMEXAMPLE1"
|
|
2642
2684
|
},
|
|
2643
2685
|
"channel": {
|
|
2644
2686
|
"type": "string",
|
|
@@ -2758,6 +2800,12 @@
|
|
|
2758
2800
|
"type": "object",
|
|
2759
2801
|
"description": "Payload for `reservation.message.received`. A new inbound message arrived on a reservation thread.",
|
|
2760
2802
|
"properties": {
|
|
2803
|
+
"hotelId": {
|
|
2804
|
+
"type": "string",
|
|
2805
|
+
"nullable": true,
|
|
2806
|
+
"description": "Booking.com only: the hotel (property) id of the conversation's listing. Absent on other channels. A Booking.com Extranet login can cover several hotels, so use this to route the message.",
|
|
2807
|
+
"example": "10433861"
|
|
2808
|
+
},
|
|
2761
2809
|
"reservationId": {
|
|
2762
2810
|
"type": "integer",
|
|
2763
2811
|
"example": 215906
|
|
@@ -2803,6 +2851,12 @@
|
|
|
2803
2851
|
"type": "object",
|
|
2804
2852
|
"description": "Payload for `reservation.message.sent`: a host-side message was sent on a reservation thread. Same fields as `reservation.message.received`, plus `source`.",
|
|
2805
2853
|
"properties": {
|
|
2854
|
+
"hotelId": {
|
|
2855
|
+
"type": "string",
|
|
2856
|
+
"nullable": true,
|
|
2857
|
+
"description": "Booking.com only: the hotel (property) id of the conversation's listing. Absent on other channels. A Booking.com Extranet login can cover several hotels, so use this to route the message.",
|
|
2858
|
+
"example": "10433861"
|
|
2859
|
+
},
|
|
2806
2860
|
"reservationId": {
|
|
2807
2861
|
"type": "integer",
|
|
2808
2862
|
"nullable": true,
|
|
@@ -2810,7 +2864,7 @@
|
|
|
2810
2864
|
},
|
|
2811
2865
|
"threadId": {
|
|
2812
2866
|
"type": "string",
|
|
2813
|
-
"example": "
|
|
2867
|
+
"example": "900301"
|
|
2814
2868
|
},
|
|
2815
2869
|
"messageId": {
|
|
2816
2870
|
"type": "string",
|
|
@@ -2873,6 +2927,12 @@
|
|
|
2873
2927
|
"type": "object",
|
|
2874
2928
|
"description": "Payload for `reservation.message.updated`: a message was edited on the channel. `body` is the new text; `previousBody` what it replaced. Read receipts and reactions do not fire it.",
|
|
2875
2929
|
"properties": {
|
|
2930
|
+
"hotelId": {
|
|
2931
|
+
"type": "string",
|
|
2932
|
+
"nullable": true,
|
|
2933
|
+
"description": "Booking.com only: the hotel (property) id of the conversation's listing. Absent on other channels. A Booking.com Extranet login can cover several hotels, so use this to route the message.",
|
|
2934
|
+
"example": "10433861"
|
|
2935
|
+
},
|
|
2876
2936
|
"reservationId": {
|
|
2877
2937
|
"type": "integer",
|
|
2878
2938
|
"nullable": true,
|
|
@@ -2880,7 +2940,7 @@
|
|
|
2880
2940
|
},
|
|
2881
2941
|
"threadId": {
|
|
2882
2942
|
"type": "string",
|
|
2883
|
-
"example": "
|
|
2943
|
+
"example": "900301"
|
|
2884
2944
|
},
|
|
2885
2945
|
"messageId": {
|
|
2886
2946
|
"type": "string",
|
|
@@ -3296,7 +3356,7 @@
|
|
|
3296
3356
|
},
|
|
3297
3357
|
"title": {
|
|
3298
3358
|
"type": "string",
|
|
3299
|
-
"example": "
|
|
3359
|
+
"example": "Lakeview Loft \u2014 Example City"
|
|
3300
3360
|
},
|
|
3301
3361
|
"address": {
|
|
3302
3362
|
"type": "object",
|
|
@@ -3364,7 +3424,7 @@
|
|
|
3364
3424
|
"name": {
|
|
3365
3425
|
"type": "string",
|
|
3366
3426
|
"nullable": true,
|
|
3367
|
-
"example": "
|
|
3427
|
+
"example": "Lakeview Loft \u2014 Example City"
|
|
3368
3428
|
},
|
|
3369
3429
|
"active": {
|
|
3370
3430
|
"type": "boolean",
|
|
@@ -4063,6 +4123,11 @@
|
|
|
4063
4123
|
"nullable": true,
|
|
4064
4124
|
"description": "Repull connection id (`X-Account-Id`), when the account has one. A string, like every id in API responses.",
|
|
4065
4125
|
"example": "126"
|
|
4126
|
+
},
|
|
4127
|
+
"hotelId": {
|
|
4128
|
+
"type": "string",
|
|
4129
|
+
"description": "Booking.com only: the hotel (property) id the record belongs to. On a `booking_extranet` account, `externalAccountId` is the login, which can cover several hotels.",
|
|
4130
|
+
"example": "10433861"
|
|
4066
4131
|
}
|
|
4067
4132
|
}
|
|
4068
4133
|
},
|
|
@@ -5879,7 +5944,7 @@
|
|
|
5879
5944
|
"confirmation_code": {
|
|
5880
5945
|
"type": "string",
|
|
5881
5946
|
"description": "Airbnb confirmation code of the reservation to alter. `GET /v1/channels/airbnb/reservations` lists them.",
|
|
5882
|
-
"example": "
|
|
5947
|
+
"example": "HMEXAMPLE1"
|
|
5883
5948
|
},
|
|
5884
5949
|
"check_in": {
|
|
5885
5950
|
"type": "string",
|
|
@@ -6679,7 +6744,7 @@
|
|
|
6679
6744
|
"name": {
|
|
6680
6745
|
"type": "string",
|
|
6681
6746
|
"nullable": true,
|
|
6682
|
-
"example": "
|
|
6747
|
+
"example": "Lakeview Loft"
|
|
6683
6748
|
}
|
|
6684
6749
|
}
|
|
6685
6750
|
}
|
|
@@ -8811,6 +8876,38 @@
|
|
|
8811
8876
|
}
|
|
8812
8877
|
}
|
|
8813
8878
|
},
|
|
8879
|
+
"kind": {
|
|
8880
|
+
"type": "string",
|
|
8881
|
+
"description": "`room_type` when the listing sells several identical units (a hotel room type: `unitCount` > 1) or is a hotel PMS room type; `home` otherwise. See the Hotels & multi-unit guide."
|
|
8882
|
+
},
|
|
8883
|
+
"hotel": {
|
|
8884
|
+
"type": "object",
|
|
8885
|
+
"nullable": true,
|
|
8886
|
+
"description": "The hotel the listing belongs to: a hotel PMS hotel (Cloudbeds, Mews) or a Booking.com property with several room types or rooms. `null` for a standalone home. `GET /v1/hotels/{id}` lists its room types.",
|
|
8887
|
+
"properties": {
|
|
8888
|
+
"id": {
|
|
8889
|
+
"type": "string",
|
|
8890
|
+
"example": "booking:255832",
|
|
8891
|
+
"description": "A Repull hotel id, or `booking:<hotelId>` for a Booking.com property."
|
|
8892
|
+
},
|
|
8893
|
+
"name": {
|
|
8894
|
+
"type": "string",
|
|
8895
|
+
"nullable": true
|
|
8896
|
+
},
|
|
8897
|
+
"source": {
|
|
8898
|
+
"type": "string",
|
|
8899
|
+
"enum": [
|
|
8900
|
+
"pms",
|
|
8901
|
+
"booking"
|
|
8902
|
+
]
|
|
8903
|
+
}
|
|
8904
|
+
}
|
|
8905
|
+
},
|
|
8906
|
+
"unitCount": {
|
|
8907
|
+
"type": "integer",
|
|
8908
|
+
"minimum": 1,
|
|
8909
|
+
"description": "How many identical units (rooms) this listing sells: the hotel PMS rooms of the room type, the room count on Booking.com, or 1 for a home. Rooms left per night are `availableUnits` on `GET /v1/availability/{propertyId}`."
|
|
8910
|
+
},
|
|
8814
8911
|
"units": {
|
|
8815
8912
|
"type": "array",
|
|
8816
8913
|
"description": "`GET /v1/listings/{id}` only. The physical rooms under a hotel-model listing (a Mews or Cloudbeds room type); empty for a single home. Same items as `GET /v1/listings/{id}/units`.",
|
|
@@ -11255,6 +11352,11 @@
|
|
|
11255
11352
|
"maxNights": {
|
|
11256
11353
|
"type": "integer",
|
|
11257
11354
|
"minimum": 1
|
|
11355
|
+
},
|
|
11356
|
+
"availableUnits": {
|
|
11357
|
+
"type": "integer",
|
|
11358
|
+
"minimum": 0,
|
|
11359
|
+
"description": "Rooms to sell on these dates, for a listing that sells several identical rooms (`unitCount` > 1, e.g. a Booking.com room type). Up to the listing's `unitCount`. Refused with `409 managed_by_pms` on a hotel PMS room type (Cloudbeds, Mews) \u2014 its PMS owns the room count."
|
|
11258
11360
|
}
|
|
11259
11361
|
}
|
|
11260
11362
|
},
|
|
@@ -13950,7 +14052,7 @@
|
|
|
13950
14052
|
"listings": [
|
|
13951
14053
|
{
|
|
13952
14054
|
"id": "4118",
|
|
13953
|
-
"name": "
|
|
14055
|
+
"name": "Lakeview Loft"
|
|
13954
14056
|
}
|
|
13955
14057
|
]
|
|
13956
14058
|
}
|
|
@@ -14704,6 +14806,16 @@
|
|
|
14704
14806
|
"404": {
|
|
14705
14807
|
"$ref": "#/components/responses/NotFound"
|
|
14706
14808
|
},
|
|
14809
|
+
"409": {
|
|
14810
|
+
"description": "`managed_by_pms` \u2014 `availableUnits` on a hotel PMS room type. Change rooms in the PMS.",
|
|
14811
|
+
"content": {
|
|
14812
|
+
"application/json": {
|
|
14813
|
+
"schema": {
|
|
14814
|
+
"$ref": "#/components/schemas/Error"
|
|
14815
|
+
}
|
|
14816
|
+
}
|
|
14817
|
+
}
|
|
14818
|
+
},
|
|
14707
14819
|
"422": {
|
|
14708
14820
|
"$ref": "#/components/responses/UnprocessableEntity"
|
|
14709
14821
|
}
|
|
@@ -16018,7 +16130,7 @@
|
|
|
16018
16130
|
"get": {
|
|
16019
16131
|
"operationId": "listConversations",
|
|
16020
16132
|
"summary": "List conversations",
|
|
16021
|
-
"description": "Cursor-paginated list of message threads owned by the workspace. Use `pagination.nextCursor` from one response as the `cursor` query param of the next request.\n\n`?offset=` is also accepted as a first-class alias for shallow paging (0..10000) \u2014 see the `offset` parameter below. Mutually exclusive with `cursor`.\n\nFilters: `platform` (`airbnb`|`booking`|`vrbo`|`website`|`email`), `status` (`open`|`archived` \u2014 `archived` is a stable no-op until the bit lands on `message_threads`).\n\n**Inactive listings:** conversations that belong to an inactive listing (by the thread's listing or its reservation's listing) are left out of the page and of `pagination.total`. Inactive listings keep syncing; activate the listing to use it here.",
|
|
16133
|
+
"description": "Cursor-paginated list of message threads owned by the workspace. Use `pagination.nextCursor` from one response as the `cursor` query param of the next request.\n\n`?offset=` is also accepted as a first-class alias for shallow paging (0..10000) \u2014 see the `offset` parameter below. Mutually exclusive with `cursor`.\n\nFilters: `platform` (`airbnb`|`booking`|`vrbo`|`website`|`email`), `status` (`open`|`archived` \u2014 `archived` is a stable no-op until the bit lands on `message_threads`).\n\n**Inactive listings:** conversations that belong to an inactive listing (by the thread's listing or its reservation's listing) are left out of the page and of `pagination.total`. Inactive listings keep syncing; activate the listing to use it here.\n\n**Order:** newest conversation first (by when the conversation started), unless you pass `updated_since`.\n\n**Incremental sync (`?updated_since=<ISO8601>`):** only conversations with activity (a new message or another change) at or after that instant, ordered oldest change first (`updatedAt ASC`). Walk every page with `cursor`, keeping `updated_since` on each request; the last row's `updatedAt` is your next watermark. A cursor from one kind of walk is refused on the other.",
|
|
16022
16134
|
"tags": [
|
|
16023
16135
|
"Conversations"
|
|
16024
16136
|
],
|
|
@@ -16066,6 +16178,16 @@
|
|
|
16066
16178
|
},
|
|
16067
16179
|
"description": "Restrict to threads on a single channel."
|
|
16068
16180
|
},
|
|
16181
|
+
{
|
|
16182
|
+
"name": "updated_since",
|
|
16183
|
+
"in": "query",
|
|
16184
|
+
"schema": {
|
|
16185
|
+
"type": "string",
|
|
16186
|
+
"format": "date-time"
|
|
16187
|
+
},
|
|
16188
|
+
"description": "ISO 8601 instant. Only conversations with activity at or after it, oldest change first. Keep it on every page of the walk; use the last row's `updatedAt` as the next value.",
|
|
16189
|
+
"example": "2026-10-09T18:00:00Z"
|
|
16190
|
+
},
|
|
16069
16191
|
{
|
|
16070
16192
|
"name": "status",
|
|
16071
16193
|
"in": "query",
|
|
@@ -16957,6 +17079,11 @@
|
|
|
16957
17079
|
"nullable": true,
|
|
16958
17080
|
"description": "Optional whitelist of provider IDs the picker should expose. Omit to show every channel in the registry."
|
|
16959
17081
|
},
|
|
17082
|
+
"includeRequestOnly": {
|
|
17083
|
+
"type": "boolean",
|
|
17084
|
+
"default": false,
|
|
17085
|
+
"description": "Also list PMSes Repull doesn't connect yet (`status: request-only` in `GET /v1/connect/providers?includeRequestOnly=true`), plus an Other PMS card. Picking one opens a form that collects the host's contact and access details for the Repull team and ends with \"A team member will contact you\". No connection is made: the redirect carries `status=requested&provider=<id>`, and no `connect.session.completed` webhook fires. Naming a request-only id in `allowedProviders` offers it without this flag."
|
|
17086
|
+
},
|
|
16960
17087
|
"locale": {
|
|
16961
17088
|
"type": "string",
|
|
16962
17089
|
"nullable": true,
|
|
@@ -16974,7 +17101,7 @@
|
|
|
16974
17101
|
},
|
|
16975
17102
|
"workspace": {
|
|
16976
17103
|
"type": "object",
|
|
16977
|
-
"description": "
|
|
17104
|
+
"description": "Opens a new sub-workspace for this customer of yours and lands the connection there; the response returns its `workspaceId`, which you then send as `X-Workspace-Id`. Works with both purposes: a plain `connect` keeps the normal onboarding pages. Required for `migrate` unless you send `X-Workspace-Id` to reconnect an existing one. Don't send it together with `X-Workspace-Id`.",
|
|
16978
17105
|
"properties": {
|
|
16979
17106
|
"name": {
|
|
16980
17107
|
"type": "string",
|
|
@@ -17064,6 +17191,18 @@
|
|
|
17064
17191
|
"Connect"
|
|
17065
17192
|
],
|
|
17066
17193
|
"security": [],
|
|
17194
|
+
"parameters": [
|
|
17195
|
+
{
|
|
17196
|
+
"name": "includeRequestOnly",
|
|
17197
|
+
"in": "query",
|
|
17198
|
+
"required": false,
|
|
17199
|
+
"schema": {
|
|
17200
|
+
"type": "boolean",
|
|
17201
|
+
"default": false
|
|
17202
|
+
},
|
|
17203
|
+
"description": "Also return the PMSes Repull doesn't connect yet (`status: request-only`), for a picker you render yourself for a session created with `includeRequestOnly`."
|
|
17204
|
+
}
|
|
17205
|
+
],
|
|
17067
17206
|
"responses": {
|
|
17068
17207
|
"200": {
|
|
17069
17208
|
"description": "Channel registry",
|
|
@@ -18078,7 +18217,7 @@
|
|
|
18078
18217
|
"get": {
|
|
18079
18218
|
"operationId": "getChannelHealth",
|
|
18080
18219
|
"summary": "Per-channel connectivity health",
|
|
18081
|
-
"description": "Reports reachability and auth state for one channel (`airbnb`, `booking`, `vrbo`, `plumguide`). Use it to tell \"the channel is down\" apart from \"this workspace's connection expired\". `200` when `status` is `ok`, `503` when `degraded` or `down` (the body's `status` and `message` say which and why).\n\n**`vrbo`** reports the connector's own signals in a `vrbo` block: connected accounts, accounts VRBO signed out (their bookings, messages and calendar stop until reconnected \u2014 `down`), accounts whose inbox sync is late (`degraded`), and the calendar push queue backlog and its oldest wait (`degraded` past 3 hours). Its rate is
|
|
18220
|
+
"description": "Reports reachability and auth state for one channel (`airbnb`, `booking`, `vrbo`, `plumguide`). Use it to tell \"the channel is down\" apart from \"this workspace's connection expired\". `200` when `status` is `ok`, `503` when `degraded` or `down` (the body's `status` and `message` say which and why).\n\n**`vrbo`** reports the connector's own signals in a `vrbo` block: connected accounts, accounts VRBO signed out (their bookings, messages and calendar stop until reconnected \u2014 `down`), accounts whose inbox sync is late (`degraded`), and the calendar push queue backlog and its oldest wait (`degraded` past 3 hours). Its rate is calendar pushes VRBO refused over finished ones in the last 3 hours; failures inside Repull's own connector are reported apart as `vrbo.connector_errors` and do not count (`vrbo.window_hours`; `refresh_attempts_24h` / `refresh_rejections_24h` count that window for VRBO), judged only once at least 50 pushes finished and at least 5 failed \u2014 VRBO pushes run in bursts, so a day-long window would keep reporting a problem already fixed.",
|
|
18082
18221
|
"tags": [
|
|
18083
18222
|
"Health"
|
|
18084
18223
|
],
|
|
@@ -18135,6 +18274,10 @@
|
|
|
18135
18274
|
"type": "integer",
|
|
18136
18275
|
"description": "Listings with a calendar push waiting."
|
|
18137
18276
|
},
|
|
18277
|
+
"connector_errors": {
|
|
18278
|
+
"type": "integer",
|
|
18279
|
+
"description": "Failed pushes in the window caused by Repull's own VRBO connector (a timeout, a browser session in use), not by VRBO. They are retried and never set `status`."
|
|
18280
|
+
},
|
|
18138
18281
|
"calendar_oldest_wait_minutes": {
|
|
18139
18282
|
"type": "integer"
|
|
18140
18283
|
},
|
|
@@ -18220,6 +18363,16 @@
|
|
|
18220
18363
|
"404": {
|
|
18221
18364
|
"$ref": "#/components/responses/NotFound"
|
|
18222
18365
|
},
|
|
18366
|
+
"409": {
|
|
18367
|
+
"description": "`managed_by_pms` \u2014 `availableUnits` on a hotel PMS room type. Change rooms in the PMS.",
|
|
18368
|
+
"content": {
|
|
18369
|
+
"application/json": {
|
|
18370
|
+
"schema": {
|
|
18371
|
+
"$ref": "#/components/schemas/Error"
|
|
18372
|
+
}
|
|
18373
|
+
}
|
|
18374
|
+
}
|
|
18375
|
+
},
|
|
18223
18376
|
"422": {
|
|
18224
18377
|
"$ref": "#/components/responses/UnprocessableEntity"
|
|
18225
18378
|
}
|
|
@@ -19548,7 +19701,7 @@
|
|
|
19548
19701
|
"get": {
|
|
19549
19702
|
"operationId": "get_airbnb_listing_availability",
|
|
19550
19703
|
"summary": "Get Airbnb availability",
|
|
19551
|
-
"description": "Read the per-day availability calendar for an Airbnb listing. Returns one row per day including price overrides, min-stay, and blocked status.\n\nReturns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.",
|
|
19704
|
+
"description": "Read the per-day availability calendar for an Airbnb listing. Returns one row per day including price overrides, min-stay, and blocked status.\n\nThe calendar is served from Repull's stored copy, refreshed by the periodic sync. A successful calendar write through `PUT .../availability` or `PUT .../pricing` (`type: \"calendar\"`) updates the stored days immediately, so reading back right after a write returns the values you published. Changes made directly on Airbnb appear after the next sync (`dataFreshness.lastSyncedAt`).\n\n**Coverage:** with `start_date` + `end_date`, `data.coverage` gives `{ from, to }`, the first and last stored date for the listing (the sync keeps about 12 months ahead). A date outside that window is not stored, so a missing date there means \"not covered\", not \"nothing set\". Request it again once `coverage.to` reaches it.\n\nReturns `403 listing_inactive` when the listing is inactive. An inactive listing keeps syncing, but cannot be read or changed through the API until it is activated.",
|
|
19552
19705
|
"tags": [
|
|
19553
19706
|
"Airbnb"
|
|
19554
19707
|
],
|
|
@@ -27015,10 +27168,71 @@
|
|
|
27015
27168
|
}
|
|
27016
27169
|
},
|
|
27017
27170
|
"/v1/billing": {
|
|
27171
|
+
"get": {
|
|
27172
|
+
"operationId": "get_billing",
|
|
27173
|
+
"summary": "Get plan and usage",
|
|
27174
|
+
"description": "The workspace's plan, its request limits, usage this period, and where the owner manages the plan. Same numbers as `GET /v1/usage/tier`.",
|
|
27175
|
+
"tags": [
|
|
27176
|
+
"Billing"
|
|
27177
|
+
],
|
|
27178
|
+
"responses": {
|
|
27179
|
+
"200": {
|
|
27180
|
+
"description": "Plan and usage",
|
|
27181
|
+
"content": {
|
|
27182
|
+
"application/json": {
|
|
27183
|
+
"schema": {
|
|
27184
|
+
"type": "object",
|
|
27185
|
+
"properties": {
|
|
27186
|
+
"plan": {
|
|
27187
|
+
"type": "string",
|
|
27188
|
+
"example": "starter"
|
|
27189
|
+
},
|
|
27190
|
+
"limits": {
|
|
27191
|
+
"type": "object",
|
|
27192
|
+
"properties": {
|
|
27193
|
+
"monthlyRequests": {
|
|
27194
|
+
"type": "integer",
|
|
27195
|
+
"nullable": true,
|
|
27196
|
+
"description": "null = no limit"
|
|
27197
|
+
},
|
|
27198
|
+
"dailyRequests": {
|
|
27199
|
+
"type": "integer",
|
|
27200
|
+
"nullable": true,
|
|
27201
|
+
"description": "null = no limit"
|
|
27202
|
+
}
|
|
27203
|
+
}
|
|
27204
|
+
},
|
|
27205
|
+
"used": {
|
|
27206
|
+
"type": "object",
|
|
27207
|
+
"properties": {
|
|
27208
|
+
"monthlyRequests": {
|
|
27209
|
+
"type": "integer"
|
|
27210
|
+
},
|
|
27211
|
+
"dailyRequests": {
|
|
27212
|
+
"type": "integer"
|
|
27213
|
+
}
|
|
27214
|
+
}
|
|
27215
|
+
},
|
|
27216
|
+
"resetsAt": {
|
|
27217
|
+
"type": "string",
|
|
27218
|
+
"format": "date-time"
|
|
27219
|
+
},
|
|
27220
|
+
"manageUrl": {
|
|
27221
|
+
"type": "string",
|
|
27222
|
+
"format": "uri",
|
|
27223
|
+
"example": "https://repull.dev/dashboard/settings"
|
|
27224
|
+
}
|
|
27225
|
+
}
|
|
27226
|
+
}
|
|
27227
|
+
}
|
|
27228
|
+
}
|
|
27229
|
+
}
|
|
27230
|
+
}
|
|
27231
|
+
},
|
|
27018
27232
|
"post": {
|
|
27019
27233
|
"operationId": "create_billing_checkout",
|
|
27020
|
-
"summary": "
|
|
27021
|
-
"description": "
|
|
27234
|
+
"summary": "Start an upgrade",
|
|
27235
|
+
"description": "Returns the URL where the workspace owner upgrades to Starter. Plans above Starter are set up with the Repull team and return `422 billing_error` with the next step.",
|
|
27022
27236
|
"tags": [
|
|
27023
27237
|
"Billing"
|
|
27024
27238
|
],
|
|
@@ -27031,9 +27245,7 @@
|
|
|
27031
27245
|
"plan": {
|
|
27032
27246
|
"type": "string",
|
|
27033
27247
|
"enum": [
|
|
27034
|
-
"starter"
|
|
27035
|
-
"growth",
|
|
27036
|
-
"scale"
|
|
27248
|
+
"starter"
|
|
27037
27249
|
]
|
|
27038
27250
|
}
|
|
27039
27251
|
}
|
|
@@ -27043,7 +27255,28 @@
|
|
|
27043
27255
|
},
|
|
27044
27256
|
"responses": {
|
|
27045
27257
|
"200": {
|
|
27046
|
-
"description": "
|
|
27258
|
+
"description": "Where to complete the upgrade",
|
|
27259
|
+
"content": {
|
|
27260
|
+
"application/json": {
|
|
27261
|
+
"schema": {
|
|
27262
|
+
"type": "object",
|
|
27263
|
+
"properties": {
|
|
27264
|
+
"plan": {
|
|
27265
|
+
"type": "string",
|
|
27266
|
+
"example": "starter"
|
|
27267
|
+
},
|
|
27268
|
+
"checkoutUrl": {
|
|
27269
|
+
"type": "string",
|
|
27270
|
+
"format": "uri",
|
|
27271
|
+
"example": "https://repull.dev/dashboard/settings"
|
|
27272
|
+
}
|
|
27273
|
+
}
|
|
27274
|
+
}
|
|
27275
|
+
}
|
|
27276
|
+
}
|
|
27277
|
+
},
|
|
27278
|
+
"422": {
|
|
27279
|
+
"description": "A plan that is not sold through self-serve checkout, or an unknown plan"
|
|
27047
27280
|
}
|
|
27048
27281
|
}
|
|
27049
27282
|
}
|
|
@@ -27318,6 +27551,30 @@
|
|
|
27318
27551
|
}
|
|
27319
27552
|
}
|
|
27320
27553
|
},
|
|
27554
|
+
"credits": {
|
|
27555
|
+
"type": "object",
|
|
27556
|
+
"description": "Pay-as-you-go wallet. Requests beyond your plan's monthly quota keep being served while `active`, billed at `usdPer1000Requests`. Top up at https://repull.dev/dashboard/billing.",
|
|
27557
|
+
"properties": {
|
|
27558
|
+
"balanceUsd": {
|
|
27559
|
+
"type": "number"
|
|
27560
|
+
},
|
|
27561
|
+
"active": {
|
|
27562
|
+
"type": "boolean",
|
|
27563
|
+
"description": "Positive balance and not paused \u2014 usage beyond the monthly quota is being served."
|
|
27564
|
+
},
|
|
27565
|
+
"paused": {
|
|
27566
|
+
"type": "boolean"
|
|
27567
|
+
},
|
|
27568
|
+
"usdPer1000Requests": {
|
|
27569
|
+
"type": "number",
|
|
27570
|
+
"example": 1
|
|
27571
|
+
},
|
|
27572
|
+
"requestsCovered": {
|
|
27573
|
+
"type": "integer",
|
|
27574
|
+
"description": "Requests beyond your quota the current balance pays for."
|
|
27575
|
+
}
|
|
27576
|
+
}
|
|
27577
|
+
},
|
|
27321
27578
|
"dailyResetsAt": {
|
|
27322
27579
|
"type": "string",
|
|
27323
27580
|
"format": "date-time"
|
|
@@ -36682,6 +36939,364 @@
|
|
|
36682
36939
|
}
|
|
36683
36940
|
}
|
|
36684
36941
|
}
|
|
36942
|
+
},
|
|
36943
|
+
"/v1/workspaces": {
|
|
36944
|
+
"get": {
|
|
36945
|
+
"operationId": "listWorkspaces",
|
|
36946
|
+
"summary": "List workspaces",
|
|
36947
|
+
"description": "Every sub-workspace your workspace has opened, newest first: one per customer of yours, created by `POST /v1/connect` with `workspace` (or by Repull Migrate). Read or write a workspace's data by sending its `workspaceId` as `X-Workspace-Id`. Its webhook events arrive on your own webhook endpoints, tagged with `workspaceId`. Page with `pagination.nextCursor`.",
|
|
36948
|
+
"tags": [
|
|
36949
|
+
"Workspaces"
|
|
36950
|
+
],
|
|
36951
|
+
"parameters": [
|
|
36952
|
+
{
|
|
36953
|
+
"name": "limit",
|
|
36954
|
+
"in": "query",
|
|
36955
|
+
"schema": {
|
|
36956
|
+
"type": "integer",
|
|
36957
|
+
"minimum": 1,
|
|
36958
|
+
"maximum": 100,
|
|
36959
|
+
"default": 25
|
|
36960
|
+
}
|
|
36961
|
+
},
|
|
36962
|
+
{
|
|
36963
|
+
"name": "cursor",
|
|
36964
|
+
"in": "query",
|
|
36965
|
+
"schema": {
|
|
36966
|
+
"type": "string"
|
|
36967
|
+
},
|
|
36968
|
+
"description": "`pagination.nextCursor` from the previous page."
|
|
36969
|
+
},
|
|
36970
|
+
{
|
|
36971
|
+
"name": "externalRef",
|
|
36972
|
+
"in": "query",
|
|
36973
|
+
"schema": {
|
|
36974
|
+
"type": "string"
|
|
36975
|
+
},
|
|
36976
|
+
"description": "Only the workspace you tagged with this `externalRef` (your own id for the customer)."
|
|
36977
|
+
}
|
|
36978
|
+
],
|
|
36979
|
+
"responses": {
|
|
36980
|
+
"200": {
|
|
36981
|
+
"description": "Workspaces",
|
|
36982
|
+
"content": {
|
|
36983
|
+
"application/json": {
|
|
36984
|
+
"schema": {
|
|
36985
|
+
"type": "object",
|
|
36986
|
+
"properties": {
|
|
36987
|
+
"data": {
|
|
36988
|
+
"type": "array",
|
|
36989
|
+
"items": {
|
|
36990
|
+
"$ref": "#/components/schemas/Workspace"
|
|
36991
|
+
}
|
|
36992
|
+
},
|
|
36993
|
+
"pagination": {
|
|
36994
|
+
"type": "object",
|
|
36995
|
+
"properties": {
|
|
36996
|
+
"nextCursor": {
|
|
36997
|
+
"type": "string",
|
|
36998
|
+
"nullable": true
|
|
36999
|
+
},
|
|
37000
|
+
"hasMore": {
|
|
37001
|
+
"type": "boolean"
|
|
37002
|
+
},
|
|
37003
|
+
"total": {
|
|
37004
|
+
"type": "integer"
|
|
37005
|
+
}
|
|
37006
|
+
}
|
|
37007
|
+
}
|
|
37008
|
+
}
|
|
37009
|
+
}
|
|
37010
|
+
}
|
|
37011
|
+
}
|
|
37012
|
+
},
|
|
37013
|
+
"401": {
|
|
37014
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
37015
|
+
},
|
|
37016
|
+
"422": {
|
|
37017
|
+
"$ref": "#/components/responses/UnprocessableEntity"
|
|
37018
|
+
},
|
|
37019
|
+
"500": {
|
|
37020
|
+
"$ref": "#/components/responses/InternalError"
|
|
37021
|
+
}
|
|
37022
|
+
}
|
|
37023
|
+
}
|
|
37024
|
+
},
|
|
37025
|
+
"/v1/hotels": {
|
|
37026
|
+
"get": {
|
|
37027
|
+
"operationId": "listHotels",
|
|
37028
|
+
"summary": "List hotels",
|
|
37029
|
+
"description": "Your workspace's hotels: hotels from a hotel PMS (Cloudbeds, Mews) and Booking.com properties with several room types or rooms. Each room type is a listing \u2014 `GET /v1/hotels/{id}` lists them with their room counts. A hotel itself is never booked: availability, prices and reservations live on its room types. See the Hotels & multi-unit guide.",
|
|
37030
|
+
"tags": [
|
|
37031
|
+
"Hotels"
|
|
37032
|
+
],
|
|
37033
|
+
"responses": {
|
|
37034
|
+
"200": {
|
|
37035
|
+
"description": "Hotels",
|
|
37036
|
+
"content": {
|
|
37037
|
+
"application/json": {
|
|
37038
|
+
"schema": {
|
|
37039
|
+
"type": "object",
|
|
37040
|
+
"properties": {
|
|
37041
|
+
"data": {
|
|
37042
|
+
"type": "array",
|
|
37043
|
+
"items": {
|
|
37044
|
+
"type": "object",
|
|
37045
|
+
"properties": {
|
|
37046
|
+
"id": {
|
|
37047
|
+
"type": "string",
|
|
37048
|
+
"example": "30910",
|
|
37049
|
+
"description": "A Repull hotel id, or `booking:<hotelId>` for a Booking.com property."
|
|
37050
|
+
},
|
|
37051
|
+
"name": {
|
|
37052
|
+
"type": "string",
|
|
37053
|
+
"nullable": true
|
|
37054
|
+
},
|
|
37055
|
+
"source": {
|
|
37056
|
+
"type": "string",
|
|
37057
|
+
"enum": [
|
|
37058
|
+
"pms",
|
|
37059
|
+
"booking"
|
|
37060
|
+
],
|
|
37061
|
+
"description": "`pms`: a hotel PMS (Cloudbeds, Mews) owns rooms and room counts. `booking`: a Booking.com property; room counts are the room count on Booking.com."
|
|
37062
|
+
},
|
|
37063
|
+
"provider": {
|
|
37064
|
+
"type": "string",
|
|
37065
|
+
"nullable": true,
|
|
37066
|
+
"example": "cloudbeds"
|
|
37067
|
+
},
|
|
37068
|
+
"city": {
|
|
37069
|
+
"type": "string",
|
|
37070
|
+
"nullable": true
|
|
37071
|
+
},
|
|
37072
|
+
"roomTypeCount": {
|
|
37073
|
+
"type": "integer"
|
|
37074
|
+
},
|
|
37075
|
+
"unitCount": {
|
|
37076
|
+
"type": "integer",
|
|
37077
|
+
"description": "Rooms across all room types."
|
|
37078
|
+
}
|
|
37079
|
+
}
|
|
37080
|
+
}
|
|
37081
|
+
},
|
|
37082
|
+
"pagination": {
|
|
37083
|
+
"type": "object",
|
|
37084
|
+
"properties": {
|
|
37085
|
+
"nextCursor": {
|
|
37086
|
+
"type": "string",
|
|
37087
|
+
"nullable": true
|
|
37088
|
+
},
|
|
37089
|
+
"hasMore": {
|
|
37090
|
+
"type": "boolean"
|
|
37091
|
+
},
|
|
37092
|
+
"total": {
|
|
37093
|
+
"type": "integer"
|
|
37094
|
+
}
|
|
37095
|
+
}
|
|
37096
|
+
}
|
|
37097
|
+
}
|
|
37098
|
+
}
|
|
37099
|
+
}
|
|
37100
|
+
}
|
|
37101
|
+
},
|
|
37102
|
+
"401": {
|
|
37103
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
37104
|
+
}
|
|
37105
|
+
}
|
|
37106
|
+
}
|
|
37107
|
+
},
|
|
37108
|
+
"/v1/hotels/{id}": {
|
|
37109
|
+
"get": {
|
|
37110
|
+
"operationId": "getHotel",
|
|
37111
|
+
"summary": "Get a hotel",
|
|
37112
|
+
"description": "One hotel with its room types. `id` is from `GET /v1/hotels`, or a listing's `hotel.id`.",
|
|
37113
|
+
"tags": [
|
|
37114
|
+
"Hotels"
|
|
37115
|
+
],
|
|
37116
|
+
"parameters": [
|
|
37117
|
+
{
|
|
37118
|
+
"name": "id",
|
|
37119
|
+
"in": "path",
|
|
37120
|
+
"required": true,
|
|
37121
|
+
"schema": {
|
|
37122
|
+
"type": "string"
|
|
37123
|
+
},
|
|
37124
|
+
"example": "booking:255832"
|
|
37125
|
+
}
|
|
37126
|
+
],
|
|
37127
|
+
"responses": {
|
|
37128
|
+
"200": {
|
|
37129
|
+
"description": "Hotel",
|
|
37130
|
+
"content": {
|
|
37131
|
+
"application/json": {
|
|
37132
|
+
"schema": {
|
|
37133
|
+
"type": "object",
|
|
37134
|
+
"properties": {
|
|
37135
|
+
"id": {
|
|
37136
|
+
"type": "string",
|
|
37137
|
+
"example": "30910",
|
|
37138
|
+
"description": "A Repull hotel id, or `booking:<hotelId>` for a Booking.com property."
|
|
37139
|
+
},
|
|
37140
|
+
"name": {
|
|
37141
|
+
"type": "string",
|
|
37142
|
+
"nullable": true
|
|
37143
|
+
},
|
|
37144
|
+
"source": {
|
|
37145
|
+
"type": "string",
|
|
37146
|
+
"enum": [
|
|
37147
|
+
"pms",
|
|
37148
|
+
"booking"
|
|
37149
|
+
],
|
|
37150
|
+
"description": "`pms`: a hotel PMS (Cloudbeds, Mews) owns rooms and room counts. `booking`: a Booking.com property; room counts are the room count on Booking.com."
|
|
37151
|
+
},
|
|
37152
|
+
"provider": {
|
|
37153
|
+
"type": "string",
|
|
37154
|
+
"nullable": true,
|
|
37155
|
+
"example": "cloudbeds"
|
|
37156
|
+
},
|
|
37157
|
+
"city": {
|
|
37158
|
+
"type": "string",
|
|
37159
|
+
"nullable": true
|
|
37160
|
+
},
|
|
37161
|
+
"roomTypeCount": {
|
|
37162
|
+
"type": "integer"
|
|
37163
|
+
},
|
|
37164
|
+
"unitCount": {
|
|
37165
|
+
"type": "integer",
|
|
37166
|
+
"description": "Rooms across all room types."
|
|
37167
|
+
},
|
|
37168
|
+
"roomTypes": {
|
|
37169
|
+
"type": "array",
|
|
37170
|
+
"items": {
|
|
37171
|
+
"type": "object",
|
|
37172
|
+
"properties": {
|
|
37173
|
+
"listingId": {
|
|
37174
|
+
"type": "string",
|
|
37175
|
+
"description": "The room type's listing id \u2014 use it with every /v1/listings, /v1/availability and /v1/reservations endpoint."
|
|
37176
|
+
},
|
|
37177
|
+
"name": {
|
|
37178
|
+
"type": "string",
|
|
37179
|
+
"nullable": true
|
|
37180
|
+
},
|
|
37181
|
+
"unitCount": {
|
|
37182
|
+
"type": "integer",
|
|
37183
|
+
"description": "Rooms of this type."
|
|
37184
|
+
}
|
|
37185
|
+
}
|
|
37186
|
+
}
|
|
37187
|
+
}
|
|
37188
|
+
}
|
|
37189
|
+
}
|
|
37190
|
+
}
|
|
37191
|
+
}
|
|
37192
|
+
},
|
|
37193
|
+
"401": {
|
|
37194
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
37195
|
+
},
|
|
37196
|
+
"404": {
|
|
37197
|
+
"$ref": "#/components/responses/NotFound"
|
|
37198
|
+
},
|
|
37199
|
+
"422": {
|
|
37200
|
+
"$ref": "#/components/responses/UnprocessableEntity"
|
|
37201
|
+
}
|
|
37202
|
+
}
|
|
37203
|
+
}
|
|
37204
|
+
},
|
|
37205
|
+
"/v1/connect/zeevou/callback": {
|
|
37206
|
+
"get": {
|
|
37207
|
+
"operationId": "zeevouConnectCallback",
|
|
37208
|
+
"summary": "Zeevou OAuth callback",
|
|
37209
|
+
"description": "Zeevou's OAuth redirect after the host allows or denies access on Zeevou's consent screen. It finishes the Connect session and redirects the host to the hosted Connect page. Called by the host's browser, not by integrators.",
|
|
37210
|
+
"tags": [
|
|
37211
|
+
"Connect"
|
|
37212
|
+
],
|
|
37213
|
+
"security": [],
|
|
37214
|
+
"parameters": [
|
|
37215
|
+
{
|
|
37216
|
+
"name": "code",
|
|
37217
|
+
"in": "query",
|
|
37218
|
+
"required": false,
|
|
37219
|
+
"schema": {
|
|
37220
|
+
"type": "string"
|
|
37221
|
+
},
|
|
37222
|
+
"description": "Authorization code from Zeevou."
|
|
37223
|
+
},
|
|
37224
|
+
{
|
|
37225
|
+
"name": "state",
|
|
37226
|
+
"in": "query",
|
|
37227
|
+
"required": true,
|
|
37228
|
+
"schema": {
|
|
37229
|
+
"type": "string"
|
|
37230
|
+
},
|
|
37231
|
+
"description": "The signed Connect state Repull sent to Zeevou."
|
|
37232
|
+
},
|
|
37233
|
+
{
|
|
37234
|
+
"name": "error",
|
|
37235
|
+
"in": "query",
|
|
37236
|
+
"required": false,
|
|
37237
|
+
"schema": {
|
|
37238
|
+
"type": "string"
|
|
37239
|
+
},
|
|
37240
|
+
"description": "Set by Zeevou when the host denied access (`access_denied`)."
|
|
37241
|
+
}
|
|
37242
|
+
],
|
|
37243
|
+
"responses": {
|
|
37244
|
+
"302": {
|
|
37245
|
+
"description": "Redirect to the hosted Connect page with the outcome"
|
|
37246
|
+
},
|
|
37247
|
+
"400": {
|
|
37248
|
+
"description": "The state is missing, forged or expired"
|
|
37249
|
+
}
|
|
37250
|
+
}
|
|
37251
|
+
}
|
|
37252
|
+
},
|
|
37253
|
+
"/v1/connect/rentalready/callback": {
|
|
37254
|
+
"get": {
|
|
37255
|
+
"operationId": "rentalReadyConnectCallback",
|
|
37256
|
+
"summary": "RentalReady OAuth callback",
|
|
37257
|
+
"description": "RentalReady's OAuth redirect after the host allows or denies access on RentalReady's consent screen. It finishes the Connect session and redirects the host to the hosted Connect page. Called by the host's browser, not by integrators.",
|
|
37258
|
+
"tags": [
|
|
37259
|
+
"Connect"
|
|
37260
|
+
],
|
|
37261
|
+
"security": [],
|
|
37262
|
+
"parameters": [
|
|
37263
|
+
{
|
|
37264
|
+
"name": "code",
|
|
37265
|
+
"in": "query",
|
|
37266
|
+
"required": false,
|
|
37267
|
+
"schema": {
|
|
37268
|
+
"type": "string"
|
|
37269
|
+
},
|
|
37270
|
+
"description": "Authorization code from RentalReady."
|
|
37271
|
+
},
|
|
37272
|
+
{
|
|
37273
|
+
"name": "state",
|
|
37274
|
+
"in": "query",
|
|
37275
|
+
"required": true,
|
|
37276
|
+
"schema": {
|
|
37277
|
+
"type": "string"
|
|
37278
|
+
},
|
|
37279
|
+
"description": "The signed Connect state Repull sent to RentalReady."
|
|
37280
|
+
},
|
|
37281
|
+
{
|
|
37282
|
+
"name": "error",
|
|
37283
|
+
"in": "query",
|
|
37284
|
+
"required": false,
|
|
37285
|
+
"schema": {
|
|
37286
|
+
"type": "string"
|
|
37287
|
+
},
|
|
37288
|
+
"description": "Set by RentalReady when the host denied access (`access_denied`)."
|
|
37289
|
+
}
|
|
37290
|
+
],
|
|
37291
|
+
"responses": {
|
|
37292
|
+
"302": {
|
|
37293
|
+
"description": "Redirect to the hosted Connect page with the outcome"
|
|
37294
|
+
},
|
|
37295
|
+
"400": {
|
|
37296
|
+
"description": "The state is missing, forged or expired"
|
|
37297
|
+
}
|
|
37298
|
+
}
|
|
37299
|
+
}
|
|
36685
37300
|
}
|
|
36686
37301
|
}
|
|
36687
37302
|
}
|