Documentation de l'API publique
Presque tout est en lecture seule — les exceptions sont la notification en jeu, le versement de trésorerie et la demande de paiement —, tout se fait par pseudo (la casse n'a pas d'importance), et tout répond en JSON.
Authentification
Ta clé voyage dans l'en-tête x-api-key (ou Authorization: Bearer …). Elle s'utilise depuis ton serveur, jamais depuis une page ou une application mobile : une clé lue par un visiteur est une clé perdue.
curl -H "x-api-key: pkm_..." \ https://public.pokemania.top/api/public/v1/whoami
Chaque réponse porte X-RateLimit-Limit et X-RateLimit-Remaining. Au-delà du quota, l'API répond 429 avec un Retry-After : mets en cache plutôt que de boucler.
Annuaire public
Ces données sont déjà visibles en jeu par tout le monde : ta clé suffit.
| Route | Accès requis | Ce que ça renvoie |
|---|---|---|
| GET/whoami | — | Les accès accordés à ta clé. Utile pour vérifier ton branchement. |
| GET/player/:pseudo | player.exists | Existence du compte, date d'arrivée, temps de jeu. |
| GET/player/:pseudo/village | player.village | Village du joueur et ses membres. |
| GET/player/:pseudo/bank | player.bank | Solde, niveau et totaux du compte en banque. |
| GET/player/:pseudo/stats | player.stats | Statistiques de jeu : combat, blocs, pêche, élevage, Pokémon. |
| GET/player/:pseudo/grade | player.grade | Grade VIP/MVP, booster, copaing, bêta-testeur. |
| GET/player/:pseudo/online | player.online | Présence en jeu et serveur courant. |
| GET/player/:pseudo/names | player.name | Historique des pseudos. |
| GET/player/:pseudo/discord | player.discord | Identifiant Discord lié, s'il y en a un. |
| GET/player/:pseudo/shiny-chain | player.shinychain | Chaîne shiny en cours et record. |
| GET/player/:pseudo/pokedex | pokedex.read | Espèces capturées, shinies, progression. |
| GET/player/:pseudo/badges | badges.read | Badges d'arène obtenus. |
| GET/player/:pseudo/jobs | jobs.read | Niveaux, XP et talents des métiers. |
| GET/player/:pseudo/discovery | discovery.read | Carnet de découvertes : minerais, créatures, biomes. |
| GET/player/:pseudo/quests | quests.read | Quêtes du jour et de la semaine, progression et récompenses réclamées. |
Données du serveur
| Route | Accès requis | Ce que ça renvoie |
|---|---|---|
| GET/players | player.directory | Annuaire paginé des pseudos (25 par page). |
| GET/players/search?q= | player.directory | Les 10 pseudos les plus proches d'une saisie. |
| GET/villages | village.directory | Liste des villages : recherche, tri, pagination. |
| GET/villages/:tag | village.directory | Fiche d'un village par tag, nom ou identifiant. |
| GET/market/listings | market.read | Annonces en vente à l'hôtel des ventes. |
| GET/market/summary | market.read | Statistiques de prix, objet par objet. |
| GET/market/sales | market.read | Ventes récentes du serveur : les points d'une courbe de prix. |
| GET/status | server.status | Joueurs connectés par serveur et maintenances en cours. |
| POST/payments | payment.request | Crée une demande de paiement que le joueur règle sur pokemania.top. |
| GET/payments/:id | payment.request | État d'une demande de paiement. |
| POST/payouts | payment.payout | Verse de l'argent de ton compte à un joueur, par exemple pour le rembourser. |
Au nom d'un joueur
Envoie le joueur sur le portail de connexion avec ton client_id, les accès demandés et une URL de retour déclarée dans ta demande :
https://login.pokemania.top/authorize ?client_id=app_... &redirect_uri=https://ton-site/callback &scope=player.bank%20player.village &state=ton-etat
Le joueur s'identifie (Discord ou code en jeu), voit ton logo et la liste exacte de ce que tu demandes, puis accepte ou refuse. Au retour, ton URL reçoit ?code=ac_…&state=… (ou ?error=access_denied). Échange ce code sous deux minutes :
curl -X POST https://public.pokemania.top/api/public/v1/oauth/token \
-H "x-api-key: pkm_..." \
-H "content-type: application/json" \
-d '{"code":"ac_..."}'Tu récupères un access_token (pat_…) à conserver : il s'envoie ensuite dans x-player-token, en plus de ta clé, sur les routes /me…. Un jeton n'est valable qu'avec la clé qui l'a obtenu, et le joueur peut le révoquer à tout moment.
| Route | Accès requis | Ce que ça renvoie |
|---|---|---|
| POST/oauth/token | — | Échange le code reçu au retour contre un jeton joueur. |
| POST/oauth/revoke | — | Rend le jeton d'un joueur inutilisable. |
| GET/me | player.exists | Le joueur qui a accordé l'accès. |
| GET/me/… | l'accès correspondant | Mêmes chemins que /player/:pseudo/…, au nom du joueur. |
| GET/me/bank/history | bank.history | Transactions bancaires détaillées. Jamais lisible par pseudo. |
| GET/me/team | pokemon.read | L'équipe, en fiche complète : IV, EV, stats et attaques. |
| GET/me/pokemon | pokemon.read | Tous ses Pokémon, paginés et filtrables (espèce, shiny, boîte). |
| GET/me/pokemon/:id | pokemon.read | La fiche complète d'un seul Pokémon. |
| GET/me/pc | pokemon.read | Les boîtes du PC : nom, icône, remplissage. |
| GET/me/market | auction.mine | Résumé vendeur : niveau, ventes, recette, compteurs. |
| GET/me/market/listings | auction.mine | Ses annonces et le détail des parts vendues. |
| GET/me/market/purchases | auction.mine | Ses achats à l'hôtel des ventes. |
| GET/me/market/favorites | auction.mine | Les annonces qu'il suit en favori. |
| GET/me/referral | referral.read | Son code de parrainage, ses filleuls et son parrain. |
| GET/me/village/manage | village.manage | Rôles, permissions, membres, invitations, home et alliés. |
| GET/me/village/treasury | village.manage | Solde, plafond et mouvements de trésorerie. |
| GET/me/village/history | village.manage | Le journal du village. |
| GET/me/village/quest | village.manage | Quête hebdomadaire, contributions et classement. |
| POST/me/notify | notify.send | Affiche une notification au joueur en jeu, signée du nom et du logo de ton application. |
| POST/me/village/pay | economy.pay | Verse de la trésorerie du village à un membre. Réservé au chef. |
Faire payer un joueur
Accès payment.request. Ta clé suffit : la demande ne nomme personne.
curl -X POST https://public.pokemania.top/api/public/v1/payments \
-H "x-api-key: pkm_..." \
-H "content-type: application/json" \
-d '{"amount":25000,"reason":"Boost de boutique 7 jours",
"redirectUri":"https://mon-site.fr/retour",
"callbackUrl":"https://mon-site.fr/hooks/pokemania"}'
-> { "paymentId": "k7m2xqhr4tzp",
"url": "https://www.pokemania.top/payer/k7m2xqhr4tzp" }Tu ne peux que proposer. L'appel ne prélève rien : il fabrique un lien où le joueur lit qui demande, combien et pourquoi, avec son solde sous les yeux, et décide. Aucune application ne peut débiter un joueur sans cet écran — au-delà de 100 000, il lui en faut même deux. L'argent va sur le compte du développeur propriétaire de l'application.
Redirige le joueur vers url. Elle expire en quinze minutes : génère-la au moment où le joueur clique, pas la veille.
Le résultat te parvient par un POST signé sur ton callbackUrl (en-tête x-pokemania-signature, HMAC-SHA256 du corps brut avec pour secret le SHA-256 de ta clé), et GET /payments/:id le rend à tout moment. Ne considère jamais un paiement comme acquis sur la seule redirection du joueur.
Le motif est lu par quelqu'un qui s'apprête à payer : qu'il décrive ce qu'il achète. Une demande dont le motif ne correspond pas à ce que le joueur reçoit est un motif de suspension immédiate.
Verser depuis la trésorerie d'un village
L'autre endpoint en écriture. Il demande l'accès economy.pay, et que le joueur qui a autorisé ton application soit chef de son village.
curl -X POST https://public.pokemania.top/api/public/v1/me/village/pay \
-H "x-api-key: pkm_..." \
-H "x-player-token: pat_..." \
-H "content-type: application/json" \
-d '{"target":"Sacha","amount":25000,"idempotencyKey":"payout-2026-W35-sacha"}'Une application ne crée jamais de monnaie. Elle déplace des fonds qui existent déjà, et seulement ceux d'un village qu'un joueur consentant dirige, vers un membre de ce même village. Le plafond, c'est la trésorerie — c'est ce qui permet d'ouvrir cet accès sans négocier un quota d'argent au cas par cas.
idempotencyKey est obligatoire, et c'est pour te protéger : un versement ne se défait pas. Si ta requête part deux fois, la deuxième retrouve la première et rend le même résultat avec replayed: true. Choisis une clé qui décrit le versement — un identifiant de commande, un couple (semaine, joueur) — pas un aléatoire, qui ne protège de rien.
Un refus métier (pas chef, trésorerie insuffisante, bénéficiaire hors village) reste un 200 avec paid: false et une reason à montrer au chef. Le bénéficiaire, lui, est prévenu deux fois : une ligne dans son historique bancaire nommant ton application, et une notification en jeu s'il est connecté.
Notifier un joueur en jeu
Le seul endpoint qui écrit quelque chose. Il demande l'accès notify.send, donc le jeton du joueur.
curl -X POST https://public.pokemania.top/api/public/v1/me/notify \
-H "x-api-key: pkm_..." \
-H "x-player-token: pat_..." \
-H "content-type: application/json" \
-d '{"title":"Échange accepté","message":"Ton offre a été acceptée."}'La notification porte toujours le nom et le logo de ton application, relus par le serveur depuis ta clé : tu ne les envoies pas, et tu ne peux donc pas signer du nom d'un autre. Change ton logo dans ton espace, et tes notifications changent avec lui.
Le joueur doit être connecté : rien n'est mis en file d'attente. S'il est hors ligne ou qu'il a coupé les notifications d'applications, l'appel répond quand même 200 avec delivered: false et une reason — il n'y a rien à réessayer. Limite : 5 notifications par minute et par joueur.
Notifie ce que le joueur a demandé ou provoqué. Une notification publicitaire, répétée ou sans rapport avec une action de sa part est un motif de suspension : le contenu envoyé est journalisé avec le nom de ton application en face.
Les accès
Ne demande que ceux dont ton application se sert réellement.
Donnée de joueur, lisible par pseudo
player.exists
Vérifier qu'un pseudo existe
Existence du compte, pseudo, date d'arrivée et temps de jeu.
player.village
Lire le village d'un joueur
Village du joueur : nom, tag, niveau, rôle et liste des membres.
player.bank
Lire le solde bancaire d'un joueur
Solde du compte en banque, niveau et totaux déposés/retirés.
player.stats
Lire les statistiques d'un joueur
Statistiques de jeu : temps de jeu, captures, pêche, élevage, blocs, combats.
player.grade
Lire le grade d'un joueur
Grade VIP/MVP et statuts booster, copaing et bêta-testeur.
player.online
Voir si un joueur est en ligne
Présence en jeu et serveur sur lequel le joueur est connecté.
player.name
Lire l'historique des pseudos
Anciens pseudos du compte et date de chaque changement.
player.discord
Lire le Discord lié d'un joueur
Identifiant Discord lié au compte, s'il y en a un.
player.shinychain
Lire la chaîne shiny d'un joueur
Chaîne shiny en cours (espèce et compteur) et meilleur record.
pokedex.read
Lire le Pokédex d'un joueur
Espèces capturées, shinies obtenus et progression du Pokédex.
badges.read
Lire les badges d'un joueur
Badges d'arène obtenus et date d'obtention.
jobs.read
Lire les métiers d'un joueur
Niveau et XP de chaque métier, points de talent gagnés et dépensés.
discovery.read
Lire le carnet de découvertes
Minerais, créatures et biomes découverts par le joueur.
quests.read
Lire les quêtes d'un joueur
Quêtes du jour et de la semaine, progression et récompenses déjà réclamées.
Donnée privée : accord du joueur obligatoire
bank.history
Lire l'historique bancaire d'un joueur
Historique des transactions bancaires : montants, types et dates.
pokemon.read
Lire les Pokémon d'un joueur
Équipe, PC et fiche détaillée des Pokémon : espèce, niveau, shiny, nature, IV, EV et attaques.
auction.mine
Lire l'activité HDV d'un joueur
Ses annonces, ses ventes, ses achats et ses favoris à l'hôtel des ventes.
referral.read
Lire le parrainage d'un joueur
Code de parrainage, filleuls recrutés et parrain éventuel.
village.manage
Gérer le village d'un joueur
Coulisses du village : membres et rôles, invitations, trésorerie, historique et quête hebdomadaire.
economy.pay
Verser depuis la trésorerie du village
Verser de l'argent de la trésorerie de ton village à l'un de ses membres. Réservé au chef.
notify.send
Envoyer une notification en jeu
Envoyer au joueur, quand il est connecté, une notification signée du nom et du logo de l'application.
Donnée du serveur, sans joueur particulier
payment.request
Demander un paiement au joueur
Créer une demande de paiement que le joueur règle lui-même, en confirmant sur pokemania.top. L'application ne prélève jamais rien seule.
payment.payout
Verser de l'argent à un joueur
Verser de l'argent de TON compte de jeu à un joueur, par exemple pour le rembourser. L'application ne peut donner que ce que son propriétaire possède.
village.directory
Lire l'annuaire des villages
Liste et fiche des villages du serveur, hors joueur particulier.
market.read
Lire l'hôtel des ventes
Annonces en vente et statistiques de prix, hors joueur particulier.
server.status
Lire l'état des serveurs
Nombre de joueurs connectés par serveur et maintenances en cours.
player.directory
Lire l'annuaire des pseudos
Liste paginée des pseudos du serveur et recherche de pseudos proches.
Erreurs
401— clé absente, inconnue ou révoquée ; jeton joueur manquant ou révoqué.403— ta clé n'a pas cet accès, ou le joueur ne l'a pas accordé.404— joueur, village ou route inconnus.429— quota dépassé. AttendsRetry-Aftersecondes.
Tu venais de api.pokemania.top ?
L'API publique a son propre domaine : https://public.pokemania.top. Les chemins n'ont pas bougé — seul l'hôte change. L'ancienne adresse redirige (308) le temps de la transition ; change-la dès que tu peux.