Mint a fresh test-type v2 conversation bound to an agent or team
conv_* replacement for the retired POST /v1/runtime/test-chat.
Mints a session_type="test" Conversation on the api channel with
a throwaway end_user_id (no identity-graph node — the test
discriminator suppresses memory sync, summary generation, and identity
writes). The dashboard “Try this …” panel then drives turns via
POST /v2/conversations/{id}/turns/stream passing the returned id.
Binds to exactly one of a single Assistant (agent_id) or a Team
(team_id + optional team_revision_id); the request schema enforces
that XOR. Either way the bound entity is resolved + org-scoped BEFORE the
conversation is created (get_agent_for_runtime / get_team_for_org
both raise 404 for a missing or cross-org id), so a bare test row can never
bind to another org’s agent/team.
For a team, team_revision_id defaults to the team’s
active_revision_id when omitted; bootstrap_team_conversation resolves
the roster and pins bound_revisions at bind. No first greeting: the
legacy endpoint emitted none, so there is nothing to replicate here.
Authorizations
Body
Mint a fresh session_type="test" chat session for the dashboard.
The agent-detail Test chat panel uses this to avoid leaning on the
identity graph: every "Reset" or "End session" mints a new throwaway
end_user_id + ConversationSession row so dev-side Neo4j churn
(wipes, merges, deletes) can never strand the panel with a stale uid.
Mirrors POST /v1/voice/web-call for text/API.
Bind to exactly one of a single Assistant (agent_id) or a Team
(team_id + optional team_revision_id) — the same single-XOR-team
invariant the runtime conversations table enforces. When team_id is
given without team_revision_id, the handler resolves the team's active
revision.