Blog

Developers · 19 Sept 2026 · 7 min

The Knowledge API: every number in the game, with its source

Damage, cooldowns, costs, and patch changes for 14 games as one JSON corpus built for AI agents. Each value names the page or file it was read from, how well it is attested, and the patch it took effect in. One key. Here is what it holds and how to read it.

Rows of blank glass tiles on thin stands in a dark archive, one tile lit and lifted forward

Game numbers live in three places: the game files, the patch notes, and a wiki that copies both a little late. Every patch moves some of them. A model asked "what is the Vandal's body damage" answers from whichever of those it last saw, with no date attached.

The Knowledge API is our answer to that. One JSON corpus, 14 games, 22,457 entities and 148,678 facts as of 19 September 2026, read from the live index. Every fact carries the source it was read from, a provenance tier that says how well it is attested, and the patch it took effect in. Superseded values stay in the file with the patch they stopped in. One key, one header, no scraping.

What a fact looks like

Open the Vandal's file and the first thing you get is resolved[]: the current value per field and qualifier, the one an answer should use. Body damage at 0–50 m is one entry:

api/valorant/entity/vandal.json · resolved[2]
{
  "field": "weapon.damage",
  "qualifier": "0-50m body",
  "value": 40,
  "unit": "hp",
  "tier": "official_gamefiles",
  "patchFrom": "1.07",
  "confidence": 0.98,
  "source": "https://valorant-api.com/v1/weapons (Vandal)",
  "evidence": "valorant-api damageRanges 0-50m"
}

Nine keys, each doing one job. field and qualifier say what was measured and under what condition. value and unit are the figure. tier is how well it is attested (more below). patchFrom is when it took effect. confidence is the corpus's confidence in its own extraction, not in the source. source and evidence are the receipt: the page or file it was read from, and the text it was read out of, as the source wrote it. The superseded 39 sits in the same file with its own receipt: "1.07 Buff: Damage increased 39 >>> 40", from the patch note.

A number the corpus does not state is null. Nothing is filled in from memory, averaged, or guessed. The index says this in its own words: an absent figure is absent on purpose.

The history stays in the file

Beside resolved[] sits facts[]: every value ever stated for the entity, the superseded ones included. A value that stopped carries patchTo. For the Vandal that is one line: body damage was 39 until patch 1.07 made it 40. For Ahri's Orb of Deception in League of Legends it is nine lines, including rank 1 damage per pass going from 40 to 35 in patch 26.06 and the AP ratio moving from 45% to 50% in 14.4.

That is what makes a patch diff a filter rather than a scrape: pick the field, sort by patch, and the before and after are both there with the note each came from.

Seven tiers, best first

Two sources can state the same figure and deserve different trust. The tier says which kind you are holding:

  • Game files. The developer's own data, via a wiki that mirrors it or shipped data read directly. The Vandal's damage; the AK-47's cycle time, read from a Counter-Strike 2 install.
  • Patch note. Confirmed by a specific note, and dated to it.
  • In game. Observable in the client. An ability's charge count.
  • Measured. Derived by Ascend from replay files, with the tolerance stated.
  • Community. Adopted from a third-party dataset, attributed. The Fandom wikis, PokéAPI.
  • Unconfirmed. The source itself flags the figure as an estimate.
  • Inferred. Arithmetic on stated values, not itself stated anywhere. A fire rate computed from a cycle time.

The games

Fourteen at launch, each with its own source and its own terms. The counts are from the index on 19 September 2026; the landing page reads them live.

  • VALORANT: 185 entities, 1,767 facts. Agents, abilities, weapons, maps. Ability figures from Riot's official wiki, weapon figures from Riot's shipped data.
  • League of Legends: 1,863 entities, 29,304 facts. Champions, spells, items, runes, with per-rank values and patch history.
  • Teamfight Tactics: 5,708 entities, 21,510 facts. Units, traits, items, augments, scoped to the set they were read in.
  • Counter-Strike 2: 88 entities, 2,277 facts. Weapons and the map roster, read from the game's own files.
  • 2XKO: 315 entities, 1,495 facts. Frame data.
  • Legends of Runeterra: 4,377 entities, 6,920 facts. Cards and Path of Champions.
  • Fortnite: 837 entities, 30,795 facts. Weapons by rarity, with per-patch bands.
  • Overwatch 2: 1,773 entities, 3,816 facts. Heroes, abilities, maps, Stadium powers.
  • Rainbow Six Siege: 124 entities, 831 facts. Weapons, and maps with callouts.
  • PUBG: BATTLEGROUNDS: 119 entities, 1,054 facts. Weapons, vehicles, armour, items.
  • Marvel Rivals: 660 entities, 1,930 facts. Heroes and abilities.
  • Pokémon: 2,620 entities, 18,352 facts. Base stats, moves, abilities, the type chart.
  • Minecraft: Java Edition: 1,580 entities, 2,434 facts. Items and enchantments, read from Mojang's data generator.
  • Destiny 2: 2,208 entities, 26,193 facts. Weapons, from Bungie's manifest.

