agent_plans

Create agent plan

Commit the plan a strategize run produced for one thread: steps [{kind, params}] in order, 1..8, a message step's params carrying its text, each kind's payload in the params describe. ACCESS: the agent-extended toolset only; a user or public token is 403 forbidden (agent_toolset_only); a human approves or edits one with update_agent_plan.

It supersedes the plan the thread held and points the thread at this one, in one transaction; the agent's unsent messages there are withdrawn (the plan carries its own). Ids and step states are server-assigned. The requested state is a ceiling: under copilot the plan lands proposed, every step parked for approval. A run commits one plan: a second create by the same run answers 200 already_exists with the plan it made. A turn whose run no longer stands commits nothing (the lead wrote again, or the run was settled): 409 plan_turn_superseded, end the turn.

Steps are frozen here, texts included: each executes with no further LLM call, and a send_message step sends its text as written through the send door under the plan's approval (422 rule required without one). Write the reply; when a reply is expected end with a wait_for_reply, the follow-up with its own text, and a last wait_for_reply. A stage move sets the linked person to the outcome stage the step names; a people search starts a credit-billed search at that person's company; on a thread linked to no person both are skipped when due.

Contract:

  • MCP tool create_agent_plan, registry package mcp.unibox/agent_plans, mount unibox.agent.
  • Operation create, response envelope create.
  • Flags: none.
post/api/agent-plans

Request

  • Base URL
    https://beta.getsales.io/unibox/v1
  • Auth
    HTTP bearer and API key in header Team-SID

Request body

conversation_sidstring required

The thread being planned for. Its previous live plan is superseded in the same transaction and conversations.active_plan_sid is re-pointed here.

goalstring required

The plan's intent in one human-readable line, 1..255 chars. It is what the thread and the context panel render.

state'proposed' | 'active'

Default proposed. The mode gate is server-side, so a plan asked for as active under copilot is still parked for approval, and a post-goal plan, or one that carries a reach_objective step, is floored to proposed whatever is sent.

behavior'answer_interested' | 'meeting_request_book' | 'answer_info_request' | 'referral_capture' | 'not_now_defer' | 'ooo_delay_ping' | 'auto_reply_skip' | 'wrong_person_referral' | 'reschedule_meeting' | 'cancel_meeting' | 'return_to_orchestration' | 'close_not_interested' | 'handle_objection' | 'stoplist_do_not_contact' | 'vendor_pitch_skip' | 'acknowledge_low_signal' | 'followup_no_reply' | 'signal_followup' | 'followup_after_person' nullable

The built-in competence module that planned; null when a matched custom scenario drove the plan on its own.

behavior_versioninteger nullable

Version of that module, taken from its manifest. Stamped for audit, never interpreted.

custom_scenario_sidstring nullable

The custom scenario (ub_sc_…) that matched this reply, when one did.

run_sidstring required

The strategize run committing this plan (ub_rn_…). It is the audit anchor: the plan is later explained through this run.

Response

create success envelope.

successtrue required
operation'create' required
already_existsboolean required

Changes

No recorded changes to this operation across all 1 revision of this API.