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 stops when the link drops
- invoicing continues
- no invoice can be issued
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.
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.

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.