Each game's index entry carries the attribution line its source licence requires, and you print it wherever you show the data. Three sources restrict commercial use (Overwatch 2, PUBG, Destiny 2); the docs name them so you know before you build. None of the publishers is affiliated with or endorses this project.

How to read it

The corpus is files, not queries. Three reads get you from nothing to a cited value: the index for the games, a game's list to find the entity, the entity's file for its facts. Every path needs a key in the x-api-key header.

shell
$ curl -s -H "x-api-key: $KB_API_KEY" https://kb.play-ascend.com/api/index.json
$ curl -s -H "x-api-key: $KB_API_KEY" https://kb.play-ascend.com/api/valorant/entities.json
$ curl -s -H "x-api-key: $KB_API_KEY" https://kb.play-ascend.com/api/valorant/entity/vandal.json

The list gives you the file segment for every entity, which is the only way to build the third URL. fields.json per game says what each field measures and the bounds a value must fall inside. published.json says when the files last changed, so a cache can key on it instead of a clock.

Keys come from the developer console, and the console states the limits per tier; as of this post the Free tier is one key per account at 60 requests per five minutes: enough to build an integration and see the receipts, not enough to crawl. Pro is 1,500 per five minutes plus 2 bulk downloads an hour: a file per game with every fact and its patch window, and one SQLite database that covers all of them. The console states the price.

What it is for

The shape was set by what people build on game data, and each of these reads a specific file:

  • Assistants and bots. Answer with the number, its source, and the patch, not a paraphrase of a wiki. One entity file per question.
  • Overlays and companion apps. Cooldowns, durations, and damage by range in the client, refreshed when the corpus is.
  • Calculators. Time to kill and breakpoints from per-range damage and fire rate, every input traceable to its tier.
  • Patch diffs. What changed, from the superseded values and the patch each stopped in.
  • Writing. Check a figure before it goes in the video or the article, and say how well it is attested.
  • Analytics. Map pools, kits, and weapon figures per patch, joined to match data by date, so a March stat reads against March's game.

What it is not

It is not match data, player stats, or a live game feed. It is the reference layer those things read against. An MCP server that gives an agent the same files as tools is next; the docs mark it as coming and will show the config when it ships.

Get a key, read the Vandal, and tell us what you are building. The next games in are the ones people ask for.

Questions

Is the Knowledge API free?

There is a Free tier: one key per account, 60 requests per five minutes as the console states it today, every game and every file. Pro raises the limit to 1,500 per five minutes and adds the bulk files. The developer console states the price; the landing page does not.

How often does the data update?

The corpus is rebuilt on a nightly schedule and published when a file changed. published.json carries the timestamp, the commit, and a changed flag, so you can poll it instead of guessing.

Can I use it commercially?

For most games, yes, with the attribution line each game's index entry carries. Three sources restrict commercial use: the Overwatch 2 and PUBG wikis are CC BY-NC-SA, and Bungie's policy for Destiny 2 is non-commercial. The docs page names them, and every index entry states its licence.

Does it have player or match data?

No. It carries the game's own figures: weapons, abilities, champions, items, maps, and what a patch did to them. Match data and player stats are separate products.

Is this affiliated with Riot, Valve, or the other publishers?

No. Every game's attribution line says so. The figures are facts extracted from each publisher's own files or from wikis under their stated licences, and the trademarks belong to their owners.

On Ascend

Get a key and read your first file

Open it

Published 19 Sept 2026

Share on X