# 2026-03-11

## 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.