# whichemulator.wtf Ask API

**Endpoint:** `GET https://whichemulator.wtf/ask`

The Ask API answers questions about emulating a console, handheld, home computer or arcade hardware. Answers come from the same data as the site's pages: one recommended emulator per system, its platforms and licence, alternatives, RetroArch cores, BIOS notes and setup steps. Setup steps are published only here, not on the pages. Answers are composed from that data, not generated by a model, and cover only the systems the site lists.

No account or API key is required.

## Example request

```sh
curl --fail-with-body --silent --show-error --max-time 10 -G 'https://whichemulator.wtf/ask' \
  --data-urlencode 'q=Which PS2 emulator should I use on a Mac?' \
  --data-urlencode 'page=/ps2/'
```

The question is matched against system names and common nicknames, so it works best when it names the system. Platform words (Windows, Mac, Linux, Android, iPhone, Steam Deck), "RetroArch" and "BIOS" change which details come first. Setup and install questions return the setup steps. A question that names two systems gets an answer for both.

## Request

| Parameter | Required | Meaning |
| --- | --- | --- |
| `q` | Yes | A free-form question, 3–500 characters. |
| `page` | No | Local path of the page the question came from, such as `/ps2/`. Used when `q` doesn't name a system. |

## Response

HTTP `200` with JSON:

```json
{
  "answer": "PlayStation 2: use PCSX2 (open source, runs on Windows, macOS, Linux). …",
  "consoles": ["ps2"],
  "sources": [{ "title": "PlayStation 2 emulator: PCSX2", "url": "https://whichemulator.wtf/ps2/" }],
  "follow_ups": [
    { "question": "Which PlayStation 2 emulator should I use on Android?", "url": "https://whichemulator.wtf/ask?q=…&page=%2Fps2%2F" }
  ]
}
```

- `answer` is plain text.
- `sources` are the pages the answer comes from, with titles, for citation.
- `follow_ups` are related questions; each `url` is a complete GET request for that question.
- An empty `consoles` list means the question didn't name a covered system; the answer then lists the systems that are covered.

With `Accept: text/markdown` the same answer comes back as Markdown, with sources and follow-ups as links.

## Pages as Markdown

Every page has a Markdown copy: `https://whichemulator.wtf/<slug>.md` (for example `/ps2.md`), and `/index.md` for the home page. Page URLs also return Markdown when the request sends `Accept: text/markdown`. `https://whichemulator.wtf/llms-full.txt` holds every page in one file.

## Errors and limits

| Status | Meaning |
| --- | --- |
| `400` | `q` isn't 3–500 characters, or `page` isn't a local path. |
| `405` | Only GET and HEAD are supported. |
| `429` | Over 30 requests per minute from one IP. The limit resets after 60 seconds. |
