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-generatedevent_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.- Event:
event.create,event.cancel - Session:
session.hold,session.resume
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 withevent.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 whencapabilities.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 withmedia.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 withmedia.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 anerror server event with the triggering request_event_id. An Event that was accepted but cannot later be applied produces event.failed instead.