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.
Authenticate
Drop in your API key and point at the base URL. Every call is one bearer token away.
// Unity — add the Forerunner UPM package, then:using Forerunner; var fr = new ForerunnerClient("fk_live_8f2a…");bool ok = await fr.HealthAsync();Debug.Log(ok); // TrueCreate a character
Give it a name, a persona, and a voice. It returns with persistent memory, ready to talk.
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"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 audioawait 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}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.
// write what just happened — recalled next session, unpromptedawait 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 factsawait 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.
// stream the player's view → the character sees the gamevar eyes = fr.Characters.Perceive("char_8f2", fps: 4); // push the camera's render target each framevoid 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"};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.


