EET REST API pro PHP, JavaScript, Python, Perl a další
s tiskem účtenek do PDF

Přinášíme Vám jednoduché REST API pro komunikaci s EET a
vystavování účtenek v PDF. Implementace EET už nemůže být jednodušší!

REST API pro e-tržby

Služba API-EET.cz přináší nejjednodušší možnost implementace elektronické evidence tržeb (EET) do Vašeho projektu. Naše API pro EET Vám umožní plnohodnoutnou komunikaci s finanční správou a k tomu přidá několik zásadních vylepšení.

EET účtenka v PDF

Zapomeňte na studování SOAP služby EET a její implementaci podle WSDL. Zapomeňte na práci s certifikáty, podepisování zpráv, ověřování, kontrolní součty a generování podpisových kódů. Zapomeňte i na zásadní úpravy Vašeho objednávkového systému, předělávání e-mailových šablon objednávek a generování PDF souborů.

Všechno už jsme vyřešili za Vás!

Vlastnosti REST API pro EET

  • Funguje vždy podle nejnovější specifikace - nemusíte hlídat zda se komunikace s EET nějak změnila, ohlídáme to za Vás. Na změny reagujeme rychle, jejich implementace je obvykle otázkou hodin.
  • Implementace položek datové zprávy odpovídá technické specifikaci EET - nevymysleli jsme si vlastní názvy položek datové zprávy. Aby nebyli naši uživatelé zmatení, držíme se názvů používaných EET.
  • Můžete použít všechny položky uvedené ve specifikaci EET - nejen nejběžnější položky jako je celková tržba a rozpis DPH, ale i položky týkající se použitého zboží nebo zúčtování.
  • Hodnotu každé položky můžete přizpůsobit - můžete tak použít například UUID z Vašeho systému. Navíc, pokud nezadáte některé povinné položky, vygenerujeme je za Vás.
  • Pokud pošlete chybný dotaz, řekneme Vám kde je chyba - ještě před odesláním požadavku do EET provádíme jeho analýzu. EET vám pouze sdělí, že dokument je chybně zformátován - naše API Vám přesně řekne kde je chyba.
  • Můžete odesílat v běžném i zjednodušeném režimu - implementovali jsme oba dva způsoby hlášení tržeb.
  • Můžete odesílat pouze ověřovací požadavky a vyzkoušet si tak nanečisto komunikaci s ostrou verzí EET za pomoci produkčních certifikátů.
  • Můžete si vybrat, zda komunikujete s produkčním rozhraním, nebo s playgroundem - naše API se baví s oběma rozhraními :-)
  • Můžete vygenerovat účtenku v PDF pro každý prodej u kterého byly zaslány položky účtenky.
  • Pod jedním uživatelským účtem můžete mít neomezené množství certifikátů - pro všechny Vaše projekty Vám tak bude stačit jediný účet. Vše najdete na jednom místě.
  • U každého certifikátu lze zvlášť upravit vlastnosti účtenky - různé certifikáty můžete tedy použít například pro různé e-shopy, přičemž každý bude mít nastaveno vlastní logo, údaje provozovatele a patičku účtenky.

Jak na to?

Komunikaci s naším API pro EET si můžete jednoduše vyzkoušet bez registrace - připravili jsme testovací účet který je na EET napojen. Účet je napojen v ostrém režimu na playground, vrací tedy FIK.

Ukázky obsahují i data položek účtenky a způsobů plateb, odpověď API tak obsahuje URL adresu kde lze stáhnout účtenku v PDF.

Zde jsou ukázky implementace odeslání požadavku do EET pro různá prostředí:

Bash

#!/usr/bin/bash
curl \
-H "Auth: TEaOzAz3iZaFHyg7QwKolAVViYEJhphe" \
-d '{"dic_popl":"CZ1212121218","id_provoz":666,"id_pokl":"ZKP-1","porad_cis":574521,"celk_trzba":16,"zakl_nepodl_dph":0.5,"zakl_dan1":8.1,"dan1":1.7,"zakl_dan2":4.96,"dan2":0.74,"zakl_dan3":0,"dan3":0,"polozky_uctenky":[{"nazev":"Voda perliv\u00e1 1.5l","mnozstvi":2,"cena":4.9},{"nazev":"Rohl\u00edk tukov\u00fd","mnozstvi":3,"cena":1.9}],"zpusoby_platby":[{"nazev":"Hotovost","castka":10},{"nazev":"Platebn\u00ed karta","castka":15}],"zaokrouhleni":0.5,"vraceno":9}' \
https://rest.api-eet.cz/v1/sale-add

PHP

