avios-cli
A CLI and TUI for your Avios programmes — check balances and browse transactions without leaving the terminal. British Airways and Iberia use avios.com; Finnair Plus uses Finnair's own OAuth and loyalty API.
⚠️ Unofficial. This project is not affiliated with, authorised by, or endorsed by Avios, British Airways, Finnair or IAG Loyalty. It drives the same private endpoints the providers' websites use, with your own logged-in session. Use at your own risk; it may break at any time and may be against the provider's terms of service.
The avios tui dashboard (demo data). Regenerate with uv run python scripts/screenshot.py.
Status
Early alpha, built in the open. See the roadmap.
Install
Requires Python 3.10+.
uvx avios-cli --help # run without installing
# or install it, then use the `avios` command:
pip install avios-cli
avios --help
Or from source, for development:
git clone https://github.com/alexechoi/avios-cli
cd avios-cli
uv sync
uv run avios --help
Log in
avios.com has no credential API — login is Auth0 Universal Login behind hCaptcha and
SMS/passkey MFA — so avios login opens a real browser, waits while you finish
logging in (password, captcha, SMS code), and captures the session once you land
on the dashboard. It needs the login extra:
uvx --from 'avios-cli[login]' avios login
uvx --from 'avios-cli[login]' avios login finnair
It launches your installed Google Chrome (no extra download). If you don't have
Chrome, install Playwright's browser once with
uvx --from playwright playwright install chromium.
Prefer not to open a browser? Import the cookie from a Chrome you're already logged into avios.com with:
uvx --from 'avios-cli[login]' avios login --from-browser
This scans all your Chrome profiles and uses whichever one is actually logged into avios.com (it tells you which). If you have several profiles, you can target one directly:
uvx --from 'avios-cli[login]' avios login --from-browser --profile "Profile 1"
Plain uvx avios-cli login won't work — the isolated environment doesn't include
the login extra.
Stuck in an endless captcha loop? That's bot detection on the automated
browser. Use --from-browser instead: log into avios.com in your normal Chrome
(you'll get one normal captcha), then run
uvx --from 'avios-cli[login]' avios login --from-browser.
Finnair uses a different CAS/OAuth flow. avios login finnair opens the Finnair Plus
balance page, lets you complete password and MFA in the real browser, and captures the
OAuth session from the authenticated loyalty request. --from-browser is not available
for Finnair because browser-cookie import cannot read that token.
Each programme session is stored at ~/.config/avios/accounts/<programme>.json
(mode 600). Sessions expire; just log in to that programme again. Use
avios logout <programme> for one account or avios logout for all accounts.
Usage
Commands span all logged-in accounts by default and show a combined total; add
--account/-a <programme> to focus on one.
avios accounts # every logged-in account: balance + status
avios balance # per-account balances + combined total
avios transactions --limit 20 # recent transactions, merged across accounts
avios pending # pending Avios, merged across accounts
avios balance --account iberia # just one programme
avios overview # dashboard summary
avios whoami # name, tier, membership, email
avios raw /shell/api/users/current/accounts # hit any endpoint directly
Add --json to accounts, balance, transactions, pending or whoami for
scriptable output. With a single account, balance keeps the individual/household
breakdown.
TUI
avios tui
A full-screen dashboard across all your accounts: a combined balance header (with a
per-programme breakdown) and a scrollable transactions table with a Programme column,
merged newest-first. Press r to refresh, q to quit.
Roadmap
- Project scaffolding, packaging and CI
- Session + cookie storage layer
- Typed API client (balance, transactions, accounts, profile)
- Browser-assisted
avios login - CLI commands
- Textual TUI dashboard
- Multiple accounts (BA, Iberia, Aer Lingus, Finnair) with combined views
- Reward-flight availability search (coming soon — needs a British Airways capture)
Development
uv sync # installs the project + the `dev` dependency-group
uv run ruff check .
uv run mypy src
uv run pytest
See CONTRIBUTING.md for the full workflow and CHANGELOG.md for release notes.
Security
No passwords are handled or stored — only programme session cookies or OAuth tokens,
kept locally under ~/.config/avios/accounts/ (mode 600). See
SECURITY.md.
License
Metadata
Release files for avios-cli 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| avios_cli-0.3.0.tar.gz | 124.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| avios_cli-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 155.5 kB
Release files / avios_cli-0.3.0.tar.gz
| Download URL | avios_cli-0.3.0.tar.gz |
|---|---|
| Size | 124.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d81166f31c262bfbd8c86654d4feebb0e28ebad0122acc881263c1cf2aa2c19e
|
|
BLAKE2b-256 checksum How to use checksums |
117c3964e32aef07db90dd1fb235cfc7aa1e8517015b56116b293fb7a224cdc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.
Transparency logRelease files / avios_cli-0.3.0-py3-none-any.whl
| Download URL | avios_cli-0.3.0-py3-none-any.whl |
|---|---|
| Size | 30.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7c8d132b5cc527db0f4faccdd87498de8f7c22cf59e7bf0da684648c1bbe422b
|
|
BLAKE2b-256 checksum How to use checksums |
c90da1ef177eef74dc3643f7da0e21395cc78c5ac85d023ff16d1a8b60b4398c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.
Transparency logSecurity for avios-cli 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for avios_cli-0.3.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 27, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.