company_missing_certificate
HTTP 400 type: validation_error param: device_id{ "error": { "type": "validation_error", "code": "company_missing_certificate", "message": "Company AWAIT 8 J.D.O.O. has no signing certificate. Upload one with POST /v1/certificates before fiscalizing.", "param": "device_id", "upstream": null, "doc_url": "https://docs.fiskhub.com/errors/company_missing_certificate" }}What happened
The company that owns this device has no signing certificate. Every message sent to the Tax Administration must be signed with a certificate whose subject OIB equals the company’s OIB, and there is nothing to sign with.
Nothing was fiscalized.
This normally means a company was created and its devices provisioned before the certificate step — a perfectly reasonable order to work in, but the certificate has to land before the first sale.
Should you retry?
No. Nothing changes until a certificate is uploaded.
The fix
Upload a PKCS#12 for the company:
curl -sS -X POST https://api.fiskhub.com/v1/certificates \ -H "Authorization: Bearer $FISKHUB_API_KEY" \ -F "company_id=3a5f2b18-7c4d-4e91-9a2b-6d8e0f1c3a57" \ -F "passphrase=$P12_PASSPHRASE" \ -F "label=FISKAL 1"The subject OIB must equal the company’s OIB, or the upload is refused with
hr.certificate_oib_mismatch.
Confirm it landed:
curl -sS -G https://api.fiskhub.com/v1/certificates \ -H "Authorization: Bearer $FISKHUB_API_KEY" \ --data-urlencode "company_id=3a5f2b18-7c4d-4e91-9a2b-6d8e0f1c3a57"Fiscalization works from the next request onwards. Sales the machine stored while it was blocked
can be submitted with their original occurred_at.
Certificates are per company, not per tenant
The Tax Administration rejects any message whose payload OIB differs from the signing
certificate’s OIB (s005). Every company has its own OIB, so every company needs its own
certificate.
A tenant with two companies needs two certificates. Uploading one for company A does not let company B fiscalize, and there is no fallback or inheritance — that is required by the regulation, not a policy choice.
Preventing it
Check certificate_status when a company is created and before its first site goes live:
curl -sS https://api.fiskhub.com/v1/companies \ -H "Authorization: Bearer $FISKHUB_API_KEY""certificate_status": "missing" means none of that company’s devices can fiscalize, whatever
else is configured. The same field warns before a certificate expires — see
certificate_expired.