Cancel a translation
Stops within one task. Work already completed is charged (credits_charged in the response — translation that ran has a real cost); the rest of the reservation is released. The batch lands in failed with error.code: "cancelled".
POST/v1/batches/{batch_id}/cancel
Requires batches:write. Stops within one task rather than instantly, because a task in flight is finished rather than abandoned half-written.
What you are charged
Work already completed is charged, and the response says how much in credits_charged. The unused part of the reservation is released back to the balance.
This is not a refund policy so much as an accounting fact: translation that ran consumed model capacity. Cancelling early costs less, cancelling near the end costs nearly the full amount.
Where the translation lands
The batch ends in failed with error.code: "cancelled". That is a deliberate choice rather than a separate cancelled state: an integration that already handles failure handles cancellation without new code, and error.code distinguishes the two whenever the difference matters.
Anything the translation had already produced is not downloadable. A partial result is not a translated file, and returning one would be worse than returning nothing.