podpalcem
Cash register connected through a gateway with verification and a server
OPEN SOURCE / MITgateway v0.2.0 · clients v0.1.1

EET Gateway

EET 2.0 for your POS system, without handling SOAP and certificates yourself.

The open-source gateway accepts sales through a simple HTTP API and handles signing, submission to EET, response verification, retries during outages and queueing.

MIT license · TypeScript · binary or Docker · Releases and CHANGELOG

Verified only against the playground so far.

Not yet verified in production with a live certificate. No independent security audit has been performed. Unofficial project, without warranty. Each operator is responsible for certification, cash register registration and legal compliance.

Key dates.

  1. 17 Sep 2026

    Act signed

    The President signed the Sales Reporting Act, published as Act No. 180/2026 Coll.

  2. 1 Nov 2026

    Certificates and DIS+

    Cash register certificates can be generated and reporting prepared in the DIS+ tax information portal.

  3. 1 Dec 2026

    MOJE EET application

    The Czech Financial Administration launches a free web application for the smallest businesses.

  4. 1 Jan 2027

    Mandatory reporting

    Regular operation begins. The Financial Administration has announced January as a pilot month with guidance, but reporting is mandatory from day one.

Based on the Financial Administration’s schedule and Act No. 180/2026 Coll. Check the current official information at eet.gov.cz.

Who it is for and where to start.

01

POS developer

No need to write and maintain EET communication yourself. Your system speaks HTTP; the gateway handles the rest.

Quick start
02

Operator with their own POS

No third-party cloud. The gateway runs on your infrastructure; your keys and certificates stay with you.

Run with Docker
03

E-commerce integrator

A typed client for your language and a ready-made foundation for your own code.

Client for your language
POSHTTP → EET Gateway signing → EET

What the gateway handles.

One HTTP API

Submit a sale and receive a typed result: accepted, verified, rejected, queued, uncertain or invalid. Documented in OpenAPI.

Idempotency

Every sale carries a receipt number. Resubmitting the same sale does not create a duplicate.

Queueing and retries

If EET is unavailable, the sale is stored and submitted later according to the defined rules. SQLite, no additional service.

Response verification

Verifies the response signature and certificate chain, not just whether HTTP 200 was returned.

Batching and validation

Batch submission in JSON, NDJSON, CSV or XML. Validate data without submitting it to EET.

Cash register overview

Certificate validity, queue status and health checks. Switch between playground and production.

Your first sale in 5 minutes.

playground first ↓
  1. 01 /

    Download the gateway

    A binary for Linux, macOS or Windows, or a public Docker image. Other ways to run it are documented in the repository.

  2. 02 /

    Start in playground mode

    Configure an API key and a test certificate as described in the documentation. Production has not yet been verified.

  3. 03 /

    Submit your first sale

    A simple POST to /v1/sales. OpenAPI documents the exact request and result types.

POST /v1/sales
curl -X POST http://localhost:8080/v1/sales \
  -H "Authorization: Bearer $EET_API_KEY" \
  -H "Idempotency-Key: R-1001" \
  -H "Content-Type: application/json" \
  -d '{"porad_cis":"R-1001","dat_trzby":"2026-10-30T12:00:00+01:00","celk_trzba":"123.50"}'
or with Docker
docker run ghcr.io/hospodskej-cz/eet-2-0:0.2.0

response — accepted (illustrative example)

200 · accepted
{
  "status": "accepted",
  "porad_cis": "R-1001",
  "pok": "3f9a1c…",
  "dat_odpovedi": "2026-10-30T12:00:01+01:00"
}

response — invalid data (illustrative example)

422 · invalid
{
  "status": "invalid",
  "issues": [
    { "field": "celk_trzba", "code": "invalid_format",
      "message": "expected a decimal number with a dot" }
  ]
}
OpenAPI specification

What if EET goes down.

The gateway tracks each sale instead of using a “send and forget” approach. During an outage, the sale is queued and submitted when EET is available again.

queueduncertainaccepted

Idempotency: same sale key = no duplicate reporting. Resubmitting the same receipt returns the original result, not a duplicate.

Clients for your language.

Typed clients v0.1.1 for five languages.

PHP

PHP 8.1+ · Composer

PHP
composer require hospodskej-cz/eet-gateway-client

Python

Python 3.9+ · PyPI

Python
pip install eet-gateway-client

C# / .NET

.NET 8 · NuGet

C# / .NET
dotnet add package EetGateway.Client

Java

Java 17+ · Maven Central, no dependencies

Java
io.github.hospodskej-cz:eet-gateway-client:0.1.1

Node / Bun

npm · CLI and core, ingest, queue, server libraries

Node / Bun
npm i @eet-gateway/cli

Docker

public image v0.2.0

Docker
docker run ghcr.io/hospodskej-cz/eet-2-0:0.2.0

For other languages, generate a client from OpenAPI.

Open source.
Traceable releases.

  • MIT license, no fees and no dependency on a third-party service.
  • Binaries with checksums, an SBOM and provenance attestation. Signed Docker image. npm package provenance applies from version 0.2.1; the first release, 0.2.0, was published manually.
  • Security review and threat model in the repository. Report vulnerabilities privately through GitHub.
  • No private keys in the repository. Only public certificate authorities and playground test certificates.
Security and vulnerability reporting

Status and limitations.
Stated plainly.

Playground ≠ production
Verified against the EET 2.0 playground. Not yet verified in production with a live certificate.
No independent audit
No external security audit has been performed. Preparation is documented in docs/AUDIT.md.
Version 0.x
The /v1 API may still change. Rules are in docs/STABILITY.md and plans in ROADMAP.md.
Transport dependency
Communication with EET uses @finitoapp/eet-client (MIT, one maintainer). Decisions and risks are documented in ADR-004.
11 API operations4 language clientsverified against the playground 25 Oct 2026CI on every commitsigned binaries and image

Live verification details: docs/SPEC_NOTES.md

looking for our first pilots

Want to help us verify it in production?

We are looking for 2 to 3 operators with a production certificate to help verify the gateway in live operation. Get in touch — let’s discuss it.

Any questions?

Is this an official tool of the Ministry of Finance or the Financial Administration?

No. This is an independent open-source project without any warranty.

Does it handle certification and cash register registration for me?

No. Each operator must obtain their own certificate, register their cash register and ensure legal compliance, and remains responsible for these obligations.

What if EET is unavailable?

The sale is queued and the gateway submits it later according to the defined rules. In the meantime, its status is queued or uncertain, so nothing disappears or is submitted twice.

How do I integrate from PHP, Java, .NET or Python?

Use the ready-made clients — installation commands are in the Clients section above. For other languages, generate a client from OpenAPI.

Who maintains it, and what if the project is discontinued?

The Pod Palcem team and contributors maintain it. The MIT license lets you fork the source code and maintain it yourself. Governance rules are documented in GOVERNANCE.md.

What if the Financial Administration changes its interface?

The gateway API is versioned (/v1). Compatibility rules and the process for changes are documented in docs/STABILITY.md.

Does it replace cash register certification?

No. The gateway only handles communication with EET. The operator is responsible for certificates, registration and legal compliance.

Do I have to use Docker?

No. A single binary is sufficient on a supported system. A Docker image is available as an option.

Where should I report bugs and ideas?

Use GitHub Issues and Discussions. Report security findings privately as described in SECURITY.md.

Can I use it commercially?

Yes, the MIT license permits commercial use. Dependency notices are in THIRD_PARTY_NOTICES.md.

free to use, open to contributions

Try it on the playground.

And tell us what is missing.