Skip to main content
Apollo agents run on one of two runtime generations. Runtime v2 is the current one — every other page in these docs describes it. Agents created before the runtime v2 rollout run on runtime v1, and a handful of things work differently for them. This page collects all of those differences so the main pages don’t have to.

Which runtime is my agent on?

As a rule of thumb, agents created before August 1 2026 run on runtime v1, and agents created on or after that date run on runtime v2. When you’d rather not rely on a date, two things tell you for sure: The thread id is the quickest check — send one message and look at the thread_id that comes back.

What’s different

Sending is identical on both runtimes: sendMessage, streamMessage, rerun, and the channel openers route automatically based on the agent behind your key, and you never pick a runtime when sending. The differences surface in a few places only:

Reading runtime v1 threads

A thread lives on the runtime that created it, and thread reads name that runtime with runtime_version. Runtime v1 is the default — so reads of runtime v1 threads take no selector at all, while reads of runtime v2 threads must carry one:
The rule is on the major version: a 1.x value (or none) selects runtime v1; any value outside the 1.x family selects runtime v2, and it doesn’t have to match the thread’s exact build. Asking the wrong runtime returns 404 — the most common symptom is a UUID thread that “disappears” when read without runtime_version. The same applies on the management client and the REST API:

Traces

Runtime v1 agents expose the reasoning trace behind every interaction — what the agent understood, which rules fired, what it decided:
threadTrace is paginated — pass page[size], page[after] / page[before], and sort_by / sort_order in an optional second argument. On a runtime v1 WebSocket session opened with include_trace=true, the final message envelope also embeds the trace as data.trace_info. Trace support for runtime v2 is coming; until then these calls apply to runtime v1 agents only.

WebSocket sessions

Runtime v1 agents accept a bidirectional WebSocket session through client.connect() — typed envelopes, automatic reconnection, and seq-based resume. The full protocol is on the WebSocket page (SDK) and API → WebSocket (wire format). Runtime v2 agents don’t open sessions: connect() answers with an error envelope explaining the session is SSE-only. They stream over HTTP with streamMessage instead — one call per turn, the same token-by-token reply, resumable with Last-Event-ID, and nothing to keep alive. The frames map almost one to one:

Moving an integration to runtime v2

When the agent behind your key moves to runtime v2, sends keep working untouched. Work through this list for everything else:
  • Thread reads — add runtime_version (the build your agent runs on, e.g. '0.8.0') to listMessages, threads.getThread, getThreadMessages, and updateThread; scope listThreads with runtime_version plus agent_id or user_id.
  • Thread ids — stop validating them as 24-character hex ids; runtime v2 ids are UUIDs.
  • Streaming — replace connect() + sendMessage frames with streamMessage, drop agent_id from the request, and resume with Last-Event-ID instead of a resume frame.
  • Follow-up suggestions — handle the new suggestions frame (data.followup_suggestions, with the thread_id and interaction_id it belongs to) instead of reading them off the message.
  • Traces — guard threadTrace / interactionTrace / getThreadTrace / getInteractionTrace calls until runtime v2 trace support lands.
Still importing ApolloClient from @aui.io/aui-client 1.x (the ia-controller client)? Upgrade to v3 first — the SDK upgrade guide maps every call — then come back to this page for the runtime differences.