availability
متد SearchByCityAndDate
این متد برای جستجو و دریافت فهرست هتلهای قابل رزرو بههمراه اطلاعات قیمت آنها در یک شهر مشخص و بر اساس تاریخ مورد نظر استفاده میشود.
از آنجا که این متد در Request Model خود اطلاعاتی مانند تعداد اتاق و تعداد میهمان را دریافت نمیکند، استفاده از آن محاسبه قیمت نهایی را با پیچیدگی زیادی همراه میسازد. در این حالت، کلیه محاسبات مربوط به مواردی مانند تخت اضافه، خدمات پولی و سایر هزینهها باید در سمت کلاینت انجام شود که میتواند منجر به افزایش خطا و سربار پیادهسازی گردد.
به همین دلیل، توصیه میشود به جای این متد از متد SearchByCityAndDateAndGuests استفاده شود که اطلاعات کاملتری را دریافت کرده و فرآیند محاسبه قیمت را سادهتر و دقیقتر میکند.
در واقع، دلیل حفظ این متد در نسخه فعلی وبسرویس، پشتیبانی از Backward Compatibility است؛ چرا که این متد در نسخههای قبلی وبسرویس هتل وجود داشته و به منظور جلوگیری از بروز اختلال در سیستمهای قدیمی، در نسخه جدید نیز حذف نشده است.
این متد تنها هتلها یا انواع اتاقهایی را در خروجی بازمیگرداند که قرارداد تأمینکننده آنها با هتل مربوطه در سیستم «سپهر» بررسی و تأیید شده باشد. بنابراین، ممکن است خروجی این متد با فهرست هتلها یا اتاقهایی که در وبسایت تأمینکننده نمایش داده میشود، کاملاً یکسان نباشد.
تأمینکنندگان در سیستم رزرواسیون سپهر میتوانند قوانینی تعریف کنند که بر اساس آنها، تاریخ ورود (Check-in) و تاریخ خروج (Check-out) در فرآیند بررسی Availability دارای اهمیت ویژهای میشود. به این معنا که صرفاً موجود بودن یا نبودن اتاق ملاک نیست و ترکیب تاریخهای ورود و خروج نیز میتواند مستقیماً بر امکانپذیری رزرو تأثیر بگذارد.
برای مثال، ممکن است سیستم سپهر برای تاریخ ورود ۵ شهریور و تاریخ خروج ۸ شهریور پاسخ «عدم موجودی» برگرداند، اما برای همان تاریخ ورود و با تاریخ خروج ۹ شهریور، رزرو را تأیید کند.
در نتیجه، پاسخ دریافتی از این متد صرفاً برای تاریخهای Check-in و Check-out ارسالشده در درخواست معتبر است و امکان تعمیم آن به سایر تاریخهای ورود یا خروج وجود ندارد.
سؤال: آیا امکان دارد برای یک رزرو، بخشی از شبها از یک تأمینکننده و بخش دیگر از تأمینکنندهای متفاوت رزرو شود؟
پاسخ: این موضوع به قوانین و محدودیتهای تعریفشده توسط هر تأمینکننده بستگی دارد.
توضیح با مثال: فرض کنید یک هتل (مثلاً هتل آرامیس پلاس کیش) توسط چند تأمینکننده مختلف ارائه میشود و هر تأمینکننده ممکن است برای شبهای خاصی نرخ متفاوتی داشته باشد. برای نمونه، شما قصد دارید یک رزرو ۴ شبه انجام دهید:
- تأمینکننده اول برای دو شب اول نرخ ارزانتری ارائه میدهد.
- تأمینکننده دوم برای شب سوم و چهارم نرخ مناسبتری دارد.
- نتیجهی درخواست availability اولیه نشان میدهد که هر دو تأمینکننده برای هر چهار شب موجودی دارند.
در این شرایط ممکن است تصمیم بگیرید:
- دو شب اول را از تأمینکننده اول
- و دو شب بعدی را از تأمینکننده دوم رزرو کنید.
API Endpoint
POST https://{SupplierWebsiteUrl}/api/Partners/Hotel/Availability/V4/SearchByCityAndDate
Request Parameters
Usernamestring
required
نام کاربری
در صورتی که درخواست از طرف یک موتور جستجو بوده و هدف صرفاً دریافت اطلاعات عمومی (بدون انجام عملیات فروش یا رزرو) باشد، مقدار این فیلد باید برابر با public ارسال شود.
Passwordstring
required
رمز عبور به صورت MD5 شده
CityIataCodestring
required
کد یاتا شهر مورد نظر
در حال حاضر وب سرویس هتل سپهر بر اساس کد یاتا فرودگاه آن شهر کار می کند. در نسخه های بعدی وب سرویس، امکان جستجو روی شهرهایی که فاقد کد یاتا هستند نیز اضافه خواهد گردید.
CheckinDatestring
required
تاریخ ورود
با فرمت yyyy-MM-dd و به صورت میلادی
CheckoutDatestring
required
تاریخ خروج
با فرمت yyyy-MM-dd و به صورت میلادی
HotelSepehrGlobalIdnumber
optional
در صورتی که نیاز به دریافت اطلاعات اتاق های موجود و نرخ یک هتل خاص را دارید، کد SepehrGlobalId آن هتل خاص را در این فیلد قرار دهید.
Sample Request
{
"Username": "testdev1",
"Password": "25f9e794323b453885f5181f1b624d0b",
"CityIataCode": "KIH",
"CheckinDate": "2026-05-22",
"CheckoutDate": "2026-05-25",
"HotelSepehrGlobalId": null
}
Response Parameters
CurrencyCodestring
این فیلد مشخص می کند که نرخ های برگشتی بر اساس چه ارزی می باشد.
مقدار آن بستگی به این دارد که ارز کاربر شما در سایت تامین کننده چه چیزی تعیین شده باشد. مثلا اگر کاربر شما به صورت ریالی باشد مقدار آن IRR و اگر دلاری باشد مقدار آن USD خواهد بود.
HotelListComplex type
لیست هتل های قابل رزرو
HotelList.SepehrGlobalIdnumber
شناسه منحصر به فرد مربوط به این هتل در تمام سایت های سپهری
HotelList.Namestring
نام هتل
HotelList.RoomTypeListComplex type
لیست انواع اتاق موجود روی این هتل
HotelList.RoomTypeList.SepehrGlobalIdnumber
شناسه منحصر به فرد مربوط به این نوع اتاق در تمام سایت های سپهری
HotelList.RoomTypeList.Namestring
عنوان نوع اتاق
HotelList.RoomTypeList.AvailableRoomCountnumber
تعداد اتاق موجود
در صورتی 4 باب اتاق یا بیشتر موجود باشد، ماکزیمم عدد 4 خروجی داده می شود.
HotelList.RoomTypeList.AdultCapacitynumber
تعداد گنجایش بزرگسال
HotelList.RoomTypeList.ChildCapacitynumber
تعداد گنجایش کودک که بدون تخت و به صورت رایگان در این نوع اتاق پذیرش می گردد.
در صورتی که تعداد کودک رایگان درخواستی شما بیشتر از گنجایش کودک رایگان اتاق باشد، سیستم تفاوت تعداد کودک درخواستی شما با تعداد گنجایش کودک اتاق را به عنوان بزرگسال در نظر خواهد گرفت. در این حالت اگر اتاق گنجایش اضافه بابت بزرگسال داشته باشد، بدون مشکلی می توان رزرو را صادر کرد. اما اگر تعداد گنجایش بزرگسال اتاق هم جوابگوی تعداد میهمان درخواستی نباشد، رزرو با استفاده از تخت اضافه قابل انجام است. البته با این شرط که اتاق ظرفیت تخت اضافه داشته باشد (رجوع به فیلد ExtrabedCapacity) جهت استفاده از تخت اضافه کافی است که مبلغ آن را در زمان فراخوانی متدهای Lock و Book به فیلد TotalPayable اضافه کرد.
مثال: یک نوع اتاق دارای AdultCapacity با مقدار 2 و ChildCapacity با مقدار 1 و ChildAge با مقدار 5 می باشد
- در صورتی که رزرو شما دارای دو بزرگسال و یک کودک زیر 5 سال باشد، آنگاه بدون نیاز به تخت اضافه می توان اقدام به رزرو نمود.
- در صورتی که رزرو شما دارای یک بزرگسال و دو کودک زیر 5 سال باشد، آنگاه بدون نیاز به تخت اضافه می توان اقدام به رزرو نمود.
- در صورتی که رزرو شما دارای دو بزرگسال و دو کودک زیر 5 سال باشد، انگاه باید مبلغ یک تخته اضافه را به مبلغ رزرو اضافه نمود.
HotelList.RoomTypeList.ChildAgenumber
سن قابل قبول برای پذیرش یک میهمان به عنوان کودک.
بنابراین
- در صورتی که سن کودک بیش از مقدار این فیلد باشد
- و همچنین رزرو اتاق نیاز به تخت اضافه داشته باشد. (زمانی رزرو اتاق نیاز به استفاده از تخت اضافه دارد که از تمام ظرفیت AdultCapacity استفاده شده باشد و جایی برای مسافران باقی مانده روی AdultCapacity نباشد.)
- آنگاه باید در زمان فراخوانی متدهای Lock و Book، با اضافه کردن نرخ تخت اضافه به مجموع فیلد TotalPayable، درخواست تخت اضافه نمود.
مثال: یک نوع اتاق دارای AdultCapacity با مقدار 2 و ChildCapacity با مقدار 1 و ChildAge با مقدار 5 می باشد.
- در صورتی که رزرو شما دارای دو بزرگسال و یک کودک چهار ساله باشد، انگاه بدون نیاز به تخت اضافه می توان اقدام به رزرو نمود.
- در صورتی که رزرو شما دارای دو بزرگسال و یک کودک شش ساله باشد، انگاه باید یک تخت اضافه به رزرو اضافه نمود.
- در صورتی که رزرو شما دارای دو بزرگسال و یک کودک شش ساله و یک کودک چهار ساله باشد، باید تنها یک عدد تخت اضافه به رزرو اضافه نمود.
- در صورتی که رزرو شما دارای یک بزرگسال و یک کودک شش ساله باشد، آنگاه بدون نیاز به تخت اضافه می توان اقدام به رزرو نمود.
HotelList.RoomTypeList.BoardTypeListcomplex type
لیست انواع بورد که روی یک نوع اتاق قابل رزرو گرفتن می باشد
HotelList.RoomTypeList.BoardTypeList.Codestring
کد نوع بورد که یکی از موارد زیر می باشد:
RO مخفف Room Only و به معنی اسکان تک و بدون هیچ وعده غذایی می باشد.
SC مخفف Self Catering می باشد و بیشتر در هتل آپارتمان ها تعریف می شود.
BB مخفف Bed & Breakfast و به معنی اقامت با صبحانه می باشد
HB مخفف Half Board و به معنی اقامت به همراه صبحانه و ناهار می باشد.
BD به معنی اقامت به همراه صبحانه و شام می باشد.
BS به معنی اقامت به همراه صبحانه و یک وعده غذایی دیگر به انتخاب مسافر (یا ناهار یا شام) می باشد.
FC به معنی Full Board و اقامت به همراه صبحانه و ناهار و شام به صورت منوی بسته می باشد.
FB به معنی Full Board و اقامت به همراه صبحانه و ناهار و شام به صورت منوی انتخابی می باشد.
FF به معنی Full Board و اقامت به همراه صبحانه و ناهار و شام به صورت منوی بوفه می باشد.
AI مخفف All Inclusive و از نظر ارائه میان وعده های غذایی بالاتر از FB می باشد.
UA مخفف Ultra All Inclusive می باشد
HotelList.RoomTypeList.BoardTypeList.ExtrabedCapacitynumber
تعداد گنجایش تخت اضافه این نوع اتاق
در صورتی که تعداد مسافر بزرگسال بیش از ظرفیت AdultCapacity باشد، می توان با انتخاب تخت اضافه مسافران بیشتری را در اتاق اسکان داد.
HotelList.RoomTypeList.BoardTypeList.RateDetailListComplex type
جزییات نرخ بر اساس هر شب
HotelList.RoomTypeList.BoardTypeList.RateDetailList.Datestring
تاریخ نرخ به صورت میلادی و با فرمت yyyy-MM-dd
HotelList.RoomTypeList.BoardTypeList.RateDetailList.Room_BoardPrice_TaxIncludednumber
نرخ بورد این نوع اتاق برای یک شب (بدون کسر کمیسیون و با احتساب مالیات)
مقدار این فیلد جهت نمایش در سایت شما به مسافر کاربرد دارد. به این صورت که می توانید مقدار این فیلد را به عنوان مبلغ اولیه (قبل از اعمال شدن تخفیف) به مسافر نمایش دهید
HotelList.RoomTypeList.BoardTypeList.RateDetailList.Room_NetPrice_TaxExcludednumber
نرخ نهایی این نوع اتاق برای یک شب (بعد از کسر کمیسیون و بدون احتساب مالیات)
مقدار این فیلد جهت بخش مالی مجموعه شما کاربرد دارد. به این صورت که می توانید مقدار این فیلد را به عنوان خالص خرید در سیستم معاملات فصلی ثبت نمایید
HotelList.RoomTypeList.BoardTypeList.RateDetailList.Room_NetPrice_TaxIncludednumber
نرخ نهایی این نوع اتاق برای یک شب (بعد از کسر کمیسیون و با احتساب مالیات)
مقدار این فیلد جهت نمایش در سایت شما به مسافر کاربرد دارد. به این صورت که می توانید مقدار این فیلد را به عنوان مبلغ نهایی (بعد از اعمال شدن تخفیف) به مسافر نمایش دهید
همچنین از مقدار این فیلد در زمان فراخوانی متدهای Lock و Book استفاده می شود. متدهای ذکر شده پارامتری به عنوان TotalPayable دریافت می کنند که مقدار آن از این فیلد بدست می آید.
HotelList.RoomTypeList.BoardTypeList.RateDetailList.Extrabed_BoardPrice_TaxIncludednumber
نرخ بورد یک عدد تخت اضافه برای یک شب (بدون کسر کمیسیون و با احتساب مالیات)
مقدار این فیلد جهت نمایش در سایت شما به مسافر کاربرد دارد. به این صورت که می توانید مقدار این فیلد را به عنوان مبلغ اولیه (قبل از اعمال شدن تخفیف) به مسافر نمایش دهید
برای بدست آوردن مجموع، باید مقدار این فیلد را ضربدر تعداد تخت اضافه مورد نیاز نمایید
HotelList.RoomTypeList.BoardTypeList.RateDetailList.Extrabed_NetPrice_TaxExcludednumber
نرخ یک عدد تخت اضافه برای یک شب (بعد از کسر کمیسیون و بدون احتساب مالیات)
مقدار این فیلد جهت بخش مالی مجموعه شما کاربرد دارد. به این صورت که می توانید مقدار این فیلد را به عنوان خالص خرید در سیستم معاملات فصلی ثبت نمایید
برای بدست آوردن مجموع، باید مقدار این فیلد را ضربدر تعداد تخت اضافه مورد نیاز نمایید
HotelList.RoomTypeList.BoardTypeList.RateDetailList.Extrabed_NetPrice_TaxIncludednumber
نرخ نهایی یک عدد تخت اضافه برای یک شب (بعد از کسر کمیسیون و با احتساب مالیات)
مقدار این فیلد جهت نمایش در سایت شما به مسافر کاربرد دارد. به این صورت که می توانید مقدار این فیلد را به عنوان مبلغ نهایی (بعد از اعمال شدن تخفیف) به مسافر نمایش دهید
برای بدست آوردن مجموع، باید مقدار این فیلد را ضربدر تعداد تخت اضافه مورد نیاز نمایید
در صورت تمایل به رزرو تخت اضافه، می بایست در زمان فراخوانی متدهای Lock و Book، مقدار این فیلد را به مقدار پارامتر TotalPayable اضافه نموده و درخواست خود را ارسال نمایید.
HotelList.AmenityListComplex type
لیست خدمات ارائه شده روی این هتل
HotelList.AmenityList.SepehrGlobalIdnumber
شناسه منحصر به فرد مربوط به این خدمت در تمام سایت های سپهری
HotelList.AmenityList.Namestring
عنوان خدمت
HotelList.AmenityList.RateDetailListcomplex type
جزییات نرخ بر اساس هر شب
HotelList.AmenityList.RateDetailList.Datestring
تاریخ نرخ به صورت میلادی و با فرمت yyyy-MM-dd
HotelList.AmenityList.RateDetailList.GuestAgeRangeStartnumber
حداقل سن میهمان (بر حسب سال) که این خدمت برای آن قابل ارائه است.
HotelList.AmenityList.RateDetailList.GuestAgeRangeEndnumber
حداکثر سن میهمان (بر حسب سال) که این خدمت برای آن قابل ارائه است.
HotelList.AmenityList.RateDetailList.BoardPrice_TaxIncludeddecimal
نرخ بورد یک عدد از این خدمت برای یک شب (بدون کسر کمیسیون و با احتساب مالیات)
مقدار این فیلد جهت نمایش در سایت شما به مسافر کاربرد دارد. به این صورت که می توانید مقدار این فیلد را به عنوان مبلغ اولیه (قبل از اعمال شدن تخفیف) به مسافر نمایش دهید
HotelList.AmenityList.RateDetailList.NetPrice_TaxExcludeddecimal
نرخ نهایی یک عدد خدمت برای یک شب (بعد از کسر کمیسیون و بدون احتساب مالیات)
مقدار این فیلد جهت بخش مالی مجموعه شما کاربرد دارد. به این صورت که می توانید مقدار این فیلد را به عنوان خالص خرید در سیستم معاملات فصلی ثبت نمایید
HotelList.AmenityList.RateDetailList.NetPrice_TaxIncludeddecimal
نرخ نهایی یک عدد خدمت برای یک شب (بعد از کسر کمیسیون و با احتساب مالیات)
مقدار این فیلد جهت نمایش در سایت شما به مسافر کاربرد دارد. به این صورت که می توانید مقدار این فیلد را به عنوان مبلغ نهایی (بعد از اعمال شدن تخفیف) به مسافر نمایش دهید
برای بدست آوردن مجموع، باید مقدار این فیلد را ضربدر تعداد میهمان هایی که سن آنها در بازه GuestAgeRangeStart و GuestAgeRangeEnd قرار میگیرد نمایید. همچنین این مجموع را باید به ازای هر آیتم که در لیست RateDetailList دارید (یعنی برای هر شب یا همان Date) اینکار را انجام دهید و مجموعه همه آیتم ها را با هم مجددا جمع نمایید.
همچنین از مقدار این فیلد در زمان فراخوانی متدهای Lock و Book استفاده می شود. متدهای ذکر شده پارامتری به عنوان TotalPayable دریافت می کنند که مقدار آن از این فیلد بدست می آید.
Sample Response
{
"HotelList": [{
"SepehrGlobalId": 101,
"Name": "هتل کوهستان تستي",
"RoomTypeList": [{
"SepehrGlobalId": 5001,
"Name": "يک تخته استاندارد",
"AvailableRoomCount": 4,
"AdultCapacity": 1,
"ChildCapacity": 0,
"ChildAge": 5,
"BoardTypeList": [{
"Code": "BB",
"ExtrabedCapacity": 1,
"RateDetailList": [{
"Date": "2026-05-22",
"Room_BoardPrice_TaxIncluded": 4360000.00,
"Room_NetPrice_TaxExcluded": 3600000.00,
"Room_NetPrice_TaxIncluded": 3924000.00,
"Extrabed_BoardPrice_TaxIncluded": 1090000.00,
"Extrabed_NetPrice_TaxExcluded": 900000.00,
"Extrabed_NetPrice_TaxIncluded": 981000.00
}, {
"Date": "2026-05-23",
"Room_BoardPrice_TaxIncluded": 4360000.00,
"Room_NetPrice_TaxExcluded": 3600000.00,
"Room_NetPrice_TaxIncluded": 3924000.00,
"Extrabed_BoardPrice_TaxIncluded": 1090000.00,
"Extrabed_NetPrice_TaxExcluded": 900000.00,
"Extrabed_NetPrice_TaxIncluded": 981000.00
}, {
"Date": "2026-05-24",
"Room_BoardPrice_TaxIncluded": 4360000.00,
"Room_NetPrice_TaxExcluded": 3600000.00,
"Room_NetPrice_TaxIncluded": 3924000.00,
"Extrabed_BoardPrice_TaxIncluded": 1090000.00,
"Extrabed_NetPrice_TaxExcluded": 900000.00,
"Extrabed_NetPrice_TaxIncluded": 981000.00
}
]
}
]
},
// ... بیشتر انواع اتاق
],
"AmenityList": [{
"SepehrGlobalId": 102,
"Name": "استخر روباز",
"RateDetailList": [{
"Date": "2026-05-22",
"GuestAgeRangeStart": 3,
"GuestAgeRangeEnd": 120,
"BoardPrice_TaxIncluded": 5450000.0,
"NetPrice_TaxExcluded": 5000000.0,
"NetPrice_TaxIncluded": 5450000.0
}, {
"Date": "2026-05-23",
"GuestAgeRangeStart": 3,
"GuestAgeRangeEnd": 120,
"BoardPrice_TaxIncluded": 5450000.0,
"NetPrice_TaxExcluded": 5000000.0,
"NetPrice_TaxIncluded": 5450000.0
}, {
"Date": "2026-05-24",
"GuestAgeRangeStart": 3,
"GuestAgeRangeEnd": 120,
"BoardPrice_TaxIncluded": 5450000.0,
"NetPrice_TaxExcluded": 5000000.0,
"NetPrice_TaxIncluded": 5450000.0
}
]
},
// ... بیشتر خدمات
]
}, {
"SepehrGlobalId": 1030,
"Name": "هتل لوتوس",
"RoomTypeList": [
// ... انواع اتاق هتل لوتوس
],
"AmenityList": [
// ... خدمات هتل لوتوس
]
}
],
"CurrencyCode": "IRR"
}