Atmos Rewards · Alaska and Hawaiian

Which Atmos earning choice fits your flying?

Atmos Rewards members can choose how their flights earn points and status points from January 1, 2027: by distance traveled, price paid, or segments flown. Choosing is optional, and it has been open since October 1, 2026, so you can choose now. The choice covers every flight you take until you change it. This calculator runs your own flights through all three and shows which one earns you the most points and which earns the most status points. Those can be different choices.

The three choices

Example: a paid round trip of two flights, 2,000 miles in total, with a $300 fare before taxes. A paid flight earns the same number of redeemable points and status points. Elite bonuses add redeemable points on top under every choice.
ChoiceHow a paid flight earnsExample
Distance traveled1 point per mile flown2,000
Price paid5 points per $1 of fare, not counting taxes and fees1,500
Segments flown500 points per flight1,000

An award flight booked with Atmos points earns status points only: 1 per mile flown under distance, 1 per 20 points redeemed under price paid, and 500 per flight under segments. An award booked with another program’s miles, such as Avios, earns nothing from Atmos. Saver and Basic Economy fares earn nothing under any choice. Distance no longer includes cabin bonuses or the 500-point minimum on short flights. Price paid counts carrier surcharges and paid seats and upgrades on Alaska and Hawaiian, not taxes and government fees.

Under price paid, who issued your ticket matters. A ticket number starting with 027 (Alaska) earns 5 points per dollar, and so does one starting with 001 (American) on an American flight. A partner flight on a ticket issued by another airline, such as a JAL flight booked on jal.com, earns from a distance and cabin chart instead: from 25% of miles flown for discount economy up to 250% for international business or first, in redeemable and status points alike. STARLUX and Philippine Airlines flights booked on partner sites earn no status points.

You can change your choice once per calendar year, and a change applies only to flights you have not taken yet. If you do nothing, members who joined by December 31, 2026 keep earning by distance, and members who join from 2027 on start on price paid.

How the calculator decides

Which choice wins depends on how far you fly, what you pay, and how often you fly on points. Bring a year of flights, past or planned. The calculator applies the published 2027 rules to each flight under all three choices and totals redeemable points and status points separately, with the math for every flight. A 2025 or 2026 year is replayed under the 2027 rules, not a record of what you earned then. A missing booking detail or an unpublished rule is marked incomplete, not guessed.

Bring your flights

Paste your trips into ChatGPT, Claude, or another assistant with this prompt, then paste what it gives back here. With your own assistant, Miles sees only the JSON you paste here. If you paste trips into Miles chat instead, they are kept like any chat message.

Paste your confirmation emails or itinerary into your assistant, after the prompt.

I will paste my flight confirmation emails or itineraries below. Read them and list every flight segment. Then give me one JSON object I can paste into the Atmos earning calculator on askmiles.ai. Return the JSON in one code block, then a short list of anything you could not find.

