Référence

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.

RouteAccès requisCe que ça renvoie
GET/whoamiLes accès accordés à ta clé. Utile pour vérifier ton branchement.
GET/player/:pseudoplayer.existsExistence du compte, date d'arrivée, temps de jeu.
GET/player/:pseudo/villageplayer.villageVillage du joueur et ses membres.
GET/player/:pseudo/bankplayer.bankSolde, niveau et totaux du compte en banque.
GET/player/:pseudo/statsplayer.statsStatistiques de jeu : combat, blocs, pêche, élevage, Pokémon.
GET/player/:pseudo/gradeplayer.gradeGrade VIP/MVP, booster, copaing, bêta-testeur.
GET/player/:pseudo/onlineplayer.onlinePrésence en jeu et serveur courant.
GET/player/:pseudo/namesplayer.nameHistorique des pseudos.
GET/player/:pseudo/discordplayer.discordIdentifiant Discord lié, s'il y en a un.
GET/player/:pseudo/shiny-chainplayer.shinychainChaîne shiny en cours et record.
GET/player/:pseudo/pokedexpokedex.readEspèces capturées, shinies, progression.
GET/player/:pseudo/badgesbadges.readBadges d'arène obtenus.
GET/player/:pseudo/jobsjobs.readNiveaux, XP et talents des métiers.
GET/player/:pseudo/discoverydiscovery.readCarnet de découvertes : minerais, créatures, biomes.
GET/player/:pseudo/questsquests.readQuêtes du jour et de la semaine, progression et récompenses réclamées.

Données du serveur

RouteAccès requisCe que ça renvoie
GET/playersplayer.directoryAnnuaire paginé des pseudos (25 par page).
GET/players/search?q=player.directoryLes 10 pseudos les plus proches d'une saisie.
GET/villagesvillage.directoryListe des villages : recherche, tri, pagination.
GET/villages/:tagvillage.directoryFiche d'un village par tag, nom ou identifiant.
GET/market/listingsmarket.readAnnonces en vente à l'hôtel des ventes.
GET/market/summarymarket.readStatistiques de prix, objet par objet.
GET/market/salesmarket.readVentes récentes du serveur : les points d'une courbe de prix.
GET/statusserver.statusJoueurs connectés par serveur et maintenances en cours.
POST/paymentspayment.requestCrée une demande de paiement que le joueur règle sur pokemania.top.
GET/payments/:idpayment.requestÉtat d'une demande de paiement.
POST/payoutspayment.payoutVerse 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.

RouteAccès requisCe que ça renvoie
POST/oauth/tokenÉchange le code reçu au retour contre un jeton joueur.
POST/oauth/revokeRend le jeton d'un joueur inutilisable.
GET/meplayer.existsLe joueur qui a accordé l'accès.
GET/me/…l'accès correspondantMêmes chemins que /player/:pseudo/…, au nom du joueur.
GET/me/bank/historybank.historyTransactions bancaires détaillées. Jamais lisible par pseudo.
GET/me/teampokemon.readL'équipe, en fiche complète : IV, EV, stats et attaques.
GET/me/pokemonpokemon.readTous ses Pokémon, paginés et filtrables (espèce, shiny, boîte).
GET/me/pokemon/:idpokemon.readLa fiche complète d'un seul Pokémon.
GET/me/pcpokemon.readLes boîtes du PC : nom, icône, remplissage.
GET/me/marketauction.mineRésumé vendeur : niveau, ventes, recette, compteurs.
GET/me/market/listingsauction.mineSes annonces et le détail des parts vendues.
GET/me/market/purchasesauction.mineSes achats à l'hôtel des ventes.
GET/me/market/favoritesauction.mineLes annonces qu'il suit en favori.
GET/me/referralreferral.readSon code de parrainage, ses filleuls et son parrain.
GET/me/village/managevillage.manageRôles, permissions, membres, invitations, home et alliés.
GET/me/village/treasuryvillage.manageSolde, plafond et mouvements de trésorerie.
GET/me/village/historyvillage.manageLe journal du village.
GET/me/village/questvillage.manageQuête hebdomadaire, contributions et classement.
POST/me/notifynotify.sendAffiche une notification au joueur en jeu, signée du nom et du logo de ton application.
POST/me/village/payeconomy.payVerse 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é. Attends Retry-After secondes.

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.

Gérer mon application