Attraction

Mouse attraction rates from MH-Tools and MHCT, per population: a location, stage, cheese and charm. - means no stage or no charm.


Get attraction populations

One record per population, queryable like the other collections. Filter on location, stage, cheese, charm or source; q searches the location, stage, cheese, charm and mouse names. Sort on location, stage, cheese, charm, source, sample_size or rate.

Query parameters

  • Name
    q
    Type
    string
    Description
    Case-insensitive partial text search.
  • Name
    mouse
    Type
    string
    Description
    Mouse type or name; comma-separated or repeated. Returns only populations that attract it, lists only that mouse in each, and adds its rate, which you can sort on.

Properties

  • Name
    location
    Type
    string
    Description
    Location type.
  • Name
    location_name
    Type
    string
    Description
  • Name
    stage
    Type
    string
    Description
    Stage name, or - for no stage.
  • Name
    cheese
    Type
    string
    Description
    Cheese type.
  • Name
    cheese_name
    Type
    string
    Description
  • Name
    charm
    Type
    string
    Description
    Charm type, or - for no charm.
  • Name
    charm_name
    Type
    string
    Description
    Charm name, empty for no charm.
  • Name
    source
    Type
    string
    Description
    mh-tools or mhct.
  • Name
    sample_size
    Type
    integer | null
    Description
    Hunts the rates are based on; null when the source doesn't report it.
  • Name
    rate
    Type
    number
    Description
    That mouse's attraction rate as a percentage. Only present when filtering by mouse.
  • Name
    mice
    Type
    array of object
    Description
    The mice attracted, highest rate first.
  • Name
    type
    Type
    string
    Description
    Mouse type.
  • Name
    name
    Type
    string
    Description
    Mouse name.
  • Name
    rate
    Type
    number
    Description
    Attraction rate as a percentage.

Request

GET
https://api.mouse.rip/attraction?mouse=burglar&sort=-rate&limit=1
const response = await fetch('https://api.mouse.rip/attraction?mouse=burglar&sort=-rate&limit=1')

Response

[
  {
    "location": "bazaar",
    "location_name": "Bazaar",
    "stage": "-",
    "cheese": "gilded_cheese",
    "cheese_name": "Gilded Cheese",
    "charm": "gilded_trinket",
    "charm_name": "Gilded Charm",
    "source": "mhct",
    "sample_size": 113,
    "mice": [
      {
        "type": "burglar",
        "name": "Burglar Mouse",
        "rate": 26.5487
      }
    ],
    "rate": 26.5487
  }
]

Get attraction rates by location

The same rates nested as location → stage → cheese → charm → mouse → percentage. Filters keep the hierarchy and percentages, and remove empty branches; no matches returns {}.

Values match case-insensitively. Repeat a parameter for several values (location=bazaar&location=zugzwang_library); different filters combine with AND. Commas don't separate values.

Query parameters

  • Name
    location
    Type
    array of string
    Description
    Environment slug, e.g. bazaar or cursed_city.
  • Name
    stage
    Type
    array of string
    Description
    Exact stage name, or - for no stage.
  • Name
    cheese
    Type
    array of string
    Description
    Cheese type slug.
  • Name
    charm
    Type
    array of string
    Description
    Charm type slug, or - for no charm.
  • Name
    mouse
    Type
    array of string
    Description
    Mouse type slug.
  • Name
    v
    Type
    string
    Description
    Optional cache token; not a filter.

Request

GET
https://api.mouse.rip/attraction/location?location=bazaar&cheese=super_brie_cheese&charm=-
const response = await fetch('https://api.mouse.rip/attraction/location?location=bazaar&cheese=super_brie_cheese&charm=-')

Response

{
  "bazaar": {
    "-": {
      "super_brie_cheese": {
        "-": {...}
      }
    }
  }
}

Get attraction rates for a location

Just that location's stages, with the same filters as /attraction/location. Unknown locations return 404.

Request

GET
https://api.mouse.rip/attraction/location/bazaar?cheese=super_brie_cheese&charm=-
const response = await fetch('https://api.mouse.rip/attraction/location/bazaar?cheese=super_brie_cheese&charm=-')

Response

{
  "-": {
    "super_brie_cheese": {
      "-": {
        "burglar": 20.28,
        "bionic": 16.88,
        "granite": 16.42,
        "steel": 16,
        "master_burglar": 8.14,
        "mutated_white": 5.18,
        "mutated_grey": 4.65,
        "nibbler": 3.24,
        "crown_collector_mouse": 3.13,
        "mutated_brown": 2.41,
        "dwarf": 1.67,
        "zombie": 1.59,
        "black_widow": 0.4
      }
    }
  }
}

