API JSON

Pilotez CreationDePerso depuis un script ou un assistant IA : lecture du catalogue, création de monstres, d’objets, de campagnes, de quêtes et de personnages, avec exactement les mêmes règles que le site.

Authentification

Générez une clé personnelle depuis Mon espace → Clés API et envoyez-la dans l’en-tête Authorization de chaque appel :

curl -H "Authorization: Bearer cpk_…" https://www.creationdeperso.com/api/v1/me

La clé porte les droits de votre compte : un joueur lit le catalogue et gère ses personnages, un MJ forge en plus des monstres et des objets et rédige ses campagnes et quêtes.

Droits d’une clé

Chaque clé porte une liste de droits choisie à sa création (et modifiable ensuite) : des entrées <code>famille.action</code>, ou une famille entière <code>famille.*</code>. Un droit ne dépasse jamais les rôles du compte : une clé avec <code>monsters.create</code> sur un compte sans rôle MJ reste refusée. <code>GET /me</code> renvoie les droits de la clé.

FamilleEntrées
Cataloguecatalog.read
Personnagescharacters.read · characters.create · characters.delete
Objets forgésitems.read · items.create · items.update · items.delete · items.publish
Monstresmonsters.read · monsters.create · monsters.update · monsters.delete · monsters.publish
Campagnescampaigns.read · campaigns.create · campaigns.update · campaigns.delete · campaigns.publish
Quêtesquests.read · quests.create · quests.update · quests.delete · quests.publish · quests.activate

Un appel hors des droits de la clé répond <code>403 insufficient_scope</code> avec le droit manquant dans <code>requiredScope</code>.

Conventions

  • Les éléments de catalogue sont désignés par leur slug (<code>key</code>), jamais par un identifiant numérique. Seuls les personnages, campagnes et quêtes, et les ressources que vous créez, portent un <code>id</code>.
  • Une liste est enveloppée dans <code>{ items, total }</code> (paginée : <code>{ items, page, perPage, total }</code>, <code>perPage</code> ≤ 100).
  • L’en-tête <code>Accept-Language</code> (fr par défaut, en, de, es) choisit la langue des noms du catalogue et des messages d’erreur.
  • Chaque compte dispose de 1 000 appels par heure (en-têtes <code>X-RateLimit-*</code>).

Toute erreur répond avec une enveloppe unique :

{
  "error": {
    "code": "validation_failed",
    "message": "…",
    "violations": [ { "path": "hitPoints", "message": "…" } ]
  }
}
CodeSignification
401 unauthenticatedClé absente, inconnue, révoquée ou expirée.
403 forbiddenLe compte n’a pas le rôle requis (par exemple MJ pour la forge).
403 insufficient_scopeLa clé est valide mais n’a pas ce droit (voir « Droits d’une clé »).
404 not_foundRessource inconnue, ou qui ne vous appartient pas.
409 conflict / insufficient_creditsL’état de la ressource refuse l’action (transition impossible, objet utilisé, crédits de forge insuffisants).
422 validation_failedCharge utile invalide : <code>violations</code> détaille chaque champ fautif.
429 rate_limitedQuota horaire dépassé : réessayer après <code>Retry-After</code>.

Lecture du catalogue

Commencez par lire le catalogue pour connaître les slugs à envoyer. Les tables « homebrew » (armes, armures, équipement, attaques, monstres) sont filtrées à ce que votre compte peut voir : contenu intégré, contenu public validé et vos propres créations (champ <code>origin</code>).

Point d’accèsEffet
GET /api/v1/meLe compte derrière la clé, ses rôles et son solde de crédits.
GET /api/v1/catalog/speciesEspèces et lignées (<code>requiresLineage</code> dit si une lignée est obligatoire).
GET /api/v1/catalog/classesClasses, sous-classes et budgets de niveau 1 (compétences, expertise, or, sorts, paquetage).
GET /api/v1/catalog/backgroundsHistoriques 2024 : compétences offertes, options de bonus +2/+1, don d’origine.
GET /api/v1/catalog/skills, …/featsCompétences et dons.
GET /api/v1/catalog/spells?class=&level=Sorts, filtrables par classe et par niveau (0 = tours de magie).
GET /api/v1/catalog/weapons, …/armors, …/equipment, …/specific-attacksArmes, armures, équipement et attaques spécifiques visibles par votre compte.
GET /api/v1/catalog/monstersBestiaire utilisable comme modèle ou adversaire de quête.
GET /api/v1/catalog/worlds, …/places, …/badgesMondes, lieux (hiérarchie via <code>parent</code>) et badges de récompense.
GET /api/v1/catalog/rulesVocabulaires fermés (caractéristiques, tailles, types de dégâts, propriétés, FP légaux, alignements) et tables de règles.