$data = array(
    "dic_popl" => "CZ1212121218",
    "id_provoz" => 666,
    "id_pokl" => "ZKP-1",
    "porad_cis" => 574521,
    "celk_trzba" => 16,
    "zakl_nepodl_dph" => 0.5,
    "zakl_dan1" => 8.1,
    "dan1" => 1.7,
    "zakl_dan2" => 4.96,
    "dan2" => 0.74,
    "zakl_dan3" => 0,
    "dan3" => 0,
    "polozky_uctenky" => array(
        array(
            "nazev" => "Voda perlivá 1.5l",
            "mnozstvi" => 2,
            "cena" => 4.9
        ),
        array(
            "nazev" => "Rohlík tukový",
            "mnozstvi" => 3,
            "cena" => 1.9
        )
    ),
    "zpusoby_platby" => array(
        array(
            "nazev" => "Hotovost",
            "castka" => 10
        ),
        array(
            "nazev" => "Platební karta",
            "castka" => 15
        )
    ),
    "zaokrouhleni" => 0.5,
    "vraceno" => 9
);

$data_string = json_encode($data);

$options = array(
    CURLOPT_URL => "https://rest.api-eet.cz/v1/sale-add",
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => $data_string,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array("Auth: TEaOzAz3iZaFHyg7QwKolAVViYEJhphe")
); 

$ch = curl_init();
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
curl_close($ch);

echo $response;

JavaScript (jQuery)

var data = {
    "dic_popl": "CZ1212121218",
    "id_provoz": 666,
    "id_pokl": "ZKP-1",
    "porad_cis": 574521,
    "celk_trzba": 16,
    "zakl_nepodl_dph": 0.5,
    "zakl_dan1": 8.1,
    "dan1": 1.7,
    "zakl_dan2": 4.96,
    "dan2": 0.74,
    "zakl_dan3": 0,
    "dan3": 0,
    "polozky_uctenky": [
        {
            "nazev": "Voda perliv\u00e1 1.5l",
            "mnozstvi": 2,
            "cena": 4.9
        },
        {
            "nazev": "Rohl\u00edk tukov\u00fd",
            "mnozstvi": 3,
            "cena": 1.9
        }
    ],
    "zpusoby_platby": [
        {
            "nazev": "Hotovost",
            "castka": 10
        },
        {
            "nazev": "Platebn\u00ed karta",
            "castka": 15
        }
    ],
    "zaokrouhleni": 0.5,
    "vraceno": 9
};

$.ajax({
    url: 'https://rest.api-eet.cz/v1/sale-add',
    type: 'post',
    crossDomain: true,
    data: JSON.stringify(data),
    headers: { Auth: 'TEaOzAz3iZaFHyg7QwKolAVViYEJhphe' },
    dataType: 'json',
    success: function (data) { console.log(data); },
    error: function() { console.log("error"); }
});

Python

import pycurl, json

data = json.dumps({"dic_popl":"CZ1212121218","id_provoz":666,"id_pokl":"ZKP-1","porad_cis":574521,"celk_trzba":16,"zakl_nepodl_dph":0.5,"zakl_dan1":8.1,"dan1":1.7,"zakl_dan2":4.96,"dan2":0.74,"zakl_dan3":0,"dan3":0,"polozky_uctenky":[{"nazev":"Voda perliv\u00e1 1.5l","mnozstvi":2,"cena":4.9},{"nazev":"Rohl\u00edk tukov\u00fd","mnozstvi":3,"cena":1.9}],"zpusoby_platby":[{"nazev":"Hotovost","castka":10},{"nazev":"Platebn\u00ed karta","castka":15}],"zaokrouhleni":0.5,"vraceno":9})

c = pycurl.Curl()
c.setopt(pycurl.URL, 'https://rest.api-eet.cz/v1/sale-add')
c.setopt(pycurl.HTTPHEADER, ['Auth: TEaOzAz3iZaFHyg7QwKolAVViYEJhphe'])
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.POSTFIELDS, data)
result = c.perform()

print result

Perl

use LWP::UserAgent;

my $ua = LWP::UserAgent->new;

my $req = HTTP::Request->new(POST => 'https://rest.api-eet.cz/v1/sale-add');
$req->header('Auth' => 'TEaOzAz3iZaFHyg7QwKolAVViYEJhphe');
$req->content('{"dic_popl":"CZ1212121218","id_provoz":666,"id_pokl":"ZKP-1","porad_cis":574521,"celk_trzba":16,"zakl_nepodl_dph":0.5,"zakl_dan1":8.1,"dan1":1.7,"zakl_dan2":4.96,"dan2":0.74,"zakl_dan3":0,"dan3":0,"polozky_uctenky":[{"nazev":"Voda perliv\u00e1 1.5l","mnozstvi":2,"cena":4.9},{"nazev":"Rohl\u00edk tukov\u00fd","mnozstvi":3,"cena":1.9}],"zpusoby_platby":[{"nazev":"Hotovost","castka":10},{"nazev":"Platebn\u00ed karta","castka":15}],"zaokrouhleni":0.5,"vraceno":9}');

