Chaque nuit, Fourmizzz publie pour chaque serveur deux fichiers JSON : la liste des joueurs et la liste des alliances. Ils ne contiennent que des données déjà publiques en jeu (classements, fiche d'alliance, diplomatie visible) et sont destinés aux joueurs et aux outils communautaires : cartes, suivi de progression, outils d'alliance.
L'API est en lecture seule, gratuite et sans authentification.
Le contrat complet au format OpenAPI 3, importable dans Swagger Editor, Postman ou un générateur de client, est disponible ici : api-exports.fr.openapi.yaml.
L'API se sert sur l'adresse du serveur dont on veut les données :
| Serveur | Adresse de base |
|---|---|
| S1 | http://s1.fourmizzz.fr |
| S2 | http://s2.fourmizzz.fr |
| S3 | http://s3.fourmizzz.fr |
| S4 | http://s4.fourmizzz.fr |
| S5 | https://s5.fourmizzz.fr |
| Test | https://test.fourmizzz.fr |
| Serveur anglais | http://s1.antzzz.org |
Respecter le protocole indiqué : S1 à S4 et le serveur anglais ne sont servis qu'en HTTP, pas en HTTPS.
Chaque serveur a ses propres exports. Le domaine d'accueil (www.fourmizzz.fr, www.antzzz.org) et tout hôte qui n'est pas un serveur ouvert répondent 404.
| Requête | Réponse |
|---|---|
GET /api/exports/ |
Liste des versions disponibles, par type d'export |
GET /api/exports/players/ |
Dernière version du fichier des joueurs |
GET /api/exports/players/?version=AAAAMMJJHHmm |
Fichier des joueurs de cette version |
GET /api/exports/alliances/ |
Dernière version du fichier des alliances |
GET /api/exports/alliances/?version=AAAAMMJJHHmm |
Fichier des alliances de cette version |
Le / final fait partie de l'adresse : sans lui, le serveur répond d'abord une redirection 301 vers l'adresse avec slash. Mieux vaut l'écrire directement pour économiser un aller-retour.
Une version est la date et l'heure UTC du passage du job d'export, au format AAAAMMJJHHmm (année, mois, jour, heure, minutes), par exemple 202609292200.
…2200 en heure d'été (ex. 202609292200 pour la nuit du 29 au 30 septembre), …2300 en heure d'hiver. UTC évite les heures en double ou manquantes aux changements d'heure.Last-Modified) ; s'il est relancé plus tard, il crée une nouvelle version.GET /api/exports/ renvoie, pour chaque type d'export, les versions disponibles de la plus récente à la plus ancienne :
{
"players": ["202609292200", "202609282200"],
"alliances": ["202609292200", "202609282200"]
}
Les deux types sont générés au même passage du job et ont donc normalement les mêmes versions. Ils sont listés séparément car un passage peut échouer sur un seul type. Les tableaux sont vides ([]) si aucun export n'existe encore.
versionversion=latest : la version la plus récente de ce type, servie directement, sans redirection.version=AAAAMMJJHHmm : le fichier de cette version, tel qu'il a été déposé par le job.La date, l'heure et les minutes doivent exister : 202602300000 (30 février), 202609292400 ou 202609292260 répondent 400, tout comme un format différent (2026-09-29, 2026092922) ou un tableau (version[]=…).
Content-Type: application/json; charset=utf-8 sur toutes les réponses, erreurs comprises. Les caractères non ASCII sont échappés en séquences JSON \uXXXX, que tout parseur JSON décode.Last-Modified :
Les erreurs sont toujours un objet JSON {"error": "<message>"}, jamais une page HTML. Le message est en français et n'est pas traduit : un outil doit se fier au code HTTP, pas au texte.
| Code | Cas |
|---|---|
200 |
Fichier ou liste des versions |
301 |
Adresse sans / final : redirection vers l'adresse avec slash |
400 |
Paramètre version malformé ou date/heure impossible |
404 |
Aucun export pour cette version (ou aucun export de ce type avec latest) ; hôte qui n'est pas un serveur ouvert |
502 |
Stockage des exports injoignable (incident côté serveur, déjà signalé à l'équipe) |
503 |
Exports non configurés sur cet hébergement |
Un tableau d'objets, un par joueur, trié par id :
[
{
"id": 123,
"pseudo": "Fourmi",
"alliance": "TAG",
"masterPlayerId": 456,
"x": 10,
"y": -4,
"field": 98765,
"grade": "Chef",
"buildingScore": 1500,
"technologyScore": 700,
"trophyScore": 1234,
"onHoliday": false,
"isBanned": false
}
]
| Champ | Type | Signification |
|---|---|---|
id |
entier | Identifiant du joueur. Unique dans le serveur seulement : deux serveurs ont chacun leur joueur 123 |
pseudo |
chaîne | Pseudo affiché en jeu |
alliance |
chaîne ou null |
Tag de l'alliance, null si le joueur n'en a pas |
masterPlayerId |
entier ou null |
id du joueur qui colonise ce joueur, null s'il n'est pas colonisé |
x, y |
entiers | Coordonnées sur la carte |
field |
entier | Terrain de chasse (cm²) |
grade |
chaîne ou null |
Nom du grade du joueur dans son alliance, null sans alliance ou sans grade |
buildingScore |
entier | Score fourmilière (bâtiments) |
technologyScore |
entier | Score technologie |
trophyScore |
entier | Score de trophées (classement Elo), 0 si le joueur n'est pas classé |
onHoliday |
booléen | Mode vacances actif au moment de l'export |
isBanned |
booléen | Joueur banni au moment de l'export |
Un tableau d'objets, un par alliance, trié par tag :
[
{
"tag": "TAG",
"name": "Les Fourmis",
"playersCount": 12,
"totalField": 5000000,
"totalBuildingScore": 300,
"totalTechnologyScore": 200,
"totalTrophyScore": 9000,
"diplomacy": {
"pacts": [{ "tag": "AMI", "name": "Pacte de non-agression", "description": "…" }],
"wars": ["ENN"]
}
}
]
| Champ | Type | Signification |
|---|---|---|
tag |
chaîne | Tag de l'alliance |
name |
chaîne | Nom de l'alliance |
playersCount |
entier | Nombre de membres |
totalField |
entier | Terrain de chasse cumulé des membres |
totalBuildingScore |
entier | Score fourmilière cumulé |
totalTechnologyScore |
entier | Score technologie cumulé |
totalTrophyScore |
entier | Somme (pas la moyenne) des scores de trophées des membres, 0 si l'alliance n'est pas classée |
diplomacy.pacts |
tableau | Pactes en cours (voir ci-dessous). Un pacte figure dans les deux alliances concernées. Ordre : celui que chaque alliance a fixé pour ses pactes, comme sur sa page |
diplomacy.wars |
tableau de tags | Alliances auxquelles cette alliance a déclaré la guerre (sens affiché sur sa page publique) ; les alliances disparues sont écartées. Ordre alphabétique, sans tenir compte de la casse |
Chaque pacte est un objet :
| Champ | Type | Signification |
|---|---|---|
tag |
chaîne | Tag de l'alliance partenaire |
name |
chaîne | Nom du pacte (pas celui de l'alliance partenaire) |
description |
chaîne | Description du pacte |
Aucune donnée privée n'est exportée : ni e-mail, ni adresse IP, ni ressources, ni armée, ni date de dernière connexion, ni description ou règles d'alliance.
Lister les versions du serveur S1, en-têtes compris :
curl -i http://s1.fourmizzz.fr/api/exports/
Télécharger le fichier des alliances d'une version précise :
curl -o alliances.json "http://s1.fourmizzz.fr/api/exports/alliances/?version=202609292200"
Charger la dernière version des joueurs en Python, bibliothèque standard uniquement :
import json
import urllib.request
with urllib.request.urlopen("http://s1.fourmizzz.fr/api/exports/players/") as reponse:
joueurs = json.load(reponse)
sans_alliance = [j["pseudo"] for j in joueurs if j["alliance"] is None]
print(len(joueurs), "joueurs, dont", len(sans_alliance), "sans alliance")
GET /api/exports/ et comparer la première version avec la dernière déjà téléchargée.Last-Modified.id, jamais par l'id seul, et le pseudo peut changer.