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

  1. 01

    Shop

    The order is paid or reaches the status you chose.

  2. 02

    Tezga API

    Receives the order and issues a receipt, one per order.

  3. 03

    Tax Administration

    V-PFR fiscalizes the receipt and returns the PFR number and QR.

  4. 04

    Back

    The receipt number, a verification link and a PDF, and the receipt to the customer by email if wanted.

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. 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. 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. 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. 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. 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.