EnglishFrançais

API publique MGS Toolbox

Les données de référence des encyclopédies et du catalogue MGS Audio, en JSON, en serveur MCP et en cartes à intégrer. Gratuit, sans clé, avec un lien retour.

Tout ce que montre le MGS Toolbox est disponible ici : 88 metals, 141 minerals, 350 ingredients, 54 potions, 58 gems, les règles de la Crafting Table, et le catalogue MGS Audio (pistes, compositeurs, albums, packs, taxonomie). Chaque élément porte url, la page à lier, et embed_url, une carte à intégrer en iframe. Les textes existent en anglais et en français.

Ce que vous pouvez construire

Recherches depuis un bot

Une commande Discord, Slack ou Telegram qui répond à !mineral obsidian ou !metal mithral avec la fiche et son lien. Un appel à /search, un à la fiche.

Générateurs de butin et d’amorces

/minerals/random?rarity=rare&gem_quality=true pour un trésor, /ingredients/random?environment=swamp pour une cueillette, /metals/random?fictional=true pour une lame mystérieuse.

Intégrations VTT et prise de notes

Foundry, Roll20, Owlbear Rodeo, Obsidian, Notion, World Anvil, Kanka : ramenez une fiche dans un journal, un document ou une page de wiki, avec la carte intégrée et le lien conservé.

Sélecteurs de bande-son

/audio/tracks?keyword=dungeon&era=fantasy ou /audio/tracks/random?type=ambience&genre=Forest, puis renvoyez le joueur vers la page de la piste ou le lecteur de l’album.

Aides à l’artisanat

Recettes et bases d’ingrédients pour vos propres règles : essences, prix, DD de récolte, magnitudes des potions, effets des gemmes, plus le texte complet des règles.

Cartes d’encyclopédie sur votre site

Collez un lien (oEmbed) ou une iframe : une carte bilingue avec les faits essentiels et un lien retour, sans code ni appel d’API.

Votre assistant IA, avec de vraies données

Ajoutez le serveur MCP à Claude, ChatGPT, Cursor ou votre propre agent : il consulte les fiches et les pistes ici au lieu de deviner, et cite la page.

Démarrage rapide

curl "https://michaelghelfistudios.com/api/v1/search?q=mithral"
curl "https://michaelghelfistudios.com/api/v1/metals/mithral?lang=fr"
curl "https://michaelghelfistudios.com/api/v1/minerals?system=cubic&gem_quality=true&limit=5"
curl "https://michaelghelfistudios.com/api/v1/audio/tracks/random?genre=Combat&type=music"

Depuis un navigateur ou un bot, sans en-tête particulier (CORS ouvert) :

const res = await fetch('https://michaelghelfistudios.com/api/v1/ingredients/random?environment=swamp&lang=en');
const { data } = await res.json();
console.log(data.name, data.rarity, data.url);   // "Bog Iris", "uncommon", "https://…/apps/rerum/bog_iris"

Chaque réponse est une enveloppe :

{
  "success": true,
  "data": …,                       // un élément, un tableau ou un objet
  "meta": { "version": "v1", "lang": "en", "total": 141, "limit": 50, "offset": 0,
            "license": { "name": "…", "url": "…", "attribution": "…" } },
  "links": { "self": "…", "docs": "https://michaelghelfistudios.com/api/v1/docs" }
}

Conventions

