{
  "doc": {
    "id": "cloud/features/smart-orchestration/run-cancellation-api",
    "title": "Cancel a run via API in Cypress Cloud",
    "description": "Cancel a Cypress Cloud run programmatically with the Run Cancellation API, using your project ID and record key, without needing the Cypress Cloud dashboard.",
    "section": "cloud",
    "source_path": "/llm/markdown/cloud/features/smart-orchestration/run-cancellation-api.md",
    "version": "55944c28ec019cc8496c1abe8ea6f77b3bea443b",
    "updated_at": "2026-09-15T11:51:53.604Z",
    "headings": [
      {
        "id": "cloud/features/smart-orchestration/run-cancellation-api#run-cancellation-api",
        "text": "Run Cancellation API",
        "level": 1
      },
      {
        "id": "cloud/features/smart-orchestration/run-cancellation-api#why-use-the-run-cancellation-api",
        "text": "Why use the Run Cancellation API",
        "level": 2
      },
      {
        "id": "cloud/features/smart-orchestration/run-cancellation-api#endpoint",
        "text": "Endpoint",
        "level": 2
      },
      {
        "id": "cloud/features/smart-orchestration/run-cancellation-api#request-body",
        "text": "Request body",
        "level": 2
      },
      {
        "id": "cloud/features/smart-orchestration/run-cancellation-api#example-fetch",
        "text": "Example: fetch",
        "level": 3
      },
      {
        "id": "cloud/features/smart-orchestration/run-cancellation-api#example-curl",
        "text": "Example: curl",
        "level": 3
      },
      {
        "id": "cloud/features/smart-orchestration/run-cancellation-api#finding-the-run-url-or-run-number",
        "text": "Finding the run URL or run number",
        "level": 2
      },
      {
        "id": "cloud/features/smart-orchestration/run-cancellation-api#responses",
        "text": "Responses",
        "level": 2
      },
      {
        "id": "cloud/features/smart-orchestration/run-cancellation-api#see-also",
        "text": "See also",
        "level": 2
      }
    ]
  },
  "content": {
    "type": "root",
    "children": [
      {
        "type": "heading",
        "depth": 1,
        "children": [
          {
            "type": "text",
            "value": "Run Cancellation API"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "This API is experimental. Breaking changes are unlikely, but may be made if necessary."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "A run can be canceled manually by opening Cypress Cloud and clicking Cancel on the run, or configuring "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/features/smart-orchestration/run-cancellation.md",
            "children": [
              {
                "type": "text",
                "value": "Auto Cancellation"
              }
            ]
          },
          {
            "type": "text",
            "value": " to stop a run automatically once failures cross a threshold."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Neither helps when the decision to stop a run is made somewhere else entirely, for example:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "A deployment pipeline that cancels in-flight test runs for a commit that has already been superseded by a newer push."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "A separate CI job or orchestrator that determines the tests are no longer needed and frees up CI machines immediately."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "An internal tool that lets a developer cancel a run without needing Cypress Cloud dashboard access."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "In these cases, your CI process will cancel the jobs that are running Cypress, and the Cypress Cloud run will be left in an in-progress state, awaiting further communication from your CI, until your Project's configured "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/account-management/projects.md#Run-Timeout",
            "children": [
              {
                "type": "text",
                "value": "Run Timeout"
              }
            ]
          },
          {
            "type": "text",
            "value": " expires."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "Why use the Run Cancellation API"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "The Run Cancellation API lets you cancel a run with a single authenticated HTTP request, using the same "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/account-management/projects.md#Project-ID",
            "children": [
              {
                "type": "text",
                "value": "project ID"
              }
            ]
          },
          {
            "type": "text",
            "value": " and "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/account-management/projects.md#Record-key",
            "children": [
              {
                "type": "text",
                "value": "record key"
              }
            ]
          },
          {
            "type": "text",
            "value": " credentials you already use to "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/get-started/setup.md#Setup",
            "children": [
              {
                "type": "text",
                "value": "record the run"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Canceling through the API has the same effect as canceling manually from the dashboard: the run is marked Canceled, "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/integrations/webhooks.md",
            "children": [
              {
                "type": "text",
                "value": "`run.completed` webhooks"
              }
            ]
          },
          {
            "type": "text",
            "value": " fire, and any in-progress `cypress run --record` calls for the run exit with an error. See "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/features/recorded-runs.md#What-happens-when-a-run-is-canceled",
            "children": [
              {
                "type": "text",
                "value": "What happens when a run is canceled?"
              }
            ]
          },
          {
            "type": "text",
            "value": " for the full list of effects."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "This is especially useful when:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "You want to use "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/features/smart-orchestration/rerun-optimization.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "Re-run optimization"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " to execute only the tests that did not pass in a previously canceled run."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "You want to trigger "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/integrations/webhooks.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "`run.completed` webhooks"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " in a timely manner after your CI has stopped."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "You want any other end-of-run integrations like "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/integrations/github.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "GitHub"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " or "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/integrations/slack.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "Slack"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " to happen at the moment of the CI cancellation, not after the Run Timeout expires."
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "You want Cypress "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/integrations/cloud-mcp.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "Cloud MCP"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " and "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/integrations/cloud-cli.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "CLI"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " to reflect the intentional canceled state immediately when working with results, instead of a partial \"timing out\" state."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress Run exit code in CI"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cancellation of a run does not change its exit code. Any `cypress run --record` process that's still executing specs for that run exits non-zero (`1`), the same as it would if tests had actually failed."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Cypress prints `Exiting with non-zero exit code because the run was canceled.` to the console when this happens, but the exit code itself doesn't distinguish a cancellation from a real test failure."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Note: If you call this API from a step that runs separately from the test job itself, the canceled run's own CI job will report as failed rather than canceled. This may happen example in deployment-pipeline and orchestrator use cases. You should account for that in the job that ran the canceled specs, so a run you intentionally canceled doesn't get treated as a broken build."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "Endpoint"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "POST https://api.cypress.io/runs/cancel"
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Requests are authenticated with your project ID and record key, the same credentials used to "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/get-started/setup.md#Setup",
            "children": [
              {
                "type": "text",
                "value": "record the run"
              }
            ]
          },
          {
            "type": "text",
            "value": "."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "Request body"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "The request body is JSON. `projectId` and `recordKey` are always required, and the run is identified by exactly one of `runUrl` or `runNumber`."
          }
        ]
      },
      {
        "type": "table",
        "align": [
          null,
          null,
          null,
          null
        ],
        "children": [
          {
            "type": "tableRow",
            "children": [
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Property"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Type"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Required"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Description"
                  }
                ]
              }
            ]
          },
          {
            "type": "tableRow",
            "children": [
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`projectId`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`string`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Yes"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "The "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/account-management/projects.md#Project-ID",
                    "children": [
                      {
                        "type": "text",
                        "value": "project ID"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " of the run."
                  }
                ]
              }
            ]
          },
          {
            "type": "tableRow",
            "children": [
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`recordKey`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`string`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Yes"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "A valid "
                  },
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/account-management/projects.md#Record-key",
                    "children": [
                      {
                        "type": "text",
                        "value": "record key"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " for the project."
                  }
                ]
              }
            ]
          },
          {
            "type": "tableRow",
            "children": [
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`runUrl`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`string`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Conditional"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "The Cypress Cloud run URL (Cypress prints this when a run starts). Provide this or `runNumber`."
                  }
                ]
              }
            ]
          },
          {
            "type": "tableRow",
            "children": [
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`runNumber`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`number`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Conditional"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "The run's sequential number within the project. Provide this or `runUrl`."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Example: `fetch`"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "const response = await fetch('https://api.cypress.io/runs/cancel', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({\n    projectId: 'abc123',\n    recordKey: 'f858a2bc-b469-4e48-be67-0876339ee7e1',\n    runUrl: 'https://cloud.cypress.io/projects/abc123/runs/42',\n    // runNumber: 42, // optional, in lieu of runUrl\n  }),\n})\n\nconst result = await response.json()\nconsole.log(result) // e.g. { runId: 'f858a2bc-b469-4e48-be67-0876339ee7e1', cancelledAt: '2024-01-01T00:00:00.000Z' }"
      },
      {
        "type": "heading",
        "depth": 3,
        "children": [
          {
            "type": "text",
            "value": "Example: `curl`"
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "curl -X POST https://api.cypress.io/runs/cancel \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"projectId\": \"abc123\",\n    \"recordKey\": \"f858a2bc-b469-4e48-be67-0876339ee7e1\",\n    \"runUrl\": \"https://cloud.cypress.io/projects/abc123/runs/42\"\n  }'"
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "Finding the run URL or run number"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Use the "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/api/node-events/before-run-api.md",
            "children": [
              {
                "type": "text",
                "value": "`before:run`"
              }
            ]
          },
          {
            "type": "text",
            "value": " Node event to get the Cypress Cloud `runUrl`. This can be accessed using your cypress config file:"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "cypress.config.js"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "text",
                    "value": "cypress.config.ts"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "const { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  // setupNodeEvents can be defined in either\n  // the e2e or component configuration\n  e2e: {\n    setupNodeEvents(on, config) {\n      const { defineConfig } = require('cypress')\n\n      module.exports = defineConfig({\n        // setupNodeEvents can be defined in either\n        // the e2e or component configuration\n        e2e: {\n          setupNodeEvents(on, config) {\n            on('before:run', async (details) => {\n              // `results` is undefined in `cypress open` mode, and `runUrl` is only\n              // set when the run was recorded. Bail out otherwise.\n              if (!details?.runUrl) {\n                return\n              }\n\n              console.log(details.runUrl)\n\n              // store the RUN URL where your CI process can access it later for cancellation purposes\n            })\n          },\n        },\n      })\n    },\n  },\n})"
      },
      {
        "type": "code",
        "lang": null,
        "meta": null,
        "value": "import { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  // setupNodeEvents can be defined in either\n  // the e2e or component configuration\n  e2e: {\n    setupNodeEvents(on, config) {\n      const { defineConfig } = require('cypress')\n\n      module.exports = defineConfig({\n        // setupNodeEvents can be defined in either\n        // the e2e or component configuration\n        e2e: {\n          setupNodeEvents(on, config) {\n            on('before:run', async (details) => {\n              // `results` is undefined in `cypress open` mode, and `runUrl` is only\n              // set when the run was recorded. Bail out otherwise.\n              if (!details?.runUrl) {\n                return\n              }\n\n              console.log(details.runUrl)\n\n              // store the RUN URL where your CI process can access it later for cancellation purposes\n            })\n          },\n        },\n      })\n    },\n  },\n})"
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "Responses"
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "A successful cancellation always responds immediately and will end a Cypress run in progress."
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Note: If you are looking for a less-immediate signal that allows the queued tests to complete before ending the run, use the "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/features/smart-orchestration/parallelization.md#Run-Completion-API",
            "children": [
              {
                "type": "text",
                "value": "Run Completion API"
              }
            ]
          },
          {
            "type": "text",
            "value": " instead."
          }
        ]
      },
      {
        "type": "table",
        "align": [
          null,
          null,
          null
        ],
        "children": [
          {
            "type": "tableRow",
            "children": [
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Status"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Body"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "Meaning"
                  }
                ]
              }
            ]
          },
          {
            "type": "tableRow",
            "children": [
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`200`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`{ \"runId\": \"...\", \"cancelledAt\": \"...\" }`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "The run was canceled."
                  }
                ]
              }
            ]
          },
          {
            "type": "tableRow",
            "children": [
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`409`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "`{ \"message\": \"Run is not currently running and cannot be canceled.\", \"code\": \"RUN_NOT_RUNNING\" }`"
                  }
                ]
              },
              {
                "type": "tableCell",
                "children": [
                  {
                    "type": "text",
                    "value": "The run is not currently running. It may have already completed, already been canceled, or timed out."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "type": "paragraph",
        "children": [
          {
            "type": "text",
            "value": "Malformed or unauthenticated requests are rejected before a cancellation is attempted: a missing or invalid "
          },
          {
            "type": "link",
            "title": null,
            "url": "/llm/markdown/cloud/account-management/projects.md#Record-key",
            "children": [
              {
                "type": "text",
                "value": "record key"
              }
            ]
          },
          {
            "type": "text",
            "value": " returns `401`, a missing `projectId` or run identifier returns `400`, and a `runUrl` or `runNumber` that doesn't resolve to a run in the project returns `404`. Every error response is a JSON body of the form `{ \"message\": \"...\", \"code\": \"...\" }`."
          }
        ]
      },
      {
        "type": "heading",
        "depth": 2,
        "children": [
          {
            "type": "text",
            "value": "See also"
          }
        ]
      },
      {
        "type": "list",
        "ordered": false,
        "start": null,
        "spread": false,
        "children": [
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/features/smart-orchestration/run-cancellation.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "Auto Cancellation"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " - cancel a run automatically once failures cross a threshold"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/features/recorded-runs.md#Run-cancellation",
                    "children": [
                      {
                        "type": "text",
                        "value": "Manually canceling a run"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " - cancel a run from the Cypress Cloud dashboard"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/features/smart-orchestration/parallelization.md#Run-Completion-API",
                    "children": [
                      {
                        "type": "text",
                        "value": "Run Completion API"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " - mark a run complete early instead of canceling it"
                  }
                ]
              }
            ]
          },
          {
            "type": "listItem",
            "spread": false,
            "checked": null,
            "children": [
              {
                "type": "paragraph",
                "children": [
                  {
                    "type": "link",
                    "title": null,
                    "url": "/llm/markdown/cloud/integrations/webhooks.md",
                    "children": [
                      {
                        "type": "text",
                        "value": "`run.completed` webhooks"
                      }
                    ]
                  },
                  {
                    "type": "text",
                    "value": " - get notified when a run finishes, including by cancellation"
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  },
  "token_estimate": 1568
}