Forge : objets et monstres (MJ)

Mêmes règles que la forge du site : chaque création débite son coût en crédits (rien n’est écrit si le solde est insuffisant), le contenu naît privé et passe par la modération pour devenir public, le facteur de puissance d’un monstre ne peut pas descendre sous l’estimation de ses statistiques. Les modifications et suppressions sont gratuites.

Point d’accèsEffet
POST /api/v1/items/{type}Forger une arme, une armure, un équipement ou une attaque spécifique (<code>type</code> : <code>weapons</code>, <code>armors</code>, <code>equipment</code>, <code>specific-attacks</code>).
GET / PUT / DELETE /api/v1/items/{type}/{id}Lire, remplacer ou supprimer un de mes objets (409 s’il est utilisé par un inventaire ou un monstre).
POST /api/v1/monstersForger un monstre : bloc de statistiques complet, compétences (<code>{clé: 1|2}</code>), attaques par slug d’arme ou d’attaque spécifique.
POST /api/v1/monsters/estimateCoût et FP estimé d’un bloc, sans rien créer.
GET / PUT / DELETE /api/v1/monsters/{id}Lire (les miens, intégrés ou publics), remplacer ou supprimer un monstre.
POST …/{id}/request-publicationDemander la publication (privé → en attente de validation).
curl -X POST -H "Authorization: Bearer cpk_…" -H "Content-Type: application/json" \
     -d '{"name":"Gobelin des cendres","challengeRating":"1/4","armorClass":15,"hitPoints":7,
          "abilities":{"str":8,"dex":14,"con":10,"int":10,"wis":8,"cha":8},
          "skills":{"stealth":2},"attacks":[{"weapon":"scimitar"}]}' \
     https://www.creationdeperso.com/api/v1/monsters

Campagnes et quêtes (MJ)

Le MJ est toujours le compte appelant. Les personnages sont désignés par leur <code>id</code> : un membre du groupe doit être public et réclamé, un PNJ lié doit être une de vos fiches, un invité doit être public, réclamé et hors du groupe. Une campagne ou une quête publique retouchée repasse en attente de validation.

Point d’accèsEffet
GET / POST /api/v1/campaignsLister mes campagnes, en créer une (<code>world</code> slug facultatif, <code>party</code> ids).
GET / PUT / DELETE /api/v1/campaigns/{id}Lire, remplacer ou supprimer une campagne (409 si d’autres tables l’ont adoptée).
GET /api/v1/campaigns/{id}/questsLes quêtes d’une campagne dans l’ordre de jeu.
POST /api/v1/questsCréer une quête : <code>campaignId</code>, lieu et badge par slug, PNJ, monstres (slug + nombre), invités.
GET / PUT / DELETE /api/v1/quests/{id}Lire, remplacer ou supprimer une quête (409 si d’autres tables l’ont jouée).
POST /api/v1/quests/{id}/activateActiver la quête sur une table : fige une version et ouvre (ou reprend) la partie.
POST …/{id}/request-publicationDemander la publication (privé → en attente de validation).

Personnages

La création suit exactement les règles du formulaire du site : les six scores sont une permutation d’un tirage lié à une graine (obtenue par l’API), la lignée est obligatoire quand l’espèce en a, le bonus d’historique 2024 se répartit sur ses trois options, les compétences, l’expertise, les sorts et l’or de départ restent dans les budgets de niveau 1 de la classe. Le don d’origine et les tours de magie d’espèce sont accordés en plus.

Point d’accèsEffet
POST /api/v1/characters/roll-abilitiesObtenir le tirage de caractéristiques (<code>seed</code> + six scores à répartir).
POST /api/v1/charactersCréer un personnage de niveau 1 (espèce, lignée, classe, historique, scores, compétences, dons, équipement, sorts…).
GET /api/v1/characters, …?scope=publicMes personnages, ou la galerie publique.
GET / DELETE /api/v1/characters/{id}Lire une fiche visible (avec la feuille dérivée : CA, PV, jets, attaques, grimoire) ; supprimer une des miennes.

Le document machine complet est servi en OpenAPI.

Affichage & accessibilité

Adaptez l’affichage à votre confort. Vos choix sont mémorisés sur cet appareil.

Thème
Contraste
Taille du texte
Police
Animations