{
  "disclosure": "Some links on this page earn us a commission from qualifying bookings, at no extra cost to you.",
  "city_ids_note": "Trip.com numeric city IDs. Keys are location names AFTER stripParenthetical() (\"Sapporo (Hokkaido)\" -> \"Sapporo\"). Trip.com's /hotels/list only accepts the numeric id — a city name does not work. A city missing from this map makes affiliateLink() return null (no link) rather than risk sending travelers to the wrong city; test/affil.test.mjs fails if any bloom.json location is missing here.",
  "city_ids": {
    "Aomori": 4351,
    "Fukuoka": 248,
    "Hiroshima": 262,
    "Kagoshima": 735,
    "Kanazawa": 3663,
    "Kobe": 423,
    "Kochi": 1173,
    "Kyoto": 734,
    "Nagano": 4123,
    "Nagoya": 360,
    "Nara": 1175,
    "Niigata": 1163,
    "Osaka": 219,
    "Sapporo": 641,
    "Sendai": 585,
    "Shizuoka": 1176,
    "Takamatsu": 5999,
    "Tokyo": 228,
    "Yokohama": 271
  },
  "programs": {
    "hotels": {
      "label": "Hotels in {city}",
      "enabled": true,
      "url_template": "https://www.trip.com/hotels/list?city={cityId}&display={cityPlain}&optionId={cityId}&optionType=City&optionName={cityPlain}&Allianceid=9701728&SID=327039049&trip_sub1={subId}&checkin={from}&checkout={to}",
      "note": "Trip.com affiliate deep link. Allianceid=9701728 (account) / SID=327039049 (site) are public link parameters, not secrets. trip_sub1 carries the page identifier for per-page reporting. Template keys {cityQuery},{from},{to} remain part of the affil.js contract even though this template fills {cityId}/{cityPlain} instead of {cityQuery}."
    },
    "tours": {
      "label": "Things to do in {city}",
      "enabled": true,
      "url_template": "https://www.trip.com/things-to-do/list?searchkey={cityId}&searchtype=1&Allianceid=9701728&SID=327039049&trip_sub1={subId}",
      "note": "Trip.com Attractions & Tours. searchkey is the SAME numeric id as hotels' city= (verified 2026-08-01 across 8 cities incl. Kochi/Takamatsu/Aomori). No date params by design — attractions listings are not date-scoped."
    }
  }
}
