Skip to content

Idempotency

Every mutation that can be retried needs a stable key.

Starts and Signals

WorkflowRunMetadata.idempotencyKey and signal delivery keys make HTTP retries safe. The service retries transport failures with the same key. It does not treat an HTTP response as completion evidence; persisted run state is authoritative.

Activities

ActivityContext.idempotencyKey is stable for a logical attempt. Manual retry creates a new attempt and retains the key so the external system can dedupe.

Completions

User-task completion, cancel, redrive, and command retry all require a request idempotency key. Duplicate posts do not append a second history event.

Replay

Replay itself is the other half of idempotency. A completed await never runs its handler again. That is why operation IDs must be stable and why workflow code must not perform I/O.

See Also