# Which OpenRouter :free models still work?

Run by AY Automate on 2026-11-03 (catalog pulled 09:19:40 UTC), first run 2026-10-29 (01:01:51 UTC). Article: https://www.ayautomate.com/blog/openrouter-free-models

- `check.py`: pulls OpenRouter's `/api/v1/models` catalog, keeps every `:free` ID and every model priced 0/0, pulls `/api/v1/models/<id>/endpoints` for each, then checks a watchlist of 27 `:free` IDs that older guides still recommend. With `--probe` it sends one tiny chat request ("Reply with the word OK and nothing else.", `max_tokens` 32) to each listed free model in 3 passes (one full sweep per pass, so each model is retried a minute or more later), and one request to each watchlist ID.
- `snapshot-2026-10-29.json`: everything the run saw: catalog size, endpoints (provider, status, 1-day uptime, max output, tool support), and every probe (HTTP status, latency, serving provider, routed model, error text).
- `results.md`: the printed summary tables.
- `snapshot-2026-10-29-first-run.json`: an earlier run the same day (00:55 UTC) with one probe per model, kept for the quota count below. Its catalog and watchlist results match the main run.

"Answered" means HTTP 200 with text or reasoning output. With a 32-token cap, reasoning models often spent the budget thinking, so some answers have no visible text. This checks that an endpoint serves requests, not output quality.

Result on 2026-11-03 (`snapshot-2026-11-03.json`, `results-2026-11-03.md`): 451 models in the catalog, 14 `:free` IDs. 6 answered all 3 passes, 1 answered once, 3 returned 429 every time, 2 failed every time with a provider error (503, 404), 2 returned 403 (agentic apps only, expiring 2026-11-04). All 27 watchlist IDs failed: 15 return 404 and point to the paid ID, 11 have no provider at all (hermes-3-llama-3.1-405b joined this group since Oct 29), 1 is not a valid ID. 78 requests sent, 22 answered; the key's `free_model_daily_requests.used` read 22 after the run. Every answered probe was billed $0.

Result on 2026-10-29 (`snapshot-2026-10-29.json`, `results.md`): 457 models in the catalog, 16 `:free` IDs. 6 answered all 3 passes, 3 answered some, 5 returned 429 every time, 2 returned 403 (agentic apps only). All 27 watchlist IDs failed: 16 return 404 and point to the paid ID, 10 have no provider at all, 1 is not a valid ID. Every probe was billed $0 (`usage.cost` 0 or absent). The key's `free_model_daily_requests` counter (from `/api/v1/key`) rose by 38 across this run and an earlier same-day run (130 probe requests, 43 of them HTTP 200), so rejected requests (404, 403, 429) did not appear to count toward the 1,000-a-day quota.

Reproduce: `python3 check.py` (no key needed) or `OPENROUTER_API_KEY=... python3 check.py --probe`. Probes count against your daily `:free` quota (50 requests a day under 10 credits purchased, 1,000 at 10 or more).
