مستندات وب‌سرویس تورهای Last Second

دسترسی برنامه‌نویسی به اطلاعات تورهای سینک‌شده با کلید لایسنس API. تمام پاسخ‌ها JSON و تاریخ‌ها به تقویم شمسی هستند.

معرفی

این API داده‌های تور شامل هتل‌ها، قیمت‌ها، حمل‌ونقل و جزئیات سفر را در قالب JSON استاندارد برمی‌گرداند. برای استفاده نیاز به کلید لایسنس دارید که از پنل مدیریت وردپرس صادر می‌شود.

  • Namespace: ls-provider/v1
  • فرمت: JSON با UTF-8
  • متدهای مجاز: GET

احراز هویت

کلید API را فقط در هدر ارسال کنید. ارسال کلید در query string ممنوع است (در لاگ سرور ذخیره می‌شود).

X-LS-API-Key: ls_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Authorization: Bearer ls_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
HTTPS اجباری: در محیط production درخواست‌ها باید از طریق HTTPS ارسال شوند.

آدرس پایه (Base URL)

https://tour.imagineit.online/wp-json/ls-provider/v1
GET

/health

بررسی سلامت سرویس. نیاز به کلید ندارد.

نمونه درخواست

curl "https://tour.imagineit.online/wp-json/ls-provider/v1/health"

نمونه پاسخ

{
  "ok": true,
  "version": "1.2.4"
}
GET

/tours

دریافت لیست تورها با فیلتر و صفحه‌بندی. بدون فیلتر، همه تورها (صفحه‌به‌صفحه) برگردانده می‌شوند.

در بدنهٔ پاسخ، min_price و max_price هر تور به‌صورت خودکار از کمترین و بیشترین مبلغ معتبر در tour_treks (trekهای داخلی از Last Second) و فیلدهای amount_* هتل‌های tour_hotels محاسبه می‌شوند. آرایهٔ tour_treks شامل هر بار/پکیج قابل رزرو (از treks/index و tours/show) است. پس از نصب/به‌روزرسانی افزونه، یک بار sync تور از پنل اجرا کنید تا trekها و مبالغ در پایگاه داده پر شوند. پارامترهای query با همین نام برای فیلتر بودجه روی min_price / max_price ذخیره‌شده در جدول تورها اعمال می‌شوند.

پارامترهای Query

پارامترنوعتوضیح
citystringفیلتر شهر
countrystringفیلتر کشور
tour_typestringنوع تور
location_idintegerشناسه مقصد
min_priceintegerحداقل قیمت (ریال)
max_priceintegerحداکثر قیمت (ریال)
min_starsintegerحداقل ستاره هتل
is_charter0 | 1تور چارتر
date_gone_fromdateاز تاریخ رفت (YYYY-MM-DD میلادی)
date_gone_todateتا تاریخ رفت
vehicle_typestringنوع وسیله
shipping_companystringشرکت حمل
pageintegerشماره صفحه (پیش‌فرض: 1)
per_pageintegerتعداد در صفحه (۱–۱۰۰، پیش‌فرض: 20)
fields یا output_fieldsstringفیلدهای خروجی با کاما؛ بدون این پارامتر همه فیلدها برمی‌گردد. برای زیرمجموعه هتل/ترک: tour_hotels.hotel_name
presetstandardخروجی استاندارد (مثل نمونه زیر، بدون trek و min/max_price)
sortenumprice_asc, price_desc, date_gone_asc, date_gone_desc

انتخاب فیلدها (fields)

با fields یا preset=standard خروجی را دقیقاً به شکل نمونه زیر بگیرید (بدون tour_treks و min_price / max_price مگر اینکه خودتان بخواهید).

https://tour.imagineit.online/wp-json/ls-provider/v1/tours?per_page=5&preset=standard
https://tour.imagineit.online/wp-json/ls-provider/v1/tours?per_page=1&fields=tour_id,tour_type,tour_country,tour_city,tour_hotels,vehicle_type,shipping_company,origin_travel,source_travel,date_gone,time_gone,date_return,time_return,Length_stay,is_charter,services,documents,description

نمونه cURL

curl -H "X-LS-API-Key: YOUR_KEY" \
  "https://tour.imagineit.online/wp-json/ls-provider/v1/tours?city=استانبول&min_stars=4&page=1&per_page=20&fields=tour_id,tour_city,min_price"

نمونه JavaScript

