Wiki source code of 1. SearchHotelPrices
Version 9.1 by Giorgi Mdivnishvili on 2023/12/26 15:35
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{box cssClass="floatinginfobox" title="**Contents**"}} | ||
| 2 | |||
| 3 | |||
| 4 | {{toc/}} | ||
| 5 | {{/box}} | ||
| 6 | |||
| 7 | = Method Description = | ||
| 8 | |||
| 9 | The initial method of the integration process is authorization. You will be provided with a test user username and password to generate the access token that you will need to pass in all the following methods. | ||
| 10 | |||
| 11 | |||
| 12 | == Endpoint URL - [POST] == | ||
| 13 | |||
| 14 | {{info}} | ||
| 15 | [[https:~~/~~/online-api.kazunion.com/api/OnlyHotelPackages/SearchHotelPrices>>https://online-api.kazunion.com/api/OnlyHotelPackages/SearchHotelPrices]] | ||
| 16 | {{/info}} | ||
| 17 | |||
| 18 | |||
| 19 | == Request Parameters == | ||
| 20 | |||
| 21 | (% class="box infomessage" %) | ||
| 22 | ((( | ||
| 23 | None | ||
| 24 | ))) | ||
| 25 | |||
| 26 | == Request Body == | ||
| 27 | |||
| 28 | {{code language="Json"}} | ||
| 29 | { | ||
| 30 | "countryCode": "string", | ||
| 31 | "locations": [ | ||
| 32 | { | ||
| 33 | "type": "string", | ||
| 34 | "parent": "string", | ||
| 35 | "label": "string", | ||
| 36 | "subLabel": "string", | ||
| 37 | "value": "string", | ||
| 38 | "tag": "string" | ||
| 39 | } | ||
| 40 | ], | ||
| 41 | "checkInDate": "2023-12-14T08:09:42.770Z", | ||
| 42 | "checkInDateTo": "2023-12-14T08:09:42.770Z", | ||
| 43 | "checkOutDate": "2023-12-14T08:09:42.770Z", | ||
| 44 | "stayDays": 0, | ||
| 45 | "stayDaysTo": 0, | ||
| 46 | "adults": 0, | ||
| 47 | "children": 0, | ||
| 48 | "childrenAges": [ | ||
| 49 | 0 | ||
| 50 | ], | ||
| 51 | "extendedSearch": true, | ||
| 52 | "totalPriceFrom": 0, | ||
| 53 | "totalPriceTo": 0, | ||
| 54 | "recommended": true, | ||
| 55 | "popular": true, | ||
| 56 | "freeSale": true, | ||
| 57 | "groupByHotel": true, | ||
| 58 | "hotelCodes": [ | ||
| 59 | "string" | ||
| 60 | ], | ||
| 61 | "mealPlans": [ | ||
| 62 | "string" | ||
| 63 | ], | ||
| 64 | "hotelClasses": [ | ||
| 65 | "string" | ||
| 66 | ], | ||
| 67 | "hotelTypes": [ | ||
| 68 | "CityHotel" | ||
| 69 | ], | ||
| 70 | "hotelServices": [ | ||
| 71 | "HasAlcohol" | ||
| 72 | ], | ||
| 73 | "pagingId": "string", | ||
| 74 | "pageNumber": 0, | ||
| 75 | "pageRowCount": 0 | ||
| 76 | } | ||
| 77 | {{/code}} | ||
| 78 | |||
| 79 | == Request Body example == | ||
| 80 | |||
| 81 | |||
| 82 | {{code language="Json"}} | ||
| 83 | { | ||
| 84 | "countryCode": "AE", | ||
| 85 | "checkInDate": "2024-02-15T08:00:00.000Z", | ||
| 86 | "checkInDateTo": "2024-02-20T08:00:00.000Z", | ||
| 87 | |||
| 88 | "stayDays": 4, | ||
| 89 | "stayDaysTo": 6, | ||
| 90 | "adults": 1, | ||
| 91 | "children": 1, | ||
| 92 | "childrenAges": [ | ||
| 93 | 1 | ||
| 94 | ], | ||
| 95 | "extendedSearch": false, | ||
| 96 | "totalPriceFrom": 10, | ||
| 97 | "totalPriceTo": 10000, | ||
| 98 | "recommended": false, | ||
| 99 | "popular": true, | ||
| 100 | "freeSale": true, | ||
| 101 | "groupByHotel": true, | ||
| 102 | "hotelCodes": [ | ||
| 103 | |||
| 104 | ], | ||
| 105 | "mealPlans": [ | ||
| 106 | |||
| 107 | ], | ||
| 108 | "hotelClasses": [ | ||
| 109 | |||
| 110 | ], | ||
| 111 | "hotelTypes": [ | ||
| 112 | |||
| 113 | ], | ||
| 114 | "hotelServices": [ | ||
| 115 | |||
| 116 | ], | ||
| 117 | "pagingId": "", | ||
| 118 | "pageNumber": 3, | ||
| 119 | "pageRowCount": 10 | ||
| 120 | } | ||
| 121 | {{/code}} | ||
| 122 | |||
| 123 | == Response Body == | ||
| 124 | |||
| 125 | {{code language="json"}} | ||
| 126 | [ | ||
| 127 | { | ||
| 128 | "hotelCode": "string", | ||
| 129 | "hotelName": "string", | ||
| 130 | "hotelClass": "string", | ||
| 131 | "cityUID": "3fa85f64-5717-4562-b3fc-2c963f66afa6", | ||
| 132 | "countryCode": "string", | ||
| 133 | "countryName": "string", | ||
| 134 | "districtUID": "3fa85f64-5717-4562-b3fc-2c963f66afa6", | ||
| 135 | "cityName": "string", | ||
| 136 | "districtName": "string", | ||
| 137 | "hotelType": "CityHotel", | ||
| 138 | "latitude": "string", | ||
| 139 | "longitude": "string", | ||
| 140 | "hasAlcohol": true, | ||
| 141 | "hasFreeWifi": true, | ||
| 142 | "hasMetro": true, | ||
| 143 | "hasPool": true, | ||
| 144 | "hasMall": true | ||
| 145 | } | ||
| 146 | ] | ||
| 147 | {{/code}} | ||
| 148 | |||
| 149 | |||
| 150 | === Response Body example === | ||
| 151 | |||
| 152 | {{code language="Json"}} | ||
| 153 | { | ||
| 154 | "packages": [ | ||
| 155 | { | ||
| 156 | "id": "onlyhotel:c4e23e7e-3d54-4efa-a3db-88508230ce91:504f63ca-6dd5-4d84-8245-cf7e77ccff73", | ||
| 157 | "priceCurrency": "USD", | ||
| 158 | "totalPrice": 381.7, | ||
| 159 | "agentCommissionPercent": 0.0, | ||
| 160 | "agentCommissionAmount": 0.0, | ||
| 161 | "hotel": { | ||
| 162 | "hotelPriceId": "504f63ca-6dd5-4d84-8245-cf7e77ccff73", | ||
| 163 | "providerId": 13, | ||
| 164 | "hotelName": "Golden Tulip Al Barsha Hotel", | ||
| 165 | "hotelCode": "ed0820c5-29b0-4e1b-8bcf-9f3c181e7961", | ||
| 166 | "nigths": 4, | ||
| 167 | "mealPlan": "RO", | ||
| 168 | "hotelClass": "4", | ||
| 169 | "availabilityType": "FreeSale", | ||
| 170 | "availableRoomsCount": 0, | ||
| 171 | "fewRooms": true, | ||
| 172 | "roomCategoryCode": "e63ea5ac-4883-4059-bb0a-795a534bbbfb", | ||
| 173 | "roomCategoryName": "Superior Twin", | ||
| 174 | "placementTypeName": "SNGL + CHILD(6-11.99)sharing", | ||
| 175 | "checkInDate": "2024-02-17T08:00:00.000Z", | ||
| 176 | "checkOutDate": "2024-02-21T08:00:00.000Z", | ||
| 177 | "adults": 1, | ||
| 178 | "children": 1, | ||
| 179 | "districtUID": "4c65f6ed-902b-4fd8-9419-af7884c22c5e", | ||
| 180 | "districtName": "Al Barsha", | ||
| 181 | "cityUID": "f5185fa3-3f56-44ed-bf6b-80386a33caa2", | ||
| 182 | "cityName": "Dubai", | ||
| 183 | "countryCode": "AE", | ||
| 184 | "countryName": "United Arab Emirates", | ||
| 185 | "hasAlcohol": true, | ||
| 186 | "hasFreeWifi": true, | ||
| 187 | "hasMetro": false, | ||
| 188 | "hasPool": true, | ||
| 189 | "hasMall": false, | ||
| 190 | "cancellationPolicyDescription": "Cancellation Policy: 15 Day Before Arrival: 100.00 %, Early Departure: 100.00 %, NoShow: 100.00 %", | ||
| 191 | "cancellationPolicy": { | ||
| 192 | "noShowChargeValue": 100.0, | ||
| 193 | "noShowChargeValueType": "%", | ||
| 194 | "earlyDepartureChargeValue": 100.0, | ||
| 195 | "earlyDepartureChargeValueType": "%", | ||
| 196 | "conditions": [ | ||
| 197 | { | ||
| 198 | "timeunits": 15, | ||
| 199 | "timeunitType": "Day", | ||
| 200 | "timeOffsetTypeName": "Before Arrival", | ||
| 201 | "chargeValue": 100.0, | ||
| 202 | "chargeValueType": "%" | ||
| 203 | } | ||
| 204 | ] | ||
| 205 | } | ||
| 206 | }, | ||
| 207 | "extraServices": [] | ||
| 208 | }, | ||
| 209 | {{/code}} | ||
| 210 | |||
| 211 | |||
| 212 | === Schema === | ||
| 213 | |||
| 214 | {{success}} | ||
| 215 | SearchOnlyHotelPackagesResponse{ | ||
| 216 | |||
| 217 | |packages|[ | ||
| 218 | nullable: trueOnlyHotelPackage{((( | ||
| 219 | |id|string | ||
| 220 | nullable: true | ||
| 221 | |priceCurrency|string | ||
| 222 | nullable: true | ||
| 223 | |totalPrice|number($double) | ||
| 224 | |agentCommissionPercent|number($double) | ||
| 225 | |agentCommissionAmount|number($double) | ||
| 226 | |hotel|PackageHotel{((( | ||
| 227 | |hotelPriceId|string | ||
| 228 | nullable: true | ||
| 229 | |providerId|integer($int32) | ||
| 230 | |hotelName|string | ||
| 231 | nullable: true | ||
| 232 | |hotelCode|string | ||
| 233 | nullable: true | ||
| 234 | |nigths|integer($int32) | ||
| 235 | |mealPlan|string | ||
| 236 | nullable: true | ||
| 237 | |hotelClass|string | ||
| 238 | nullable: true | ||
| 239 | |availabilityType|RoomAvailabilityTypeEnumstringEnum: | ||
| 240 | [ OnRequest, FreeSale, StopSale ] | ||
| 241 | |availableRoomsCount|integer($int32) | ||
| 242 | |fewRooms|boolean | ||
| 243 | |roomCategoryCode|string | ||
| 244 | nullable: true | ||
| 245 | |roomCategoryName|string | ||
| 246 | nullable: true | ||
| 247 | |placementTypeName|string | ||
| 248 | nullable: true | ||
| 249 | |placementDescription|string | ||
| 250 | nullable: true | ||
| 251 | |checkInDate|string($date-time) | ||
| 252 | |checkOutDate|string($date-time) | ||
| 253 | |adults|integer($int32) | ||
| 254 | |children|integer($int32) | ||
| 255 | |districtUID|string($uuid) | ||
| 256 | nullable: true | ||
| 257 | |districtName|string | ||
| 258 | nullable: true | ||
| 259 | |cityUID|string($uuid) | ||
| 260 | nullable: true | ||
| 261 | |cityName|string | ||
| 262 | nullable: true | ||
| 263 | |countryCode|string | ||
| 264 | nullable: true | ||
| 265 | |countryName|string | ||
| 266 | nullable: true | ||
| 267 | |hasAlcohol|boolean | ||
| 268 | |hasFreeWifi|boolean | ||
| 269 | |hasMetro|boolean | ||
| 270 | |hasPool|boolean | ||
| 271 | |hasMall|boolean | ||
| 272 | |cancellationPolicyDescription|string | ||
| 273 | nullable: true | ||
| 274 | |cancellationPolicy|CancellationPolicyExchange{((( | ||
| 275 | |cancellationPolicyCode|string | ||
| 276 | nullable: true | ||
| 277 | |noShowChargeValue|number($double) | ||
| 278 | nullable: true | ||
| 279 | |noShowChargeValueType|string | ||
| 280 | nullable: true | ||
| 281 | |earlyDepartureChargeValue|number($double) | ||
| 282 | nullable: true | ||
| 283 | |earlyDepartureChargeValueType|string | ||
| 284 | nullable: true | ||
| 285 | |conditions|[ | ||
| 286 | nullable: trueCancellationPolicyConditionExchange{((( | ||
| 287 | |timeunits|integer($int32) | ||
| 288 | |timeunitType|string | ||
| 289 | nullable: true | ||
| 290 | |timeOffsetTypeName|string | ||
| 291 | nullable: true | ||
| 292 | |chargeValue|number($double) | ||
| 293 | nullable: true | ||
| 294 | |chargeValueType|string | ||
| 295 | nullable: true | ||
| 296 | |||
| 297 | }] | ||
| 298 | ))) | ||
| 299 | |||
| 300 | } | ||
| 301 | ))) | ||
| 302 | |||
| 303 | } | ||
| 304 | ))) | ||
| 305 | |extraServices|[ | ||
| 306 | nullable: trueHotelExtraServiceBase{((( | ||
| 307 | |extraServiceCode|string | ||
| 308 | nullable: true | ||
| 309 | |extraServiceTypeCode|string | ||
| 310 | nullable: true | ||
| 311 | |isMandatory|integer($int32) | ||
| 312 | |extraServiceName|string | ||
| 313 | nullable: true | ||
| 314 | |minimalServiceAmount|number($double) | ||
| 315 | |includedPriceCode|string | ||
| 316 | nullable: true | ||
| 317 | |prices|[ | ||
| 318 | nullable: trueHotelExtraServicePriceBase{((( | ||
| 319 | |extraServicePriceCode|string | ||
| 320 | nullable: true | ||
| 321 | |displayName|string | ||
| 322 | nullable: true | ||
| 323 | |restrictionInfo|string | ||
| 324 | nullable: true | ||
| 325 | |additionalInfo|string | ||
| 326 | nullable: true | ||
| 327 | |price|number($double) | ||
| 328 | |extraPrice|number($double) | ||
| 329 | |currency|string | ||
| 330 | nullable: true | ||
| 331 | |||
| 332 | }] | ||
| 333 | ))) | ||
| 334 | |||
| 335 | }] | ||
| 336 | ))) | ||
| 337 | |||
| 338 | }] | ||
| 339 | ))) | ||
| 340 | |pagingId|string | ||
| 341 | nullable: true | ||
| 342 | |pageNumber|integer($int64) | ||
| 343 | |pageCount|integer($int64) | ||
| 344 | |||
| 345 | } | ||
| 346 | {{/success}} | ||
| 347 | |||
| 348 | |||
| 349 | == Definitions == | ||
| 350 | |||
| 351 | |||
| 352 | === Paging and Caching === | ||
| 353 | |||
| 354 | During the first request, Paging id must be empty like this ( "pagingId": "",) pagenumber is the number of the page, pagerowcount means number of the given result in one page. So in the first request we can search like this: | ||
| 355 | |||
| 356 | |||
| 357 | ==== first request ==== | ||
| 358 | |||
| 359 | {{code language="Json"}} | ||
| 360 | { | ||
| 361 | "pagingId": "", | ||
| 362 | "pageNumber": 1, | ||
| 363 | "pageRowCount":10 | ||
| 364 | } | ||
| 365 | {{/code}} | ||
| 366 | |||
| 367 | |||
| 368 | ==== Request with caching ==== | ||
| 369 | |||
| 370 | as we receive response, in the end we can see pagingId- number, chich we can use for caching, and then just switch pagenumbers. for cleaning cache, it's important to make new request without pagingID | ||
| 371 | |||
| 372 | {{code language="Json"}} | ||
| 373 | { | ||
| 374 | "pagingId": "80", | ||
| 375 | "pageNumber": 1, | ||
| 376 | "pageRowCount":10 | ||
| 377 | } | ||
| 378 | {{/code}} | ||
| 379 | |||
| 380 | |||
| 381 | |||
| 382 | == Important == | ||
| 383 | |||
| 384 | {{error}} | ||
| 385 | It's Important to in every other request header, put Auth token | ||
| 386 | |||
| 387 | **Key **- Authorization | ||
| 388 | |||
| 389 | **Value **- Bearer Token what is given in this response. | ||
| 390 | |||
| 391 | |||
| 392 | **also note in headers that:** | ||
| 393 | |||
| 394 | Content-Type - application/json | ||
| 395 | |||
| 396 | **Key - **X-nugios-timezone | ||
| 397 | |||
| 398 | **Value **- 240 | ||
| 399 | {{/error}} |