I still don't get it. External API calls aren't deterministic. You're still left with the choice between making them idempotent or potentially performing an action twice (or more!), and I don't see how durable execution helps you.
Those sort of flaky or non-deterministic steps are written as activities, not as part of the deterministic workflow. The orchestrator will retry the non-deterministic activity until it gets a usable output (expected error, success), and record the activity output. If the workflow replays (i.e. worker crash), that recorded output of the activity will be returned instead of executing the activity again.
Those sort of flaky or non-deterministic steps are written as activities, not as part of the deterministic workflow. The orchestrator will retry the non-deterministic activity until it gets a usable output (expected error, success), and record the activity output. If the workflow replays (i.e. worker crash), that recorded output of the activity will be returned instead of executing the activity again.