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 base | https://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). |
| Pagination | limit (max 200) et offset ; meta.total donne le compte complet. |
| Filtres | Des 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. |
| Cache | Les 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ébit | 120 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-vous | Envoyez 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. |
| Erreurs | Les 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. |
| Audio | Mé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/search
Search every catalogue by name — One query across metals, minerals, ingredients, potions and gems. Exact names first, then prefixes, then substrings (aliases and synonyms count). The go-to endpoint for a chat bot's !lookup command.
| Paramètre | Type | Description |
|---|---|---|
q requis | string | Name search, case- and accent-insensitive. Best matches first. |
kind | string | Restrict to some catalogues, comma-separated (metal,mineral). |
limit | integer (défaut 20) | |
lang | string (défaut en) | Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.enfrall |
Essayer : GET /search
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ètre | Type | Description |
|---|---|---|
category | string | One or more categories, comma-separated. fictional_ipfictional_ttrpgmythologicalreal_alloyreal_pure |
era | string | One or more eras, comma-separated. ancientmedievalmodernsci-fitimeless |
rarity | string | One or more rarities, comma-separated. commonlegendaryrareuncommonvery rare |
fictional | boolean | true for invented metals, false for real ones. |
tag | string | One or more tags, comma-separated. |
q | string | Name search, case- and accent-insensitive. Best matches first. |
lang | string (défaut en) | Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.enfrall |
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (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ètre | Type | Description |
|---|---|---|
category | string | One or more categories, comma-separated. fictional_ipfictional_ttrpgmythologicalreal_alloyreal_pure |
era | string | One or more eras, comma-separated. ancientmedievalmodernsci-fitimeless |
rarity | string | One or more rarities, comma-separated. commonlegendaryrareuncommonvery rare |
fictional | boolean | true for invented metals, false for real ones. |
tag | string | One or more tags, comma-separated. |
lang | string (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ètre | Type | Description |
|---|---|---|
id requis | string | |
lang | string (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ètre | Type | Description |
|---|---|---|
type | string | real or fantasy.fantasyreal |
system | string | Crystal system(s), comma-separated. amorphouscubichexagonalmonoclinicorthorhombictetragonaltriclinictrigonal |
rarity | string | One or more rarities, comma-separated. commonlegendaryrareuncommonvery rare |
gem_quality | boolean | true to keep gem-quality minerals only. |
color | string | Colour(s), comma-separated. |
magic | boolean | true to keep minerals with arcane properties. |
planar_origin | string | Planar origin(s), comma-separated. abyssastral_planecelestiaelemental_plane_earthelemental_plane_firefar_realmfeywildmaterial_planenine_hellsshadowfell |
origin | string | Geological origin(s), comma-separated. glacialhydrothermaligneousmetamorphicmeteoricplanarsedimentaryvolcanic |
q | string | Name search, case- and accent-insensitive. Best matches first. |
lang | string (défaut en) | Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.enfrall |
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (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ètre | Type | Description |
|---|---|---|
type | string | real or fantasy.fantasyreal |
system | string | Crystal system(s), comma-separated. amorphouscubichexagonalmonoclinicorthorhombictetragonaltriclinictrigonal |
rarity | string | One or more rarities, comma-separated. commonlegendaryrareuncommonvery rare |
gem_quality | boolean | true to keep gem-quality minerals only. |
color | string | Colour(s), comma-separated. |
magic | boolean | true to keep minerals with arcane properties. |
planar_origin | string | Planar origin(s), comma-separated. abyssastral_planecelestiaelemental_plane_earthelemental_plane_firefar_realmfeywildmaterial_planenine_hellsshadowfell |
origin | string | Geological origin(s), comma-separated. glacialhydrothermaligneousmetamorphicmeteoricplanarsedimentaryvolcanic |
lang | string (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ètre | Type | Description |
|---|---|---|
id requis | string | |
lang | string (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ètre | Type | Description |
|---|---|---|
category | string | One or more categories, comma-separated. creaturemineralphenomenaplantprocessed |
rarity | string | One or more rarities, comma-separated. commonlegendaryrareuncommonvery_rare |
environment | string | Environment(s) the ingredient is found in, comma-separated. anyaquaticastralcavedesertdungeonfeywildforestgraveyardjunglemountainoceanplanarshadowfellswamptundraunderdarkurbanvolcanic |
essence | string | Essence type(s), comma-separated. airastraleeauempyréenneéternitéétherfeulumièremortombreprimordialetelluriqueterrevie |
tag | string | One or more tags, comma-separated. |
q | string | Name search, case- and accent-insensitive. Best matches first. |
lang | string (défaut en) | Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.enfrall |
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (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ètre | Type | Description |
|---|---|---|
category | string | One or more categories, comma-separated. creaturemineralphenomenaplantprocessed |
rarity | string | One or more rarities, comma-separated. commonlegendaryrareuncommonvery_rare |
environment | string | Environment(s) the ingredient is found in, comma-separated. anyaquaticastralcavedesertdungeonfeywildforestgraveyardjunglemountainoceanplanarshadowfellswamptundraunderdarkurbanvolcanic |
essence | string | Essence type(s), comma-separated. airastraleeauempyréenneéternitéétherfeulumièremortombreprimordialetelluriqueterrevie |
tag | string | One or more tags, comma-separated. |
lang | string (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ètre | Type | Description |
|---|---|---|
id requis | string | |
lang | string (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ètre | Type | Description |
|---|---|---|
essence | string | Essence type(s), comma-separated. airastraleeauempyréenneéternitéétherfeulumièremortombreprimordialetelluriqueterrevie |
q | string | Name search, case- and accent-insensitive. Best matches first. |
lang | string (défaut en) | Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.enfrall |
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (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ètre | Type | Description |
|---|---|---|
essence | string | Essence type(s), comma-separated. airastraleeauempyréenneéternitéétherfeulumièremortombreprimordialetelluriqueterrevie |
lang | string (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ètre | Type | Description |
|---|---|---|
id requis | string | |
lang | string (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ètre | Type | Description |
|---|---|---|
color | string | Colour(s), comma-separated. anyblackbluegreenmetaorangepurpleredwhiteyellow |
rarity | string | One or more rarities, comma-separated. legendaryrareuncommonvariablevery_rare |
temporary | boolean | true for gems whose effect is consumed. |
q | string | Name search, case- and accent-insensitive. Best matches first. |
lang | string (défaut en) | Language of the texts: en (default), fr, or all to get every text as an { "en", "fr" } object.enfrall |
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (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ètre | Type | Description |
|---|---|---|
color | string | Colour(s), comma-separated. anyblackbluegreenmetaorangepurpleredwhiteyellow |
rarity | string | One or more rarities, comma-separated. legendaryrareuncommonvariablevery_rare |
temporary | boolean | true for gems whose effect is consumed. |
lang | string (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ètre | Type | Description |
|---|---|---|
id requis | string | |
lang | string (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ètre | Type | Description |
|---|---|---|
lang | string (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ètre | Type | Description |
|---|---|---|
type | string | Audio type(s), comma-separated: music, ambience, sfx… |
genre | string | Theme(s), comma-separated, case-insensitive: Combat, Forest, Taverns and Inns… (see /audio/taxonomy). |
mood | string | Musical style(s), comma-separated — Orchestral, Celtic, Folk… — any of them matches. |
era | string | Era token(s), comma-separated. |
keyword | string | Keyword(s), comma-separated — any of them matches. |
composer | string | A composer id or slug. |
album | string | An album id or slug. |
pack | string | A pack id or slug. |
duration_min | number | Minimum duration in seconds. |
duration_max | number | Maximum duration in seconds. |
q | string | Text search in title, description and keywords. |
include_versions | boolean (défaut false) | true to list alternative versions as separate items (default: main tracks only). |
sort | string (défaut newest) | Order of the listing. newestoldesttitledurationrandom |
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (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ètre | Type | Description |
|---|---|---|
type | string | Audio type(s), comma-separated: music, ambience, sfx… |
genre | string | Theme(s), comma-separated, case-insensitive: Combat, Forest, Taverns and Inns… (see /audio/taxonomy). |
mood | string | Musical style(s), comma-separated — Orchestral, Celtic, Folk… — any of them matches. |
era | string | Era token(s), comma-separated. |
keyword | string | Keyword(s), comma-separated — any of them matches. |
composer | string | A composer id or slug. |
album | string | An album id or slug. |
pack | string | A pack id or slug. |
duration_min | number | Minimum duration in seconds. |
duration_max | number | Maximum duration in seconds. |
q | string | Text search in title, description and keywords. |
include_versions | boolean (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ètre | Type | Description |
|---|---|---|
id requis | string |
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ètre | Type | Description |
|---|---|---|
id requis | string | Id or slug. |
Essayer : GET /audio/composers/
GET/api/v1/audio/composers/{id}/tracks
A composer's tracks
| Paramètre | Type | Description |
|---|---|---|
id requis | string | |
type | string | Audio type(s), comma-separated: music, ambience, sfx… |
genre | string | Theme(s), comma-separated, case-insensitive: Combat, Forest, Taverns and Inns… (see /audio/taxonomy). |
mood | string | Musical style(s), comma-separated — Orchestral, Celtic, Folk… — any of them matches. |
era | string | Era token(s), comma-separated. |
keyword | string | Keyword(s), comma-separated — any of them matches. |
album | string | An album id or slug. |
pack | string | A pack id or slug. |
duration_min | number | Minimum duration in seconds. |
duration_max | number | Maximum duration in seconds. |
q | string | Text search in title, description and keywords. |
include_versions | boolean (défaut false) | true to list alternative versions as separate items (default: main tracks only). |
sort | string (défaut newest) | Order of the listing. newestoldesttitledurationrandom |
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (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ètre | Type | Description |
|---|---|---|
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (défaut 0) | Number of items to skip. |
Essayer : GET /audio/albums
GET/api/v1/audio/albums/{id}
One album
| Paramètre | Type | Description |
|---|---|---|
id requis | string | Id or slug. |
Essayer : GET /audio/albums/
GET/api/v1/audio/albums/{id}/tracks
An album's tracks — In album order.
| Paramètre | Type | Description |
|---|---|---|
id requis | string | |
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (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ètre | Type | Description |
|---|---|---|
limit | integer (défaut 50) | Page size (1–200, default 50). |
offset | integer (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ètre | Type | Description |
|---|---|---|
id requis | integer |
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ètre | Type | Description |
|---|---|---|
id requis | integer |
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ètre | Type | Description |
|---|---|---|
id requis | integer | |
lang | string (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ètre | Type | Description |
|---|---|---|
id requis | string | |
lang | string (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ètre | Type | Description |
|---|---|---|
url requis | string | The page URL. |
format | string | json |
maxwidth | integer | |
maxheight | integer |
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
urlde 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.