---
title: "Submit Suggested Changes"
method: POST
path: "/agent/cli/submit_suggested_changes"
---

# Submit Suggested Changes

`POST /agent/cli/submit_suggested_changes`

## Request

- Base URL: `https://app.runconverge.com/api`
- URL: `https://app.runconverge.com/api/agent/cli/submit_suggested_changes`
- Auth: HTTP bearer

Persist a plan emitted by the agent.

The body is validated by hand so a rejected plan is logged as an error
(the agent produced something it cannot ship) before the usual 422
envelope goes back.

Each call creates a new plan and supersedes the ACTIVE plan in the same
supersede scope, of which there is at most one:

* In case of a loop run, the scope is the loop, so a later fire
  replaces what an earlier fire left pending (even if the plan is in a
  different session).
* In case of a manual chat, the scope is that session alone — it can never
  withdraw a loop's pending plan.

`version` does not follow the scope: it counts resubmissions within one
session. See `plan.repository.create_plan`.

The plan id we return is server-generated and stable; the agent's own
`Plan.id` is intentionally not used as an idempotency key (the agent isn't
trusted to mint stable ids, and a duplicate-content row is harmless).

## Request body

- object

## Response `200`

Successful Response

- SubmitSuggestedChangesResponse: What `./converge submit-plan` prints back to the agent. The agent surfaces `plan_id` as the input to its `submit_suggested_changes` custom tool; the FE fetches the persisted plan body via `GET /api/plans/{plan_id}`.
  - `plan_id` integer, required
  - `version` integer, required
  - `superseded_plan_id` integer, nullable

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-28** `7c3270848bed`: 4 warning
  - removed the request property `estimated_impact`
  - removed the request property `id`
  - removed the request property `suggestions`
  - removed the request property `title`
- **2026-09-09** `e43154ca24ea`: 5 info
  - added the new optional request property `suggestions/items/changes/items/oneOf[subschema #10: DuplicateAdsetChange -> subschema #11: DuplicateAdsetChange]/landing_url`
  - added the new optional request property `suggestions/items/changes/items/oneOf[subschema #9: DuplicateAdChange -> subschema #10: DuplicateAdChange]/landing_url`
  - added `landing_url` discriminator mapping keys to the `suggestions/items/changes/items/` request property
  - added the new `landing-url` enum value to the request property `suggestions/items/action`
  - …1 more

[Operation history](https://skmtc.dev/runconverge/apis/runconverge-api/changes/agent/cli/submit_suggested_changes/post.md)

---

[API](https://skmtc.dev/runconverge/apis/runconverge-api.md) - [All operations](https://skmtc.dev/runconverge/apis/runconverge-api/llms.txt) - [OpenAPI document](https://skmtc.dev/runconverge/apis/runconverge-api/revisions/f723e951cc0b?raw)
