Public API and data
Find MUDs, MUSHes, MUCKs and MOOs, inspect their connection details, and reuse observations with their sources and dates. The public read API needs no account or API key.
Start reading
The API index lists the routes and this deployment's dataset licence. The OpenAPI 3.1 contract (JSON) describes parameters, response fields, nullable values, and errors for client authors and automated tools.
Begin with the first ten games by name.
Each entry supplies a readable url and an apiUrl for its full record.
Save the immutable id; names and slugs can change. Former slugs redirect permanently.
GET /api/games?limit=10&sort=name
GET /api/games/{id-or-slug}
These paths are relative to this site's origin. JSON keys and enum values use camelCase. Responses are available to browser clients through public CORS.
Search and filter
The game listing and API share a query language.
Start with the listing's facets: they contain available values, counts,
selections, and the kind of evidence behind each filter.
q- Text search across names, taglines, and codebases.
genreandlanguage- Descriptive values supplied by sources. Use values returned by facets, such as games declaring Fantasy. These labels are claims, not independently verified gameplay assessments.
protocolandtls- Observed connection capabilities. For example,
measured GMCP with measured TLS.
Repeat
protocolfor multiple requirements. codebase,version,lineage,family,charset- Engine and technical facets. Read their
evidencelabels; a lineage classification is MUIndex's grouping, while a declared family comes from a source. uncounted=yes- Games that answered recently but have no readable count in the relevant probe interval. Not measured zeroes.
unreachable=yes- Recent reachability classification, separate from player counts and the archive.
archived=trueandadult=1- Include archived games or games declaring adult content. Both are excluded from the default listing.
limitandoffset- Pagination: default limit 100, maximum 500. Advance offset by the returned count until reaching total. The catalogue can change between requests.
Open-ended facets accept !value to exclude a value and ~unknown
to select missing information. The contract also lists activity bands, last-seen filters,
trends, and available sorts. A 400 response describes invalid filters in a JSON problem document.
Interpret the evidence
- Null is unknown. A measured zero is a real count of zero. Never convert a missing count to zero.
- Read the count's source.
playersNowStatedistinguishes measured, declared and unknown counts.playersNowProvenancesupplies source, confirmation time and staleness. A declared count is what the game reported. - Date the observation.
generatedAtdates the response;lastConfirmedAtdates the underlying evidence. A newly downloaded response can carry old evidence. - A gap has no inferred cause. A missing presence bucket means no measurement. It cannot establish that a game was empty or unreachable. Reachability has its own series.
- Reachability has limits. It describes connections from one vantage point at intervals. Another player may reach a game that this crawler cannot.
The full game's fields dictionary retains descriptive values alongside provenance.
When summarizing a game, attribute declared themes and languages to their sources. Do not infer
permadeath, beginner friendliness, accessibility, or play style from an engine name or a missing field.
For an answer or citation, link to the game's url and include the relevant observation date.
About MUIndex explains the measurement policy.
Game pages offer a plain-text view and carry structured metadata drawn from their displayed information.
History and exports
GET /api/games/{id-or-slug}/presence?grain=day
GET /api/games/{id-or-slug}/availability
Both accept ISO 8601 from and to timestamps. Daily presence and availability
default to 90 days and accept up to 1826 days; hourly presence defaults to 7 days and accepts up to 90 days.
Presence statistics cover counted probes only. Counted and uncountable sample totals count probes, not people.
- Change feeds (JSON and links to RSS): newly discovered by this crawler, observed as unreachable, and observed as reachable again.
- Catalogue export (JSON): licence, attribution, and full game records.
- Catalogue export (NDJSON): one full game record per line, with no header record.
Exports include archived games and games declaring adult content. The NDJSON response carries its licence
identifier in the X-MUIndex-Licence header; consult the API index for attribution and terms.
Reuse and attribution
Read the configured licence and attribution from the API index or JSON export before republishing. Preserve sources and dates, cite individual game pages, and distinguish reported claims from observations.
Cache responses. Send the previous ETag as If-None-Match on later reads;
unchanged responses return 304 without a body. Follow Cache-Control,
use modest request rates, and prefer an export to fetching every game separately for a bulk import.
The public catalogue and contract are crawlable. Account and administration services are separate and require their own authorization. This read API cannot edit records or contact game operators.