[AVAILABLE]. No
Idempotency-Key header exists anywhere in this API. This
page describes the real mechanism, not a gap.businessTransactionId is the idempotency key, but not Stripe’s kind
POST /execute and POST /transactions require a caller supplied businessTransactionId (a UUID). Sending the same
one twice does not replay the first response the way Stripe’s Idempotency-Key does. The second request fails
with 409 and no code:
Practical guidance for callers: derive
businessTransactionId from your own idempotency key (a UUIDv5 of your
order id, for example) so a retry uses the same id. Treat a 409 on that id as “already submitted, go and read it”,
not as a failure.
Nonces: each authorization and each approval is accepted once
A caller never sends or manages a nonce. The word means two single use values inside the server’s own pipeline:- The authorization nonce. Every approved decision becomes a
SignedExecutionAuthorizationwith its ownnonce. The gateway consumes it before it releases the action, so one authorization can release one action. Over HTTP you never meet this check: a repeatedbusinessTransactionIdis refused with409before a second authorization exists. It protects a system that calls@parmana/execution-gatewaydirectly, which refuses a replay withNONCE_ALREADY_CONSUMED. - The approval nonce. A signed human approval carries a nonce too, and is accepted once. Sending the same approval
again, even under a new
businessTransactionId, is refused with403 POLICY_DENIED: the approval no longer verifies, so the policy’s approval signal is false (declared signal(s) do not match independently verified state (humanApproved=true != verified humanApproved=false)). Ask the approver for a new approval. See Human approval.
consumed_nonces and consumed_approval_nonces), so they hold across every instance
of a deployment, not per process. Only the test suite (NODE_ENV=test) keeps them in memory. See Execution
Authorization for the full mechanism.
What this means together
Three replay defenses exist at different layers, and none is anIdempotency-Key header:
None of them is configurable per request, and there is no way to opt out of the
businessTransactionId uniqueness
check from the API.