LIVING CHARACTERS & WORLDS,IN YOUR GAME.

One API for AI characters that remember, speak, and stay in character — and the worlds they live in. The same stack that powers Mirari, open to your game, app, or agent.

QUICKSTART

GET RUNNING IN THREE CALLS.

An illustrative preview of the REST API. Shapes may change before general availability — you'll get the current spec with your key.

SDK
01

Authenticate

Drop in your API key and point at the base URL. Every call is one bearer token away.

install + auth
C#
// Unity — add the Forerunner UPM package, then:
using Forerunner;
var fr = new ForerunnerClient("fk_live_8f2a…");
bool ok = await fr.HealthAsync();
Debug.Log(ok); // True
02

Create a character

Give it a name, a persona, and a voice. It returns with persistent memory, ready to talk.

Create a character with memory + voice
C#
var rin = await fr.Characters.CreateAsync(new CharacterSpec {
Name = "Rin",
Persona = "Sharp-tongued, loyal, bilingual scout.",
Voice = "mirari:rin",
Memory = MemoryMode.Persistent,
});
Debug.Log(rin.Id); // "char_8f2"
03

Send a message

Stream a reply in character — text and audio — while its memory updates itself. That's the whole loop.

Stream a reply, in character, with audio
C#
// stream a reply, in character, with audio
await foreach (var ev in fr.Characters.Chat("char_8f2", new ChatRequest {
Session = "player_42",
Say = "I'm back.",
})) {
if (ev.Text != null) subtitle.Append(ev.Text);
if (ev.Audio != null) audioSource.Stream(ev.Audio); // ~280ms first byte
}
04

Update memory & state

Write what just happened — a betrayal, a gift, a death — and patch game state or player facts. The character recalls it next session, unprompted.

game event → memory + state
C#
// write what just happened — recalled next session, unprompted
await fr.Characters.RememberAsync("char_8f2", new MemoryEvent {
Event = "Player spared the bandit chief.",
Weight = 0.8f,
Tags = new[] { "mercy", "quest:bandits" },
});
// patch game state + player facts
await fr.Characters.PatchStateAsync("char_8f2", new {
trust = +2,
location = "Riverwood",
knows = new { player_name = "Dovah" },
});

EMBODIED

IT SEES WHAT THE PLAYER SEES.

Open a perception stream and pipe the player's viewport to the character. It watches the game in real time, then speaks, reacts, and acts on what's actually in front of it — not a script, a witness.

wss · /v1/characters/:id/perceive
C#
// stream the player's view → the character sees the game
var eyes = fr.Characters.Perceive("char_8f2", fps: 4);
// push the camera's render target each frame
void Update() => eyes.Send(playerCamera.Capture());
eyes.OnReaction += r => {
// r.Sees "a dragon landing on the keep wall"
// r.Says "Get down — to the wall, now!"
npc.Perform(r); // r.Act "point", r.Emotion "alarm"
};
Live NPC

IN YOUR WORLD

A CHARACTER THAT LIVES IN THE GAME.

Drop one into your world and it remembers the player, talks back in its own voice, and stays in character — quest after quest.

PRICING

USAGE-BASED. NO SEAT TAX.

Pay for what your characters actually do — generation, voice, and memory, metered per use. Volume pricing for studios.

Indie

Usage-based from day one. Build and prototype for free; pay as your players arrive.

Studio

Volume rates, dedicated capacity, and SLAs for production traffic.

Enterprise

Private models, on-prem options, and bespoke voice rights. Custom terms.

PRIVATE BETA

GET EARLY ACCESS.

We're onboarding studios and builders in waves. Tell us what you're making and we'll get you a key.

REQUEST ACCESS

No credit card. Rolling invites. Full docs ship at api.forerunner.ai.