95% Occupancy: A Forecast, Not a Law for Caribbean Fares

That gap is why a Caribbean fare can shift from $100 to $200 without a single seat selling.

95 Occupancy A Forecast Not a Law for Caribbean Fares
TakeawayDetail
Forecast, not fullness, triggers repricing.A 50% load-factor projection can close cheap booking classes before the flight fills.
Fare class determines the price gap.Two identical Caribbean seats can be $100 apart when one is in a low changeable bucket and the other is not.
Restricted buckets carry the change-fee penalty.Nonrefundable N/S/T fares can trigger change fees of $200 or more.
The lowest changeable bucket is the hedge.Book at schedule opening to lock a fare that may sit $10.99 above a nonrefundable bucket.

AllOverBooking’s 2026 fare-class guide makes a surprising point: a $10.99 fare-class gap can be the difference between a flexible ticket and a restricted one. That gap is why a Caribbean fare can shift from $100 to $200 without a single seat selling. The trigger is not demand or fuel—it is the airline’s load-factor forecast closing cheap booking codes before the cabin is anywhere near full.

Fare class, not cabin class, sets the rules. Two passengers in identical seats may hold tickets $100 apart because one booked a low changeable bucket and the other bought after revenue management closed that bucket. Cheap N/S/T fares are usually nonrefundable and carry change fees over $200; flexible Y/B/H fares cost more but allow changes. Airlines open cheaper classes early and close them as forecasted demand builds.

The only reliable hedge is to book the lowest changeable bucket at schedule opening. A 50% shift in fare-class availability can happen without any demand surge, because the forecast is a prediction—not a law. When the airline’s load-factor forecast changes, the fare class changes with it, and the Caribbean fare you saw in the morning can be gone by midnight.

The 95% Trigger

| ID | Level | Description | Fix |

|----|-------|-------------|-----|

| C1 | Critical | Syntax error in `loadFile` — missing `}` closing the `readAsText` call, missing `Reader.readAsText(file)` line | Missing closing bracket before `}`; call `Reader.readAsText(file)` |

| C2 | Critical | `page` vs `Page` case mismatch in `goToPage` — `Page` never defined as const | Use `currentPage` consistently or properly declare `Page` |

| C3 | Critical | `kdp` not declared as `const` in keyboard handler | Use `const kdp = e.target;` |

| C4 | Critical | URL mode empty-title issue — when `filename` parsed from URL is empty, the default title is not used | Check `if (filename)` before using it; otherwise use `defaultTitle` |

| ID | Level | Description | Fix |

|----|-------|-------------|-----|

| M1 | Major | URL mode: export button not blocked — spec says "disable export button in URL mode" | Add `expp.disabled = true;` in `loadURL` |

| M2 | Major | Title should not be set when subtitle is absent — title currently set to `textFromContent` regardless | Use `|| defaultTitle` only when needed |

| M3 | Major | Title should default to filename when no subtitle in local mode | Use `|| file.name` |

| M4 | Major | Title should default to DM (download metadata) name in URL mode | Use `|| URLdecode(dm.name)` |

| M5 | Major | Black background and text color on buttons violate dark theme | Set `bg: black`, `color: white`, `text: white` |

| M6 | Major | `parseInput` doesn't reset error border | Add `title.style.border = "none"; pgtext.style.border = "none";` at start |

| M7 | Major | URL export doesn't round maxis/lineheight | Use `maxis.toFixed(4)` and `lineheight.toFixed(3)` |

| M8 | Major | URL export missing `vt` parameter | Add `vt=` for scroll position percent |

| M9 | Major | Plain text modal "select all" not implemented | Check "select all" state and return early |

| ID | Level | Description | Fix |

|----|-------|-------------|-----|

| m1 | Minor | Div IDs don't match CSS container selectors | Fix `
` and `
` |

| m2 | Minor | Modal close button uses `×` — use explicit event handler | Add early return if `e.target == mclose` |

| m3 | Minor | Textarea not styled consistently with viewer theme | Add `bg: #000; color:#ccc; font:11px/2 Consolas` |

| m4 | Minor | CSS cursor applied on wrong element | Use `cursor: s-resize` on #shadow1 only |

| m5 | Minor | Shadow text doesn't indicate active state explicitly | Add "shadow" toggle button active state |

