> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://wt.hhr.systems/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://wt.hhr.systems/_mcp/server.

# Routes and calendar

Before you search, you can ask the schedule service which routes are on sale and which dates have a train. Both are plain `GET` calls on the schedule service, not the OTA endpoint, so they take no `local-name` header. Authenticate with your `x-api-key` as usual.

## List the routes

`GET /sms-gateway-service/schedule/routes?sales_channel=OTA` returns every origin station and the destinations you can sell from it.

```bash
curl "https://api.sar.worldticket.cloud/sms-gateway-service/schedule/routes?sales_channel=OTA" \
  -H "x-api-key: YOUR_API_KEY"
```

```json
[
  {
    "origin": {
      "code": "DMX",
      "name": "Madinah",
      "cityName": "Madinah",
      "cityCode": "DMX",
      "country": "SA"
    },
    "destinations": [
      { "code": "JXD", "name": "Al-Sulimaniyah", "cityName": "Jeddah", "cityCode": "JXD", "country": "SA" },
      { "code": "KCX", "name": "KCX", "cityName": "King Abdullah Economic City", "cityCode": "KCX", "country": "SA" },
      { "code": "MKX", "name": "Makkah", "cityName": "Makkah", "cityCode": "MKX", "country": "SA" }
    ]
  },
  {
    "origin": {
      "code": "MKX",
      "name": "Makkah",
      "cityName": "Makkah",
      "cityCode": "MKX",
      "country": "SA"
    },
    "destinations": [
      { "code": "DMX", "name": "Madinah", "cityName": "Madinah", "cityCode": "DMX", "country": "SA" },
      { "code": "JXD", "name": "Al-Sulimaniyah", "cityName": "Jeddah", "cityCode": "JXD", "country": "SA" },
      { "code": "KCX", "name": "KCX", "cityName": "King Abdullah Economic City", "cityCode": "KCX", "country": "SA" }
    ]
  }
]
```

Use `code` as the `locationCode` in your [search](/booking-flows). The list is short and changes rarely, so cache it and refresh it daily.

## Dates with trains

`GET /sms-gateway-service/schedule/calendar/availability` lists the dates inside a window that have at least one train on a route. It is built for a date picker: grey out the days that are missing from the list.

| Query parameter     | What to send                                   |
| ------------------- | ---------------------------------------------- |
| `start_date`        | Start of the window, as `YYYY-MM-DDTHH:MM:SS`. |
| `end_date`          | End of the window, same format.                |
| `departure_airport` | Origin station code.                           |
| `arrival_airport`   | Destination station code.                      |
| `direct`            | `true` to count direct trains only.            |

```bash
curl "https://api.sar.worldticket.cloud/sms-gateway-service/schedule/calendar/availability?start_date=2026-05-01T00:00:00&end_date=2026-05-05T00:00:00&departure_airport=JXD&arrival_airport=MKX&direct=true" \
  -H "x-api-key: YOUR_API_KEY"
```

```json
{
  "departureAirport": "JXD",
  "arrivalAirport": "MKX",
  "startDate": "2026-05-01",
  "endDate": "2026-05-05",
  "dates": [
    "2026-05-01",
    "2026-05-02",
    "2026-05-03",
    "2026-05-04",
    "2026-05-05"
  ]
}
```

> **Note**
>
> A date in the list means a train runs that day. It does not promise seats or a price. Search with `OTA_AirLowFareSearchRQ` for fares and availability on the day the traveler picks.