mu*index
lezen
thema

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.

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.
genre and language
Descriptive values supplied by sources. Use values returned by facets, such as games declaring Fantasy. These labels are claims, not independently verified gameplay assessments.
protocol and tls
Observed connection capabilities. For example, measured GMCP with measured TLS. Repeat protocol for multiple requirements.
codebase, version, lineage, family, charset
Engine and technical facets. Read their evidence labels; 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=true and adult=1
Include archived games or games declaring adult content. Both are excluded from the default listing.
limit and offset
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. playersNowState distinguishes measured, declared and unknown counts. playersNowProvenance supplies source, confirmation time and staleness. A declared count is what the game reported.
  • Date the observation. generatedAt dates the response; lastConfirmedAt dates 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.

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.