upstream_unavailable
Carried inside a 200 invoice body as `fiscal_error`. NOT an HTTP error.{ "id": "inv_01J9Z4T7M2K8Q6R3V5X1Y0B2C4", "status": "retrying", "jir": null, "zki": "e4d909c290d0fb1ca068ffaddf22cbd0", "qr_payload": "https://porezna.gov.hr/rn?zki=e4d909c290d0fb1ca068ffaddf22cbd0&datv=20260827_1032&izn=450", "number": "1041", "occurred_at": "2026-08-27T10:32:11+02:00", "total": "4.50", "currency": "EUR", "fiscal_error": { "code": "upstream_unavailable", "message": "Tax Administration did not respond. Will retry automatically.", "retry_scheduled": true }}What happened
FiskHub could not reach the Croatian Tax Administration, or reached it and got no answer within the timeout. Two sequential attempts were made, with a 4-second socket timeout each, before giving up on the round trip.
Causes are ordinary: a scheduled maintenance window, an outage on their side, congestion, a network partition between us and them.
Should you retry?
No — FiskHub already is. retry_scheduled is true and the invoice is in retrying.
A sweep runs every five minutes, selects invoices in this state whose 30-day deadline has not
passed, orders them by deadline ascending so the most endangered go first, and resends them with
late delivery (NakDost) set and a fresh message id. The business data does not change, so the
ZKI does not change. Nothing is required of you.
Resubmitting the sale yourself would be a second fiscalization attempt for one sale. The
Idempotency-Key protects you from the worst of it, but the right action is to do nothing.
The fix
Nothing to fix on your side. What to do:
-
Complete the sale. Print the receipt from
zkiandqr_payload, omit the JIR line, dispense. -
Record the invoice id if you want to confirm later.
-
Check back when convenient — a one-off
GETa few minutes later, or a daily reconciliation:Terminal window curl -sS "https://api.fiskhub.com/v1/invoices/inv_01J9Z4T7M2K8Q6R3V5X1Y0B2C4" \-H "Authorization: Bearer $FISKHUB_API_KEY"Most outages clear within one or two sweep passes and the invoice quietly becomes
confirmed.
Do not poll in a tight loop — see rate limits. There are no webhooks; the synchronous design removed the need for them.
If it keeps happening
Probe the endpoint directly:
curl -sS https://api.fiskhub.com/v1/health/fiscal \ -H "Authorization: Bearer $FISKHUB_API_KEY"reachable: false means the problem is upstream and there is nothing to do but keep selling.
Note that the TEST endpoint has scheduled windows — weekdays 16:00–17:00 and Sundays 08:00–12:00,
Europe/Zagreb — so this is expected during those hours on fh_test_ keys.