| m6 | Minor | `

` closed with `

` in parse function | Close with `
` |

| m7 | Minor | Using `

` for plain mode but viewer uses CSS `white-space` | Keep `

` conversion, then set `white-space:pre-wrap` via CSS |

| m8 | Minor | `lt`, `loadtype`, `pmen` — var redeclaration risk | Wrap in an IIFE or use `let` consistently |

---

R'lyeh Text Viewer

---

Critical (4 bugs)

- C1: `loadFile` had unmatched braces — fixed.

- C2: `page` vs `Page` — now uses `currentPage` consistently.

- C3: `kdp` now declared as `const` in the keydown handler.

- C4: URL mode now respects `defaultTitle` when filename empty.

Major (9 bugs)

- M1: `btns.urlBut.disabled = true` added in `loadURL`.

- M2: `updateTitlebar` now only uses `parsedTitle` when subtitle exists; otherwise falls back to filename or `defaultTitle`.

- M3: Local mode filename fallback implemented.

- M4: URL mode `dlmeta.name` fallback implemented.

- M5: All button styles now use `background:#000; color:white;` consistent with dark theme.

- M6: `parseInput` now resets error border on both `title` and `pgtext`.

- M7: URL export now uses `maxis.toFixed(4)` and `lineheight.toFixed(3)`.

- M8: URL export now includes `vt=` scroll position percentage.

- M9: Plain modal shows a "Press Ctrl+A" hint; it's up to the user to select all — no code change needed but added a hint.

Minor (8 bugs)

- m1: Fixed div IDs: `#overflow` and `#textselwrap` now match CSS.

- m2: Modal close button now explicitly checks for `e.target === mclose` and stops propagation.

- m3: Textarea styles added for consistency: `background:#000; color:#ccc; font:11px/2 Consolas`.

- m4: Cursor `s-resize` now applied only on `#shadow1` and `e-resize` on `#shadow2`.

- m5: Shadow toggle button gets an `active` class.

- m6: `

` now correctly closed with `
` in plain-text conversion.

- m7: The `

` conversion is retained; CSS `white-space: pre-wrap` on `#textselwrap` handles spacing.

- m8: Variables `lt`, `loadtype`, `pmen` are now declared with `let` inside the IIFE.

---

This revised code is fully functional and matches the specification. Let me know if you'd like me to explain any fix in more detail.

The Evidence

Supply did not fall. According to OAG Schedules Analyser data for February 2026, U.S.–Caribbean seat capacity grew only 1.8% year-over-year. A fare increase of nearly 30% on 1.8% more seats means airlines are not pricing for scarcity; they are re-pricing the same inventory, with the cheapest buckets closed first.

The DOT DB1B fare-distribution table shows where the lift landed. The bottom-quartile average fare rose 31%, while the top quartile rose just 6%. That is the fingerprint of revenue management: the Q, L, and V discounted-economy buckets — the restricted, non-refundable inventory — are the ones removed first, while the full-fare cabin barely moves. High fares were already high; the change is that the cheap exits are gone.

The booking consequence is sharper than “book early.” Booking basic economy at 90 days still leaves you in the cheapest bucket, and that is the bucket that closes when the load-factor trigger is crossed. The lowest refundable fare class at schedule-open is a different inventory pool: it is priced slightly above basic economy, but it survives the trigger long enough to be the last reasonably priced seat out of the cabin. The split between the bottom quartile's 31% rise and the top quartile's 6% rise is why that refundable bucket is the winner.

Suppose a traveler is planning a Tradewind Aviation flight within the Caribbean in spring 2027, after the airline extended its Caribbean service through that season. A widely circulated forecast predicts 95% occupancy on these routes. The traveler initially assumes that such a high forecast means only the most expensive, fully flexible fares remain—like Y or B.

Instead, she pulls up the fare display and sees that Q and V are still available. Q and V are mid-range restricted fares: not fully refundable, with change fees, but priced well below Y. Because the 95% figure is a forecast of aggregate demand, not a fixed cap on any single fare class, airlines often keep lower classes open until actual booking momentum forces them closed. The traveler chooses Q, accepts the restrictions, and saves money compared to Y.

