Documentation API Botix
Récupère les informations de n'importe quel bot, ses votes, ses statistiques et les classements, directement depuis ton code.
🚀 Démarrage rapide
Toutes les routes sont préfixées par :
https://botix.fr/api/v1
L'API est publique en lecture. Une clé API double ton quota (120 requêtes/minute au lieu de 60).
Authorization: Bearer btx_xxxxxxxxxxxxxxxxxxxx
📍 Points d'entrée
/api/v1/bots
Liste et recherche de bots
/api/v1/bot/{id}
Détails complets d'un bot
/api/v1/bot/{id}/votes
Derniers votes reçus
/api/v1/bot/{id}/stats
Historique des statistiques
/api/v1/bot/{id}/stats
Publier le nombre de serveurs
/api/v1/bot/{id}/check/{user}
Vérifier le vote d'un utilisateur
/api/v1/leaderboard
Classement des bots
/api/v1/user/{id}
Profil public d'un développeur
/api/v1/categories
Catégories et compteurs
/api/v1/stats
Statistiques globales du site
📦 Exemple — récupérer un bot
curl https://botix.fr/api/v1/bot/123456789012345678
{
"success": true,
"data": {
"id": "123456789012345678",
"name": "Botix Moderator",
"slug": "botix-moderator",
"avatar": "https://cdn.discordapp.com/avatars/…",
"short_description": "Bot de modération Discord puissant.",
"category": "moderation",
"certified": true,
"premium": false,
"server_count": 25430,
"votes": 125000,
"monthly_votes": 8420,
"rating": 4.8,
"rating_count": 1240,
"rank": 3,
"invite": "https://discord.com/oauth2/authorize?…",
"url": "https://botix.fr/bot/botix-moderator"
}
}
📊 Publier tes statistiques
Utilise le token de ton bot (visible dans Clés API) pour envoyer ton nombre de serveurs. Recommandé : toutes les 30 minutes.
client.on('ready', () => {
const post = async () => {
await fetch(`https://botix.fr/api/v1/bot/${client.user.id}/stats`, {
method: 'POST',
headers: {
'Authorization': process.env.BOTIX_TOKEN,
'Content-Type': 'application/json'
},
body: JSON.stringify({
server_count: client.guilds.cache.size,
shard_count: client.shard?.count ?? 0
})
});
};
post();
setInterval(post, 30 * 60 * 1000);
});
import aiohttp
async def post_stats(bot):
url = f"https://botix.fr/api/v1/bot/{bot.user.id}/stats"
headers = {"Authorization": BOTIX_TOKEN}
payload = {"server_count": len(bot.guilds)}
async with aiohttp.ClientSession() as s:
await s.post(url, json=payload, headers=headers)
🔔 Webhook de vote
Renseigne une URL de webhook dans les réglages de ton bot : Botix enverra un
POST à chaque vote, signé en HMAC SHA-256.
{
"bot": "123456789012345678",
"user": "987654321098765432",
"type": "upvote",
"weight": 2,
"time": 1735689600
}
const crypto = require('crypto');
app.post('/botix/vote', (req, res) => {
const signature = crypto
.createHmac('sha256', process.env.BOTIX_WEBHOOK_SECRET)
.update(JSON.stringify(req.body))
.digest('hex');
if (signature !== req.headers['x-botix-signature']) {
return res.sendStatus(401);
}
console.log(`Vote de ${req.body.user} (×${req.body.weight})`);
res.sendStatus(200);
});
🧩 Déclarer tes commandes
Publie la liste de tes commandes : elle alimente l'onglet « Commandes » de ta fiche, le contenu que les visiteurs consultent le plus. Même token que pour les statistiques. Chaque envoi remplace la liste complète, ce qui permet de refléter une suppression.
await fetch(`https://botix.fr/api/v1/bot/${client.user.id}/commands`, {
method: 'POST',
headers: {
'Authorization': process.env.BOTIX_TOKEN,
'Content-Type': 'application/json'
},
body: JSON.stringify({
commands: client.application.commands.cache.map(c => ({
name: c.name,
description: c.description,
signature: `/${c.name}`,
category: 'Général'
}))
})
});
Lecture publique sans authentification :
GET /api/v1/bot/{id}/commands. 300 commandes maximum.
🏷️ Pastille pour ton README
Une image SVG servie en direct, sans authentification ni clé.
[](https://botix.fr/bot/mon-bot)
| Paramètre | Valeurs |
|---|---|
metric | votes (défaut), serveurs, note, score |
label | Libellé personnalisé, 24 caractères maximum |
color | Couleur hexadécimale sans #, ex. 8b5cf6 |
.json | Format « endpoint » de shields.io, au lieu de .svg |
⚠️ Codes de réponse
| Code | Signification |
|---|---|
| 200 | Requête réussie |
| 401 | Clé ou token manquant/invalide |
| 404 | Ressource introuvable |
| 422 | Paramètres invalides |
| 429 | Limite de requêtes atteinte (attendre 60 s) |
| 500 | Erreur interne du serveur |