Autres jeux (API REST)

circle-exclamation

Si votre jeu n'a pas de plugin dédié, vous pouvez intégrer QuantumLogs via l'API REST directement. Cette méthode fonctionne avec n'importe quel langage de programmation.

Endpoint

POST /logs

Authentification

Envoyez votre clé API dans le header Authorization :

Authorization: votre-cle-api-ici
circle-info

La clé est envoyée directement dans le header, sans préfixe Bearer. C'est le format attendu par QuantumLogs.

Format de la requête

Le body est un tableau JSON de logs. Chaque élément du tableau est un objet log :

[
  {
    "measurement": "player_kill",
    "timestamp": "2025-01-15T14:30:45.123Z",
    "tags": {
      "player_name": "John",
      "player_id": "12345",
      "player_global_id": "76561198000000000",
      "target_name": "Jane",
      "target_id": "67890",
      "target_global_id": "76561198000000001",
      "server": "serveur-1"
    },
    "fields": {
      "value": "John a tué Jane avec AK-47 à 50m (headshot)"
    },
    "metadata": {
      "weapon": "AK-47",
      "distance": 50,
      "bodypart": "head"
    }
  }
]

Champs détaillés

Champs obligatoires

Champ
Type
Description

measurement

string

Type/catégorie du log (ex: kill, chat, connect)

timestamp

string (ISO 8601)

Horodatage du log (ex: 2025-01-15T14:30:45.123Z)

fields

object

Objet contenant le champ value

fields.value

string

Contenu textuel du log (c'est ce qui s'affiche dans la colonne "Valeur")

tags

object

Objet contenant les tags d'indexation (peut être vide {})

triangle-exclamation

Tags reconnus par le backend

triangle-exclamation
Tag
Type
Description

player_name

string

Nom du joueur

player_id

string

ID du joueur (spécifique au serveur, ex: ID de personnage)

player_global_id

string

Identifiant unique global du joueur (Steam ID 64, UUID, etc.)

player_steamid

string

Steam ID (déprécié, utilisez player_global_id)

target_name

string

Nom de la cible

target_id

string

ID de la cible

target_global_id

string

Identifiant unique global de la cible

target_steamid

string

Steam ID de la cible (déprécié)

server

string

Identifiant du serveur source

Tous les tags sont optionnels, mais server est fortement recommandé — il est utilisé pour le comptage de serveurs actifs et le contrôle des limites de votre plan.

Exemples de tags invalides (seront ignorés) :

  • weapon, distance, map → Mettez ces infos dans fields.value ou dans metadata

  • attacker_name, victim_name → Utilisez player_name et target_name

  • admin_name → Utilisez player_name

Champs optionnels

Champ
Type
Description

metadata

object

Données JSON supplémentaires libres (visible dans le détail du log, non filtrable)

Codes de réponse

Succès

Code
Body
Description

201

OK

Logs reçus et insérés avec succès

Erreurs

Code
Description
Détail

401

Clé API invalide ou manquante

{ "statusCode": 401, "message": "Missing authorization header" } ou { "statusCode": 401, "message": "Invalid API key" }

413

Body trop volumineux

La taille maximale du body est de 50 Mo

429

Limite de serveurs dépassée

Voir détail ci-dessous

500

Erreur serveur

Injection bloquée (plan expiré/suspendu) ou erreur de base de données

Détail de la réponse 429

Si vous dépassez le nombre de serveurs autorisés par votre plan, la réponse contient des informations utiles :

circle-info

Les serveurs actifs sont suivis pendant 24 heures. Un serveur qui n'envoie plus de logs pendant 24h libère automatiquement une place.

Bonnes pratiques

Envoi par lots

Envoyez vos logs par lots plutôt qu'un par un. Un intervalle de 10 secondes est recommandé :

  1. Accumulez les logs dans une file d'attente en mémoire

  2. Toutes les 10 secondes, envoyez le lot complet en une seule requête

  3. Videz la file après un envoi réussi

Tout dans fields.value

Le champ value est le contenu principal de votre log. Mettez-y toutes les informations lisibles. Les tags ne servent qu'à l'indexation (recherche par joueur, serveur, etc.).

Metadata pour les données structurées

Si vous avez besoin de stocker des données structurées en plus du texte, utilisez metadata :

Les métadonnées sont stockées en JSON et visibles dans le détail du log, mais ne sont pas filtrables via les filtres classiques.

Gestion des erreurs

  • En cas d'erreur réseau, conservez les logs en mémoire et réessayez

  • Implémentez un retry avec backoff exponentiel

  • Envoyez les logs restants à l'arrêt du serveur (flush)

Exemples

cURL

Python

JavaScript (Node.js)

C# (Unity / .NET)

Lua (Garry's Mod - exemple custom)

Last updated