SEF eFaktura Integration: A Guide for Serbian Businesses
By Nemanja Vukmirović, Lizzard Solutions. Last updated November 4, 2026.
Your team types every invoice twice: once in your own software and once on the SEF portal. Incoming invoices sit unnoticed until someone remembers to log in, and a missed deadline turns an approval into an automatic rejection.
This guide explains SEF eFaktura integration for Serbian businesses: who has to use the Serbian e-invoicing system, the three ways to connect to it, how the API connection works step by step, and the mistakes that most often break it.
TL;DR
- Since January 1, 2023, Serbian private-sector companies must issue and receive B2B invoices through SEF, the Ministry of Finance e-invoicing system.
- You can work in the SEF web portal, use accounting software that already connects to SEF, or build a direct API integration into your own system.
- A direct integration needs an eID login, an API key with API status set to active, testing on the demo environment first, and handling of incoming invoices and status changes.
What Is SEF eFaktura Integration?
SEF eFaktura integration is a connection between your business software (ERP, webshop, CRM or accounting tool) and SEF, the Serbian Ministry of Finance system for electronic invoices. Through its API, your software sends sales invoices, downloads purchase invoices and tracks their status automatically, so nobody has to retype them in the SEF web portal.
SEF stands for Sistem elektronskih faktura. It runs at efaktura.mfin.gov.rs, with a separate demo environment for testing. According to the Ministry of Finance, invoices sent and received through SEF have the status of valid, credible documents from the moment a company registers.
Key takeaway
Integration doesn't change your legal obligations. It changes who does the work: your software instead of a person copying data between two screens.
Action for today: list every system in your company where invoices are created today. Each one is a candidate for integration.
Who Must Use SEF and Since When?
Serbia introduced e-invoicing in phases under the Law on Electronic Invoicing (Zakon o elektronskom fakturisanju). The key dates, as published by the Ministry of Finance and summarized by Paragraf:
| Date | Obligation |
|---|---|
| May 1, 2022 | Public-sector entities receive and store e-invoices; private companies issue e-invoices to the public sector |
| July 1, 2022 | Private-sector companies receive and store e-invoices from public and private issuers |
| January 1, 2023 | Private-sector companies issue and store e-invoices in transactions with each other (B2B) |
Retail sales to consumers are generally outside the obligation, with exceptions. Amendments that apply to tax periods after March 31, 2026 clarified retail rules and opened the door for private companies to receive European-standard e-invoices directly. Check the current text of the law or ask your accountant for your exact case.
A related system is now arriving too. Electronic delivery notes (e-otpremnice) became mandatory from January 1, 2026 for the public sector and excise goods. The general B2B phase starts on October 1, 2027, according to Paragraf's e-otpremnica overview. If you integrate now, plan your architecture so the same connection can later handle delivery notes.
Not legal advice
This article explains the technical side of SEF integration. For your tax and legal obligations, rely on the official text of the law, the Ministry of Finance and your accountant.
Action for today: confirm with your accountant whether your company issues invoices only to businesses, also to the public sector, or to consumers.
3 Ways to Connect Your Business to SEF
There's no single right option. It depends on how many invoices you issue and where your data lives.
| Option | Best for | Trade-offs |
|---|---|---|
| 1. Manual work in the SEF portal | Very few invoices per month | No setup, but every invoice is typed or uploaded by hand and incoming ones must be checked manually |
| 2. Accounting or invoicing software that already connects to SEF | Most small businesses with standard invoicing | Quick to start; you paste an API key into the software. Limited if your sales data lives in another system |
| 3. Direct API integration with your own system | Webshops, ERPs, custom platforms and high invoice volume | Invoices flow automatically from where they are created; needs development, testing and maintenance |
Option 3 is a classic case of connecting two systems through an API. Our API integration guide for small businesses covers the general approach, from mapping data to handling errors.
Key takeaway
If your invoices already start in an accounting program that supports SEF, use it. Build a direct integration when invoices start in your own webshop, ERP or platform.
Action for today: count how many invoices you issued and received last month. That number usually decides the option for you.
How the SEF API Integration Works, Step by Step
Here's the path a developer follows to connect a business system to SEF:
- Get an eID with a high level of assurance. Logging in to SEF goes through the eUprava identity system, using a qualified electronic certificate (for example on the ID card chip) or the ConsentID mobile app.
- Log in as a company administrator. Only a user with the administrator role sees the API settings. The legal representative has it by default.
- Generate the API key. In Podešavanja (Settings), open API menadžment and click to generate a key.
- Set API status to active. A generated key is rejected until the API status switch is turned on.
- Enter notification addresses. SEF can notify your system about incoming invoices and status changes, so you don't have to poll constantly.
- Build and test against the demo environment. The demo SEF (demoefaktura.mfin.gov.rs) has its own login, its own key and its own Swagger API documentation. Invoices there have no legal effect.
- Switch to production. Generate a separate key on the production SEF and store it as a secret in your system.
Demo and production keys are different
A key from the demo SEF does not work in production, and vice versa. Mixing them up is one of the most common reasons a fresh integration fails.
What your system actually does through the API
- Send sales invoices as UBL XML documents, the structured e-invoice format SEF accepts.
- Read sales invoice status: sent, approved, rejected or cancelled.
- Fetch purchase invoices by date range and status, then download each one.
- Accept or reject purchase invoices from your own approval workflow.
Action for today: ask your developer or software vendor which of these operations your setup supports today.
Worked Example: A Webshop That Invoices Through SEF
Imagine a small B2B webshop selling equipment to companies. Today an employee exports each order and retypes it in the SEF portal. A direct integration changes the flow to this:
| Step | What happens automatically |
|---|---|
| 1. Order is paid or shipped | The webshop creates the invoice with buyer PIB, items, VAT rates and bank account |
| 2. Validation | The system checks required fields (buyer ID, postal code, account, date) before sending |
| 3. Send to SEF | The invoice is converted to UBL XML and sent through the API with the production key |
| 4. Status tracking | A notification or scheduled check updates the order when the buyer approves or rejects the invoice |
| 5. Alerts | Rejections and errors go to the accountant's inbox with the reason SEF returned |
The same pattern works in the other direction for purchase invoices: fetch new ones daily, route each to the person who approves it, and record the decision in SEF. It's the kind of repetitive work our business process automation guide recommends automating first.
Action for today: draw your current invoice flow on paper and circle every step where someone copies data by hand.
7 Mistakes That Break SEF Integrations
- API status left inactive after generating the key, so SEF rejects every call.
- Demo key used in production (or the reverse).
- Missing required data on the invoice, such as postal code or bank account, so SEF refuses it.
- Wrong invoice date, for example a date that SEF doesn't accept for the document being sent.
- Ignoring incoming invoices. According to the Ministry of Finance, the recipient has 15 days to accept or reject an invoice. If a private-sector recipient doesn't respond, SEF sends a new notice, and after 5 more days without a response the invoice is considered rejected.
- No error handling. Network errors, timeouts and validation messages must be logged and retried, not silently lost.
- Treating the API key like a normal setting. Anyone who has the key can send and receive invoices on behalf of your company.
Protect the API key
Store the key in a secrets manager or encrypted configuration, never in code, email or chat. If it leaks, generate a new key in SEF immediately and update your system.
Action for today: check who in your company currently knows the SEF API key and where it's stored.
How Much Work Is a Custom SEF Integration?
The effort depends less on SEF itself and more on your side: how clean your invoice data is, how many invoice types you issue (advances, credit notes, foreign currency) and whether you also want to process purchase invoices. We won't quote a generic number, because these factors vary widely between companies.
Our guide to what drives custom software cost explains how to get a fair, itemized estimate. If you're choosing a partner for the job, use our 12 questions for hiring an IT company in Serbia.
Action for today: collect five real invoices of different types (normal, advance, credit note) to show any developer before they estimate.
SEF eFaktura Integration Checklist
- ☑ Confirmed your SEF obligations with your accountant
- ☑ Company administrator has an eID with a high level of assurance
- ☑ Decided between portal, ready-made software or direct API integration
- ☑ Separate API keys for demo and production, API status active on both
- ☑ Notification address set for incoming invoices and status changes
- ☑ Required invoice fields validated before sending
- ☑ Process to accept or reject purchase invoices within the legal deadline
- ☑ Errors logged, retried and reported to a responsible person
- ☑ API key stored securely, with a plan to rotate it
- ☑ Architecture ready to add e-delivery notes later
Action for today: tick off what you already have and turn the rest into tasks with owners and dates.
SEF eFaktura Integration: FAQ
What is SEF in Serbia?
SEF (Sistem elektronskih faktura) is the Serbian Ministry of Finance system for issuing, receiving and storing electronic invoices. Since January 1, 2023, private-sector companies issue B2B invoices through it, and since July 2022 they have been obliged to receive and store e-invoices sent to them.
How do I get a SEF API key?
Log in to SEF as a company administrator using eID, open Settings, then API management, and generate a key. Then switch the API status to active and copy the authentication key into your software. The demo and production environments each need their own key.
Can I integrate SEF with my own webshop or ERP?
Yes. SEF exposes an API documented in Swagger, so your webshop, ERP or custom platform can send sales invoices in UBL XML format, fetch purchase invoices and track their status. Build and test on the demo environment first, then switch to production with a separate key.
What happens if I don't respond to an incoming e-invoice?
The recipient has 15 days to accept or reject an e-invoice. If a private-sector recipient doesn't respond, SEF sends a new notice, and if there is still no response within 5 days, the invoice is considered rejected. An integration can route invoices for approval so this doesn't happen.
SEF eFaktura integration turns a legal obligation into an automated flow: invoices leave from where they are created, incoming ones reach the right person on time and every status is tracked. Start by choosing the right connection option, test on the demo SEF and protect your API key. See what else we build on our services overview.
Want your invoices to flow to SEF automatically?
Tell us where your invoices are created today. We'll review your setup and suggest the simplest way to connect it to SEF, free and without obligation.
Get a free consultation