efrisapi.com

EFRIS error codes

What each URA rejection actually means, and how to fix it. Learned by submitting documents to the live service and reading what came back — where this disagrees with URA's specification, this describes what the service does.

How to read a URA rejection

Failures arrive in two different places and they mean different things.

Envelope level — the call itself failed and nothing was recorded. The code is in returnStateInfo.returnCode:

{"returnStateInfo": {"returnCode": "1345", "returnMessage": "..."}}

Item level — the call succeeded but individual lines were refused. The envelope still reads 00 while per-item status sits inside the decrypted payload. A batch can be partly accepted, so treating HTTP 200 plus returnCode 00 as success silently loses documents.

Branch on the code, never on the message. URA rewords returnMessage between releases and some messages return in mixed language. The number is the stable contract.

Every documented code

15Data decryption error — the session key expired; redo T104 306A credit note has already been issued against that invoice 676Unit-rate excise requires havePieceUnit "101" and piece fields 1304summary.itemCount must exclude discount lines 1343summary.netAmount must equal grossAmount minus taxAmount 1344summary.taxAmount must include excise duty 1345summary.grossAmount must exclude excise duty 1462A credit note must mirror the original line's excise fields 1526pageSize must be 99 or less, despite the documented 100 2253The seller's reference number has already been issued 2831The excise taxDetails group needs a taxRateName

Debugging something not listed here


The EFRIS API Kit handles this case already — it is one of the rejections the library was calibrated against. This page stays free either way.