Skip to main content
KiteFrost gives your Foundry NPCs a voice: right-click an Actor, type what the players say, and the NPC answers in character in chat. There are three ways to wire it up. Most GMs only need the first; module and macro authors will want the second.
Alpha access runs on staging. Use https://api-staging.kitefrost.ai as the API URL until your invite says otherwise. The module is a testing build during the alpha.

Before you start: an API key and your project

  1. Sign in to your KiteFrost dashboard and open your project (or create one: Projects -> New Project).
  2. Copy the project ID from the address bar - the part after /projects/ (for example https://.../projects/my-campaign -> my-campaign).
  3. Open the project’s API Keys page -> New API Key. Choose Secret (sk_) and Full Access, give it a name such as foundry, then Create Key.
  4. Copy the key right away - it is shown only once. Treat it like a password.
The key is stored in your browser only (Foundry’s client setting), never in the world data your players can see. The project’s API Keys page shows when each key was last used - handy to confirm Foundry is really using the key you made.

1. The module, point and click

Foundry v13 or v14, logged in as the Gamemaster.
1

Install

Foundry setup screen -> Add-on Modules -> Install Module. Paste into Manifest URL:
Click Install. It appears as KiteFrost (Testing). Foundry offers each new testing build as a normal module update.
2

Enable it in your world

Launch your world -> Game Settings (gear icon, right sidebar) -> Manage Modules -> tick KiteFrost (Testing) -> Save Module Settings.
3

Configure

Game Settings -> Configure Settings -> KiteFrost:
  • API URL: https://api-staging.kitefrost.ai
  • API Key: the sk_... key
  • Project ID: from the address bar (step 2 above)
Save Changes.
4

Talk to an NPC

Actors tab -> right-click an Actor -> AI: Generate Dialogue. Type what the player says, optionally the situation and tone, and submit. The reply is posted to chat as that NPC, with its mood and suggested follow-ups. Use Report Issue on the message if a reply is off.
Give an NPC a personality. Anything stored on the Actor in the kitefrost.personality flag is sent with every request (run once, as a macro):

2. The module’s scripting API (macros and modules)

With the module installed and configured as above, everything the menu does is available from code at game.modules.get("kitefrost").api.
Every call rejects on a problem - wrap it in try / catch. React to every reply - from the menu or the API:
Example - a greeting for every selected token:

3. Direct REST or the KiteFrost SDKs

Skip the module and call the API yourself. From a Foundry macro (browser) - the NPC dialogue endpoint accepts calls from any site, so plain fetch works:
In a browser only the NPC dialogue and issue-report endpoints can be called from another site. Everything else (projects, NPCs, quests, sessions, …) is available from Node.js or a server - a companion script, a bot, or a build step - not from a Foundry page. A macro’s text is visible to anyone who can open it: never paste a key into a macro you share.
From Node.js - the TypeScript SDK (npm install @kitefrost/ttrpg-gm@alpha):
From Python (pip install --pre kitefrost-ttrpg-gm):
See TypeScript SDK and Python SDK for the full client, and the API reference for every endpoint.

Troubleshooting