Testing Air Canadaโ€™s Free and Paid In-Flight Wi-Fi

THIS POST IS ALSO AVAILABLE IN ํ•œ๊ตญ์–ด.

A composite of the Air Canada logo and a Wi-Fi symbol.

On August 17, 2026, I boarded Air Canada flight AC62 from Seoul Incheon to Toronto. It was a Boeing 787-9, and the actual aircraft registration was C-FVLX. After connecting to the in-flight Wi-Fi and opening ACWiFi.com, I was shown a passenger login screen. I entered my last name and seat number, which activated the free access. The next screen said โ€œYouโ€™re connected to Free Texting.โ€ This was complimentary messaging on a long-haul international flight. Most of the general web did not open, and the portal sold a separate pass for full internet access.

Unexpectedly, I could have real conversations with both Grok and ChatGPT, on the web and in their mobile apps. Grok Build and Claude Code also worked, letting me continue reading and editing local files. GitHub, Gmail, Slack, and YouTube, however, were blocked. In OpenCode, the OpenAI provider worked while Fireworks and Cerebras failed.

Why did AI seem to be the exception? On the same flight, I checked reachability for more than 40 domains, along with latency, upload throughput, and download throughput.

The short version

The Air Canada AC62 in-flight Wi-Fi portal showing Free Texting, the ICN-to-YYZ route, and a CA$39 Ultimate Pass.
The actual portal on AC62. The free tier was labeled โ€œFree Texting,โ€ while the full-internet Ultimate Pass was priced at CA$39 for the full flight.

It was free messaging, not free internet

Air Canadaโ€™s official information says it offers free streaming-quality Wi-Fi on North American and Sun routes, with free Wi-Fi for long-haul international routes planned for 2026. On long-haul flights, Aeroplan members receive free messaging through services including iMessage, Messenger, WhatsApp, WeChat, LINE, KakaoTalk, and Telegram, but photos, videos, and attachments are not supported.

The portal on my AC62 flight matched that description. A green banner at the top said Free Texting, while the Ultimate Pass for full internet access was a separate product. So the โ€œfree in-flight Wi-Fiโ€ in this article was officially a restricted connection intended for messaging.

What made it interesting was that the observed reachability pattern extended beyond messaging apps: the web and API hosts used by several major conversational AI services were also reachable.

What worked and what was blocked

I separated services I actually used from hosts for which I checked only HTTPS reachability with curl and openssl. HTTP 401, 403, 404, or 421 responses meant that TLS had reached the origin or CDN, so I classified the host as reachable. They do not prove that every feature of the corresponding web application worked.

CategoryService or domainResult
Working appGrok and ChatGPT web appsReal conversations worked in both apps
Working appGrok and ChatGPT mobile appsReal conversations worked in both apps
Working appGrok Build (api.x.ai)Model conversation and tool loop worked
Working appClaude Code (api.anthropic.com)Model conversation and local file operations worked
Working appOpenCode + OpenAI (api.openai.com)gpt-5.5 returned a response
HTTPS reachableGemini, Perplexity, CopilotPrimary hosts passed TLS/HTTP; full interfaces could still depend on additional domains
Free messagingWhatsApp, Messenger, Telegram, LINE, KakaoTalk, iMessage APNsText-related hosts were reachable
Partially reachableen.wikipedia.orgArticle HTML loaded, but the image host was blocked
AI infrastructure blockedFireworks, Cerebras, OpenRouter, Cursor, OpenCode model listConnection ended during TLS
General internet blockedGitHub, Google, Gmail, Slack, Discord, YouTube, Netflix, x.comConnection ended during TLS

In OpenCode, I sent the same ์•ˆ๋…• (โ€œhelloโ€) prompt while changing only the provider. GLM through Fireworks and Gemma through Cerebras failed with unknown certificate verification error, while GPT-5.5 through OpenAI answered immediately. The message looked like a certificate-store problem, but an immediate curl test to the same blocked hosts returned TLS unexpected eof. In this case, the runtime was surfacing a connection that was terminated for hosts that were not reachable on the free tier.

The observed reachability pattern was granular at the subdomain level, rather than simply by company. gemini.google.com was reachable while www.google.com and mail.google.com were blocked. Text from en.wikipedia.org downloaded, but its images broke because upload.wikimedia.org was blocked. courier.push.apple.com was reachable while gateway.icloud.com was not, which was also consistent with access intended for messages but not attachments or general iCloud data.

How fast was it?

On the free tier, general speed-test sites such as Fast.com were outside the apparent allowlist. Instead, I repeatedly transferred small payloads to AI APIs and grok.com, after confirming that those destinations were reachable.

MetricMeasurementInterpretation
TCP connectionUsually 5โ€“20msA local response from the onboard gateway, not the satellite RTT
New TLS connection0.8โ€“0.9 secondsRoughly one satellite round trip
Keep-alive HTTP RTT0.74โ€“0.80 secondsThe actual round trip after connection reuse
Upload1.2โ€“1.8Mbps256KiB API POST, raw throughput including RTT
Download5โ€“7MbpsAbout 814KiB from grok.com, keep-alive raw throughput