my $resp = $ua->request($req);

if ($resp->is_success) {
    my $message = $resp->decoded_content;
    print $message;
} else {
    print "HTTP POST error code: ", $resp->code, "\n";
    print "HTTP POST error message: ", $resp->message, "\n";
}

ASP.NET / C#

string returnString = string.Empty;
string postData = "{ \"dic_popl\": \"CZ1212121218\", \"id_provoz\": 666, \"id_pokl\": \"ZKP-1\", \"porad_cis\": \"123\", \"celk_trzba\": 16, \"zakl_nepodl_dph\":0.5, \"zakl_dan1\":8.1, \"dan1\":1.7, \"zakl_dan2\":4.96, \"dan2\":0.74, \"zakl_dan3\":0, \"dan3\":0, \"polozky_uctenky\":[{\"nazev\":\"Voda perliv\u00e1 1.5l\", \"mnozstvi\":2, \"cena\":4.9}, {\"nazev\":\"Rohl\u00edk tukov\u00fd\", \"mnozstvi\":3, \"cena\":1.9}], \"zpusoby_platby\":[{\"nazev\":\"Hotovost\", \"castka\":10}, {\"nazev\":\"Platebn\u00ed karta\", \"castka\":15}], \"zaokrouhleni\":0.5, \"vraceno\":9 }";

System.Net.HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("https://rest.api-eet.cz/v1/sale-add");
webRequest.ContentLength = postData.Length;
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "POST";
webRequest.Headers.Add("Auth", "TEaOzAz3iZaFHyg7QwKolAVViYEJhphe");

using (System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(webRequest.GetRequestStream())) { streamWriter.Write(postData); }

try {
    using (System.Net.HttpWebResponse httpWebResponse = (System.Net.HttpWebResponse)webRequest.GetResponse()) {
        if (httpWebResponse != null && httpWebResponse.ContentLength != 0) {
            using (System.IO.StreamReader streamReader = new System.IO.StreamReader(httpWebResponse.GetResponseStream())) {
                returnString = streamReader.ReadToEnd().ToString().Trim();
            }
        } else {
            returnString = "Error: No response.";
        }
    }
}

catch (Exception eX) {
    returnString = eX.ToString();
}

Console.WriteLine(returnString);

VBA

Dim xmlHtp  As New MSXML2.XMLHTTP
Dim sURL    As String
Dim sEnv     As String
Dim XMLDOC  As New DOMDocument
Dim strResponse As String
    
sEnv = ""
sEnv = sEnv & "<?xml version=""1.0"" encoding=""UTF-8""?>"
sEnv = sEnv & "<request>"
sEnv = sEnv & "<headers>"
sEnv = sEnv & "<Auth>TEaOzAz3iZaFHyg7QwKolAVViYEJhphe</Auth>"
sEnv = sEnv & "</headers>"
sEnv = sEnv & "<data>"
sEnv = sEnv & "<dic_popl>CZ1212121218</dic_popl>"
sEnv = sEnv & "<id_provoz>11</id_provoz>"
sEnv = sEnv & "<id_pokl>ZKP-1</id_pokl>"
sEnv = sEnv & "<porad_cis>123</porad_cis>"
sEnv = sEnv & "<celk_trzba>16</celk_trzba>"
sEnv = sEnv & "<zakl_nepodl_dph>0.5</zakl_nepodl_dph>"
sEnv = sEnv & "<zakl_dan1>8.1</zakl_dan1>"
sEnv = sEnv & "<dan1>1.7</dan1>"
sEnv = sEnv & "<zakl_dan2>4.96</zakl_dan2>"
sEnv = sEnv & "<dan2>0.74</dan2>"
sEnv = sEnv & "<zakl_dan3>0</zakl_dan3>"
sEnv = sEnv & "<dan3>0</dan3>"
sEnv = sEnv & "<polozky_uctenky>"
sEnv = sEnv & "<polozka>"
sEnv = sEnv & "<nazev>Voda perlivá 1.5l</nazev>"
sEnv = sEnv & "<mnozstvi>2</mnozstvi>"
sEnv = sEnv & "<cena>4.9</cena>"
sEnv = sEnv & "</polozka>"
sEnv = sEnv & "<polozka>"
sEnv = sEnv & "<nazev>Rohlík tukový</nazev>"
sEnv = sEnv & "<mnozstvi>3</mnozstvi>"
sEnv = sEnv & "<cena>1.9</cena>"
sEnv = sEnv & "</polozka>"
sEnv = sEnv & "</polozky_uctenky>"
sEnv = sEnv & "<zpusoby_platby>"
sEnv = sEnv & "<platba>"
sEnv = sEnv & "<nazev>Hotovost</nazev>"
sEnv = sEnv & "<castka>10</castka>"
sEnv = sEnv & "</platba>"
sEnv = sEnv & "<platba>"
sEnv = sEnv & "<nazev>Platební karta</nazev>"
sEnv = sEnv & "<castka>15</castka>"
sEnv = sEnv & "</platba>"
sEnv = sEnv & "</zpusoby_platby>"
sEnv = sEnv & "<zaokrouhleni>0.5</zaokrouhleni>"
sEnv = sEnv & "<vraceno>9</vraceno>"
sEnv = sEnv & "<paticka_uctenky>Děkujeme za Váš nákup</paticka_uctenky>"
sEnv = sEnv & "</data>"
sEnv = sEnv & "</request>"

