The apis.io Playground re-proves every example request nightly, but not the score that admitted it

The apis.io Playground re-proves every example request nightly, but not the score that admitted it

The first thing the apis.io MCP server tells a newly connected agent is to call get_playground_apis. It returns a curated list of APIs that need no key, cost nothing, and come with an example request that has already been called and answered. The list is small on purpose: 22 verified APIs, filtered from a funnel of 1,245 candidates, down to 508, then 70, then the 22 that answered a live unauthenticated call.

What is on it

Thirteen entries are grouped as starter and nine as deep archive. Twenty need no key at all, and two, OpenHands and ANU’s research repository, need an instant, free, self-serve key. The starters are the ones worth an agent’s first call: Scryfall for Magic card data, Datamuse for word lookups, Frankfurter for exchange rates, Gutendex for Project Gutenberg’s catalog, USGS Water, the Bureau of Labor Statistics, arXiv, Elexon, the UK’s Carbon Intensity service, and yr.no forecasts. The deep archive is nine university surfaces, several of them OAI-PMH repositories: open, free and admitted, but a poor first experience, so they are demoted rather than deleted.

Safety is a filter, not a claim. Money movement, health data, messaging side effects, ad spend and identity checks are excluded outright, and where an agentic access profile exists the API must be at least 60% read operations with nothing physical.

The proof is the interesting part

Every example_request returned HTTP 200 to an unauthenticated GET from two different HTTP clients, and it is re-proved nightly. When this was written, the served list carried checked_at: 2026-09-26 and returned 12 entries with one withheld: Gutendex, whose drift note reads “client-dependent: urllib 200, curl 403.” Its host fingerprints the TLS handshake, so the list’s promise of “call it directly” holds for one client and not the other. The playground withholds it rather than half-keep the promise. Where a host insists on a header, the entry says so: Scryfall’s carries Accept: application/json.

Where it has not kept up

Admission also requires a Kin Score of 40 or higher, and that number is not re-proved. The playground file still carries the score each entry had when it was admitted. The provider records have moved since:

API Playground score Current score
Scryfall 57.6 strong 52.0 developing
yr.no 43.3 39.0 thin
Carbon Intensity 40.0 37.7 thin
Frankfurter 40.4 37.2 thin

Three starters now sit below the bar that let them in. They still answer, which is the promise an agent cares about most, but the quality gate is a snapshot, not a check.

The other gap is the front door. The payload’s docs field points at apis.io/playground, and that page returns a 404. There is no human page yet. What exists is the REST endpoint, free and keyless, and the get_playground_apis tool on the apis.io MCP server at https://apis.io/mcp. The developer area does not yet mention either.

What would move it

Re-score the admitted entries on the same nightly run that re-calls them, and withhold any that fall under 40 the way Gutendex was withheld for failing a client. Then publish the page the docs field already promises. The playground is the most honest list on the platform because it refuses to vouch for what it has not called today. It should hold its scores to the same rule.

← ElevenLabs scores exemplar on one 390-operation contract, and stops a band short for agents
The catalog indexes 127,757 JSON Schemas, and most never say which fields are required →