Agent skill
awardwallet
Query AwardWallet loyalty program balances, status, and history. Use when discussing points, miles, travel rewards, airline status, or trip planning on points. Triggers on "how many points", "miles balance", "elite status", "loyalty program", "AwardWallet", "what points do I have", "transfer partners", or any question about points/miles inventory.
Install this agent skill to your Project
npx add-skill https://github.com/borski/travel-hacking-toolkit/tree/main/skills/awardwallet
SKILL.md
AwardWallet Skill
Query loyalty program balances, elite status, and transaction history via the AwardWallet Business Account Access API.
Source: business.awardwallet.com — Requires a Business account.
Authentication
Set these in your .env file:
AWARDWALLET_API_KEY— Get from https://business.awardwallet.com/profile/apiAWARDWALLET_USER_ID— Your connected user ID. Find it via the List Connected Users endpoint below.
All requests use the X-Authentication header.
API Base
https://business.awardwallet.com/api/export/v1
Quick Start: Get All Balances
curl -s -H "X-Authentication: $AWARDWALLET_API_KEY" \
"https://business.awardwallet.com/api/export/v1/connectedUser/$AWARDWALLET_USER_ID" | jq '.accounts'
Response Fields
Each account object contains:
| Field | Description |
|---|---|
accountId |
Unique ID for deep dive |
code |
Provider code (e.g., "united", "chase", "amex") |
displayName |
Human name (e.g., "United Airlines (MileagePlus)") |
kind |
Category: Airlines, Hotels, Credit Cards, etc. |
balance |
Formatted balance string |
balanceRaw |
Numeric balance |
properties |
Array with status, account number, expiration, etc. |
history |
Last 10 transactions (call /account/{id} for full history) |
errorCode |
1 = successfully updated, 2 = invalid creds, etc. |
Useful jq Filters
All filters below assume the curl output is piped in. Replace ... with the full curl command above.
# Just airline balances with status
... | jq '[.accounts[] | select(.kind == "Airlines") | {name: .displayName, balance: .balanceRaw, status: ((.properties // [])[] | select(.kind == 3) | .value) // "none"}]'
# Just hotel balances with status
... | jq '[.accounts[] | select(.kind == "Hotels") | {name: .displayName, balance: .balanceRaw, status: ((.properties // [])[] | select(.kind == 3) | .value) // "none"}]'
# Just credit card / transferable points
... | jq '[.accounts[] | select(.kind == "Credit Cards") | {name: .displayName, balance: .balanceRaw}]'
# All balances sorted by amount (descending), non-zero only
... | jq '[.accounts[] | {name: .displayName, kind: .kind, balance: .balanceRaw} | select(.balance > 0)] | sort_by(-.balance)'
# Elite status across all programs
... | jq '[.accounts[] | {name: .displayName, status: ((.properties // [])[] | select(.kind == 3) | .value) // null} | select(.status != null)]'
# Accounts with errors (need password update, etc.)
... | jq '[.accounts[] | select(.errorCode != 1) | {name: .displayName, error: .errorCode}]'
# Combined summary for trip planning (airlines + transferable points, non-zero, sorted)
... | jq '[.accounts[] | select((.kind == "Airlines" or .kind == "Credit Cards") and .balanceRaw > 0) | {name: .displayName, kind: .kind, balance: .balanceRaw, status: ((.properties // [])[] | select(.kind == 3) | .value) // null}] | sort_by(-.balance)'
Deep Dive: Full Account History
For full transaction history (beyond last 10):
curl -s -H "X-Authentication: $AWARDWALLET_API_KEY" \
"https://business.awardwallet.com/api/export/v1/account/{accountId}" | jq '.account[0].history'
Travel Timeline
Get saved itineraries for a connected user:
curl -s -H "X-Authentication: $AWARDWALLET_API_KEY" \
-X POST \
-H "Content-Type: application/json" \
-d '{"start": "2026-01-01", "end": "2027-01-01"}' \
"https://business.awardwallet.com/api/export/v1/travel-timeline/$AWARDWALLET_USER_ID" | jq '.itineraries'
List All Supported Providers
curl -s -H "X-Authentication: $AWARDWALLET_API_KEY" \
"https://business.awardwallet.com/api/export/v1/providers/list" | jq '.'
Account Property Kinds
When parsing properties arrays, these kind values are standardized:
| Kind | Meaning |
|---|---|
| 1 | Account number |
| 2 | Expiration |
| 3 | Elite status |
| 4 | Lifetime points |
| 5 | Member since |
| 6 | Expiring balance |
| 7 | YTD Miles/Points |
| 8 | YTD Segments |
| 9 | Next elite level |
| 10 | Points needed to next level |
| 11 | Segments needed to next level |
| 12 | Name |
| 13 | Last activity |
| 14 | Points needed for next reward |
| 15 | Status expiration |
| 16 | Points to retain status |
| 17 | Segments to retain status |
| 18 | Alliance elite level |
| 19 | Status miles/points |
Error Codes
| Code | Meaning |
|---|---|
| 0 | Never updated |
| 1 | Success |
| 2 | Invalid credentials |
| 3 | Locked out |
| 4 | Provider error or user action needed |
| 5 | Provider disabled by AwardWallet |
| 6 | Parse failure |
| 7 | Password missing |
| 8 | Disabled to prevent lockouts |
| 9 | Success with warning |
| 10 | Security question needed |
| 11 | Timed out |
Workflow: Trip Planning Summary
When planning a trip, run this workflow:
- Pull all accounts
- Filter to Airlines and Credit Cards (transferable points)
- Show a clean summary: program name, balance, elite status
- Note any accounts with errors that might need updating
- Cross reference with transfer partners for the destination
Notes
- History in user/member detail responses is capped at 10 records. Use
/account/{id}for full history. balanceRawis the numeric value.balanceis formatted with commas.- Connected users control their own access level. If data seems limited, they may have restricted sharing.
- SubAccounts exist for programs like Capital One where one login has multiple cards. Check
subAccountsarray.
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
chase-travel
atlas-obscura
Search Atlas Obscura for weird, wonderful, and hidden gem places near any destination. Find the interesting stuff, not boring plaques. Search by coordinates, get full details with descriptions and images.
rapidapi
Search Google Flights Live and Booking.com Live via RapidAPI. Use as a secondary source for flight cash prices and hotel availability/pricing. Triggers on "Booking.com", "booking prices", "RapidAPI", "secondary flight search", "hotel prices on Booking", or when SerpAPI results need a second opinion. Also useful for vacation rental pricing.
premium-hotels
Search Amex Fine Hotels & Resorts (FHR), The Hotel Collection (THC), and Chase Sapphire Reserve Hotel Collection (Chase Edit) properties by city. Compare credits, benefits, and stacking opportunities across programs.
google-flights
Search Google Flights for flight prices and schedules using browser automation. Use when user asks to search flights, find airfare, compare prices, check flight availability, or look up routes. Covers ALL airlines including Southwest (which no API can reach). Triggers include "search flights", "find flights", "how much is a flight", "flights from X to Y", "cheapest flight", "flight prices", "airfare", "flight schedule", "nonstop flights", "when should I fly".
ignav
Search for flights using the Ignav API. Fast REST API for flight prices and booking links. Use alongside other flight sources for price comparison. Always include in every flight search. Triggers on any flight-related search request.
Didn't find tool you were looking for?