Skip to content
Last updated

Summary

This release updates the public Idempotency guide to better explain deterministic Idempotency-Key generation. The guide now clarifies that the request body must be canonicalized before hashing, and it includes clearer reference samples for Python and Node.js.


Fixed

Idempotency canonical JSON hashing clarification — Fixed [Docs]

Impact: The Idempotency guide now explains more precisely how to compute body_hash: the request body must be canonicalized before hashing, with object keys sorted alphabetically at every level and serialized consistently.
Action required: Review your implementation if you generate deterministic Idempotency-Key values client-side, especially in non-Python implementations.
References: /products/fincore/guides/idempotency

Python deterministic key generation sample — Fixed [Docs]

Impact: The Python sample now includes clearer inline comments and step-by-step guidance for generating a deterministic Idempotency-Key. No backend behavior changed.
Action required: None, unless you want to align your implementation with the updated reference example.
References: /products/fincore/guides/idempotency

Node.js deterministic key generation sample — Fixed [Docs]

Impact: The Node.js sample was updated to make the normalization logic clearer and align the example with canonical JSON hashing expectations described in the guide.
Action required: If you implemented the previous sample directly, verify that your body hashing logic produces the same deterministic output for semantically identical payloads, including nested objects.
References: /products/fincore/guides/idempotency


Migration notes

  1. Canonicalize the request body before hashing

    • Sort object keys consistently before computing the SHA-256 hash.
    • Ensure semantically identical payloads generate the same body_hash.
  2. Keep UUID v5 generation unchanged

    • Continue using:
      • name = client_id + method + body_hash
      • Idempotency-Key = UUIDv5(namespace, name)
  3. Validate client-side implementations

    • If you copied a previous example into production code, confirm it matches the canonicalization rules described in the updated guide.