CeníkAPI & SMTPŘešeníSrovnáníNástrojeBlogFAQKontakt
PřihlásitRegistrovat
Tmavý režim
REST API

E-mail API pro vývojáře

Jeden HTTP požadavek na POST https://topemail.cz/api/email/send s JSON tělem odešle e-mail z vaší domény; odpověď vrátí id a stav, změny stavu přijdou webhookem podepsaným HMAC. Autentizace je API klíčem, dokumentace a chybové hlášky jsou česky, specifikace je v OpenAPI. Prvních 1 000 e-mailů měsíčně je zdarma a testovat můžete bez ověřené domény.

Registrovat zdarma →Vyzkoušet na test.topemail.cz
1 000 e-mailů měsíčně zdarma · bez platební karty · bez paušálu

Endpoint a tělo požadavku

Základní adresa je https://topemail.cz/api. Odeslání e-mailu je jeden POST na /email/send s hlavičkou Authorization: Bearer clientId:secret (API klíč z dashboardu). Tělo je JSON s poli from, to, subject a html nebo text; volitelně cc, bcc, replyTo, attachments (base64, celkem do 10 MB), tags a smsFallback. Odesílatel musí být na doméně ověřené ve vašem účtu, nebo na testovací doméně.

curl
curl -X POST https://topemail.cz/api/email/send \
  -H "Authorization: Bearer <clientId>:<secret>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-2026-1042-confirm" \
  -d '{
    "from": "Můj e-shop <objednavky@muj-eshop.cz>",
    "to": "zakaznik@example.com",
    "replyTo": "podpora@muj-eshop.cz",
    "subject": "Potvrzení objednávky 2026-1042",
    "html": "<p>Děkujeme, objednávku jsme přijali…</p>",
    "tags": {"order": "2026-1042", "type": "confirm"}
  }'

# 202 Accepted
# {"ok": true, "id": "em_01jb7k3x9…", "status": "queued", "price": 0.06}

API odpovídá 202 Accepted s identifikátorem e-mailu a cenou, kterou si za něj strhne z kreditu (0 u bezplatných e-mailů). Stav queued znamená, že e-mail prošel validací a je ve frontě; vlastní doručení sledujete webhookem nebo přes GET /v1/email/{id}.

Node.js

Node.js · fetch
// Node.js 18+: nativni fetch, bez knihoven
const res = await fetch('https://topemail.cz/api/email/send', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer ' + process.env.TOPEMAIL_KEY,   // "clientId:secret"
    'Content-Type': 'application/json',
    'Idempotency-Key': 'order-2026-1042-confirm',
  },
  body: JSON.stringify({
    from: 'Můj e-shop <objednavky@muj-eshop.cz>',
    to: 'zakaznik@example.com',
    subject: 'Potvrzení objednávky 2026-1042',
    html: '<p>Děkujeme, objednávku jsme přijali…</p>',
    tags: { order: '2026-1042', type: 'confirm' },
  }),
})
const data = await res.json()
if (!res.ok) throw new Error(data.code + ': ' + data.error)
console.log(data.id, data.status)   // em_01jb7k3x9… queued

PHP

PHP · cURL
<?php
// PHP 8: cURL bez knihoven (nebo composer require topemail/topemail-php)
$ch = curl_init('https://topemail.cz/api/email/send');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . getenv('TOPEMAIL_KEY'),   // "clientId:secret"
        'Content-Type: application/json',
        'Idempotency-Key: order-2026-1042-confirm',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'from'    => 'Můj e-shop <objednavky@muj-eshop.cz>',
        'to'      => 'zakaznik@example.com',
        'subject' => 'Potvrzení objednávky 2026-1042',
        'html'    => '<p>Děkujeme, objednávku jsme přijali…</p>',
        'tags'    => ['order' => '2026-1042', 'type' => 'confirm'],
    ], JSON_UNESCAPED_UNICODE),
]);
$data = json_decode(curl_exec($ch), true);
echo $data['id'];   // em_01jb7k3x9…

Oficiální knihovny: npm i topemail (Node.js 18+, TypeScript) a composer require topemail/topemail-php (PHP 8.0+); obě umí odeslání, stav, šablony, blokované adresy, automatické opakování při 429 a 5xx a ověření podpisu webhooku. Zdrojové kódy jsou na GitHubu pod licencí MIT. Podrobné návody máme pro Node.js, PHP, Python a Django, Laravel a n8n a Make.

Webhooky: stav doručení bez dotazování

Při každé změně stavu e-mailu pošleme HTTP POST na vaši adresu s událostí email.status. Tělo je podepsané HMAC-SHA256 tajným klíčem webhooku, podpis je v hlavičce X-TopEmail-Signature. Očekáváme odpověď 2xx do 10 sekund; při neúspěchu doručení opakujeme s rostoucím odstupem po dobu 24 hodin, takže krátký výpadek vašeho serveru události neztratí.

Webhook · email.status
POST https://vas-web.cz/topemail-webhook
X-TopEmail-Event: email.status
X-TopEmail-Signature: sha256=3f1a…

{ "event": "email.status", "id": "em_01jb7k3x9…", "status": "delivered",
  "to": "zakaznik@example.com", "tags": {"order": "2026-1042", "type": "confirm"},
  "at": "2026-11-12T09:41:07Z",
  "reason": {"title": "Doručeno", "explanation": "Server příjemce e-mail přijal.", "advice": "Nemusíte nic dělat."} }
