Sign in

Interactive API reference and live demo. You can also open it in a new tab.

Quick start

Replace YOUR_KEY and CROWD_ID with real values.

JavaScript (fetch)

const res = await fetch('https://your-host/v1/crowd/CROWD_ID', {
  headers: { 'Authorization': 'Bearer YOUR_KEY' }
});
const data = await res.json();
console.log(data.characters.length, 'characters');
// data.assets.skeleton_glb -- load this GLB once
// data.characters[]        -- per-character part assignments + transforms

curl

curl https://your-host/v1/crowd/CROWD_ID \
  -H "Authorization: Bearer YOUR_KEY"

Python (requests)

import requests

r = requests.get(
    'https://your-host/v1/crowd/CROWD_ID',
    headers={'Authorization': 'Bearer YOUR_KEY'}
)
data = r.json()
print(len(data['characters']), 'characters')
skeleton_url = data['assets']['skeleton_glb']

Response shape

The full response schema is in the Docs tab. Key fields:

{
  "crowd_id": "cr_xxxxxxxx",
  "name": "My Scene",
  "recipe": { /* layout, size, weights, obstacles... */ },
  "characters": [
    { "body": "M_Terracotta_Infantry_Soldier",
      "face": "M_Chinese_Face_01",
      "hair": "Ming_Warrior_Crown",
      "position": [x, y, z],
      "rotation": radians,
      "scale": 1.0 }
  ],
  "assets": {
    "skeleton_glb": "https://...",
    "animations": { "idle": "https://...", "walk": "https://..." }
  }
}

MCP server config

Add this to your claude_desktop_config.json (or equivalent MCP config file):

{
  "mcpServers": {
    "genji": {
      "command": "npx",
      "args": ["-y", "@genji/mcp-server"],
      "env": {
        "GENJI_API_URL": "https://your-host",
        "GENJI_API_KEY": "gk_live_xxxxxxxxxxxx"
      }
    }
  }
}

Available tools

genji_get_crowd
Load a saved crowd by ID. Returns recipe, character list, and asset URLs.
genji_list_crowds
List all crowds saved to the authenticated account.
genji_save_crowd
Save or update a crowd recipe by name. Returns a crowd_id.