Infrastructure engineering for East Africa's operators, platforms and regulators See the work →
eTIMS Integration in Kenya: OSCU or VSCU for Your ERP
ERP & CRM 7 min read

eTIMS Integration in Kenya: OSCU or VSCU for Your ERP

eTIMS integration runs through an OSCU or a VSCU, and KRA's own list certifies Odoo 16 both ways. What decides it is what your tills do offline.

CE
CloudSpinx Engineering
Infrastructure Engineering, Virtualization, Networking, Automation
16 October 2026
eTIMSKRAOSCUVSCU

Odoo 16 is on KRA's list of approved eTIMS integrators three times. One integrator certified it on the OSCU, another on the VSCU, and a third on both. So whatever your ERP vendor recommended, the software did not choose your eTIMS integration route. Your network chooses it, and so does whoever will keep a Java process alive in your server room.

CloudSpinx implements Odoo, ERPNext and Frappe for businesses in Kenya with eTIMS built into the invoicing flow, because an invoice that exists in the ERP and not at KRA is an audit finding waiting for a date. KRA's two system-to-system routes, the Online and the Virtual Sales Control Unit, both sign every invoice before it can be printed. They differ in where the signing happens and in what stops when a link or a server dies, and that is the whole decision.

OSCU or VSCU: where your invoice gets signed

The OSCU signs at KRA. KRA's sign-up guide calls it "implemented and hosted at KRA": your ERP calls the eTIMS API at etims-api.kra.go.ke for every invoice, gets back a signature, a receipt number and the internal data, and only then prints. The OSCU specification puts the dependency in four words: "Internet is always needed."

The VSCU signs on your side. Once KRA approves it, you download a package from the taxpayer portal and start it on a machine you control with java -jar etims-vscu-<version>.jar, on Java 16 or later. It listens on port 8088 by default, your ERP talks to it over plain HTTP, and it forwards what it signs to KRA.

One rule binds both. The specification for invoicing systems, published on KRA's system-to-system integration page next to the two unit specifications, makes it "impossible to issue receipt if the TIS did not receive any response" from the control unit, and says the invoicing system "must stop operating" when it loses that unit. No signature, no invoice. The only question is which connection you bet the till on.

What eTIMS invoicing does when the internet drops, OSCU against VSCU
What eTIMS invoicing does when the internet drops, OSCU against VSCUThree lanes on one scale of hours without a connection to KRA. On the OSCU, which is signed at KRA, no invoice can be issued from the first minute, because the invoicing system may not print without a response from the control unit. On the VSCU, which runs on your own server, invoices keep being signed locally for up to 24 hours without a connection after a receipt signature, and then the VSCU stops issuing receipt numbers. The third lane is the VSCU when the server running it fails: the invoicing system must stop at once, exactly as on the OSCU.OSCU · SIGNED AT KRA, LINK DOWNno response from KRA, so no invoice0hlink to KRA dropsVSCU · SIGNED ON YOUR SERVER, LINK DOWNjar signs locally, queues for KRAstopped0ha receipt is signedwith no link to KRA24h24 hours with no link:no more receipt numbersWHAT THE VSCU MOVES RATHER THAN REMOVESVSCU · LINK FINE, THE SERVER RUNNING THE JAR STOPStill loses its control unit, so it stops0hpower cut, full disk or a reboot
  • invoicing continues
  • no invoice can be issued
The VSCU buys a till up to 24 hours against a dead link to KRA. It buys nothing against its own server going down, which stops invoicing as fast as a dead link stops an OSCU.

Every lane assumes the till itself has power. The TIS specification names a power failure next to a lost control unit as a reason the invoicing system must stop.

On the OSCU, invoicing stops the moment KRA is unreachable, whether the fault is your fiber, your ISP or KRA's API. On the VSCU the till keeps selling inside a window the specification states exactly: "If there is no internet connection for 24 hours after VSCU issues a receipt signature and an internal data, VSCU stops issuing a receipt number."

For a forecourt or a branch on one link, that is a real argument. What the demo leaves out is that the VSCU moves the dependency rather than removing it. The till now stops whenever the machine running the jar stops: a power cut in the back office, a full disk, an update that rebooted it overnight. You have traded KRA's uptime for your own, on a server that has to be patched, monitored and backed up, because it holds the keys KRA issued it and, in KRA's words, preserves "all relevant data of the outbound transactions". Put it on a Linux server somebody actually looks after and keep port 8088 off the internet.

Our rule is short. If the ERP runs centrally, in the cloud or in one office on a dependable link, take the OSCU. There is nothing extra to run, and when that office link drops your staff have lost the ERP itself, so the control unit was never what stopped them. If invoices come from tills, branches or forecourts that must keep selling through an outage, take the VSCU and budget a looked-after server at each of those sites. If one bad link is the only reason you are reaching for it, price a second ISP at that site first. Send the site list and how each one connects through our scoping form, and we will say which unit each site needs.

What KRA's approved integrator list shows

KRA publishes the third-party integrators it has certified for system-to-system work. The January 2026 version of the list names 53, up from 23 in June 2024. We counted them by control unit.

