Skip to main content
Client events are JSON messages sent on the Streaming World WSS control connection. Use event.create to guide what happens next, event.cancel to cancel guidance that has not yet been applied, and Session events to control whether the world advances.
One open-ended Event. Keep dialogue, behavior, reactions, movement, ambience, and presentation together in natural language. The API does not expose separate speakers, lines, actions, beats, scenes, shots, tracks, or state patches.

Common event envelope

Every client message has a client-generated event_id and a type. A successful WebSocket write only means the message left your process. Wait for the corresponding server event before treating the request as accepted or effective.
string
A non-empty id generated by the client and unique within the Session. Reuse it when retrying the same message after an uncertain delivery result.
string
One of event.create, event.cancel, session.hold, or session.resume.
Two different ids. The envelope event_id identifies this client message. The world_event_id returned by event.accepted identifies the open-ended Event inside the world. Use the latter in later lifecycle messages and cancellation requests.
Idempotent retries. Repeating the same event_id with the same payload does not apply the request twice and returns the original disposition. Reusing an id with a different payload returns idempotency_conflict.
Forward compatibility. Ignore server event types and fields you do not recognize. Unknown client event types and unsupported enum values return an error event.

World Events

event.create

Creates one open-ended Event that steers the unpublished future of the running world. Its ordered content blocks may select named References and describe a multi-character or environmental development as one coherent intent. The entire Event is validated atomically. The server first responds with event.accepted and a world_event_id. Later event.applied reports when the first influenced media enters the outgoing path. An accepted Event is not necessarily visible yet, and an applied Event is not semantically complete.
string
Client-generated message id used for correlation and idempotent retries.
"event.create"
Must be event.create.
object
The open-ended guidance to apply to the world.
No queue or rollback. There is no enqueue or after-current mode because an open-ended Event has no reliable completion boundary. Steer does not retract media that is already committed, published, or buffered, and it does not promise a frame-accurate cut.
event.create

event.cancel

Cancels an accepted world Event before it becomes effective. Send this event only when capabilities.event_cancel is true. The server confirms success with event.cancelled.
Cancellation is not undo. After event.applied, the Event has already entered media history and cannot be cancelled. Send a newer Event to redirect what happens next.
string
Client-generated message id used for correlation and idempotent retries.
"event.cancel"
Must be event.cancel.
string
The domain Event id returned by event.accepted. If it has already been applied when this request is processed, the server returns event_not_cancelable.
event.cancel

Session Events

session.hold

Requests that the world stop advancing at a safe media boundary while preserving the Session and its continuity. The server reports the effective result with media.state.updated where state is held and request_event_id matches this client message. A hold may allow already committed media to finish. It retains the last available visual output and does not erase prior Event influence.
string
Client-generated message id used for correlation and idempotent retries.
"session.hold"
Must be session.hold.
session.hold

session.resume

Requests that a held Session continue from its existing continuity. The server reports the effective result with media.state.updated where state is running and request_event_id matches this client message. Creating a new world Event while held also requests an implicit resume.
string
Client-generated message id used for correlation and idempotent retries.
"session.resume"
Must be session.resume.
session.resume

Request errors

A request rejected before admission produces an error server event with the triggering request_event_id. An Event that was accepted but cannot later be applied produces event.failed instead.