Serbia's eOtpremnica: Connecting Your ERP, WMS and TMS by 1 October 2027

From 1 October 2027, every movement of goods between two VAT-registered private companies in Serbia needs an electronic delivery note, the eOtpremnica, sent through the Ministry of Finance system before the goods leave. The company receiving them has to confirm receipt in the same system within days, and the carrier has to be able to show the note during an inspection.
That covers sales deliveries, returns and transfers between your own warehouses. The delivery note stops being a form your ERP prints. It becomes a UBL file that goes through a state API, comes back with an identifier and a QR code, and then moves through a status workflow on both sides.
Who Needs to Read This
If you invoice and ship from Minimax, BizniSoft or Pantheon, your vendor already ships eOtpremnica support. If your volume is low enough to type notes into the Ministry's free web portal or its mobile app, that works too. Read the section on receipt deadlines, train the people at the dock, and you are mostly done.
This article is for the other group: distributors, manufacturers, wholesalers and carriers whose despatch and goods receipt run through their own ERP, a customised WMS, a TMS, or an e-shop back end that books B2B orders. Nobody is going to ship you an update. You have to build the integration.
What Already Applies and What Changes
The Law on Electronic Delivery Notes (Zakon o elektronskim otpremnicama) dates from 2024 and has been amended twice since. The latest amending law, published in Službeni glasnik 80/2026 on 31 August 2026, kept the October 2027 date. The Ministry's FAQ and the consolidated text set out the stages.
Since 1 January 2026:
- Private companies send and receive eOtpremnica for excise goods: tobacco, nicotine products, coffee, alcoholic drinks and petroleum products.
- Private companies send it for any goods delivered to a public-sector entity, and public-sector entities send it for their own movements.
- Carriers present the note for those movements.
The production system has run since 30 December 2025. The demo environment, meant for testing internal software, has been open since 5 March 2025.
From 1 October 2027:
- The sending obligation where sender and recipient are both private-sector entities and the goods are not excise goods.
- The obligation of every private-sector entity to receive.
- Carriers presenting the note for those movements.
A few details catch people out. A transfer between two warehouses inside the same factory compound needs an internal note (type Int in the XML) if the goods change address and use a public road. An import needs an internal note from the place where you acquired the right of disposal, or in some cases the customs office, to your warehouse. An export typically needs one to the point where the forwarder takes over. Retail sales under the fiscalisation law are exempt, so an e-shop selling against fiscal receipts is out of scope for those orders. Its wholesale side is not.
The August amendment also says that until 1 January 2027, supervisors will not take data errors in sent notes and receipts into account. That helps the excise and public-sector senders. It does nothing for October 2027.
Could the date move? The law has been amended twice in under two years, so further change is possible. But the amendment that just passed kept the date. Plan for it.
The Receipt Step Is Where the Deadlines Are
Sending is the easy half. The consolidated law puts the hard deadlines on the receiving side.
- Before the goods move, the sender sends the note. Until the recipient confirms physical receipt, the sender can cancel it, giving a reason.
- Physical receipt must be confirmed on the day the goods are taken over, or at the latest three working days after receipt began.
- Within eight days of that confirmation, the recipient accepts or rejects the delivery, in full or in part, by sending an ePrijemnica (electronic receipt note).
- A private-sector recipient that sends nothing in eight days is deemed to have rejected the delivery in full. For a public-sector recipient it is the opposite: silence means accepted.
- On a partial acceptance, the sender has 30 days from the e-receipt arriving to agree to the differences. Otherwise it is treated as having rejected the e-receipt in full.
- A note with no physical receipt confirmation ceases to be valid 30 days after the movement started.
Once both sides agree, the documents reach the status Usaglašeno (Fulfilled in the API) and nothing can change after that.
Missing the physical receipt deadline is a listed offence: 200,000 to 2,000,000 dinars for the company and 50,000 to 150,000 dinars for the responsible person. The same range applies to not sending a note at all.
The practical conclusion: physical receipt belongs at the dock, in the WMS, at the moment the goods are booked in. If it waits for someone reconciling at month end, the deadline has already passed.
What to Build Against the Ministry API
The technical documentation describes a REST API exchanging UBL 2.1 XML. The eOtpremnica is a DespatchAdvice, the ePrijemnica a ReceiptAdvice, and every other step (cancellation, start of transport, change of vehicle, physical receipt, accepting or rejecting an e-receipt) is an ApplicationResponse with a numeric code. The Ministry ran a workshop for the IT sector on 5 December 2025 on document types, the XML extensions, submission and webhooks.
Sending
Every document goes to one endpoint, POST /public/documents/requests, with a unique request ID of your own. Processing is asynchronous. The result arrives later, by webhook or by polling /public/documents/requests/changes, which reports each request as pending, succeeded or failed, with the business errors attached.
So your ERP needs an outbox: a record per note, a state machine, and a retry path that does not create duplicates. The system rejects a document number that already exists for your company, which helps, but only if your numbering stays stable across retries.
The error list in the Ministry's API FAQ shows where the data work is:
- The issue date must be today, in Serbian time. No backdating, and no holding yesterday's notes in a queue overnight.
- Every address (yours, the customer's, the carrier's, loading and unloading points) needs a street and a city.
- For own transport, a carrier, or the recipient's transport, the carrier, vehicle registration and transport means are mandatory. Own transport also requires switching on carrier status for your company.
- Quantities carry a unit of measure code. Lines are numbered from 1. A GTIN, if given, is digits only.
- The recipient must be registered and active.
GET /public/companies/statuschecks a PIB before you send.
Master data is usually a bigger job than the XML. A validator endpoint lets you test documents before submission, and it belongs in your test suite.
Receiving and the warehouse
Incoming notes arrive through /public/documents/customers/changes, polled per date at 1,000 changes a page, or by webhook. The webhook subscription is per day: a call to /public/webhook-notifications/subscribe covers the next day. Run it as a scheduled job, alert when it fails, and keep the pull endpoint as a nightly reconciliation so a missed push does not turn into a missed deadline.
Each incoming note should land in the WMS as an expected receipt, with the supplier's item codes mapped to yours. When the goods are booked in, the WMS sends the physical receipt action. After the quantity and quality checks it sends the ePrijemnica: per line, the quantity that arrived and the quantity rejected and returned on the same vehicle. The system will not accept a rejected quantity above the received one.
The Ministry's own role model is a useful template. Its warehouse role can list and download incoming notes and confirm physical receipt. That is the right shape for a WMS permission too.
As a sender you also receive the other side's e-receipt and must accept or reject it. Track the 30-day agreement window in the ERP, not in someone's inbox.
Linking to SEF e-invoices
Linking a delivery note to an e-invoice in SEF is optional. Once a note is sent and its actual dispatch time has passed, SEF can link one or more notes to one e-invoice, and the invoice does not have to wait for the receipt workflow to finish. If your three-way match of order, delivery and invoice already runs in the ERP, the link gives your customer's accounts payable the same evidence. Our e-invoicing integration work covers the SEF side.
Carriers and the road
The driver can show the note from the Ministry's carrier app. If the carrier is not a system user, the sender prints the note, the carrier signs it before departure, and the sender uploads the signed copy before the goods move. Since the August amendment, a carrier that cannot use the system may instead show the QR code generated when the note was sent; the sender then attaches the printable view before departure. Your TMS needs to produce whichever of these your carriers use, and the API returns the QR code on its own for labels.
For an outage there is a paper fallback: three printed copies with security hologram stickers from the National Bank of Serbia's Topčider mint, recorded in the system by the next working day. Buy the stickers before you need them.
How the API Key Works
The legal representative registers the company, signing in through the state eID portal. Keys are then created in the web interface (Settings, API settings, Admin module, API keys). Demo and production are separate environments, so plan for keys in both.
The key identifies the company. The API FAQ is blunt: you cannot send documents on behalf of another company, and the system recognises the company by the API key it presents. In practice:
- A group with five legal entities needs five keys and a router that picks the right one by PIB.
- A shared service centre or a software house cannot push every client through one key.
- Keys belong in a secrets store with an owner and a rotation procedure, not in a config file on the ERP server.
A 12-Month Plan
It is October 2026. Working back from 1 October 2027:
October to December 2026: inventory and access.
- List every movement type: sales, returns, inter-warehouse transfers, imports, exports, own fleet, third-party carriers, customer pickup.
- Register the company in production and get demo API keys.
- Start cleaning master data: addresses, partner PIBs and registration numbers, carriers, vehicles, units of measure.
January to March 2027: the sending path.
- Generate the DespatchAdvice from shipments, with the outbox, asynchronous status tracking and error handling.
- Daily webhook subscription job plus pull reconciliation.
- Validator runs in CI against the demo environment.
April to June 2027: receiving and receipt.
- Incoming notes into the WMS as expected receipts.
- Physical receipt at the dock, ePrijemnica after checks, alerts on day two of three and day six of eight.
- Accept and reject handling for the e-receipts you get as a sender. SEF linking, if you want it.
July to September 2027: the road and the pilot.
- Carrier flow, printing and QR, the offline procedure with stickers on site.
- Run real notes in production with partners who have registered; private companies may already use the system voluntarily.
- Train warehouse staff and drivers. Freeze changes in September.
Twelve months is comfortable for one legal entity with clean data. It is tight for a group with several entities, several warehouses and master data nobody has touched in years.
Where to Get Help
C9 Group has an office in Novi Sad, so Serbian rules are home ground for us. We build the integration itself: UBL generation, the API client, webhook handling and the warehouse receipt workflow inside your existing ERP, WMS or e-shop back end. See our ERP modernisation service, or write to office@c9group.dev.