StavVýznamCo s ním v aplikaci
sentpředáno cílovému serveruinformativní
deliveredcílový server e-mail přijaloznačit jako doručeno
deferredodloženo, zkoušíme znovu až 24 hpočkat; po 4 h může odejít SMS záloha
bouncedtrvale odmítnuto, adresa jde na blokovaný seznamvyžádat si od zákazníka jinou adresu
complainedpříjemce označil e-mail jako spampřestat posílat, adresa je blokovaná
suppressedneodesláno, adresa už je na blokovaném seznamunepokoušet se znovu, upozornit obsluhu
Celý postup včetně ukázky serveru je v článku Webhooky: stav doručení, HMAC a idempotence.

Idempotence: proč zákazník nedostane potvrzení dvakrát

Síť selže, timeout vyprší, worker se restartuje a váš kód požadavek zopakuje. Bez ochrany by zákazník dostal dvě potvrzení objednávky. Pošlete proto hlavičku Idempotency-Key s klíčem odvozeným z vaší entity, například order-2026-1042-confirm. Opakovaný požadavek se stejným klíčem e-mail znovu neodešle a vrátí původní odpověď, včetně původního id. U SMTP relay plní stejnou roli vlastní hlavička Message-ID; rozdíl popisuje heslo REST API vs. SMTP a idempotence.

Šablony na serveru

HTML nemusíte skládat v aplikaci. V dashboardu vytvoříte šablonu s proměnnými ({{orderNumber}}, {{trackingUrl}}…) a v požadavku pošlete jen "template": "expedice-zasilky" a "variables": {…}; předmět, HTML i textovou verzi doplní server. Šablony lze spravovat i přes API (/api/email/templates), takže je můžete verzovat spolu s kódem. Pro potvrzení objednávky, expedici, fakturu, reset hesla a ověřovací kód nabízíme připravené výchozí šablony, které si upravíte.

SMS záloha pro kritické e-maily
Pole smsFallback: { to, text } pošle SMS přes váš účet TopSMS.cz, pokud je e-mail trvale odmítnut nebo odložen déle než 4 hodiny. Hodí se pro ověřovací kódy a informace o doručení zásilky. Zapíná se v Nastavení účtu.

Limity, chyby a cena

Cena nezávisí na způsobu odeslání: prvních 1 000 e-mailů v kalendářním měsíci zdarma, dál 0,06 Kč za e-mail do 5 000 e-mailů v měsíci, 0,02 Kč do 50 000 a 0,01 Kč nad 50 000, bez DPH. Bez paušálu, z předplaceného kreditu, který nepropadá; faktura v Kč. Podrobnosti v ceníku, kompletní referenci na stránce API a SMTP. Než začnete posílat zákazníkům, zkontrolujte DNS záznamy své domény bezplatným nástrojem.

Časté dotazy

Jak se k API přihlašuji?

Hlavičkou Authorization: Bearer clientId:secret. Dvojici vygenerujete v dashboardu, klíčů můžete mít víc (produkce, staging) a kdykoli je odvolat. Stejný klíč funguje i jako přihlášení k SMTP relay.

Co se stane, když požadavek pošlu dvakrát?

Pošlete-li hlavičku Idempotency-Key, druhý požadavek se stejným klíčem e-mail znovu neodešle a vrátí původní odpověď. Bez hlavičky se každý požadavek zpracuje samostatně. Klíč doporučujeme odvodit z vaší entity, například order-2026-1042-confirm.

Jak zjistím, že byl e-mail doručen?

Dvěma způsoby: GET /v1/email/{id} vrátí aktuální stav a historii událostí, nebo si nastavíte webhook email.status a každou změnu stavu (sent, delivered, deferred, bounced, complained, suppressed) dostanete jako POST podepsaný HMAC-SHA256.

Existují SDK?

Ano, oficiální knihovny pro Node.js (npm i topemail, TypeScript, ESM i CommonJS) a PHP (composer require topemail/topemail-php, PHP 8.0+). Pokrývají odeslání, stav, šablony, blokované adresy a ověření podpisu webhooku. Zdrojové kódy jsou na GitHubu pod licencí MIT. Pro Python a další jazyky stačí HTTP klient a OpenAPI specifikace.

Mohu API testovat, aniž bych ověřil doménu?

Ano. Každý účet smí posílat z adres na testovací doméně test.topemail.cz, přes API i SMTP: nejvýš 50 e-mailů denně, přílohy do 2 MB, příjemcem může být jen e-mail vašeho účtu nebo adresa na doméně, kterou už máte ověřenou. E-maily se počítají do bezplatných 1 000 měsíčně.

Jaké jsou limity a cena?

Přílohy do 10 MB na zprávu, každý příjemce v to, cc a bcc se účtuje jako jeden e-mail. Při překročení rychlosti vrací API 429 rate_limited; SDK požadavek automaticky zopakují. Cena: 1 000 e-mailů měsíčně zdarma, pak 0,06 Kč do 5 000 e-mailů v měsíci, 0,02 Kč do 50 000 a 0,01 Kč nad 50 000, bez DPH.

První e-mail z API za pět minut
Zaregistrujte se, vygenerujte klíč a pošlete první požadavek z adresy na test.topemail.cz. Ověření domény doděláte, až budete chtít posílat zákazníkům.
Založit účet zdarma →Nejdřív vyzkoušet z test.topemail.cz