409
testkit.not_simulatabletestkitRule R4That 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
- testkit.AdvanceClock
- testkit.CreateWebhookSink
- testkit.DeleteWebhookSink
- testkit.GetWebhookSink
- testkit.ListSinkDeliveries
- testkit.ListTestkitActions
- testkit.ListWebhookSinks
- testkit.PurgeTestData
- testkit.SeedTestData
- testkit.SimulatePayment
- testkit.SimulatePayout
- testkit.SimulateRefund
- testkit.SimulateSettlement
- testkit.UpdateWebhookSink