Zadnja izmjena: 18.03.2026 20:27:47

Fiskalizacija 2.0 - Vodić za programere

DOKUMENAT JE U IZRADI

Osnovni proces razmjene računa , F20 i eIzvještavanja koristeči api DOKU.HR (bivši iEračuni)

⚠️ TESTNI API na internetu je u funkciji od 02.12.2025 i stalno se dograđuje !
Za korištenje opcije potrebno je skinuti plugin DOKU iz web setupa HrF i podesiti podatke u postavkama plugina.

* Kod razmjene datoteka :
HTTP šalje na server urlencodirane POST podatke. U neki situacijama je potrebno u prvi red upisati HTTP:NOENCODEPOST kako bi se podaci slali u izvornom obliku bez encodiranja.
Koristi s kod POST opceracija koje šalju podatke u 3 redu.
Koristeči ovaj plugin s HrFiskalizatorom možete :
*Poslati sve dokumente vezane uz Fiskalizaciju 2.0. i u JSON i XML Formatu.
*JSON je opcionalan , podatke možete kreirati direktno u XML formatu.
*ℹ️ Apsolutno najlakši i najsigurniji način je kreiranje XML korištenjem TXT2INV TXT2INV plugina.
*Podatke možete razmjenjivati datotekama ili HTTP pozivom, prema primjerima u nastavku.

ℹ️ Plugin ima kvalitetan web interfejs, kojim da mogu obavljati sve radnje vezane uz fiskalizaciju i izvješćivanje,
na web adesi localhost:8449/dokuweb

Izlazni računi

Hodogram slanja računa.
graph TD A[1. Kreiranje JSON ili XML predloška] --> B[2. Popunjavanje predloška
vlastitim podacima] B --> C[3. Kontrola ispravnosti
JSON/XML opcionalno] C --> D[4. Slanje dokumenta HrFiskalizatoru] D --> E1[HTTP POST prema
HrFiskalizatoru] D --> E2[Razmjena datoteka sa
HrFiskalizatorom] E1 --> F[5. Preuzimanje i obrada
potvrde receipt] E2 --> F style A fill:#e1f5ff style B fill:#e1f5ff style C fill:#fff4e1 style D fill:#e1f5ff style E1 fill:#e1ffe1 style E2 fill:#e1ffe1 style F fill:#ffe1f5
📄HrFlab za Fiskalizaciju 2.0
U web interfejsu HrFiskalizatora možete pronači sve potrebne primjere i alate za rad s Fiskalizacijom 2.0. HrFlab za Fiskalizaciju 2.0
📄Interface za operacije nad računima
Na web stranici DOKU plugina možete pronači interface za pregled i operacije nad računima koje ste poslali ili primili na doku.hr.
localhost:8449/dokuweb Interface plugina DOKU za Fiskalizaciju 2.0
💰TXT2INV plugin
Za izradu XMLa iz jednostavne TXT (INI) datoteke možete koristiti plugin TXT2INV. Plugin TXT2INV za Fiskalizaciju 2.0
Više o pluginu TXT2INV
📄Ping PLUGINA DOKU GET

AJAX zahtjev