fetch('https://tour.imagineit.online/wp-json/ls-provider/v1/tours?city=استانبول', {
  headers: { 'X-LS-API-Key': 'YOUR_KEY' }
})
  .then(r => r.json())
  .then(console.log);

نمونه پاسخ

{
  "success": true,
  "data": {
    "items": [
      {
        "tour_id": 1,
        "tour_type": "تور اروپا",
        "tour_country": "ترکیه",
        "tour_city": "استانبول",
        "tour_hotels": [
          {
            "hotel_id": 1,
            "hotel_name": "هتل شماره 1",
            "service_type": "صبحانه",
            "amount_2_beds": 10000000,
            "amount_child_with_bed": 5000000,
            "amount_1_beds": 7000000,
            "amount_child_without_bed": 3000000,
            "number_stars": 4,
            "hotel_images": ["https://yoursite.com/ht-img/a1b2c3d4e5f67890"]
          }
        ],
        "vehicle_type": "هواپیما",
        "shipping_company": "ماهان",
        "origin_travel": "فرودگاه امام خمینی",
        "source_travel": "فرودگاه استانبول",
        "date_gone": "1403-12-05",
        "time_gone": "12:30",
        "date_return": "1403-12-10",
        "time_return": "09:15",
        "Length_stay": "مدت 4 شب و 5 روز",
        "is_charter": 0,
        "services": "خدمات",
        "documents": "مدارک",
        "description": "توضیحات"
      }
    ],
    "pagination": {
      "page": 1,
      "per_page": 20,
      "total": 150,
      "total_pages": 8
    }
  }
}
GET

/tours/{tour_id}

دریافت جزئیات یک تور با شناسه. ساختار پاسخ مانند لیست تورها است؛ شامل tour_treks و min_price / max_price محاسبه‌شده از trekها و هتل‌ها. پارامتر fields همانند لیست تورها پشتیبانی می‌شود.

نمونه درخواست

curl -H "X-LS-API-Key: YOUR_KEY" \
  "https://tour.imagineit.online/wp-json/ls-provider/v1/tours/1"

نمونه پاسخ

{
  "success": true,
  "data": { "...": "همان ساختار یک تور در لیست" }
}

راهنمای فیلترها

برای استخراج همه داده‌ها، درخواست‌ها را با page و per_page=100 تکرار کنید تا total_pages پوشش داده شود.

  • ترکیب city + min_stars برای تورهای یک شهر با هتل‌های باکیفیت
  • min_price و max_price در query برای فیلتر بازه بودجه (روی دادهٔ sync‌شده)
  • min_price و max_price در پاسخ هر تور: بازهٔ قیمت از tour_treks و tour_hotels
  • tour_treks: trekهای داخلی هر تور (قیمت و تاریخ هر بار)
  • sort=date_gone_asc برای نزدیک‌ترین تاریخ سفر

کدهای خطا

HTTPcodeمعنی
401invalid_licenseکلید نامعتبر، منقضی یا لغو شده
403ip_not_allowedIP غیرمجاز
403https_requiredنیاز به HTTPS
429rate_limit_exceededسقف درخواست
404tour_not_foundتور یافت نشد
400invalid_paramsپارامتر نامعتبر
400invalid_fieldsنام فیلد در fields مجاز نیست
{
  "success": false,
  "error": {
    "code": "invalid_license",
    "message": "کلید API نامعتبر یا منقضی شده است."
  }
}

محدودیت‌ها

  • هر کلید سقف ساعتی و روزانه دارد (در پنل ادمین قابل تنظیم)
  • کلیدها مدت اعتبار دارند: ۱، ۳، ۶، ۱۲ ماه یا مادام‌العمر
  • حداکثر ۱۰۰ رکورد در هر صفحه
  • IP whitelist اختیاری روی هر کلید

آزمایش API (Try it out)

کلید شما فقط در مرورگر ذخیره می‌شود و مستقیماً به API ارسال می‌گردد. فیلترها، تعداد، و فیلدهای خروجی را تنظیم کنید.

فیلترها
صفحه‌بندی

فیلدهای خروجی (fields)

هیچ‌کدام انتخاب نشود = همه فیلدها. برای خروجی نمونهٔ شما دکمه «خروجی استاندارد» را بزنید.

فیلدهای تور

فیلدهای هتل (زیرمجموعه tour_hotels)

فیلدهای ترک (زیرمجموعه tour_treks)

پاسخ