Games & Comics — entry 071 of 75

Valorant (non-official)

Verified Aug 2026

Valorant-API.com is a free, keyless, non-official reference for Valorant's static game data — agents and abilities, weapon skins and chromas, buddies, cards, currencies, game modes, maps, seasons, and titles — including image assets for most entities. It's a fan project, not endorsed by or affiliated with Riot Games, and covers only static reference data rather than live match or account data.

Valorant-API.com is a free, keyless reference for Valorant's static game data, wrapping every response in a {status, data} envelope that mirrors the HTTP status code inside the body. A live GET this run against /version returned a genuine 282 B envelope at HTTP 200, content-type: application/json; charset=utf-8.

valorantriot-gamesgame-datastatic-dataunofficial
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score88out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs14/20Documentation URL provided
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 88 on greatapis.com
<a href="https://greatapis.com/api/valorant-non-official/"><img src="https://greatapis.com/badge/valorant-non-official.svg" alt="Scored 88 on greatapis.com"></a>

Auth quickstart

  1. No API key, signup, or credit card required — the live GET above returned real client version data with no auth header of any kind attached. CORS is Origin-gated: a live request this run carrying Origin: https://greatapis.com came back with access-control-allow-origin: *, while the identical request with no Origin header returned no access-control-* header at all. Direct browser fetches still work, since a browser always sends Origin on a cross-origin request.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Fetch the current game client build info

GEThttps://valorant-api.com/v1/version

200 application/json; charset=utf-8

{
  "status": 200,
  "data": {
    "manifestId": "54C782AB97C0AB9C",
    "branch": "release-13.02",
    "version": "13.02.00.5092570",
    "buildVersion": "7",
    "engineVersion": "5.3.2.0",
    "riotClientVersion": "release-13.02-shipping-7-5092570",
    "riotClientBuild": "111.0.0.3261.5663",
    "buildDate": "2026-07-16T22:11:11Z"
  }
}

The flagship /agents/{uuid} endpoint wraps the same {status, data} envelope around a much larger object — a live GET this run against Gekko's uuid (e370fa57-4757-3604-3648-499e1f642d3f) returned a genuine 4,106 B response nesting a role object and a 4-element abilities array, each carrying its own displayIcon asset URL under media.valorant-api.com.

Try it

Developer reference

Base URLhttps://valorant-api.com/v1
Key endpoints
  • GET/agents/{uuid}
  • GET/agents
  • GET/weapons
  • GET/version

Gotchas & limits

  • The envelope's shape changes entirely on error — there is no data key at all, only on success. A live GET this run against a well-formed but nonexistent agent uuid returned real HTTP 404, 57 B: {"status":404,"error":"the requested uuid was not found"}. Code that unconditionally reads body.data.displayName after checking response.ok will throw on this well-formed-but-missing case exactly like it would on a malformed one.
  • The locale is a query parameter here (?language=en-US), not a path segment like TCGdex's locale routing (quartet 4) — and the two APIs fail differently on a bad value. Omitting language entirely defaults silently to English (confirmed live this run: byte-identical 4,106 B response with and without the param on the same agent). But supplying an unrecognized value doesn't fall back — it 404s the whole request: a live GET this run with ?language=zz-ZZ on the same valid agent uuid returned a different 404, 61 B: {"status":404,"error":"the requested language was not found"}, distinct from the bad-uuid error text above despite sharing the same HTTP status.
  • The docs live on a separate host from the API. The entry's docsUrl (https://dash.valorant-api.com) is an interactive reference site — confirmed live this run, 200, text/html; charset=utf-8 — while every actual data call goes to the bare valorant-api.com host. Its response size is not stable enough to pin — it varies by a few dozen bytes from request to request, because the Cloudflare-injected font CSS is emitted in a non-deterministic order. Eight consecutive probes this run happened to land between 20,688 and 20,728 B, but that spread is just what those eight requests returned, not a bound the page stays inside.
  • The API applies two different policies to unknown input depending on whether it's the value or the parameter name it doesn't recognize — and the difference is what tells you a filter actually ran. An unrecognized value for a known parameter hard-404s the whole request (?language=zz-ZZ, above), but an unrecognized parameter name is silently ignored: a live GET this run against /agents?bogusParam=true returned a normal 200 with the full 107,834 B payload, exactly as if the parameter were absent, so a typo'd filter name fails open with no error. Against that control, boolean schema fields are confirmed real server-side filters: /agents?isPlayableCharacter=false returned 200 with just 24 B — {"status":200,"data":[]} — while ?isPlayableCharacter=true and the unfiltered /agents both returned the identical 107,834 B / 29-entry payload. Since unknown parameters are demonstrably ignored rather than honored, that empty result can only mean the server genuinely applied the filter. In practice all 29 agents currently in the collection are isPlayableCharacter: true, so the filter is a no-op today — but it is the real way to exclude test/unreleased entries if Riot ships any.
  • Several fields in the agent schema are only partially backfilled, so null means "not filled in for this agent" rather than "not supported". Tallied across all 29 agents live this run: characterTags is non-null on 11 of 29 (e.g. Raze ["Area Damage Specialist"], Cypher ["Detection","Defensive Lockdown"], Jett ["Evasion","Mobility"]) and null on the other 18 — Gekko, the example above, happens to be one of the nulls, so checking a single agent will mislead you. The 11 tagged agents are Valorant's earliest roster and every agent added later is null, though the payload can't corroborate that itself: releaseDate is the epoch-zero placeholder 1970-01-01T00:00:00Z on 25 of 29 agents, with a real date on only 4 (Tejo, Waylay, Veto, Miks). voiceLine, by contrast, is null on all 29 and can be treated as genuinely unpopulated.

Availability

Uptime100%
Median latency77 ms
Last checkUp · 200 · Sep 2026

3 checks since Aug 2026. A person runs this check by hand, not an automated monitor.