---
title: "POST /sandbox-clones/{cloneId}/cancel"
method: POST
path: "/sandbox-clones/{cloneId}/cancel"
tags: ["Sandboxes"]
---

# POST /sandbox-clones/{cloneId}/cancel

`POST /sandbox-clones/{cloneId}/cancel`

## Request

- Base URL: `https://api.greentally.ai/v1`
- URL: `https://api.greentally.ai/v1/sandbox-clones/{cloneId}/cancel`
- Auth: HTTP bearer

Cancel a running clone. It stops at its next unit and its sandbox is archived; once the copy is finishing (cancellable false) the cancel is recorded but the copy completes. A cancelled clone is returned as it is.

## Path parameters

- `cloneId` string, required

## Response `200`

OK

- SandboxCloneResponse
  - `data` SandboxClone, required
    - `cancelRequested` boolean, required
    - `cancellable` boolean, required
    - `copyAccess` boolean, required
    - `copyDashboard` boolean, required
    - `createdAt` string, date-time, required
    - `error` string
    - `errorCode` 'CLONE_TOO_LARGE' | 'CLONE_SOURCE_NOT_LIVE' | 'CLONE_SOURCE_CHANGED' | 'CLONE_FACTOR_NOT_COPYABLE' | 'CLONE_SANDBOX_GONE' | 'CLONE_NOT_FOUND' | 'SANDBOX_CLONE_DISABLED' | 'CANCELLED' | 'RETRIES_EXHAUSTED' | 'INTERRUPTED' | 'DISPATCH_FAILED' | 'INVALID_CHECKPOINT' | 'UNKNOWN_KIND': Why the copy failed or ended: the clone's own CLONE_TOO_LARGE (the months grew past the limit after the start), CLONE_SOURCE_NOT_LIVE (the source was archived, made a sandbox or moved to another tenant), CLONE_SOURCE_CHANGED (a site, entity or upload was added to the source after its phase), CLONE_FACTOR_NOT_COPYABLE (a row references another organization's private factor), CLONE_SANDBOX_GONE (the sandbox was no longer being provisioned when the copy finished), CLONE_NOT_FOUND (the clone's record was deleted while its job ran) and SANDBOX_CLONE_DISABLED, or the document jobs' CANCELLED, RETRIES_EXHAUSTED, INTERRUPTED, DISPATCH_FAILED, INVALID_CHECKPOINT (the job's stored progress could not be read) and UNKNOWN_KIND (the process that ran the job had no sandbox clone handler).
    - `finishedAt` string, date-time
    - `fromMonth` string, required
    - `id` string, required
    - `progress` SandboxCloneProgress
      - `done` integer, required
      - `message` string
      - `phase` 'prepare' | 'reference' | 'uploads' | 'records' | 'analysis' | 'dashboard' | 'finalize' | 'done', required
      - `total` integer, required
    - `rawRowCount` integer, required
    - `result` SandboxCloneResult
      - `analysisRows` integer, required
      - `dashboardCopied` boolean, required
      - `entities` integer, required
      - `factorEntries` integer, required
      - `missingOriginals` integer, required
      - `rawRows` integer, required
      - `sites` integer, required
      - `sourceRecords` integer, required
      - `suppliers` integer, required
      - `uploads` integer, required
    - `sandboxName` string, required
    - `sandboxOrganizationId` string, required
    - `siteIds` string[], required
    - `sourceOrganizationId` string, required
    - `sourceOrganizationName` string, required
    - `status` 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled', required
    - `toMonth` string, required

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: CLONE_FINISHED (the clone succeeded or failed).

## Changes

- **2026-10-09** `840a458f7a4d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/greentally/apis/esgai-api/changes/sandbox-clones/:cloneId/cancel/post.md)

---

[API](https://skmtc.dev/greentally/apis/esgai-api.md) · [All operations](https://skmtc.dev/greentally/apis/esgai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/greentally/apis/esgai-api/revisions/7eab940f1dd0?raw)
