EFRIS Gateway

EFRIS integration for your ERP

A single REST API between your accounting system and the Uganda Revenue Authority's EFRIS service. Submit an invoice as ordinary JSON and receive the fiscal document number, verification code and QR code in the response.

Two ways to use it

Most businesses want the first. Software companies and larger IT teams usually want the second.

Use our API

UGX 1,300,000 to set up

then UGX 1,000,000 per taxpayer per year

You send invoices to our API and we handle EFRIS — certificates, signing, the URA protocol and every specification change. Nothing to host, nothing to maintain.

  • Running within a day
  • We keep pace with URA changes
  • Support when a document is rejected
Talk to us about access
Own the code

USD 4,500 once

no recurring fee, ever

The complete source, deployed on your own infrastructure. Serve unlimited taxpayers and charge them what you like — you sell the service, we do not take a share.

  • Unlimited taxpayers, no per-transaction fee
  • Modify and rebrand it as your own
  • Perpetual: no expiry, no licence keys
See what is included

Serving more than a handful of taxpayers, the licence costs less than the subscriptions it replaces within the first year or two — and nothing after that.

What it handles

The parts of EFRIS that are tedious to implement and easy to get subtly wrong.

Protocol and cryptography

The session handshake, RSA signing, AES payload encryption and the compressed response formats — handled per taxpayer and cached between requests.

Tax arithmetic

Tax-inclusive pricing, zero-rated, exempt and deemed lines, excise duty and discount lines, reconciled to the totals URA validates against.

Multiple taxpayers

Each taxpayer has their own certificate, device, API key, address allow-list and daily quota. One deployment serves all of them.

A record of every exchange

Both sides of every submission are stored, so a rejected document can be examined afterwards rather than reconstructed.

Getting started

Four steps from an API key to a fiscalised invoice.

  1. Register your products

    A product must exist in URA's catalogue before it can appear on an invoice.

  2. Record your opening stock

    URA rejects an invoice for goods it has no stock recorded against.

  3. Submit an invoice

    Send the sale as JSON. Field names may be snake_case or camelCase.

    curl -X POST https://efrisgateway.com/api/efris/submit-invoice \
      -H "X-API-Key: $EFRIS_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "format": "simple",
        "invoice_number": "INV-2026-000412",
        "invoice_date": "2026-08-21",
        "customer_name": "Nakawa Traders Ltd",
        "buyer_type": "1",
        "payment_method": "102",
        "items": [
          {
            "item_name": "Bottled water 500ml",
            "item_code": "WTR-500",
            "quantity": 12,
            "unit_price": 1500,
            "tax_rate": 18
          }
        ]
      }'
  4. Print the fiscal document

    The response carries everything the printed invoice must show.

    {
      "success": true,
      "invoiceNumber": "INV-2026-000412",
      "fdn": "325043056477",
      "verificationCode": "234893273725405146366",
      "qrCode": "iVBORw0KGgoAAAANSUhEUg...",
      "summary": {
        "netAmount": 15254.24,
        "taxAmount": 2745.76,
        "amountPayable": 18000,
        "amountInWords": "Eighteen thousand shillings only",
        "paymentMode": "Cash"
      }
    }

Endpoints

The main integration surface. Every URA interface is reachable; the documentation lists them all.

PurposeMethodPath
Fiscalise an invoicePOST/api/efris/submit-invoice
Raise a credit notePOST/api/efris/submit-credit-note
Register a productPOST/api/efris/register-product
Record stock receivedPOST/api/efris/stock-increase
Record stock written downPOST/api/efris/stock-decrease
Retrieve an invoiceGET/api/efris/invoice/{fdn}
Look up a taxpayerGET/api/efris/taxpayer/{tin}
Check the connectionGET/api/efris/diagnostics

Own the code

Complete source code. Serve unlimited taxpayers from one deployment, with no per-taxpayer or recurring fees.

One-time multi-tenant licence USD 4500 Paid once. Not a subscription. Enquire about a licence

What is included

  • Unlimited taxpayers on a single deployment
  • Full TypeScript source, yours to modify and rebrand
  • Every URA EFRIS interface implemented and tested
  • Multi-tenant admin portal: clients, certificates, API keys
  • Docker deployment and setup documentation
  • Postman collection covering every endpoint
  • No licence keys, no per-transaction fees

Licence terms, in plain words

What you may and may not do with the code, answered before you have to ask.

Is the licence perpetual?

Yes. Paid once, no expiry, no renewal, no licence key, and nothing that phones home. It keeps working whether or not you ever pay us again.

Is the whole source included?

All of it. Nothing obfuscated, nothing compiled away, no proprietary module held back and licensed separately. What runs the service is what you receive.

Is there a per-taxpayer fee?

None. Unlimited taxpayers on one deployment, and no per-invoice or per-transaction charge. Each taxpayer gets their own certificate, device number, API key and quota.

May I serve other businesses with it?

Yes — run it as your own EFRIS service, embed it in a product you sell, or deploy it internally, and charge what you like. What you may not do is resell, sublicense or redistribute the source itself. You may sell the service, not the software.

Can I modify and rebrand it?

Yes. The brand name, public URL and contact details are configuration rather than code, so it rebrands without touching source — and the source is yours to change anyway.

What when URA changes the spec?

What you have keeps working. URA does move — T186 and T187 arrived in 2024, T127 and T130 changed in 2025 — so updates are available as an optional annual arrangement, quoted separately. Never required.

What support comes with it?

Getting the first deployment running and the first taxpayer submitting. Ongoing support and integration work are quoted separately, and are optional — nothing stops working without them.

Can I see it before paying?

Yes. A walkthrough of the admin portal and the code structure can be arranged first. The API documentation and Postman collection are public already.

Common questions

What is EFRIS?

The Electronic Fiscal Receipting and Invoicing Solution operated by the Uganda Revenue Authority. VAT-registered businesses in Uganda must submit invoices to it and print the fiscal document number, verification code and QR code URA returns.

Do I have to integrate with EFRIS myself?

No. Send invoices here as ordinary JSON and the gateway handles the protocol — the session handshake, RSA signing, AES encryption and the tax arithmetic URA validates. Or licence the source and run it yourself.

Which systems does it work with?

Any system that can make an HTTPS request. Field names are accepted in either snake_case or camelCase, so most ERPs, point-of-sale systems and custom applications integrate without a plugin.

How long does setup take?

A day for a straightforward integration, once the taxpayer's certificate is registered with URA and their products are recorded. Most of the elapsed time is URA's registration, not the integration itself.

Who you are buying from

Enterprise software, EFRIS integration and tax compliance � Kampala, Uganda.

Registered name
Midway systems Ltd
Address
Kyambogo-k4-Nakawa
Company website
midwayug.com
Email
[email protected]
Phone
+256784769332

Talk to us

Send a message and we will come back to you.

Email

[email protected]

Best for detailed questions and quotes.

WhatsApp

Start a conversation

Usually the quickest way to reach us.

Phone

+256784769332

Business hours, East Africa Time.

Kyambogo-k4-Nakawa