/v1/einvoices/sendSlanje eRačuna
Pošaljite strukturirani eRačun (B2B ili B2G) kroz FINA infrastrukturu. FiskalAPI generira UBL 2.1 XML, potpisuje ga, i dostavlja primatelju.
Od 1. siječnja 2026.
eRačuni postaju obavezni za sve B2B i B2G transakcije u Hrvatskoj. Svaki račun prema drugoj firmi ili državnoj instituciji mora biti poslan kao strukturirani eRačun kroz ovlaštenog posrednika.
eRačun vs Fiskalizacija
eRačun (F2) — za B2B i B2G, šalje se asinkrono kroz FINA infrastrukturu.
Fiskalizacija (F1) — za gotovinske/kartične račune, šalje se realtime Poreznoj.
Ako fakturirate firmama i primate gotovinu/karticu, trebate oba.
Request
{
"invoice_number": "ER-2026-0001",
"issue_date": "2026-01-04",
"due_date": "2026-01-19",
"seller": {
"oib": "12345678901",
"name": "Moja Firma d.o.o.",
"address": "Ilica 1",
"city": "Zagreb",
"postal_code": "10000",
"country": "HR",
"iban": "HR1234567890123456789",
"email": "[email protected]"
},
"buyer": {
"oib": "98765432109",
"name": "Kupac d.o.o.",
"address": "Vukovarska 2",
"city": "Split",
"postal_code": "21000",
"country": "HR",
"email": "[email protected]"
},
"items": [
{
"name": "Usluge razvoja softvera",
"description": "Razvoj web aplikacije - siječanj 2026",
"quantity": 40,
"unit": "HUR",
"unit_price": 75.00,
"tax_rate": 25,
"kpd": "J62.01.11"
},
{
"name": "Hosting i održavanje",
"quantity": 1,
"unit": "MON",
"unit_price": 200.00,
"tax_rate": 25,
"kpd": "J63.11.12"
}
],
"payment_reference": "HR00 2026-0001",
"note": "Hvala na suradnji!",
"attachments": [
{
"filename": "specifikacija.pdf",
"mime_type": "application/pdf",
"data": "base64_encoded_content..."
}
],
"metadata": {
"project_id": "PRJ-123",
"contract": "UGV-2025-456"
}
}Seller objekt (prodavatelj)
| Parametar | Tip | Obavezno | Opis |
|---|---|---|---|
oib | string | Da | Vaš OIB (11 znamenki) |
name | string | Da | Puni naziv tvrtke |
address | string | Da | Ulica i kućni broj |
city | string | Da | Grad |
postal_code | string | Da | Poštanski broj |
country | string | Da | ISO kod države (HR) |
iban | string | Da | IBAN za primanje uplate |
email | string | Ne | Email za kontakt |
Buyer objekt (kupac)
Isti format kao seller, bez IBAN-a (nije obavezan za kupca).
Stavke računa (items)
| Parametar | Tip | Obavezno | Opis |
|---|---|---|---|
name | string | Da | Naziv stavke |
description | string | Ne | Detaljniji opis |
quantity | number | Da | Količina |
unit | string | Da | Jedinica mjere (UN/ECE kod) |
unit_price | number | Da | Cijena bez PDV-a (EUR) |
tax_rate | number | Da | PDV stopa (25, 13, 5, 0) |
kpd | string | Da* | KPD šifra — obavezno za B2G! |
Jedinice mjere (UN/ECE)
Najčešće korištene jedinice:
| Kod | Značenje | Primjer |
|---|---|---|
C62 | Komad (piece) | Proizvodi, licence |
HUR | Sat (hour) | Konzultacije, rad |
DAY | Dan | Dnevnice, najam |
MON | Mjesec | Pretplate, SaaS |
KGM | Kilogram | Težinski proizvodi |
MTR | Metar | Materijali |
LTR | Litra | Tekućine |
Response
Uspješan odgovor (202 Accepted)
{
"id": "einv_xyz789abc123",
"status": "pending",
"invoice_number": "ER-2026-0001",
"seller_oib": "12345678901",
"buyer_oib": "98765432109",
"amounts": {
"subtotal": 3200.00,
"tax_25": 800.00,
"total": 4000.00,
"currency": "EUR"
},
"submitted_at": "2026-01-04T14:30:00Z",
"estimated_delivery": "2026-01-04T14:35:00Z",
"tracking_url": "https://api.fiskalapi.hr/v1/einvoices/einv_xyz789/track",
"xml_url": "https://api.fiskalapi.hr/v1/einvoices/einv_xyz789/xml",
"pdf_url": "https://api.fiskalapi.hr/v1/einvoices/einv_xyz789/pdf"
}Asinkrono slanje
eRačuni se šalju asinkrono. Status pending znači da je račun prihvaćen i čeka dostavu primatelju. Koristite webhook ili polling za praćenje statusa.
Statusi eRačuna
| Status | Značenje | Sljedeći koraci |
|---|---|---|
pending | Čeka slanje FINA-i | Čekajte, automatski prelazi u submitted |
submitted | Poslano FINA-i | Čeka dostavu primatelju |
delivered | Dostavljeno primatelju | Primatelj može prihvatiti/odbiti |
accepted | Primatelj prihvatio | Račun je uspješno dostavljen |
rejected | Primatelj odbio | Provjerite razlog odbijanja |
failed | Greška pri slanju | Provjerite error i pokušajte ponovno |
Primjeri koda
cURL
curl -X POST https://sandbox.fiskalapi.hr/v1/einvoices/send \
-H "Authorization: Bearer sk_sandbox_abc123..." \
-H "Content-Type: application/json" \
-d '{
"invoice_number": "ER-2026-0001",
"issue_date": "2026-01-04",
"due_date": "2026-01-19",
"seller": {
"oib": "12345678901",
"name": "Moja Firma d.o.o.",
"address": "Ilica 1",
"city": "Zagreb",
"postal_code": "10000",
"country": "HR",
"iban": "HR1234567890123456789"
},
"buyer": {
"oib": "98765432109",
"name": "Kupac d.o.o.",
"address": "Vukovarska 2",
"city": "Split",
"postal_code": "21000",
"country": "HR"
},
"items": [{
"name": "Konzultantske usluge",
"quantity": 10,
"unit": "HUR",
"unit_price": 100.00,
"tax_rate": 25,
"kpd": "M70.22.11"
}]
}'JavaScript (Node.js)
import FiskalAPI from '@fiskalapi/node';
const fiskal = new FiskalAPI(process.env.FISKALAPI_KEY);
try {
const einvoice = await fiskal.einvoices.send({
invoice_number: 'ER-2026-0001',
issue_date: '2026-01-04',
due_date: '2026-01-19',
seller: {
oib: '12345678901',
name: 'Moja Firma d.o.o.',
address: 'Ilica 1',
city: 'Zagreb',
postal_code: '10000',
country: 'HR',
iban: 'HR1234567890123456789'
},
buyer: {
oib: '98765432109',
name: 'Kupac d.o.o.',
address: 'Vukovarska 2',
city: 'Split',
postal_code: '21000',
country: 'HR'
},
items: [
{
name: 'Usluge razvoja softvera',
quantity: 40,
unit: 'HUR',
unit_price: 75.00,
tax_rate: 25,
kpd: 'J62.01.11'
}
],
payment_reference: 'HR00 2026-0001'
});
console.log('eRačun ID:', einvoice.id);
console.log('Status:', einvoice.status);
console.log('Ukupno:', einvoice.amounts.total, 'EUR');
console.log('PDF:', einvoice.pdf_url);
console.log('XML:', einvoice.xml_url);
} catch (error) {
console.error(`Greška ${error.code}: ${error.message}`);
}Python
from fiskalapi import FiskalAPI, FiskalAPIError
import os
fiskal = FiskalAPI(os.environ['FISKALAPI_KEY'])
try:
einvoice = fiskal.einvoices.send(
invoice_number='ER-2026-0001',
issue_date='2026-01-04',
due_date='2026-01-19',
seller={
'oib': '12345678901',
'name': 'Moja Firma d.o.o.',
'address': 'Ilica 1',
'city': 'Zagreb',
'postal_code': '10000',
'country': 'HR',
'iban': 'HR1234567890123456789'
},
buyer={
'oib': '98765432109',
'name': 'Kupac d.o.o.',
'address': 'Vukovarska 2',
'city': 'Split',
'postal_code': '21000',
'country': 'HR'
},
items=[{
'name': 'Usluge razvoja softvera',
'quantity': 40,
'unit': 'HUR',
'unit_price': 75.00,
'tax_rate': 25,
'kpd': 'J62.01.11'
}],
payment_reference='HR00 2026-0001'
)
print(f'eRačun ID: {einvoice.id}')
print(f'Status: {einvoice.status}')
print(f'Ukupno: {einvoice.amounts.total} EUR')
print(f'PDF: {einvoice.pdf_url}')
except FiskalAPIError as e:
print(f'Greška {e.code}: {e.message}')Webhooks
Kada se status eRačuna promijeni, FiskalAPI šalje webhook na vaš endpoint:
{
"event": "einvoice.delivered",
"einvoice_id": "einv_xyz789abc123",
"invoice_number": "ER-2026-0001",
"status": "delivered",
"delivered_at": "2026-01-04T14:32:15Z",
"recipient_system": "FINA eRačun"
}Dostupni webhook eventi:
einvoice.submitted— poslano FINA-ieinvoice.delivered— dostavljeno primateljueinvoice.accepted— primatelj prihvatioeinvoice.rejected— primatelj odbioeinvoice.failed— greška pri slanju
Greške
| HTTP | Kod | Opis |
|---|---|---|
400 | invalid_request | Neispravan JSON ili nedostaju parametri |
400 | invalid_oib | OIB prodavatelja ili kupca nije valjan |
400 | invalid_iban | IBAN nije valjan |
400 | missing_kpd | KPD šifra obavezna za B2G račune |
422 | buyer_not_registered | Primatelj nije registriran za eRačune |
503 | fina_unavailable | FINA sustav trenutno nedostupan |
KPD šifre
KPD (Klasifikacija proizvoda po djelatnostima) šifre su obavezne za B2G računei preporučene za B2B. Koristite naš KPD pretraživač ili API endpoint /v1/kpd/search za pronalaženje ispravne šifre.