Pp Seats Aero
mvanhorn/printing-press-library
Every Seats.aero Partner API endpoint, plus a local award-availability store that tells you what is new, what is still live, and where your miles reach nonstop.
Search award flight availability across 27 mileage programs via Seats.aero Partner API.
$ npx skills add borski/travel-hacking-toolkit --skill seats-aero -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install borski/travel-hacking-toolkit seats-aero --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/borski/travel-hacking-toolkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/travel-hacking-toolkit/skills/seats-aero .claude/skills/seats-aero && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "seats-aero" agent skill from https://github.com/borski/travel-hacking-toolkit/tree/main/plugins/travel-hacking-toolkit/skills/seats-aero into .claude/skills/seats-aero/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seats-aero", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/borski/travel-hacking-toolkit/tree/main/plugins/travel-hacking-toolkit/skills/seats-aeroType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add borski/travel-hacking-toolkit --skill seats-aero -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install borski/travel-hacking-toolkit seats-aero --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/borski/travel-hacking-toolkit.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/travel-hacking-toolkit/skills/seats-aero .agents/skills/seats-aero && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "seats-aero" agent skill from https://github.com/borski/travel-hacking-toolkit/tree/main/plugins/travel-hacking-toolkit/skills/seats-aero into .agents/skills/seats-aero/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seats-aero", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add borski/travel-hacking-toolkit --skill seats-aero -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install borski/travel-hacking-toolkit seats-aero --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/borski/travel-hacking-toolkit.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/travel-hacking-toolkit/skills/seats-aero .cursor/skills/seats-aero && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "seats-aero" agent skill from https://github.com/borski/travel-hacking-toolkit/tree/main/plugins/travel-hacking-toolkit/skills/seats-aero into .cursor/skills/seats-aero/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seats-aero", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/borski/travel-hacking-toolkit.git --path plugins/travel-hacking-toolkit/skills/seats-aero--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add borski/travel-hacking-toolkit --skill seats-aero -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install borski/travel-hacking-toolkit seats-aero --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/borski/travel-hacking-toolkit.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/travel-hacking-toolkit/skills/seats-aero .gemini/skills/seats-aero && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "seats-aero" agent skill from https://github.com/borski/travel-hacking-toolkit/tree/main/plugins/travel-hacking-toolkit/skills/seats-aero into .gemini/skills/seats-aero/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seats-aero", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install borski/travel-hacking-toolkit seats-aeroInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add borski/travel-hacking-toolkit --skill seats-aero -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/borski/travel-hacking-toolkit.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/travel-hacking-toolkit/skills/seats-aero .github/skills/seats-aero && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "seats-aero" agent skill from https://github.com/borski/travel-hacking-toolkit/tree/main/plugins/travel-hacking-toolkit/skills/seats-aero into .github/skills/seats-aero/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seats-aero", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add borski/travel-hacking-toolkit --skill seats-aero -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install borski/travel-hacking-toolkit seats-aero --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/borski/travel-hacking-toolkit.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/travel-hacking-toolkit/skills/seats-aero .opencode/skills/seats-aero && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "seats-aero" agent skill from https://github.com/borski/travel-hacking-toolkit/tree/main/plugins/travel-hacking-toolkit/skills/seats-aero into .opencode/skills/seats-aero/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seats-aero", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
seats-aeroSearch award flight availability across 27 mileage programs via Seats.aero Partner API.
Seats Aero is an agent skill from borski/travel-hacking-toolkit. Search award flight availability across 27 mileage programs via Seats.aero Partner API. Find cheapest award flights, compare programs, and get booking links.
Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: AI-powered travel hacking and search with cash, points, miles, and award flights. Drop-in skills and MCP servers for Claude, Codex, and OpenCode. The licence is MIT.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit db82131. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
jqcurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
seats.aeroAlso links to:
developers.seats.aerodocs.seats.aeroFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SEATS_AERO_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Seats Aero loads about 5.2k tokens when it runs. Until then it costs about 42 tokens; SKILL.md has 2,076 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
Set `SEATS_AERO_API_KEY` in your `.env` file. Get from [Settings > API tab](https://seats.aero/settings) (Pro account reAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from borski/travel-hacking-toolkit at commit db82131, republished under its MIT licence (© borski). 2,076 words, ~5,204 tokens.
.claude/skills/seats-aero/SKILL.md (or your agent's skills folder).Search cached and live award flight availability across 27 mileage programs (including Spirit Free Spirit and Frontier Miles, added April 2026). Find the cheapest award flights, compare programs, and get booking links.
Source: seats.aero | API Docs | Knowledge Base
Set SEATS_AERO_API_KEY in your .env file. Get from Settings > API tab (Pro account required).
All requests use the Partner-Authorization header. Pro users get 1,000 API calls per day for non-commercial use.
https://seats.aero/partnerapiAward seats fall into two categories:
Awards exceeding these per-hour thresholds are hidden automatically:
| Program | Economy | Prem Econ | Business | First |
|---|---|---|---|---|
| American | <100K total | <100K total | <150K total | <200K total |
| United | 7,500/hr | 10,000/hr | 14,000/hr | 20,000/hr (max 10h) |
| Delta | 10,000/hr | 15,000/hr | 20,000/hr | N/A |
| Aeroplan | 7,500/hr | 10,000/hr | 12,500/hr | 15,000/hr |
| Flying Blue | 5,000/hr | 10,000/hr | 15,000/hr | 15,000/hr |
| Alaska | <150K total | <150K total | <150K total | <150K total |
| Aeromexico | 10,000/hr (max 10h) | 15,000/hr | 20,000/hr | N/A |
| Etihad | 10,000/hr (max 10h) | 15,000/hr | 20,000/hr | N/A |
| JetBlue | 10,000/hr | 15,000/hr | 20,000/hr | N/A |
| Qantas | 7,500/hr | 10,000/hr | 20,000/hr | 25,000/hr |
To see ALL dynamic pricing (including expensive): pass include_filtered=true on cached search/bulk, or disable_filters=true / show_dynamic_pricing=true on live search.
Sometimes a flight shows bookable but no seat actually exists. Causes:
ComputedLastSeen for freshness.Always verify on the airline's own site before transferring points. Compare multiple programs in the same alliance. Call to confirm and hold if possible.
Some programs (Smiles, TudoAzul, etc.) may require local tax IDs, local payment methods, or are only available in the local language. They still appear in results because they can serve as signals: if Azul TudoAzul shows United saver space, that same space is likely bookable through Aeroplan or other Star Alliance partners you CAN access.
Airlines release award seats at different advance windows (e.g., Aeroplan releases up to 358 days out). Check seats.aero/tools/releases to see the maximum days out for each airline by program. Useful for planning when to start searching.
Each result from Cached Search / Bulk Availability is a summary that groups all flights for one route/date/program into a single object. For example, if Alaska shows 3 different SFO>LAX flights on Mar 16, they all appear in one availability object. The MileageCost fields show the cheapest option. The RemainingSeats fields show the maximum across all flights. Use Get Trips to see individual flight details.
| Source | Program | Cabins | Seat Count | Trip Data | Taxes |
|---|---|---|---|---|---|
eurobonus | SAS EuroBonus | Y/J | Yes | Yes | Yes |
virginatlantic | Virgin Atlantic Flying Club | Y/W/J | Yes | Yes | Yes |
aeromexico | Aeromexico Club Premier | Y/W/J | Yes | Yes | Yes |
american | American Airlines AAdvantage | Y/W/J/F | Low seats only* | Yes | Yes |
delta | Delta SkyMiles | Y/W/J | Yes | Yes | Yes |
etihad | Etihad Guest | Y/J/F | Yes | Yes | Yes |
united | United MileagePlus | Y/W/J/F | Yes | Yes | Yes |
emirates | Emirates Skywards | Y/W/J/F | No | Partial** | Yes |
aeroplan | Air Canada Aeroplan | Y/W/J/F | Usually*** | Yes | Yes |
alaska | Alaska Mileage Plan | Y/W/J/F | Yes | Yes | Yes |
velocity | Virgin Australia Velocity | Y/W/J/F | Yes | Yes | Yes |
qantas | Qantas Frequent Flyer | Y/W/J/F | No | Yes | Yes |
connectmiles | Copa ConnectMiles | Y/J/F | No | Yes | Yes |
azul | Azul TudoAzul | Y/J | No | Yes | Yes |
smiles | GOL Smiles | Y/W/J/F | Yes | Yes | Yes |
flyingblue | Air France/KLM Flying Blue | Y/W/J/F | Yes | Yes | Yes |
jetblue | JetBlue TrueBlue | Y/W/J/F | Yes | Yes | Yes |
qatar | Qatar Privilege Club | Y/J/F | No | Yes | No |
turkish | Turkish Miles & Smiles | Y/J | No | Yes | No |
singapore | Singapore KrisFlyer | Y/W/J/F | No | Yes | No |
ethiopian | Ethiopian ShebaMiles | Y/J | Yes | Yes | Yes |
saudia | Saudi AlFursan | Y/J/F | Yes | Yes | Yes |
finnair | Finnair Plus | Y/W/J/F | Yes | Yes | Yes |
lufthansa | Lufthansa Miles&More | Y/J/F | Yes | Yes | Yes |
frontier | Frontier Airlines | Y | No | Yes | Yes |
spirit | Spirit Airlines | Y | Yes | Yes | Yes |
* AA provides seat counts only when remaining seats are low. Otherwise shows 0. ** Emirates connection flights may have missing fields. *** Aeroplan seat count is typically available but may be 0 in rare cases.
Cabin codes: Y = economy, W = premium economy, J = business, F = first
Search for award availability between specific airports and date ranges across all programs. Use this for targeted route/date searches.
curl -s -H "Partner-Authorization: $SEATS_AERO_API_KEY" \
"https://seats.aero/partnerapi/search?origin_airport=SFO&destination_airport=NRT&start_date=2026-08-01&end_date=2026-08-31" | jq '.'| Param | Required | Description |
|---|---|---|
origin_airport | Yes | Comma-delimited airport codes: SFO,LAX |
destination_airport | Yes | Comma-delimited airport codes: NRT,HND |
start_date | No | YYYY-MM-DD format |
end_date | No | YYYY-MM-DD format |
cabins | No | Comma-delimited: economy,business |
sources | No | Comma-delimited program filter: aeroplan,united |
only_direct_flights | No | Boolean. Only direct flights. |
carriers | No | Comma-delimited airline codes: DL,AA |
order_by | No | Default: date+cabin priority. lowest_mileage for cheapest first. |
include_trips | No | Boolean. Include flight details in response (slower, larger). |
minify_trips | No | Boolean. When combined with include_trips, returns fewer fields per trip for better performance. |
include_filtered | No | Boolean. Show expensive dynamic awards that were filtered out. |
take | No | Results per page. 10-1000, default 500. |
skip | No | Pagination offset. |
cursor | No | Cursor from previous response for consistent pagination. |
Each result summarizes all flights for one route/date/program:
| Field | Description |
|---|---|
ID | Availability ID (use with /trips/{id} for flight details) |
Route.OriginAirport | Origin airport code |
Route.DestinationAirport | Destination airport code |
Date | Departure date |
Source | Mileage program |
YAvailable, WAvailable, JAvailable, FAvailable | Cabin availability booleans |
YMileageCost, WMileageCost, JMileageCost, FMileageCost | Cheapest points cost across all flights (string) |
YRemainingSeats, WRemainingSeats, JRemainingSeats, FRemainingSeats | Max seats remaining across all flights |
YAirlines, WAirlines, JAirlines, FAirlines | Operating carriers |
YDirect, WDirect, JDirect, FDirect | Direct flight available |
ComputedLastSeen | When availability was last verified |
Get flight-level information from an availability object. Returns individual itineraries with segments, booking links, and coordinates.
curl -s -H "Partner-Authorization: $SEATS_AERO_API_KEY" \
"https://seats.aero/partnerapi/trips/{availability_id}" | jq '.'| Param | Required | Description |
|---|---|---|
id | Yes (path) | The availability object ID |
include_filtered | No (query) | Include expensive dynamic results filtered out |
| Field | Description |
|---|---|
Cabin | economy, premium, business, first |
MileageCost | Points cost (integer) |
AllianceCost | Cost through alliance partner programs (integer) |
TotalTaxes | Taxes in cents (divide by 100 for dollars) |
TaxesCurrency | Currency code (empty = USD) |
RemainingSeats | Seats left |
Stops | Number of stops |
TotalDuration | Minutes |
Carriers | Operating airlines |
FlightNumbers | Flight number string |
DepartsAt | Departure (local airport time) |
ArrivesAt | Arrival (local airport time) |
AvailabilitySegments | Array of individual flight legs |
Source | Mileage program |
The response also includes:
booking_links[] with label, link, and primary boolean for direct booking URLsorigin_coordinates and destination_coordinates (Lat/Lon)Each segment in AvailabilitySegments:
| Field | Description |
|---|---|
FlightNumber | e.g., "TK800" |
AircraftCode | e.g., "77W" |
AircraftName | e.g., "77W" |
OriginAirport | Segment origin |
DestinationAirport | Segment destination |
DepartsAt | Departure time (local airport) |
ArrivesAt | Arrival time (local airport) |
FareClass | Booking class letter (e.g., "I", "X") |
Distance | Segment distance in miles |
Order | Segment order (0-indexed) |
Retrieve large result sets from one mileage program. Use for broad regional exploration (e.g., "all United business class from North America to Europe").
curl -s -H "Partner-Authorization: $SEATS_AERO_API_KEY" \
"https://seats.aero/partnerapi/availability?source=united&origin_region=North%20America&destination_region=Europe&cabin=business&start_date=2026-08-01&end_date=2026-09-30" | jq '.'| Param | Required | Description |
|---|---|---|
source | Yes | Single mileage program |
cabin | No | economy, premium, business, first |
start_date | No | YYYY-MM-DD |
end_date | No | YYYY-MM-DD |
origin_region | No | North America, South America, Africa, Asia, Europe, Oceania |
destination_region | No | Same as above |
include_filtered | No | Boolean. Show filtered-out dynamic pricing. |
take | No | 10-1000, default 500 |
skip | No | Pagination offset |
cursor | No | From previous response |
List all monitored routes for a mileage program. Useful for understanding what city pairs have cached data.
curl -s -H "Partner-Authorization: $SEATS_AERO_API_KEY" \
"https://seats.aero/partnerapi/routes?source=united" | jq '.'Returns an array of route objects:
| Field | Description |
|---|---|
OriginAirport | Origin code |
DestinationAirport | Destination code |
OriginRegion | Region name |
DestinationRegion | Region name |
NumDaysOut | How far ahead this route is scanned |
Distance | Route distance |
Source | Mileage program |
Real-time search for ANY city pair (not limited to monitored routes). Commercial agreement required. Not available to Pro users via API.
5-15 second response times. Build proper error handling with exponential backoff.
curl -s -X POST -H "Partner-Authorization: $SEATS_AERO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"origin_airport":"SFO","destination_airport":"NRT","departure_date":"2026-08-15","source":"united","seat_count":2}' \
"https://seats.aero/partnerapi/live" | jq '.'| Param | Required | Description |
|---|---|---|
origin_airport | Yes | Single airport code |
destination_airport | Yes | Single airport code |
departure_date | Yes | YYYY-MM-DD |
source | Yes | Single mileage program |
seat_count | No | 1-9, default 1 |
disable_filters | No | Disable ALL filters (dynamic pricing + mismatched airports) |
show_dynamic_pricing | No | Disable only dynamic pricing filter, keep airport filtering |
Important: IDs returned from live search are NOT real and cannot be used with other Seats.aero APIs (Get Trips, etc.). Live results are ephemeral.
All list endpoints use skip + cursor. On first call, omit both. From the response, save the cursor value. On subsequent calls, pass cursor and increment skip by the number of results received.
The cursor is a Unix timestamp. Treat it as opaque. Rare duplicates are possible across pages. Deduplicate by ID.
# Business class availability sorted by cheapest miles
... | jq '[.data[] | select(.JAvailable == true) | {date: .Date, origin: .Route.OriginAirport, dest: .Route.DestinationAirport, miles: (.JMileageCost | tonumber), seats: .JRemainingSeats, airlines: .JAirlines, source: .Source, direct: .JDirect}] | sort_by(.miles)'
# Saver vs dynamic detection: if miles < threshold, likely saver
# AA: J saver ~57.5K for transatlantic, dynamic 100K+
# United: J saver ~60-80K for transatlantic, dynamic 100K+
... | jq '[.data[] | select(.JAvailable == true) | {date: .Date, miles: (.JMileageCost | tonumber), source: .Source, type: (if (.JMileageCost | tonumber) < 80000 then "likely_saver" else "dynamic" end)}]'
# Economy availability with 2+ seats
... | jq '[.data[] | select(.YAvailable == true and .YRemainingSeats >= 2) | {date: .Date, origin: .Route.OriginAirport, dest: .Route.DestinationAirport, miles: (.YMileageCost | tonumber), seats: .YRemainingSeats, source: .Source}] | sort_by(.miles)'
# All available cabins for a date range
... | jq '[.data[] | {date: .Date, origin: .Route.OriginAirport, dest: .Route.DestinationAirport, source: .Source, economy: (if .YAvailable then .YMileageCost else null end), business: (if .JAvailable then .JMileageCost else null end), first: (if .FAvailable then .FMileageCost else null end)}]'
# Direct flights only in business
... | jq '[.data[] | select(.JAvailable == true and .JDirect == true) | {date: .Date, miles: .JMileageCost, airlines: .JAirlines, source: .Source}]'
# Check data freshness (stale = potential phantom)
... | jq '[.data[] | {date: .Date, source: .Source, last_seen: .ComputedLastSeen}]'source has the cheapest miles for the same routeJMileageCost) only shows the cheapest itinerary. Trip details show all available options including Standard/dynamic tiers that the summary hides. This is mandatory for any search involving 2+ travelers.ComputedLastSeen. If stale (hours old), the availability may be phantom.After pulling trip details, always calculate layover time for every itinerary. Flag any layover over 3 hours. Do not silently present a bad-layover itinerary as the recommendation just because it's cheapest.
When the cheapest option has a layover over 3 hours:
Why this matters: Saver inventory often has the cheapest price but worst routings (long layovers, odd connections). Standard inventory typically costs 20-30% more in miles but offers significantly better itineraries. The cheapest award is not always the best award.
# Calculate layover duration from trip segments
# TotalDuration = full trip (gate to gate including layovers)
# Sum of individual segment durations = pure flight time
# Layover = TotalDuration - sum(segment durations)
# Flag if any single layover exceeds 180 minutes
curl -s -H "Partner-Authorization: $SEATS_AERO_API_KEY" \
"https://seats.aero/partnerapi/trips/{id}" | jq '
.data[] | {
miles: .MileageCost,
flights: .FlightNumbers,
total_min: .TotalDuration,
segments: [.AvailabilitySegments[] | {
flight: .FlightNumber,
from: .OriginAirport,
to: .DestinationAirport,
departs: .DepartsAt,
arrives: .ArrivesAt
}]
}
'These tools are available on the seats.aero website but not via the Partner API:
seats-aero-web skill (Patchright browser automation) to access price history charts.When creating alerts on seats.aero:
Pro account holders can connect seats.aero to third-party apps via the "Connect seats.aero" button on the website.
TotalTaxes is in cents (divide by 100 for dollars).MileageCost in availability objects is a string. In trip objects it's an integer.AllianceCost in trip objects shows what booking through an alliance partner would cost.include_filtered=true to see everything.ComputedLastSeen for freshness.© borski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/travel-hacking-toolkit/skills/seats-aero of borski/travel-hacking-toolkit.
Open the folder on GitHubat commit db82131
Seats Aero next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Seats Aero this skillborski/travel-hacking-toolkit | 688 | — | ~5.2k | Automated safety check: Notes | MIT | |
| Pp Seats Aeromvanhorn/printing-press-library | 2.1k | — | ~8.5k | Automated safety check: Notes | Apache-2.0 | |
| Flightsasgeirtj/system_prompts_leaks | 69k | — | ~2.1k | Automated safety check: Pass | CC0-1.0 | |
| Flightscodewhale-hq/Codewhale | 41k | — | ~258 | Automated safety check: Pass | MIT | |
| Frutiger Aerosickn33/agentic-awesome-skills | 47k | 1 repos | ~2.7k | Automated safety check: Pass | MIT | |
| Strict Programming Practicescode-yeongyu/oh-my-openagent | 70k | — | ~9.5k | Automated safety check: Pass | Custom licence |
mvanhorn/printing-press-library
Every Seats.aero Partner API endpoint, plus a local award-availability store that tells you what is new, what is still live, and where your miles reach nonstop.
asgeirtj/system_prompts_leaks
Research, book, or manage flights, including check-in. An agent skill from asgeirtj/system_prompts_leaks.
codewhale-hq/Codewhale
Track flights and look up status and schedules. An agent skill from codewhale-hq/Codewhale.
sickn33/agentic-awesome-skills
Web and App implementation guide for Frutiger Aero. An agent skill from sickn33/agentic-awesome-skills.
code-yeongyu/oh-my-openagent
Applies strict, type-first coding rules for Python, Rust, TypeScript and Go, loading the matching language reference before the agent writes or edits any code.
alirezarezvani/claude-skills
When the user wants to design, launch, or optimize a referral or affiliate program.
borski/travel-hacking-toolkit
Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright.
borski/travel-hacking-toolkit
Search Chase UR travel portal via Patchright for cash prices, points pricing, Points Boost offers, and Chase Edit hotel benefits.
borski/travel-hacking-toolkit
Deutsche Bahn train schedules, journey planning, and departures across Germany and into neighboring countries (Austria, Switzerland, Netherlands, France, Belgium).
borski/travel-hacking-toolkit
Search Sutochno.ru (СУТОЧНО.РУ), a Russian short-term apartment-rental platform where you book directly from owners and pay in rubles (Mir card / bank transfer).
borski/travel-hacking-toolkit
Search TicketsAtWork (EBG corporate perks) for hotels, theme park tickets, attractions, and rental cars via Patchright.
borski/travel-hacking-toolkit
Search VRBO (Vrbo / Expedia Group) vacation rentals including entire homes, condos, and cabins via Patchright browser automation.
Search award flight availability across 27 mileage programs via Seats.aero Partner API. Seats Aero is an agent skill from borski/travel-hacking-toolkit.aero Partner API.
Run `npx skills add borski/travel-hacking-toolkit --skill seats-aero -a claude-code`. Or copy the skill folder (plugins/travel-hacking-toolkit/skills/seats-aero in borski/travel-hacking-toolkit) into .claude/skills/seats-aero in your project. Claude Code loads it when a task matches its description.
Run `npx skills add borski/travel-hacking-toolkit --skill seats-aero -a codex`. Or copy the skill folder (plugins/travel-hacking-toolkit/skills/seats-aero in borski/travel-hacking-toolkit) into .agents/skills/seats-aero in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add borski/travel-hacking-toolkit --skill seats-aero -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/seats-aero, .gemini/skills/seats-aero, .github/skills/seats-aero and .opencode/skills/seats-aero in your project.
Going by SKILL.md and its folder, Seats Aero needs the command-line tools its instructions call (jq and curl) and credentials named SEATS_AERO_API_KEY. Our summary lists: A credential in SEATS_AERO_API_KEY.
SKILL.md names 3 domains. In commands or code: seats.aero; the agent is likely to contact it when it follows the instructions. As links in the text: developers.seats.aero and docs.seats.aero. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Seats Aero is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Seats Aero: Pp Seats Aero (mvanhorn/printing-press-library, 2.1k stars), Flights (asgeirtj/system_prompts_leaks, 69k stars), Flights (codewhale-hq/Codewhale, 41k stars) and Frutiger Aero (sickn33/agentic-awesome-skills, 47k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
borski (a GitHub user) maintains it in borski/travel-hacking-toolkit, which has 688 GitHub stars. The repository holds 46 skills in this directory. The repository was last updated on October 5, 2026.
Source: borski/travel-hacking-toolkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.