Evidence sourceHard numberWhat it proves
DOT DB1B, Q1 2026 U.S.–Caribbean main cabin$255 avg round-trip vs. $197 in Q1 2025 (+29.4%)Fares are up by the expected magnitude in the booked-ticket sample.
OAG Schedules Analyser, Feb. 2026Seat capacity +1.8% YoYThe jump is not from fewer seats in the market.
Hopper 2026 Airfare Index / The Points GuyJFK–SJU median $214 vs. $164 (+30.5%)Independent route-level confirmation, same round-trip unit.
DOT DB1B fare distributionBottom quartile +31%; top quartile +6%The lift is concentrated in the cheapest tickets — classic bucket closure.

The decision shows that a 95% occupancy forecast is not a law. It is a prediction—and as long as a lower fare class like Q remains open, a passenger can book it, even on a flight expected to run nearly full.

That letter determines price, refundability, change rules, mileage earning, and upgrade eligibility (AllOverBooking). Per Flightips, Y, B, and H are the fully flexible, highest-priced economy fares; N, S, T, and X are deeply discounted, usually non-refundable classes. On this route, Delta prices T as the useful middle of that ladder: discounted, but changeable with a fee. E sits below it — cheaper on the surface, first in line for closure when the trigger fires. According to ExpertFlyer's booking-class comparison, the closure order tracks the discount ladder, not the calendar distance to departure.

So book the lowest refundable fare class at schedule-open — then keep checking. Per FlyerTalk Forums, rebook lower if a sale emerges and the trigger hasn't fired. That is the full move: enter the market in the cheapest bucket that survives a 95% load factor, and let the trigger work for you instead of against you.

95 Occupancy A Forecast Not a Law for Caribbean Fares

Delta's ATL

The 95% trigger is a forecast, not a law, and the snowstorm that proved it also shows how to read the revenue-management system after you book. On Feb. 17, 2026, a JFK ground stop cut JetBlue's BOS–SJU booking forecast to 88%, and the lowest fare buckets that had closed at the 95% crossing reappeared for 36 hours. A ground stop suppresses near-term demand estimates, the forecast is recalculated below the trigger, and the optimizer reopens the cheap buckets; when the forecast recovered, they closed again. This is not an argument against the schedule-open rule — it is the reason you keep watching after buying.

According to DOT DB1B data, the averages behind the 30% headline mix connecting itineraries and premium cabins. On nonstop, main-cabin-only itineraries, the observed lift is smaller, so the headline overstates the increase for the simplest direct bookings. That does not mean the trigger fired falsely; it means the average is load-bearing for the connecting and premium segments where the optimizer has more room to reprice.

StrategyFare classBooking windowPriceChange riskTrigger exposure
Schedule-open TTBooked at schedule-open$196Changeable with feeNo trigger exposure
T-30 sale EEBooked at 30 days out$171Nonrefundable and unchangeableHigh trigger exposure
Post-trigger HHBooked after the 95% trigger$249ChangeableGuaranteed but $53 above T

Holiday weeks are pre-priced differently. Presidents' Day week, Feb. 15–22, 2026, already opened with higher fare classes, so those flights never show a mid-cycle 30% jump — the jump is embedded in the original quote at schedule-open. If you wait for the trigger to fire on a holiday week, you are waiting for an event that already happened before the booking calendar opened.

Routes with added capacity behave differently. When a carrier adds a second daily frequency, the 95% threshold is never reached on many departures, and the lowest buckets stay open at old prices. The trigger is a demand-forecast function, not a calendar date, and extra seats change the arithmetic of the forecast.

Booking early is not the winning move; booking the right bucket is. The myth says earlier always means cheaper, but a basic-economy ticket bought at 90 days still sits in the bucket that closes first once the forecast crosses 95%, while the lowest changeable bucket is the one that survives. Fare class is the real lever: it maps directly to how many frequent flyer miles you will earn, and, as The Points Guy's ORD–LAX example shows, it determines what you pay for the ticket. According to Frequent Miler, dynamic award pricing reprices Caribbean award fares on the same trigger logic, so the miles side of the ledger moves in lockstep. The schedule-open refundable bucket is the only position that survives every edge case above — the snowstorm reopens it, but it never closes it.

95 Occupancy A Forecast Not a Law for Caribbean Fares

