Jedno povezivanje, zaseban ključ za svaku firmu.
Proizvođač blagajne jednom ugradi podršku za KontAI API. Svaka firma koja koristi tu blagajnu otvara svoj račun i izdaje vlastiti ključ. API iz ključa prepoznaje firmu, povezani program i dopuštene radnje.
| Podatak | Čemu služi |
|---|---|
| Adresa API-ja | Određuje okolinu na koju se program povezuje. |
| API ključ | Tajni podatak za pristup jednoj firmi i odabranim radnjama. |
| Software ID | Automatska oznaka integracije za evidenciju i podršku. Već je vezana uz ključ; ne šaljete je posebno u API zahtjevu. |
Ako vaša blagajna još nema opciju „KontAI”: pošaljite proizvođaču poveznicu na ove upute. Sam unos ključa ne dodaje podršku programu koji još nema implementiranu integraciju.
Provjerava XML i dostavlja ga interno vlastitoj organizaciji ili KontAI testnom primatelju. Nema stvarne AS4/PTS dostave, fiskalizacije, eIzvještavanja ni slanja Poreznoj upravi. Produkcijsko slanje za vanjske integratore još nije aktivno.
Otvorite zaseban demo račun.
- Otvorite registraciju u demo portalu.
- Unesite naziv tvrtke ili obrta, svoj OIB, e-mail adresu i lozinku od najmanje 12 znakova.
- Potvrdite da u testnim dokumentima koristite samo testne podatke i kliknite Otvori sandbox račun.
- Otvorit će se Pregled integracija. Provjerite OIB prikazan uz vašu organizaciju. Taj OIB mora biti i OIB izdavatelja u XML-u.
Demo i produkcija imaju zasebne registracije, prijave, ključeve i dokumente. Postojeća produkcijska prijava ne otvara demo račun. Ako je demo račun već registriran, koristite Prijavi se.
| Okolina | Adresa | Trenutačno dostupno |
|---|---|---|
| Demo | demo-eracuni.kontai.hr | Registracija, ključevi, provjera XML-a i interna testna dostava. |
| Produkcija | eracuni.kontai.hr/integracije | Priprema pristupa, ključevi, provjera XML-a i čitanje postojećih produkcijskih dokumenata svoje firme. Slanje čeka aktivaciju. |
Dodajte program i izdajte API ključ.
- U izborniku otvorite Integracije → Nova integracija. Unesite prepoznatljiv naziv, primjerice „Moja blagajna – razvoj”, i kliknite Kreiraj integraciju.
- Uz integraciju kliknite Izdaj API ključ. Odaberite integraciju, naziv ključa i rok valjanosti.
- Odaberite dopuštenja iz tablice. Za sve primjere u ovom vodiču trebaju vam svih pet demo dopuštenja; u stvarnoj integraciji dodijelite samo ona koja koristite.
- Kliknite Izdaj API ključ i odmah spremite tajni ključ. Počinje s
kt_test_i prikazuje se samo jednom.
| Dopuštenje | Radnja |
|---|---|
validation:write | Provjera XML-a prije slanja. |
invoices:write | Slanje testnog dokumenta. |
invoices:read | Popis poslanih dokumenata, status i izvorni XML. |
inbox:read | Popis dokumenata poslanih vlastitom OIB-u. |
recipients:read | Provjera dopuštenog testnog primatelja. |
Ključ spremite na poslužitelju koji povezuje blagajnu s KontAI-jem. Ne ugrađujte ga u javni web-kod, zajedničku instalaciju aplikacije ili repozitorij. Lozinka za portal ne šalje se uz API pozive.
Ako ključ izgubite, izdajte novi. Ako je otkriven, odmah kliknite Opozovi. Radnja Zamijeni izdaje novi ključ i odmah opoziva stari; novi ključ zatim postavite u svom programu.
Najprije isprobajte slanje u portalu.
- Otvorite Testno slanje i odaberite svoju integraciju.
- Kliknite Učitaj ogledni XML. Portal priprema testni račun s vašim OIB-om izdavatelja i KontAI OIB-om primatelja 99062919827.
- Kliknite Provjeri XML. Ako postoje pogreške, ispravite ih prema prikazanoj poruci.
- Potvrdite da račun sadrži samo testne podatke i kliknite Pošalji u sandbox.
- Otvorite Poslani dokumenti i provjerite status. Interno dostavljeno potvrđuje dostavu unutar demoa.
Kako poslati samome sebi?
U svom XML-u postavite vlastiti OIB kao primatelja. U odjeljku AccountingCustomerParty uskladite EndpointID sa shemom 9934, identifikatore primatelja i ostale podatke o primatelju. Ako je naveden PDV identifikator, njegov format u oglednom dokumentu je HR + OIB. Takav račun vidjet ćete i u Ulaznim dokumentima.
Račun poslan KontAI testnom primatelju ostaje u vašem pregledu poslanih dokumenata; ne pojavljuje se u vašoj ulaznoj pošti. Slanje bilo kojem drugom OIB-u odbija se porukom RECIPIENT_NOT_ALLOWED.
Preuzmite XML za testiranje iz svog programa
U API dokumentaciji, dok ste prijavljeni, kliknite Preuzmi ogledni XML. Spremite ga kao racun.xml. Ogledni račun koristi vaš OIB i testne podatke. Za svaki novi testni račun koristite novi broj dokumenta.
Prvi pozivi iz vašeg programa.
Osnovna demo API adresa je https://demo-eracuni.kontai.hr/api/v1. Pozive šalje vaš poslužitelj. Registracija i upravljanje ključevima rade se u portalu; za poslovne pozive koristite samo rute /api/v1/.
Authorization: Bearer VAS_DEMO_API_KLJUC Content-Type: application/json
Ne šaljite dodatna polja username, password, software_id, environment ili adresu primateljevog servisa. Ključ određuje firmu i integraciju, a adresa API-ja okolinu.
A. Preuzmite gotov primjer za prvi test
Primjer radi uz Node.js 18 ili noviji i ne treba dodatne pakete. Radi na Windowsu, macOS-u i Linuxu. Koristi isključivo demo adresu i odbija produkcijski ključ.
Spremite kontai-demo.mjs i svoj racun.xml u istu mapu. Otvorite terminal u toj mapi. Naredbom node --version provjerite da je Node.js dostupan. Primjer je pomoć za testiranje; u vlastitom sustavu obradite statuse, ponavljanja i pohranu dokumenata.
B. Postavite ključ u trenutačnoj sesiji terminala
Odaberite primjer za svoj terminal. Ključ se pri unosu ne ispisuje na ekran i ne upisujete ga u datoteku programa.
macOS / Linux — Bash ili Zsh
printf 'Zalijepite demo API ključ: ' read -r -s KONTAI_DEMO_API_KEY printf '\n' export KONTAI_DEMO_API_KEY
Windows — PowerShell
$kontaiSecret = Read-Host 'Zalijepite demo API ključ' -AsSecureString
$env:KONTAI_DEMO_API_KEY = [System.Net.NetworkCredential]::new('', $kontaiSecret).Password
Remove-Variable kontaiSecretC. Provjerite vezu i primatelja
node kontai-demo.mjs info node kontai-demo.mjs recipient 99062919827
Prvi poziv mora vratiti environment: "sandbox" i organization_oib vaše firme. Provjera primatelja mora potvrditi internu testnu dostavu. Za provjeru vlastitog primatelja zamijenite broj svojim OIB-om.
D. Provjerite XML pa pošaljite račun
node kontai-demo.mjs validate racun.xml
Nastavite kada odgovor ima valid: true. Provjera obuhvaća UBL XSD, HR pravila i EN16931. Kod pogreške pogledajte issues i ispravite XML.
node kontai-demo.mjs send racun.xml demo-proba-0001
demo-proba-0001 je vaš ključ zahtjeva, odnosno Idempotency-Key. Zapišite ga uz dokument prije prvog slanja. Za svaki novi dokument odaberite novi ključ; kod ponavljanja koristite isti ključ i potpuno isti XML.
Primjer šalje POST /invoices sa sljedećim tijelom. Vrijednost XML-a u stvarnom zahtjevu mora biti JSON string s pravilno kodiranim navodnicima i prijelomima redaka; koristite JSON serializer svojeg jezika.
{
"xml": "CIJELI_UBL_XML_KAO_STRING",
"synthetic_data": true
}E. Provjerite status i preuzmite dokumente
Iz odgovora slanja spremite id. U sljedećoj naredbi zamijenite ID_DOKUMENTA tim identifikatorom.
node kontai-demo.mjs status ID_DOKUMENTA node kontai-demo.mjs outbox node kontai-demo.mjs inbox
Detalj računa sadrži i xml. Ako je status još accepted, provjerite ga ponovno nakon kratke stanke, primjerice dvije sekunde. Nemojte zbog čekanja ponovno kreirati račun. Testni XML čuva se 30 dana; nakon isteka expired je true, a sadržaj XML-a više nije dostupan.
Pregled API poziva
| Metoda i putanja | Tijelo / rezultat | Dopuštenje |
|---|---|---|
GET /info | Firma, okolina i ovlasti ključa. | Važeći ključ |
GET /recipients/{oib} | Dostupnost testnog primatelja. | recipients:read |
POST /validate | {"xml":"…"}; provjerite valid. | validation:write |
POST /invoices | XML + synthetic_data:true; obvezan Idempotency-Key. | invoices:write |
GET /invoices/{id} | Status, podaci i izvorni XML. | invoices:read |
GET /invoices | Vlastiti poslani dokumenti. | invoices:read |
GET /inbox | Interno dostavljeni dokumenti poslani vlastitom OIB-u. | inbox:read |
Putanje u tablici dodaju se na osnovnu adresu /api/v1. Trenutačno nema webhook obavijesti ni filtriranja popisa upitnim parametrima; status dohvaćate GET pozivom. Potpuni ugovor API-ja nalazi se u OpenAPI specifikaciji.
Razlikujte primitak zahtjeva od dostave.
| Odgovor | Značenje i sljedeći korak |
|---|---|
HTTP 202 · accepted | Dokument je zaprimljen u demo. Spremite ID i dohvatite status. |
internal_delivered | Uspješna interna testna dostava. fiscalized:false i institutional_delivery:false ostaju nepromijenjeni. |
HTTP 200 · duplicate:true | Dokument već postoji. Koristite vraćeni ID; nije izrađen drugi račun. |
HTTP 200 · valid:false | Zahtjev za provjeru obrađen je, ali XML ne prolazi pravila. Sama oznaka HTTP 200 ne znači ispravan račun. |
Najčešće pogreške
| HTTP / kod | Što napraviti |
|---|---|
401 · INVALID_API_KEY | Provjerite cijeli Bearer ključ, okolinu, rok valjanosti i je li ključ opozvan. |
403 · INSUFFICIENT_SCOPE | Izdajte ključ s dopuštenjem potrebnim za taj poziv. |
403 · ISSUER_MISMATCH | OIB izdavatelja u XML-u mora odgovarati firmi kojoj ključ pripada. |
403 · RECIPIENT_NOT_ALLOWED | Koristite vlastiti OIB ili 99062919827. Poruka navodi primljeni i dopuštene OIB-e. Kod provjere GET /recipients/{oib} ista zabrana vraća HTTP 404. |
400 · IDEMPOTENCY_KEY_REQUIRED | Dodajte zaglavlje Idempotency-Key: 8–100 znakova, slova, brojevi, točka, podvlaka, dvotočka ili crtica. |
409 · IDEMPOTENCY_CONFLICT | Isti ključ zahtjeva upotrijebljen je za drugi sadržaj. Usporedite izvorni zahtjev; ne zaobilazite pogrešku nasumičnim novim ključem. |
409 · INVOICE_CONFLICT | Dokument istog izdavatelja, vrste, broja i godine već postoji s drugim sadržajem. Provjerite postojeći račun prije ponovnog slanja. |
422 · XML_VALIDATION_FAILED | Pročitajte validation.issues; ispravite prijavljena XSD, HR ili EN16931 pravila. |
422 · SYNTHETIC_DATA_REQUIRED | U demo zahtjevu za slanje mora biti synthetic_data:true, a sadržaj mora biti testni. |
429 · RATE_LIMITED / kvota | Smanjite učestalost. Demo dopušta 100 novih računa u prethodna 24 sata i do 500 računa sa sačuvanim sadržajem. Kod kvote nemojte slati stalne ponovne pokušaje. |
503 · VALIDATOR_BUSY | Pričekajte prema Retry-After zaglavlju. Ponovite neizmijenjen zahtjev i isti ključ slanja. |
Provjerite pregled dokumenata. Za ponovni pokušaj koristite potpuno isti XML i isti Idempotency-Key. Ako već imate ID dokumenta, provjerite njegov status. Automatsko stvaranje novog računa može uzrokovati pogrešnu evidenciju u vašem programu.
Za podršku sačuvajte vrijeme, putanju poziva, HTTP status, error.code i request_id odnosno zaglavlje X-Request-ID. API ključ i lozinku nemojte slati.
Provjerite cijeli tijek.
- Identitet:
GET /infoprikazuje očekivani OIB i sandbox okolinu. - Ispravan račun: XML prolazi validaciju i dobiva ID.
- KontAI primatelj: račun završava kao
internal_delivered. - Vlastiti primatelj: račun se vidi i u ulaznim dokumentima.
- Zabranjeni primatelj: drugi OIB dobiva
RECIPIENT_NOT_ALLOWED, bez slanja. - Neispravan XML ili iznos: pogreška je vidljiva korisniku, a slanje se zaustavlja.
- Ponovljeni zahtjev: isti ključ i sadržaj vraćaju isti ID bez drugog računa.
- Izmijenjeni zahtjev: isti ključ s drugim XML-om vraća 409.
- Opozvani ključ: novi zahtjev vraća 401.
- Odvojene firme: korisnik druge firme ne vidi vaše račune.
U svom programu vodite zasebno status slanja, dostave i, kada bude podržano u produkciji, fiskalizacije i eIzvještavanja. Demo uspjeh potvrđuje samo opisani testni tijek.
Produkciju pripremite zasebno.
Produkcijski API omogućuje provjeru XML-a i čitanje postojećih produkcijskih dokumenata vlastite firme. POST /api/v1/invoices vraća 409 PRODUCTION_NOT_ACTIVE. Račun se tim pozivom ne sprema niti šalje.
- Otvorite Produkcijske integracije i registrirajte zaseban račun ili se prijavite postojećim produkcijskim računom.
- Potvrdite e-mail, provjerite OIB i podatke firme te dovršite prihvat ugovora u portalu.
- Dodajte program i izdajte zaseban produkcijski ključ
kt_live_. Trenutačno dostupne ovlasti suvalidation:write,invoices:readiinbox:read. - Kad portal ispuni preduvjete, kliknite Zatraži produkcijsku aktivaciju. Zahtjev odlazi KontAI timu.
- Potvrda adrese zaprimanja i ovlaštenja u FiskAplikaciji, provjera firme te otvaranje produkcijske razmjene dovršavaju se zasebno. Sam zahtjev KontAI timu ne šalje ovlaštenje Poreznoj i ne uključuje slanje.
Produkcijska osnovna adresa je https://eracuni.kontai.hr/api/v1. Vaš program mora imati jasno odvojenu konfiguraciju, ključeve i evidenciju za svaku okolinu. Ogledni klijent iz ovog vodiča namjerno radi samo na demo adresi.
Kratki odgovori prije povezivanja.
Moram li upisati i Software ID i API ključ?
U API zahtjevu koristite ključ. Software ID i firma već su povezani s njim; ne šaljete ih kao zasebne podatke za prijavu.
Imamo jednu blagajnu i 100 klijenata. Treba li 100 integracija?
Programsku podršku za KontAI razvijate jednom. Svaka firma zatim u svom računu dodaje integraciju i izdaje vlastiti ključ. Trenutačni portal ne koristi jedan zajednički ključ za sve firme. Na svom poslužitelju ključ odabirete prema firmi koja izdaje račun.
Smijem li slati na bilo koji OIB u demou?
Demo dopušta samo vaš OIB i KontAI testni OIB 99062919827. Provjera je na poslužitelju; promjena XML-a ili API parametara ne može uključiti drugog primatelja ili produkcijsku okolinu.
Je li testni račun fiskaliziran ili poslan na MPS?
Ovaj demo koristi internu dostavu. Ne poziva MPS, AMS, AS4/PTS ni Poreznu upravu. „Interno dostavljeno” ne predstavlja potvrdu fiskalizacije.
Zašto u ulaznim dokumentima nema računa poslanog KontAI-ju?
Ulazni pregled prikazuje testove poslane vlastitom OIB-u. Račun za KontAI testnog primatelja pratite među poslanim dokumentima.
Kako dobiti pomoć za konkretnu grešku?
Pošaljite podrska@kontai.hr opis koraka, okruženje, vrijeme, HTTP status i identifikator zahtjeva. Priložite samo testne podatke potrebne za provjeru; uklonite ključ i lozinku.