<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en_KE"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://taxid.co.ke/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://taxid.co.ke/" rel="alternate" type="text/html" hreflang="en_KE" /><updated>2026-10-16T17:47:41+03:00</updated><id>https://taxid.co.ke/blog/feed.xml</id><title type="html">TaxID</title><subtitle>Engineering notes on eTIMS integration, receipt lookup and reconciliation for Kenyan invoicing, accounting and POS software.</subtitle><author><name>TaxID Engineering</name></author><entry><title type="html">What to do when an eTIMS submission times out</title><link href="https://taxid.co.ke/blog/etims-submission-timeout/" rel="alternate" type="text/html" title="What to do when an eTIMS submission times out" /><published>2026-10-14T00:00:00+03:00</published><updated>2026-10-14T00:00:00+03:00</updated><id>https://taxid.co.ke/blog/etims-submission-timeout</id><content type="html" xml:base="https://taxid.co.ke/blog/etims-submission-timeout/"><![CDATA[<p><strong>Short answer:</strong> don’t resubmit. A timed-out request may already have been signed, so look up the sale by its original reference first. If lookup finds a receipt, reuse it. If the outcome is still uncertain, investigate before submitting another sale.</p>

<h2 id="why-a-timeout-is-ambiguous">Why a timeout is ambiguous</h2>

<p>When a submission times out, your application knows the request left, but not what happened next. Signing may have completed and only the response was lost, or the request may never have reached the control unit. The response alone can’t tell you which.</p>

<p>Sending the same invoice again on a guess risks a second fiscal record for one sale. That’s why the original reference matters so much.</p>

<h2 id="send-a-reference-and-idempotency-key-with-every-request">Send a reference and idempotency key with every request</h2>

<p>Every submission should carry your own invoice reference and an idempotency key, so the sale can be found again later:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-X</span> POST <span class="s2">"</span><span class="nv">$TAXID_API_URL</span><span class="s2">/v2/etims/sale"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Authorization: Bearer </span><span class="nv">$TAXID_API_KEY</span><span class="s2">"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Idempotency-Key: INV-2026-001"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
  <span class="nt">--data</span> @invoice.json
</code></pre></div></div>

<p>Store the reference with the invoice in your own database before you send the request, not after it succeeds.</p>

<h2 id="the-recovery-flow">The recovery flow</h2>

<ol>
  <li><strong>The submission times out.</strong> Keep the original reference.</li>
  <li><strong>Look up that reference.</strong> Retrieve receipt fields and status for the same sale. The lookup endpoint is in the <a href="https://docs.taxid.co.ke">docs</a>.</li>
  <li><strong>Reuse what you find.</strong> If lookup returns a stored <code class="language-plaintext highlighter-rouge">SIGNED</code> receipt, use its fields without submitting another sale. If the outcome is still uncertain, investigate before resubmitting.</li>
</ol>

<h2 id="what-happens-after-a-timeout-or-outage">What happens after a timeout or outage?</h2>

<p>Eligible queued work can retry after recovery. If signing may already have happened, TaxID stops automatic replay so the original request can be investigated.</p>

<h2 id="does-signed-mean-kra-has-accepted-the-invoice">Does SIGNED mean KRA has accepted the invoice?</h2>

<p>No. SIGNED records the control-unit signing outcome; it does not establish central KRA acceptance. In the simulator, it describes a test receipt only.</p>]]></content><author><name>TaxID</name></author><category term="Recovery" /><summary type="html"><![CDATA[A timeout doesn't tell you whether the invoice was signed. Look up the original reference before you submit again.]]></summary></entry></feed>