X_IDEMPOTENCY_OUTPUT_UNSERIALIZABLE
Means
an idempotent action's answer cannot be stored as JSON, so no retry could replay it
Typical cause
the handler of an idempotent action returned a value JSON has no form for: a bigint, a NUL or a lone surrogate in its answer (a NaN is not this refusal: it rests as null). Its work ran, and a retry under the same Idempotency-Key replays this refusal rather than running it again
Fix
return JSON from handle: String(id) for a bigint, text with no NUL and no lone surrogate, then send a fresh Idempotency-Key once the handler is fixed