{
  "info": {
    "_postman_id": "sailingskies-api-v1",
    "name": "SailingSkies API v1",
    "description": "Complete API collection for SailingSkies Travel Deal Website.\n\nBase URL: {{base_url}}/api/v1\n\nAll endpoints are public (no auth required) except POST /support.\nAll responses return JSON with `success`, `data` fields.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "base_url",
      "value": "http://127.0.0.1:8000",
      "type": "string",
      "description": "Change to your server URL e.g. https://sailingskies.com"
    }
  ],
  "item": [
    {
      "name": "Homepage",
      "description": "Homepage data endpoints",
      "item": [
        {
          "name": "Get Homepage Data",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/homepage",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "homepage"]
            },
            "description": "Returns all homepage data in a single call:\n- top_hotels (8)\n- top_flights (8)\n- popular_destinations (8)\n- categories (all active)\n- hero_banners\n- faqs (top 6)\n\nPerfect for mobile app initial load."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Hotels",
      "description": "Hotel deal endpoints",
      "item": [
        {
          "name": "Get All Hotels",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/hotels",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "hotels"],
              "query": [
                { "key": "page", "value": "1", "description": "Page number", "disabled": true },
                { "key": "per_page", "value": "12", "description": "Results per page (default 12)", "disabled": true },
                { "key": "country_id", "value": "1", "description": "Filter by country ID", "disabled": true },
                { "key": "destination_id", "value": "1", "description": "Filter by destination ID", "disabled": true },
                { "key": "category_id", "value": "1", "description": "Filter by category ID", "disabled": true },
                { "key": "top_only", "value": "1", "description": "Return only top deals (1=yes)", "disabled": true },
                { "key": "popular_only", "value": "1", "description": "Return only popular hotels (1=yes)", "disabled": true },
                { "key": "search", "value": "Dubai", "description": "Search by hotel name", "disabled": true }
              ]
            },
            "description": "Returns paginated list of active hotel deals.\n\n**Filters (all optional):**\n- `country_id` — filter by country\n- `destination_id` — filter by destination\n- `category_id` — filter by category\n- `top_only=1` — only top deals\n- `popular_only=1` — only popular hotels\n- `search` — search by name\n- `per_page` — results per page (default 12)\n- `page` — page number"
          },
          "response": []
        },
        {
          "name": "Get Top Hotels",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/hotels?top_only=1&per_page=8",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "hotels"],
              "query": [
                { "key": "top_only", "value": "1" },
                { "key": "per_page", "value": "8" }
              ]
            },
            "description": "Returns top hotel deals only."
          },
          "response": []
        },
        {
          "name": "Get Hotel by ID",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/hotels/1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "hotels", "1"]
            },
            "description": "Returns a single hotel by ID with:\n- Full hotel details\n- Related hotels (same destination)\n- Full image_url"
          },
          "response": []
        },
        {
          "name": "Get Hotels by Country",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/hotels?country_id=1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "hotels"],
              "query": [
                { "key": "country_id", "value": "1" }
              ]
            },
            "description": "Filter hotels by country_id."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Flights",
      "description": "Flight deal endpoints",
      "item": [
        {
          "name": "Get All Flights",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/flights",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "flights"],
              "query": [
                { "key": "page", "value": "1", "description": "Page number", "disabled": true },
                { "key": "per_page", "value": "12", "description": "Results per page", "disabled": true },
                { "key": "country_id", "value": "1", "description": "Filter by country ID", "disabled": true },
                { "key": "destination_id", "value": "1", "description": "Filter by destination ID", "disabled": true },
                { "key": "category_id", "value": "1", "description": "Filter by category ID", "disabled": true },
                { "key": "top_only", "value": "1", "description": "Return only top deals", "disabled": true },
                { "key": "search", "value": "Emirates", "description": "Search by airline name", "disabled": true }
              ]
            },
            "description": "Returns paginated list of active flight deals.\n\n**Filters (all optional):**\n- `country_id`, `destination_id`, `category_id`\n- `top_only=1`\n- `search` — search by name\n- `per_page`, `page`"
          },
          "response": []
        },
        {
          "name": "Get Top Flights",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/flights?top_only=1&per_page=8",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "flights"],
              "query": [
                { "key": "top_only", "value": "1" },
                { "key": "per_page", "value": "8" }
              ]
            },
            "description": "Returns top flight deals only."
          },
          "response": []
        },
        {
          "name": "Get Flight by ID",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/flights/1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "flights", "1"]
            },
            "description": "Returns a single flight by ID with related flights."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Destinations",
      "description": "Destination endpoints",
      "item": [
        {
          "name": "Get All Destinations",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/destinations",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "destinations"],
              "query": [
                { "key": "country_id", "value": "1", "description": "Filter by country ID", "disabled": true },
                { "key": "popular", "value": "1", "description": "Return only popular destinations", "disabled": true }
              ]
            },
            "description": "Returns all active destinations.\n\n**Filters:**\n- `country_id` — filter by country\n- `popular=1` — only popular destinations"
          },
          "response": []
        },
        {
          "name": "Get Popular Destinations",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/destinations?popular=1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "destinations"],
              "query": [
                { "key": "popular", "value": "1" }
              ]
            },
            "description": "Returns popular destinations only."
          },
          "response": []
        },
        {
          "name": "Get Destination by ID",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/destinations/1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "destinations", "1"]
            },
            "description": "Returns a single destination with:\n- Full destination details\n- Top hotels (8) in this destination\n- Top flights (8) to this destination"
          },
          "response": []
        },
        {
          "name": "Get Destinations by Country",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/destinations?country_id=1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "destinations"],
              "query": [
                { "key": "country_id", "value": "1" }
              ]
            },
            "description": "Filter destinations by country_id."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Categories",
      "description": "Category endpoints",
      "item": [
        {
          "name": "Get All Categories",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/categories",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "categories"]
            },
            "description": "Returns all active categories with icon, name, slug, image."
          },
          "response": []
        },
        {
          "name": "Get Category by ID",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/categories/1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "categories", "1"]
            },
            "description": "Returns a single category with:\n- Category details\n- Hotels in this category (8)\n- Flights in this category (8)"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Countries",
      "description": "Country endpoints",
      "item": [
        {
          "name": "Get All Countries",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/countries",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "countries"]
            },
            "description": "Returns all active countries with destination count."
          },
          "response": []
        },
        {
          "name": "Get Country by ID",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/countries/1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "countries", "1"]
            },
            "description": "Returns a single country with all its destinations list."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Brands",
      "description": "Shopping brand endpoints",
      "item": [
        {
          "name": "Get All Brands",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/brands",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "brands"],
              "query": [
                { "key": "destination_id", "value": "1", "description": "Filter by destination ID", "disabled": true },
                { "key": "country_id", "value": "1", "description": "Filter by country ID", "disabled": true }
              ]
            },
            "description": "Returns all active brands.\n\n**Filters:**\n- `destination_id`\n- `country_id`"
          },
          "response": []
        },
        {
          "name": "Get Brand by ID",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/brands/1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "brands", "1"]
            },
            "description": "Returns a single brand with destination and country details."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Products",
      "description": "Shopping product endpoints",
      "item": [
        {
          "name": "Get All Products",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/products",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "products"],
              "query": [
                { "key": "page", "value": "1", "description": "Page number", "disabled": true },
                { "key": "per_page", "value": "12", "description": "Results per page", "disabled": true },
                { "key": "category_id", "value": "1", "description": "Filter by category", "disabled": true },
                { "key": "destination_id", "value": "1", "description": "Filter by destination", "disabled": true },
                { "key": "brand_id", "value": "1", "description": "Filter by brand", "disabled": true },
                { "key": "country_id", "value": "1", "description": "Filter by country", "disabled": true },
                { "key": "top_only", "value": "1", "description": "Top products only", "disabled": true }
              ]
            },
            "description": "Returns paginated list of active shopping products.\n\n**Filters (all optional):**\n- `category_id`, `destination_id`, `brand_id`, `country_id`\n- `top_only=1`\n- `per_page`, `page`"
          },
          "response": []
        },
        {
          "name": "Get Product by ID",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/products/1",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "products", "1"]
            },
            "description": "Returns a single product with brand, destination, category details."
          },
          "response": []
        }
      ]
    },
    {
      "name": "FAQs",
      "description": "FAQ endpoints",
      "item": [
        {
          "name": "Get All FAQs",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/faqs",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "faqs"],
              "query": [
                { "key": "category_id", "value": "1", "description": "Filter by category ID", "disabled": true }
              ]
            },
            "description": "Returns all active FAQs ordered by sort_order.\n\n**Filters:**\n- `category_id` — filter by category"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Banners",
      "description": "Banner/Slider endpoints",
      "item": [
        {
          "name": "Get All Banners",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/banners",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "banners"],
              "query": [
                { "key": "position", "value": "homepage_hero", "description": "Filter by position", "disabled": true }
              ]
            },
            "description": "Returns active banners.\n\n**Filter by position (optional):**\n- `homepage_hero`\n- `top`\n- `sidebar`\n- `footer`\n- `popup`\n\nEach banner includes `image_url` with full storage URL."
          },
          "response": []
        },
        {
          "name": "Get Hero Banners",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/banners?position=homepage_hero",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "banners"],
              "query": [
                { "key": "position", "value": "homepage_hero" }
              ]
            },
            "description": "Returns homepage hero banners only."
          },
          "response": []
        },
        {
          "name": "Get Sidebar Banners",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/banners?position=sidebar",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "banners"],
              "query": [
                { "key": "position", "value": "sidebar" }
              ]
            },
            "description": "Returns sidebar banners only."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Search",
      "description": "Global search endpoint",
      "item": [
        {
          "name": "Search All",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/search?q=dubai",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "search"],
              "query": [
                { "key": "q", "value": "dubai", "description": "Search query (min 2 chars)" },
                { "key": "type", "value": "all", "description": "all | hotels | flights | destinations | products", "disabled": true }
              ]
            },
            "description": "Global search across hotels, flights, destinations, and products.\n\n**Parameters:**\n- `q` — search query (required, min 2 chars)\n- `type` — filter type: `all` (default), `hotels`, `flights`, `destinations`, `products`\n\nReturns up to 6 results per type."
          },
          "response": []
        },
        {
          "name": "Search Hotels Only",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/search?q=dubai&type=hotels",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "search"],
              "query": [
                { "key": "q", "value": "dubai" },
                { "key": "type", "value": "hotels" }
              ]
            },
            "description": "Search only hotels."
          },
          "response": []
        },
        {
          "name": "Search Flights Only",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/search?q=emirates&type=flights",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "search"],
              "query": [
                { "key": "q", "value": "emirates" },
                { "key": "type", "value": "flights" }
              ]
            },
            "description": "Search only flights."
          },
          "response": []
        },
        {
          "name": "Search Destinations",
          "request": {
            "method": "GET",
            "header": [
              { "key": "Accept", "value": "application/json" }
            ],
            "url": {
              "raw": "{{base_url}}/api/v1/search?q=paris&type=destinations",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "search"],
              "query": [
                { "key": "q", "value": "paris" },
                { "key": "type", "value": "destinations" }
              ]
            },
            "description": "Search only destinations."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Support",
      "description": "Support ticket submission",
      "item": [
        {
          "name": "Submit Support Ticket",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"name\": \"John Smith\",\n    \"email\": \"john@example.com\",\n    \"subject\": \"Hotel booking issue\",\n    \"message\": \"I have a question about my recent hotel booking. Please help me with the details.\",\n    \"type\": \"booking\"\n}",
              "options": {
                "raw": { "language": "json" }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/v1/support",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "support"]
            },
            "description": "Submit a support/contact ticket.\n\n**Request Body (JSON):**\n```json\n{\n  \"name\": \"string (required)\",\n  \"email\": \"email (required)\",\n  \"subject\": \"string (optional)\",\n  \"message\": \"string (required, min 10 chars)\",\n  \"type\": \"general|booking|refund|complaint (optional, default: general)\"\n}\n```\n\n**Response:** 201 Created with ticket_id"
          },
          "response": []
        },
        {
          "name": "Submit General Enquiry",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"name\": \"Sarah Johnson\",\n    \"email\": \"sarah@example.com\",\n    \"subject\": \"General question\",\n    \"message\": \"I would like to know more about your travel deals and how to get the best discounts.\",\n    \"type\": \"general\"\n}",
              "options": {
                "raw": { "language": "json" }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/v1/support",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "support"]
            },
            "description": "Submit a general enquiry support ticket."
          },
          "response": []
        },
        {
          "name": "Submit Refund Request",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Accept", "value": "application/json" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n    \"name\": \"Ahmed Hassan\",\n    \"email\": \"ahmed@example.com\",\n    \"subject\": \"Refund request for hotel booking\",\n    \"message\": \"I need to request a refund for my hotel booking made through your website. The booking reference is XYZ123.\",\n    \"type\": \"refund\"\n}",
              "options": {
                "raw": { "language": "json" }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/v1/support",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "support"]
            },
            "description": "Submit a refund request."
          },
          "response": []
        }
      ]
    }
  ]
}
