ihg.com
Anonymous hotel availability, pricing and search; plus logged-in IHG One Rewards member data (your own stays, bookings, points and reward activity) via…
Skill by overseers-desk
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/overseers-desk-ihg-com
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: data
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ihg-com
Tools it pre-approves 2
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Bash,Read
What's inside
- Skill name
ihg.com- Description
- Anonymous hotel availability, pricing and search; plus logged-in IHG One Rewards member data (your own stays, bookings, points and reward activity) via login.tcl.
- License
- MIT
- Allowed tools
- Bash,, Read
- Instructions
- 202 lines in SKILL.md · view on GitHub
Before installing
- Pre-approves some shell commands
- Instructions call the network
- Instructions read files in your home folder (~/.ssh, ~/.aws…)
Agent Skills spec issues
- name: only lowercase letters, digits and single hyphens allowed
Files (2)
- SKILL.md
- login.tcl
SKILL.md (first lines)
# IHG Hotel Search
The anonymous capabilities below need no login (pure curl against the public
availability API). For the member's own account (stays, bookings, points), see
[Member account (logged in)](#member-account-logged-in).
## Capabilities
1. **Hotel discovery by destination** — given a place name, finds all nearby IHG hotels with distance. Pure curl, no browser. Tested and working.
2. **Hotel availability with pricing** — given hotel mnemonic codes, dates, and guest count, returns rate plans with prices. Pure curl. Tested and working.
3. **Price calendar** — given a hotel mnemonic and a date range, returns the lowest nightly rate for each night. Tested and working.
4. **Destination resolution** — resolves a place name to coordinates. May return 403 on some IPs. Tested, works on some machines.
5. **Hotel details (names, addresses, brand info)** — given one or more hotel mnemonics, returns hotel name, full GDS name, brand, address, and more. Pure curl. The `profiles/details` host (`apis.ihg.com/hotels/v1/...`) is Akamai-WAF'd and returns `Access Denied` from some IPs for every method and fieldset (observed blocked 2026-06 while the availability host kept working). When blocked, fall back to `browser-serialiser --dump` on the public `ihg.com/.../<mnemonic>/hoteldetail` page for the name/area.
6. **Room-type / suite availability and refundable-rate check** — given one mnemonic and a date, lists each room type with its live availability tonight and flags which rate plans are refundable. Single property only. Pure curl. Tested and working.
## Member account (logged in)
`login.tcl` signs in to IHG One Rewards and reads the member's own data, driven through `browser-serialiser` (the serialised-browsing skill). IHG ends the session when the browser closes, so each run logs in fresh; there is no token to cache, and crude (pure-Python login) is not viable here.
Credentials live in `~/.config/magazines/config.ini` under `[ihg.com]` (`username`, `password`; the username may be a member number, an email, or a username). The safe interpreter cannot read that file, so the credentials arrive as arguments. Substitute them in the shell with the reader from [`COMMAND-SURFACE.md`](../../COMMAND-SURFACE.md), which moves the password from the file to the argument list without it passing through the conversation:
```bash
ini() { python3 -c 'import configparser,os,pathlib,sys;p=pathlib.Path(os.environ.get("XDG_CONFIG_HOME") or pathlib.Path.home()/".config")/"magazines/config.ini";c=configparser.ConfigParser(interpolation=None);c.read(p);print(c.get(sys.argv[1],sys.argv[2],fallback=""))' "$1" "$2"; }
CRED=("$(ini ihg.com username)" "$(ini ihg.com password)")
browser-serialiser ihg.com/login "${CRED[@]}" # account summary (name, tier, member #, points)
browser-serialiser ihg.com/login "${CRED[@]}" --stays # + stays and points-activity JSON
browser-serialiser ihg.com/login --check # probe the sign-in form, do not submit
```
The reader disables ConfigParser interpolation, without which a literal `%` in the password raises `InterpolationSyntaxError` and silently yields an empty one. A key `ini` finds unset arrives as an empty argument, and the skill then stops before opening the site and names the `[ihg.com]` key it lacks; pass that to the user as the missing prerequisite.
The account summary emits the IHG One Rewards member number on its own `Member #:` line (parsed from the account-mgmt home page's "Member #" label), then the raw page-text dump that carries name, tier and points balance.
`--stays` returns two raw JSON blocks: `members/v2/profiles/me/stays` (every booking, ordered oldest-first: `confirmationNumber`, check-in/out dates, `hotelMnemonic`, `roomTypeCode`, `rateCode`, `stayId`) and `members/v1/profiles/me/activities` (the points ledger).
### How it works, and what it cannot get
- Sign-in is a SAP CDC (Gigya) widget inside an Angular app. Fill the *visible* widget inputs through the React native-value setter (CDP `Input.insertText` doubles the value in Gigya's password field, which fails login); submit with the policed `click` verb (a trusted CDP mouse click — a synthetic in-page `click()` does not fire Gigya's login). Click the Gigya form's own `input.gigya-input-submit`, not the header "Sign in" link (an `<a>` earlier in the DOM that only toggles a panel).
- The member APIs on `apis.ihg.com` require a bearer (`x-ihg-sso-token`) the app holds in memory plus its `x-cdc-api-key`; neither is reconstructable from storage. The skill captures them from the app's own first authenticated XHR, triggered by clicking a past stay's "View Hotel Bill", then replays the member endpoints with those headers.
- **Points & Cash vs points-only**: the activities ledger distinguishes them. A Points & Cash reward shows a `displayCategory: "Points and Cash Activity"` entry ("Points and Cash Points Purchased – N Night(s)", the points bought with the cash) alongside the `REWARD_NIGHTS_REDEMPTION` points redemption; a points-only reward shows only the redemption.
- **The cash amount is not in any member API.** The stays, folio and reservation endpoints return points and metadata only (folio comes back empty; reservation-detail paths 404). The cash figure lives solely in the booking-confirmation email (from `tx.ihg.com`), charged in USD — fields "Nightly cash amount" / "Total credit card charge". Use the courier skill for that.
- Pace logins. After several rapid sign-ins, Gigya begins returning a transient "We're sorry, something went wrong. Please contact Customer Care" (distinct from the credential-mismatch message); it clears after a few minutes.
## Brand codes
| Code | Brand |
|---|---|
| HICP | Crowne Plaza |
| HIEX | Holiday Inn Express |
| HOLI | Holiday Inn |
| HIRT | Holiday Inn Resort |
| ICON | InterContinental |
| INDG | Hotel Indigo |
| VXVX | voco |
| KIMN | Kimpton |
| RGNT | Regent |
| SIXS | Six Senses |
| EVEN | EVEN Hotels |
| STBR | Staybridge Suites |
| CNDW | Candlewood Suites |
## API details
All endpoints use these headers:
- `x-ihg-api-key: se9ym5iAzaW8pxfBjkmgbuGjJcr3Pj6Y` (static client-side key from IHG's JS bundle)
- `ihg-language: en-GB`
- `ihg-sessionid:` (any UUID)
- `ihg-transactionid:` (any UUID)
- `Origin: https://www.ihg.com`
- `Referer: https://www.ihg.com/`
- `Sec-Fetch-Mode: cors`
- `Sec-Fetch-Site: same-site`
- `User-Agent: $UA`, sent as `-A "$UA"`:
```bash
UA='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36' # tested against apis.ihg.com on 2026-10-04
```
The Akamai edge denies a Chrome version that is too old (137 was refused and 139 accepted on that date) and any `HeadlessChrome` UA, with an `Access Denied` page in place of JSON.
The hotel details endpoints require `Sec-Fetch-Mode` and `Sec-Fetch-Site`. Including them on all calls is safe — they do not break the availability endpoint.
### Hotel discovery by geo-search
Use the same availability endpoint but with `geoLocation` instead of `hotelMnemonics`. These two modes are mutually exclusive — do not include both.
Endpoint: `POST https://apis.ihg.com/availability/v3/hotels/offers?fieldset=summary,summary.rateRanges`
Request body:
```json
{
"geoLocation": [{"latitude": -28.017742, "longitude": 153.425732}],
"radius": 50,
"maxRadius": 200,
"incrementRadiusBy": 50,
"distanceUnit": "KM",
"distanceType": "STRAIGHT_LINE",
"startDate": "YYYY-MM-DD",
"endDate": "YYYY-MM-DD",
"products": [{
"productCode": "SR",
"startDate": "YYYY-MM-DD",
"endDate": "YYYY-MM-DD",
"quantity": 1,
"guestCounts": [{"otaCode": "AQC10", "count": ADULTS}]
}]
}
```
Critical: `geoLocation` must be an **array** of coordinate objects. A single object not in an array returns 400.
Get coordinates from the destinations API first. Response includes `hotels[].hotelMnemonic`, `hotels[].brandCode`, `hotels[].distance`, and pricing.
### Availability API (by mnemonic codes)
Endpoint: `POST https://apis.ihg.com/availability/v3/hotels/offers?fieldset=summary,summary.rateRanges`
Request body:From overseers-desk/magazines, MIT.
More from overseers-desk/magazines
- 0.580score
officeworks.com.au
overseers-desk
Officeworks printing prices: flyer and document-print quantity ladders, per size, paper stock, siding and colour.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
interlinetravel.com.au
overseers-desk
Interline Travel cruise deals at industry staff rates on interlinetravel.com.au: prices, availability, interline rates, search.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
ndis.gov.au
overseers-desk
Australia's official NDIS provider register: search registered disability providers by suburb/postcode and radius, or confirm whether a named provider (or…
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
premierinn.com
overseers-desk
Premier Inn (Whitbread) hotel room availability, live nightly pricing, room-type inventory, rate plans (Flex/Standard/Non-Flex), occupancy rules.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
marriott.com
overseers-desk
find hotel properties near a destination, lookup by property code; info (name, brand, address, coords, images, reviews).
SkillAFreshness: A★ 1Claude Code +9 - 0.543score
linkedin
overseers-desk
search people, and search inside named members' connections, read profiles, read a job posting, check keywords, verify connect eligibility, find role/company.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
otter.ai
overseers-desk
Otter.ai recordings: list, rename, trash, fetch speaker-labelled transcripts, and download mp3 audio from a logged-in Otter account.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
beatthatflight.com.au
overseers-desk
Cheapest fares on any route worldwide, shopped across dozens of online agencies at once: one-way, return or multi-city, with the agency's booking link.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
csair.com
overseers-desk
China Southern (CZ) fares and itinerary availability by route and date, including China domestic + international through-fares OTAs do not price.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
flightnetwork.com
overseers-desk
Travel-document PDF from a Flightnetwork booking-confirmation email (airline, flight numbers, times, passenger names, e-tickets, baggage allowance) — the PDF…
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
hainanairlines.com
overseers-desk
Hainan Airlines (HU) fares and flight availability by route and date: international itineraries priced per cabin, China domestic schedules with seat counts.
SkillBFreshness: B★ 1Claude Code +9 - 0.540score
kiwi.com
overseers-desk
Cheapest flights across airlines that do not interline, including self-transfer combinations no airline or OTA sells, priced for the whole party.
SkillBFreshness: B★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 36
- Last commit (this folder)
- Oct 19, 2026 (11 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/overseers-desk/magazines
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from overseers-desk
- 0.580score
premierinn.com
overseers-desk
Premier Inn (Whitbread) hotel room availability, live nightly pricing, room-type inventory, rate plans (Flex/Standard/Non-Flex), occupancy rules.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
officeworks.com.au
overseers-desk
Officeworks printing prices: flyer and document-print quantity ladders, per size, paper stock, siding and colour.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
interlinetravel.com.au
overseers-desk
Interline Travel cruise deals at industry staff rates on interlinetravel.com.au: prices, availability, interline rates, search.
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
marriott.com
overseers-desk
find hotel properties near a destination, lookup by property code; info (name, brand, address, coords, images, reviews).
SkillAFreshness: A★ 1Claude Code +9 - 0.580score
ndis.gov.au
overseers-desk
Australia's official NDIS provider register: search registered disability providers by suburb/postcode and radius, or confirm whether a named provider (or…
SkillAFreshness: A★ 1Claude Code +9 - 0.543score
linkedin
overseers-desk
search people, and search inside named members' connections, read profiles, read a job posting, check keywords, verify connect eligibility, find role/company.
SkillBFreshness: B★ 1Claude Code +9
Cite this page
ihg.com skill. Agent Mart. https://agentmart.dev/skills/overseers-desk-ihg-com (last updated 2026-10-24)