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é.
| Famille | Entrées |
|---|---|
| Catalogue | catalog.read |
| Personnages | characters.read · characters.create · characters.delete |
| Objets forgés | items.read · items.create · items.update · items.delete · items.publish |
| Monstres | monsters.read · monsters.create · monsters.update · monsters.delete · monsters.publish |
| Campagnes | campaigns.read · campaigns.create · campaigns.update · campaigns.delete · campaigns.publish |
| Quêtes | quests.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": "…" } ]
}
}
| Code | Signification |
|---|---|
401 unauthenticated | Clé absente, inconnue, révoquée ou expirée. |
403 forbidden | Le compte n’a pas le rôle requis (par exemple MJ pour la forge). |
403 insufficient_scope | La clé est valide mais n’a pas ce droit (voir « Droits d’une clé »). |
404 not_found | Ressource inconnue, ou qui ne vous appartient pas. |
409 conflict / insufficient_credits | L’état de la ressource refuse l’action (transition impossible, objet utilisé, crédits de forge insuffisants). |
422 validation_failed | Charge utile invalide : <code>violations</code> détaille chaque champ fautif. |
429 rate_limited | Quota 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ès | Effet |
|---|---|
GET /api/v1/me | Le compte derrière la clé, ses rôles et son solde de crédits. |
GET /api/v1/catalog/species | Espèces et lignées (<code>requiresLineage</code> dit si une lignée est obligatoire). |
GET /api/v1/catalog/classes | Classes, sous-classes et budgets de niveau 1 (compétences, expertise, or, sorts, paquetage). |
GET /api/v1/catalog/backgrounds | Historiques 2024 : compétences offertes, options de bonus +2/+1, don d’origine. |
GET /api/v1/catalog/skills, …/feats | Compé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-attacks | Armes, armures, équipement et attaques spécifiques visibles par votre compte. |
GET /api/v1/catalog/monsters | Bestiaire utilisable comme modèle ou adversaire de quête. |
GET /api/v1/catalog/worlds, …/places, …/badges | Mondes, lieux (hiérarchie via <code>parent</code>) et badges de récompense. |
GET /api/v1/catalog/rules | Vocabulaires 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ès | Effet |
|---|---|
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/monsters | Forger 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/estimate | Coû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-publication | Demander 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ès | Effet |
|---|---|
GET / POST /api/v1/campaigns | Lister 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}/quests | Les quêtes d’une campagne dans l’ordre de jeu. |
POST /api/v1/quests | Cré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}/activate | Activer la quête sur une table : fige une version et ouvre (ou reprend) la partie. |
POST …/{id}/request-publication | Demander 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ès | Effet |
|---|---|
POST /api/v1/characters/roll-abilities | Obtenir le tirage de caractéristiques (<code>seed</code> + six scores à répartir). |
POST /api/v1/characters | Créer un personnage de niveau 1 (espèce, lignée, classe, historique, scores, compétences, dons, équipement, sorts…). |
GET /api/v1/characters, …?scope=public | Mes 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.