Versions

Check that the API is up, find out when its data has changed, and get the full API contract. To keep a local copy of a data file current, save its hash from /versions and download the file again only when the hash changes.


Get API status

Whether the API is up, which query features it supports, and the record count and version of the main datasets.

Properties

  • Name
    status
    Type
    any
    Description
  • Name
    capabilities
    Type
    object
    Description
  • Name
    datasets
    Type
    object
    Description

Request

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

Response

{
  "capabilities": {
    "bulk_lookup": true,
    "collection_querying": true,
    "cross_type_search": true,
    "facets": true
  },
  "datasets": {
    "attraction": {
      "count": 5993,
      "version": "4948ca90c8"
    },
    "items": {
      "count": 4116,
      "version": "1164752cfe"
    },
    "mice": {
      "count": 1311,
      "version": "00b5dddc0f"
    },
    "power-types": {
      "count": 10,
      "version": "e51e8bd99d"
    },
    "recipes": {
      "count": 266,
      "version": "eecbb9266c"
    },
    "scoreboards": {
      "count": 152,
      "version": "f55067e396"
    },
    "shops": {
      "count": 76,
      "version": "5c06097f7d"
    },
    "store": {
      "count": 261,
      "version": "df5acd26a4"
    },
    "titles": {
      "count": 20,
      "version": "e643b3b863"
    }
  },
  "status": "ok"
}

Get data versions

A short hash for every data file, keyed by name (mice, items, environments, and so on). A hash changes only when its file does. Responses are cached for five minutes.

Properties

  • Name
    [name]
    Type
    string
    Description
    Keyed by data file name, such as mice. The hash of that file's current contents.

Request

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

Response

{
  "community-map-data": "53e9b926e0",
  "cre-mice-groups": "6ed57968d1",
  "environments-events": "2e062aba5f",
  ...
}

Get the OpenAPI spec

The API contract as an OpenAPI 3.1 document: every endpoint, its parameters and response shapes, and every data file. Also available at /openapi.json.

Request

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

Response

{
  "openapi": "3.1.0",
  "info": {
    "title": "MouseHunt API",
    "version": "1.0.0",
    "description": "Unofficial, read-only API for public MouseHunt data."
  },
  "servers": [
    {
      "url": "https://api.mouse.rip"
    }
  ],
  "tags": [
    {
      "name": "Search & Querying",
      "x-page": "search",
      "x-summary": "Cross-type search, filtering, sorting, pagination, and facet counts for items and mice.",
      "description": "Every collection accepts query parameters for filtering, searching, sorting, pagination, and field selection. [`/search`](#search) returns compact, relevance...",
      "x-sections": [
        {...}
      ]
    },
    {
      "name": "Mice",
      "x-page": "mice",
      "x-summary": "Mouse data including stats, weaknesses, minlucks, wisdom, attraction rates, and images.",
      "description": "`/mouse` is an alias for `/mice`. Any `:id` accepts a numeric ID or a mouse type (slug)."
    },
    ...
  ],
  "x-tagGroups": [
    {
      "name": "Search & Querying",
      "tags": [
        "Search & Querying"
      ]
    },
    {
      "name": "Mice",
      "tags": [
        "Mice",
        "Burroughs Rift Mice",
        ...
      ]
    },
    ...
  ],
  "paths": {
    "/attraction": {
      "get": {
        "summary": "Get attraction populations",
        "description": "One record per population, queryable like the other collections. Filter on `location`, `stage`, `cheese`, `charm` or `source`; `q` searches the location, sta...",
        "parameters": [...],
        "responses": {...},
        "tags": [...],
        "x-example": "/attraction?mouse=burglar&sort=-rate&limit=1",
        "x-nav": "Populations"
      }
    },
    "/attraction/location": {
      "get": {
        "summary": "Get attraction rates by location",
        "description": "The same rates nested as `location → stage → cheese → charm → mouse → percentage`. Filters keep the hierarchy and percentages, and remove empty branches; no ...",
        "parameters": [...],
        "responses": {...},
        "tags": [...],
        "x-example": "/attraction/location?location=bazaar&cheese=super_brie_cheese&charm=-",
        "x-nav": "Rates by location"
      }
    },
    "/attraction/location/{location}": {
      "get": {
        "summary": "Get attraction rates for a location",
        "description": "Just that location's stages, with the same filters as `/attraction/location`. Unknown locations return `404`.",
        "parameters": [...],
        "responses": {...},
        "tags": [...],
        "x-example": "/attraction/location/bazaar?cheese=super_brie_cheese&charm=-",
        "x-nav": "Rates for a location"
      }
    },
    ...
  },
  "components": {
    "pathItems": {
      "AttractionMeta": {
        "get": {...}
      },
      "Attraction": {
        "get": {...}
      },
      "Items": {
        "get": {...}
      },
      "Item": {
        "get": {...}
      },
      "Mice": {
        "get": {...}
      },
      "Mouse": {
        "get": {...}
      }
    },
    "parameters": {
      "Id": {
        "name": "id",
        "in": "path",
        "required": true,
        "schema": {...},
        "description": "Numeric ID or type slug."
      },
      "CollectionQuery": {
        "name": "q",
        "in": "query",
        "schema": {...},
        "description": "Case-insensitive partial text search."
      },
      "SearchQuery": {
        "name": "q",
        "in": "query",
        "required": true,
        "schema": {...},
        "description": "Case-insensitive partial search term."
      },
      "SearchTypes": {
        "name": "types",
        "in": "query",
        "schema": {...},
        "description": "Comma-separated: `item`, `location`, `mouse`. Defaults to all three."
      },
      "SearchLimit": {
        "name": "limit",
        "in": "query",
        "schema": {...},
        "description": "Maximum number of results, 0 to 50. Defaults to 10."
      }
    },
    "responses": {
      "ItemCollection": {
        "description": "Item collection. Use `meta=true` for the paginated envelope.",
        "headers": {...},
        "content": {...}
      },
      "MouseCollection": {
        "description": "Mouse collection. Use `meta=true` for the paginated envelope.",
        "headers": {...},
        "content": {...}
      },
      "Item": {
        "type": "object",
        "required": [...],
        "properties": {...},
        "additionalProperties": true,
        "content": {...}
      },
      "Mouse": {
        "type": "object",
        "required": [...],
        "properties": {...},
        "additionalProperties": true,
        "content": {...}
      },
      "Facets": {
        "type": "object",
        "required": [...],
        "properties": {...},
        "content": {...}
      },
      "InvalidQuery": {
        "description": "Invalid query parameter",
        "content": {...}
      }
    },
    "schemas": {
      "Item": {
        "type": "object",
        "required": [...],
        "properties": {...},
        "additionalProperties": true
      },
      "Mouse": {
        "type": "object",
        "required": [...],
        "properties": {...},
        "additionalProperties": true
      },
      "SearchResponse": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "Facets": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "Status": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "MouseLoot": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "ItemDropper": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "Title": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "PowerType": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "Scoreboard": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "ItemRef": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "Recipe": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "StorePack": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "AttractionPopulation": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "Shop": {
        "type": "object",
        "required": [...],
        "properties": {...}
      },
      "Error": {
        "type": "object",
        "required": [...],
        "properties": {...}
      }
    }
  }
}