Get attraction sources and coverage

Where each population came from and its sample size, using the same hierarchy through charm, plus source timestamps, thresholds, and counts of the populations left out. MHCT entries also have per-mouse encounter counts, first and last hunt times (Unix seconds), and the MHCT stages pooled into the population.

Request

GET
https://api.mouse.rip/attraction/meta
const response = await fetch('https://api.mouse.rip/attraction/meta')

Response

{
  "mh_tools": {
    "url": "https://github.com/tsitu/MH-Tools",
    "retrieved_at": "2026-10-10T17:21:04.047Z"
  },
  "mhct": {
    "url": "https://backups.mhct.win/nightly/hunthelper_nightly.txt.zip",
    "data_through": "2026-11-11T08:32:55.000Z",
    "window_days": 365,
    "min_hunts": 100,
    "method": "Mouse encounters / all attracted hunts, including failed catches; failed attractions excluded.",
    "dimensions": [
      "location",
      "all recorded stage tags",
      ...
    ],
    "limitations": "Observed proportions pool other equipment and hunt details; they are estimates, not guaranteed game probabilities.",
    "excluded_locations": {
      "zugzwang_tower": "Chess progress and Pawn Pincher traps alter the population.",
      "iceberg": "Base-specific populations need an equipment adapter.",
      "rift_valour": "Floor type must be resolved within each floor range.",
      "epilogue_falls": "Zone quality is stored in hunt details."
    },
    "dropped_populations": {
      "missing_stage": 405,
      "requires_detail_adapter": 3193,
      "small_sample": 38322
    }
  },
  "population_counts": {
    "mh-tools": 1937,
    "mhct": 4056
  },
  "populations": {
    "bazaar": {
      "-": {
        "super_brie_cheese": {...},
        "gouda_cheese": {...},
        "brie_cheese": {...},
        "swiss_cheese": {...},
        "marble_cheese": {...},
        "mozzarella_cheese": {...},
        "cheddar_cheese": {...},
        "white_cheddar_cheese": {...},
        "gilded_cheese": {...}
      }
    },
    "calm_clearing": {
      "-": {
        "cherry_cheese": {...},
        "super_brie_cheese": {...},
        "gouda_cheese": {...},
        "brie_cheese": {...},
        "swiss_cheese": {...},
        "marble_cheese": {...},
        "mozzarella_cheese": {...},
        "cheddar_cheese": {...},
        "white_cheddar_cheese": {...}
      }
    },
    "cape_clawed": {
      "-": {
        "super_brie_cheese": {...},
        "gouda_cheese": {...},
        "brie_cheese": {...},
        "swiss_cheese": {...},
        "crunchy_cheese": {...},
        "gumbo_cheese": {...},
        "shell_cheese": {...}
      }
    },
    ...
  }
}


Older name for rates by location

The same as /attraction/location, including its filters.

Query parameters

  • Name
    location
    Type
    array of string
    Description
    Environment slug, e.g. bazaar or cursed_city.
  • Name
    stage
    Type
    array of string
    Description
    Exact stage name, or - for no stage.
  • Name
    cheese
    Type
    array of string
    Description
    Cheese type slug.
  • Name
    charm
    Type
    array of string
    Description
    Charm type slug, or - for no charm.
  • Name
    mouse
    Type
    array of string
    Description
    Mouse type slug.
  • Name
    v
    Type
    string
    Description
    Optional cache token; not a filter.

Sources

MH-Tools is the preferred source. MHCT fills in only populations MH-Tools doesn't have; its rates are never mixed into an MH-Tools population. /attraction/meta gives each population's source and sample size.

MHCT rates use the last 365 days of hunts, with at least 100 attracted hunts per population. They count catches and failed catches, not failures to attract. MHCT stages are renamed to the matching MH-Tools stage, and finer MHCT splits (Sunken City depths, Furoma Rift batteries, Train Station steps, Bountiful Beanstalk room loot, Moussu Picchu weather) are pooled into it. Stages without a clear MH-Tools match keep their MHCT name, with simultaneous tags joined by +.

Rates are observed proportions, not exact game odds, and other equipment and hunt details are pooled. Zugzwang's Tower, Iceberg, Valour Rift, and Epilogue Falls use MH-Tools data only. A missing population does not mean a 0% attraction rate.