Overview
POST /partner/operations/:operationId/cancel uses the same rules as the cancel button on the widget receipt. The clock starts when the user presses Make Payment (operation.createdAt) and lasts 30 minutes unless your environment uses a different window.
Check first with GET /partner/operations/:operationId. The detail includes data.cancellation:
Set
BASE_URL from the Partner API overview.
reason is optional (max 500 characters). It is stored on the operation and sent on operation.cancelled as cancellationReason. That webhook also includes cancelledBy: "partner".
Success
corridorCancel.outcome is ok (corridor accepted), failed (canonical operation is cancelled, corridor call failed — Leap support is notified), or not_applicable (no corridor operation id).
When cancel is refused
A refusal is HTTP 409.error.code matches error.data.unavailableReason in uppercase. error.data.nextStep says what to do. retryable is true only for IN_FLIGHT.
OPERATION_NOT_FOUND.