> ## Documentation Index
> Fetch the complete documentation index at: https://opentrain.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Submit Changeset

> Store a changeset as a proposal for human review instead of applying it.

Stores a changeset as a `SUBMITTED` proposal for review instead of applying it — the write path for agents without direct-write authority. The proposal is validated on submission; an invalid one returns `409` with structured conflicts and is not stored.

**Requirements:** `instructions:propose` + workspace `EDITOR` or `OWNER` access.

## Request

The shared changeset body (see [validate](/docs/developers/api-reference/instructions/validate-changeset)). Supports the `Idempotency-Key` header — the replay check runs **before** planning, so replays are cheap and exact.

## Response

Returns `201` when stored, `409` when validation failed.

<ResponseField name="changeset" type="object | null">
  The stored record: `{id, workspaceId, status: "SUBMITTED", description, authorKind, operationCount, createdAt, decidedAt, decisionNote, appliedManualRevisions}`.
</ResponseField>

<ResponseField name="conflicts" type="object[]">
  Structured validation conflicts when rejected at submission.
</ResponseField>

<ResponseField name="reviewUrl" type="string | null">
  In-app review link for human reviewers.
</ResponseField>
