---
title: "Create or start workspaces workspaceID changesets"
method: POST
path: "/v1/workspaces/{workspaceID}/changesets"
---

# Create or start workspaces workspaceID changesets

`POST /v1/workspaces/{workspaceID}/changesets`

## Request

- Base URL: `https://api.plori.ai`
- URL: `https://api.plori.ai/v1/workspaces/{workspaceID}/changesets`
- Auth: HTTP bearer

Candidate Workspace API. Access depends on the owner cohort and, for Files routes, the Files gate. Check operation state and retained data before assuming a write is durable.

## Path parameters

- `workspaceID` string, uuid, required

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `base_revision` string, uuid, required
  - `incoming_revision` string, uuid, required
  - `expected_current_revision` string, uuid, required
  - `idempotency_key` string: Required if Idempotency-Key header is absent. Nonempty header takes precedence.
  - `incoming_save_operation_id` string, uuid: Save operation for the selected proposal. Preserve this ID when the proposal reuses a revision and when repeating a comparison.

## Response `202`

See the response body and resource state; asynchronous work requires polling.

- WorkspaceChangeset
  - `id` string, uuid, required
  - `workspace_id` string, uuid, required
  - `state` string, required
  - `phase` string, required
  - `source_working_copy_id` string, uuid, required
  - `base_revision` string, uuid, required
  - `incoming_revision` string, uuid, required
  - `requested_expected_revision` string, uuid, required
  - `comparison_current_revision` string, uuid
  - `result_revision` string, uuid
  - `integration_working_copy_id` string, uuid
  - `validation_evidence` string[]
  - `comparison` WorkspaceChangesetComparison
    - `changeset_id` string, uuid, required
    - `integration_copy_id` string, uuid, required
    - `changes` object[], required
      - `path` string, required
      - `kind` string, required
      - `from` string
    - `conflicts` object[], required
      - `path` string, required
      - `kind` string, required
      - `base` WorkspaceChangesetVariant, required
        - `revision_id` string, uuid, required
        - `path` string, required
        - `kind` string, required
        - `mode` integer, required
        - `sha256` string
      - `current` WorkspaceChangesetVariant, required
        - `revision_id` string, uuid, required
        - `path` string, required
        - `kind` string, required
        - `mode` integer, required
        - `sha256` string
      - `incoming` WorkspaceChangesetVariant, required
        - `revision_id` string, uuid, required
        - `path` string, required
        - `kind` string, required
        - `mode` integer, required
        - `sha256` string
    - `integration_tree_sha256` string, required
    - `no_change` boolean, required
  - `integration_write_generation` integer, required
  - `root_write_generation` integer, required
  - `resolution` WorkspaceChangesetResolveRecord
    - `expected_write_generation` integer, required
    - `resolutions` WorkspaceChangesetResolution[], required
      - union: Exactly one outcome: a positive expected_etag with deleted false, or deleted true with expected_etag absent or zero.
        - object
          - `path` string, required
          - `expected_etag` integer, required
          - `deleted` false
          - `summary` string, required
          - `retained_variants` string[]
        - object
          - `path` string, required
          - `expected_etag` union
            - integer
            - string
          - `deleted` true, required
          - `summary` string, required
          - `retained_variants` string[]
    - `validation_evidence` string[], required
  - `incoming_save_operation_id` string, uuid: Save operation for the selected proposal.
  - `auto_accept` 'pending' | 'accepted' | 'abandoned': Present only for a changeset whose comparison with the Workspace was clean and changed files. pending: Plori may still accept it. accepted: Plori accepted it. abandoned: Plori stopped and will not accept it.

## Other responses

- `400`: Malformed request.
- `401`: Missing or invalid credential.
- `404`: No such resource.
- `409`: Conflict, active operation, or current-revision mismatch. A deleting Workspace returns code workspace_deleting.
- `422`: The idempotency key was reused for a different request.
- `503`: Workspace storage is starting or unavailable; inspect Retry-After.

---

[API](https://skmtc.dev/plori/apis/plori-rest-api.md) · [All operations](https://skmtc.dev/plori/apis/plori-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/plori/apis/plori-rest-api/revisions/15c4f9260dff?raw)
