Synctera has two distinct idempotency behaviors (docs: "Need to Know" -> Idempotency):
:standard— the key is optional. A repeated request with the same key returns the original cached response (incl. status code) for 7 days. Safe to auto-generate and auto-retry.:ledger— applies to money-movement endpoints (ACH, wires, internal transfers, and anything else that posts to the ledger). The key is REQUIRED — Synctera returns 400 if it's missing. A repeat with the same key is NEVER served from cache: it's rejected with 409 (IDEMPOTENCY_CONCURRENT_USE) or 422 (IDEMPOTENCY_INVALID_REUSE), and keys are retained indefinitely per resource. Because a silent retry here fails loudly by design instead of replaying safely, this client does not auto-generate keys for ledger calls unless the caller opts in viaauto_generate_ledger_idempotency_keys: trueon the client.
Summary
Functions
Generates a random UUID v4 string, suitable as an idempotency key.
Resolves the Idempotency-Key header value to send, given the endpoint's
tier, an optional caller-supplied key, and whether the client is
configured to auto-generate keys for ledger endpoints.
Types
Functions
@spec generate_key() :: String.t()
Generates a random UUID v4 string, suitable as an idempotency key.
Resolves the Idempotency-Key header value to send, given the endpoint's
tier, an optional caller-supplied key, and whether the client is
configured to auto-generate keys for ledger endpoints.
Raises Synctera.UsageError if a key is required but neither supplied nor
auto-generatable, or if a key was supplied for a :none-tier endpoint.