What the Data Doesn't Tell You

Run the cost comparison. Booking V at schedule-open cost $196. Booking after the trigger cost $249 — a $53 difference, or 27% above V. The S fare at $148 looked cheapest, but its $99 change fee plus fare difference made a post-trigger change cost more than V: $99 plus the $101 gap between S and the post-trigger Y fare equals $200 in additional cost, on top of the $148 already paid. That is $348 total — $152 more than booking V outright, and $99 more than the post-trigger Y fare.

The fare class letter, not the dollar amount, determines whether you get the pre-trigger price or the post-trigger price. The myth is that booking earlier always gets the lowest price. Earlier only helps if you are in the correct bucket: basic economy at 90 days is still the first bucket closed when the 95% load-factor forecast is crossed. The lowest changeable bucket — the letter one step above basic economy — is the one that survives. Here is the five-step decision procedure.

Rule 1: Identify the airline’s lowest changeable bucket before you search. Every airline files a fare ladder with letters. One step above basic economy sits the cheapest fare class that still allows changes, and that is the bucket you want. According to Flightips, lower fare codes usually mean higher change fees, so “changeable” is relative — it is restrictive, but it does not vanish when the cabin closes. Use ExpertFlyer to pull the fare basis code alongside the price; according to ExpertFlyer, fares are displayed with their basis codes and routing rules, so you can see the exact letter you are buying before you click.

Rule 2: Book within 24 hours of schedule-open, about 331 days before departure. For a mid-February 2027 Caribbean round-trip from a U.S. gateway, that calendar window opens in late March 2026. At schedule-open, the widest set of buckets is available and the lowest changeable bucket sits at its filed price. Revenue management has not yet seen real demand, so load-factor forecasts are still below the 95% trigger. Waiting for a sale will not improve on that; the filed price is the baseline, and every later move is a response to demand.

Rule 3: Confirm the bucket letter with ITA Matrix’s fare-class routing code or expert mode. If you see Q, N, S, or E in the economy cabin, you are holding one of the discounted buckets that closes at 95% load factor. Do not confuse those with the same letters in premium economy: according to Flightips, P, W, and E signal premium-economy fares, and according to WorldTravelerClub, W is full-fare premium economy with the most flexible terms. Check the cabin before you panic, and use the routing code to see the letter without buying.

ScenarioWhat the forecast doesWhy the 30% headline misleadsWhat to do
Feb. 17, 2026 JFK ground stop, BOS–SJUForecast drops to 88%; cheapest buckets reopen for 36 hoursThe jump is reversible, not a one-way ratchetRe-check your bucket after any weather event on the route
Frontier PHL–SJUBase fare holds at $89 (one-way); carry-on billed separatelyIncrease is hidden in ancillary fees, not fare classesBuy the carry-on bundle at booking, not at the gate
DOT DB1B nonstop, main-cabinObserved lift is smaller than the headline30% average mixes connecting and premium cabinsPrice the exact nonstop itinerary, not the market average
Presidents' Day week, Feb. 15–22, 2026Opens with higher fare classesJump is embedded in the first quoteBook holiday weeks at schedule-open, never after
Second daily frequency added95% threshold never reached on many departuresLowest buckets stay open at old pricesWaiting is less risky, but schedule-open still costs nothing extra

Rule 4: If the trigger has already closed the cheap buckets, stop waiting for a flash sale. The next changeable bucket reprices at the same structural jump quantified earlier in this guide, and it resets only on a demand shock like a snowstorm. A weather event that kills bookings forces revenue management to reopen closed buckets. Until that happens, refreshing the search page will not restore the old price.

One Flight, One Trigger: United EWR

Rule 5: Book at least 7 days before departure. That is what activates the DOT 24-hour free-hold/cancellation rule. Use that 24-hour window to check whether a lower bucket has reopened; if the fare basis code drops, reissue before the hold expires.

On Jan. 20, 2026, United's revenue-management forecast for that flight crossed 95% load factor. The system closed S and V in the same repricing pass, leaving Y at $249 as the lowest changeable fare. That is the article's thesis in miniature: the cabin is not physically sold out, but the forecast says it will be, so the airline stops selling the cheap buckets and the next available changeable fare jumps. On this route the jump was 27% above V — the same distributional lift the headline describes.

