How eTIMS invoice data is structured
When a system sends an invoice to eTIMS, it sends structured data, commonly as JSON, rather than a printed document. Conceptually that data carries the same things a compliant invoice shows: the seller details and PIN, the buyer PIN, the item lines with quantity, price and tax treatment, the totals and tax, and the fields KRA uses to register and sign the invoice.
The key discipline for a developer is that the exact JSON, the field names, nesting, data types and required values, is defined by KRA in its official documentation and changes over time. Guessing the structure or copying an old example leads to validation failures. So the useful knowledge here is the shape of the problem and the requirement to build against KRA's current schema, not a fixed example reproduced out of date.
The cheapest eTIMS integration is often the one you do not have to build, certify and maintain yourself.
How to approach it
A practical path. Confirm exact technical details against KRA's official documentation.
- 1
Work from KRA's schema
Get the current invoice data structure from KRA's official documentation. It defines the exact field names, types and required values.
- 2
Map your invoice model to it
Map your system's invoice fields to KRA's structure, ensuring tax treatment per line and buyer PIN are populated correctly.
- 3
Validate types and required fields
Check data types and required fields match exactly, since a wrong type or a missing required field triggers a validation error.
- 4
Test against the sandbox
Send test invoices to KRA's environment, read any validation responses, and correct the structure until it validates cleanly.
What to check before you build
Copying an old example payload
An old JSON example goes stale. Build against KRA's current documented structure to avoid validation failures.
Getting data types or required fields wrong
A wrong type or a missing required field fails validation. Match KRA's schema precisely.
Not reading validation responses
KRA's responses tell you what failed. Read them and correct the structure rather than guessing.
A developer matches the schema
A developer building an eTIMS integration assembled an invoice payload from an example found online, and it kept failing validation on a field type.
They rebuilt the structure from KRA's current documented schema, matched every field name and type, populated the tax treatment per line and the buyer PIN, and read the validation responses to refine it.
Once the payload matched KRA's current schema exactly, invoices validated cleanly, where the stale example never would have.
Trading without eTIMS-compliant tax invoices risks KRA penalties, blocked VAT input claims for your customers, and receipts a business buyer cannot expense.
Veira signs every sale to KRA eTIMS automatically, so each receipt is compliant the moment it prints, with no separate device to reconcile.
When you can skip the integration
The biggest decision here is whether you need to build an integration at all. Veira is already a compliant eTIMS system: it issues compliant KRA invoices automatically, applies the right tax treatment, captures the buyer PIN, transmits to KRA, and works offline. For many businesses that removes the need to build, certify and maintain a custom integration yourself.
If you do run an ERP or a custom stack, weigh the cost of building and maintaining an integration against running point of sale and invoicing on Veira and reconciling. Veira runs from KES 2,999 a month with a free terminal and a 30-day money-back guarantee. See how Veira works, or book a free demo to talk through your setup.
Frequently asked questions
What format does eTIMS use for invoice data?
What fields are in an eTIMS invoice payload?
Why not just copy an example JSON?
Do I need to handle the JSON myself?
Do I have to build my own eTIMS integration?
Where is the authoritative eTIMS technical spec?
eTIMS JSON format comes down to the concepts above plus KRA's official documentation for the exact details, and for many businesses the simplest path is compliant software that handles it for you. See how Veira works, or book a free demo. Always build against KRA's current official eTIMS documentation.