For upload tests, I used unauthenticated dummy POST bodies. xAI returned HTTP 415 and Anthropic returned 401, which showed that each request body had reached the origin before being rejected. API responses were too small for useful download tests, so I supplemented them with about 814KiB of HTML from grok.com.

The second and third downloads sometimes showed an apparent 80โ€“100Mbps after the first byte. I discarded those values because the pipe may have filled during time to first byte, or an intermediate cache or socket buffer may have been involved. The headline figure uses only the conservative 5โ€“7Mbps measured over the full transfer time.

I did not interpret AI chat response time as network speed, either, because it includes model token-generation time. What I could isolate was this: round trips were long at about 0.8 seconds, large transfers were slow, but there was enough bandwidth to maintain long-lived streams.

Why AI services and command-line tools were surprisingly usable

A web page is rarely just one HTML request. It loads JavaScript, images, fonts, login services, analytics, and CDNs from multiple hosts. Even if the primary domain is reachable, one blocked dependency can leave part of the interface stuck.

Even so, I could have real conversations with Grok and ChatGPT both on the web and in their mobile apps. That proves more than TLS reachability to a primary host: in an authenticated session, I could send a question and receive an answer through the core path. I did not, however, trace every secondary host called by the mobile apps.

Model calls from command-line tools such as Grok Build and Claude Code were structurally simpler.

  1. They needed only one or two primary destinations, such as api.x.ai or api.anthropic.com.
  2. Requests and token streams were much smaller than video or a large web page.
  3. Once a TLS connection was established, a long-lived SSE stream did not pay the 0.8-second round-trip cost for every token.
  4. File reads, edits, and tests ran locally on the laptop and did not use the in-flight connection.
  5. A web lookup performed by an agentโ€™s backend followed a different path from the laptop directly visiting that website.

This created the odd situation where โ€œmuch of the internet is blocked, but the AI can still search it.โ€ My laptop could access Wikipedia only partially and could not open much of the general web, yet I could ask through a reachable AI API and receive an answer after the model providerโ€™s server retrieved the information.

The limits were still obvious. I could edit local code with a model, but I could not pull from or push to GitHub. Package installation, Slack, and Gmail were also blocked. AI collaboration worked, but this was not a complete internet-connected development environment.

Grok felt faster than ChatGPT, but the network path was similar

On the same flight, the Grok app felt faster than the ChatGPT app. At first I wondered whether xAI had a better global path. Direct comparison showed that api.x.ai and grok.com, as well as api.openai.com and chatgpt.com, all used Cloudflare anycast. Their API TLS times, keep-alive RTTs, and 256KiB upload results were similar.

I found no evidence of a uniquely fast backbone used only by Grok across the satellite segment. Instead, ChatGPTโ€™s secondary hosts showed cold DNS lookups, longer initial TLS setup, and a Cloudflare challenge. The perceived difference is more naturally explained by model token speed, the number of secondary hosts each app calls, initial connection setup, and challenge handling. I did not instrument the internals of either app, so I cannot assign the cause to one factor.

Scope and limitations

These results describe one moment on one aircraft, C-FVLX, operating AC62 on August 17, 2026. The same flight number can be operated by a different registration on another day, and connectivity hardware or configuration can vary by aircraft. The airline or service provider can also change its policy. A host returning HTTP 403 or 421 proved network reachability, not complete web-app functionality. The free-tier file samples were small, and the Ultimate Pass Fast.com reading was taken at one point in time, so I would not generalize 5โ€“7Mbps to other AC62 flights or to the entire duration of this one.

This investigation was intended to understand why tools that already worked were working. I did not attempt or document methods to bypass the free tier for general internet access.

Finally, I bought the AI an Ultimate Pass

On the free onboard connection, everything from the Grok and ChatGPT web and mobile apps to Claude Code and Grok Build actually worked. The AI tools did not need a special networking trick: their core domains were reachable through the onboard network, and token streams did not require much bandwidth.

Once I had established that, I started doing real work with the AI. Reading local files, organizing ideas, and editing code all went smoothly. The problem was that, as the work progressed, the AI began asking to search other websites and retrieve material outside the free tier. The AI seemed to become frustrated with the in-flight internet before I did.

So I bought the CA$39 Ultimate Pass shown in the portal. More precisely, I was not buying internet for myself so much as providing paid internet to the AI. As soon as payment completed, the previously blocked general websites and Fast.com became reachable.

Despite the name, the speed did not become Ultimate. Fast.com showed about 5Mbps, effectively the same as the 5โ€“7Mbps I had measured through other methods on the free tier. Paying did not make the connection faster; it removed the destination restrictions.

The AI could no longer say, โ€œI canโ€™t reach that site.โ€ I thought I had also lost my excuse to sleep. I still managed to get a solid three hours of sleep. As I revise this article, there is one hour left until landing in Toronto. After sleeping for three hours, it is time to spend the final hour working with the AI again.

Source
Open source โ†—
Mon, 17 Aug 2026 23:51:35 +0900