TaxID connects your Kenyan invoicing, accounting or POS software to invoice submission, receipt lookup and reconciliation through one API.
Server-side API-key authentication. Use your assigned API URL and branch PIN. No client ID or client secret is required.
With your client configured and invoice mapped:
# invoice: your mapped SaleInvoice receipt = client.submit_sale( invoice, idempotency_key="INV-2026-001", ) print(receipt["cuInvoiceNumber"])
import os from kra_etims import KRAeTIMSClient, SaleInvoice, calculate_item, build_invoice_totals client = KRAeTIMSClient( api_key=os.environ["TAXID_API_KEY"], base_url=os.environ["TAXID_API_URL"]) items = [calculate_item("Synthetic service invoice", "SRV-001", 5800, "B")] # Band B = 16% VAT receipt = client.submit_sale( SaleInvoice(tin="A000123456B", bhfId="00", invcNo="INV-2026-001", custNm="Acacia Enterprises Ltd", confirmDt="20260311120000", itemList=items, **build_invoice_totals(items)), idempotency_key="INV-2026-001", ) print(receipt["cuInvoiceNumber"]) # SIMULATED-CU/152 NS
With your mapped invoice saved as invoice.json:
curl "$TAXID_API_URL/v2/etims/sale" \ -H "Authorization: Bearer $TAXID_API_KEY" \ -H "Idempotency-Key: INV-2026-001" \ -H "Content-Type: application/json" \ --data @invoice.json
curl -X POST "$TAXID_API_URL/v2/etims/sale" \ -H "Authorization: Bearer $TAXID_API_KEY" \ -H "Idempotency-Key: INV-2026-001" \ -H "Content-Type: application/json" \ -d '{ "supplierPin": "A000123456B", "amount": 5800.00, "invoiceDate": "2026-10-07", "clientReference": "INV-2026-001", "taxBand": "B", "taxAmount": 800.00, "buyerPin": "P051234567X", "buyerName": "Acacia Enterprises Ltd", "itemDescription": "Synthetic service invoice" }'
{ "purchaseId": 152, "status": "SIGNED", "cuInvoiceNumber": "SIMULATED-CU/152 NS" }
TaxID brings submission, receipt tracking and exception handling into your existing product.
Submit invoices, retrieve receipt fields and look up each sale by its original reference.
Queue eligible work. Keep uncertain signing outcomes available for investigation before replay.
Connect merchant branches with scoped application permissions and expiring, revocable credentials.
Keep branch device configuration and control-unit credentials behind your application’s API integration.
Keep your invoice workflow. Connect the fiscal operations through REST or the Python SDK.
Authenticate server-side requests with a branch API key. No client ID or client secret is required.
Send invoice data from your application. Keep the original reference and idempotency key with each request.
Retrieve receipt fields and status by the original reference. Investigate uncertain outcomes before submitting another sale.
Your application maps invoice data; TaxID routes requests to the configured merchant branch. Production requires merchant authorisation and completed branch/control-unit setup.
INV-2026-001
Keep the original reference. The response alone cannot tell you whether signing happened.
In this example, lookup finds the stored SIGNED receipt for the same sale.
Retrieve its fields without submitting another sale. If the outcome is still uncertain, investigate before resubmitting.
Illustrative outcome, not a live submission. SIGNED records control-unit signing, not central KRA acceptance.
Change the amount to see a sample receipt. No fiscal invoice is issued or submitted to KRA.
Set an amount and a band, then press Preview sample receipt to generate a sample.
Illustrative calculation and sample receipt; no request is submitted to KRA. Confirm applicable tax classification separately.
Current developer access is free and invitation-based. Try your integration in the simulator; no fiscal invoices are issued or submitted to KRA.
TaxID is not yet KRA-approved. Production requires KRA approval, real KRA testing, merchant authorisation and operational acceptance. Production pricing is being finalized.
We’ll email a private invitation when access is available. Open it to create your branch API key and test your integration in the simulator. This request does not grant production access. In the meantime, browse the eTIMS reference docs.