1. Documentation
  2. Développeurs
  3. Webhooks

Webhook premium

Référence complète : endpoint, authentification, corps, réponses.


Le webhook direct est le tuyau générique des rôles premium. N’importe quelle source peut le déclencher : votre site, un backend de jeu, un pont Make ou Zapier, une plateforme de vente.

Endpoint

POST /webhooks/premium/{guildId}
Content-Type: application/json
Authorization: Bearer <secret du serveur>

Le secret est propre à chaque serveur. Il se génère depuis le dashboard, s’affiche une seule fois, et se régénère à volonté. L’en-tête x-premium-secret est accepté comme alternative à Authorization.

Corps de la requête

{
  "tier": "or",
  "active": true,
  "discordId": "123456789012345678",
  "email": "client@exemple.com",
  "ref": "sub_42",
  "lifetime": false,
  "expiresAt": "2026-12-31T23:59:59Z",
  "graceDays": 7
}
ChampTypeRôle
activebooléentrue ouvre le droit, false le ferme. Défaut : true
tierchaîneClé du palier. Facultatif s’il n’existe qu’un seul palier
discordIdchaîneIdentifiant Discord du membre
emailchaîneEmail de l’acheteur, pour la réclamation
refchaîneVotre référence (identifiant d’abonnement, de commande…)
lifetimebooléenAccès à vie, jamais retiré automatiquement
expiresAtISO 8601Le droit tombe seul à cette date. Ignoré si lifetime
graceDaysentierForce le délai de grâce au retrait. 0 = immédiat

Le modèle par état

Il n’y a aucun champ action, event ou status. Le seul discriminant est active. Vous décrivez l’état souhaité, Bao réconcilie.

  • Ouvrir (active: true) exige un palier, et discordId ou email.
  • Fermer (active: false) exige seulement de retrouver le droit : ref suffit, et c’est la voie recommandée. Vous n’avez pas à conserver une identité juste pour annuler.

Idempotence

Fournissez ref. Les rappels portant la même référence mettent à jour le même droit. Rejouer un octroi ne crée jamais de doublon : vous pouvez relancer un appel en cas de doute.

Réponses

CodeSignification
202Traité. Le corps contient le résultat
400Requête incomplète ou palier inconnu
401Secret invalide
404Fonctionnalité, source ou secret non configurés sur ce serveur
500Erreur interne. L’appel peut être rejoué sans risque

Résultats possibles dans un 202 :

RésultatSignification
grantedDroit ouvert, rôle attribué
pending_claimDroit créé en attente : la personne doit le réclamer dans Discord
grace_scheduledRetrait programmé après la période de grâce
revokedDroit fermé, rôle retiré
not_foundAucun droit correspondant à retirer

Exemples

Ouvrir un accès pour un membre connu :

curl -X POST https://<url-de-bao>/webhooks/premium/123456789012345678 \
  -H "Authorization: Bearer bao_prm_..." \
  -H "Content-Type: application/json" \
  -d '{"tier":"or","active":true,"discordId":"987654321098765432","ref":"sub_42"}'

Ouvrir un accès pour un acheteur qui n’a donné que son email :

curl -X POST https://<url-de-bao>/webhooks/premium/123456789012345678 \
  -H "Authorization: Bearer bao_prm_..." \
  -H "Content-Type: application/json" \
  -d '{"tier":"or","active":true,"email":"client@exemple.com","ref":"cmd_1042"}'

Fermer un accès :

curl -X POST https://<url-de-bao>/webhooks/premium/123456789012345678 \
  -H "Authorization: Bearer bao_prm_..." \
  -H "Content-Type: application/json" \
  -d '{"active":false,"ref":"sub_42"}'

Pièges à connaître

  • Le 404 n’est pas une erreur de code. Il signifie que la fonctionnalité est coupée, la source désactivée, ou qu’aucun secret n’a été généré. Vérifiez la configuration avant de chercher côté client.
  • Un membre absent du serveur n’est pas un échec. Le droit est conservé et le rôle est posé à son arrivée. N’implémentez pas de file d’attente.
  • Un 202 ne garantit pas que le rôle est posé. Si le rôle de Bao est sous le rôle premium, l’attribution échoue et n’apparaît que dans le journal d’audit premium. C’est la cause numéro un des rôles manquants.

Journal des livraisons

Chaque appel reçu est consigné avec son résultat et une explication lisible : secret invalide, palier inconnu, droit déjà retiré. Vous pouvez diagnostiquer seul un 401 ou un 404 depuis le dashboard, sans nous écrire.