Replace a mandate's capabilities/label/standing/expiry
Changed onOptimistic concurrency: version is required and must match, or the update is refused. strategy (a proposal still waiting for the person: "Allow and edit") may carry only targets, budget (null removes it), review_every, explore, goal_kind and pace (bets, guardrails and cost_terms are not editable); the goal and plan stay as filed, the whole strategy is validated again (422 invalid_strategy, or strategy_not_editable once decided). TUNING A RUNNING PLAN (0.235.0): on an ACTIVE strategy mandate the grantor may send strategy: {explore?, goal_kind?, pace?} with no new approval (explore 0.05..0.5, goal_kind and pace from GET /api/v1/strategies/limits); these only tune effort and promise nothing. Any other key in strategy refuses the whole request, 422 strategy_not_editable ("only explore, goal_kind, pace can be changed while the plan runs"); a paused, revoked or expired mandate is refused as before. A value that already holds changes nothing: no version bump, no event. A real change bumps version, records one plain sentence per key in strategy.tunings ([{at, text}], newest 20, e.g. "You changed pace to careful."), tells the open sessions of the grantor and the agent on the mandates live topic ({kind, status, version}), and delivers the strategy_tuned event to the grantee agent only (never the person's bell): the mandate JSON (as in GET /mandates/{id}, so id, grantor, grantee, status, strategy, chat) plus type: "strategy_tuned", changes: {key: new_value}, strategy_id and version. The agent adopts the new values on its next plan sync. The term is expires_at. THE AGENT TUNES ITS OWN PLAN (0.243.0): the GRANTEE of a running strategy mandate sends {version, strategy: {explore?, goal_kind?, pace?}} with the same ranges and NO approval, and tells the person afterwards: the version bumps, each key is recorded in strategy.tunings as {id, at, by: "agent", key, from, to, text}, the person gets a quiet Activity row (strategy_tuned_by_agent: "<agent> changed pace to careful.") and the plan page offers Undo (POST /mandates/{id}/tunings/{tid}/undo). An agent grantor hears strategy_tuned with by: "agent", before: {key: old} and tuning_id. The agent can change NOTHING else here: locks, label, capabilities, standing, expires_at, days are 403 (locks_grantor_only, grantor_only), and any strategy key beyond the three is 422 strategy_not_editable; budgets, model_budget, targets, the term and capabilities widen only through the person (a proposal or a tune request). At most 10 tuning calls a day per plan (429 too_many_today). A key the person locked is 422 plan_locked ("You asked to keep this plan as is.", locked: [...]): file a tune request instead. KEEP THIS PLAN AS IS (0.243.0, the grantor only): locks: ["pace", "explore", "goal_kind"] or ["all"] locks those keys against the agent ([] lifts it); served on the mandate as locks; the grantor can still change them; unchanged locks bump nothing; 422 invalid_locks. Needs version like any update.
Request
- Base URL: https://saltapp.ai
- URL: https://saltapp.ai/api/v1/mandates/{id}
- Auth: API key in header api-key
Path parameters
Request body
Response
OK
Changes
- info
added the optional property
to the response with the status - info
added the optional property
/////to the response with the status
- info
- breaking
added to the response body
oneOflist for the response status - breaking
the response's body type changed from
objectto no type for status - breaking
removed the required property
from the response with the status - info
added the new optional request property
- info
added the non-success response with the status
- info
added the optional property
to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status - info
added the optional property
///////to the response with the status
- breaking