SUPER plugin omogućava slanje i primanje elektroničkih računa (eRačuni) putem SUPER (DB Informatika) platforme, u skladu s hrvatskim zakonodavnim okvirom za B2B eRačune.
http://localhost:8449/super/...https://apitest.super.hr ili https://api.super.hr).MessageId (UUID) i CompanyGuid iz konfiguracije.
?oib= je opcionalan?oib=12345678901 je obavezan uz svaki poziv
/super/ping
Provjerava je li plugin aktivan. Ne komunicira s SUPER API-jem. (i ujedno obnavlja token za aktivni oib)
const res = await fetch('/super/ping');
const txt = await res.text();
console.log(txt);
{
"message": "SUPER plugin OK",
"version": 1,
"mode": "PRODUKCIJSKI",
"endpoint": "https://api.super.hr"
}
/super/version ili /super/verzija
Vraća verziju plugina kao plain text.
/super/getmode
Vraća koji SUPER server je u upotrebi (TEST ili PRODUCTION).
const res = await fetch('/super/getmode');
const txt = await res.text();
// npr. "TEST" ili "PRODUCTION"
TEST
/super/getusermode
Vraća trenutni user mode i informaciju o obaveznosti OIB parametra.
{
"userMode": "SINGLEUSER",
"isMultiUser": false,
"description": "OIB parameter is optional, uses active OIB if not provided"
}
/super/accounts ili /super/getaccounts
Vraća listu svih konfiguriranih accounta (OIB + naziv tvrtke).
const res = await fetch('/super/accounts');
const list = await res.json();
// [{oib, naziv}, ...]
[
{ "oib": "12345678901", "naziv": "Firma d.o.o." },
{ "oib": "98765432109", "naziv": "Druga d.o.o." }
]
/super/getactiveaccount
Vraća trenutno aktivni account.
{
"userMode": "SINGLEUSER",
"oib": "12345678901",
"naziv": "Firma d.o.o.",
"companyGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
/super/setactiveoib?oib=12345678901
Postavlja aktivni account prema OIB-u. Primjenjuje se samo u SINGLEUSER modu.
| Parametar | Status | Opis |
|---|---|---|
oib | OBAVEZNO | OIB tvrtke koja mora biti konfigurirana u pluginu |
const res = await fetch('/super/setactiveoib?oib=12345678901');
const data = await res.json();
{
"success": true,
"oib": "12345678901",
"naziv": "Firma d.o.o.",
"message": "Active OIB set"
}
/super/account[?oib=...]
Vraća detalje o accountu: OIB, naziv, companyGuid, username.
{
"oib": "12345678901",
"naziv": "Firma d.o.o.",
"companyGuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"username": "korisnik@firma.hr"
}
/super/sendxmlinvoice[?oib=...&UblDocumentType=1&pdfname=racun.pdf]
Šalje UBL 2.1 XML račun prema SUPER platformi. Plugin automatski Base64 enkodira XML i poziva SendingInvoice/SendSendingInvoiceUbl endpoint SUPER API-ja.
| Parametar | Tip | Status | Opis |
|---|---|---|---|
| Body | text/plain (XML) | OBAVEZNO | UBL 2.1 Invoice ili CreditNote XML kao plain text (URL-encoded POST body) |
oib |
string | OPCIONALNO* | OIB pošiljatelja (* obavezno u MULTIUSER modu) |
UblDocumentType |
integer | OPCIONALNO | 1 = Invoice (default), 2 = CreditNote |
pdfname |
string | OPCIONALNO | Ako je zadano, automatski se generira PDF vizualizacija i umeće u XML kao cac:AdditionalDocumentReference prilog |
pdfid |
string | OPCIONALNO | ID dokumenta referenci (default: DODATAK-1) |
pdfdesc |
string | OPCIONALNO | Opis priloga (default: Vizualizacija računa) |
MessageId (UUID) i CompanyGuid u tijelo zahtjeva prema SUPER API-ju. Klijent ih ne treba slati.
const xmlContent = '<?xml version="1.0"...>';
const res = await fetch('/super/sendxmlinvoice?oib=12345678901', {
method: 'POST',
headers: { 'Content-Type': 'text/plain; charset=UTF-8' },
body: xmlContent
});
const data = await res.json();
console.log(data);
const res = await fetch(
'/super/sendxmlinvoice?oib=12345678901&pdfname=racun-001.pdf',
{
method: 'POST',
headers: { 'Content-Type': 'text/plain; charset=UTF-8' },
body: xmlContent
}
);
const data = await res.json();
{
"MessageId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ErrorMessage": null,
"Guid": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
}
{
"MessageId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"ErrorMessage": "Račun s tim brojem već postoji"
}
/super/getxmlinvoice/{direction}/{guid}[?oib=...]
Dohvaća originalni UBL 2.1 XML računa s SUPER platforme. SUPER API vraća XML Base64 enkodiran unutar JSON odgovora – plugin automatski dekodira i vraća čisti XML klijentu.
| Parametar | Status | Opis |
|---|---|---|
direction |
OBAVEZNO | outgoing = izlazni račun (→ SendingInvoice/GetSendingInvoice)incoming = ulazni račun (→ Invoice/GetInvoice) |
guid |
OBAVEZNO | GUID računa (iz liste računa) |
oib |
OPCIONALNO* | OIB (* obavezno u MULTIUSER modu) |
const guid = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
const res = await fetch(
'/super/getxmlinvoice/outgoing/' + guid + '?oib=12345678901'
);
const xml = await res.text();
// Content-Type: application/xml; charset=UTF-8
const guid = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
const url = '/super/getxmlinvoice/incoming/' + guid + '?oib=12345678901';
const a = document.createElement('a');
a.href = url;
a.download = 'racun.xml';
a.click();
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" ...>
...
</Invoice>
sendingInvoiceUBL / invoiceUBL), vraća se HTTP 404 s JSON greškom.
/super/getinvoicepdf/{direction}/{guid}[?oib=...]
Dohvaća PDF računa koji je umetnut kao cac:AdditionalDocumentReference prilog u UBL XML-u (Base64 enkodiran, mimeCode="application/pdf"). Ako XML ne sadrži PDF prilog, endpoint ne vraća ništa korisno.
const guid = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
const res = await fetch(
'/super/getinvoicepdf/outgoing/' + guid + '?oib=12345678901'
);
const blob = await res.blob();
// Content-Type: application/pdf
const url = '/super/getinvoicepdf/incoming/' + guid + '?oib=12345678901';
const a = document.createElement('a');
a.href = url;
a.download = 'racun.pdf';
a.click();
/super/nativevizualizacija/{direction}/{guid}[?oib=...]
Dohvaća PDF vizualizaciju računa direktno od SUPER API-ja (GetSendingInvoiceDetailVisualization / GetInvoiceDetailVisualization). PDF je generiran na strani SUPER servera.
| Parametar | Status | Opis |
|---|---|---|
direction |
OBAVEZNO | outgoing → sendingInvoiceDetailVisualizationincoming → invoiceDetailVisualization |
guid |
OBAVEZNO | GUID računa |
oib |
OPCIONALNO* | OIB (* obavezno u MULTIUSER modu) |
const guid = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
const res = await fetch(
'/super/nativevizualizacija/outgoing/' + guid + '?oib=12345678901'
);
const blob = await res.blob();
const url = URL.createObjectURL(blob);
window.open(url, '_blank');
// Content-Type: application/pdf
const url = '/super/nativevizualizacija/incoming/'
+ guid + '?oib=12345678901';
const a = document.createElement('a');
a.href = url;
a.download = 'vizualizacija.pdf';
a.click();
{
"error": "Vizualizacija nije dostupna. Polje sendingInvoiceDetailVisualization nije u odgovoru."
}
/super/getinvoicehtml/{direction}/{guid}[?oib=...]
Dohvaća XML računa s SUPER-a, a zatim generira HTML vizualizaciju putem HrFiskalizator internog generatora (invoice_creator.php?html=true). Korisno za prikaz računa u browseru.
const guid = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
const res = await fetch(
'/super/getinvoicehtml/outgoing/' + guid + '?oib=12345678901'
);
const html = await res.text();
// Content-Type: text/html; charset=UTF-8
document.getElementById('preview').innerHTML = html;
const url = '/super/getinvoicehtml/incoming/'
+ guid + '?oib=12345678901';
document.getElementById('iframe').src = url;
/super/getinvoicevisualization/{direction}/{guid}[?oib=...]
Dohvaća XML računa s SUPER-a, a zatim generira PDF vizualizaciju putem HrFiskalizator internog generatora (invoice_creator.php). PDF se generira lokalno na strani HrFiskalizatora.
const guid = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
const res = await fetch(
'/super/getinvoicevisualization/outgoing/' + guid + '?oib=12345678901'
);
const blob = await res.blob();
// Content-Type: application/pdf
Ovi endpointi se prosljeđuju direktno prema SUPER API-ju putem generičkog proxy mehanizma.
/super/Invoice/GetInvoiceList[?oib=...]
Dohvaća listu ulaznih (primljenih) računa.
/super/SendingInvoice/GetSendingInvoiceList[?oib=...]
Dohvaća listu izlaznih (poslanih) računa.
| Parametar | Tip | Status | Opis |
|---|---|---|---|
DateFrom |
string (datum) | OPCIONALNO | Datum od (npr. 2026-01-01) |
DateTo |
string (datum) | OPCIONALNO | Datum do (npr. 2026-01-31) |
const res = await fetch(
'/super/Invoice/GetInvoiceList?oib=12345678901',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
DateFrom: '2026-01-01',
DateTo: '2026-01-31'
})
}
);
const data = await res.json();
const list = data.invoices || [];
const res = await fetch(
'/super/SendingInvoice/GetSendingInvoiceList?oib=12345678901',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
DateFrom: '2026-01-01',
DateTo: '2026-01-31'
})
}
);
const data = await res.json();
const list = data.sendingInvoices || [];
{
"MessageId": "...",
"invoices": [
{
"guid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"uniqueId": "HR-...",
"number": "1-1-1",
"issueDate": "2026-01-15T00:00:00",
"supplier": "Dobavljač d.o.o.",
"supplierOib": "11111111111",
"payableAmount": 1234.56,
"invoiceStatus": 10
}
]
}
{
"MessageId": "...",
"sendingInvoices": [
{
"guid": "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy",
"uniqueId": "HR-...",
"number": "2026-1-1",
"issueDate": "2026-01-20T00:00:00",
"customer": "Kupac d.o.o.",
"customerOib": "22222222222",
"payableAmount": 500.00,
"sendingInvoiceStatus": 40
}
]
}
/super/downloadperiodtoserverfolder?targetfolder=...&smjer=...&odDatuma=...&doDatuma=...[&oib=...]
Dohvaća listu računa za zadani vremenski period i automatski sprema svaki UBL XML na disk na strani servera (tamo gdje radi HrFiskalizator). Korisno kada su server i klijent isto računalo, ili za automatiziranu arhivaciju bez ručnog ZIP-preuzimanja.
| Parametar | Tip | Status | Opis |
|---|---|---|---|
targetfolder |
string | OBAVEZNO | Apsolutni path foldera na serveru (npr. C:\Racuni\2026 ili /var/racuni). Folder će se automatski kreirati ako ne postoji. |
smjer |
string | OPCIONALNO | incoming (ulazni, default) ili outgoing (izlazni) |
odDatuma |
string (datum) | OPCIONALNO | Datum od (format: YYYY-MM-DD), npr. 2026-01-01 |
doDatuma |
string (datum) | OPCIONALNO | Datum do (format: YYYY-MM-DD), npr. 2026-01-31 |
oib |
string | OPCIONALNO* | OIB accounta – obavezan u MULTIUSER modu |
GetInvoiceList ili GetSendingInvoiceList)invoiceUBL / sendingInvoiceUBL (Base64 → XML)targetfolder pod imenom {broj_računa}.xml (znakovi / i \ u broju se zamjenjuju s _)mkdirs()) ako ne postojiconst qs = new URLSearchParams({
oib: '12345678901',
targetfolder: 'C:\\Racuni\\2026-01',
smjer: 'incoming',
odDatuma: '2026-01-01',
doDatuma: '2026-01-31'
});
const res = await fetch(
'/super/downloadperiodtoserverfolder?' + qs,
{ method: 'POST' }
);
const data = await res.json();
{
"success": true,
"smjer": "incoming",
"folder": "C:\\Racuni\\2026-01",
"downloaded": 42,
"failed": 0
}
{
"success": true,
"smjer": "outgoing",
"folder": "C:\\Racuni\\2026-01",
"downloaded": 39,
"failed": 3,
"failedList": [
"2026-1-7",
"2026-1-15",
"2026-1-28"
]
}
localStorage i dostupni su kao autocomplete lista.
EReporting endpointi se prosljeđuju direktno prema SUPER API-ju putem generičkog proxy mehanizma.
/super/EReporting/RejectInvoice[?oib=...]
Odbija ulazni račun s razlogom. Koristi se samo za ulazne (incoming) račune.
| Parametar | Tip | Status | Opis |
|---|---|---|---|
Guid |
string | OBAVEZNO | GUID računa koji se odbija |
RejectReasonType |
integer | OBAVEZNO | 1 = Pogrešan račun, 2 = Dupliciran račun, 11 = Ostalo |
RejectionReasonDescription |
string | OPCIONALNO | Tekstualni opis razloga odbijanja |
const res = await fetch(
'/super/EReporting/RejectInvoice?oib=12345678901',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
Guid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
RejectReasonType: 1,
RejectionReasonDescription: 'Pogrešan iznos'
})
}
);
const data = await res.json();
{
"MessageId": "...",
"ErrorMessage": null
}
/super/EReporting/AddPaymentForSendingInvoice[?oib=...]
Evidentira uplatu za izlazni račun. Koristi se samo za izlazne (outgoing) račune.
| Parametar | Tip | Status | Opis |
|---|---|---|---|
Guid |
string | OBAVEZNO | GUID računa |
PaymentDate |
string (datum) | OBAVEZNO | Datum uplate (npr. 2026-01-20) |
PaymentAmount |
decimal | OBAVEZNO | Iznos uplate u EUR |
PaymentMethod |
integer | OBAVEZNO | 1 = Transakcijski račun, 2 = Obračunsko plaćanje, 11 = Ostalo |
MarkAsPaidInFull |
boolean | OPCIONALNO | Označi kao u potpunosti plaćeno |
const res = await fetch(
'/super/EReporting/AddPaymentForSendingInvoice?oib=12345678901',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
Guid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
PaymentDate: '2026-01-20',
PaymentAmount: 1234.56,
PaymentMethod: 1,
MarkAsPaidInFull: true
})
}
);
const data = await res.json();
{
"MessageId": "...",
"ErrorMessage": null
}
/super/token[?oib=...]
Prisilno osvježava Bearer token za aktivni account i vraća novi token. Token se inače osvježava automatski pri svakom proxy pozivu.
const res = await fetch('/super/token?oib=12345678901');
const data = await res.json();
{
"oib": "12345678901",
"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6...",
"message": "Token refreshed"
}
/super/{api-path}[?oib=...&response=INI|SIMPLE|RAW]
Svi pozivi koji ne odgovaraju specifičnim endpointima (gore navedenim) prosljeđuju se direktno prema SUPER API-ju. Plugin automatski dodaje:
MessageId – UUID generiran za svaki pozivCompanyGuid – iz konfiguracije za aktivni OIBAuthorization: Bearer ... header (automatski refresh)?response= u query stringu override-a format odgovora:RAW – originalni JSON (default)INI – key=value flat formatSIMPLE – samo ključna polja (MessageId, ErrorMessage, Guid, UniqueId + primitivi)
// Npr. dohvat detalja računa direktno
const res = await fetch(
'/super/SendingInvoice/GetSendingInvoice?oib=12345678901',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ Guid: 'xxxxxxxx-...' })
}
);
const data = await res.json();
const res = await fetch(
'/super/SendingInvoice/GetSendingInvoice?oib=12345678901&response=INI',
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ Guid: 'xxxxxxxx-...' })
}
);
const ini = await res.text();
// MessageId=xxxxxxxx-...
// Guid=yyyyyyyy-...
?response= se uklanja iz query stringa prije prosljeđivanja prema SUPER API-ju – ne propagira se dalje.
/super/getinvoicestatuses
Vraća sve enum vrijednosti kao JSON objekt – statusi ulaznih/izlaznih računa, načini plaćanja i razlozi odbijanja.
const res = await fetch('/super/getinvoicestatuses');
const data = await res.json();
{
"outgoing": {
"10": "Račun u stanju nacrta",
"40": "Poslano",
"50": "Greška kod slanja",
"55": "Nemogućnost dostave",
"60": "Dostavljeno",
"90": "Odbijeno",
"100": "Djelomično plaćeno",
"110": "Plaćeno"
},
"incoming": {
"10": "Zaprimljeno",
"40": "Odbijeno"
},
"paymentMethods": {
"1": "Transakcijski račun",
"2": "Obračunsko plaćanje",
"11": "Ostalo"
},
"rejectReasons": {
"1": "Neusklađenost koja ne utječe na obračun poreza",
"2": "Neusklađenost koja utječe na obračun poreza",
"11": "Ostalo"
}
}
| Kod | Opis |
|---|---|
10 | Račun u stanju nacrta |
40 | Poslano |
50 | Greška kod slanja |
55 | Nemogućnost dostave |
60 | Dostavljeno |
90 | Odbijeno |
100 | Djelomično plaćeno |
110 | Plaćeno |
| Kod | Opis |
|---|---|
10 | Zaprimljeno |
40 | Odbijeno |