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

[Actions](/error-codes#actions)
