Quel token d'API utiliser pour votre jeu ?
Par Mike Dalton ·
Game Stats AI propose deux types de token d'API. Un token client peut envoyer de la télémétrie, comme des matchs et des événements de succès, mais ne peut pas lire les rapports. Un token serveur peut envoyer de la télémétrie et lire les rapports. Utilisez un token client dans tout ce qui est livré dans un build du jeu, et un token serveur dans le code qui tourne sur une machine que vous contrôlez.
Ce que chaque token peut faire
| Token client | Token serveur | |
|---|---|---|
| Envoyer des matchs, des événements, des personnages et des succès | Oui | Oui |
| Lire les rapports et les autres données du compte | Non | Oui |
| Se connecter au serveur MCP | Non | Oui |
| Peut être livré dans un build du jeu | Oui | Non |
Choisissez le type au moment de créer le token dans Paramètres > Tokens API. Le token complet n'est affiché qu'une fois, juste après sa création. Les nouveaux tokens commencent par leur type, client_ ou server_, ce qui vous permet de savoir lequel se trouve dans votre code.


Ce que l'API répond pour chaque token
Les requêtes ci-dessous placent l'identifiant de votre compte et les deux tokens dans des variables d'environnement :
export ACCOUNT_ID=your_account_id
export CLIENT_TOKEN=client_your_token
export SERVER_TOKEN=server_your_token
Chaque requête utilise -w "\n%{http_code}\n", qui affiche le code de statut HTTP après le corps de la réponse.
Un token client peut envoyer de la télémétrie
Envoyez un match à l'endpoint des matchs avec le token client :
curl -s -w "\n%{http_code}\n" -X POST "https://gamestats.ai/api/v1/accounts/$ACCOUNT_ID/matches" \
-H "Authorization: Bearer $CLIENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"external_id": "match_8f3a2c", "version_name": "2.1.0", "match_at": "2026-10-12T20:15:00Z", "match_players": [{"username": "player_3e8", "match_attributes": {"win": 1, "loss": 0}}, {"username": "player_40d", "match_attributes": {"win": 0, "loss": 1}}]}'
{}
201
201 Created signifie que le match a été accepté. Les endpoints des événements de succès, des événements de progression, des personnages et des succès acceptent un token client de la même façon.
Un token client ne peut pas lire les rapports
Demandez les rapports du compte à l'endpoint des rapports de personnages avec le même token :
curl -s -w "\n%{http_code}\n" "https://gamestats.ai/api/v1/accounts/$ACCOUNT_ID/character_reports" \
-H "Authorization: Bearer $CLIENT_TOKEN"
403
403 Forbidden signifie que le token est valide, mais que son type n'a pas le droit de faire cette requête. Le corps est vide : affichez le code de statut pour le voir. Tous les endpoints qui lisent des données répondent ainsi à un token client, et le serveur MCP aussi.
Un token qui n'existe pas, ou qui a été révoqué, reçoit 401 Unauthorized à la place.
Un token serveur peut lire les rapports
Envoyez la même requête avec le token serveur :
curl -s -w "\n%{http_code}\n" "https://gamestats.ai/api/v1/accounts/$ACCOUNT_ID/character_reports" \
-H "Authorization: Bearer $SERVER_TOKEN"
[{"id":1,"external_id":null,"label":"Character Win Rates","description":null}]
200
200 OK signifie que la requête a réussi, et le corps contient la liste des rapports de personnages du compte. Un token serveur peut aussi envoyer tout ce qu'un token client peut envoyer.
Quel token utiliser à quel endroit
- Dans un build du jeu, pour ordinateur, mobile, console ou navigateur : utilisez un token client. Les joueurs téléchargent le build, et toute personne qui cherche peut y trouver le token.
- Sur votre serveur de jeu ou votre backend : utilisez un token serveur. Si votre jeu envoie déjà ses résultats via un backend que vous gérez, envoyez la télémétrie depuis ce backend, et aucun token n'est livré aux joueurs.
- Dans vos propres scripts et dans le serveur MCP : utilisez un token serveur, et gardez-le sur votre machine.
Considérez tout token présent dans un build du jeu comme public. Un token client limite ce que peut faire la personne qui le trouve : elle peut envoyer de la télémétrie à votre compte, mais elle ne peut pas lire vos rapports ni aucune autre donnée du compte.
Ce que font les origines navigateur, et ce qu'elles ne font pas
Un jeu pour navigateur doit aussi avoir son origine ajoutée dans Paramètres > Origines navigateur. Le guide Phaser montre la configuration.


Avant qu'une page envoie une requête avec un token vers un autre domaine, le navigateur demande à ce domaine si l'origine de la page est autorisée. Cette requête s'appelle une requête préliminaire (preflight). Vous pouvez envoyer la même requête avec curl :
curl -s -i -X OPTIONS "https://gamestats.ai/api/v1/accounts/$ACCOUNT_ID/matches" \
-H "Origin: https://play.yourgame.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: authorization, content-type"
Pour une origine que vous avez ajoutée, la réponse contient cet en-tête :
access-control-allow-origin: https://play.yourgame.com
Pour une origine que vous n'avez pas ajoutée, l'en-tête est absent, et le navigateur n'envoie pas la requête.
C'est le navigateur qui fait cette vérification, pas l'API. curl, les scripts et les jeux qui ne tournent pas dans un navigateur sautent la requête préliminaire et envoient directement la requête. Voici le token client qui envoie un match avec une origine absente de la liste :
curl -s -w "\n%{http_code}\n" -X POST "https://gamestats.ai/api/v1/accounts/$ACCOUNT_ID/matches" \
-H "Origin: https://not-your-game.example" \
-H "Authorization: Bearer $CLIENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"external_id": "match_8f3a2d", "version_name": "2.1.0", "match_at": "2026-10-12T20:20:00Z", "match_players": [{"username": "player_3e8", "match_attributes": {"win": 0, "loss": 1}}, {"username": "player_40d", "match_attributes": {"win": 1, "loss": 0}}]}'
{}
201
Le match a été accepté. Les origines navigateur empêchent d'autres sites d'utiliser votre token dans le navigateur de leurs visiteurs. Elles ne limitent pas ce qu'un token peut faire en dehors d'un navigateur, et ne protègent donc pas un token qui fuite. C'est le type du token qui le fait. Les jeux qui ne tournent pas dans un navigateur n'ont besoin d'aucune origine.
Si un token fuite
Révoquez-le dans Paramètres > Tokens API. Toute requête avec un token révoqué reçoit 401 à partir de ce moment, y compris les requêtes des builds que vos joueurs ont déjà.
Un token serveur qui fuite peut lire toutes les données de votre compte : révoquez-le immédiatement et créez-en un nouveau.
Un token client qui fuite ne peut qu'envoyer de la télémétrie, vous pouvez donc choisir quand le révoquer. Révoquez-le immédiatement pour arrêter les requêtes, ou publiez d'abord une mise à jour avec un nouveau token client pour que les joueurs actuels continuent d'envoyer des événements, puis révoquez l'ancien token.