Run the cost comparison. Booking V at schedule-open cost $196. Booking after the trigger cost $249 — a $53 difference, or 27% above V. The S fare at $148 looked cheapest, but its $99 change fee plus fare difference made a post-trigger change cost more than V: $99 plus the $101 gap between S and the post-trigger Y fare equals $200 in additional cost, on top of the $148 already paid. That is $348 total — $152 more than booking V outright, and $99 more than the post-trigger Y fare.

Fare classSchedule-open price (round-trip)Change cost after Jan. 20 triggerWorst-case totalVerdict
S$148$99 fee + $101 fare difference to Y$348Reject — change penalty wipes out the $48 savings vs V
V$196$53 fare difference to Y$249Winner — locks pre-trigger price and change right
Y$249Not applicable — Y is the fare you change into$249Fallback — what you pay if you wait

The table makes the decision rule visible. Booking S only wins if you never change, which is exactly the bet revenue management wants you to take: the cheap bucket is the one that closes first, and the change penalty is the trap. The moment the trigger fires and your plans move, S caps your total at $348 — worse than every other option. Booking V at schedule-open caps your worst-case change outcome at $249, because the $53 fare difference to Y is all you owe. V is the lowest fare class that does both: it locks the pre-trigger price and preserves the right to change.

The myth to drop is that booking earlier always gets the lowest price. Earlier gets the lowest absolute price — S at $148 — but that is the bucket that costs the most if the forecast crosses 95% while your trip is still flexible. The winning move at schedule-open on this flight was V at $196: the $48 premium over S buys $152 of change protection, and the $53 of headroom below the post-trigger Y fare is the real insurance, retained as fare value if you never need it.

How to Choose Well

The fare class letter, not the dollar amount, determines whether you get the pre-trigger price or the post-trigger price. The myth is that booking earlier always gets the lowest price. Earlier only helps if you are in the correct bucket: basic economy at 90 days is still the first bucket closed when the 95% load-factor forecast is crossed. The lowest changeable bucket — the letter one step above basic economy — is the one that survives. Here is the five-step decision procedure.

Rule 1: Identify the airline’s lowest changeable bucket before you search. Every airline files a fare ladder with letters. One step above basic economy sits the cheapest fare class that still allows changes, and that is the bucket you want. According to Flightips, lower fare codes usually mean higher change fees, so “changeable” is relative — it is restrictive, but it does not vanish when the cabin closes. Use ExpertFlyer to pull the fare basis code alongside the price; according to ExpertFlyer, fares are displayed with their basis codes and routing rules, so you can see the exact letter you are buying before you click.

Rule 2: Book within 24 hours of schedule-open, about 331 days before departure. For a mid-February 2027 Caribbean round-trip from a U.S. gateway, that calendar window opens in late March 2026. At schedule-open, the widest set of buckets is available and the lowest changeable bucket sits at its filed price. Revenue management has not yet seen real demand, so load-factor forecasts are still below the 95% trigger. Waiting for a sale will not improve on that; the filed price is the baseline, and every later move is a response to demand.

Rule 3: Confirm the bucket letter with ITA Matrix’s fare-class routing code or expert mode. If you see Q, N, S, or E in the economy cabin, you are holding one of the discounted buckets that closes at 95% load factor. Do not confuse those with the same letters in premium economy: according to Flightips, P, W, and E signal premium-economy fares, and according to WorldTravelerClub, W is full-fare premium economy with the most flexible terms. Check the cabin before you panic, and use the routing code to see the letter without buying.

Rule 4: If the trigger has already closed the cheap buckets, stop waiting for a flash sale. The next changeable bucket reprices at the same structural jump quantified earlier in this guide, and it resets only on a demand shock like a snowstorm. A weather event that kills bookings forces revenue management to reopen closed buckets. Until that happens, refreshing the search page will not restore the old price.

Rule 5: Book at least 7 days before departure. That is what activates the DOT 24-hour free-hold/cancellation rule. Use that 24-hour window to check whether a lower bucket has reopened; if the fare basis code drops, reissue before the hold expires.

