Dnevnik promjena
2026-10-07: GET /api/v1/payouts/ready vraća stranice
Promjena strukture postojeće krajnje točke koja nije unatrag kompatibilna.
- Odgovor je standardna omotnica sa stranicama.
GET /api/v1/payouts/readyvraća{ items, page, pageSize, total, totalPages }kao i sve ostale krajnje točke s popisima, umjesto golog niza. Retci unutaritemssu nepromijenjeni. - Parametri upita
pageipageSize. Zadano jepage1 ipageSize20, najviše 100. Dohvaćajte stranice dok ne budepage >= totalPagesda pročitate sve unose spremne za isplatu. - Pročitajte sve stranice prije isplate. Isplaćeni unosi nestaju s popisa, pa se preostali
unosi pomiču na ranije stranice. Prvo pročitajte sve stranice, uklonite duplikate
prema
id, a tek onda izradite isplatu krozPOST /api/v1/payouts. Isplata stranicu po stranicu preskače unose. - Redoslijed je nepromijenjen. Posljednji odobreni unosi dolaze prvi.
2026-10-05: vehicleId na troškovima koji nisu kilometraža se zanemaruje
Promjena ponašanja postojećih krajnjih točaka; struktura nepromijenjena.
- Vozilo zadržavaju samo troškovi kilometraže.
POST /api/v1/travel-entries/{id}/expenses,PUT /api/v1/travel-entries/{id}/expenses/{expenseId}iexpensesuPOST /api/v1/travel-entriesspremaju trošak goriva, cestarine, parkiranja, smještaja ili ostali trošak bez vozila, a svako čitanje za njega vraćavehicle: null.vehicleIdposlan uz takav trošak dosad se spremao i vraćao u odgovoru. - Postojeće vrijednosti se brišu. Pri nadogradnji se uklanja vozilo spremljeno na
postojećim troškovima koji nisu kilometraža, pa i oni vraćaju
vehicle: null. - Vozilo izvan vaše tvrtke odbija se na svakoj vrsti troška. Ako
vehicleIdoznačava vozilo izvan vaše tvrtke, API vraća 400VALIDATION_FAILED, i za troškove koji nisu kilometraža. Za te su troškove krajnje točke za pojedini trošak dosad spremalevehicleIdbez provjere. Arhivirano službeno vozilo na trošku koji nije kilometražaPOST /api/v1/travel-entriesviše ne odbija; ondje se zanemaruje kao i svako drugo vozilo.
2026-10-03: izrada vozila odbija nepoznati type
Promjena ponašanja na postojećoj krajnjoj točki; struktura nepromijenjena.
POST /api/v1/vehicless vrijednošćutypeizvanCompanyiPersonalvraća 400. Brojčana vrijednost poput2(uklonjena vrsta za javni prijevoz) dosad se spremala. Sada se odbija odgovorom 400VALIDATION_FAILEDpoderrors.Type, kao što to već radiPUT /api/v1/vehicles/{id}.
2026-10-03: nova dozvola ManageVehicles za izmjene vozila
Nova vrijednost enuma i promjene dozvola na postojećim krajnjim točkama za vozila; struktura nepromijenjena.
ManageVehiclesuCompanyPermissions. Nova atomička zastavica za vođenje službenih vozila: sama vozila, njihovi troškovi, dokumenti, rokovi i podsjetnici e-poštom. Odgovori za zaposlenike i webhook poruke navode je kao svaku drugu zastavicu, a svakiCompanyAdminsada je ima.ManageCompanyDatai dalje pokriva odjele, mjesta troška i tečajeve, ali više ne pokriva vozila.- Operacije izmjene vozila zahtijevaju
ManageVehicles.POST /api/v1/vehicles,PUT /api/v1/vehicles/{id},DELETE /api/v1/vehicles/{id},POST /api/v1/vehicles/{id}/archiveiPOST /api/v1/vehicles/{id}/unarchivevraćaju 403 pozivatelju bez nje, bez obzira na ostale dozvole. Svaki zaposlenik koji je prije ovog izdanja imaoManageCompanyDatadobio jeManageVehicles, pa nijedan postojeći korisnik ne gubi pristup. - Čitanje privatnih vozila drugih zaposlenika traži
ManageVehicles.GET /api/v1/vehiclesiGET /api/v1/vehicles/{id}vraćaju privatna vozila drugih zaposlenika samo pozivatelju s dozvolomManageVehiclesiliEditAllEntries(dosadManageCompanyData). - Vratite cijelu listu. Klijent koji odbacuje nepoznata imena zastavica i zatim
zapiše dozvole zaposlenika natrag uklanja tom zaposleniku
ManageVehicles. Zadržite nepoznata imena kad dozvole šaljete natrag. - Unaprijed definirana uloga Upravitelj vozila (
FleetManager) u zahtjevima. Upis dozvola prihvaćaFleetManager, koji server sprema kaoReadAllEntriesiManageVehicles. Izlaz ostaje lista atomičkih zastavica.
2026-10-03: snaga motora na vozilima
Dodano polje API-ja; bez promjene strukture.
enginePowerKwna vozilima. Zahtjevi za kreiranje i ažuriranje vozila primaju neobaveznu najveću snagu motora kao cijeli broj u kilovatima (polje P.2 prometne dozvole, od 1 do 2000), a vraćaju je i odgovor s detaljima vozila i popis vozila. Kod ažuriranja izostavljanje zadržava pohranjenu vrijednost, a0je briše.
2026-10-03: oštećeni bajtovi slike u multipart prilozima vraćaju 400
Promjena ponašanja dviju postojećih krajnjih točaka; struktura nepromijenjena.
POST /api/v1/travel-entriesmultipart prilog s oštećenim bajtovima slike vraća 400. Prilog čiji je prijavljeni tip slika, ali čiji se bajtovi ne mogu dekodirati kao slika, dosad je završavao s 500. Sada se odbija odgovorom 400VALIDATION_FAILEDpoderrors.attachments, istom strukturom kao svaki drugi odbijeni tip priloga.POST /api/v1/travel-entries/{id}/attachmentss istim oštećenim bajtovima slike također vraća 400. Krajnja točka za prilaganje dosad je u tom slučaju isto završavala s 500. Sada se odbija odgovorom 400VALIDATION_FAILEDpoderrors.File, istom strukturom kao svaki drugi odbijeni tip priloga.
2026-10-02: brisanje vozila odbija vozilo u upotrebi, nova krajnja točka za arhiviranje
Promjena ponašanja postojeće krajnje točke i jedna nova krajnja točka; bez promjene strukture.
DELETE /api/v1/vehicles/{id}vraća 409 za vozilo u upotrebi. Vozilo koje se nalazi na trošku putnog naloga ili ima uneseni trošak više se ne arhivira umjesto brisanja. Obrisani putni nalozi te uklonjeni troškovi ne računaju se, pa se vozilo može obrisati kad se ukloni s troškova putnih naloga i obrišu njegovi troškovi. Zahtjev se odbija odgovorom 409CONFLICTi vozilo ostaje nepromijenjeno. Vozilo bez takvih zapisa, arhivirano ili ne, i dalje se briše uz odgovor 204.POST /api/v1/vehicles/{id}/archive. Arhivira vozilo, u upotrebi ili ne, i vraća ga sisArchived: true. Tako se arhivira vozilo koje brisanje odbija. Arhiviranje arhiviranog vozila ništa ne mijenja;POST /api/v1/vehicles/{id}/unarchivega poništava. Potrebno je isto dopuštenjeManageCompanyDatakao za brisanje.
2026-09-28: zastarjelo nadjačavanje izvan noćnog pojasa
Zastarjela polja; bez promjene strukture.
nightOffWindowOverrideinightOverrideReasonna paušalima putnog naloga. Oba polja ostaju u odgovoru, jedan element po noći, ali svaki je element sadafalseodnosnonull. Nadjačavanje koje su prikazivala je ukinuto: odgovor za noć kraću od šest sati daje se kroznightAllocationi nikakvo nadjačavanje ne mijenja iznos. Prestanite ih čitati; mogu biti uklonjena u nekoj od sljedećih verzija.
2026-09-28: ulazni podaci za cijenu goriva na troškovima kilometraže
Dodana polja u ugovoru; bez promjene strukture.
fuelUnitPriceOverrideimileagePetrolGradena troškovima. Zahtjevi za kreiranje i ažuriranje troška primaju oba polja, uključujući troškove unutar zahtjeva za kreiranje putnog naloga, a svaki odgovor s troškom ih vraća, i unutar putnog naloga.fuelUnitPriceOverrideje cijena goriva po litri (po kWh za električno vozilo) dokazana računom, u osnovnoj valuti tvrtke; na stavci kilometraže u CZ ili SK zamjenjuje propisanu prosječnu cijenu u komponenti goriva.mileagePetrolGrade(Octane95iliOctane98) odabire propisanu prosječnu cijenu za Natural 95 ili Natural 98 u CZ za vlastito vozilo na benzin bez cijene s računa. Svako se polje sprema samo tamo gdje utječe na obračun stavke, a drugdje jenull. Ažuriranje je potpuna zamjena: ako ih izostavite, stavka se ponovno obračunava po propisanoj prosječnoj cijeni, za benzin po cijeni Naturala 95, pa pošaljite vrijednosti koje je trošak vratio da biste zadržali cijenu s računa ili benzin 98.
2026-09-16 — mjesta troška na zaposlenicima
Dodano polje u ugovoru; bez promjene strukture.
costCenterIdsna zaposlenicima. Odgovori s detaljima i popisom zaposlenika vraćaju mjesta troška koja zaposlenik smije teretiti, a zahtjevi za kreiranje i ažuriranje zaposlenika ih primaju. Prazan popis znači bez ograničenja — dostupna su sva aktivna mjesta troška tvrtke. Kod kreiranja izostavljanje polja jednako je slanju praznog popisa. Kod ažuriranja izostavljanje čuva pohranjeni popis, prazan popis ga briše, a popis s vrijednostima ga zamjenjuje u cijelosti. Svaki id mora pripadati vašoj tvrtki, inače se zahtjev odbija s 400. Dodavanje mjesta troška izvan popisa na putni nalog i dalje se odbija s 400 — upravo zbog tog odbijanja polje i postoji. Ograničenje vrijedi samo za dodavanje: već dodijeljena mjesta troška ne uklanjaju se naknadno kad mjesto troška nestane s popisa. Pri zapisivanju se primjenjuje sigurnosna granica od 100 različitih mjesta troška po zaposleniku — duplikati se broje jednom, a shema granicu objavljuje kaomaxItemsu oba tijela zahtjeva. Ona kontrolira veličinu zahtjeva i nije poslovno ograničenje: popis može navesti samo mjesta troška koja tvrtka doista ima, pa vas u praksi neće ograničiti.
2026-09-13 — iznosi dnevnica po itineraru prema zakonskom vremenu
Ispravljeni iznosi na postojećim endpointima dnevnica po itineraru; bez promjene strukture.
- Izračun dnevnica po itineraru i
from-itinerary. Vrijednostitimepostaja i dalje se čitaju kao UTC, a vraćeni intervali i dalje su u UTC-u. Češkim i slovačkim tvrtkama kalendarski dani sada se dijele u ponoć po praškom odnosno bratislavskom vremenu umjesto u ponoć po UTC-u. Poljske tvrtke noći (21:00–07:00), doby i datume računa broje po varšavskom vremenu. Isti zahtjev za ta tržišta zato može vratiti drukčije sate i iznose nego prije.
2026-09-12 — category je neobavezan kod ažuriranja vozila
Ublaženo polje u postojećem zahtjevu; bez promjene strukture.
categorykod ažuriranja vozila. Polje je sada neobavezno. Ako ga izostavite, pohranjena kategorija ostaje nepromijenjena; pošaljite ga kad ju želite promijeniti, uključujući0za namjerno brisanje. Kod kreiranja je polje i dalje obavezno.
2026-08-23 — obujam motora na vozilima
Dodano polje API-ja; bez promjene strukture.
engineCapacityCcna vozilima. Zahtjevi za kreiranje i ažuriranje vozila primaju neobavezni obujam motora kao cijeli broj u kubičnim centimetrima, a vraćaju ga i odgovor s detaljima vozila i popis vozila. Kod ažuriranja izostavljanje zadržava pohranjenu vrijednost, a0je briše.
2026-08-17 — locked sada javlja zaključavanje dokumenata
Ispravljena semantika vrijednosti postojećeg polja odgovora; bez promjene strukture.
lockedu odgovorima za detalje i popis putnih naloga prije je javljalo samo starije zaključavanje iz uvoza prije 2023., a ostajalo jefalseza dokumente zaključane u aplikaciji, uključujući automatsko zaključavanje primijenjeno pri isplati. Sada nosi isto izvedeno stanje zaključanosti koje webhookentry.updatedveć javlja uisLocked:truekad god je dokument zatvoren za pisanje. Shvatite to kao “ovaj unos nije moguće mijenjati”, a ne kao oznaku određenog izvora zaključavanja.
2026-07-13 — place id-ovi, ručni tečajevi, nadjačavanja dnevnica, smjer tečaja
Dodatna, unatrag kompatibilna polja ugovora te novi diskriminator tečaja.
- Place id-ovi na putnim nalozima. Zahtjevi za kreiranje i ažuriranje
primaju
departureLocationPlaceIdidestinationPlaceId(Google Placesplace_id), a odgovor putnog naloga ih vraća. Vratite pohranjene vrijednosti kod ažuriranja s potpunom zamjenom kako biste sačuvali identitet mjesta pri izmjeni teksta odredišta. - Odredišna država na putnim nalozima. Zahtjevi primaju neobavezni
destinationCountryCode(ISO 3166-1 alpha-2). Kada se navede, pohranjuje se izravno i preskače se poslužiteljski geocoding rezervni mehanizam. - Ručni tečajevi. Zahtjevi za troškove i dnevnice primaju neobavezni
manualExchangeRate, a zahtjevi putnog nalogamanualAdvanceExchangeRateza predujam. Svaki se uvažava samo kada pružatelj tečaja ne objavi tečaj za referentni datum; slanje dok postoji službeni tečaj odbija se sEXCHANGE_RATE_UNAVAILABLE. - Nadjačavanja dnevnica. Zahtjev za dnevnicu prima
overrideAmountioverrideReason, a modeli čitanja dnevnice ih vraćaju. Da biste zadržali postojeće nadjačavanje kod ažuriranja s potpunom zamjenom, vratite vrijednosti natrag; njihovo izostavljanje briše nadjačavanje i vraća na zakonsku isplatu. - Smjer tečaja.
GET /api/v1/reference/exchange-ratessada nosidirectiondiskriminator:ForeignPerBase(HNB / ECB) znači dijeliti tečaj za pretvorbu u baznu valutu,BasePerForeign(CNB) znači množiti.
2026-07-08 — datum predujma, pružatelj tečaja za CZ/SK
Dvije dodatne, unatrag kompatibilne promjene.
- Datum predujma na putnim nalozima. Zahtjevi za kreiranje i ažuriranje
sada primaju neobavezni
advancePaymentDate(yyyy-MM-dd), a odgovor putnog naloga ga vraća. Kada se izostavi pri kreiranju, poslužitelj koristi datum naloga. Određuje datum tečaja za predujam i, za češke tenante, referentni datum tečaja za dnevnice. - Pružatelj tečaja za CZ/SK.
GET /api/v1/reference/exchange-ratessada dokumentira potpuni skup pružatelja: HNB za HR, ECB za SI i SK, CNB za CZ. Poljesourcemože biti"CNB", abaseCurrencyje referentna valuta pružatelja (EUR za HNB/ECB, CZK za CNB). Ponašanje je nepromijenjeno; dokumentacija sada odgovara izvršavanju.
2026-06-11 — brojevi obroka po vrsti, podrijetlo tečaja, kod za nedostupan tečaj
Tri dodatne promjene površine. Sve su unatrag kompatibilne: postojeći zahtjevi i dalje rade nepromijenjeno, a nova polja u odgovorima su dodaci koje možete zanemariti dok vam ne zatrebaju.
- Brojevi obroka po vrsti na kreiranju/ažuriranju dnevnice. Zahtjevi za
dnevnice sada primaju
breakfastsProvided,lunchesProvidedidinnersProvided(cjelobrojni brojevi obroka po vrsti) te neobaveznu raspodjelu po danumealsProvidedAllocation. Oni su kanonski model za upis: poslužitelj iz tih brojeva ponovno izračunava umanjenje. Postojeći v1 zbirnimealsProvidedi dalje se prihvaća; kad polja po vrsti nedostaju, poslužitelj mapira zbroj kao i prije, pa stariji klijenti nisu zahvaćeni. Odgovori i dalje vraćaju izvedenimealsProvided(ručak + večera, oblik HR Pravilnika) uz brojeve po vrsti, pa su putanje čitanja nepromijenjene. - Podrijetlo tečaja u odgovorima. Odgovori za troškove i dnevnice dobivaju
exchangeRateSource, a odgovor putnog naloga dobivaadvancePaymentExchangeRateSource, koji bilježi odakle dolazi primijenjeni tečaj: kod davatelja ("HNB","ECB") za službeni tečaj,"MANUAL"za ručno uneseni tečaj, ilinullza redak u istoj valuti (bez konverzije) ili stariji redak spremljen prije praćenja podrijetla. Samo za čitanje, bez promjene zahtjeva. - Novi kod greške
EXCHANGE_RATE_UNAVAILABLE(HTTP 400). Javlja se kad davatelj tečaja tenanta ne objavljuje tečaj za valutu na traženi datum i ne postoji povijesni tečaj na koji bi se moglo osloniti. Greška je iz obitelji provjera sa standardnimerrorstijelom po poljima, pa možete specifično razlučiti slučaj nedostupnog tečaja i zatražiti ručni tečaj. Dodano u katalog grešaka.
2026-05-23 — vremena dnevnica iz itinerara spremaju se kao pravi UTC (ispravak)
Vremena dnevnica spremljena putem
POST /api/v1/travel-entries/{id}/per-diems/from-itinerary sada se spremaju kao
pravi UTC trenuci. Ranije se polazak/dolazak svake dionice spremao s vrijednošću
zidnog sata označenom kao UTC bez pomaka (lokalna dionica u 08:00 spremala se
kao 08:00Z umjesto 07:00Z/06:00Z), pa su retci generirani iz itinerara
odstupali od ručno dodanih za 1–2 sata i prikazivali se s kašnjenjem. Sheme
zahtjeva i odgovora su nepromijenjene, no vrijednosti departureTime/arrivalTime
koje ovaj endpoint vraća (i koje vraćaju kasnija čitanja istih redaka) sada
odražavaju ispravljeni UTC trenutak. Kalkulator za pregled i dalje vraća vremena
zidnog sata. Iznosi dnevnica nisu zahvaćeni.
2026-05-23 — kalkulator dnevnica + spremanje cijelog puta
Površina za izračun dnevnica je objedinjena i dobiva paritet spremanja cijelog puta s locco web aplikacijom.
- Novo
POST /api/v1/utilities/per-diems/calculate— kalkulator bez stanja. Pošaljite itinerar (jedna dionica = itinerar s dvije postaje) i dobijte natrag izračunate retke, uz primijenjenu preraspodjelu na razini itinerara. Bez konteksta naloga, ništa se ne sprema. - Novo
POST /api/v1/travel-entries/{id}/per-diems/from-itinerary— ponovno izradite dnevnice putnog naloga iz itinerara u jednom pozivu. Poslužitelj ponovno pokreće vlastiti mehanizam nad postajama (poslanim se iznosima nikad ne vjeruje), primjenjuje obroke po dionici vezane ključem(countryCode, departureTime)(parovi koje vraća kalkulator), zatim atomarno zamjenjuje dnevnice naloga. Time se reproduciraju preraspodjela na razini itinerara i nadogradnje domaćih jedinica koje slanje redaka jedan po jedan ne može. - Uklonjeno
POST /api/v1/travel-entries/{id}/per-diems/computeiPOST /api/v1/per-diems/calculate-simple. Oba su obuhvaćena sutilities/per-diems/calculate— jedna dionica je samo itinerar s dvije postaje. Premjestite integracije na novi kalkulator.
2026-05-22 — Podrška za slovensko tržište
Inicijalna podrška za slovenske tenante. Ažurirajte klijent iz osvježenog
OpenAPI snapshota na /hr/api-reference/:
- Slovenske općine — novi
GET /api/v1/reference/slovenian-municipalitiesvraća SURS popis općina za padajuće izbornike mjesta na slovenskim putnim nalozima. Može se pozvati s bilo kojeg tenanta. - Porezna rezidentnost zaposlenika — zapisi o zaposlenicima dobivaju
polje
residency(Resident/NonResident) za slovenske dnevnice i izvještavanje o porezu na plaće. Zadana vrijednost jeResident.
2026-04-28 — v1.0 izlazi
Prvo stabilno izdanje locco partner API-ja. Sve površine su povezane,
tipizirane i pokrivene OpenAPI snapshotom na
/api-reference/:
- Putni unosi — potpuni CRUD i akcije toka odobrenja (predaja, odobrenje, odbijanje, otkazivanje, traženje izmjena), uz atomično kreiranje s ugniježđenim troškovima, dnevnicama, raspodjelama na mjesta troška i privitcima u jednom pozivu.
- Privitci — direktan prijenos na putni unos kroz
POST /api/v1/travel-entries/{id}/attachments. Multipart, do 5 datoteka po zahtjevu. - Webhooks — registracija pretplate s jednokratnim prikazom signing-secret-a, povijest isporuka po pretplati i endpoint za ponovni pokušaj neuspjelih ili iscrpljenih isporuka.
- Isplate — popis unosa spremnih za isplatu, kreiranje serija, povijest, brisanje serije.
- Zaposlenici, Odjeli, Vozila, Mjesta troška — CRUD i popisi, uz prilagođena polja na zaposlenicima.
- Reference — hrvatske općine, HNB tečajne liste, tablica dnevnica, popisi dopuštenih država i valuta tvrtke.
- Tvrtka — čitanje profila.
Vrijednosti enumeracija za Status, TravelType, PayoutMethod i
ostale dokumentirane su u OpenAPI shemi kao enum: [...] popisi
dopuštenih vrijednosti, pa se generirani klijenti vežu na kanonske
nizove ("PendingApproval", "BankTransfer" itd.) umjesto na
neprozirne vrijednosti.