> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://wt.hhr.systems/routes-and-calendar/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. > List the city pairs on sale and the dates that have trains