JSON-API
Steuern Sie CreationDePerso per Skript oder KI-Assistent: Katalog lesen, Monster, Gegenstände, Kampagnen, Quests und Charaktere anlegen — nach genau denselben Regeln wie die Website.
Authentifizierung
Erzeugen Sie einen persönlichen Schlüssel unter Mein Bereich → API-Schlüssel und senden Sie ihn im Authorization-Header jedes Aufrufs:
curl -H "Authorization: Bearer cpk_…" https://www.creationdeperso.com/api/v1/me
Der Schlüssel trägt die Rechte Ihres Kontos: Ein Spieler liest den Katalog und verwaltet seine Charaktere, ein Spielleiter schmiedet zusätzlich Monster und Gegenstände und schreibt Kampagnen und Quests.
Rechte eines Schlüssels
Jeder Schlüssel trägt eine bei der Erstellung gewählte (und später änderbare) Liste von Rechten: Einträge <code>family.action</code> oder eine ganze Familie <code>family.*</code>. Ein Recht übersteigt nie die Rollen des Kontos: Ein Schlüssel mit <code>monsters.create</code> auf einem Konto ohne SL-Rolle wird weiterhin abgelehnt. <code>GET /me</code> gibt die Rechte des Schlüssels zurück.
| Familie | Einträge |
|---|---|
| Katalog | catalog.read |
| Charaktere | characters.read · characters.create · characters.delete |
| Geschmiedete Gegenstände | items.read · items.create · items.update · items.delete · items.publish |
| Monster | monsters.read · monsters.create · monsters.update · monsters.delete · monsters.publish |
| Kampagnen | campaigns.read · campaigns.create · campaigns.update · campaigns.delete · campaigns.publish |
| Quests | quests.read · quests.create · quests.update · quests.delete · quests.publish · quests.activate |
Ein Aufruf außerhalb der Rechte des Schlüssels antwortet mit <code>403 insufficient_scope</code> und dem fehlenden Recht in <code>requiredScope</code>.
Konventionen
- Katalogeinträge werden über ihren Slug (<code>key</code>) angesprochen, nie über eine numerische ID. Nur Charaktere, Kampagnen und Quests sowie die von Ihnen erstellten Ressourcen tragen eine <code>id</code>.
- Eine Liste ist in <code>{ items, total }</code> eingebettet (paginiert: <code>{ items, page, perPage, total }</code>, <code>perPage</code> ≤ 100).
- Der Header <code>Accept-Language</code> (Standard fr, en, de, es) bestimmt die Sprache der Katalognamen und Fehlermeldungen.
- Jedes Konto hat 1.000 Aufrufe pro Stunde (Header <code>X-RateLimit-*</code>).
Jeder Fehler antwortet mit einer einheitlichen Hülle:
{
"error": {
"code": "validation_failed",
"message": "…",
"violations": [ { "path": "hitPoints", "message": "…" } ]
}
}
| Code | Bedeutung |
|---|---|
401 unauthenticated | Schlüssel fehlt, unbekannt, widerrufen oder abgelaufen. |
403 forbidden | Dem Konto fehlt die nötige Rolle (z. B. Spielleiter für die Schmiede). |
403 insufficient_scope | Der Schlüssel ist gültig, hat aber dieses Recht nicht (siehe „Rechte eines Schlüssels“). |
404 not_found | Unbekannte Ressource oder nicht Ihre. |
409 conflict / insufficient_credits | Der Zustand der Ressource verweigert die Aktion (Übergang nicht möglich, Gegenstand in Gebrauch, zu wenig Schmiede-Guthaben). |
422 validation_failed | Ungültige Nutzlast: <code>violations</code> nennt jedes fehlerhafte Feld. |
429 rate_limited | Stundenkontingent überschritten: nach <code>Retry-After</code> erneut versuchen. |
500 internal | Interner Fehler: geben Sie die requestId der Antwort an, damit der Vorfall im Protokoll gefunden werden kann. |
Maximale Längen und Grenzen jedes Feldes (maxLength, minimum, maximum) stehen im OpenAPI-Schema: es sind die Regeln der Website, eine Überschreitung antwortet mit 422. Ein per GET gelesener Körper kann unverändert per PUT zurückgesendet werden, schreibgeschützte Felder eingeschlossen.
Katalog lesen
Lesen Sie zuerst den Katalog, um die zu sendenden Slugs zu kennen. Homebrew-Tabellen (Waffen, Rüstungen, Ausrüstung, Angriffe, Monster) sind auf das beschränkt, was Ihr Konto sehen darf: integrierte Inhalte, freigegebene öffentliche Inhalte und Ihre eigenen Kreationen (Feld <code>origin</code>).
| Endpunkt | Wirkung |
|---|---|
GET /api/v1/me | Das Konto hinter dem Schlüssel, seine Rollen und sein Guthaben. |
GET /api/v1/catalog/species | Spezies und Abstammungen (<code>requiresLineage</code> sagt, ob eine Abstammung Pflicht ist). |
GET /api/v1/catalog/classes | Klassen, Unterklassen und Stufe-1-Budgets (Fertigkeiten, Expertise, Gold, Zauber, Ausrüstungspaket). |
GET /api/v1/catalog/backgrounds | Hintergründe 2024: gewährte Fertigkeiten, +2/+1-Bonusoptionen, Herkunftstalent. |
GET /api/v1/catalog/skills, …/feats | Fertigkeiten und Talente. |
GET /api/v1/catalog/spells?class=&level= | Zauber, filterbar nach Klasse und Grad (0 = Zaubertricks). |
GET /api/v1/catalog/weapons, …/armors, …/equipment, …/specific-attacks | Waffen, Rüstungen, Ausrüstung und spezifische Angriffe, die Ihr Konto sehen darf. |
GET /api/v1/catalog/monsters | Bestiarium als Vorlage oder Quest-Gegner nutzbar. |
GET /api/v1/catalog/worlds, …/places, …/badges | Welten, Orte (Hierarchie über <code>parent</code>) und Belohnungsabzeichen. |
GET /api/v1/catalog/rules | Geschlossene Vokabulare (Attribute, Größen, Schadensarten, Eigenschaften, zulässige HG, Gesinnungen) und Regeltabellen. |
Schmiede: Gegenstände und Monster (SL)
Dieselben Regeln wie die Schmiede der Website: Jede Erstellung kostet Guthaben (bei zu geringem Guthaben wird nichts geschrieben), Inhalte entstehen privat und durchlaufen die Moderation, bevor sie öffentlich werden, der Herausforderungsgrad eines Monsters darf nicht unter der Schätzung seiner Werte liegen. Änderungen und Löschungen sind kostenlos.
| Endpunkt | Wirkung |
|---|---|
POST /api/v1/items/{type} | Waffe, Rüstung, Ausrüstung oder spezifischen Angriff schmieden (<code>type</code>: <code>weapons</code>, <code>armors</code>, <code>equipment</code>, <code>specific-attacks</code>). |
GET / PUT / DELETE /api/v1/items/{type}/{id} | Einen meiner Gegenstände lesen, ersetzen oder löschen (409, wenn ein Inventar oder ein Monster ihn benutzt). |
POST /api/v1/monsters | Ein Monster schmieden: vollständiger Wertblock, Fertigkeiten (<code>{key: 1|2}</code>), Angriffe per Waffen- oder Angriffs-Slug. |
POST /api/v1/monsters/estimate | Kosten und geschätzter HG eines Wertblocks, ohne etwas anzulegen. |
GET / PUT / DELETE /api/v1/monsters/{id} | Ein Monster lesen (meine, integrierte oder öffentliche), ersetzen oder löschen. |
POST …/{id}/request-publication | Veröffentlichung beantragen (privat → wartet auf Freigabe). |
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
Kampagnen und Quests (SL)
Der Spielleiter ist immer das aufrufende Konto. Charaktere werden per <code>id</code> angesprochen: Ein Gruppenmitglied muss öffentlich und beansprucht sein, ein gebundener NSC einer Ihrer Bögen, ein Gast öffentlich, beansprucht und außerhalb der Gruppe. Eine bearbeitete öffentliche Kampagne oder Quest wartet wieder auf Freigabe.
| Endpunkt | Wirkung |
|---|---|
GET / POST /api/v1/campaigns | Meine Kampagnen auflisten, eine anlegen (optionaler <code>world</code>-Slug, <code>party</code>-IDs). |
GET / PUT / DELETE /api/v1/campaigns/{id} | Eine Kampagne lesen, ersetzen oder löschen (409, wenn andere Tische sie übernommen haben). |
GET /api/v1/campaigns/{id}/quests | Die Quests einer Kampagne in Spielreihenfolge. |
POST /api/v1/quests | Eine Quest anlegen: <code>campaignId</code>, Ort und Abzeichen per Slug, NSC, Monster (Slug + Anzahl), Gäste. |
GET / PUT / DELETE /api/v1/quests/{id} | Eine Quest lesen, ersetzen oder löschen (409, wenn andere Tische sie gespielt haben). |
POST /api/v1/quests/{id}/activate | Die Quest an einem Tisch aktivieren: friert eine Version ein und eröffnet (oder setzt fort) den Durchlauf. |
POST …/{id}/request-publication | Veröffentlichung beantragen (privat → wartet auf Freigabe). |
Charaktere
Die Erstellung folgt genau den Regeln des Formulars der Website: die sechs Werte müssen eine Permutation des vom Server erzeugten Wurfs sein (über den Wurf-Endpunkt bezogen und als Ticket <code>abilityRollToken</code> zurückgegeben, fünf Minuten gültig und nur einmal verwendbar), eine Abstammung ist Pflicht, wenn die Spezies welche hat, die Hintergrund-Verteilung muss zulässig sein, und Fertigkeiten, Talente, Zauber und Ausrüstung bleiben in den Budgets der Stufe 1. Ein Regelverstoß antwortet mit 422 und dem Pfad des betroffenen Feldes.
| Endpunkt | Wirkung |
|---|---|
POST /api/v1/characters/roll-abilities | Einen vom Server erzeugten Attributswurf abrufen: ein Ticket, den Seed und sechs Werte zum Verteilen. Zwei Würfe pro Erstellung, ein weiterer solange der letzte hoffnungslos ist; sonst kommt derselbe Wurf mit neuem Ticket zurück, fünf Minuten gültig. |
POST /api/v1/characters | Einen Stufe-1-Charakter anlegen (Spezies, Abstammung, Klasse, Hintergrund, Werte, Fertigkeiten, Talente, Ausrüstung, Zauber…). |
GET /api/v1/characters, …?scope=public | Meine Charaktere oder die öffentliche Galerie. |
GET / DELETE /api/v1/characters/{id} | Einen sichtbaren Bogen lesen (mit abgeleitetem Blatt: RK, TP, Würfe, Angriffe, Zauberbuch); einen meiner löschen. |
Das vollständige maschinenlesbare Dokument wird als OpenAPI bereitgestellt.