API JSON
Controle CreationDePerso desde un script o un asistente de IA: lectura del catálogo, creación de monstruos, objetos, campañas, misiones y personajes, con exactamente las mismas reglas que el sitio.
Autenticación
Genere una clave personal desde Mi espacio → Claves API y envíela en la cabecera Authorization de cada llamada:
curl -H "Authorization: Bearer cpk_…" https://www.creationdeperso.com/api/v1/me
La clave lleva los derechos de su cuenta: un jugador lee el catálogo y gestiona sus personajes, un DJ además forja monstruos y objetos y redacta campañas y misiones.
Derechos de una clave
Cada clave lleva una lista de derechos elegida al crearla (y modificable después): entradas <code>familia.acción</code>, o una familia entera <code>familia.*</code>. Un derecho nunca supera los roles de la cuenta: una clave con <code>monsters.create</code> en una cuenta sin rol de DJ sigue rechazada. <code>GET /me</code> devuelve los derechos de la clave.
| Familia | Entradas |
|---|---|
| Catálogo | catalog.read |
| Personajes | characters.read · characters.create · characters.delete |
| Objetos forjados | items.read · items.create · items.update · items.delete · items.publish |
| Monstruos | monsters.read · monsters.create · monsters.update · monsters.delete · monsters.publish |
| Campañas | campaigns.read · campaigns.create · campaigns.update · campaigns.delete · campaigns.publish |
| Misiones | quests.read · quests.create · quests.update · quests.delete · quests.publish · quests.activate |
Una llamada fuera de los derechos de la clave responde <code>403 insufficient_scope</code> con el derecho que falta en <code>requiredScope</code>.
Convenciones
- Los elementos del catálogo se designan por su slug (<code>key</code>), nunca por un id numérico. Solo los personajes, campañas y misiones, y los recursos que usted crea, llevan un <code>id</code>.
- Una lista se envuelve en <code>{ items, total }</code> (paginada: <code>{ items, page, perPage, total }</code>, <code>perPage</code> ≤ 100).
- La cabecera <code>Accept-Language</code> (fr por defecto, en, de, es) elige el idioma de los nombres del catálogo y de los mensajes de error.
- Cada cuenta dispone de 1 000 llamadas por hora (cabeceras <code>X-RateLimit-*</code>).
Todo error responde con una envoltura única:
{
"error": {
"code": "validation_failed",
"message": "…",
"violations": [ { "path": "hitPoints", "message": "…" } ]
}
}
| Código | Significado |
|---|---|
401 unauthenticated | Clave ausente, desconocida, revocada o expirada. |
403 forbidden | La cuenta no tiene el rol requerido (por ejemplo DJ para la forja). |
403 insufficient_scope | La clave es válida pero no tiene este derecho (véase «Derechos de una clave»). |
404 not_found | Recurso desconocido, o que no le pertenece. |
409 conflict / insufficient_credits | El estado del recurso rechaza la acción (transición imposible, objeto en uso, créditos de forja insuficientes). |
422 validation_failed | Carga útil inválida: <code>violations</code> detalla cada campo erróneo. |
429 rate_limited | Cuota horaria superada: reintentar tras <code>Retry-After</code>. |
500 internal | Error interno: cite el requestId de la respuesta para que el incidente pueda encontrarse en el registro. |
Las longitudes máximas y los límites de cada campo (maxLength, minimum, maximum) están declarados en el esquema OpenAPI: son las reglas del sitio, superarlos responde 422. Un cuerpo leído con GET puede reenviarse tal cual con PUT, campos de solo lectura incluidos.
Lectura del catálogo
Empiece leyendo el catálogo para conocer los slugs que debe enviar. Las tablas «homebrew» (armas, armaduras, equipo, ataques, monstruos) se limitan a lo que su cuenta puede ver: contenido integrado, contenido público validado y sus propias creaciones (campo <code>origin</code>).
| Punto de acceso | Efecto |
|---|---|
GET /api/v1/me | La cuenta tras la clave, sus roles y su saldo de créditos. |
GET /api/v1/catalog/species | Especies y linajes (<code>requiresLineage</code> indica si un linaje es obligatorio). |
GET /api/v1/catalog/classes | Clases, subclases y presupuestos de nivel 1 (habilidades, pericia, oro, conjuros, paquete). |
GET /api/v1/catalog/backgrounds | Trasfondos 2024: habilidades otorgadas, opciones de bonificación +2/+1, dote de origen. |
GET /api/v1/catalog/skills, …/feats | Habilidades y dotes. |
GET /api/v1/catalog/spells?class=&level= | Conjuros, filtrables por clase y nivel (0 = trucos). |
GET /api/v1/catalog/weapons, …/armors, …/equipment, …/specific-attacks | Armas, armaduras, equipo y ataques específicos visibles para su cuenta. |
GET /api/v1/catalog/monsters | Bestiario utilizable como plantilla u oponente de misión. |
GET /api/v1/catalog/worlds, …/places, …/badges | Mundos, lugares (jerarquía vía <code>parent</code>) e insignias de recompensa. |
GET /api/v1/catalog/rules | Vocabularios cerrados (características, tamaños, tipos de daño, propiedades, VD legales, alineamientos) y tablas de reglas. |
Forja: objetos y monstruos (DJ)
Las mismas reglas que la forja del sitio: cada creación descuenta su coste en créditos (no se escribe nada si el saldo es insuficiente), el contenido nace privado y pasa por moderación para hacerse público, el valor de desafío de un monstruo no puede quedar por debajo de la estimación de sus estadísticas. Las modificaciones y eliminaciones son gratuitas.
| Punto de acceso | Efecto |
|---|---|
POST /api/v1/items/{type} | Forjar un arma, una armadura, un equipo o un ataque específico (<code>type</code>: <code>weapons</code>, <code>armors</code>, <code>equipment</code>, <code>specific-attacks</code>). |
GET / PUT / DELETE /api/v1/items/{type}/{id} | Leer, reemplazar o eliminar uno de mis objetos (409 si un inventario o un monstruo lo usa). |
POST /api/v1/monsters | Forjar un monstruo: bloque de estadísticas completo, habilidades (<code>{clave: 1|2}</code>), ataques por slug de arma o de ataque específico. |
POST /api/v1/monsters/estimate | Coste y VD estimado de un bloque, sin crear nada. |
GET / PUT / DELETE /api/v1/monsters/{id} | Leer (los míos, integrados o públicos), reemplazar o eliminar un monstruo. |
POST …/{id}/request-publication | Solicitar la publicación (privado → pendiente de validación). |
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
Campañas y misiones (DJ)
El DJ es siempre la cuenta que llama. Los personajes se designan por <code>id</code>: un miembro del grupo debe ser público y reclamado, un PNJ vinculado debe ser una de sus fichas, un invitado debe ser público, reclamado y fuera del grupo. Una campaña o misión pública retocada vuelve a quedar pendiente de validación.
| Punto de acceso | Efecto |
|---|---|
GET / POST /api/v1/campaigns | Listar mis campañas, crear una (<code>world</code> slug opcional, <code>party</code> ids). |
GET / PUT / DELETE /api/v1/campaigns/{id} | Leer, reemplazar o eliminar una campaña (409 si otras mesas la han adoptado). |
GET /api/v1/campaigns/{id}/quests | Las misiones de una campaña en orden de juego. |
POST /api/v1/quests | Crear una misión: <code>campaignId</code>, lugar e insignia por slug, PNJ, monstruos (slug + cantidad), invitados. |
GET / PUT / DELETE /api/v1/quests/{id} | Leer, reemplazar o eliminar una misión (409 si otras mesas la han jugado). |
POST /api/v1/quests/{id}/activate | Activar la misión en una mesa: fija una versión y abre (o retoma) la partida. |
POST …/{id}/request-publication | Solicitar la publicación (privado → pendiente de validación). |
Personajes
La creación sigue exactamente las reglas del formulario del sitio: las seis puntuaciones deben ser una permutación de la tirada emitida por el servidor (obtenida en el endpoint de tirada y devuelta como el ticket <code>abilityRollToken</code>, válido cinco minutos y consumido una sola vez), el linaje es obligatorio cuando la especie tiene, el reparto del trasfondo debe ser legal, y las habilidades, dotes, conjuros y equipo se mantienen dentro de los presupuestos de nivel 1. Una regla incumplida responde 422 con la ruta del campo afectado.
| Punto de acceso | Efecto |
|---|---|
POST /api/v1/characters/roll-abilities | Obtener una tirada de características emitida por el servidor: un ticket, la semilla y seis puntuaciones a repartir. Dos tiradas por creación, una más mientras la última sea sin esperanza; si no, vuelve la misma tirada con un ticket nuevo, válido cinco minutos. |
POST /api/v1/characters | Crear un personaje de nivel 1 (especie, linaje, clase, trasfondo, puntuaciones, habilidades, dotes, equipo, conjuros…). |
GET /api/v1/characters, …?scope=public | Mis personajes, o la galería pública. |
GET / DELETE /api/v1/characters/{id} | Leer una ficha visible (con la hoja derivada: CA, PG, tiradas, ataques, grimorio); eliminar una de las mías. |
El documento completo legible por máquina se sirve en OpenAPI.