URL de basehttps://michaelghelfistudios.com/api/v1 — HTTPS, GET seulement, JSON (UTF-8).
Langue?lang=en (défaut), fr, ou all pour recevoir chaque texte sous la forme { "en": …, "fr": … }. Les identifiants, catégories et autres codes ne sont jamais traduits : ce sont des clés stables (very_rare, cubic, feywild).
Paginationlimit (max 200) et offset ; meta.total donne le compte complet.
FiltresDes valeurs séparées par des virgules signifient « l’une de » : ?rarity=rare,legendary. La correspondance ignore la casse et les accents. /…/facets liste les valeurs.
CacheLes données de référence changent rarement et sont servies avec Cache-Control: public, max-age=3600 et un ETag (envoyez If-None-Match pour obtenir un 304) ; le catalogue audio avec max-age=300. Merci de les respecter.
Limite de débit120 requêtes par minute et par IP, avec les en-têtes RateLimit-* standard. Besoin de plus pour un vrai projet ? Dites-le sur michaelghelfistudios.com.
Identifiez-vousEnvoyez un User-Agent qui nomme votre projet (MonBot/1.0 (+https://exemple.com)). C’est ainsi que nous savons ce qu’il faut garder stable, et qui prévenir avant un changement.
ErreursLes réponses non 2xx sont { "success": false, "error": "…" }. 404 pour un élément ou un catalogue inconnu, 429 en cas de limite atteinte, 400 pour une requête mal formée.
AudioMétadonnées uniquement. Aucune URL de fichier audio nulle part dans l’API : liez la page de la piste, ou intégrez le lecteur de l’album. Vocabulaire : genre est le thème (Combat, Forest, Taverns and Inns…), mood le style musical (Orchestral, Celtic…), era l’univers (fantasy, scifi…), keyword des étiquettes libres ; tout est insensible à la casse, listé par /audio/taxonomy.

Intégrations & oEmbed

Cartes

Chaque fiche, piste, artiste et album a une carte sur /apps/embed/{kind}/{id} (kinds : metal, mineral, ingredient, potion, gem, track, artist, album). Options : ?lang=fr, ?theme=light|dark (par défaut, le thème du visiteur). Le bouton « Partager » de chaque page d’encyclopédie copie ce code pour vous. Les minéraux de la Crystal Forge montrent leur spécimen rendu (aussi image_url dans l’API et thumbnail_url en oEmbed) ; les cartes de pistes jouent l’extrait de 30 secondes du site, l’API JSON elle-même ne renvoie toujours aucune URL audio.

<iframe src="https://michaelghelfistudios.com/apps/embed/metal/iron?lang=fr" width="100%" height="340"
        style="border:0;max-width:480px" loading="lazy" title="Iron — Metal Encyclopedia"></iframe>

Les cartes envoient leur hauteur à la page hôte, pour qu’une iframe s’ajuste à son contenu :

window.addEventListener('message', (e) => {
  if (e.data?.type !== 'mgs-embed') return;
  document.querySelectorAll('iframe').forEach((f) => { if (f.src === e.data.href) f.height = e.data.height; });
});

oEmbed

Collez le lien d’une page dans WordPress, Discord, Notion, Ghost, Discourse ou toute plateforme qui découvre oEmbed, et il devient la carte de lui-même : chaque page annonce https://michaelghelfistudios.com/api/v1/oembed?url=…. Les intégrateurs peuvent l’appeler directement :

curl "https://michaelghelfistudios.com/api/v1/oembed?url=https%3A%2F%2Fmichaelghelfistudios.com%2Fapps%2Fcrystal%2Fquartz&maxwidth=400"

Lecteur d’album

Les albums ont un vrai lecteur avec un extrait de chaque piste : https://michaelghelfistudios.com/audio/embed/{albumId} (450 px de haut). C’est ce qu’oEmbed renvoie pour une page d’album.

Encyclopédies entières

Les encyclopédies elles-mêmes acceptent d’être encadrées (/apps/metals/, /apps/crystal/, /apps/rerum/) ; c’est ainsi que le module Foundry VTT les affiche dans un monde.

Serveur MCP

Les mêmes catalogues sous forme de serveur MCP, pour les assistants IA et les agents : https://michaelghelfistudios.com/api/v1/mcp (Streamable HTTP, sans état, sans clé, lecture seule). Outils : search_encyclopedia, get_entry, list_entries, random_entry, list_facets, craft_rules, search_tracks, random_track, get_track, list_composers, list_albums, audio_taxonomy. Chaque résultat porte l’url des fiches et les instructions du serveur demandent à l’assistant de la citer.

Claude Code :

claude mcp add --transport http mgs-toolbox https://michaelghelfistudios.com/api/v1/mcp

Claude Desktop, Cursor, VS Code, Windsurf et la plupart des clients acceptent un serveur distant par URL dans leurs réglages MCP ; la forme JSON est :

{
  "mcpServers": {
    "mgs-toolbox": { "type": "http", "url": "https://michaelghelfistudios.com/api/v1/mcp" }
  }
}

Les clients qui ne parlent que stdio peuvent passer par npx mcp-remote https://michaelghelfistudios.com/api/v1/mcp. Le serveur est référencé dans le registre MCP officiel sous com.michaelghelfistudios/toolbox. Même limite de débit et mêmes conditions que l’API JSON.

Vos propres données

Vos villes Fantasy City Simulator et vos campagnes de la Crafting Table, depuis vos propres outils : un bot Discord qui poste la nourriture et l’or de la ville, une page de wiki qui liste ses habitants, un script qui exporte l’inventaire du groupe. En lecture seule, sous une clé API personnelle que vous créez dans le hub (menu → Clés API) et révoquez quand vous voulez.

Envoyez-la en jeton Bearer sur les routes /me, et nulle part ailleurs : elle n’est acceptée nulle part ailleurs.

curl -H "Authorization: Bearer mgsk_…" "https://michaelghelfistudios.com/api/v1/me/settlements"
curl -H "Authorization: Bearer mgsk_…" "https://michaelghelfistudios.com/api/v1/me/settlements/42/inhabitants?lang=fr"

Une clé porte les portées choisies à sa création : profile (qui vous êtes), fcs:read (villes, tableau de bord, habitants, campagnes), craft:read (les campagnes de la Crafting Table que vous menez et leurs inventaires ; Patreon, comme sur le site). Tout est en lecture seule.

Il n’y a pas d’audio sur cette surface, c’est voulu : une clé ne liste jamais les droits, ne télécharge jamais, ne diffuse jamais. Ce que vous pouvez faire avec le catalogue musical, c’est ce que les endpoints publics offrent à tout le monde.

Les clés sont stockées hachées, ressemblent à mgsk_… pour que les scanners de secrets les reconnaissent, comptent dans la même limite de débit que l’API publique, et affichent leur dernière utilisation dans le hub. Une clé perdue ? Révoquez-la et créez-en une autre.

Endpoints

Générée depuis la description OpenAPI. La référence est en anglais dans les deux langues.

Reference data

Metals, minerals, ingredients, potions, gems and the crafting rules.

GET/api/v1/metals

List metals — Real elements, historical alloys, mythological and fictional metals, with physical, mechanical and chemical properties plus lore. The Metal Encyclopedia. 88 entries.

ParamètreTypeDescription
categorystringOne or more categories, comma-separated.
fictional_ipfictional_ttrpgmythologicalreal_alloyreal_pure
erastringOne or more eras, comma-separated.
ancientmedievalmodernsci-fitimeless
raritystringOne or more rarities, comma-separated.
commonlegendaryrareuncommonvery rare
fictionalbooleantrue for invented metals, false for real ones.
tagstringOne or more tags, comma-separated.
qstringName search, case- and accent-insensitive. Best matches first.
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /metals

GET/api/v1/metals/facets

Filter values for metals — Every distinct value of each filterable field, for building pickers.

Essayer : GET /metals/facets

GET/api/v1/metals/random

A random metal — One entry at random among those matching the same filters as the listing. Loot tables, prompts, "mineral of the day".

ParamètreTypeDescription
categorystringOne or more categories, comma-separated.
fictional_ipfictional_ttrpgmythologicalreal_alloyreal_pure
erastringOne or more eras, comma-separated.
ancientmedievalmodernsci-fitimeless
raritystringOne or more rarities, comma-separated.
commonlegendaryrareuncommonvery rare
fictionalbooleantrue for invented metals, false for real ones.
tagstringOne or more tags, comma-separated.
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /metals/random

GET/api/v1/metals/{id}

One metal

ParamètreTypeDescription
id requisstring
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /metals/iron

GET/api/v1/minerals

List minerals — Real and fantasy minerals: crystallography, physical properties, geology, arcane properties. The Crystal Encyclopedia. 141 entries.

ParamètreTypeDescription
typestringreal or fantasy.
fantasyreal
systemstringCrystal system(s), comma-separated.
amorphouscubichexagonalmonoclinicorthorhombictetragonaltriclinictrigonal
raritystringOne or more rarities, comma-separated.
commonlegendaryrareuncommonvery rare
gem_qualitybooleantrue to keep gem-quality minerals only.
colorstringColour(s), comma-separated.
magicbooleantrue to keep minerals with arcane properties.
planar_originstringPlanar origin(s), comma-separated.
abyssastral_planecelestiaelemental_plane_earthelemental_plane_firefar_realmfeywildmaterial_planenine_hellsshadowfell
originstringGeological origin(s), comma-separated.
glacialhydrothermaligneousmetamorphicmeteoricplanarsedimentaryvolcanic
qstringName search, case- and accent-insensitive. Best matches first.
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /minerals

GET/api/v1/minerals/facets

Filter values for minerals — Every distinct value of each filterable field, for building pickers.

Essayer : GET /minerals/facets

GET/api/v1/minerals/random

A random mineral — One entry at random among those matching the same filters as the listing. Loot tables, prompts, "mineral of the day".

ParamètreTypeDescription
typestringreal or fantasy.
fantasyreal
systemstringCrystal system(s), comma-separated.
amorphouscubichexagonalmonoclinicorthorhombictetragonaltriclinictrigonal
raritystringOne or more rarities, comma-separated.
commonlegendaryrareuncommonvery rare
gem_qualitybooleantrue to keep gem-quality minerals only.
colorstringColour(s), comma-separated.
magicbooleantrue to keep minerals with arcane properties.
planar_originstringPlanar origin(s), comma-separated.
abyssastral_planecelestiaelemental_plane_earthelemental_plane_firefar_realmfeywildmaterial_planenine_hellsshadowfell
originstringGeological origin(s), comma-separated.
glacialhydrothermaligneousmetamorphicmeteoricplanarsedimentaryvolcanic
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /minerals/random

GET/api/v1/minerals/{id}

One mineral

ParamètreTypeDescription
id requisstring
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /minerals/quartz

GET/api/v1/ingredients

List ingredients — Alchemical ingredients for tabletop crafting: category, rarity, price, essences, environments, harvesting. Rerum Natura. 350 entries.

ParamètreTypeDescription
categorystringOne or more categories, comma-separated.
creaturemineralphenomenaplantprocessed
raritystringOne or more rarities, comma-separated.
commonlegendaryrareuncommonvery_rare
environmentstringEnvironment(s) the ingredient is found in, comma-separated.
anyaquaticastralcavedesertdungeonfeywildforestgraveyardjunglemountainoceanplanarshadowfellswamptundraunderdarkurbanvolcanic
essencestringEssence type(s), comma-separated.
airastraleeauempyréenneéternitéétherfeulumièremortombreprimordialetelluriqueterrevie
tagstringOne or more tags, comma-separated.
qstringName search, case- and accent-insensitive. Best matches first.
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /ingredients

GET/api/v1/ingredients/facets

Filter values for ingredients — Every distinct value of each filterable field, for building pickers.

Essayer : GET /ingredients/facets

GET/api/v1/ingredients/random

A random ingredient — One entry at random among those matching the same filters as the listing. Loot tables, prompts, "mineral of the day".

ParamètreTypeDescription
categorystringOne or more categories, comma-separated.
creaturemineralphenomenaplantprocessed
raritystringOne or more rarities, comma-separated.
commonlegendaryrareuncommonvery_rare
environmentstringEnvironment(s) the ingredient is found in, comma-separated.
anyaquaticastralcavedesertdungeonfeywildforestgraveyardjunglemountainoceanplanarshadowfellswamptundraunderdarkurbanvolcanic
essencestringEssence type(s), comma-separated.
airastraleeauempyréenneéternitéétherfeulumièremortombreprimordialetelluriqueterrevie
tagstringOne or more tags, comma-separated.
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /ingredients/random

GET/api/v1/ingredients/{id}

One ingredient

ParamètreTypeDescription
id requisstring
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /ingredients/aarakocra_feather

GET/api/v1/potions

List potions — Potions of the Crafting Table: essences needed, crafting time, spellcaster level, effects by magnitude. 54 entries.

ParamètreTypeDescription
essencestringEssence type(s), comma-separated.
airastraleeauempyréenneéternitéétherfeulumièremortombreprimordialetelluriqueterrevie
qstringName search, case- and accent-insensitive. Best matches first.
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /potions

GET/api/v1/potions/facets

Filter values for potions — Every distinct value of each filterable field, for building pickers.

Essayer : GET /potions/facets

GET/api/v1/potions/random

A random potion — One entry at random among those matching the same filters as the listing. Loot tables, prompts, "mineral of the day".

ParamètreTypeDescription
essencestringEssence type(s), comma-separated.
airastraleeauempyréenneéternitéétherfeulumièremortombreprimordialetelluriqueterrevie
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /potions/random

GET/api/v1/potions/{id}

One potion

ParamètreTypeDescription
id requisstring
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /potions/potion_alerte

GET/api/v1/gems

List gems — Socketable gems of the Crafting Table: colour, rarity, effect at each level. 58 entries.

ParamètreTypeDescription
colorstringColour(s), comma-separated.
anyblackbluegreenmetaorangepurpleredwhiteyellow
raritystringOne or more rarities, comma-separated.
legendaryrareuncommonvariablevery_rare
temporarybooleantrue for gems whose effect is consumed.
qstringName search, case- and accent-insensitive. Best matches first.
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /gems

GET/api/v1/gems/facets

Filter values for gems — Every distinct value of each filterable field, for building pickers.

Essayer : GET /gems/facets

GET/api/v1/gems/random

A random gem — One entry at random among those matching the same filters as the listing. Loot tables, prompts, "mineral of the day".

ParamètreTypeDescription
colorstringColour(s), comma-separated.
anyblackbluegreenmetaorangepurpleredwhiteyellow
raritystringOne or more rarities, comma-separated.
legendaryrareuncommonvariablevery_rare
temporarybooleantrue for gems whose effect is consumed.
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /gems/random

GET/api/v1/gems/{id}

One gem

ParamètreTypeDescription
id requisstring
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /gems/gem_defense

GET/api/v1/craft/rules

The Crafting Table rules — The rules text of the crafting system (characters, essences, extraction, brewing, gem cutting, socketing) as HTML sections with stable ids — the same text the Foundry module writes into its journal.

ParamètreTypeDescription
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Essayer : GET /craft/rules

Audio catalogue

Tracks, composers, albums, packs and taxonomy of MGS Audio.

GET/api/v1/audio/tracks

List published tracks — Music, ambiences and sound effects of MGS Audio with their metadata, composer, album and pages. Metadata only: the API never serves audio bytes — link the url or iframe the album player.

ParamètreTypeDescription
typestringAudio type(s), comma-separated: music, ambience, sfx
genrestringTheme(s), comma-separated, case-insensitive: Combat, Forest, Taverns and Inns… (see /audio/taxonomy).
moodstringMusical style(s), comma-separated — Orchestral, Celtic, Folk… — any of them matches.
erastringEra token(s), comma-separated.
keywordstringKeyword(s), comma-separated — any of them matches.
composerstringA composer id or slug.
albumstringAn album id or slug.
packstringA pack id or slug.
duration_minnumberMinimum duration in seconds.
duration_maxnumberMaximum duration in seconds.
qstringText search in title, description and keywords.
include_versionsboolean (défaut false)true to list alternative versions as separate items (default: main tracks only).
sortstring (défaut newest)Order of the listing.
newestoldesttitledurationrandom
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /audio/tracks

GET/api/v1/audio/tracks/random

A random track — One published track matching the filters. "Play me a battle theme" in a bot is ?genre=Combat&type=music; "a forest ambience" is ?type=ambience&genre=Forest.

ParamètreTypeDescription
typestringAudio type(s), comma-separated: music, ambience, sfx
genrestringTheme(s), comma-separated, case-insensitive: Combat, Forest, Taverns and Inns… (see /audio/taxonomy).
moodstringMusical style(s), comma-separated — Orchestral, Celtic, Folk… — any of them matches.
erastringEra token(s), comma-separated.
keywordstringKeyword(s), comma-separated — any of them matches.
composerstringA composer id or slug.
albumstringAn album id or slug.
packstringA pack id or slug.
duration_minnumberMinimum duration in seconds.
duration_maxnumberMaximum duration in seconds.
qstringText search in title, description and keywords.
include_versionsboolean (défaut false)true to list alternative versions as separate items (default: main tracks only).

Essayer : GET /audio/tracks/random

GET/api/v1/audio/tracks/{id}

One track — By id or slug (the slug from the track page URL). Includes its published alternative versions.

ParamètreTypeDescription
id requisstring

Essayer : GET /audio/tracks/

GET/api/v1/audio/composers

List composers — Every composer with at least one published track, most prolific first.

Essayer : GET /audio/composers

GET/api/v1/audio/composers/{id}

One composer

ParamètreTypeDescription
id requisstringId or slug.

Essayer : GET /audio/composers/

GET/api/v1/audio/composers/{id}/tracks

A composer's tracks

ParamètreTypeDescription
id requisstring
typestringAudio type(s), comma-separated: music, ambience, sfx
genrestringTheme(s), comma-separated, case-insensitive: Combat, Forest, Taverns and Inns… (see /audio/taxonomy).
moodstringMusical style(s), comma-separated — Orchestral, Celtic, Folk… — any of them matches.
erastringEra token(s), comma-separated.
keywordstringKeyword(s), comma-separated — any of them matches.
albumstringAn album id or slug.
packstringA pack id or slug.
duration_minnumberMinimum duration in seconds.
duration_maxnumberMaximum duration in seconds.
qstringText search in title, description and keywords.
include_versionsboolean (défaut false)true to list alternative versions as separate items (default: main tracks only).
sortstring (défaut newest)Order of the listing.
newestoldesttitledurationrandom
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /audio/composers//tracks

GET/api/v1/audio/albums

List albums — Published albums (Patreon-only collections are not listed).

ParamètreTypeDescription
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /audio/albums

GET/api/v1/audio/albums/{id}

One album

ParamètreTypeDescription
id requisstringId or slug.

Essayer : GET /audio/albums/

GET/api/v1/audio/albums/{id}/tracks

An album's tracks — In album order.

ParamètreTypeDescription
id requisstring
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /audio/albums//tracks

GET/api/v1/audio/packs

List packs — Thematic packs (the unit Patreon supporters download in bulk).

ParamètreTypeDescription
limitinteger (défaut 50)Page size (1–200, default 50).
offsetinteger (défaut 0)Number of items to skip.

Essayer : GET /audio/packs

GET/api/v1/audio/taxonomy

Genres, moods, eras and keywords — Every value in use across published tracks — the vocabulary of the track filters.

Essayer : GET /audio/taxonomy

Your own data

Read-only access to the account's Fantasy City Simulator and Crafting Table data, with a personal API key (Authorization: Bearer mgsk_…). No audio here, by design.

GET/api/v1/me

Who the key belongs to

GET/api/v1/me/settlements

Your Fantasy City Simulator settlements — Every settlement the account is a member of, with its role.

GET/api/v1/me/settlements/{id}

One settlement and its current game state

ParamètreTypeDescription
id requisinteger

GET/api/v1/me/settlements/{id}/dashboard

The full FCS dashboard — Resources, jobs, buildings, construction queue, recent events… — the same object the FCS app renders. Its shape follows the app and may change.

ParamètreTypeDescription
id requisinteger

GET/api/v1/me/settlements/{id}/inhabitants

The inhabitants of a settlement — Each with species, job, a rendered description and journal in the requested language; the GM-only secret travels for gamemasters.

ParamètreTypeDescription
id requisinteger
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

GET/api/v1/me/campaigns

Your campaigns — The hub campaigns (a GM, players, settlements, crafting tables) the account belongs to.

GET/api/v1/me/craft/campaigns

The Crafting Table campaigns you run — Patreon membership required, as on the website.

GET/api/v1/me/craft/campaigns/{id}/inventories

Every member's inventory — Potions, ingredients, essences, gems and socketed equipment of each character, rendered in the requested language. DM only, Patreon required.

ParamètreTypeDescription
id requisstring
langstring (défaut en)Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.
enfrall

Embeds

oEmbed and cards.

GET/api/v1/oembed

oEmbed provider — Turns one of our page URLs (an encyclopedia entry, a track, an artist, an album) into an embeddable card, per the oEmbed spec. Platforms that support oEmbed discovery (WordPress, Discord, Notion, Ghost, Discourse…) call this on their own when a link is pasted.

ParamètreTypeDescription
url requisstringThe page URL.
formatstring
json
maxwidthinteger
maxheightinteger

Essayer : GET /oembed

Meta

Index and documents.

GET/api/v1/

API index — Where everything is: catalogue sizes, endpoints, docs, terms.

Essayer : GET /

Conditions

MGS Toolbox open data terms. Version courte : utilisez-les, mettez un lien retour, ne clonez pas le site, ne redistribuez pas la musique.

Libre d’utilisation
Outils personnels, communautaires ou commerciaux : bots Discord, modules de VTT, plugins de prise de notes, wikis, générateurs, votre propre site. Sans clé, sans inscription, sans frais.
Lien retour
Partout où vous montrez une fiche, montrez d’où elle vient : le champ url de chaque élément est la page à lier. Une courte mention de Michael Ghelfi Studios suffit quand un lien est impossible (un message de chat, un assistant vocal).
Pas de miroir
Ne republiez pas les catalogues sous forme de pages autonomes qui remplaceraient les encyclopédies (une copie de chaque métal, minéral ou ingrédient avec son texte complet). Citer des fiches dans vos contenus, outils et jeux, c’est ce pour quoi l’API existe ; cloner le site, non.
La musique reste sous licence
Les endpoints audio décrivent le catalogue : titres, compositeurs, ambiances, pages, lecteurs à intégrer. Ils ne livrent jamais de fichier audio, et lister une piste n’accorde aucun droit sur l’enregistrement. Les licences de la musique elle-même se vendent sur le site.
Restez raisonnable
Mettez les réponses en cache (elles portent un Cache-Control), identifiez votre projet dans l’en-tête User-Agent, et restez sous la limite de débit publiée. Un trafic abusif est bloqué, pas ralenti.
Sans garantie, sans verrou
Les données sont fournies en l’état et peuvent évoluer avec les encyclopédies. Un changement incompatible aura un nouveau préfixe de version ; v1 reste en ligne au moins un an après l’arrivée d’une v2.

Ligne d’attribution : Data © Michael Ghelfi Studios — https://michaelghelfistudios.com

Versions et contact

Ceci est la v1. Des champs peuvent être ajoutés à tout moment ; rien n’est retiré ni renommé sans nouveau préfixe. L’index donne la taille actuelle des catalogues. Une question, un projet à montrer, un besoin de limite plus haute : michaelghelfistudios.com.