Two endpoints and one webhook URL. No fiscal hardware to buy, and nothing to install on the till.
Your system
POST /api/v1/invoices
One JSON invoice, keyed on your own reference. Double-click or retry storm, it signs once.
VeTims
OSCU / VSCU
Queued, retried and reconciled. A slow or unreachable KRA never blocks your till.
KRA eTIMS
resultCd 000
The control unit signs, and returns the signature, internal data and CU invoice number.
The receipt
invoice.signed
Print what came back. Your customer scans the QR and checks the invoice against KRA.
One round trip · your till never waits on KRA
Records the sale and queues it. 202 the first time, 200 on any replay of the same reference.
Status poll, for systems that would rather not receive webhooks.
Both carry the full invoice, so one webhook is enough to print the receipt.
Bearer token per tenant · 120 requests a minute · sandbox and production on the same shapes
A business rejection is permanent, so we do not retry it. The invoice is marked failed with KRA's own result code, and invoice.failed fires immediately.
Transport failures get five attempts, backing off 10s, 30s, 1m, 2m, 5m. Your till never waits on it.
Webhooks get six attempts, backing off 30s, 2m, 10m, 30m, 1h. Every attempt is logged, and the poll endpoint always holds the same answer.
The second POST returns 200 with the first invoice. One reference, one signature, one entry in the KRA sequence.
Idempotent invoice API
Send a sale twice, it signs once. Your reference is the key.
Server-side tax engine
Categories A to E computed from VAT-inclusive prices. Five VAT classes your code never sees.
Spec-exact credit notes
Refunds reference the original sale, carry negative amounts, and follow KRA's cancel-once rules.
Signed webhooks
HMAC-SHA256 over a timestamped body, retried for an hour, every delivery logged and replayable.
Queue, retry, reconcile
Nothing signs twice and nothing vanishes, whatever KRA is doing.
Device management
Serials, keys and invoice sequences handled per branch under your PIN. OSCU today; VSCU is registered and follows.
Operator console
Every invoice, device and delivery visible; failures retried in one click.
Printable fiscal block
Everything the printed receipt must carry, returned per invoice.
The field reference → What a pilot costs → Questions from integration teams →
Tell us what your system does. We reply with a token, a device and a working example against the KRA sandbox.