For web agencies and developers
Your client sells. The order fiscalizes itself.
Do you build shops for clients in Serbia? Tezga is an approved ESIR (IB 1597) with a REST API and webhooks. An order from the shop becomes a fiscal receipt through V-PFR, with no device at the client and no retyping.
The path of one order
- 01
Shop
The order is paid or reaches the status you chose.
- 02
Tezga API
Receives the order and issues a receipt, one per order.
- 03
Tax Administration
V-PFR fiscalizes the receipt and returns the PFR number and QR.
- 04
Back
The receipt number, a verification link and a PDF, and the receipt to the customer by email if wanted.
Choose a path for the shop
Ready-made connections with shops are in the Posao and Biznis plans. All connections in one place, with Wix and Gomag over the API, are on the Integrations page.
All integrations- WooCommerceA full two-way connection with no plugin: orders pulled every 30 minutes and the receipt number written back into the order.
- ShopifyA two-way connection through a custom app in the shop admin.
- PrestaShop, OpenCart, Magento, BigCommerceOver a webhook: the shop sends the order, Tezga returns the receipt in the response.
- Your own site, app or automationYou send JSON and get a fiscal receipt. The same API is used by n8n, Make and Zapier.
The technical minimum
POST https://pos.narbiz.com/api/integrations/order?provider=custom
X-Tezga-Api-Key: tzg_…
X-Tezga-Signature: sha256=… (optional, HMAC-SHA256 of the body)
Content-Type: application/json- Key and signature
- The API key goes in the X-Tezga-Api-Key header, one per integration. The body is optionally signed with an HMAC-SHA256 secret. We do not offer OAuth or mTLS.
- No duplicate receipts
- Every request carries your externalId. The same externalId returns the existing receipt, never a new one.
- Webhook events
- racun.fiskalizovan, racun.greska, refundacija.izvrsena, storno.izvrsen. The body is HMAC-signed, and if your server does not respond, delivery is retried after 1, 5, 15, 60, 360 minutes.
- Rate limit
- By default 120 requests per minute per company for issuing and 240 for reading. For an announced sales peak we raise the limit in advance.
How the work with a client looks
Ours are activation, correct fiscalization, documentation and support during integration. The client's are the account, the payment and the security element, and yours are the code and the decision when it goes to production. We connect the shop together with you.
- 1
The client opens their own account
The receipt carries the tax ID (PIB) of the company that owns the account, so each client has their own account, their own security element and their own subscription. One account does not issue receipts for several companies.
- 2
The client enters the security element themselves
The client enters the certificate, password and PAK in Settings, Fiscalization. You do not receive them and do not need them; they are stored encrypted and never leave the server.
- 3
The client creates an API key for your integration
A named key, one per integration. The client pauses or revokes it whenever they want, and the key can be tied to your server's IP addresses.
- 4
A test on the Tax Administration environment
You test the integration on the Tax Administration's official sandbox environment, with a test security element. Your code does not change until production.
- 5
Moving to production
You swap the address and certificate in the settings. The API key and the code stay the same, so there is no new development.
Frequently asked questions
Can an agency issue receipts for several clients from one account?
No. A fiscal receipt carries the tax ID (PIB) of the company that owns the account, so each client has their own account, their own security element and their own subscription. The Terms of Use forbid issuing receipts for third parties through your own account, unless this is specifically agreed in writing.
Do I need a plugin for WooCommerce?
No. WooCommerce connects to Tezga with a full two-way link and no plugin: Tezga pulls orders every 30 minutes and on the Fetch button, and writes the receipt number back into the order.
What happens when the Tax Administration's V-PFR does not respond?
The document is issued and not lost, and the API returns HTTP 202 with ok:false and a message. Tezga then retries fiscalization on its own and notifies you by webhook when it succeeds. The same externalId never creates a second receipt, even when two requests arrive at the same time.
How long does an integration take?
To the first test receipt, usually half a working day with a ready programmer: one call to issue, one to check status and one to cancel. Moving to production is a settings change, not new development.
Building a shop for a client?
Write to us with a description of the shop (platform, what is sold, how it is paid for) and we answer specifically, with example calls for that case.
Have a client who needs fiscalization?
Write to us with a description of the shop (platform, what is sold, how it is paid for) and we answer specifically, with example calls for that case.