Rules:
- One entry in flights per traveler, per flight number, per departure date. Include through stops on the same flight number in one entry. Skip cancelled and refunded flights, and keep only the final version of an exchanged booking.
- Leave out names, confirmation codes, full ticket numbers and payment details.
- Fares: use the eligible fare in US dollars and leave out government taxes and fees. Do not repeat a round-trip total on every leg. When one fare covers several segments, give each the same ticket_id and put the whole fare in ticket_fare_usd once, on one segment, with no eligible_spend_usd on any of them; Miles prorates it by distance.
- If a distance, fare or award amount is your estimate rather than shown in the source, keep it and mark it in that segment's estimated object, for example "estimated": {"distance_miles": true}.
- If I held one status for the whole year (for example from a status match), set defaults.elite_status to it and defaults.elite_status_held_all_year to true instead of repeating it on every segment.
- If the source does not show something (what I paid, whether it was an award, my status when I flew, whether the flight is eligible for Atmos credit), ask me before you give the JSON, and ask for everything that is missing in one message. A required field cannot be left out. If I do not know an optional detail, use the value unknown where the field allows it, or leave the field out. Never guess or invent a value.
- Eligibility: ask me whether each flight qualifies for Atmos credit (its fare class and carrier are on Alaska's partner earning page). Do not infer it from the airline name. If I am not sure, use unknown.
- Use exactly the field names below. Values from an "Allowed values" list are lower case. Airline, airport and fare class codes are capital letters (AA, JFK, X).

Top-level fields:
- flights (required, list): the flight entries, described below. A list of entries on its own also works.
- travel_year (required, whole number): Selects departure year from records. 2025/2026 are hypothetical replay under 2027 rules, not historical accrual. Allowed values: 2025; 2026; 2027.
- other_status_points (optional, number, status points): Already calculated non-flight status points/head start for the modeled year; same addition to all choices. Do not include these flights again.
- other_redeemable_points (optional, number, points): Optional already calculated non-flight redeemable points, same for every choice.
- defaults (optional, object): Values applied to every segment that leaves them out.
  - defaults.elite_status (optional, string): Tier for every segment that does not give its own elite_status. Allowed values: "none" = No status; "silver" = Silver; "gold" = Gold; "platinum" = Platinum; "titanium" = Titanium.
  - defaults.elite_status_held_all_year (optional, boolean): True when defaults.elite_status is held for every flight in the travel year, e.g. a status match: it also replaces unknown, and a lower segment tier is rejected.

Fields for each entry in flights:
- id (required, string): Unique flight record ID, not a passenger name or full ticket number.
- departure_date (required, string, YYYY-MM-DD): Local departure date YYYY-MM-DD; each row is one traveler and one flight number (including through stops).
- marketing_carrier (optional, string, two capital letters or digits): Two-character airline code on the flight number, e.g. AS, AA, BA. Capital letters.
- operating_carrier (optional, string, two capital letters or digits): Two-character actual operating airline code.
- ticket_stock (optional, string, three digits): Only the 3-digit ticket prefix, e.g. 027 or 001. Do not send the full ticket number.
- booking_channel (optional, string): Where ticket was booked; retain this even when stock is known. Allowed values: "alaska_hawaiian" = Alaska or Hawaiian; "partner" = Partner airline directly; "travel_agency" = Travel agency or portal; "unknown" = Unknown.
- fare_type (required, string): Card-portal points used to buy a revenue fare are paid. atmos_award means redeemed Atmos points; other_award means another airline program. Allowed values: "paid" = Paid ticket; "atmos_award" = Atmos award ticket; "other_award" = Other program award; "saver" = Saver; "basic_economy" = Basic economy; "ineligible" = Ineligible fare.
- cabin (optional, string): Purchased earning category, verified against partner fare class, not an upgraded seat. Discount economy is not Basic Economy. Allowed values: "international_business_first" = International business or first; "domestic_business_first" = Domestic business or first; "premium_economy" = Premium economy; "economy" = Economy; "discount_economy" = Discount economy; "unknown" = Unknown.
- fare_class (optional, string): Purchased booking class as printed, capital letter (e.g. X, Y, A); alone does not establish partner eligibility or cabin category.
- eligibility (optional, string): eligible asserts the fare, marketed/operated combination and flight number qualify under official partner rules. Never infer this just from airline name. Allowed values: "eligible" = Confirmed eligible for Atmos credit; "ineligible" = Ineligible; "unknown" = Not confirmed.
- elite_status (optional, string): Status held on this flight, not the tier earned by the end of the year. Omit to use defaults.elite_status. Unknown blocks redeemable bonus only. Allowed values: "none" = No status; "silver" = Silver; "gold" = Gold; "platinum" = Platinum; "titanium" = Titanium; "unknown" = Unknown.
- distance_miles (optional, number, miles): Alaska published miles for this flight-number segment; no 500-mile minimum. Leave absent if unknown.
- eligible_spend_usd (optional, number, US dollars): This traveler's prorated eligible fare plus carrier surcharges, and eligible AS/HA operated paid seats/upgrades on 027 tickets; excludes government taxes, baggage and other fees. Use ticketing-time USD conversion. Never repeat a whole ticket's fare on every segment.
- award_points (optional, number, points): Atmos points actually redeemed and allocated to this traveler/segment. Do not repeat total itinerary points across connections. Unknown certificate/discount allocation must remain absent.
- flight_status (optional, string): Only flown or planned records contribute. Remove old versions after exchanges. Allowed values: "flown" = Flown; "planned" = Planned; "cancelled" = Cancelled; "refunded" = Refunded; "superseded" = Replaced by another booking.
- community_bonus (optional, string): huakai asserts enrollment on travel date and eligible Hawaiian Neighbor Island flight; unresolved bonus stacking is flagged. Allowed values: "none" = None; "huakai" = Enrolled in Huakaʻi on travel date.
- undisclosed_package_fare (optional, boolean): True only for a vacation package whose airfare is undisclosed: price-choice uses distance fallback. Missing ordinary fare is not this exception.
- award_cash_extras_usd (optional, number, US dollars): Potentially earning award surcharges/upgrades, excluding government taxes. Their treatment is unresolved; setting positive flags incomplete price-choice results.
- flight_number (optional, string): Marketing flight number as ticketed, e.g. AA1.
- origin (optional, string, three capital letters): Departure airport, three-letter code, e.g. JFK.
- destination (optional, string, three capital letters): Arrival airport, three-letter code, e.g. LAX.
- ticket_id (optional, string): Same label on every segment bought on one ticket, e.g. a round trip. A label you choose, not the ticket number.
- ticket_fare_usd (optional, number, US dollars): This traveler's eligible fare plus carrier surcharges for the whole ticket, on one segment of the ticket_id only; leave eligible_spend_usd off its segments. Miles prorates it by distance (equal split when a distance is missing): the terms prorate the ticket price per segment without publishing a method.
- estimated (optional, object): Marks values on this segment that are estimates, not receipts or published miles, e.g. {"distance_miles": true}. Results and the estimate list show which totals rest on them.
  - estimated.distance_miles (optional, boolean): True when distance_miles is an estimate.
  - estimated.eligible_spend_usd (optional, boolean): True when eligible_spend_usd is an estimate.
  - estimated.award_points (optional, boolean): True when award_points is an estimate.
  - estimated.ticket_fare_usd (optional, boolean): True when ticket_fare_usd is an estimate.

One fare for a round trip? Give each segment the same ticket_id and enter the fare once, as ticket_fare_usd on one segment. Miles prorates it by distance (equal split when a distance is missing). Atmos prorates the ticket price per segment but does not publish how, so the split is marked as an estimate wherever it changes a total.

Every field and its allowed values

Send one object with these top-level fields. A bare list of segments also works. Values from an allowed list match exactly, in lower case. Airline, airport and fare class codes are capital letters.

Top level

  • flights · required · list of segments

    Between 1 and 500 segments, described below.

  • travel_year · required · whole number

    Selects departure year from records. 2025/2026 are hypothetical replay under 2027 rules, not historical accrual.

    • 2025
    • 2026
    • 2027
  • other_status_points · optional · number (status points)

    Already calculated non-flight status points/head start for the modeled year; same addition to all choices. Do not include these flights again.

  • other_redeemable_points · optional · number (points)

    Optional already calculated non-flight redeemable points, same for every choice.

  • defaults · optional · object

    Values applied to every segment that leaves them out.

    • defaults.elite_status · optional · string

      Tier for every segment that does not give its own elite_status.

      • "none" · No status
      • "silver" · Silver
      • "gold" · Gold
      • "platinum" · Platinum
      • "titanium" · Titanium
    • defaults.elite_status_held_all_year · optional · boolean

      True when defaults.elite_status is held for every flight in the travel year, e.g. a status match: it also replaces unknown, and a lower segment tier is rejected.

Each segment

  • id · required · string

    Unique flight record ID, not a passenger name or full ticket number.

  • departure_date · required · string (YYYY-MM-DD)

    Local departure date YYYY-MM-DD; each row is one traveler and one flight number (including through stops).

  • marketing_carrier · optional · string (two capital letters or digits)

    Two-character airline code on the flight number, e.g. AS, AA, BA. Capital letters.

  • operating_carrier · optional · string (two capital letters or digits)

    Two-character actual operating airline code.

  • ticket_stock · optional · string (three digits)

    Only the 3-digit ticket prefix, e.g. 027 or 001. Do not send the full ticket number.

  • booking_channel · optional · string

    Where ticket was booked; retain this even when stock is known.

    • "alaska_hawaiian" · Alaska or Hawaiian
    • "partner" · Partner airline directly
    • "travel_agency" · Travel agency or portal
    • "unknown" · Unknown
  • fare_type · required · string

    Card-portal points used to buy a revenue fare are paid. atmos_award means redeemed Atmos points; other_award means another airline program.

    • "paid" · Paid ticket
    • "atmos_award" · Atmos award ticket
    • "other_award" · Other program award
    • "saver" · Saver
    • "basic_economy" · Basic economy
    • "ineligible" · Ineligible fare
  • cabin · optional · string

    Purchased earning category, verified against partner fare class, not an upgraded seat. Discount economy is not Basic Economy.

    • "international_business_first" · International business or first
    • "domestic_business_first" · Domestic business or first
    • "premium_economy" · Premium economy
    • "economy" · Economy
    • "discount_economy" · Discount economy
    • "unknown" · Unknown
  • fare_class · optional · string

    Purchased booking class as printed, capital letter (e.g. X, Y, A); alone does not establish partner eligibility or cabin category.

  • eligibility · optional · string

    eligible asserts the fare, marketed/operated combination and flight number qualify under official partner rules. Never infer this just from airline name.

    • "eligible" · Confirmed eligible for Atmos credit
    • "ineligible" · Ineligible
    • "unknown" · Not confirmed
  • elite_status · optional · string

    Status held on this flight, not the tier earned by the end of the year. Omit to use defaults.elite_status. Unknown blocks redeemable bonus only.

    • "none" · No status
    • "silver" · Silver
    • "gold" · Gold
    • "platinum" · Platinum
    • "titanium" · Titanium
    • "unknown" · Unknown
  • distance_miles · optional · number (miles)

    Alaska published miles for this flight-number segment; no 500-mile minimum. Leave absent if unknown.

  • eligible_spend_usd · optional · number (US dollars)

    This traveler's prorated eligible fare plus carrier surcharges, and eligible AS/HA operated paid seats/upgrades on 027 tickets; excludes government taxes, baggage and other fees. Use ticketing-time USD conversion. Never repeat a whole ticket's fare on every segment.

  • award_points · optional · number (points)

    Atmos points actually redeemed and allocated to this traveler/segment. Do not repeat total itinerary points across connections. Unknown certificate/discount allocation must remain absent.

  • flight_status · optional · string

    Only flown or planned records contribute. Remove old versions after exchanges.

    • "flown" · Flown
    • "planned" · Planned
    • "cancelled" · Cancelled
    • "refunded" · Refunded
    • "superseded" · Replaced by another booking
  • community_bonus · optional · string

    huakai asserts enrollment on travel date and eligible Hawaiian Neighbor Island flight; unresolved bonus stacking is flagged.

    • "none" · None
    • "huakai" · Enrolled in Huakaʻi on travel date
  • undisclosed_package_fare · optional · boolean

    True only for a vacation package whose airfare is undisclosed: price-choice uses distance fallback. Missing ordinary fare is not this exception.

  • award_cash_extras_usd · optional · number (US dollars)

    Potentially earning award surcharges/upgrades, excluding government taxes. Their treatment is unresolved; setting positive flags incomplete price-choice results.

  • flight_number · optional · string

    Marketing flight number as ticketed, e.g. AA1.

  • origin · optional · string (three capital letters)

    Departure airport, three-letter code, e.g. JFK.

  • destination · optional · string (three capital letters)

    Arrival airport, three-letter code, e.g. LAX.

  • ticket_id · optional · string

    Same label on every segment bought on one ticket, e.g. a round trip. A label you choose, not the ticket number.

  • ticket_fare_usd · optional · number (US dollars)

    This traveler's eligible fare plus carrier surcharges for the whole ticket, on one segment of the ticket_id only; leave eligible_spend_usd off its segments. Miles prorates it by distance (equal split when a distance is missing): the terms prorate the ticket price per segment without publishing a method.

  • estimated · optional · object

    Marks values on this segment that are estimates, not receipts or published miles, e.g. {"distance_miles": true}. Results and the estimate list show which totals rest on them.

    • estimated.distance_miles · optional · boolean

      True when distance_miles is an estimate.

    • estimated.eligible_spend_usd · optional · boolean

      True when eligible_spend_usd is an estimate.

    • estimated.award_points · optional · boolean

      True when award_points is an estimate.

    • estimated.ticket_fare_usd · optional · boolean

      True when ticket_fare_usd is an estimate.

Examples

A paid Alaska flight:

{
  "travel_year": 2026,
  "flights": [
    {
      "id": "SEA-JFK",
      "departure_date": "2026-06-01",
      "marketing_carrier": "AS",
      "operating_carrier": "AS",
      "ticket_stock": "027",
      "booking_channel": "alaska_hawaiian",
      "fare_type": "paid",
      "cabin": "economy",
      "elite_status": "none",
      "eligibility": "eligible",
      "distance_miles": 2422,
      "eligible_spend_usd": 250
    }
  ],
  "other_status_points": 0
}

An American Airlines first class award, booked with Atmos points, flown with Gold status:

{
  "travel_year": 2026,
  "flights": [
    {
      "id": "JFK-LAX first",
      "departure_date": "2026-09-14",
      "marketing_carrier": "AA",
      "operating_carrier": "AA",
      "flight_number": "AA1",
      "origin": "JFK",
      "destination": "LAX",
      "ticket_stock": "027",
      "booking_channel": "alaska_hawaiian",
      "fare_type": "atmos_award",
      "cabin": "domestic_business_first",
      "elite_status": "gold",
      "eligibility": "eligible",
      "flight_status": "planned",
      "distance_miles": 2475,
      "award_points": 30000
    }
  ],
  "other_status_points": 0
}