Who KRA has approved for eTIMS integration, by control unit
Who KRA has approved for eTIMS integration, by control unitOur count of the Kenya Revenue Authority list of approved eTIMS system to system integrators dated 26 January 2026. Of 53 integrators, 16 are certified on the OSCU only, 9 on both units and 28 on the VSCU only, so 37 can deliver a VSCU and 25 an OSCU. The named ERP platforms split by unit: SAP Business One 10, ERPNext 14, Tally Prime and Zoho on the OSCU, Microsoft Dynamics and Sage on the VSCU, and Odoo 16 on the OSCU, the VSCU and both. All 12 fuel station products on the list are VSCU.53 APPROVED INTEGRATORS16OSCU only9both28VSCU onlyOSCU CERTIFIED · 25VSCU CERTIFIED · 37NAMED ERP PLATFORMS ON THE LISTSAP Business One 10ERPNext 14Tally PrimeZohoOdoo 16Odoo 16Microsoft Dynamics 2012, 365Microsoft Dynamics RMSSage 50 to 300Odoo 16All 12 fuel station products: VSCU
Odoo 16 sits in all three columns, so the platform does not choose the control unit. The growth is on the VSCU: all ten integrators the list gained since March 2025 hold it alone.

Bars count integrators and chips place products: Sage sits under VSCU because that product is VSCU, though its integrator also holds the OSCU. A business that certifies its own integration does not appear on the list.

Sixteen hold the OSCU only, 28 the VSCU only and 9 both, so 37 can deliver a VSCU and 25 an OSCU. The list has gained ten integrators since March 2025, all VSCU only; the one other new name, Zoho, took over a row that already listed Zoho Books on the OSCU. Forecourts sit on the VSCU without exception: all twelve fuel station products on the list. Point-of-sale products split both ways, so having tills does not settle it on its own.

The named ERP platforms land on both sides. SAP Business One 10, ERPNext 14, Tally Prime and Zoho are on the OSCU, Microsoft Dynamics and Sage on the VSCU, and Odoo 16 on all three. Odoo's own Kenyan company holds the OSCU-only listing, and Odoo's documentation sends version 17.0 and later down the OSCU with that company's PIN on the commitment form, so check your version before relying on a listing. If your platform is on the list, somebody has already done the certification work, and that changes what you are buying. If the platform itself is still open, how Odoo compares with ERPNext comes first.

Self-integration, a listed integrator, or KRA's own tools

Any taxpayer may build its own. You sign up on the eTIMS sandbox with the company PIN, request an OSCU or VSCU, build against the specification, then apply for certification with the eTIMS Bio Data Form. Two lines on that form catch people. It wants at least three qualified technical staff for development and system administration, each with a CV and terms of employment, and that line is not among the form's "third party vendors only" items, so it binds a business integrating for itself. It also wants the integration software on a read-only CD or DVD. If you cannot name three engineers on your own payroll, buy a certified product or use a listed integrator. If invoicing lives in an application you built, our development team can do the application work against KRA's specification, but the certification is then yours as a self-integrator, three-staff line included. If your point-of-sale vendor is already on the list, it is theirs to deliver and you do not need us.

Plenty of businesses need no integration at all. KRA points service businesses issuing no more than 10 invoices a month to eTIMS Online, its web portal, and a consultancy raising eight invoices a month should use it. For businesses that sell goods and have no invoicing system, KRA builds the eTIMS Client for Windows and Android. You can also register on more than one solution. Each keeps its own invoice sequence, and a credit note can only come from the solution that issued the original, which matters the day an accountant tries to reverse a till sale from the portal.

A handheld payment terminal printing a long paper receipt, the kind of till that must keep issuing eTIMS invoices

Where eTIMS integrations break after go-live

The API is the easy half. A working link still trips you up in four places, and none of them is in the code.

Stock comes first. The invoicing system must "not issue a receipt of goods when the corresponding stock is less than the requested quantity", and Odoo's Kenya documentation is blunter: "The KRA does not accept sales if the product is not in stock." An ERP that has run negative stock for years, because goods were received a day after they were sold, stops invoicing them on go-live morning. KRA's stock management notice cites section 23A(2)(b) of the Tax Procedures Act and wants stock records "aligned with transactions invoiced through TIMS/eTIMS". Fix receiving before you switch the integration on.

Item registration comes second. Every product is registered with eTIMS before it can be sold, and Odoo's documentation notes KRA wants a UNSPSC code on each. Classifying a catalog nobody ever classified belongs in the plan before the go-live date.

Then corrections. Nothing is edited once signed. A wrong invoice is canceled against its original receipt number from the control unit, only once, from the same solution. Staff used to voiding and reprinting need to hear that before day one.

The buyer's PIN is last, and your customers will chase you for it. From 1 January 2026, starting with 2025 returns, KRA validates declared income and expenses against eTIMS records, withholding tax and customs imports. In the notice's words, "All declared income and expenses must be supported by a valid electronic tax invoice, correctly transmitted with the buyer's PIN, where applicable", subject to the exceptions in section 23A of the Tax Procedures Act and the 2024 electronic tax invoice regulations. An invoice that left your ERP without the customer's PIN, or never reached KRA, is a cost your business customer cannot support. They find out at filing time, and then they call you.

Send us the ERP and its version, how many tills or branches invoice, roughly how many invoices a month and how each site connects, through the ERP scoping form or on WhatsApp at +254 713 403 044. You get back which control unit each site needs, whether your platform already carries a certified one, and what the stock and item data need before the switch. If KRA's portal is enough, that is the answer, and nothing is owed for it. If the answer is moving invoicing into the ERP, we handle the move with you.

WhatsApp