API per sviluppatori
API pubblica, gratuita e in sola lettura. Sono file JSON statici: nessuna chiave, nessun account, solo richieste GET. Questa pagina è l'indirizzo stabile della documentazione.
Indirizzo base: https://statcade.com/api/
Indice macchina: /api/index.json · Licenza: uso libero con attribuzione
Endpoint
Ogni file ha in cima version, generated_at e license. La versione attuale dello schema è 1. Un aggiornamento può aggiungere campi, non cambiare il significato di quelli già pubblicati: se un campo cambia significato, version sale.
| Metodo | Percorso | Contenuto |
|---|---|---|
| GET | /api/index.json | Versione, data di generazione, elenco degli endpoint e link alla licenza. |
| GET | /api/games.json | Elenco dei giochi in catalogo, con i campi principali. |
| GET | /api/games/{appid}.json | Scheda completa di un gioco. Esempio: /api/games/730.json. |
| GET | /api/rankings.json | Classifiche correnti: giocatori connessi su Steam e copie vendute. |
| GET | /api/releases.json | Uscite in calendario, le stesse della pagina Uscite. |
appid è l'id Steam numerico (730) oppure w- seguito da uno slug per i titoli non Steam (w-tetris). Un appid assente risponde con la pagina 404 del sito, in HTML, non con un JSON di errore.
Esempi di richiesta
curl:
curl -s https://statcade.com/api/games/730.json
fetch, da una pagina su un altro dominio (il CORS è aperto, vedi sotto):
const res = await fetch("https://statcade.com/api/rankings.json");
if (!res.ok) throw new Error(res.status);
const data = await res.json();
const top = data.rankings.players.entries[0];
console.log(top.rank, top.name, top.players);
Esempi di risposta
Estratto di /api/games.json. L'elenco vero contiene tutto il catalogo, ordinato per giocatori connessi decrescenti; i giochi senza quel dato stanno in fondo, a parità di nome. Qui c'è una sola riga e count vale 1 perché l'esempio torni: nel file pubblicato count è il numero di elementi di games.
{
"version": 1,
"generated_at": "2026-10-17T05:22:00Z",
"license": "https://statcade.com/api/licenza/",
"data_updated": "2026-10-17T05:22:00Z",
"count": 1,
"games": [
{
"appid": "730",
"name": "Counter-Strike 2",
"short": "CS2",
"steam": true,
"players": 568345,
"sales_millions": null,
"sales_scope": null,
"sales_note": null,
"genres": ["Sparatutto", "Azione", "Free-to-Play"],
"tags": ["Free-to-Play"],
"developer": "Valve",
"publisher": "Valve",
"release": "21 ago 2012",
"platform": null,
"free": true,
"price": "Gratis",
"early_access": false,
"metacritic": null,
"cover": "https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/header.jpg",
"url": "https://statcade.com/api/games/730.json"
}
]
}
Estratto di /api/games/730.json. Nel file vero description, about, screenshots e news sono completi.
{
"version": 1,
"generated_at": "2026-10-17T05:22:00Z",
"license": "https://statcade.com/api/licenza/",
"data_updated": "2026-10-17T05:22:00Z",
"game": {
"appid": "730",
"name": "Counter-Strike 2",
"players": 568345,
"sales_millions": null,
"genres": ["Sparatutto", "Azione", "Free-to-Play"],
"developer": "Valve",
"publisher": "Valve",
"price": "Gratis",
"description": "Per oltre due decenni, Counter-Strike ha offerto un'esperienza competitiva…",
"screenshots": ["https://shared.akamai.steamstatic.com/store_item_assets/steam/apps/730/ss_1.jpg"],
"website": "http://counter-strike.net/",
"news": [
{
"title": "Counter-Strike 2 Update",
"url": "https://steamstore-a.akamaihd.net/news/externalpost/steam_community_announcements/1846651706675829",
"date": 1792018968,
"source": "Community Announcements",
"summary": "Demo/Replay viewer improvements…"
}
],
"page": "https://statcade.com/giochi/730.html"
}
}
Estratto di /api/rankings.json. Le due classifiche sono rankings.players e rankings.sales. Ogni elenco qui ha una riga e count vale 1: nel file vero count è la lunghezza di entries.
{
"version": 1,
"generated_at": "2026-10-17T05:22:00Z",
"license": "https://statcade.com/api/licenza/",
"data_updated": "2026-10-17T05:22:00Z",
"rankings": {
"players": {
"id": "players",
"title": "Giocatori connessi su Steam",
"unit": "players",
"count": 1,
"entries": [
{"rank": 1, "appid": "730", "name": "Counter-Strike 2", "players": 568345, "url": "https://statcade.com/api/games/730.json"}
]
},
"sales": {
"id": "sales",
"title": "Copie vendute",
"unit": "millions_of_copies",
"count": 1,
"entries": [
{"rank": 1, "appid": "w-tetris", "name": "Tetris", "sales_millions": 520.0, "sales_scope": "tutte le piattaforme", "publisher": "Vari editori su licenza (Elorg, poi The Tetris Company)", "release": "1988", "url": "https://statcade.com/api/games/w-tetris.json"}
]
}
}
}
Campi
null vuol dire «non disponibile» o «non si applica». Non è uno zero. I nomi dei campi restano in inglese; i valori testuali (generi, prezzi, date di uscita del catalogo) sono in italiano, come sul sito.
Involucro, su ogni file
| Campo | Tipo | Significato |
|---|---|---|
version | numero | Versione dello schema. Oggi 1. |
generated_at | stringa | Istante UTC YYYY-MM-DDTHH:MM:SSZ dell'ultima volta in cui il contenuto di quel file è cambiato. Su index.json è la fotografia del passaggio corrente. Sugli altri file resta fermo finché i dati di quel file non cambiano. |
license | stringa | URL della licenza d'uso. |
data_updated | stringa | Per l'indice, l'elenco, le schede e le classifiche coincide con il generated_at di quel file. Per le uscite è la data di data/uscite.json, a volte solo YYYY-MM-DD. |
Gioco, nell'elenco
| Campo | Tipo | Significato |
|---|---|---|
appid | stringa | Id Steam, oppure w-<slug>. |
name | stringa | Nome del gioco. |
short | stringa | Nome breve usato sul sito, se esiste; altrimenti uguale a name. |
steam | booleano | true se il gioco è su Steam. |
players | intero o null | Giocatori connessi su Steam al momento della fotografia. Non è un flusso in tempo reale. |
sales_millions | numero o null | Copie vendute, in milioni. Se la fonte non pubblica la cifra, il campo è null: non stimiamo. |
sales_scope | stringa o null | tutte le piattaforme, PC, oppure la console su cui è stata contata un'esclusiva. |
sales_note | stringa o null | Quando la stessa cifra è già contata su un'altra edizione, qui c'è il rinvio e sales_millions è null. |
genres | elenco | Generi in italiano. Lo store a volte mette qui anche etichette come Free-to-Play, ripetute in tags. |
tags | elenco | Etichette Steam che non sono generi: Free-to-Play, Accesso anticipato, Multigiocatore di massa. |
developer | stringa o null | Sviluppatore o sviluppatori, in un'unica stringa. |
publisher | stringa o null | Editore o editori, in un'unica stringa. |
release | stringa o null | Data di uscita così come è scritta sul sito, non in formato ISO. Esempi: 21 ago 2012, 1988. Un anno arrivato come numero viene pubblicato come stringa. |
platform | stringa o null | Piattaforma dei titoli non Steam. Null per i giochi Steam. |
free | booleano | true se lo store lo segna come gratuito. |
price | stringa o null | Prezzo già formattato dello store italiano: 29,99€, Gratis, Non in vendita, da 9,99€. Non è un numero. Null se non c'è un prezzo Steam. |
early_access | booleano | Accesso anticipato su Steam. |
metacritic | intero o null | Punteggio Metacritic riportato da Steam, se c'è. Un decimale si arrotonda all'intero più vicino e lo 0,5 va verso l'alto (87.5 diventa 88). |
cover | stringa o null | URL della copertina orizzontale sul CDN di Steam. |
url | stringa | URL della scheda JSON di questo gioco. |
Scheda completa, in più rispetto all'elenco
| Campo | Tipo | Significato |
|---|---|---|
sales_source | stringa o null | Pagina da cui arriva sales_millions, di solito Wikipedia. |
genre_source | stringa o null | Fonte usata per completare i generi, se non bastava lo store. |
info_source | stringa o null | Fonte di sviluppatore o editore, quando il dato non arriva da Steam. |
capsule | stringa o null | URL della copertina verticale Steam. |
description | stringa o null | Descrizione breve dello store. |
about | stringa o null | Testo «informazioni sul gioco», accorciato come sulla scheda del sito. |
screenshots | elenco | URL degli screenshot, al massimo sei: dal settimo in poi non si pubblicano. Lista vuota se non ci sono. |
website | stringa o null | Sito ufficiale indicato sullo store. |
news | elenco | Notizie Steam del gioco: title, url, date (secondi Unix UTC), source, summary. |
page | stringa | Scheda dello stesso gioco su Statcade: https://statcade.com/giochi/<appid>.html. |
Classifiche
rank è la posizione dopo l'ordinamento, a partire da 1. A parità di valore decide il nome, poi l'appid: i ranghi restano consecutivi anche quando il numero è uguale. In players entrano solo i giochi con un dato giocatori. In sales solo quelli con sales_millions valorizzato. Ogni riga ha rank, appid, name e url verso la scheda. La classifica vendite aggiunge sales_millions, sales_scope, publisher e release.
Uscite
| Campo | Tipo | Significato |
|---|---|---|
date | stringa o null | Giorno di uscita, YYYY-MM-DD, nel fuso di timezone. |
date_note | stringa o null | Precisazione quando la data non è un giorno certo. |
platforms | stringa o null | Piattaforme in un'unica stringa, per non spezzare nomi come «Xbox Series X|S». |
genres | elenco | Etichette come sulla pagina Uscite, spesso in inglese. Non sono i generi italiani del catalogo. |
source | stringa o null | Dove è stata verificata la data. |
url | stringa o null | Scheda API se quell'appid è già nel catalogo, altrimenti null. |
In cima al file ci sono anche timezone e note.
Ogni quanto si aggiorna
I giocatori connessi, il catalogo e le notizie di gioco vengono riletti ogni giorno intorno alle 05:00 UTC. I JSON di questa API si rigenerano nello stesso passaggio, insieme ai dati: un file viene riscritto solo se il suo contenuto è cambiato, e index.json a ogni passaggio. Le copie vendute cambiano quando cambiano le liste di Wikipedia e il passaggio quotidiano le riprende. Le uscite seguono il calendario della pagina Uscite, che non si ricalcola da solo ogni notte. index.json ha il generated_at della fotografia corrente; sugli altri file quel campo dice quando è cambiato quel file. Tra un passaggio e l'altro i giocatori non si muovono.
Tipo di contenuto e CORS
Il sito è ospitato su GitHub Pages. Un file che finisce in .json viene servito con Content-Type: application/json; charset=utf-8. Le risposte includono Access-Control-Allow-Origin: *, quindi una pagina su un altro dominio può leggerle con fetch senza una preautorizzazione. Lo abbiamo verificato sugli JSON già pubblicati di statcade.com.
GitHub Pages non applica intestazioni scelte da chi pubblica il sito: un file _headers verrebbe ignorato, e per questo non c'è nel repository. La cache osservata è di circa 10 minuti (Cache-Control: max-age=600). Se l'hosting cambiasse, questa sezione va aggiornata.
Uso corretto
Non c'è una quota pubblicata da GitHub Pages. I dati cambiano al massimo una volta al giorno: scarica il file e conservalo. Interrogare lo stesso indirizzo molte volte al minuto non ottiene numeri più freschi e può essere rallentato dall'hosting. Una lettura ogni tanto, o dopo aver visto un generated_at nuovo su index.json, è il ritmo giusto.
L'API non è un sostituto di Steam. Non usarla per aggirare le condizioni d'uso di Valve.
Attribuzione
Se mostri questi dati in pubblico, cita Statcade con un link a questa pagina. Se mostri le copie vendute, cita anche sales_source. Se mostri i giocatori connessi, cita Steam. Il testo pronto e i limiti sui dati di Steam e Wikipedia sono nella licenza.
Esempio: «Giocatori: Statcade (statcade.com/api), rilevazione Steam. Copie vendute: Statcade, da Wikipedia.»
Cosa non c'è
Gli articoli della redazione, la chat, i commenti e i dati dei visitatori non fanno parte dell'API. Nemmeno il codice, il logo e la grafica del sito: quelli restano tutti i diritti riservati.