Skip to content

hr.amount_out_of_range

HTTP 400 type: validation_error param: total
{
"error": {
"type": "validation_error",
"code": "hr.amount_out_of_range",
"message": "total 12500.00 is outside the permitted range of ±10,000.00 EUR for a cash or card sale at a self-service device.",
"param": "total",
"upstream": null,
"doc_url": "https://docs.fiskhub.com/errors/hr.amount_out_of_range"
}
}

What happened

total is outside the permitted range for a cash or card sale at a self-service device. The specification caps it at ±10,000.00 EUR, and FiskHub checks it locally before sending.

Should you retry?

Not unchanged. The limit is fixed by the specification.

The fix

Almost always, the amount is not what you think it is.

The amount is in the wrong unit

The commonest cause by far. total is in euros, as a decimal string:

{ "total": "125.00" } // €125.00 — right
{ "total": "12500.00" } // €12,500.00 — the same amount sent in cents

If your device works in cents internally, convert before sending. Note that this is the opposite convention from the QR payload’s izn parameter, which is in cents — FiskHub builds that for you, so you never construct it by hand.

A separator was misread

{ "total": "1.500.00" } // rejected as malformed
{ "total": "1500.00" } // €1,500.00
{ "total": "1,500.00" } // rejected — no thousands separator

There is no thousands separator, and the decimal separator is a dot.

The sale really is that large

Above €10,000, a cash or card sale at an unattended device cannot be fiscalized as one receipt. That is a business question rather than an integration one — the operator should raise it with their accountant. Do not split one sale into several receipts to get under the limit; each receipt is a fiscal record of a transaction that must have actually happened.

Negative amounts

Negative totals are permitted and stay within the same range — a refund is -105.50, and the QR payload’s izn keeps the sign as -10550.

The precision rules still apply

total must be a decimal string with exactly two places. "125", "125.0" and 125.00 (a JSON number) are all rejected with invalid_request rather than this code. See getting started.