{"status":"ok","checked_at":"2026-08-15T12:01:57+00:00","stale_tiers":[],"tiers":[{"job":"tier1_calendar_scan","state":"ok","last_success_at":"2026-08-14T01:13:54+00:00","age_hours":34.8},{"job":"tier2_combine","state":"ok","last_success_at":"2026-08-14T08:25:54+00:00","age_hours":27.6},{"job":"tier3_confirm","state":"ok","last_success_at":"2026-08-14T08:26:07+00:00","age_hours":27.6}],"providers":[{"provider":"airbaltic","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:11+00:00","last_failure_at":null,"last_error":null},{"provider":"aircaraibes","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:14+00:00","last_failure_at":null,"last_error":null},{"provider":"airnz","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:12+00:00","last_failure_at":null,"last_error":null},{"provider":"akasa","circuit":"open","circuit_open_until":"2026-08-15T12:22:17+00:00","consecutive_failures":8,"last_success_at":"2026-08-15T03:53:21+00:00","last_failure_at":"2026-08-15T11:22:17+00:00","last_error":"ProviderUnavailableError: akasa failed after 3 attempts: HTTP 403"},{"provider":"auric","circuit":"closed","circuit_open_until":null,"consecutive_failures":1,"last_success_at":"2026-08-15T11:51:40+00:00","last_failure_at":"2026-08-15T11:58:38+00:00","last_error":"ProviderUnavailableError: auric answered 200 with non-JSON: '<html>\\r <head>\\r <META NAME=\"robots\" CONTENT=\"noindex,nofollow\">\\r <script src=\"/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3\">\\r </script>\\r <body>\\r </bo' (Expecting value: line 1 column 1 (char 0))"},{"provider":"avior","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:27+00:00","last_failure_at":null,"last_error":null},{"provider":"bluebird","circuit":"closed","circuit_open_until":null,"consecutive_failures":1,"last_success_at":"2026-08-15T11:51:12+00:00","last_failure_at":"2026-08-15T11:58:38+00:00","last_error":"ProviderUnavailableError: bluebird answered 200 with non-JSON: '<html>\\r <head>\\r <META NAME=\"robots\" CONTENT=\"noindex,nofollow\">\\r <script src=\"/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3\">\\r </script>\\r <body>\\r </bo' (Expecting value: line 1 column 1 (char 0))"},{"provider":"coastal","circuit":"closed","circuit_open_until":null,"consecutive_failures":1,"last_success_at":"2026-08-15T11:52:38+00:00","last_failure_at":"2026-08-15T11:58:39+00:00","last_error":"ProviderUnavailableError: coastal answered 200 with non-JSON: '<html>\\r <head>\\r <META NAME=\"robots\" CONTENT=\"noindex,nofollow\">\\r <script src=\"/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3\">\\r </script>\\r <body>\\r </bo' (Expecting value: line 1 column 1 (char 0))"},{"provider":"easyjet","circuit":"open","circuit_open_until":"2026-08-15T12:21:45+00:00","consecutive_failures":8,"last_success_at":"2026-08-15T03:52:59+00:00","last_failure_at":"2026-08-15T11:21:45+00:00","last_error":"ProviderUnavailableError: easyjet failed after 4 attempts: HTTP 403"},{"provider":"faster_flights","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:48:47+00:00","last_failure_at":"2026-08-15T11:30:07+00:00","last_error":"ProviderUnavailableError: faster_flights failed after 4 attempts: Extra data: line 1 column 234 (char 233)"},{"provider":"fixture","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-13T11:47:27+00:00","last_failure_at":null,"last_error":null},{"provider":"flightlink","circuit":"closed","circuit_open_until":null,"consecutive_failures":1,"last_success_at":"2026-08-15T11:53:06+00:00","last_failure_at":"2026-08-15T11:58:40+00:00","last_error":"ProviderUnavailableError: flightlink answered 200 with non-JSON: '<html>\\r <head>\\r <META NAME=\"robots\" CONTENT=\"noindex,nofollow\">\\r <script src=\"/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3\">\\r </script>\\r <body>\\r </bo' (Expecting value: line 1 column 1 (char 0))"},{"provider":"flysafair","circuit":"open","circuit_open_until":"2026-08-15T12:23:12+00:00","consecutive_failures":8,"last_success_at":null,"last_failure_at":"2026-08-15T11:23:12+00:00","last_error":"ProviderUnavailableError: flysafair failed after 3 attempts: HTTPStatusError: Client error '400 Bad Request' for url 'https://api-production-safair-booksecure.ezyflight.se/api/v1/Availability/FindLowestFare'\nFor more information check: https://developer.mozilla"},{"provider":"greaterbay","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:51+00:00","last_failure_at":"2026-08-14T21:46:49+00:00","last_error":"ProviderUnavailableError: greaterbay failed after 3 attempts: RemoteProtocolError: Server disconnected without sending a response."},{"provider":"hkexpress","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:40+00:00","last_failure_at":null,"last_error":null},{"provider":"jal","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:38+00:00","last_failure_at":null,"last_error":null},{"provider":"kenya_airways","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:53+00:00","last_failure_at":null,"last_error":null},{"provider":"krasavia","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:25+00:00","last_failure_at":null,"last_error":null},{"provider":"lot","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:29+00:00","last_failure_at":"2026-08-14T22:52:29+00:00","last_error":"ProviderUnavailableError: lot failed after 3 attempts: ConnectError: [Errno 8] nodename nor servname provided, or not known"},{"provider":"malaysiaairlines","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:38+00:00","last_failure_at":null,"last_error":null},{"provider":"manta","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:59:11+00:00","last_failure_at":null,"last_error":null},{"provider":"nokair","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:50+00:00","last_failure_at":null,"last_error":null},{"provider":"nordstar","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:27+00:00","last_failure_at":null,"last_error":null},{"provider":"norse","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:11+00:00","last_failure_at":null,"last_error":null},{"provider":"redwings","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:23+00:00","last_failure_at":null,"last_error":null},{"provider":"ruili","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:13+00:00","last_failure_at":null,"last_error":null},{"provider":"ryanair","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:38+00:00","last_failure_at":"2026-08-13T11:30:35+00:00","last_error":"ProviderUnavailableError: ryanair failed after 3 attempts: [Errno 8] nodename nor servname provided, or not known"},{"provider":"safarilink","circuit":"closed","circuit_open_until":null,"consecutive_failures":1,"last_success_at":"2026-08-15T11:52:09+00:00","last_failure_at":"2026-08-15T11:58:39+00:00","last_error":"ProviderUnavailableError: safarilink answered 200 with non-JSON: '<html>\\r <head>\\r <META NAME=\"robots\" CONTENT=\"noindex,nofollow\">\\r <script src=\"/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3\">\\r </script>\\r <body>\\r </bo' (Expecting value: line 1 column 1 (char 0))"},{"provider":"shandong","circuit":"open","circuit_open_until":"2026-08-15T12:58:10+00:00","consecutive_failures":15,"last_success_at":null,"last_failure_at":"2026-08-15T11:58:10+00:00","last_error":"ProviderUnavailableError: shandong failed after 3 attempts: HTTPStatusError: Client error '400 Bad Request' for url 'https://flights.sda.cn/tRtApi/flightCache/calendarSearchCust?from=BHX&to=PLQ&departureDate=2026-09-05&returnDate=2027-07-11&fromType=AIRPORT&to"},{"provider":"shirak","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:28+00:00","last_failure_at":"2026-08-15T07:45:31+00:00","last_error":"ProviderUnavailableError: shirak failed after 3 attempts: ConnectTimeout: timed out"},{"provider":"skymark","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:39+00:00","last_failure_at":null,"last_error":null},{"provider":"somon","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:22+00:00","last_failure_at":"2026-08-15T07:35:03+00:00","last_error":"ProviderUnavailableError: somon failed after 3 attempts: ConnectTimeout: timed out"},{"provider":"tarom","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:52+00:00","last_failure_at":"2026-08-15T10:54:01+00:00","last_error":"ProviderUnavailableError: tarom failed after 3 attempts: HTTP 429"},{"provider":"tianjin","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:56+00:00","last_failure_at":null,"last_error":null},{"provider":"tigerair","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:48+00:00","last_failure_at":null,"last_error":null},{"provider":"tunisair","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:38+00:00","last_failure_at":null,"last_error":null},{"provider":"tus","circuit":"closed","circuit_open_until":null,"consecutive_failures":1,"last_success_at":"2026-08-15T11:50:44+00:00","last_failure_at":"2026-08-15T11:58:38+00:00","last_error":"ProviderUnavailableError: tus answered 200 with non-JSON: '<html>\\r <head>\\r <META NAME=\"robots\" CONTENT=\"noindex,nofollow\">\\r <script src=\"/_Incapsula_Resource?SWJIYLWA=5074a744e2e3d891814e9a2dace20bd4,719d34d31c8e3a6e6fffd425f7e032f3\">\\r </script>\\r <body>\\r </bo' (Expecting value: line 1 column 1 (char 0))"},{"provider":"valuejet","circuit":"open","circuit_open_until":"2026-08-15T12:58:20+00:00","consecutive_failures":14,"last_success_at":null,"last_failure_at":"2026-08-15T11:58:20+00:00","last_error":"ProviderUnavailableError: valuejet failed after 3 attempts: HTTPStatusError: Client error '400 Bad Request' for url 'https://api.flyvaluejet.com/ibe/flight/search/dates/?on=2026-09-08&till=2026-09-08&from=BHX&to=PLQ&adult=1'\nFor more information check: https:/"},{"provider":"vietravel","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:59:00+00:00","last_failure_at":null,"last_error":null},{"provider":"westair","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:58:00+00:00","last_failure_at":null,"last_error":null},{"provider":"wizzair","circuit":"closed","circuit_open_until":null,"consecutive_failures":0,"last_success_at":"2026-08-15T11:57:38+00:00","last_failure_at":"2026-08-14T16:35:31+00:00","last_error":"ProviderUnavailableError: wizzair failed after 3 attempts: Server error '503 Service Temporarily Unavailable' for url 'https://be.wizzair.com/29.12.0/Api/search/timetable'\nFor more information check: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/503"}],"budget":{"requests_last_hour":463,"max_requests_per_hour":0,"requests_last_24h":5361,"max_requests_per_day":0,"serpapi_searches_this_month":0,"serpapi_monthly_search_budget":200},"db":{"path":"flights.db","size_bytes":429395544,"watches":15,"journeys":377,"snapshots":19,"calendar_rows":280346},"scheduler":{"jobs":[{"id":"coverage","name":"Keep prices fresh","next_run_at":"2026-08-15T15:08:30+03:00","trigger":"interval[0:20:00]"},{"id":"alert_flush","name":"Alert queue flush","next_run_at":"2026-08-15T15:13:30+03:00","trigger":"interval[0:15:00]"},{"id":"tier2_combine","name":"Tier 2 combination","next_run_at":"2026-08-15T19:28:30+03:00","trigger":"interval[6:00:00]"},{"id":"network_sweep","name":"Refresh every airline network","next_run_at":"2026-08-15T23:10:00+03:00","trigger":"cron[hour='23', minute='10']"},{"id":"deep_sweep","name":"Round-trip sweep","next_run_at":"2026-08-16T02:30:00+03:00","trigger":"cron[hour='2', minute='30']"},{"id":"cleanup","name":"Retention cleanup","next_run_at":"2026-08-16T03:00:00+03:00","trigger":"cron[day_of_week='sun', hour='3']"},{"id":"route_maps","name":"Learn airline route maps","next_run_at":"2026-08-16T03:20:00+03:00","trigger":"cron[hour='3', minute='20']"},{"id":"tier1_calendar_scan","name":"Tier 1 calendar scan","next_run_at":"2026-08-16T04:26:44+03:00","trigger":"cron[hour='4', minute='15']"},{"id":"tier3_confirm","name":"Tier 3 confirmation","next_run_at":"2026-08-16T05:30:00+03:00","trigger":"cron[hour='5', minute='30']"}]},"config_error":null,"notifiers":{"credentialed":false,"missing_env_vars":["TELEGRAM_BOT_TOKEN","TELEGRAM_CHAT_ID","SMTP_HOST","SMTP_FROM","SMTP_TO"]}}