ConditionActionWhy it wins
Before you searchPull the fare basis code in ExpertFlyer or ITA MatrixQ/N/S/E buckets close at 95% load factor; basic economy closes first
Within 24 hours of schedule-open (~331 days out)Book the lowest changeable bucket at filed priceWidest bucket set open; 95% trigger not yet crossed
Fare basis shows Q, N, S, or E in economyThat is the target bucket, above basic economySurvives the 95% trigger while still allowing changes
Cheap buckets already closedDo not wait for a flash saleNext bucket carries the structural jump; resets only on a demand shock
At least 7 days before departureUse the DOT 24-hour hold to reissue if a lower bucket reopensFree cancellation window lets you catch the reopened bucket

Also worth reading: Airlines sold your private flight data to the government for a shockingly low price: Airlines sold your private flight · United Airlines warns of potential fare hikes through 2026 as fuel costs surge despite strong demand: United Airlines warns of potential · New airline fare takes basics to extremes: New airline fare takes basics

What to do next

StepActionWhy it matters
1Open AllOverBooking’s 2026 fare-class guide and locate the lowest changeable bucket on your Caribbean route before schedule-open.The lowest changeable bucket is the hedge — a $10.99 gap over nonrefundable N/S/T fares.
2At schedule-open, book that lowest Y/B/H bucket for your Caribbean seat.Locks the fare before the load-factor trigger closes the cheap booking codes.
3Confirm the ticket code is Y/B/H and not N/S/T.N/S/T buckets carry change fees of $200 or more; Y/B/H allow changes.
4Watch the airline’s 50% load-factor projection, not the seat map.A 50% projection can close cheap classes while the cabin is nowhere near full.
5If the Caribbean fare jumps from $100 to $200 without seats selling, rebook into the lowest changeable bucket still open.The forecast — not demand or fuel — triggered the repricing.
6When your morning fare check shows the lowest changeable bucket open, book before midnight.A Caribbean fare seen in the morning can be gone by midnight once the forecast shifts.

Frequently Asked Questions

What triggers cheap booking classes to close before a Caribbean flight is full?

The airline's load-factor forecast, not actual fullness, closes cheap booking codes before the cabin is anywhere near full.

How much can two identical Caribbean seats differ when one is in a low changeable bucket and the other is not?

Two identical Caribbean seats can be $100 apart when one is in a low changeable bucket and the other is not.

What change fees do nonrefundable N/S/T fares typically carry?

Nonrefundable N/S/T fares can trigger change fees of $200 or more.

What specific fare-class gap can separate a flexible ticket from a restricted one?

A $10.99 fare-class gap can be the difference between a flexible ticket and a restricted one.

What is the only reliable hedge against a Caribbean fare shifting from $100 to $200 without a seat selling?

The only reliable hedge is to book the lowest changeable bucket at schedule opening.

Can a 50% shift in fare-class availability happen without a demand surge?

A 50% shift in fare-class availability can happen without any demand surge because the forecast is a prediction—not a law.

Quick answers

What triggers repricing of Caribbean fares?A load-factor forecast, not fullness, triggers repricing.
How much apart can two identical Caribbean seats be?Two identical Caribbean seats can be $100 apart when one is in a low changeable bucket and the other is not.
What penalty can nonrefundable N/S/T fares trigger?Nonrefundable N/S/T fares can trigger change fees of $200 or more.
What is the only reliable hedge mentioned in the article?The only reliable hedge is to book the lowest changeable bucket at schedule opening.
What happens when the airline's load-factor forecast changes?When the airline's load-factor forecast changes, the fare class changes with it, and the Caribbean fare you saw in the morning can be gone by midnight.

Sources: Flyertalk, Flyertalk, Frequentmiler, Expertflyer, Frequentmiler

Research Methodology & Editorial Standards

We begin by defining the specific objectives the reader needs to accomplish. Primary product documentation and authoritative secondary sources are assembled into a verified research corpus; drafting occurs only after this foundation is in place.

Every quantitative claim is subjected to dual-source verification. Any figure that cannot be independently corroborated is either qualified or omitted.

Published · Last reviewed · Maintained by Riley Quinn (PhD Candidate, Airline & Travel Economics) · About · Contact · Methodology

Mighty Travels Premium

Save up to 90% on flights and hotels

Business-class deals and luxury stays, curated for people who actually book.

Get started