Create or replace a conversation route
Create a conversation route from its flat parameters — an UPSERT, so this is the create path AND the edit path for a route of that name.
execution_key is the api-key identity the turn runs AS; the caller must be allowed
to delegate it and it must be usable by a tokenless fire, both decided BEFORE the write
so a refusal leaves any existing row untouched. agent_name must merely EXIST — the
key’s live grants bound the turn at fire. A channel row’s our_identity is stored
canonicalized and must not already be routed on that channel. An api row’s
callback_secret is minted here and returned ONCE. Returns {"created", "route_name", "route", "callback_secret"}.
Authorizations
Path Parameters
Body
The client-facing create/edit body for a conversation route: the fields a caller supplies.
Binds an agent_name to an execution_key the turn runs AS (bound with
pass-role at create). api rows carry an https callback_url; channel rows
carry the registry channel plus the our_identity the medium is texted at (N
rows may share a channel, each its own identity). The server-derived
callback_secret and execution_key_fingerprint are deliberately absent;
:class:ConversationRoute is this shape plus those. Frozen.
1api, channel The api-key user_id the turn runs AS; its live stored grants authorize the agent run and every tool call the turn makes.
1Response
Success.

