From ad8367c20380afd7ba99233c0dd4c7f3e641951b Mon Sep 17 00:00:00 2001 From: gnezim Date: Fri, 17 Apr 2026 23:48:06 +0300 Subject: [PATCH] Refine Angular parity: titles, airline header, labels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Search page: - Title and breadcrumb now read the station dictionaries and render the human-friendly route heading (e.g. 'Маршрут: Шереметьево - Пулково') for route/departure/arrival/flight search URLs, mirroring Angular. Details page: - Main H1 becomes 'Информация о рейсе: SU 6805, Москва - Санкт-Петербург' (carrier + flight number + origin/destination cities), not a bare flight number. - Add 'Детали рейса' section header above the accordion to match Angular's flight-details-wrapper layout. - Promote the airline block in BoardDetailsHeader: drop the legacy OperatorLogo copy with broken asset paths and hand off to the shared under src/ui/flights. Render it with the 'авиакомпания' caption beside the enlarged flight number. - Replace hardcoded English 'Leg' / 'Total flying time' / 'Aircraft:' with i18n keys, added to all nine locale files. Test harness: - Add vi.mock for useDictionaries in the three suites that render OnlineBoardSearchPage (the new heading helper calls the hook and crashed without ApiClientProvider). 1256 tests passing. --- .../BoardDetailsHeader.scss | 16 +- .../BoardDetailsHeader/DetailsHeaderBadge.tsx | 32 +- .../BoardDetailsHeader/OperatorLogo.scss | 189 - .../BoardDetailsHeader/OperatorLogo.test.tsx | 52 - .../BoardDetailsHeader/OperatorLogo.tsx | 44 - .../aerolineas-argentinas/round.svg | 1 - .../airlines-logo/aeromexico/large.svg | 12 - .../airlines-logo/aeromexico/round.svg | 1 - .../airlines-logo/air-baltic/large.svg | 1 - .../airlines-logo/air-baltic/round.svg | 1 - .../airlines-logo/air-europa/large.svg | 11 - .../airlines-logo/air-europa/round.svg | 1 - .../airlines-logo/air-serbia/large.svg | 1 - .../airlines-logo/air-serbia/round.svg | 3 - .../airlines-logo/airfrance/large.svg | 1 - .../airlines-logo/airmalta/large.svg | 1 - .../airlines-logo/alitalia/large.svg | 10 - .../airlines-logo/aurora/large/en.svg | 7 - .../airlines-logo/aurora/large/ru.svg | 3 - .../airlines-logo/china-eastern/large.svg | 1 - .../airlines-logo/china-southern/large.svg | 12 - .../airlines-logo/czech-airline/round.svg | 1 - .../airlines-logo/delta/large.svg | 11 - .../airlines-logo/finnair/large.svg | 1 - .../airlines-logo/icelandair/large.svg | 1 - .../airlines-logo/japan-airlines/large.svg | 10 - .../airlines-logo/kenya-airways/large.svg | 1 - .../airlines-logo/korean-air/large.svg | 14 - .../airlines-logo/miat/large.svg | 9 - .../airlines-logo/miat/round.svg | 1 - .../airlines-logo/pobeda/large.svg | 1 - .../airlines-logo/rossiya/large/en.svg | 9 - .../airlines-logo/rossiya/large/ru.svg | 5 - .../airlines-logo/s7/large.svg | 1 - .../airlines-logo/tarom/round.svg | 1 - .../airlines-logo/xiamen-air/large.svg | 8 - .../components/OnlineBoardDetailsPage.scss | 9 + .../OnlineBoardDetailsPage.test.tsx | 5 +- .../components/OnlineBoardDetailsPage.tsx | 20 +- .../components/OnlineBoardSearchPage.test.tsx | 4 + .../components/OnlineBoardSearchPage.tsx | 34 +- src/i18n/locales/de/common.json | 6 +- src/i18n/locales/en/common.json | 6 +- src/i18n/locales/es/common.json | 6 +- src/i18n/locales/fr/common.json | 6 +- src/i18n/locales/it/common.json | 6 +- src/i18n/locales/ja/common.json | 6 +- src/i18n/locales/ko/common.json | 6 +- src/i18n/locales/ru/common.json | 6 +- src/i18n/locales/zh/common.json | 6 +- src/ui/flights/OperatorLogo.scss | 10 + src/ui/flights/OperatorLogo.tsx | 2 +- tests/fixtures/api/app-settings.json | 34 + tests/fixtures/api/board-by-flight.json | 132 + tests/fixtures/api/board-by-route.json | 6516 ++++++++ tests/fixtures/api/board-days-flight.json | 3 + tests/fixtures/api/board-days-route.json | 3 + tests/fixtures/api/destinations-from.json | 636 + tests/fixtures/api/destinations-route.json | 13 + tests/fixtures/api/dictionary-airports.json | 2258 +++ tests/fixtures/api/dictionary-cities.json | 2073 +++ tests/fixtures/api/dictionary-countries.json | 332 + tests/fixtures/api/dictionary-regions.json | 100 + tests/fixtures/api/index.ts | 77 + tests/fixtures/api/map-days-route.json | 3 + tests/fixtures/api/onlineboard-details.json | 162 + tests/fixtures/api/popular-requests.json | 23 + tests/fixtures/api/schedule-days-route.json | 3 + tests/fixtures/api/schedule-details.json | 348 + tests/fixtures/api/schedule-search.json | 12756 ++++++++++++++++ tests/integration/api-shapes.test.ts | 192 + .../online-board/error-handling.test.tsx | 4 + .../online-board/flight-search.test.tsx | 4 + 73 files changed, 25830 insertions(+), 454 deletions(-) delete mode 100644 src/features/online-board/components/BoardDetailsHeader/OperatorLogo.scss delete mode 100644 src/features/online-board/components/BoardDetailsHeader/OperatorLogo.test.tsx delete mode 100644 src/features/online-board/components/BoardDetailsHeader/OperatorLogo.tsx delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/aerolineas-argentinas/round.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/aeromexico/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/aeromexico/round.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-baltic/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-baltic/round.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-europa/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-europa/round.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-serbia/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-serbia/round.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/airfrance/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/airmalta/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/alitalia/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/aurora/large/en.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/aurora/large/ru.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/china-eastern/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/china-southern/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/czech-airline/round.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/delta/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/finnair/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/icelandair/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/japan-airlines/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/kenya-airways/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/korean-air/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/miat/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/miat/round.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/pobeda/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/rossiya/large/en.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/rossiya/large/ru.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/s7/large.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/tarom/round.svg delete mode 100644 src/features/online-board/components/BoardDetailsHeader/airlines-logo/xiamen-air/large.svg create mode 100644 tests/fixtures/api/app-settings.json create mode 100644 tests/fixtures/api/board-by-flight.json create mode 100644 tests/fixtures/api/board-by-route.json create mode 100644 tests/fixtures/api/board-days-flight.json create mode 100644 tests/fixtures/api/board-days-route.json create mode 100644 tests/fixtures/api/destinations-from.json create mode 100644 tests/fixtures/api/destinations-route.json create mode 100644 tests/fixtures/api/dictionary-airports.json create mode 100644 tests/fixtures/api/dictionary-cities.json create mode 100644 tests/fixtures/api/dictionary-countries.json create mode 100644 tests/fixtures/api/dictionary-regions.json create mode 100644 tests/fixtures/api/index.ts create mode 100644 tests/fixtures/api/map-days-route.json create mode 100644 tests/fixtures/api/onlineboard-details.json create mode 100644 tests/fixtures/api/popular-requests.json create mode 100644 tests/fixtures/api/schedule-days-route.json create mode 100644 tests/fixtures/api/schedule-details.json create mode 100644 tests/fixtures/api/schedule-search.json create mode 100644 tests/integration/api-shapes.test.ts diff --git a/src/features/online-board/components/BoardDetailsHeader/BoardDetailsHeader.scss b/src/features/online-board/components/BoardDetailsHeader/BoardDetailsHeader.scss index 60698e3c..3bc1a93e 100644 --- a/src/features/online-board/components/BoardDetailsHeader/BoardDetailsHeader.scss +++ b/src/features/online-board/components/BoardDetailsHeader/BoardDetailsHeader.scss @@ -25,11 +25,23 @@ .details-header-badge { display: flex; align-items: center; - gap: 12px; + gap: 24px; &__flight-number { display: flex; flex-direction: column; } - &__primary { font-size: 24px; font-weight: 600; color: #1a3a5c; } + &__primary { font-size: 28px; font-weight: 600; color: #1a3a5c; } &__codesharing { font-size: 12px; color: #666; margin-top: 2px; } + + &__airline { + display: flex; + flex-direction: column; + gap: 4px; + } + + &__airline-caption { + font-size: 12px; + color: #8a8a8a; + text-transform: lowercase; + } } .flight-events { diff --git a/src/features/online-board/components/BoardDetailsHeader/DetailsHeaderBadge.tsx b/src/features/online-board/components/BoardDetailsHeader/DetailsHeaderBadge.tsx index fc82f821..a771fcf0 100644 --- a/src/features/online-board/components/BoardDetailsHeader/DetailsHeaderBadge.tsx +++ b/src/features/online-board/components/BoardDetailsHeader/DetailsHeaderBadge.tsx @@ -1,6 +1,7 @@ import type { FC } from "react"; -import type { ISimpleFlight, IFlightLeg } from "../../types.js"; -import { OperatorLogo } from "./OperatorLogo.js"; +import { useTranslation } from "@/i18n/provider.js"; +import { OperatorLogo } from "@/ui/flights/OperatorLogo.js"; +import { operatingCarrier, type ISimpleFlight, type IFlightLeg } from "../../types.js"; import { FlightStatusButton } from "./FlightStatusButton.js"; export interface DetailsHeaderBadgeProps { @@ -13,20 +14,22 @@ export interface DetailsHeaderBadgeProps { function getCodeshareLegs(flight: ISimpleFlight): IFlightLeg[] { if (flight.routeType !== "MultiLeg") return []; - return flight.legs.filter( - (l) => l.operatingBy?.carrier && l.operatingBy.carrier !== flight.flightId.carrier, - ); + const topCarrier = operatingCarrier(flight.operatingBy); + return flight.legs.filter((l) => { + const legCarrier = operatingCarrier(l.operatingBy); + return legCarrier && legCarrier !== topCarrier; + }); } export const DetailsHeaderBadge: FC = ({ flight, locale, - large = true, - round = false, showStatus = false, }) => { + const { t } = useTranslation(); const codeshareLegs = getCodeshareLegs(flight); const primaryNumber = `${flight.flightId.carrier} ${flight.flightId.flightNumber}`; + const carrier = operatingCarrier(flight.operatingBy) ?? flight.flightId.carrier; return (
@@ -35,12 +38,23 @@ export const DetailsHeaderBadge: FC = ({ {codeshareLegs.length > 0 && (
{codeshareLegs - .map((l) => `${l.operatingBy.carrier} ${l.operatingBy.flightNumber}`) + .map((l) => { + const c = operatingCarrier(l.operatingBy); + if (!c) return ""; + const num = l.operatingBy?.flightNumber; + return num ? `${c} ${num}` : c; + }) + .filter(Boolean) .join(", ")}
)}
- +
+
+ {t("SHARED.AVIACOMPANY")} +
+ +
{showStatus && } ); diff --git a/src/features/online-board/components/BoardDetailsHeader/OperatorLogo.scss b/src/features/online-board/components/BoardDetailsHeader/OperatorLogo.scss deleted file mode 100644 index 4fdc2185..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/OperatorLogo.scss +++ /dev/null @@ -1,189 +0,0 @@ -$width-base: 120px; -$height-base: 36px; - -@mixin scale($base, $ratio: 0.25, $scale: 1.5) { - width: $base; - height: $base * $ratio; - - &.large { - width: $base * $scale; - height: $base * $scale * $ratio; - } - - @media (max-width: 768px) { - width: $base * 0.75; - height: $base * $ratio * 0.75; - - &.large { - width: $base * $scale * 0.75; - height: $base * $scale * $ratio * 0.75; - } - } -} - -.company-logo { - display: inline-block; - background-repeat: no-repeat; - background-size: contain; - background-position: left top; - - @include scale($width-base); - - &.round { - width: $height-base !important; - height: $height-base !important; - } - - &--SU { - @include scale($width-base, 0.258); - background-image: url('./airlines-logo/aeroflot/large/en.png') !important; - - &.ru { background-image: url('./airlines-logo/aeroflot/large/ru.png') !important; } - &.round { background-image: url('./airlines-logo/aeroflot/round.png') !important; } - } - - &--HZ { - @include scale(80px, 0.5556); - background-image: url('./airlines-logo/aurora/large/en.svg') !important; - - &.ru { background-image: url('./airlines-logo/aurora/large/ru.svg') !important; } - &.round { background-image: url('./airlines-logo/aurora/round.png') !important; } - } - - &--F7 { - @include scale($width-base, 0.258); - background-image: url('./airlines-logo/aeroflot/large/en.png') !important; - - &.ru { background-image: url('./airlines-logo/aeroflot/large/ru.png') !important; } - &.round { background-image: url('./airlines-logo/aeroflot/round.png') !important; } - } - - &--FV { - @include scale(90px, 0.1667); - background-image: url('./airlines-logo/rossiya/large/en.svg') !important; - - &.ru { background-image: url('./airlines-logo/rossiya/large/ru.svg') !important; } - &.round { background-image: url('./airlines-logo/rossiya/round.png') !important; } - } - - &--RO { - @include scale($width-base, 0.3334); - background-image: url('./airlines-logo/tarom/large.png') !important; - &.round { background-image: url('./airlines-logo/tarom/round.svg') !important; } - } - - &--DP { - @include scale($width-base, 0.1889); - background-image: url('./airlines-logo/pobeda/large.svg') !important; - &.round { background-image: url('./airlines-logo/pobeda/round.png') !important; } - } - - &--OM { - background-image: url('./airlines-logo/miat/large.svg') !important; - &.round { background-image: url('./airlines-logo/miat/round.svg') !important; } - } - - &--KL { - @include scale($width-base, 0.4444); - background-image: url('./airlines-logo/klm/large.png') !important; - &.round { background-image: url('./airlines-logo/klm/round.png') !important; } - } - - &--AY { - background-image: url('./airlines-logo/finnair/large.svg') !important; - &.round { background-image: url('./airlines-logo/finnair/round.png') !important; } - } - - &--DL { - background-image: url('./airlines-logo/delta/large.svg') !important; - &.round { background-image: url('./airlines-logo/delta/round.png') !important; } - } - - &--OK { - background-image: url('./airlines-logo/czech-airline/large.png') !important; - &.round { background-image: url('./airlines-logo/czech-airline/round.svg') !important; } - } - - &--JU { - background-image: url('./airlines-logo/air-serbia/large.svg') !important; - &.round { background-image: url('./airlines-logo/air-serbia/round.svg') !important; } - } - - &--UX { - background-image: url('./airlines-logo/air-europa/large.svg') !important; - &.round { background-image: url('./airlines-logo/air-europa/round.svg') !important; } - } - - &--BT { - background-image: url('./airlines-logo/air-baltic/large.svg') !important; - &.round { background-image: url('./airlines-logo/air-baltic/round.svg') !important; } - } - - &--AM { - background-image: url('./airlines-logo/aeromexico/large.svg') !important; - &.round { background-image: url('./airlines-logo/aeromexico/round.svg') !important; } - } - - &--AR { - background-image: url('./airlines-logo/aerolineas-argentinas/large.png') !important; - &.round { background-image: url('./airlines-logo/aerolineas-argentinas/round.svg') !important; } - } - - &--KM { - background-image: url('./airlines-logo/airmalta/large.svg') !important; - } - - &--AF { - @include scale($width-base, 0.1222); - background-image: url('./airlines-logo/airfrance/large.svg') !important; - } - - &--AZ { - @include scale($width-base, 0.2444); - background-image: url('./airlines-logo/alitalia/large.svg') !important; - } - - &--PG { - background-image: url('./airlines-logo/bangkok-airways/large.png') !important; - } - - &--SN { - @include scale($width-base, 0.1667); - background-image: url('./airlines-logo/brussels-airlines/large.png') !important; - } - - &--FB { - @include scale($width-base, 0.296); - background-image: url('./airlines-logo/bulgaria-air/large.png') !important; - } - - &--CI { - @include scale($width-base, 0.1556); - background-image: url('./airlines-logo/china-airlines/large.png') !important; - } - - &--MU { background-image: url('./airlines-logo/china-eastern/large.svg') !important; } - &--CZ { background-image: url('./airlines-logo/china-southern/large.svg') !important; } - &--GA { background-image: url('./airlines-logo/garuda-indonesia/large.png') !important; } - &--FI { background-image: url('./airlines-logo/icelandair/large.svg') !important; } - &--KO { background-image: url('./airlines-logo/kenya-airways/large.svg') !important; } - &--KE { background-image: url('./airlines-logo/korean-air/large.svg') !important; } - &--JL { background-image: url('./airlines-logo/japan-airlines/large.svg') !important; } - &--LO { background-image: url('./airlines-logo/polish-airlines/large.png') !important; } - &--ME { background-image: url('./airlines-logo/mea/large.png') !important; } - - &--S7 { - @include scale($width-base, 0.3333); - background-image: url('./airlines-logo/s7/large.svg') !important; - } - - &--SV { background-image: url('./airlines-logo/saudi-arabian-airlines/large.png') !important; } - &--VN { background-image: url('./airlines-logo/vietnam-airlines/large.png') !important; } - &--MF { background-image: url('./airlines-logo/vietnam-airlines/large.png') !important; } -} - -.operator-logo__caption { - font-size: 12px; - color: #666; - margin-bottom: 2px; -} diff --git a/src/features/online-board/components/BoardDetailsHeader/OperatorLogo.test.tsx b/src/features/online-board/components/BoardDetailsHeader/OperatorLogo.test.tsx deleted file mode 100644 index be519282..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/OperatorLogo.test.tsx +++ /dev/null @@ -1,52 +0,0 @@ -// @vitest-environment jsdom -import { describe, it, expect, vi } from "vitest"; -import { render, screen } from "@testing-library/react"; -import { OperatorLogo } from "./OperatorLogo.js"; -import type { ISimpleFlight } from "../../types.js"; - -vi.mock("@/i18n/provider.js", () => ({ - useTranslation: () => ({ t: (k: string) => k }), -})); - -function makeFlight(carrier: string): ISimpleFlight { - return { - id: "X", routeType: "Direct", flyingTime: "1h", status: "Scheduled", - flightId: { carrier, flightNumber: "0022", suffix: "", date: "20260417" }, - operatingBy: { carrier, flightNumber: "0022" }, - leg: {} as never, - } as ISimpleFlight; -} - -describe("OperatorLogo", () => { - it("renders with company-logo and company-logo--SU classes", () => { - render(); - const el = screen.getByTestId("operator-logo"); - expect(el.className).toContain("company-logo"); - expect(el.className).toContain("company-logo--SU"); - }); - - it("adds ru class when locale is ru", () => { - render(); - expect(screen.getByTestId("operator-logo").className).toContain("ru"); - }); - - it("adds large class when large=true", () => { - render(); - expect(screen.getByTestId("operator-logo").className).toContain("large"); - }); - - it("adds round class when round=true", () => { - render(); - expect(screen.getByTestId("operator-logo").className).toContain("round"); - }); - - it("renders caption when caption=true", () => { - render(); - expect(screen.getByText("SHARED.AVIACOMPANY")).toBeTruthy(); - }); - - it("does not render caption by default", () => { - render(); - expect(screen.queryByText("SHARED.AVIACOMPANY")).toBeNull(); - }); -}); diff --git a/src/features/online-board/components/BoardDetailsHeader/OperatorLogo.tsx b/src/features/online-board/components/BoardDetailsHeader/OperatorLogo.tsx deleted file mode 100644 index 5ecc94dd..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/OperatorLogo.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import type { FC } from "react"; -import { useTranslation } from "@/i18n/provider.js"; -import type { ISimpleFlight } from "../../types.js"; -import "./OperatorLogo.scss"; - -export interface OperatorLogoProps { - flight: ISimpleFlight; - locale: string; - large?: boolean; - round?: boolean; - caption?: boolean; -} - -export const OperatorLogo: FC = ({ - flight, - locale, - large, - round, - caption, -}) => { - const { t } = useTranslation(); - const carrier = flight.operatingBy.carrier ?? flight.flightId.carrier; - - const classes = [ - "company-logo", - `company-logo--${carrier}`, - large ? "large" : "", - round ? "round" : "", - locale === "ru" ? "ru" : "", - ] - .filter(Boolean) - .join(" "); - - return ( -
- {caption &&
{t("SHARED.AVIACOMPANY")}
} -
-
- ); -}; diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aerolineas-argentinas/round.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aerolineas-argentinas/round.svg deleted file mode 100644 index bebc6761..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aerolineas-argentinas/round.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aeromexico/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aeromexico/large.svg deleted file mode 100644 index d10b5fcf..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aeromexico/large.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aeromexico/round.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aeromexico/round.svg deleted file mode 100644 index c2522890..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aeromexico/round.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-baltic/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-baltic/large.svg deleted file mode 100644 index 609d4b7e..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-baltic/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-baltic/round.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-baltic/round.svg deleted file mode 100644 index 2c690b4c..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-baltic/round.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-europa/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-europa/large.svg deleted file mode 100644 index 781eac70..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-europa/large.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-europa/round.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-europa/round.svg deleted file mode 100644 index 14f365f5..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-europa/round.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-serbia/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-serbia/large.svg deleted file mode 100644 index 50581739..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-serbia/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-serbia/round.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-serbia/round.svg deleted file mode 100644 index 0f22b582..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/air-serbia/round.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/airfrance/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/airfrance/large.svg deleted file mode 100644 index 6c2f06b7..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/airfrance/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/airmalta/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/airmalta/large.svg deleted file mode 100644 index b493a020..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/airmalta/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/alitalia/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/alitalia/large.svg deleted file mode 100644 index 45277d12..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/alitalia/large.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aurora/large/en.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aurora/large/en.svg deleted file mode 100644 index 7cbe06a0..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aurora/large/en.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aurora/large/ru.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aurora/large/ru.svg deleted file mode 100644 index 78f689a4..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/aurora/large/ru.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/china-eastern/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/china-eastern/large.svg deleted file mode 100644 index a9be4ead..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/china-eastern/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/china-southern/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/china-southern/large.svg deleted file mode 100644 index df21866b..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/china-southern/large.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/czech-airline/round.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/czech-airline/round.svg deleted file mode 100644 index 6138e02f..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/czech-airline/round.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/delta/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/delta/large.svg deleted file mode 100644 index d417a3b0..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/delta/large.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/finnair/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/finnair/large.svg deleted file mode 100644 index b949776a..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/finnair/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/icelandair/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/icelandair/large.svg deleted file mode 100644 index ef6b54eb..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/icelandair/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/japan-airlines/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/japan-airlines/large.svg deleted file mode 100644 index 7cf75f37..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/japan-airlines/large.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/kenya-airways/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/kenya-airways/large.svg deleted file mode 100644 index af91dcab..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/kenya-airways/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/korean-air/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/korean-air/large.svg deleted file mode 100644 index 4dd26466..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/korean-air/large.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/miat/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/miat/large.svg deleted file mode 100644 index 3085afe2..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/miat/large.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/miat/round.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/miat/round.svg deleted file mode 100644 index 9046d3cf..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/miat/round.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/pobeda/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/pobeda/large.svg deleted file mode 100644 index 9114a85f..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/pobeda/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/rossiya/large/en.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/rossiya/large/en.svg deleted file mode 100644 index 0f9e797a..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/rossiya/large/en.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/rossiya/large/ru.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/rossiya/large/ru.svg deleted file mode 100644 index ab9c5a52..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/rossiya/large/ru.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/s7/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/s7/large.svg deleted file mode 100644 index 66dbb8cf..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/s7/large.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/tarom/round.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/tarom/round.svg deleted file mode 100644 index 203bd52e..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/tarom/round.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/xiamen-air/large.svg b/src/features/online-board/components/BoardDetailsHeader/airlines-logo/xiamen-air/large.svg deleted file mode 100644 index 53e17ab0..00000000 --- a/src/features/online-board/components/BoardDetailsHeader/airlines-logo/xiamen-air/large.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/src/features/online-board/components/OnlineBoardDetailsPage.scss b/src/features/online-board/components/OnlineBoardDetailsPage.scss index f7c3c454..8db0b425 100644 --- a/src/features/online-board/components/OnlineBoardDetailsPage.scss +++ b/src/features/online-board/components/OnlineBoardDetailsPage.scss @@ -118,6 +118,15 @@ font-size: fonts.$font-size-s; } + &__accordion-title { + padding: vars.$space-xl vars.$space-xl vars.$space-s; + font-size: 18px; + font-weight: 600; + color: #222; + border-top: 1px solid #eee; + margin-top: vars.$space-m; + } + // Angular overrides ported (without ::ng-deep) .flight-props-caption { width: 30%; diff --git a/src/features/online-board/components/OnlineBoardDetailsPage.test.tsx b/src/features/online-board/components/OnlineBoardDetailsPage.test.tsx index ebf3157d..b8c4c99f 100644 --- a/src/features/online-board/components/OnlineBoardDetailsPage.test.tsx +++ b/src/features/online-board/components/OnlineBoardDetailsPage.test.tsx @@ -178,13 +178,14 @@ describe("OnlineBoardDetailsPage", () => { it("displays aircraft info", () => { render(); - expect(screen.getByText("Aircraft: Boeing 777-300ER (77W)")).toBeTruthy(); + // Label is now translated via the SHARED.PLANE key (mocked t returns the key). + expect(screen.getByText("SHARED.PLANE: Boeing 777-300ER (77W)")).toBeTruthy(); }); it("displays flying time", () => { render(); expect(screen.getByTestId("flying-time")).toBeTruthy(); - expect(screen.getByText("Total flying time: 10:30")).toBeTruthy(); + expect(screen.getByText("BOARD.TOTAL-FLYING-TIME: 10:30")).toBeTruthy(); }); describe("accordion integration", () => { diff --git a/src/features/online-board/components/OnlineBoardDetailsPage.tsx b/src/features/online-board/components/OnlineBoardDetailsPage.tsx index 73b95dbc..9a8959cd 100644 --- a/src/features/online-board/components/OnlineBoardDetailsPage.tsx +++ b/src/features/online-board/components/OnlineBoardDetailsPage.tsx @@ -52,13 +52,14 @@ function FlightLegs({ legs: IFlightLeg[]; viewType: "Onlineboard" | "Schedule"; }): JSX.Element { + const { t } = useTranslation(); return (
{legs.map((leg, i) => (
- Leg {(leg.index ?? i) + 1} + {t("BOARD.LEG")} {(leg.index ?? i) + 1} {leg.status}
@@ -128,10 +129,14 @@ function FlightLegs({ {leg.equipment.name && (
- Aircraft: {leg.equipment.name} + {t("SHARED.PLANE")}: {leg.equipment.name} {leg.equipment.code ? ` (${leg.equipment.code})` : ""}
)} + +
+ {t("BOARD.DETAILS-TITLE")} +
{i < legs.length - 1 && ( @@ -247,6 +252,13 @@ export const OnlineBoardDetailsPage: FC = ({ const legs = getLegs(displayFlight); const flightNumber = `${displayFlight.flightId.carrier} ${displayFlight.flightId.flightNumber}`; + const firstLeg = legs[0]; + const lastLeg = legs[legs.length - 1]; + const depCity = firstLeg?.departure.scheduled.city; + const arrCity = lastLeg?.arrival.scheduled.city; + const routeSuffix = depCity && arrCity ? `, ${depCity} - ${arrCity}` : ""; + const pageTitle = `${t("BOARD.FLIGHT-INFO")}: ${flightNumber}${routeSuffix}`; + const seoProps = buildFlightDetailsSeo(t, displayFlight, locale, canonicalOrigin); const jsonLd = buildFlightJsonLd(displayFlight); @@ -256,7 +268,7 @@ export const OnlineBoardDetailsPage: FC = ({ } - title={

{flightNumber}

} + title={

{pageTitle}

} breadcrumbs={[ { label: t("BREADCRUMBS.ONLINEBOARD"), url: onlineboardHref }, { label: flightNumber }, @@ -318,7 +330,7 @@ export const OnlineBoardDetailsPage: FC = ({ {/* Flying time */}
- Total flying time: {displayFlight.flyingTime} + {t("BOARD.TOTAL-FLYING-TIME")}: {displayFlight.flyingTime}
diff --git a/src/features/online-board/components/OnlineBoardSearchPage.test.tsx b/src/features/online-board/components/OnlineBoardSearchPage.test.tsx index 2de56edc..6fc9a9c1 100644 --- a/src/features/online-board/components/OnlineBoardSearchPage.test.tsx +++ b/src/features/online-board/components/OnlineBoardSearchPage.test.tsx @@ -67,6 +67,10 @@ vi.mock("../hooks/useCalendarDays.js", () => ({ }), })); +vi.mock("@/shared/dictionaries/index.js", () => ({ + useDictionaries: () => ({ dictionaries: null, loading: false, error: null }), +})); + describe("OnlineBoardSearchPage", () => { const departureParsedParams: OnlineBoardSearchPageProps["params"] = { type: "departure", diff --git a/src/features/online-board/components/OnlineBoardSearchPage.tsx b/src/features/online-board/components/OnlineBoardSearchPage.tsx index 1c890018..a8e22681 100644 --- a/src/features/online-board/components/OnlineBoardSearchPage.tsx +++ b/src/features/online-board/components/OnlineBoardSearchPage.tsx @@ -22,6 +22,7 @@ import { PageTabs } from "@/ui/layout/PageTabs.js"; import { SearchHistory } from "@/ui/layout/SearchHistory.js"; import { OnlineBoardFilter } from "./OnlineBoardFilter.js"; import { DayTabs } from "./DayTabs/index.js"; +import { useDictionaries } from "@/shared/dictionaries/index.js"; import "./OnlineBoardSearchPage.scss"; import { JsonLdRenderer } from "@/shared/seo/json-ld.js"; import { useOnlineBoard } from "../hooks/useOnlineBoard.js"; @@ -182,6 +183,36 @@ export const OnlineBoardSearchPage: FC = ({ const { t } = useTranslation(); const routeParams = useParams<{ lang: string }>(); const lang = routeParams.lang ?? "ru"; + const { dictionaries } = useDictionaries(lang); + + // Human-readable title/breadcrumb. Angular derives these from the + // station dictionary — e.g. "Маршрут: Шереметьево - Санкт-Петербург". + const describeStation = (code?: string): string => { + if (!code || !dictionaries) return code ?? ""; + const upper = code.toUpperCase(); + return ( + dictionaries.airportByCode.get(upper)?.name ?? + dictionaries.cityByCode.get(upper)?.name ?? + code + ); + }; + let searchHeading: string; + switch (params.type) { + case "route": + searchHeading = `${t("BOARD.ROUTE-TEXT")}${describeStation(params.departure)} - ${describeStation(params.arrival)}`; + break; + case "departure": + searchHeading = `${t("BOARD.DEPARTURE")}: ${describeStation(params.station)}`; + break; + case "arrival": + searchHeading = `${t("BOARD.ARRIVAL")}: ${describeStation(params.station)}`; + break; + case "flight": + searchHeading = `${t("BOARD.FLIGHT_NUMBER")}: ${params.carrier}${params.flightNumber}`; + break; + default: + searchHeading = t("BOARD.TITLE"); + } // Data fetching const searchParams = toSearchParams(params); @@ -247,11 +278,12 @@ export const OnlineBoardSearchPage: FC = ({ headerLeft={} title={

- {t("BOARD.TITLE")} + {searchHeading}

} breadcrumbs={[ { label: t("BOARD.TITLE"), url: `/${lang}/onlineboard` }, + { label: searchHeading }, ]} contentLeft={ <> diff --git a/src/i18n/locales/de/common.json b/src/i18n/locales/de/common.json index 1366e6e2..55e23709 100644 --- a/src/i18n/locales/de/common.json +++ b/src/i18n/locales/de/common.json @@ -35,7 +35,11 @@ "STATUS-PLANNED": "Geplant", "TIME_DEPARTURE": "Abflugzeit", "TITLE": "Online-Anzeigetafel", - "YOU_SEARCH": "Sie haben gesucht" + "YOU_SEARCH": "Sie haben gesucht", + "LEG": "Leg", + "TOTAL-FLYING-TIME": "Total flying time", + "DETAILS-TITLE": "Flight details", + "FLIGHT-INFO": "Flight information" }, "BOARDING-STATUSES": { "Expected": "Erwartet", diff --git a/src/i18n/locales/en/common.json b/src/i18n/locales/en/common.json index d165a16c..41e032be 100644 --- a/src/i18n/locales/en/common.json +++ b/src/i18n/locales/en/common.json @@ -35,7 +35,11 @@ "STATUS-PLANNED": "Scheduled", "TIME_DEPARTURE": "Departure time", "TITLE": "Online Timetable", - "YOU_SEARCH": "You searched" + "YOU_SEARCH": "You searched", + "LEG": "Leg", + "TOTAL-FLYING-TIME": "Total flying time", + "DETAILS-TITLE": "Flight details", + "FLIGHT-INFO": "Flight information" }, "BREADCRUMBS": { "ONLINEBOARD": "Online Board" diff --git a/src/i18n/locales/es/common.json b/src/i18n/locales/es/common.json index b88d38ee..7ab8c95c 100644 --- a/src/i18n/locales/es/common.json +++ b/src/i18n/locales/es/common.json @@ -35,7 +35,11 @@ "STATUS-PLANNED": "Programada", "TIME_DEPARTURE": "Hora de salida", "TITLE": "Horario en línea", - "YOU_SEARCH": "Su búsqueda" + "YOU_SEARCH": "Su búsqueda", + "LEG": "Leg", + "TOTAL-FLYING-TIME": "Total flying time", + "DETAILS-TITLE": "Flight details", + "FLIGHT-INFO": "Flight information" }, "BOARDING-STATUSES": { "Expected": "Prevista", diff --git a/src/i18n/locales/fr/common.json b/src/i18n/locales/fr/common.json index d81a44e2..fef7fc84 100644 --- a/src/i18n/locales/fr/common.json +++ b/src/i18n/locales/fr/common.json @@ -35,7 +35,11 @@ "STATUS-PLANNED": "Prévu", "TIME_DEPARTURE": "Heure de départ", "TITLE": "Horaire en ligne", - "YOU_SEARCH": "Vous avez recherché" + "YOU_SEARCH": "Vous avez recherché", + "LEG": "Leg", + "TOTAL-FLYING-TIME": "Total flying time", + "DETAILS-TITLE": "Flight details", + "FLIGHT-INFO": "Flight information" }, "BOARDING-STATUSES": { "Expected": "Prévu", diff --git a/src/i18n/locales/it/common.json b/src/i18n/locales/it/common.json index 51b7a9be..ed416116 100644 --- a/src/i18n/locales/it/common.json +++ b/src/i18n/locales/it/common.json @@ -35,7 +35,11 @@ "STATUS-PLANNED": "Pianificato", "TIME_DEPARTURE": "Ora di partenza", "TITLE": "Orari online", - "YOU_SEARCH": "Cronologia ricerche" + "YOU_SEARCH": "Cronologia ricerche", + "LEG": "Leg", + "TOTAL-FLYING-TIME": "Total flying time", + "DETAILS-TITLE": "Flight details", + "FLIGHT-INFO": "Flight information" }, "BOARDING-STATUSES": { "Expected": "Previsto", diff --git a/src/i18n/locales/ja/common.json b/src/i18n/locales/ja/common.json index 556ff117..0d15b80a 100644 --- a/src/i18n/locales/ja/common.json +++ b/src/i18n/locales/ja/common.json @@ -35,7 +35,11 @@ "STATUS-PLANNED": "スケジュール済み", "TIME_DEPARTURE": "出発時刻", "TITLE": "オンライン時刻表", - "YOU_SEARCH": "検索対象" + "YOU_SEARCH": "検索対象", + "LEG": "Leg", + "TOTAL-FLYING-TIME": "Total flying time", + "DETAILS-TITLE": "Flight details", + "FLIGHT-INFO": "Flight information" }, "BOARDING-STATUSES": { "Expected": "予測", diff --git a/src/i18n/locales/ko/common.json b/src/i18n/locales/ko/common.json index 02fd34d7..adfe1760 100644 --- a/src/i18n/locales/ko/common.json +++ b/src/i18n/locales/ko/common.json @@ -35,7 +35,11 @@ "STATUS-PLANNED": "예약됨", "TIME_DEPARTURE": "출발 시간", "TITLE": "온라인 시간표", - "YOU_SEARCH": "검색 내역" + "YOU_SEARCH": "검색 내역", + "LEG": "Leg", + "TOTAL-FLYING-TIME": "Total flying time", + "DETAILS-TITLE": "Flight details", + "FLIGHT-INFO": "Flight information" }, "BOARDING-STATUSES": { "Expected": "예상 ", diff --git a/src/i18n/locales/ru/common.json b/src/i18n/locales/ru/common.json index e3ea2ec8..e363b1fb 100644 --- a/src/i18n/locales/ru/common.json +++ b/src/i18n/locales/ru/common.json @@ -35,7 +35,11 @@ "STATUS-PLANNED": "Запланирован", "TIME_DEPARTURE": "Время отправления", "TITLE": "Онлайн-Табло", - "YOU_SEARCH": "Вы искали" + "YOU_SEARCH": "Вы искали", + "LEG": "Перелет", + "TOTAL-FLYING-TIME": "Общее время в пути", + "DETAILS-TITLE": "Детали рейса", + "FLIGHT-INFO": "Информация о рейсе" }, "BREADCRUMBS": { "ONLINEBOARD": "Онлайн-табло" diff --git a/src/i18n/locales/zh/common.json b/src/i18n/locales/zh/common.json index c6307e94..5eb9799c 100644 --- a/src/i18n/locales/zh/common.json +++ b/src/i18n/locales/zh/common.json @@ -35,7 +35,11 @@ "STATUS-PLANNED": "计划", "TIME_DEPARTURE": "出发时间", "TITLE": "在线时刻表", - "YOU_SEARCH": "您搜索过" + "YOU_SEARCH": "您搜索过", + "LEG": "Leg", + "TOTAL-FLYING-TIME": "Total flying time", + "DETAILS-TITLE": "Flight details", + "FLIGHT-INFO": "Flight information" }, "BOARDING-STATUSES": { "Expected": "预计", diff --git a/src/ui/flights/OperatorLogo.scss b/src/ui/flights/OperatorLogo.scss index e5de5e34..8c5fd33f 100644 --- a/src/ui/flights/OperatorLogo.scss +++ b/src/ui/flights/OperatorLogo.scss @@ -14,4 +14,14 @@ background-size: cover; background-position: center; } + + &--large { + width: 140px; + height: 36px; + } +} + +.details-header-badge__airline .operator-logo { + width: 140px; + height: 36px; } diff --git a/src/ui/flights/OperatorLogo.tsx b/src/ui/flights/OperatorLogo.tsx index c89832dd..3d3a9b7d 100644 --- a/src/ui/flights/OperatorLogo.tsx +++ b/src/ui/flights/OperatorLogo.tsx @@ -73,7 +73,7 @@ export const OperatorLogo: FC = ({ carrier, locale, round, ti
; + buttons: { + buyTicket?: { period?: { min?: string; max?: string } }; + flightStatus?: { availableFrom?: string; visible?: string }; + }; + }; +} + +export const fixtures = { + appSettings: appSettings as AppSettings, + boardByFlight: boardByFlight as unknown as IBoardResponse, + boardByRoute: boardByRoute as unknown as IBoardResponse, + boardDaysFlight: boardDaysFlight as unknown as IDaysResponse, + boardDaysRoute: boardDaysRoute as unknown as IDaysResponse, + destinationsFrom: destinationsFrom as unknown as IDestinationsResponse, + destinationsRoute: destinationsRoute as unknown as IDestinationsResponse, + dictionaryAirports: dictionaryAirports as unknown as IRawAirport[], + dictionaryCities: dictionaryCities as unknown as IRawCity[], + dictionaryCountries: dictionaryCountries as unknown as IRawCountry[], + dictionaryRegions: dictionaryRegions as unknown as IRawRegion[], + mapDaysRoute: mapDaysRoute as unknown as IFlightsMapDaysResponse, + onlineboardDetails: onlineboardDetails as unknown as IBoardResponse, + popularRequests: popularRequests as unknown as PopularRequest[], + scheduleDaysRoute: scheduleDaysRoute as unknown as IScheduleDaysResponse, + scheduleDetails: scheduleDetails as unknown as IScheduleDetailsResponse, + scheduleSearch: scheduleSearch as unknown as IScheduleResponse, +} as const; diff --git a/tests/fixtures/api/map-days-route.json b/tests/fixtures/api/map-days-route.json new file mode 100644 index 00000000..d08c138d --- /dev/null +++ b/tests/fixtures/api/map-days-route.json @@ -0,0 +1,3 @@ +{ + "days": "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000" +} \ No newline at end of file diff --git a/tests/fixtures/api/onlineboard-details.json b/tests/fixtures/api/onlineboard-details.json new file mode 100644 index 00000000..df834f8a --- /dev/null +++ b/tests/fixtures/api/onlineboard-details.json @@ -0,0 +1,162 @@ +{ + "data": { + "routes": [ + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV" + }, + "status": "Cancelled", + "id": "290cbb03-669f-48fa-b113-091e212e5a1a", + "flightId": { + "dateLT": "2026-04-17", + "carrier": "SU", + "flightNumber": "6951", + "suffix": "", + "date": "2026-04-16" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "latest": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-16T21:30:00Z", + "local": "2026-04-17T00:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "00:30", + "tzOffset": 180.0 + }, + "estimatedBlockOff": { + "utc": "2026-04-16T21:30:00Z", + "local": "2026-04-17T00:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "00:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "latest": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-16T22:55:00Z", + "local": "2026-04-17T01:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:55", + "tzOffset": 180.0 + }, + "estimatedBlockOn": { + "utc": "2026-04-16T22:55:00Z", + "local": "2026-04-17T01:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": false, + "statusAvailable": true, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-09T07:09:20Z", + "status": "Cancelled", + "operatingBy": { + "scheduled": "FV" + }, + "transition": {}, + "daysOfWeek": { + "flight": "16" + }, + "flyingTime": "01:25:00", + "equipment": { + "meal": [], + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + } + }, + "serviceClasses": [], + "bookingClasses": {} + }, + "daysForTabs": [ + "20260416", + "20260417", + "20260418", + "20260419", + "20260420", + "20260421", + "20260422", + "20260423", + "20260424", + "20260425", + "20260427", + "20260428", + "20260429", + "20260430", + "20260501", + "20260502", + "20260503", + "20260504", + "20260505", + "20260506", + "20260507", + "20260508" + ] + } + } + ], + "partners": [] + } +} \ No newline at end of file diff --git a/tests/fixtures/api/popular-requests.json b/tests/fixtures/api/popular-requests.json new file mode 100644 index 00000000..45a5d59a --- /dev/null +++ b/tests/fixtures/api/popular-requests.json @@ -0,0 +1,23 @@ +[ + { + "mode": "Departure", + "departure": "MOW", + "type": "Onlineboard" + }, + { + "mode": "Route", + "departure": "MOW", + "arrival": "KUF", + "type": "Onlineboard" + }, + { + "mode": "Departure", + "departure": "LED", + "type": "Onlineboard" + }, + { + "mode": "Departure", + "departure": "SVO", + "type": "Onlineboard" + } +] \ No newline at end of file diff --git a/tests/fixtures/api/schedule-days-route.json b/tests/fixtures/api/schedule-days-route.json new file mode 100644 index 00000000..9bb6c3c3 --- /dev/null +++ b/tests/fixtures/api/schedule-days-route.json @@ -0,0 +1,3 @@ +{ + "days": "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/tests/fixtures/api/schedule-details.json b/tests/fixtures/api/schedule-details.json new file mode 100644 index 00000000..f1551388 --- /dev/null +++ b/tests/fixtures/api/schedule-details.json @@ -0,0 +1,348 @@ +{ + "data": { + "routes": [ + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV" + }, + "status": "Cancelled", + "id": "290cbb03-669f-48fa-b113-091e212e5a1a", + "flightId": { + "dateLT": "2026-04-17", + "carrier": "SU", + "flightNumber": "6951", + "suffix": "", + "date": "2026-04-16" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "latest": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-16T21:30:00Z", + "local": "2026-04-17T00:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "00:30", + "tzOffset": 180.0 + }, + "estimatedBlockOff": { + "utc": "2026-04-16T21:30:00Z", + "local": "2026-04-17T00:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "00:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "latest": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-16T22:55:00Z", + "local": "2026-04-17T01:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:55", + "tzOffset": 180.0 + }, + "estimatedBlockOn": { + "utc": "2026-04-16T22:55:00Z", + "local": "2026-04-17T01:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": false, + "statusAvailable": true, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-09T07:09:20Z", + "status": "Cancelled", + "operatingBy": { + "scheduled": "FV" + }, + "transition": {}, + "daysOfWeek": { + "flight": "16" + }, + "flyingTime": "01:25:00", + "equipment": { + "meal": [], + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + } + }, + "serviceClasses": [], + "bookingClasses": {} + }, + "daysForTabs": [ + "20260416", + "20260417", + "20260418", + "20260419", + "20260420", + "20260421", + "20260422", + "20260423", + "20260424", + "20260425", + "20260427", + "20260428", + "20260429", + "20260430", + "20260501", + "20260502", + "20260503", + "20260504", + "20260505", + "20260506", + "20260507", + "20260508" + ] + } + } + ], + "partners": [], + "daysOfFlight": [ + "20260418", + "20260420", + "20260421", + "20260423", + "20260425", + "20260427", + "20260428", + "20260429", + "20260430", + "20260501", + "20260502", + "20260503", + "20260504", + "20260505", + "20260506", + "20260507", + "20260508", + "20260509", + "20260510", + "20260511", + "20260512", + "20260513", + "20260514", + "20260515", + "20260516", + "20260517", + "20260518", + "20260519", + "20260520", + "20260521", + "20260522", + "20260523", + "20260524", + "20260525", + "20260526", + "20260527", + "20260528", + "20260529", + "20260530", + "20260531", + "20260601", + "20260602", + "20260603", + "20260604", + "20260605", + "20260606", + "20260607", + "20260608", + "20260609", + "20260611", + "20260612", + "20260615", + "20260616", + "20260617", + "20260618", + "20260619", + "20260620", + "20260621", + "20260622", + "20260623", + "20260624", + "20260625", + "20260626", + "20260627", + "20260628", + "20260629", + "20260630", + "20260701", + "20260702", + "20260703", + "20260704", + "20260705", + "20260706", + "20260707", + "20260708", + "20260709", + "20260710", + "20260711", + "20260712", + "20260713", + "20260714", + "20260715", + "20260716", + "20260717", + "20260718", + "20260719", + "20260720", + "20260721", + "20260722", + "20260723", + "20260724", + "20260725", + "20260726", + "20260727", + "20260728", + "20260729", + "20260730", + "20260731", + "20260801", + "20260802", + "20260803", + "20260804", + "20260805", + "20260806", + "20260807", + "20260808", + "20260809", + "20260810", + "20260811", + "20260812", + "20260813", + "20260814", + "20260815", + "20260816", + "20260817", + "20260818", + "20260819", + "20260820", + "20260821", + "20260822", + "20260823", + "20260824", + "20260825", + "20260826", + "20260827", + "20260828", + "20260829", + "20260830", + "20260831", + "20260901", + "20260902", + "20260903", + "20260904", + "20260905", + "20260906", + "20260907", + "20260908", + "20260909", + "20260910", + "20260911", + "20260912", + "20260913", + "20260914", + "20260915", + "20260916", + "20260917", + "20260918", + "20260919", + "20260920", + "20260921", + "20260922", + "20260923", + "20260924", + "20260925", + "20260926", + "20260927", + "20260928", + "20260929", + "20260930", + "20261001", + "20261002", + "20261003", + "20261004", + "20261005", + "20261006", + "20261007", + "20261008", + "20261009", + "20261010", + "20261011", + "20261012", + "20261013", + "20261014", + "20261015", + "20261016", + "20261017", + "20261018", + "20261019", + "20261020", + "20261021", + "20261022", + "20261023", + "20261024", + "20261025" + ] + } +} \ No newline at end of file diff --git a/tests/fixtures/api/schedule-search.json b/tests/fixtures/api/schedule-search.json new file mode 100644 index 00000000..391149dc --- /dev/null +++ b/tests/fixtures/api/schedule-search.json @@ -0,0 +1,12756 @@ +[ + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "85e78917-e0e0-42c8-9143-c23fb7945700", + "flightId": { + "carrier": "SU", + "flightNumber": "6951", + "suffix": "", + "date": "2026-04-17" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-17T21:30:00Z", + "local": "2026-04-18T00:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "00:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-17T22:55:00Z", + "local": "2026-04-18T01:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:05:26Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1246", + "flight": "16" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "0d1477fc-c6b8-437f-a218-b14665235aa8", + "flightId": { + "carrier": "SU", + "flightNumber": "6699", + "suffix": "", + "date": "2026-04-17" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-17T22:00:00Z", + "local": "2026-04-18T01:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-17T23:25:00Z", + "local": "2026-04-18T02:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "02:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:06:17Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "a72045e8-14f2-4377-a5c8-ed1b1f5c7197", + "flightId": { + "carrier": "SU", + "flightNumber": "0006", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T04:15:00Z", + "local": "2026-04-18T07:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "07:15", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T05:45:00Z", + "local": "2026-04-18T08:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "08:45", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:50:16Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "24567", + "flight": "24567" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "320", + "title": "Airbus A320" + }, + "actualType": { + "type": "320", + "title": "Airbus A320" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "61248013-611d-4f1b-95d8-578f39453796", + "flightId": { + "carrier": "SU", + "flightNumber": "6127", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T05:00:00Z", + "local": "2026-04-18T08:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "08:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T06:25:00Z", + "local": "2026-04-18T09:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:43:35Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "12346" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "338f0428-6021-41e3-8075-809846b2da7d", + "flightId": { + "carrier": "SU", + "flightNumber": "6167", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T06:00:00Z", + "local": "2026-04-18T09:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T07:25:00Z", + "local": "2026-04-18T10:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:50:28Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "45323d08-e068-447d-8f56-f1bb0384028e", + "flightId": { + "carrier": "SU", + "flightNumber": "0010", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T06:45:00Z", + "local": "2026-04-18T09:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:45", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T08:15:00Z", + "local": "2026-04-18T11:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:15", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T23:44:42Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "246", + "flight": "1234567" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "321", + "title": "Airbus A321" + }, + "actualType": { + "type": "320", + "title": "Airbus A320" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "00fc1caa-e07e-4600-a3ce-7e3b5c7bc5f7", + "flightId": { + "carrier": "SU", + "flightNumber": "6213", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T07:00:00Z", + "local": "2026-04-18T10:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T08:25:00Z", + "local": "2026-04-18T11:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:17:08Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "34567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "d393f6d6-7f2b-4ec5-997e-7ba5d0a11c75", + "flightId": { + "carrier": "SU", + "flightNumber": "6057", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T07:30:00Z", + "local": "2026-04-18T10:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T08:55:00Z", + "local": "2026-04-18T11:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:07:07Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "aa928bd4-f8c3-4c98-9a28-d33072d829a7", + "flightId": { + "carrier": "SU", + "flightNumber": "6059", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T08:00:00Z", + "local": "2026-04-18T11:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T09:25:00Z", + "local": "2026-04-18T12:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "12:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T08:26:08Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "de0abf08-2e24-4128-861c-ba9c0eb75236", + "flightId": { + "carrier": "SU", + "flightNumber": "6243", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T09:00:00Z", + "local": "2026-04-18T12:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "12:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T10:25:00Z", + "local": "2026-04-18T13:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "13:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T05:51:58Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "d4b1a66d-5a3c-482a-96a2-32ae3732feba", + "flightId": { + "carrier": "SU", + "flightNumber": "6271", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T10:00:00Z", + "local": "2026-04-18T13:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "13:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T11:25:00Z", + "local": "2026-04-18T14:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "14:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": true, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:49:09Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "9a6fba27-bbb5-4be0-bf3a-92c2ac31846e", + "flightId": { + "carrier": "SU", + "flightNumber": "6855", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T11:00:00Z", + "local": "2026-04-18T14:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "14:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T12:25:00Z", + "local": "2026-04-18T15:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "15:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:24:26Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "123467", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "941dd62e-c130-4a94-9fa6-ced8d30b5189", + "flightId": { + "carrier": "SU", + "flightNumber": "6481", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T12:00:00Z", + "local": "2026-04-18T15:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "15:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T13:25:00Z", + "local": "2026-04-18T16:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:14:15Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "d83de584-37e6-4d3b-918b-8be0430f38a6", + "flightId": { + "carrier": "SU", + "flightNumber": "6497", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T13:00:00Z", + "local": "2026-04-18T16:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T14:25:00Z", + "local": "2026-04-18T17:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:01:29Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "64308c7f-6eeb-429a-850b-84bc6af9a340", + "flightId": { + "carrier": "SU", + "flightNumber": "6515", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T13:30:00Z", + "local": "2026-04-18T16:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T14:55:00Z", + "local": "2026-04-18T17:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:01:29Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "1a0c3e88-d2d4-4b93-8fa8-abe8afad7d95", + "flightId": { + "carrier": "SU", + "flightNumber": "0024", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T14:15:00Z", + "local": "2026-04-18T17:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:15", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T15:45:00Z", + "local": "2026-04-18T18:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:45", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:04:04Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "14567", + "flight": "124567" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "320", + "title": "Airbus A320" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "94c5e8cc-59cb-4fcd-8613-d4f75b7ff2d9", + "flightId": { + "carrier": "SU", + "flightNumber": "6085", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T14:30:00Z", + "local": "2026-04-18T17:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T15:55:00Z", + "local": "2026-04-18T18:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:24:23Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "134567", + "flight": "134567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "8c8a3e3e-61ac-42f4-a164-77747b634b16", + "flightId": { + "carrier": "SU", + "flightNumber": "6519", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T15:00:00Z", + "local": "2026-04-18T18:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T16:25:00Z", + "local": "2026-04-18T19:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:04:32Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "7bd8d525-f652-4199-84e8-893f682c3fe6", + "flightId": { + "carrier": "SU", + "flightNumber": "6089", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T15:30:00Z", + "local": "2026-04-18T18:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T16:55:00Z", + "local": "2026-04-18T19:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:45:04Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "374e20d4-2a3c-4065-8dfb-e17692264a2d", + "flightId": { + "carrier": "SU", + "flightNumber": "6579", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T16:00:00Z", + "local": "2026-04-18T19:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T17:25:00Z", + "local": "2026-04-18T20:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:04:57Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "e39a54f9-a9f4-4fc9-8386-7b4d537f89f3", + "flightId": { + "carrier": "SU", + "flightNumber": "0026", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T16:15:00Z", + "local": "2026-04-18T19:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:15", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T17:45:00Z", + "local": "2026-04-18T20:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:45", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T05:07:12Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "6", + "flight": "13456" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "321", + "title": "Airbus A321" + }, + "actualType": { + "type": "320", + "title": "Airbus A320" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "74aed0e4-f0d9-4cf5-906e-86c64d28c79c", + "flightId": { + "carrier": "SU", + "flightNumber": "6703", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T17:00:00Z", + "local": "2026-04-18T20:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T18:25:00Z", + "local": "2026-04-18T21:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:02:26Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "cb6d641b-cf76-4497-9b5e-01d1cc138bf6", + "flightId": { + "carrier": "SU", + "flightNumber": "6097", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T17:30:00Z", + "local": "2026-04-18T20:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T18:55:00Z", + "local": "2026-04-18T21:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T21:03:40Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "655a7792-16d2-4bc7-bda2-8a6a2af39c26", + "flightId": { + "carrier": "SU", + "flightNumber": "6705", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T18:00:00Z", + "local": "2026-04-18T21:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T19:25:00Z", + "local": "2026-04-18T22:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:02:26Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "bf035cc9-bca7-4c1f-b05e-59383dcb8cf5", + "flightId": { + "carrier": "SU", + "flightNumber": "6707", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T18:30:00Z", + "local": "2026-04-18T21:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T19:55:00Z", + "local": "2026-04-18T22:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:01:29Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "3fdd8a4c-7bd3-4806-9cf8-53c65e2cba97", + "flightId": { + "carrier": "SU", + "flightNumber": "6809", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T19:30:00Z", + "local": "2026-04-18T22:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T20:55:00Z", + "local": "2026-04-18T23:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T04:09:28Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "4b4f638f-8a17-4eeb-8a7f-d3cd42546861", + "flightId": { + "carrier": "SU", + "flightNumber": "6805", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T20:30:00Z", + "local": "2026-04-18T23:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T21:55:00Z", + "local": "2026-04-19T00:55:00+03:00", + "dayChange": { + "value": 1, + "title": "+1" + }, + "localTime": "00:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T08:23:20Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "134567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "a8e7c7b7-f41b-43fd-8cc1-735cd9b4d29c", + "flightId": { + "carrier": "SU", + "flightNumber": "6807", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T20:55:00Z", + "local": "2026-04-18T23:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:55", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T22:20:00Z", + "local": "2026-04-19T01:20:00+03:00", + "dayChange": { + "value": 1, + "title": "+1" + }, + "localTime": "01:20", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T08:45:09Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "9d937359-701f-4e46-bb2f-327e59cee618", + "flightId": { + "carrier": "SU", + "flightNumber": "6699", + "suffix": "", + "date": "2026-04-18" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-18T22:00:00Z", + "local": "2026-04-19T01:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-18T23:25:00Z", + "local": "2026-04-19T02:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "02:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:23:30Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "e0f893a3-8ab1-4762-8dfb-81ad27e8194c", + "flightId": { + "carrier": "SU", + "flightNumber": "0006", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T04:15:00Z", + "local": "2026-04-19T07:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "07:15", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T05:45:00Z", + "local": "2026-04-19T08:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "08:45", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T12:20:30Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "24567", + "flight": "24567" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "320", + "title": "Airbus A320" + }, + "actualType": { + "type": "320", + "title": "Airbus A320" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "4e0cbe27-37f1-4618-88e8-d67afa920e4d", + "flightId": { + "carrier": "SU", + "flightNumber": "6167", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T06:00:00Z", + "local": "2026-04-19T09:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T07:25:00Z", + "local": "2026-04-19T10:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:54:22Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "db0160b6-c8d1-4e7f-b2ae-c2a27d30ae98", + "flightId": { + "carrier": "SU", + "flightNumber": "0010", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T06:45:00Z", + "local": "2026-04-19T09:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:45", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T08:15:00Z", + "local": "2026-04-19T11:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:15", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T04:51:17Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "12567", + "flight": "1234567" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "321", + "title": "Airbus A321" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "9acdd7f0-dc1a-4aea-a11e-8e727abcda43", + "flightId": { + "carrier": "SU", + "flightNumber": "6213", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T07:00:00Z", + "local": "2026-04-19T10:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T08:25:00Z", + "local": "2026-04-19T11:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T08:27:21Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "34567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "cefe3edb-d037-4eea-90ae-dde6cd738827", + "flightId": { + "carrier": "SU", + "flightNumber": "6057", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T07:30:00Z", + "local": "2026-04-19T10:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T08:55:00Z", + "local": "2026-04-19T11:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:06:17Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "c1e260bb-2d1a-49c1-8353-a1d78fe60c47", + "flightId": { + "carrier": "SU", + "flightNumber": "6059", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T08:00:00Z", + "local": "2026-04-19T11:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T09:25:00Z", + "local": "2026-04-19T12:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "12:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T08:42:21Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "69a7fad0-da53-44cc-bde7-69327314e318", + "flightId": { + "carrier": "SU", + "flightNumber": "6243", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T09:00:00Z", + "local": "2026-04-19T12:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "12:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T10:25:00Z", + "local": "2026-04-19T13:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "13:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:04:00Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "5a3bd201-266c-41eb-81f7-642142f0f7ea", + "flightId": { + "carrier": "SU", + "flightNumber": "6041", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T09:30:00Z", + "local": "2026-04-19T12:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "12:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T10:55:00Z", + "local": "2026-04-19T13:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "13:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:14:15Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "7", + "flight": "57" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "c0030b47-b3dc-4270-98e9-880889662a3c", + "flightId": { + "carrier": "SU", + "flightNumber": "6271", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T10:00:00Z", + "local": "2026-04-19T13:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "13:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T11:25:00Z", + "local": "2026-04-19T14:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "14:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T06:38:14Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "a3411804-d0b4-47f3-938d-d2796eb1070e", + "flightId": { + "carrier": "SU", + "flightNumber": "6855", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T11:00:00Z", + "local": "2026-04-19T14:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "14:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T12:25:00Z", + "local": "2026-04-19T15:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "15:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:26:10Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "123467", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "89926c24-d1ad-4f36-b938-80830c61c3be", + "flightId": { + "carrier": "SU", + "flightNumber": "6043", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T11:30:00Z", + "local": "2026-04-19T14:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "14:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T12:55:00Z", + "local": "2026-04-19T15:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "15:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:44:04Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "7", + "flight": "57" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "c10cb830-b120-44a9-a1a5-9f0caeeb38e5", + "flightId": { + "carrier": "SU", + "flightNumber": "6481", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T12:00:00Z", + "local": "2026-04-19T15:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "15:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T13:25:00Z", + "local": "2026-04-19T16:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:36:22Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "158e3a69-10f5-4fe7-a897-3b1061e278a6", + "flightId": { + "carrier": "SU", + "flightNumber": "6497", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T13:00:00Z", + "local": "2026-04-19T16:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T14:25:00Z", + "local": "2026-04-19T17:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:39:13Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "e8ea68c6-69b4-4f23-9376-0c945eb3e824", + "flightId": { + "carrier": "SU", + "flightNumber": "6515", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T13:30:00Z", + "local": "2026-04-19T16:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T14:55:00Z", + "local": "2026-04-19T17:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T15:45:02Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "54d21bd5-adb1-48a8-af38-7c30a292b605", + "flightId": { + "carrier": "SU", + "flightNumber": "0024", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T14:15:00Z", + "local": "2026-04-19T17:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:15", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T15:45:00Z", + "local": "2026-04-19T18:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:45", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T06:31:36Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "14567", + "flight": "124567" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "321", + "title": "Airbus A321" + }, + "actualType": { + "type": "73H", + "title": "Boeing 737-800" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "d099d849-97dd-4599-9d66-c4686435abdc", + "flightId": { + "carrier": "SU", + "flightNumber": "6085", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T14:30:00Z", + "local": "2026-04-19T17:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T15:55:00Z", + "local": "2026-04-19T18:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T23:44:59Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "134567", + "flight": "134567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "a174670d-9f64-477d-bb6a-cfa1b385f592", + "flightId": { + "carrier": "SU", + "flightNumber": "6519", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T15:00:00Z", + "local": "2026-04-19T18:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T16:25:00Z", + "local": "2026-04-19T19:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:02:26Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "a1717d15-995c-4bdf-b2c3-89024b4fa727", + "flightId": { + "carrier": "SU", + "flightNumber": "6089", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T15:30:00Z", + "local": "2026-04-19T18:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T16:55:00Z", + "local": "2026-04-19T19:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T08:47:21Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "7a0cddd3-35dd-4b81-91e6-5d249ab161ec", + "flightId": { + "carrier": "SU", + "flightNumber": "6579", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T16:00:00Z", + "local": "2026-04-19T19:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T17:25:00Z", + "local": "2026-04-19T20:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T06:33:14Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "f8c6f1eb-ebba-4a00-9611-47a73b8d5e50", + "flightId": { + "carrier": "SU", + "flightNumber": "6093", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T16:30:00Z", + "local": "2026-04-19T19:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T17:55:00Z", + "local": "2026-04-19T20:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:43:07Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "234567", + "flight": "23457" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "dbf1204f-9446-49ed-9328-adc4e91ffa1d", + "flightId": { + "carrier": "SU", + "flightNumber": "6703", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T17:00:00Z", + "local": "2026-04-19T20:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T18:25:00Z", + "local": "2026-04-19T21:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:33:08Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "fa0aea69-24bf-40ff-855a-8e4f12083a82", + "flightId": { + "carrier": "SU", + "flightNumber": "6097", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T17:30:00Z", + "local": "2026-04-19T20:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T18:55:00Z", + "local": "2026-04-19T21:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:27:43Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "d6606f7b-b34b-47ab-86c2-6da7027bfaa3", + "flightId": { + "carrier": "SU", + "flightNumber": "6705", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T18:00:00Z", + "local": "2026-04-19T21:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T19:25:00Z", + "local": "2026-04-19T22:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T08:47:21Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "67097b4e-1a8f-4bd9-9343-2923754490b2", + "flightId": { + "carrier": "SU", + "flightNumber": "6707", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T18:30:00Z", + "local": "2026-04-19T21:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T19:55:00Z", + "local": "2026-04-19T22:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:24:26Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "654c1570-3130-4977-97a3-510b288a4890", + "flightId": { + "carrier": "SU", + "flightNumber": "6809", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T19:30:00Z", + "local": "2026-04-19T22:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T20:55:00Z", + "local": "2026-04-19T23:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:35:29Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "363ef8d7-914a-4670-86e1-b8c725537497", + "flightId": { + "carrier": "SU", + "flightNumber": "6805", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T20:30:00Z", + "local": "2026-04-19T23:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T21:55:00Z", + "local": "2026-04-20T00:55:00+03:00", + "dayChange": { + "value": 1, + "title": "+1" + }, + "localTime": "00:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:55:17Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "134567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "77a5ea9a-4a37-4da6-a513-ac4fbf950777", + "flightId": { + "carrier": "SU", + "flightNumber": "6807", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T20:55:00Z", + "local": "2026-04-19T23:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:55", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T22:20:00Z", + "local": "2026-04-20T01:20:00+03:00", + "dayChange": { + "value": 1, + "title": "+1" + }, + "localTime": "01:20", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:55:25Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "6cea19c6-7c55-4c3d-93be-d499755f541f", + "flightId": { + "carrier": "SU", + "flightNumber": "6951", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T21:30:00Z", + "local": "2026-04-20T00:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "00:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T22:55:00Z", + "local": "2026-04-20T01:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T23:01:57Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1246", + "flight": "1246" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "aa5278bc-b464-4175-bffb-a516626b4732", + "flightId": { + "carrier": "SU", + "flightNumber": "6699", + "suffix": "", + "date": "2026-04-19" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-19T22:00:00Z", + "local": "2026-04-20T01:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-19T23:25:00Z", + "local": "2026-04-20T02:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "02:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T06:41:03Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "1041c8de-3a15-4f7e-9160-4c23a600e11f", + "flightId": { + "carrier": "SU", + "flightNumber": "0022", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T02:30:00Z", + "local": "2026-04-20T05:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "05:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T03:55:00Z", + "local": "2026-04-20T06:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "06:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T05:35:19Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "1", + "flight": "1" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "320", + "title": "Airbus A320" + }, + "actualType": { + "type": "320", + "title": "Airbus A320" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "2e1542aa-4fdb-4073-82a6-911a46016d20", + "flightId": { + "carrier": "SU", + "flightNumber": "6039", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T04:00:00Z", + "local": "2026-04-20T07:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "07:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T05:25:00Z", + "local": "2026-04-20T08:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "08:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:25:15Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "13", + "flight": "13" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "6b1676b3-a36e-4a6b-94b0-11f21927581e", + "flightId": { + "carrier": "SU", + "flightNumber": "6127", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T05:00:00Z", + "local": "2026-04-20T08:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "08:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T06:25:00Z", + "local": "2026-04-20T09:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:00:22Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "0c93697a-1929-4561-831d-7e5dce22645d", + "flightId": { + "carrier": "SU", + "flightNumber": "6167", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T06:00:00Z", + "local": "2026-04-20T09:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T07:25:00Z", + "local": "2026-04-20T10:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:49:09Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU" + }, + "status": "Scheduled", + "id": "0c82846e-c9f1-4e5f-bc9b-6f1109956c3a", + "flightId": { + "carrier": "SU", + "flightNumber": "0010", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T06:45:00Z", + "local": "2026-04-20T09:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:45", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T08:15:00Z", + "local": "2026-04-20T11:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:15", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T05:43:40Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU" + }, + "daysOfWeek": { + "current": "12567", + "flight": "1234567" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "32B", + "title": "Airbus A321" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "381310c4-530b-46af-b772-8a32f56f7343", + "flightId": { + "carrier": "SU", + "flightNumber": "6057", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T07:30:00Z", + "local": "2026-04-20T10:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T08:55:00Z", + "local": "2026-04-20T11:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:43:35Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "5a549fbc-79f2-4d70-8d6e-4c9205d34868", + "flightId": { + "carrier": "SU", + "flightNumber": "6059", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T08:00:00Z", + "local": "2026-04-20T11:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T09:25:00Z", + "local": "2026-04-20T12:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "12:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T08:04:27Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "82ffc06c-0b97-44ef-9e0c-843e067949c4", + "flightId": { + "carrier": "SU", + "flightNumber": "6243", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T09:00:00Z", + "local": "2026-04-20T12:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "12:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T10:25:00Z", + "local": "2026-04-20T13:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "13:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:07:07Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "e2ea941a-7515-4f6a-92c5-ee128902072c", + "flightId": { + "carrier": "SU", + "flightNumber": "6271", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T10:00:00Z", + "local": "2026-04-20T13:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "13:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T11:25:00Z", + "local": "2026-04-20T14:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "14:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T10:03:13Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "c8d766ec-7ece-4fc6-af81-ee65e0ef70ed", + "flightId": { + "carrier": "SU", + "flightNumber": "6855", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T11:00:00Z", + "local": "2026-04-20T14:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "14:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T12:25:00Z", + "local": "2026-04-20T15:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "15:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:07:12Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "123467", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "659f73ee-8017-4a53-8903-5d40d2d0a7b6", + "flightId": { + "carrier": "SU", + "flightNumber": "6481", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T12:00:00Z", + "local": "2026-04-20T15:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "15:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T13:25:00Z", + "local": "2026-04-20T16:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T08:43:51Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "eccf1d05-4af9-455f-a571-fb92260aed99", + "flightId": { + "carrier": "SU", + "flightNumber": "6497", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T13:00:00Z", + "local": "2026-04-20T16:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T14:25:00Z", + "local": "2026-04-20T17:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T14:51:34Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "8271b001-d74b-450d-aae2-749423860aae", + "flightId": { + "carrier": "SU", + "flightNumber": "6515", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T13:30:00Z", + "local": "2026-04-20T16:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T14:55:00Z", + "local": "2026-04-20T17:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T06:43:49Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "123467" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU" + }, + "status": "Scheduled", + "id": "8e60e5da-f356-4d27-903e-4379183d79ed", + "flightId": { + "carrier": "SU", + "flightNumber": "0024", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T14:15:00Z", + "local": "2026-04-20T17:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:15", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T15:45:00Z", + "local": "2026-04-20T18:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:45", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T09:29:51Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU" + }, + "daysOfWeek": { + "current": "14567", + "flight": "124567" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "321", + "title": "Airbus A321" + }, + "actualType": { + "type": "320", + "title": "Airbus A320" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "3c8534b9-f565-46de-a252-8d4846cf25c2", + "flightId": { + "carrier": "SU", + "flightNumber": "6085", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T14:30:00Z", + "local": "2026-04-20T17:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T15:55:00Z", + "local": "2026-04-20T18:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-15T15:43:10Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "134567", + "flight": "134567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "978177f9-6706-45db-b3ae-34038d6f8742", + "flightId": { + "carrier": "SU", + "flightNumber": "6519", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T15:00:00Z", + "local": "2026-04-20T18:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T16:25:00Z", + "local": "2026-04-20T19:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-15T10:52:43Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "72c5021b-0dc8-4aa1-8122-79f0d646c2fa", + "flightId": { + "carrier": "SU", + "flightNumber": "6089", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T15:30:00Z", + "local": "2026-04-20T18:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T16:55:00Z", + "local": "2026-04-20T19:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T11:42:27Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "0b84946a-c9d9-488a-ae92-bb0e3cac9202", + "flightId": { + "carrier": "SU", + "flightNumber": "0026", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:20:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T16:25:00Z", + "local": "2026-04-20T19:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:25", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T17:45:00Z", + "local": "2026-04-20T20:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:45", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T11:10:02Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "1", + "flight": "1345" + }, + "flyingTime": "01:20:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "333", + "title": "Airbus A330-300" + }, + "actualType": { + "type": "333", + "title": "Airbus A330-300" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "ed24ccd9-2ef2-4cb8-abfd-887d9324903a", + "flightId": { + "carrier": "SU", + "flightNumber": "6703", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T17:00:00Z", + "local": "2026-04-20T20:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T18:25:00Z", + "local": "2026-04-20T21:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-15T12:54:10Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "123467" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "9385c98f-a562-4ad2-b50e-8289c7b4f45d", + "flightId": { + "carrier": "SU", + "flightNumber": "6097", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T17:30:00Z", + "local": "2026-04-20T20:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T18:55:00Z", + "local": "2026-04-20T21:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T08:43:51Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "ec29161c-51dc-4d08-a8de-0db1853e9e72", + "flightId": { + "carrier": "SU", + "flightNumber": "6705", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T18:00:00Z", + "local": "2026-04-20T21:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T19:25:00Z", + "local": "2026-04-20T22:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-15T23:50:28Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "cd3c382c-fbfc-4029-9080-a08ac0440568", + "flightId": { + "carrier": "SU", + "flightNumber": "6707", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T18:30:00Z", + "local": "2026-04-20T21:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T19:55:00Z", + "local": "2026-04-20T22:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T06:43:49Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "ea6aa180-968c-42cf-951d-25e5830f4b48", + "flightId": { + "carrier": "SU", + "flightNumber": "6809", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T19:30:00Z", + "local": "2026-04-20T22:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T20:55:00Z", + "local": "2026-04-20T23:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-13T07:04:35Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "28ee860e-8df9-4e55-9712-abdd5686daad", + "flightId": { + "carrier": "SU", + "flightNumber": "6805", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T20:30:00Z", + "local": "2026-04-20T23:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T21:55:00Z", + "local": "2026-04-21T00:55:00+03:00", + "dayChange": { + "value": 1, + "title": "+1" + }, + "localTime": "00:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:55:17Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "057ec467-ee93-4a5c-9cf9-ae149c46c0cc", + "flightId": { + "carrier": "SU", + "flightNumber": "6807", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T20:55:00Z", + "local": "2026-04-20T23:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:55", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T22:20:00Z", + "local": "2026-04-21T01:20:00+03:00", + "dayChange": { + "value": 1, + "title": "+1" + }, + "localTime": "01:20", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-13T07:04:35Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "123456" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "d75b5e72-5fac-4c2f-b22e-93336eadbdb9", + "flightId": { + "carrier": "SU", + "flightNumber": "6951", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T21:30:00Z", + "local": "2026-04-21T00:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "00:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T22:55:00Z", + "local": "2026-04-21T01:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-13T07:04:38Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1246", + "flight": "1246" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "29db6a6e-6b5b-4ff8-8b2f-aa291401cb22", + "flightId": { + "carrier": "SU", + "flightNumber": "6699", + "suffix": "", + "date": "2026-04-20" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-20T22:00:00Z", + "local": "2026-04-21T01:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "01:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-20T23:25:00Z", + "local": "2026-04-21T02:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "02:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T16:43:42Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU" + }, + "status": "Scheduled", + "id": "e9fee56b-4d36-4f68-b059-9b175ec167be", + "flightId": { + "carrier": "SU", + "flightNumber": "0006", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T04:15:00Z", + "local": "2026-04-21T07:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "07:15", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T05:45:00Z", + "local": "2026-04-21T08:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "08:45", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T00:07:51Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU" + }, + "daysOfWeek": { + "current": "24567", + "flight": "2456" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "320", + "title": "Airbus A320" + }, + "actualType": { + "type": "320", + "title": "Airbus A320" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "a3fc91dc-0762-41dd-8a7c-67ab7d30bc7a", + "flightId": { + "carrier": "SU", + "flightNumber": "6127", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T05:00:00Z", + "local": "2026-04-21T08:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "08:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T06:25:00Z", + "local": "2026-04-21T09:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T15:44:03Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "554468d4-f0af-4cea-850e-15e2cfefe7de", + "flightId": { + "carrier": "SU", + "flightNumber": "6167", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T06:00:00Z", + "local": "2026-04-21T09:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T07:25:00Z", + "local": "2026-04-21T10:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:07:12Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU" + }, + "status": "Scheduled", + "id": "855ed00e-51b4-4595-b541-042adaa28785", + "flightId": { + "carrier": "SU", + "flightNumber": "0010", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:30:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T06:45:00Z", + "local": "2026-04-21T09:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "09:45", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T08:15:00Z", + "local": "2026-04-21T11:15:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:15", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T14:11:26Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU" + }, + "daysOfWeek": { + "current": "12567", + "flight": "1234567" + }, + "flyingTime": "01:30:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "320", + "title": "Airbus A320" + }, + "actualType": { + "type": "320", + "title": "Airbus A320" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "184d6891-5267-4864-8d05-08ef82451570", + "flightId": { + "carrier": "SU", + "flightNumber": "6057", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T07:30:00Z", + "local": "2026-04-21T10:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "10:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T08:55:00Z", + "local": "2026-04-21T11:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T07:05:13Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "297150a6-016f-4de6-98a4-6361c7b0500f", + "flightId": { + "carrier": "SU", + "flightNumber": "6059", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T08:00:00Z", + "local": "2026-04-21T11:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "11:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T09:25:00Z", + "local": "2026-04-21T12:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "12:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T16:43:42Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "8e62f71d-de72-472c-9b42-0d7a413b4236", + "flightId": { + "carrier": "SU", + "flightNumber": "6243", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T09:00:00Z", + "local": "2026-04-21T12:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "12:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T10:25:00Z", + "local": "2026-04-21T13:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "13:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T07:05:16Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "1e9f4be2-2f3a-4061-9a47-ab6e9afd3099", + "flightId": { + "carrier": "SU", + "flightNumber": "6271", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T10:00:00Z", + "local": "2026-04-21T13:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "13:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T11:25:00Z", + "local": "2026-04-21T14:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "14:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T08:43:51Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "744194d9-2660-4b4b-bf2c-4c8b1e9144d8", + "flightId": { + "carrier": "SU", + "flightNumber": "6855", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T11:00:00Z", + "local": "2026-04-21T14:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "14:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T12:25:00Z", + "local": "2026-04-21T15:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "15:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:07:17Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "123467", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "f55e3ab1-90bf-4b1b-902a-ac44dce03465", + "flightId": { + "carrier": "SU", + "flightNumber": "6481", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T12:00:00Z", + "local": "2026-04-21T15:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "15:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T13:25:00Z", + "local": "2026-04-21T16:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T14:51:37Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "6a2c1d0c-ea49-4a93-8dda-dfbf35568f59", + "flightId": { + "carrier": "SU", + "flightNumber": "6497", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T13:00:00Z", + "local": "2026-04-21T16:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T14:25:00Z", + "local": "2026-04-21T17:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T16:43:42Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "d99d23f9-1b85-49c2-ad75-623aef6bc9e8", + "flightId": { + "carrier": "SU", + "flightNumber": "6515", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T13:30:00Z", + "local": "2026-04-21T16:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "16:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T14:55:00Z", + "local": "2026-04-21T17:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T09:42:33Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "123467" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU" + }, + "status": "Scheduled", + "id": "d62f882a-db44-401c-8689-e968fdfe9d9f", + "flightId": { + "carrier": "SU", + "flightNumber": "0024", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T14:20:00Z", + "local": "2026-04-21T17:20:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "17:20", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T15:45:00Z", + "local": "2026-04-21T18:45:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:45", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T14:11:28Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU" + }, + "daysOfWeek": { + "current": "2", + "flight": "124567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "320", + "title": "Airbus A320" + }, + "actualType": { + "type": "320", + "title": "Airbus A320" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "M", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "M", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "c3f06dc4-1423-436f-8f75-bb13255fbb20", + "flightId": { + "carrier": "SU", + "flightNumber": "6519", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T15:00:00Z", + "local": "2026-04-21T18:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T16:25:00Z", + "local": "2026-04-21T19:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T07:05:25Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "status": "Scheduled", + "id": "2b01809a-cd3a-463a-8a5a-83b2917f7a9a", + "flightId": { + "carrier": "SU", + "flightNumber": "6089", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T15:30:00Z", + "local": "2026-04-21T18:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "18:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T16:55:00Z", + "local": "2026-04-21T19:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T07:05:13Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "SU", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "141036b7-914e-492d-b985-55dc52910584", + "flightId": { + "carrier": "SU", + "flightNumber": "6579", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T16:00:00Z", + "local": "2026-04-21T19:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T17:25:00Z", + "local": "2026-04-21T20:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:07:17Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "73afc00a-d361-426a-86ce-ac9320041a2f", + "flightId": { + "carrier": "SU", + "flightNumber": "6093", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T16:30:00Z", + "local": "2026-04-21T19:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "19:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T17:55:00Z", + "local": "2026-04-21T20:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-15T10:52:48Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "234567", + "flight": "234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "2727c77b-eaa5-4468-8f03-1def1f6d4f31", + "flightId": { + "carrier": "SU", + "flightNumber": "6703", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T17:00:00Z", + "local": "2026-04-21T20:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T18:25:00Z", + "local": "2026-04-21T21:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T14:51:37Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "123467" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "86029f36-c606-443e-a0ad-628d99f3b060", + "flightId": { + "carrier": "SU", + "flightNumber": "6097", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T17:30:00Z", + "local": "2026-04-21T20:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "20:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T18:55:00Z", + "local": "2026-04-21T21:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T09:42:33Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "fe3b40c8-ac5f-460f-a313-60261b7ba578", + "flightId": { + "carrier": "SU", + "flightNumber": "6705", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T18:00:00Z", + "local": "2026-04-21T21:00:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:00", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T19:25:00Z", + "local": "2026-04-21T22:25:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:25", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-15T15:56:45Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "S" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "c5f74f57-6dbf-4337-be81-13f30e75f722", + "flightId": { + "carrier": "SU", + "flightNumber": "6707", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T18:30:00Z", + "local": "2026-04-21T21:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "21:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T19:55:00Z", + "local": "2026-04-21T22:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-16T09:42:33Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "5610903f-982f-404b-8d58-3df9698be943", + "flightId": { + "carrier": "SU", + "flightNumber": "6809", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T19:30:00Z", + "local": "2026-04-21T22:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "22:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T20:55:00Z", + "local": "2026-04-21T23:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-17T07:07:17Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "063e6b6d-a6c6-46b9-9776-eeac1288ff7e", + "flightId": { + "carrier": "SU", + "flightNumber": "6805", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T20:30:00Z", + "local": "2026-04-21T23:30:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:30", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T21:55:00Z", + "local": "2026-04-22T00:55:00+03:00", + "dayChange": { + "value": 1, + "title": "+1" + }, + "localTime": "00:55", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-15T07:50:54Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "1234567" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + }, + { + "routeType": "Direct", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "status": "Scheduled", + "id": "fc43a3f3-6f44-45e1-83d7-18becfd63ef7", + "flightId": { + "carrier": "SU", + "flightNumber": "6807", + "suffix": "", + "date": "2026-04-21" + }, + "flyingTime": "01:25:00", + "leg": { + "departure": { + "scheduled": { + "city": "Москва", + "airport": "Шереметьево", + "countryCode": "RU", + "cityCode": "MOW", + "airportCode": "SVO" + }, + "terminal": "B", + "times": { + "scheduledDeparture": { + "utc": "2026-04-21T20:55:00Z", + "local": "2026-04-21T23:55:00+03:00", + "dayChange": { + "value": 0, + "title": "" + }, + "localTime": "23:55", + "tzOffset": 180.0 + } + } + }, + "arrival": { + "scheduled": { + "city": "Санкт-Петербург", + "airport": "Пулково", + "countryCode": "RU", + "cityCode": "LED", + "airportCode": "LED" + }, + "terminal": "1", + "times": { + "scheduledArrival": { + "utc": "2026-04-21T22:20:00Z", + "local": "2026-04-22T01:20:00+03:00", + "dayChange": { + "value": 1, + "title": "+1" + }, + "localTime": "01:20", + "tzOffset": 180.0 + } + } + }, + "flags": { + "checkinAvailable": false, + "purchaseAvailable": true, + "statusAvailable": false, + "routeChanged": false, + "returnToAirport": false + }, + "updated": "2026-04-14T07:05:32Z", + "status": "Scheduled", + "operatingBy": { + "scheduled": "FV", + "operators": [] + }, + "daysOfWeek": { + "current": "1234567", + "flight": "123456" + }, + "flyingTime": "01:25:00", + "equipment": { + "serviceType": { + "code": "J" + }, + "aircraft": { + "scheduled": { + "type": "SU9", + "title": "Sukhoi SuperJet 100" + }, + "actualType": { + "title": "" + } + }, + "serviceClasses": [ + { + "code": "Economy", + "mealTypes": "R", + "canBookPremium": true + }, + { + "code": "Comfort", + "mealTypes": "R", + "canBookPremium": false + }, + { + "code": "Business", + "mealTypes": "R,M", + "canBookPremium": true + } + ], + "bookingClasses": { + "codes": "J,O,C,I,Z,Y,X,D,S,B,M,U,P,K,H,L,Q,T,E,N,R,G,V" + } + }, + "trafficRestrictions": [ + "" + ] + } + } +] \ No newline at end of file diff --git a/tests/integration/api-shapes.test.ts b/tests/integration/api-shapes.test.ts new file mode 100644 index 00000000..dbbe07ee --- /dev/null +++ b/tests/integration/api-shapes.test.ts @@ -0,0 +1,192 @@ +/** + * Validates that the API layer can parse real responses captured from the + * test environment on 2026-04-17. Each test wires a real fixture into a + * mock fetch, then runs the production API function and asserts the + * parsed value has the structure the UI relies on. + * + * These tests catch drift between the declared TS types and the actual + * API contract. To refresh fixtures: `AEROFLOT_API_AUTH=user:pass + * ./scripts/fetch-api-fixtures.sh`. + */ + +import { describe, it, expect, vi } from "vitest"; +import { ApiClient } from "@/shared/api/client"; +import { searchFlights, getFlightDetails, getCalendarDays } from "@/features/online-board/api"; +import { searchSchedule, getScheduleDetails, getScheduleCalendarDays } from "@/features/schedule/api"; +import { searchDestinations, getFlightsMapCalendar } from "@/features/flights-map/api"; +import { getPopularRequests } from "@/features/popular-requests/api"; +import { fetchDictionaries } from "@/shared/dictionaries/api"; +import { fixtures } from "../fixtures/api"; + +function clientWith(body: unknown, status = 200): { client: ApiClient; fetchMock: ReturnType } { + const fetchMock = vi.fn().mockResolvedValue( + new Response(JSON.stringify(body), { + status, + headers: { "Content-Type": "application/json" }, + }), + ); + const client = new ApiClient({ + baseUrl: "https://api.test.com", + locale: "ru", + fetchImpl: fetchMock, + retry: { maxRetries: 0 }, + }); + return { client, fetchMock }; +} + +describe("online-board API against real fixtures", () => { + it("searchFlights parses a by-route response with multiple flights", async () => { + const { client } = clientWith(fixtures.boardByRoute); + const result = await searchFlights(client, { + dateFrom: "2026-04-17", + dateTo: "2026-04-18", + departure: "SVO", + arrival: "LED", + }); + expect(result.data.routes.length).toBeGreaterThan(0); + expect(result.data.partners).toBeInstanceOf(Array); + const first = result.data.routes[0]!; + expect(first.routeType).toMatch(/Direct|MultiLeg/); + expect(first.flightId.carrier).toBe("SU"); + }); + + it("searchFlights parses a by-flight-number response", async () => { + const { client } = clientWith(fixtures.boardByFlight); + const result = await searchFlights(client, { + dateFrom: "2026-04-17", + dateTo: "2026-04-18", + flightNumber: "SU6951", + }); + expect(result.data.routes[0]!.flightId.flightNumber).toBe("6951"); + }); + + it("getFlightDetails parses the onlineboard/details response", async () => { + const { client } = clientWith(fixtures.onlineboardDetails); + const result = await getFlightDetails(client, { + flights: "SU6951", + dates: "2026-04-17", + }); + expect(result.data.routes.length).toBeGreaterThan(0); + }); + + it("getCalendarDays parses bitmask into date list", async () => { + const { client } = clientWith(fixtures.boardDaysFlight); + const days = await getCalendarDays(client, { + date: "2026-04-17", + searchType: "flight", + flightNumber: "SU6951", + }); + expect(days.length).toBeGreaterThan(0); + expect(days[0]).toMatch(/^\d{8}$/); + }); +}); + +describe("schedule API against real fixtures", () => { + it("searchSchedule parses an array response", async () => { + const { client } = clientWith(fixtures.scheduleSearch); + const result = await searchSchedule(client, { + departure: "SVO", + arrival: "LED", + dateFrom: "2026-04-18", + dateTo: "2026-04-22", + }); + expect(Array.isArray(result)).toBe(true); + expect(result.length).toBeGreaterThan(0); + }); + + it("getScheduleDetails parses a details response", async () => { + const { client } = clientWith(fixtures.scheduleDetails); + const result = await getScheduleDetails(client, { + flights: ["SU6951"], + dates: ["2026-04-17"], + departure: "SVO", + arrival: "LED", + }); + expect(result.data).toBeDefined(); + }); + + it("getScheduleCalendarDays parses the days response", async () => { + const { client } = clientWith(fixtures.scheduleDaysRoute); + const days = await getScheduleCalendarDays(client, { + date: "20260417", + departure: "SVO", + arrival: "LED", + connections: false, + }); + expect(days).toBeInstanceOf(Array); + }); +}); + +describe("flights-map API against real fixtures", () => { + it("searchDestinations parses the destinations response", async () => { + const { client } = clientWith(fixtures.destinationsFrom); + const result = await searchDestinations(client, { + departure: "SVO", + dateFrom: "2026-04-18", + dateTo: "2026-04-22", + connections: 0, + }); + expect(result.data.routes).toBeInstanceOf(Array); + expect(result.data.routes.length).toBeGreaterThan(0); + const first = result.data.routes[0]!; + expect(first.route).toBeInstanceOf(Array); + expect(typeof first.isDirect).toBe("boolean"); + }); + + it("getFlightsMapCalendar parses the days bitmap", async () => { + const { client } = clientWith(fixtures.mapDaysRoute); + const days = await getFlightsMapCalendar(client, { + date: "20260417", + departure: "SVO", + arrival: "LED", + connections: false, + }); + expect(days).toBeInstanceOf(Array); + }); +}); + +describe("popular-requests API against real fixture", () => { + it("getPopularRequests returns a list of discriminated requests", async () => { + const { client } = clientWith(fixtures.popularRequests); + const result = await getPopularRequests(client); + expect(result.length).toBeGreaterThan(0); + for (const req of result) { + expect(["FlightNumber", "Route", "RouteWithBack", "Departure", "Arrival"]).toContain(req.mode); + expect(["Schedule", "Onlineboard"]).toContain(req.type); + } + }); +}); + +describe("dictionaries API against real fixtures", () => { + it("fetchDictionaries parses all four endpoints", async () => { + const calls = [ + fixtures.dictionaryRegions, + fixtures.dictionaryCountries, + fixtures.dictionaryCities, + fixtures.dictionaryAirports, + ]; + let i = 0; + const fetchMock = vi.fn().mockImplementation(() => + Promise.resolve( + new Response(JSON.stringify(calls[i++]!), { + status: 200, + headers: { "Content-Type": "application/json" }, + }), + ), + ); + const client = new ApiClient({ + baseUrl: "https://api.test.com", + locale: "ru", + fetchImpl: fetchMock, + retry: { maxRetries: 0 }, + }); + + const result = await fetchDictionaries(client); + expect(result.regions.length).toBeGreaterThan(0); + expect(result.countries.length).toBeGreaterThan(0); + expect(result.cities.length).toBeGreaterThan(0); + expect(result.airports.length).toBeGreaterThan(0); + expect(result.regions[0]!.title).toBeTypeOf("object"); + expect(result.airports[0]!.code).toBeTypeOf("string"); + }); +}); diff --git a/tests/integration/online-board/error-handling.test.tsx b/tests/integration/online-board/error-handling.test.tsx index bd2aab63..430865ab 100644 --- a/tests/integration/online-board/error-handling.test.tsx +++ b/tests/integration/online-board/error-handling.test.tsx @@ -64,6 +64,10 @@ vi.mock("@/features/online-board/hooks/useCalendarDays.js", () => ({ }), })); +vi.mock("@/shared/dictionaries/index.js", () => ({ + useDictionaries: () => ({ dictionaries: null, loading: false, error: null }), +})); + const mockUseFlightDetails = vi.fn(); vi.mock("@/features/online-board/hooks/useFlightDetails.js", () => ({ useFlightDetails: (...args: unknown[]) => mockUseFlightDetails(...args), diff --git a/tests/integration/online-board/flight-search.test.tsx b/tests/integration/online-board/flight-search.test.tsx index df62133b..d236d05a 100644 --- a/tests/integration/online-board/flight-search.test.tsx +++ b/tests/integration/online-board/flight-search.test.tsx @@ -60,6 +60,10 @@ vi.mock("@/features/online-board/hooks/useCalendarDays.js", () => ({ useCalendarDays: (...args: unknown[]) => mockUseCalendarDays(...args), })); +vi.mock("@/shared/dictionaries/index.js", () => ({ + useDictionaries: () => ({ dictionaries: null, loading: false, error: null }), +})); + // --------------------------------------------------------------------------- // Helpers // ---------------------------------------------------------------------------