PaygateDeveloper documentation
409testkit.not_simulatabletestkitRule R4

That object is already in a terminal state

Simulation drives a payment or refund forward. An object that has already succeeded, failed, expired or been canceled has nowhere to go.

Why the API refuses

WHEN SimulatePayment or SimulateRefund names an object that is already in a terminal state, THE SYSTEM SHALL refuse with testkit.not_simulatable.

What to do

Create a new payment to simulate. In a test that needs a specific end state, simulate from a fresh object each time rather than reusing one across cases — reuse is what produces this, and it makes tests order-dependent.

Operations that can return it