$.ajax({
    url: '/plugin/doku/ping',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
plugin/doku/ping

text/html

primjer odgovora na upit :

{
  "message": "Doku plugin OK"
}
📄Ping DOKU servera GET

AJAX zahtjev

$.ajax({
    url: '/doku',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
/doku

text/html

primjer odgovora na upit :

{
  "message": "Hello TEST @ 03.12.2025. 19:25:56"
}
⚙️Dohvat DOKU moda rada GET

AJAX zahtjev

$.ajax({
    url: '/doku/getmode',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
/doku/getmode

text/plain

Primjer odgovora na upit:

{
  "mode": "PRODUCTION"
}
ℹ️ Mogući modovi rada:
  • PRODUCTION - produkcijski mod (pravi API)
  • TEST - test mod (sandbox API)
📄Primjer JSONa za račun JSON

Kreiranje JSON računa

Kreiranje JSONa sa računom u JSON formatu za Fiskalizaciju 2.0.
Koristeći predložak iz primjera. Veći dio predloška je statičan, jedino se neki podaci moraju dinamički generirati u petlji, recimo invoicelines ili taxtotal ako je više različitih stopa pdv-a.
ℹ️ JSON nažalost nije pogodan ako dokumente planirate generirati mjenjači string, jer je potrebno paziti na ispravnu sintaksu (zareze, navodnike, zagrade).
U tom slučaju generirajte direktno XML račun koristeći XML predložak.
 
{
    "Invoice": {
        "profileid": "P1",
        "id": "04/1/2025",
        "issuedate": "2025-11-13",
        "issuetime": "14:30:00",
        "duedate": "2025-11-13",
        "currencyid": "EUR",
        "invoicetypecode": "380",
        "note": "Račun s porezom na potrošnju 3% obračunatim kao trošak na razini dokumenta",
        "accountingsupplierparty": {
            "party": {
                "endpointid": {
                    "schemeid": "9934",
                    "value": "78158722615"
                },
                "partyidentification": {
                    "id": "78158722615"
                },
                "partyname": {
                    "name": "Caffe Bar Adriatic d.o.o."
                },
                "postaladdress": {
                    "streetname": "Obala kralja Tomislava 15",
                    "cityname": "Split",
                    "postalzone": "21000",
                    "country": {
                        "identificationcode": "HR"
                    }
                },
                "partytaxscheme": {
                    "companyid": "78158722615",
                    "taxscheme": {
                        "id": "VAT"
                    }
                },
                "partylegalentity": {
                    "registrationname": "Caffe Bar Adriatic d.o.o.",
                    "companyid": "78158722615",
                    "companylegalform": "Caffe Bar Adriatic d.o.o. upisana u sudski registar trgovačkog suda u Splitu, temeljni kapital 20.000,00 EUR"
                },
                "contact": {
                    "electronicmail": "racuni@caffe-adriatic.hr"
                }
            },
            "sellercontact": {
                "id": "14285729085",
                "name": "Operater Marko"
            }
        },
        "accountingcustomerparty": {
            "party": {
                "endpointid": {
                    "schemeid": "9934",
                    "value": "32234297847"
                },
                "partyidentification": {
                    "id": "32234297847"
                },
                "partyname": {
                    "name": "Hotel Marina d.o.o."
                },
                "postaladdress": {
                    "streetname": "Šetalište Ivana Meštrovića 48",
                    "cityname": "Split",
                    "postalzone": "21000",
                    "country": {
                        "identificationcode": "HR"
                    }
                },
                "partytaxscheme": {
                    "companyid": "32234297847",
                    "taxscheme": {
                        "id": "VAT"
                    }
                },
                "partylegalentity": {
                    "registrationname": "Hotel Marina d.o.o.",
                    "companyid": "32234297847"
                },
                "contact": {
                    "electronicmail": "nabava@hotel-marina.hr"
                }
            }
        },
        "allowancecharges": [
            {
                "chargeindicator": true,
                "allowancechargereason": "#HR:PP#",
                "multiplierfactornumeric": 3,
                "amount": 6.00,
                "baseamount": 200.00,
                "taxcategory": {
                    "id": "E",
                    "name": "HR:E",
                    "percent": 0,
                    "taxexemptionreason": "#HR:PP#",
                    "taxscheme": {
                        "id": "VAT"
                    }
                }
            }
        ],
        "invoicelines": [
            {
                "id": "1",
                "invoicedquantity": 50,
                "lineextensionamount": 250.00,
                "item": {
                    "name": "Kava Espresso",
                    "description": "Kava espresso - ugostiteljska usluga",
                    "commodityclassification": {
                        "commoditycode": "26.11.11",
                        "itemclassificationcode": {
                            "value": "26.11.11",
                            "listid": "CG"
                        }
                    },
                    "classifiedtaxcategory": {
                        "id": "S",
                        "percent": 25,
                        "taxscheme": {
                            "id": "VAT"
                        }
                    }
                },
                "price": {
                    "priceamount": 5.00,
                    "basequantity": 1,
                    "unitcode": "EA"
                }
            },
            {
                "id": "2",
                "invoicedquantity": 30,
                "lineextensionamount": 120.00,
                "item": {
                    "name": "Coca Cola 0.33l",
                    "description": "Bezalkoholno piće - podliježe porezu na potrošnju 3%",
                    "commodityclassification": {
                        "commoditycode": "26.11.11",
                        "itemclassificationcode": {
                            "value": "26.11.11",
                            "listid": "CG"
                        }
                    },
                    "classifiedtaxcategory": {
                        "id": "S",
                        "percent": 25,
                        "taxscheme": {
                            "id": "VAT"
                        }
                    },
                    "additionalitemproperty": [
                        {
                            "name": "Osn. PNP",
                            "value": "120.00"
                        },
                        {
                            "name": "PNP 3%",
                            "value": "3.60"
                        }
                    ]
                },
                "price": {
                    "priceamount": 4.00,
                    "basequantity": 1,
                    "unitcode": "EA"
                }
            },
            {
                "id": "3",
                "invoicedquantity": 20,
                "lineextensionamount": 80.00,
                "item": {
                    "name": "Fanta Narančada 0.33l",
                    "description": "Bezalkoholno piće - podliježe porezu na potrošnju 3%",
                    "commodityclassification": {
                        "commoditycode": "26.11.11",
                        "itemclassificationcode": {
                            "value": "26.11.11",
                            "listid": "CG"
                        }
                    },
                    "classifiedtaxcategory": {
                        "id": "S",
                        "percent": 25,
                        "taxscheme": {
                            "id": "VAT"
                        }
                    },
                    "additionalitemproperty": [
                        {
                            "name": "Osn. PNP",
                            "value": "80.00"
                        },
                        {
                            "name": "PNP 3%",
                            "value": "2.40"
                        }
                    ]
                },
                "price": {
                    "priceamount": 4.00,
                    "basequantity": 1,
                    "unitcode": "EA"
                }
            }
        ],
        "taxtotal": {
            "taxamount": 112.50,
            "taxsubtotals": [
                {
                    "taxableamount": 450.00,
                    "taxamount": 112.50,
                    "taxcategory": {
                        "id": "S",
                        "percent": 25,
                        "taxscheme": {
                            "id": "VAT"
                        }
                    }
                },
                {
                    "taxableamount": 6.00,
                    "taxamount": 0.00,
                    "taxcategory": {
                        "id": "E",
                        "percent": 0,
                        "taxexemptionreason": "#HR:PP#",
                        "taxscheme": {
                            "id": "VAT"
                        }
                    }
                }
            ]
        },
        "legalmonetarytotal": {
            "lineextensionamount": 450.00,
            "allowancetotalamount": 0.00,
            "chargetotalamount": 6.00,
            "taxexclusiveamount": 456.00,
            "taxinclusiveamount": 568.50,
            "payableamount": 568.50
        },
        "hrfisk20data": {
            "hrobracunpdvponaplati": "false",
            "hrtaxtotal": {
                "taxamount": "112.50",
                "hrtaxsubtotals": [
                    {
                        "taxableamount": "450.00",
                        "taxamount": "112.50",
                        "hrtaxcategory": {
                            "id": "S",
                            "name": "HR:PDV25",
                            "percent": "25.0",
                            "hrtaxscheme": {
                                "id": "VAT"
                            }
                        }
                    },
                    {
                        "_comment": "O/HR:PP/LOC - Stvarni iznos PNP poreza 3% (6.00 EUR od osnovice 200.00 EUR). Kategorija O (not subject to VAT) jer je PNP lokalni porez izvan PDV sustava.",
                        "taxableamount": "200.00",
                        "taxamount": "6.00",
                        "hrtaxcategory": {
                            "id": "O",
                            "name": "HR:PP",
                            "percent": "0",
                            "hrtaxscheme": {
                                "id": "LOC"
                            }
                        }
                    },
                    {
                        "_comment": "E/HR:E/VAT - Razčlamba oslobođenja za HR-BR-26 pravilo. Osnovica 6.00 EUR (iznos PNP naknade) je izvan PDV sustava (taxamount=0.00). Bez ove stavke validacija ne prolazi.",
                        "taxableamount": "6.00",
                        "taxamount": "0.00",
                        "hrtaxcategory": {
                            "id": "E",
                            "name": "HR:E",
                            "percent": "0",
                            "taxexemptionreason": "#HR:PP#",
                            "hrtaxscheme": {
                                "id": "VAT"
                            }
                        }
                    }
                ]
            },
            "hrlegalmonetarytotal": {
                "taxexclusiveamount": "256.00",
                "outofscopeofvatamount": "200.00"
            }
        }
    }
}
}
📄Isti primjer u XML formatu XML

Kreiranje XML računa

Kreiranje XML-a sa računom u XML formatu za Fiskalizaciju 2.0.
Koristeći predložak iz primjera. Veći dio predloška je statičan, jedino se neki podaci moraju dinamički generirati u petlji, recimo invoicelines ili taxtotal ako je više različitih stopa pdv-a. XML je autogeneriran iz gornjeg JSON primjera koristeći HrFiskalizator.
 
    <?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
         xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
         xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
         xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"
         xmlns:hr="urn:mfin.gov.hr:schema:xsd:HRExtensionAggregateComponents-1"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:hrextac="urn:mfin.gov.hr:schema:xsd:HRExtensionAggregateComponents-1"
         xsi:schemaLocation="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2 http://docs.oasis-open.org/ubl/os-UBL-2.1/xsd/maindoc/UBL-Invoice-2.1.xsd">
    <ext:UBLExtensions>
        <ext:UBLExtension>
            <ext:ExtensionContent>
                <hr:HRFISK20Data>
                    <hr:HRObracunPDVPoNaplati>false</hr:HRObracunPDVPoNaplati>
                    <hr:HRTaxTotal>
                        <cbc:TaxAmount currencyID="EUR">51.00</cbc:TaxAmount>
                        <hr:HRTaxSubtotal>
                            <cbc:TaxableAmount currencyID="EUR">100.00</cbc:TaxableAmount>
                            <cbc:TaxAmount currencyID="EUR">25.00</cbc:TaxAmount>
                            <hr:HRTaxCategory>
                                <cbc:ID>S</cbc:ID>
                                <cbc:Percent>25.0</cbc:Percent>
                                <hr:HRTaxScheme>
                                    <cbc:ID>VAT</cbc:ID>
                                </hr:HRTaxScheme>
                            </hr:HRTaxCategory>
                        </hr:HRTaxSubtotal>
                        <hr:HRTaxSubtotal>
                            <cbc:TaxableAmount currencyID="EUR">200.00</cbc:TaxableAmount>
                            <cbc:TaxAmount currencyID="EUR">26.00</cbc:TaxAmount>
                            <hr:HRTaxCategory>
                                <cbc:ID>S</cbc:ID>
                                <cbc:Percent>13.0</cbc:Percent>
                                <hr:HRTaxScheme>
                                    <cbc:ID>VAT</cbc:ID>
                                </hr:HRTaxScheme>
                            </hr:HRTaxCategory>
                        </hr:HRTaxSubtotal>
                    </hr:HRTaxTotal>
                    <hr:HRLegalMonetaryTotal>
                        <cbc:TaxExclusiveAmount currencyID="EUR">300.00</cbc:TaxExclusiveAmount>
                        <hr:OutOfScopeOfVATAmount currencyID="EUR">0.00</hr:OutOfScopeOfVATAmount>
                    </hr:HRLegalMonetaryTotal>
                </hr:HRFISK20Data>
            </ext:ExtensionContent>
        </ext:UBLExtension>
    </ext:UBLExtensions>
    <cbc:UBLVersionID>2.1</cbc:UBLVersionID>
    <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:mfin.gov.hr:cius-2025:1.0#conformant#urn:mfin.gov.hr:ext-2025:1.0</cbc:CustomizationID>
    <cbc:ProfileID>P1</cbc:ProfileID>
    <cbc:ID>13/1/2025</cbc:ID>
    <cbc:IssueDate>2025-11-15</cbc:IssueDate>
    <cbc:IssueTime>12:00:00</cbc:IssueTime>
    <cbc:DueDate>2025-11-15</cbc:DueDate>
    <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
    <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
    <cac:AccountingSupplierParty>
        <cac:Party>
            <cbc:EndpointID schemeID="9934">14285729085</cbc:EndpointID>
            <cac:PartyIdentification>
                <cbc:ID>9934:14285729085</cbc:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <cbc:Name>VLADO</cbc:Name>
            </cac:PartyName>
            <cac:PostalAddress>
                <cbc:StreetName>Testna ulica 1</cbc:StreetName>
                <cbc:CityName>Zagreb</cbc:CityName>
                <cbc:PostalZone>10000</cbc:PostalZone>
                <cac:Country>
                    <cbc:IdentificationCode>HR</cbc:IdentificationCode>
                </cac:Country>
            </cac:PostalAddress>
            <cac:PartyTaxScheme>
                <cbc:CompanyID>HR14285729085</cbc:CompanyID>
                <cac:TaxScheme>
                    <cbc:ID>VAT</cbc:ID>
                </cac:TaxScheme>
            </cac:PartyTaxScheme>
            <cac:PartyLegalEntity>
                <cbc:RegistrationName>VLADO</cbc:RegistrationName>
                <cbc:CompanyID>HR14285729085</cbc:CompanyID>
            </cac:PartyLegalEntity>
            <cac:Contact>
                <cbc:ElectronicMail>test@example.com</cbc:ElectronicMail>
            </cac:Contact>
        </cac:Party>
        <cac:SellerContact>
            <cbc:ID>14285729085</cbc:ID>
            <cbc:Name>Prodajni kontakt - Beverage Dept</cbc:Name>
        </cac:SellerContact>
    </cac:AccountingSupplierParty>
    <cac:AccountingCustomerParty>
        <cac:Party>
            <cbc:EndpointID schemeID="9934">32234297847</cbc:EndpointID>
            <cac:PartyIdentification>
                <cbc:ID>9934:32234297847</cbc:ID>
            </cac:PartyIdentification>
            <cac:PartyName>
                <cbc:Name>Monoform d.o.o.</cbc:Name>
            </cac:PartyName>
            <cac:PostalAddress>
                <cbc:StreetName>ULICA 1</cbc:StreetName>
                <cbc:CityName>ZAGREB</cbc:CityName>
                <cbc:PostalZone>10000</cbc:PostalZone>
                <cac:Country>
                    <cbc:IdentificationCode>HR</cbc:IdentificationCode>
                </cac:Country>
            </cac:PostalAddress>
            <cac:PartyTaxScheme>
                <cbc:CompanyID>HR32234297847</cbc:CompanyID>
                <cac:TaxScheme>
                    <cbc:ID>VAT</cbc:ID>
                </cac:TaxScheme>
            </cac:PartyTaxScheme>
            <cac:PartyLegalEntity>
                <cbc:RegistrationName>Monoform d.o.o.</cbc:RegistrationName>
                <cbc:CompanyID>HR32234297847</cbc:CompanyID>
            </cac:PartyLegalEntity>
            <cac:Contact>
                <cbc:ElectronicMail>kupac@example.com</cbc:ElectronicMail>
            </cac:Contact>
        </cac:Party>
    </cac:AccountingCustomerParty>
    <cac:PaymentMeans>
        <cbc:PaymentMeansCode>42</cbc:PaymentMeansCode>
        <cbc:PaymentID>HR00 1229465-2-1849</cbc:PaymentID>
        <cac:PayeeFinancialAccount>
            <cbc:ID>HR9023600001101555388</cbc:ID>
        </cac:PayeeFinancialAccount>
    </cac:PaymentMeans>
    <cac:TaxTotal>
        <cbc:TaxAmount currencyID="EUR">51</cbc:TaxAmount>
        <cac:TaxSubtotal>
            <cbc:TaxableAmount currencyID="EUR">100</cbc:TaxableAmount>
            <cbc:TaxAmount currencyID="EUR">25</cbc:TaxAmount>
            <cac:TaxCategory>
                <cbc:ID>S</cbc:ID>
                <cbc:Percent>25</cbc:Percent>
                <cac:TaxScheme>
                    <cbc:ID>VAT</cbc:ID>
                </cac:TaxScheme>
            </cac:TaxCategory>
        </cac:TaxSubtotal>
        <cac:TaxSubtotal>
            <cbc:TaxableAmount currencyID="EUR">200</cbc:TaxableAmount>
            <cbc:TaxAmount currencyID="EUR">26</cbc:TaxAmount>
            <cac:TaxCategory>
                <cbc:ID>S</cbc:ID>
                <cbc:Percent>13</cbc:Percent>
                <cac:TaxScheme>
                    <cbc:ID>VAT</cbc:ID>
                </cac:TaxScheme>
            </cac:TaxCategory>
        </cac:TaxSubtotal>
    </cac:TaxTotal>
    <cac:LegalMonetaryTotal>
        <cbc:LineExtensionAmount currencyID="EUR">300</cbc:LineExtensionAmount>
        <cbc:TaxExclusiveAmount currencyID="EUR">300</cbc:TaxExclusiveAmount>
        <cbc:TaxInclusiveAmount currencyID="EUR">351</cbc:TaxInclusiveAmount>
        <cbc:PayableAmount currencyID="EUR">351</cbc:PayableAmount>
    </cac:LegalMonetaryTotal>
    <cac:InvoiceLine>
        <cbc:ID>1</cbc:ID>
        <cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
        <cbc:LineExtensionAmount currencyID="EUR">100</cbc:LineExtensionAmount>
        <cac:Item>
            <cbc:Name>Test Artikal</cbc:Name>
            <cac:CommodityClassification>
                <cbc:ItemClassificationCode listID="CG">26.11.11</cbc:ItemClassificationCode>
            </cac:CommodityClassification>
            <cac:ClassifiedTaxCategory>
                <cbc:ID>S</cbc:ID>
                <cbc:Percent>25</cbc:Percent>
                <cac:TaxScheme>
                    <cbc:ID>VAT</cbc:ID>
                </cac:TaxScheme>
            </cac:ClassifiedTaxCategory>
        </cac:Item>
        <cac:Price>
            <cbc:PriceAmount currencyID="EUR">100</cbc:PriceAmount>
            <cbc:BaseQuantity unitCode="EA">1</cbc:BaseQuantity>
        </cac:Price>
    </cac:InvoiceLine>
    <cac:InvoiceLine>
        <cbc:ID>2</cbc:ID>
        <cbc:InvoicedQuantity unitCode="KGM">2</cbc:InvoicedQuantity>
        <cbc:LineExtensionAmount currencyID="EUR">200</cbc:LineExtensionAmount>
        <cac:Item>
            <cbc:Name>Test Artikal 2</cbc:Name>
            <cac:CommodityClassification>
                <cbc:ItemClassificationCode listID="CG">09.10.01</cbc:ItemClassificationCode>
            </cac:CommodityClassification>
            <cac:ClassifiedTaxCategory>
                <cbc:ID>S</cbc:ID>
                <cbc:Percent>13</cbc:Percent>
                <cac:TaxScheme>
                    <cbc:ID>VAT</cbc:ID>
                </cac:TaxScheme>
            </cac:ClassifiedTaxCategory>
        </cac:Item>
        <cac:Price>
            <cbc:PriceAmount currencyID="EUR">100</cbc:PriceAmount>
            <cbc:BaseQuantity unitCode="KGM">1</cbc:BaseQuantity>
        </cac:Price>
    </cac:InvoiceLine>
</Invoice>
📄Upload računa na DOKU server ⚠️ IZMJENJENO POST

AJAX zahtjev - slanje XMLA


⚠️ PROMJENA OD 10.02.2026 ⚠️

ℹ️ Nakon brojnih lutanja oko opcija automatske fiskalizacije i slanja kupcu od sada vrijedi jedno jedino pravilo :
Automatska fiskalizacija i slanje kupcu ovisi isključivo o postavci na DOKU portalu.
Postavke -> Automatska fiskalizacija i slanje e-dokumenata.

Za naknadnu fiskalizaciju ili slanje :
Pogledajte tab "Fiskalizacija računa" niže u dokumentu.
Pogledajte tab "Slanje računa kupcu" niže u dokumentu.

⚠️ PROMJENA OD 15.03.2026 ⚠️

ℹ️ Niti gornja promjena više nije ažurna, po naputku porezne, UPLOAD računa podrazumijeva i automatsku fiskalizaciju.
⚠️ Samim time se i ukidaju dva endpointa :
Za fiskaliziranje računa ('/doku/documents/invoices/outgoing/{id}/fiscalize').
I slanje kupcu ('/doku/documents/invoices/outgoing/{id}/send').

ℹ️xml je BASE64 encodiran XML račun u UBL 2.1 formatu
$.ajax({
    url: '/doku/documents/invoices/upload',
    method: 'post',
    data:  { "xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEludm9pY2UgeG1sbnM..."}
}).done(function (response) {
    console.log(response);
})

⚠️ NOVO OD 06.02.2026 ⚠️

📄 Automatsko ubacivanje PDF priloga u XML račun
ℹ️Ako želite da se automatski generira PDF vizualizacija računa i umetne u XML kao prilog, dodajte parametar ?pdfname=invoice.pdf
ℹ️Opcionalni parametri za PDF:
  • pdfname - ime PDF datoteke (obavezno za aktivaciju funkcije)
  • pdfid - ID reference dokumenta (default: "DODATAK-1")
  • pdfdesc - opis dokumenta (default: "Vizualizacija računa")
⚠️ SENDXMLINVOICE ima autodetekciju dali se radi o Invoice ili CreditNote dokumentu, tako da se na osnovu sadržaja XML-a određuje na koji DOKU endpoint šalje xml. Primjer: /doku/sendxmlinvoice?pdfname=racun.pdf&pdfid=DOC-1&pdfdesc=Račun u PDF formatu Direktno slanje XML-a (plugin će ga automatski BASE64 encodirati):

$.ajax({
    url: 'doku/sendxmlinvoice',
    method: 'post',
    data:  encodeURIComponent(xml)}
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/sendxmlinvoice
file=Racun.XML
text/html;charset=UTF-8 
sequenceDiagram participant App as Vaša app participant HRF as HrFiskalizator participant IER as iEračuni API participant PT2 as Pristupna točka kupca App->>HRF: POST eizvjestavanje/json?action=SEND&soapaction=Invoice&servis=ieapi activate HRF HRF->>HRF: Kreiranje UBL 2.1 XML HRF->>IER: Slanje dokumenta IER->>IER: Dodavanje Soap omotnice i potpisivanje. IER->>PT2: Slanje računa drugoj PT PT2-->>IER: Prihvat SOAP odgovora IER-->>HRF: JSON response sa ID HRF-->>App: { "id": 13065, "message": "Uspješno kreiran zahtjev za obradu dokumenta." } deactivate HRF Note over App,PT2: Račun je sada isporučen

Odgovor HrFiskalizatora

Odgovor HrFiskalizatora je JSON string sa podacima o rezultatu slanja:
{"message":"Uspješno kreiran zahtjev za obradu dokumenta.","id":13065}
Iz odgovora možemo pročitati id koji služi za praćenje statusa slanja i obrade dokumenta.
📄Fiskalizacija računa ⚠️ UKINUTO 15.03.2026 ⚠️ POST
Ako račun želimo fiskalizirati odmah nakon slanja, potrebno je poslati dodatni zahtjev prema HrFiskalizatoru sa dobijenim ID-em dokumenta.:

AJAX fiskalizacija:

$.ajax({
    url: '/doku/documents/invoices/outgoing/{id}/fiscalize',
    method: 'post',
    data: '{}'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/documents/invoices/outgoing/{id}/fiscalize
{}
text/plain;charset=UTF-8
sequenceDiagram participant App as Vaša app participant HRF as HrFiskalizator participant IER as iEračuni API participant CIS as ePorezna App->>HRF: /doku/documents/invoices/outgoing/{id}/fiscalize activate HRF HRF->>IER: Slanje zahtjeva prema iEračuni API activate IER IER->>IER: Dodavanje Soap omotnice i potpisivanje. IER->>CIS: Slanje na poreznu CIS-->>IER: Dohvat odgovora IER-->>HRF: Povrat odgovora deactivate IER HRF-->>App: { "message": "Izlazni račun '1/1/1' je fiskaliziran." } deactivate HRF Note over App,CIS: Račun je sada fiskaliziran

Odgovor HrFiskalizatora

Odgovor HrFiskalizatora je JSON string sa podacima o rezultatu slanja:
{ "message": "Izlazni račun '1/1/1' je fiskaliziran." }
📄Slanje računa kupcu ⚠️ UKINUTO 15.03.2026 ⚠️ POST

AJAX zahtjev

$.ajax({
    url: '/doku/documents/invoices/outgoing/{id}/send',
    method: 'post',
    data: '{}'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/documents/invoices/outgoing/{id}/send
{}
text/html;charset=UTF-8 

primjer odgovora na upit :

{
  "message": "Ulazni račun '1/1/1' je predan na slanje.."
}

📄Evidencija isporuke za koju nije moguće izdati e-račun POST

AJAX zahtjev

xml je BASE64 encodiran XML račun u UBL 2.1 formatu
$.ajax({
    url: '/doku/report/non-einvoice-delivery',
    method: 'post',
    data:  { "xml": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPEludm9pY2UgeG1sbnM..."}
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/report/non-einvoice-delivery
file=C:/hrfiskalizator/isporuka_za_koju_nije_izdan_racun.json
text/plain;charset=UTF-8
ℹ️ Alternativno kao lakše rješenje možemo poslati direktno račun.
*Endpoint možemo koristiti i kao http poziv i razmjenom datoteka.
http
doku/REPORTXMLINVOICE
file=Invoice.xml
text/plain;charset=UTF-8

Odgovor na upit :

{
  "message": "Evidencija isporuke/računa '1/1/1' za koju nije izdan e-račun je uspješna."
}
📄Dohvat detalja izlaznog računa GET

Opcija A: AJAX zahtjev

$.ajax({
    url: '/doku/documents/invoices/outgoing/{id}',
    method: 'get',
}).done(function (response) {
    console.log(response);
    
})

Razmjena datoteka

http
doku/documents/invoices/outgoing/{id}

text/plain;charset=UTF-8
sequenceDiagram participant App as Vaša app participant HRF as HrFiskalizator participant IER as iEračuni API App->>HRF: /doku/documents/invoices/outgoing/{id} activate HRF HRF->>IER: Slanje zahtjeva prema iEračuni API activate IER IER-->>HRF: Povrat odgovora deactivate IER HRF-->>App: { JSON sa podacima } deactivate HRF

Odgovor na upit :

{
  "data": {	
	"id": 1,
	"name": "1/1/1",
	"status": "FISCALIZED",
	"receiver": {
	  "name": "Tvrtka d.o.o.",
	  "oib": "10472637205"
	},
	"issueDate": "2025-10-21",
	"dueDate": "2025-11-04",
	"payableAmount": 1238.5,
	"currency": "EUR"
  }
  }
📄Evidencija naplate izlaznog računa ⚠️ DOPUNJENO 04.01.2026 POST

AJAX zahtjev

⚠️ U međuvremenu je "/mark-paid" promijenjeno u "/payments" , tako da plugin od verzije 2 podržava oba formata!
⚠️ od 01.023.2026. može se slati više izvještaja o plačanju za isti račun, pozitivnih i negativnih.
$.ajax({
    url: '/doku/documents/invoices/outgoing/{id}/mark-paid',
    method: 'post',
    data: '{ "datumNaplate": "2025-10-28", "naplaceniIznos": 808.00,  "nacinPlacanja": "T" }'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/documents/invoices/outgoing/{id}/mark-paid
{ "datumNaplate": "2025-10-28", "naplaceniIznos": 808.00,  "nacinPlacanja": "T" }
text/plain;charset=UTF-8

Odgovor na upit :

{  "message": "Izlazni račun '1/1/1' je označen plaćen."}
📄Preuzimanje izlaznog računa GET

AJAX zahtjev

$.ajax({
    url: '/doku/documents/invoices/outgoing/{id}/export',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/documents/invoices/outgoing/{id}/export

text/plain;charset=UTF-8

Odgovor na upit :

{
  "data": {
	"xml": "BASE 64 UBL Invoice xml"
  }
}
📄Preuzimanje XMLA izlaznog računa NOVO GET

AJAX zahtjev

$.ajax({
    url: '/doku/getxmlinvoice/documents/invoices/outgoing/{id}/export',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
/doku/getxmlinvoice/documents/invoices/outgoing/{id}/export

text/plain;charset=UTF-8

Odgovor na upit :

Vrača XML UBL 2.1 format računa ....
📄Preuzimanje HTML VIZUALIZACIJE izlaznog računa NOVO GET

AJAX zahtjev

$.ajax({
    url: '/doku/getinvoicehtml/documents/invoices/outgoing/{id}/export',
    method: 'get'
}).done(function (response) {
    console.log(response);
})
Vrača HTML sadržaj datoteke

Razmjena datoteka

http
/doku/getinvoicehtml/documents/invoices/outgoing/{id}/export

text/plain;charset=UTF-8
Sprema html u datoteku odgovor.txt
📄Preuzimanje PDFa izlaznog računa NOVO GET

AJAX zahtjev

$.ajax({
    url: '/doku/getinvoicepdf/documents/invoices/outgoing/{id}/export',
    method: 'get'
}).done(function (response) {
    console.log(response);
})
Vrača BASE64 ebcodirani string sa sadržajem PDF datoteke

Razmjena datoteka

http
/doku/getinvoicepdf/documents/invoices/outgoing/{id}/export

text/plain;charset=UTF-8
Sprema pdf u datoteku odgovor.pdf

Ulazni računi

📄Preuzimanje liste ulaznih računa GET

Moguče query opcije

ParametarTip podatkaOpis
pageintbroj stranice
importedFromdatetimeod datuma importa, uključivo taj datum i vrijeme
importedTodatetimedo datuma importa, uključivo taj datum i vrijeme
issueDateFromdateod datuma izdavanja, uključivo taj datum. ISO 8601
issueDateTodatedo datuma izdavanja, uključivo taj datum. ISO 8601
dueDateFromdateod datuma dospijeća, uključivo taj datum. ISO 8601
dueDateTodatedo datuma dospijeća, uključivo taj datum. ISO 8601
Primjer ISO 8601 datuma: 2025-11-29
Primjer ISO 8601 datuma i vremena: 2025-11-29T14:30:00

AJAX zahtjev

$.ajax({
    url: '/doku/documents/invoices/incoming?issueDateFrom=2025-10-01&issueDateTo=2025-10-31&page=1',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http    
doku/documents/invoices/incoming?issueDateFrom=2025-10-01&issueDateTo=2025-10-31&page=1

text/plain;charset=UTF-8

Odgovor na upit :

{
  "data": {
    "page": 1,
    "pageSize": 100,
    "pagesTotal": 1,
    "recordsFrom": 1,
    "recordsTo": 1,
    "recordsTotal": 1,
    "records": [
      {
        "id": 1,
        "status": "FISCALIZED",
        "name": "1/1/1",
        "sender": {
          "name": "Tvrtka d.o.o.",
          "oib": "10472637205"
        },
        "issueDate": "2025-10-21",
        "dueDate": "2025-11-04",
        "payableAmount": 1238.5,
        "currency": "EUR"
      }
    ]
  }
}
📄Preuzimanje detalja ulaznog računa GET

AJAX zahtjev

$.ajax({
    url: '/doku/documents/invoices/incoming/{id}',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/documents/invoices/incoming/{id}

text/plain;charset=UTF-8

primjer odgovora na upit :

{
  "data": {
    "id": 89,
    "name": "17/1/1",
    "sender": {
      "name": "AUTOKAROSERIJA,VL. ALJOŠA KEFELJA",
      "oib": "21888768739"
    },
    "issueDate": "2026-01-08",
    "dueDate": "2026-01-08",
    "payableAmount": 175,
    "currency": "EUR",
    "status": "RECEIVED",
    "history": [
      {
        "status": "DELIVERED",
        "timestamp": "2026-01-08T10:32:26.34"
      },
      {
        "status": "RECEIVED",
        "timestamp": "2026-01-08T16:22:03.93"
      }
    ]
  }
}
📄Fiskalizacija ulaznog računa POST

AJAX zahtjev

$.ajax({
    url: '/doku/documents/invoices/incoming/{id}/fiscalize',
    method: 'post'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/documents/invoices/incoming/{id}/fiscalize
{}
text/plain;charset=UTF-8

primjer odgovora na upit :

{
  "message": "Ulazni račun '1/1/1' je fiskaliziran."
}

📄Preuzimanje ulaznog računa GET

AJAX zahtjev

$.ajax({
    url: '/doku/documents/invoices/incoming/{id}/export',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/documents/invoices/incoming/{id}/export

text/plain;charset=UTF-8

primjer odgovora na upit :

{
  "data": {	
	"id": 1,
	"name": "1/1/1",
	"status": "FISCALIZED",
	"sender": {
	  "name": "Tvrtka d.o.o.",
	  "oib": "10472637205"
	},
	"issueDate": "2025-10-21",
	"dueDate": "2025-11-04",
	"payableAmount": 1238.5,
	"currency": "EUR"
  }
}
📄Preuzimanje XMLA ulaznog računa NOVO GET

AJAX zahtjev

$.ajax({
    url: '/doku/getxmlinvoice/documents/invoices/incoming/{id}/export',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
/doku/getxmlinvoice/documents/invoices/incoming/{id}/export

text/plain;charset=UTF-8

Odgovor na upit :

Vrača XML UBL 2.1 format računa ....
📄Preuzimanje HTML VIZUALIZACIJE ulaznog računa NOVO GET

AJAX zahtjev

$.ajax({
    url: '/doku/getinvoicehtml/documents/invoices/incoming/{id}/export',
    method: 'get'
}).done(function (response) {
    console.log(response);
})
Vrača HTML sadržaj datoteke

Razmjena datoteka

http
/doku/getinvoicehtml/documents/invoices/incoming/{id}/export

text/plain;charset=UTF-8
Sprema html u datoteku odgovor.txt
📄Preuzimanje PDFa ulaznog računa NOVO GET

AJAX zahtjev

$.ajax({
    url: '/doku/getinvoicepdf/documents/invoices/incoming/{id}/export',
    method: 'get'
}).done(function (response) {
    console.log(response);
})
Vrača BASE64 ebcodirani string sa sadržajem PDF datoteke

Razmjena datoteka

http
/doku/getinvoicepdf/documents/invoices/incoming/{id}/export

text/plain;charset=UTF-8
Sprema pdf u datoteku odgovor.pdf
📄Odbijanje ulaznog računa POST

AJAX zahtjev

$.ajax({
    url: '/doku/documents/invoices/incoming/{id}/reject',
    method: 'post',
    data: '{ "datumOdbijanja": "2025-10-28", "vrstaRazlogaOdbijanja": "N",  "razlogOdbijanja": "Krivi primatelj eRačuna"}'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
doku/documents/invoices/incoming/{id}/reject
{ "datumOdbijanja": "2025-10-28", "vrstaRazlogaOdbijanja": "N",  "razlogOdbijanja": "Krivi primatelj eRačuna"}
text/plain;charset=UTF-8
ili
http
doku/documents/invoices/incoming/{id}/reject
file=Odbijanje.txt
text/plain;charset=UTF-8

Odgovor na upit :

{
  "message": "Ulazni račun '1/1/1' je označen odbijen."
}
📄Rad sa CreditNote - Odobrenjima
⚠️ Sve opcije koje su prikazane za rad sa računima su podržane i za rad sa odobrenjima (CreditNote).
Jedina razlika je u URL-u koji umjesto "invoices" koristi "credit-notes".
http
/doku/documents/credit-notes/outgoing/upload
file=Odobrenje.xml
text/xml;charset=UTF-8

👤 Registracija korisnika

📄Registracija korisnika POST

AJAX zahtjev

var data = {
  "company": {
    "name": "Tvrtka d.o.o.",
    "oib": "01234567890",
    "mb": null,
    "street": "Ulica 5",
    "postCode": "21403",
    "city": "Sutivan",
    "country": "HRV",
    "email": "mailtvrtke@example.com",
    "phoneNumber": "+385777000"
  },
  "user": {
    "firstName": "Ime",
    "lastName": "Prezime",
    "email": "mailkorisnika@example.com"
  }
}

$.ajax({
    url: '/doku/accounts',
    method: 'post',
    data: JSON.stringify(data),
    contentType: 'application/json'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
/doku/accounts
File=RegistrationData.json
text/plain;charset=UTF-8

Odgovor na upit :

{
  "message": "Registracija pretinca '01234567890' je uspješna"
  "data":
  {
    "activationNotificationEmail": "mailtvrtke@example.com",
    "password": "11223344",
    "apiToken": "23199e53-acb0-4ea4-a39a-00c765101f22"
  }
}
Registracijske podatke treba spremiti jer su potrebni za aktivaciju računa i pristup API-ju.
📄Formati povratnih podataka

Povrat podataka

ℹ️ Plugin defaultno vrača neizmjenjene podatke primljene od servera DOKU.
Moguče je podesiti u postavkma da format bude konvertiran u INI format ili obićan TEXT format.
U tom slučaju će svi JSON odgovori biti konvertirani u INI ili text format.
Ovo može biti korisno ako vaša aplikacija ne podržava JSON format.

⚠️ Preporučuje se korištenje JSON formata jer sadrži najviše informacija i najlakše se parsira.

ℹ️ Ako poziv prema pluginu učinimo sa parametrom response=xxxxxx,
Samo taj poziv će biti vračen u formatu određenim sa xxxxxx.
Ovo omogućuje da se pojedinačni pozivi vrate u drugačijem formatu od defaultnog.
Na primjer možemo imati defaultno JSON vračanje,
ali poziv za registraciju korisnika može biti vračen u INI formatu.

Podržani formati su:
RAW - vrača originalne podatke.
INI - konvertira podatke u INI format
SIMPLE - konvertira podatke u strukturirani text

RAZNO

💾Spremi račun iz DOKU u lokalnu H2 arhivu GET

AJAX zahtjev

$.ajax({
    url: '/doku/saveIdToLocalArchive/outgoing/450',
    method: 'get'
}).done(function (response) {
    console.log(response);
})

Razmjena datoteka

http
/doku/saveIdToLocalArchive/{direction}/{id}

application/json

Primjer odgovora na upit:

{
  "success": true,
  "id": 450,
  "name": "26-1-27",
  "xmlPath": "1_2026/26-1-27.xml",
  "action": "created"
}
ℹ️ Opis:
  • Endpoint za server-to-server arhiviranje računa iz DOKU u H2 arhivu
  • {direction} - smjer računa: incoming ili outgoing
  • {id} - ID računa u DOKU sustavu
  • Automatski dohvaća metadata i XML iz DOKU
  • Sprema račun u lokalnu H2 arhivu
  • Zahtijeva da je F2ARCHIVE plugin učitan
  • Prednost: Smanjuje mrežni promet sa ~1MB na ~2KB po računu (500x efikasnije)
⚠️ Mogući error odgovori:
  • 400 - Neispravan format URL-a
  • 503 - F2ARCHIVE plugin nije učitan
  • 500 - Greška pri dohvatu iz DOKU ili spremanju u arhivu

HrFiskalizator v78 - 2025 MVV.hr