sURL = "https://rest.api-eet.cz/v1/xml/sale-add"

With xmlHtp
  .Open "POST", sURL, False
  .Send sEnv
    
  XMLDOC.loadXML .responseText
  strResponse = .responseText
End With
  
Set xmlHtp = Nothing
  
Debug.Print strResponse

Kromě formátu JSON lze s API komunikovat také ve formátu XML. Obsáhlejší dokumentace je dostupná přihlášeným uživatelům přímo v kontrolním panelu.

Kontrolní panel

Součástí API pro EET je samozřejmě i webová administrace, která Vám umožní spravovat Vaše certifikáty. To je ale pouze začátek, kontrolní panel toho obsahuje a umí mnohem víc:

  • Dokumentace - v kontrolním panelu najdete přehlednou dokumentaci k API pro EET včetně příkladů a ukázek implementace.
  • Formulář pro odeslání tržby do EET - přímo z kontrolního panelu je možné odeslat do EET tržbu. Ve formuláři lze použít všechna datová pole která EET zpracovává, je to tedy ideální nástroj pro hlášení tržeb ve zjednodušeném režimu, nebo pro provedení rychlého storna / opravy.
  • Archivace požadavků na API - všechny požadavky které k nám přicházejí jsou archivovány včetně jejich obsahu - můžete si dohledat kdy a z jaké adresy přišel požadavek týkající se Vašeho uživatelského účtu.
  • Archivace dotazů na EET a odpovědí finanční správy - uchováváme všechny datové položky zpráv které byly do EET odeslány a samozřejmě i odpovědi, které byly z EET obdrženy. Také sledujeme za jak dlouho přišla odpověď a jak dlouho komunikace s EET trvala.
  • Sestavy a reporty - samozřejmostí je vyhledávání v požadavcích a filtrace podle výsledku požadavku. Filtrovat lze podle všech stavů zpracování (úspěch / varování / chyba).
  • Stav EET - průběžně kontrolujeme jestli je možné se připojit nejen k produkčnímu prostředí EET, ale také k playgroundu.
  • Přehledý souhrn informací - na nástěnce najdete všechny důležité údaje.

Ceník

API pro EET je kromě verze FREE, která je zdarma, nabízeno v placených verzích LIGHT a PRO. Tyto verze se liší počtem požadavků na API, které je možné vykonat.

Verze FREE

Tato verze je zdarma dostupná všem uživatelům ihned po registraci na neomezeně dlouhou dobu.

Omezení: 2 požadavky za minutu, 50 požadavků za 24 hodin.

Verze LIGHT

Tato verze je dostupná na objednávku. Objednání lze provést přímo z kontrolního panelu v sekci Verze systému.

Omezení: neomezeně požadavků za minutu, 500 požadavků za 24 hodin.

Cena: 49,- Kč / měsíc

Verze PRO

Tato verze je dostupná na objednávku. Objednání lze provést přímo z kontrolního panelu v sekci Verze systému.

Omezení: neomezeně požadavků za minutu, 5000 požadavků za 24 hodin.

Cena: 99,- Kč / měsíc

Uvedené ceny jsou konečné, nejsme plátci DPH.

Chci přístup do API pro EET!

Získat přístup do API je otázkou několika vteřin - stačí si vytvořit účet a všechny funkce jsou Vám ihned k dispozici.

Začněte hned teď!

Autor

Zdenek

Zdeněk

„Programování se věnuji skoro 15 let. V současné době se zaměřuji hlavně na webové aplikace a na míru vytvářené informační systémy. Mým posledním větším počinem je cloudový pokladní systém Účtenkovač, kde jsem poprvé řešil implementaci komunikace s EET. A když už je to jednou hotovo a ve funkční podobě, proč nezjednodušit práci a neulehčit život i ostatním?“

zdenek@api-eet.cz

Kontaktujte nás

Pokud máte jakékoliv dotazy nebo připomínky, neváhejte nás kontaktovat.

Kontaktní formulář

Odesílám...