Firma A — odosielateľ
0245:0000000001487d008a-b3a5-49d0-be3e-ba45cc9c4ffesk_live_••••••••••••••••1eacPoužite na test odoslania faktúry. V hlavičke X-Peppol-Participant-Id, v metadata.senderParticipantId.
Štandardizované rozhranie Peppol Access Pointu, na ktorom sa zhodli slovenskí AP operátori. Posielate UBL Peppol BIS 3.0, dostanete UBL od protistrany — žiadne vendor lock-in. SAPI-SK 1.0 špecifikácia: sapi-sk.sk. Implementácia ePošťák cez 8 spec-kompatibilných endpointov nižšie.
Tieto údaje sú verejné sandbox účty pre testovanie integrácie. Sú zaregistrované v Peppol sieti — môžete medzi nimi reálne posielať dokumenty bez registrácie. Pre produkčné kľúče napíšte na <a href="mailto:info@epostak.sk">info@epostak.sk</a>.
487d008a-b3a5-49d0-be3e-ba45cc9c4ffesk_live_••••••••••••••••1eacPoužite na test odoslania faktúry. V hlavičke X-Peppol-Participant-Id, v metadata.senderParticipantId.
b6649c59-2f9d-4ae2-a750-af257c455478sk_live_••••••••••••••••6733Použite na test prijatia. Token mintnite vlastnými credentialmi B, request pošlite s X-Peppol-Participant-Id: 0245:0000000002.
Čo je SAPI a ako napojiť prvého klienta cez ePošťák — od jeho registrácie u Finančnej správy až po prvý dokument.
SAPI-SK 1.0 je otvorený štandard, na ktorom sa zhodli slovenskí Peppol Access Point operátori, aby integrátorov nezaháknuli na jeden konkrétny back-end. Jedna integrácia, ľubovoľný AP — keď to raz urobíte pre jedného poskytovateľa, rovnaké volania fungujú aj proti hocikomu inému kto SAPI implementuje. Špecifikáciu nájdete na sapi-sk.sk.
Zjednodušená verzia pre integrátorov. SAPI poskytuje minimálny set 8 endpointov — autentifikáciu (token / renew / revoke / status) a doručovanie dokumentov (send / list / detail / acknowledge). Žiadne dashboardy, žiadne firma-management API, žiadne webhooky. Pošlete UBL XML, dostanete UBL XML, hotovo. Ak váš ERP vie generovať UBL Peppol BIS 3.0 faktúru, integrácia je otázka 1-2 dní.
Potrebujete viac? Pre webhooky, OCR rozpoznávanie PDF/skenov, JSON režim, hromadné operácie alebo správu viacerých klientskych firiem z jedného účtu odporúčame náš rozšírený Enterprise API. Funguje paralelne so SAPI — môžete ich miešať podľa potreby.
Časový rámec. Voľba digitálneho poštára na portáli Finančnej správy SR sa plánuje spustiť koncom mája 2026, kedy začína obdobie dobrovoľnej elektronickej fakturácie. Od 1. januára 2027 je elektronická fakturácia povinná pre všetkých platiteľov DPH na Slovensku.
Krok 1: Klient si zvolí ePošťáka. Váš klient sa prihlási na portál Finančnej správy SR a v zozname certifikovaných poskytovateľov doručovacej služby si zvolí ePošťáka (Kaja Solutions s.r.o.). Následne si u nás vytvorí konto. My ho automaticky zaregistrujeme do centrálneho SMP a vytvoríme mu Peppol ID v tvare 0245:DIČ. Týmto sa stáva viditeľným v celej európskej Peppol sieti. Detailne v článku Ako si zvoliť digitálneho poštára.
Krok 2: Vyžiadajte si SAPI prístup. SAPI nepoužíva OAuth consent flow ako Enterprise API — namiesto toho dostanete od nás client_id a client_secret priamo viazaný na konkrétne Peppol ID. Pre testovanie použite verejné sandbox kľúče nižšie (Firma A / Firma B). Pre produkčné kľúče napíšte na info@epostak.sk — potrebujeme zoznam Peppol ID, za ktoré budete posielať alebo prijímať.
Krok 3: Implementujte 8 endpointov. Vymeňte client credentials za JWT cez POST /sapi/v1/auth/token, cachujte access_token, posielajte UBL Peppol BIS 3.0 cez POST /sapi/v1/document/send s hlavičkou X-Peppol-Participant-Id identifikujúcou firmu, kontrolujte príjmy cez GET /sapi/v1/document/receive a potvrdzujte spracované dokumenty cez POST /sapi/v1/document/receive/{id}/acknowledge. Detailne v sekcii Authentication a Documents nižšie.
Pred produkciou si všetko overte na zdieľaných sandbox účtoch (Firma A / Firma B nižšie). Krok-za-krokom sprievodca aj s code snippetmi je v článku Ako integrovať digitálneho poštára do vášho ERP.
OAuth 2.0 client_credentials flow. Vymeňte client_id + secret za JWT a používajte ako Bearer token.
Životnosť tokenov. access_token platí 15 minút (expires_in: 900), refresh_token 30 dní. Cachujte access_token v pamäti — nevolajte /auth/token pred každým requestom (rate-limit + ~100 ms latencia navyše). Pri prvej 401 alebo proaktívne ~1 minútu pred expiráciou zavolajte /auth/renew.
Refresh token rotation. /auth/renew vždy vráti nový pár — starý refresh_token sa okamžite invaliduje. Replay (opätovné použitie už raz spotrebovaného refresh tokenu) vráti 401.
OAuth 2.0 client_credentials grant. Vymeňte client_id + client_secret za krátkodobý JWT access_token (15 min) a long-lived refresh_token (30 dní). Volajte tento endpoint raz, token cachujte v pamäti — pri každej požiadavke ho znovu nemintujte.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| client_id | string | REQ | UUID prideľený pri registrácii |
| client_secret | string | REQ | sk_live_* alebo sk_int_* tajný kľúč |
| grant_type | string | REQ | Musí byť client_credentials |
| scope | string | optional | Voliteľný subset povolených scope-ov, oddelený medzerami |
Skontroluje či je access_token ešte platný, kedy expiruje, a či ho treba obnoviť. Pole should_refresh prejde na true ~3 minúty pred expiráciou — vtedy zavolajte /auth/renew.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| Authorization | string | REQ | Bearer <access_token> |
Vymeňte refresh_token za nový pár (token rotation). Starý refresh_token sa okamžite invaliduje — opätovné použitie vráti 401 (replay protection).
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| grant_type | string | REQ | Musí byť refresh_token |
| refresh_token | string | REQ | Platný refresh token rt_... |
Idempotentne zruší prístup access alebo refresh tokenu. Pri access tokene sa jeho jti pridá do Redis blocklistu na zvyšok TTL; pri refresh tokene sa zmaže server-side stav. Vždy 200 (idempotent).
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| token | string | REQ | JWT alebo rt_... token |
| token_type_hint | string | optional | Voliteľne: "access_token" | "refresh_token" |
Odosielanie a prijímanie Peppol dokumentov ako UBL XML.
UBL XML in, UBL XML out. SAPI je transport-only — vy posielate hotový UBL Peppol BIS 3.0 dokument, my ho doručíme cez AS4 a vrátime UBL od protistrany. Validáciu schemou a schematronom robíme na našej strane (UBL 2.1 XSD + EN 16931 + Peppol BIS 3.0 schematrons), ale formát musí prísť od vás.
X-Peppol-Participant-Id header. Posielate alebo prijímate vždy v mene konkrétneho Peppol ID — header X-Peppol-Participant-Id: 0245:DIČ hovorí, ktorá firma je zdrojom alebo cieľom requestu. Token sám o sebe nevie ku ktorej firme akcia patrí.
Idempotency-Key. Pri /document/send je povinné poslať Idempotency-Key: <UUID> — opakovanie po sieťovej chybe s rovnakým UUID vráti cached 202 namiesto duplicitného odoslania.
Odošle dokument cez Peppol sieť (UBL XML). Pred odoslaním overíme cez SMP, že je príjemca v sieti — ak nie, vraciame 422. Idempotency-Key (UUID) je povinný; duplicitné volanie s rovnakým telom vráti cached 202.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| Authorization | string | REQ | Bearer <access_token> |
| X-Peppol-Participant-Id | string | REQ | Peppol ID odosielateľa, napr. 0245:0000000001 |
| Idempotency-Key | string | REQ | UUID — opakovaný request s rovnakým telom vráti cached odpoveď |
| metadata | object | REQ | { documentId, documentTypeId, processId, senderParticipantId, receiverParticipantId, creationDateTime } |
| payload | string | REQ | UBL XML obsah faktúry |
| payloadFormat | string | REQ | Musí byť "XML" |
| payloadEncoding | string | optional | Voliteľné, default "UTF-8" |
| checksum | string | optional | Voliteľný SHA-256 hex digest payloadu |
Vráti zoznam dokumentov, ktoré dorazili na váš Peppol ID. Pri väčších objemoch stránkujte cez pageToken.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| Authorization | string | REQ | Bearer <access_token> |
| X-Peppol-Participant-Id | string | REQ | Peppol ID prijímateľa, napr. 0245:0000000002 |
| limit | integer | optional | 1-100, default 20 |
| status | string | optional | RECEIVED | ACKNOWLEDGED |
| pageToken | string | optional | Token na ďalšiu stránku |
Vráti plný UBL XML payload prijatého dokumentu vrátane metadát.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| Authorization | string | REQ | Bearer <access_token> |
| X-Peppol-Participant-Id | string | REQ | Peppol ID príjemcu, napr. 0245:0000000001 |
| documentId | string | REQ | providerDocumentId zo zoznamu /document/receive |
Označí dokument ako spracovaný — prejde zo stavu RECEIVED do ACKNOWLEDGED. Po potvrdení sa už nevracia v zozname so status=RECEIVED.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| Authorization | string | REQ | Bearer <access_token> |
| X-Peppol-Participant-Id | string | REQ | Peppol ID príjemcu, napr. 0245:0000000001 |
| documentId | string | REQ | providerDocumentId |
Chybové kódy, rate limity, uchovávanie dát.
Transparentné ceny bez skrytých poplatkov.
Testovacie prostredie pre integráciu (verejné Firma A / Firma B účty).
| Objem | Cena |
|---|---|
| Neobmedzene | zadarmo |
Cena za dokument odoslaný cez Peppol cez POST /document/send.
| Objem | Cena |
|---|---|
| 1 – 1 000 | 0,10 € |
| 1 001 – 2 000 | 0,08 € |
| 2 001+ | 0,06 € |
| 5 000+ | individuálne |
Cena za dokument prijatý cez Peppol a sprístupnený cez GET /document/receive.
| Objem | Cena |
|---|---|
| 1 – 1 000 | 0,08 € |
| 1 001 – 2 000 | 0,07 € |
| 2 001+ | 0,06 € |
| 5 000+ | individuálne |
Ceny sú bez DPH. Platí sa len za dokumenty skutočne doručené cez Peppol — ak SMP príjemcu nenájde alebo doručenie zlyhá, neúčtujeme. Sandbox je neobmedzený a zadarmo.
Limitácia požiadaviek na API kľúč.
Štandardné endpointy200 / 60 sPOST /document/send150 / 60 sX-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetRetry-AfterHlavičky sa vracajú len v HTTP 429 odpovediach. Odporúčame exponenciálny backoff.
Chyby sa vracajú vo formáte {"error":{"code":"...","message":"...","requestId":"..."}}. Kódy označené ako retryable je bezpečné opakovať s exponenciálnym backoffom.
| Status | Kód | Popis |
|---|---|---|
| 400 | VALIDATION | Neplatný request — chýbajúce alebo zlé pole |
| 401 | AUTH | Neplatný alebo expirovaný token |
| 403 | FORBIDDEN | Token je platný, ale nemá oprávnenie pre túto firmu/scope |
| 404 | NOT_FOUND | Dokument neexistuje alebo nepatrí volajúcej firme |
| 409 | CONFLICTretryable | Idempotency key sa práve spracováva (in-flight collision) |
| 422 | BUSINESS | Príjemca nie je v Peppol sieti, alebo SMP neakceptuje doctype |
| 423 | LOCKED | Účet zablokovaný (5 zlých prihlásení / 10 min) |
| 429 | RATE_LIMITEDretryable | Prekročený rate limit |
| 503 | TEMPORARYretryable | Dočasná nedostupnosť — opakujte s exponenciálnym backoffom |
Každá signovaná AS4 obálka — odoslaná aj prijatá — sa automaticky ukladá do WORM MinIO bucketu so S3 Object Lock v režime COMPLIANCE na 10 rokov ako infraštruktúra Access Pointu. Platí pre všetky firmy bez ohľadu na plán.
Zákonná povinnosť uchovávať daňové doklady 10 rokov (zákon 431/2002 §35) je na vystaviteľovi/príjemcovi faktúry — vy zostávate vlastníkom dokumentov. Naša WORM infraštruktúra túto povinnosť pokrýva, ale formálne ju neprenášame na seba.
Na mobile sa code panel skladá pod obsah. Pre každý endpoint posúvaj nadol pod jeho parametre — alebo otvor desktop verziu.