# Cancel an eval run

> Cancels a queued or running run: its outstanding item tasks are dropped so it stops consuming provider budget, and the run settles as `canceled`.

<Heading
  as={"h1"}
  className={"openapi__heading"}
  children={"Cancel an eval run"}
>
</Heading>

<MethodEndpoint
  method={"post"}
  path={"/api/v1/evals/{eval_id}/runs/{eval_run_id}/cancel"}
  context={"endpoint"}
>
  
</MethodEndpoint>

Cancels a queued or running run: its outstanding item tasks are dropped so it stops consuming provider budget, and the run settles as `canceled`.

Results already written are kept — they are real measurements of generations that were really paid for — and `completed_count` / `errored_count` report what ran. `aggregate_scores` is deliberately left null: a partial roll-up in the same field a completed run uses would read as a whole-dataset verdict.

A run that has already finished is rejected with 400.

<Heading
  id={"request"}
  as={"h2"}
  className={"openapi-tabs__heading"}
>
  <Translate id="theme.openapi.request.title">Request</Translate>
</Heading>

<ParamsDetails
  {...require("./cancel-eval-run.ParamsDetails.json")}
>
  
</ParamsDetails>

<RequestSchema
  {...require("./cancel-eval-run.RequestSchema.json")}
>
  
</RequestSchema>

<StatusCodes
  {...require("./cancel-eval-run.StatusCodes.json")}
>
  
</StatusCodes>
