eePošťák.skEnterprise API

Enterprise API

Začnite integrovať hneď. Od vás potrebujeme len JSON, UBL XML alebo PDF/sken — naše OCR z neho vyextrahuje Peppol BIS 3.0 faktúru. Všetko okolo Peppolu — generovanie UBL, validácia, podpis, doručenie cez AS4, MLR, TDD reporting na Finančnú správu — riešime my. Vy sa sústredíte na svoj produkt, my doručíme faktúru na druhom konci. Enterprise API je pre ERP výrobcov, účtovné platformy a integrátorov spravujúcich viacero firiem z jedného účtu; SDK je dostupné v 6 jazykoch (TypeScript, Python, PHP, Java, C#, Ruby).

Demo testovacie účty

Tieto demo účty sú zdieľané medzi všetkými integrátormi. Použite client_id + client_secret na získanie JWT cez POST /api/v1/auth/token. Pri volaniach cez integrátorský kľúč (sk_int_*) priložte HTTP hlavičku X-Firm-Id, ktorej hodnotou je Firm UUID cieľovej firmy (uvedený v karte Test Odosielateľ alebo Test Prijímateľ nižšie).

Test Odosielateľ (Participant 1)

0245:0000000001
client_id
487d008a-b3a5-49d0-be3e-ba45cc9c4ffe
client_secret
sk_live_••••••••••••••••1eac
X-Firm-Id
f2cea3cf-f29e-4ea2-9e76-b06a312ec9ab

Test Prijímateľ (Participant 2)

0245:0000000002
client_id
b6649c59-2f9d-4ae2-a750-af257c455478
client_secret
sk_live_••••••••••••••••6733
X-Firm-Id
b1022d80-5016-4dad-a8d2-53685cab1701

Demo Integrátor (ERP)

integrátor
client_id
8924a11d-a93c-4d5a-b54b-1f1ff246152c
client_secret
sk_int_t••••••••••••••••c282

Integrátorský kľúč je naviazaný na obe demo participantské firmy vyššie. Cieľovú firmu určujete v každom volaní pomocou HTTP hlavičky X-Firm-Id, kam doplníte Firm UUID — buď f2cea3cf-f29e-4ea2-9e76-b06a312ec9ab (Test Odosielateľ, 0245:0000000001) alebo b1022d80-5016-4dad-a8d2-53685cab1701 (Test Prijímateľ, 0245:0000000002).

Onboarding klienta

Pre koho je Enterprise API a ako napojíte prvého klienta — od jeho registrácie u Finančnej správy, cez OAuth consent, až po prvú faktúru. Detailné endpointy, scopes a webhook signature sú nižšie v sekciách Authentication, Endpoints a Webhooks.

Č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štá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štá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 sme to opísali v článku Ako si zvoliť digitálneho poštára.

Krok 2: Klient vám dá consent. Aby ste vy ako integrátor mohli spravovať klientovu firmu, musí vám klient v dashboarde ePoštáka explicitne udeliť súhlas (OAuth consent flow). Pošlete ho na /oauth/authorize, on klikne „Súhlasím“ a my vám vrátime authorization code. Ten vymeníte v POST /api/oauth/token za integrátorský API kľúč naviazaný na túto konkrétnu firmu. Bez tohto súhlasu vám POST /api/v1/firms/assign vráti 403 CONSENT_REQUIRED — neexistuje cesta ako claimnúť cudziu firmu cez API bez vedomia jej majiteľa.

Krok 3: A je to. Po consent-e môžete s firmou robiť všetko podľa scope-ov, ktoré vám klient udelil — odosielať faktúry, prijímať dokumenty, registrovať webhooky, sledovať stavy, validovať UBL. Pri každom volaní v mene klienta priložte hlavičku X-Firm-Id s UUID jeho firmy. JWT získavate z integrátorského kľúča cez POST /api/v1/auth/token (platí 15 minút, refresh tokeny tu nie sú).

Pred produkciou si všetko overte na našich zdieľaných sandbox účtoch (sekcia Demo testovacie účty vyššie). Pre produkčné kľúče je potrebná podpísaná zmluva — napíšte na info@epostak.sk. Krok-za-krokom sprievodca aj s code snippetmi je v článku Ako integrovať digitálneho poštára do vášho ERP.

Autentifikácia

OAuth 2.0 client_credentials — vymeňte API kľúč za krátkodobý JWT. API kľúče (sk_live_* / sk_int_*) nie sú priamo použiteľné ako bearer. Slúžia ako client_secret v POST /api/v1/auth/token, ktorý vráti JWT (eyJ...). JWT používate ako Authorization: Bearer na všetkých Enterprise aj SAPI routách.

Životnosť tokenov. POST /api/v1/auth/token vráti dva tokeny: access_token (JWT, RS256) s platnosťou 15 minút (expires_in: 900) a refresh_token (rt_…) s platnosťou 30 dní. Refresh token rotujete cez POST /api/v1/auth/renew — server vám vráti novú dvojicu, starý refresh sa okamžite invaliduje (one-shot, replay → 401).

Cachovanie tokenu. Nikdy nevolajte /auth/token pred každým API requestom — minete rate-limit (200/min) a zaťažíte si latenciu o ~100 ms na každú operáciu. Cachujte access_token v pamäti (alebo v zdieľanom Redis-e pri viacerých workeroch) a používajte ho do expirácie. Refreshujte buď proaktívne ~1 minútu pred uplynutím expires_in, alebo reaktívne pri prvej 401 odpovedi (skúste raz získať nový token a request zopakovať). Pri rotácii sa SDK štandardne stará o cache automaticky; pri vlastnej implementácii pamätajte, že refresh_token je one-shot.

Zneplatnenie. Token môžete kedykoľvek zneplatniť cez POST /api/v1/auth/revoke — pri access tokene sa jeho jti pridá do Redis blocklistu na zvyšok jeho TTL, pri refresh tokene sa zmaže server-side stav. Endpoint je idempotentný (vždy 200). Pri rotácii kľúča (POST /auth/rotate-secret) sa všetky aktívne tokeny okamžite zneplatnia.

GET/api/v1/auth/status

Introspekcia kľúča

Vráti informácie o aktuálnom API kľúči, firme, pláne a štandardnom rate-limite bez odhalenia plaintext kľúča. Užitočné pre zdravotnú kontrolu a debugging. Pole rateLimit zobrazuje štandardný 200 req/min limit — niektoré endpointy majú odlišné limity (pozri sekciu Rate limity vyššie).

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
  • 404Not Found
POST/api/v1/auth/rotate-secret

Rotovať API kľúč

Deaktivuje aktuálny kľúč a vygeneruje nový sk_live_* kľúč. Plaintext hodnota sa vráti iba raz v odpovedi — uložte si ju okamžite. Integrátorské kľúče (sk_int_*) sa rotujú manuálne cez podporu — tento endpoint pri nich vráti 403.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Forbidden
  • 404Not Found
GET/api/v1/account

Info o konte

Vrati informácie o firme, Peppol ID, plane a pocte dokumentov.

Odpovede

  • 200OK
  • 400Bad Request
  • 401Unauthorized
  • 404Not Found
POST/api/internal/integrator/oauth/clients

Registrovať OAuth klienta

Registrácia nového OAuth klienta pre integrátora. Vráti client_id a client_secret. Auth: integrátorský JWT (sk_int_* kľúč).

Parametre

NázovTypPovinnéPopis
namestringREQNázov OAuth klienta
redirect_urisstring[]REQPovolené redirect URI (HTTPS alebo localhost)
logo_urlstringoptionalURL loga zobrazené na consent obrazovke

Odpovede

  • 201Created (client_secret sa zobrazí len raz — uložte si ho okamžite.)
  • 401Unauthorized
  • 409Conflict
GET/oauth/authorize

Autorizačná URL

Presmerujte klienta na túto URL. Po schválení bude presmerovaný späť na redirect_uri s kódom.

Parametre

NázovTypPovinnéPopis
client_idstringREQID vášho OAuth klienta
redirect_uristringREQRegistrovaná callback URL
response_typestringREQcode (povolené: code)
scopestringoptionalfirms:manage documents:send documents:read — ak je prázdne, použije sa celý rozsah klienta
statestringoptionalodporúčané pre CSRF ochranu — náhodný reťazec
code_challengestringREQPKCE code challenge (SHA-256) (43–128 znakov)
code_challenge_methodstringREQS256 (povolené: S256)

Odpovede

  • 302Redirect
  • 400Bad Request
POST/api/oauth/token

Výmena kódu za token

Vymení autorizačný kód za nový sk_int_* client_secret a metadata firmy. Content-Type: application/x-www-form-urlencoded (odporúčané podľa RFC 6749) alebo application/json.

Parametre

NázovTypPovinnéPopis
grant_typestringREQauthorization_code (povolené: authorization_code)
codestringREQAutorizačný kód z redirect_uri
client_idstringREQOAuth client ID
client_secretstringREQOAuth client secret
redirect_uristringREQRovnaká URL ako pri autorizácii
code_verifierstringREQPKCE code verifier

Odpovede

  • 200OK
  • 400Bad Request — invalid_grant (Neplatný alebo expirovaný autorizačný kód) | invalid_client (Nesprávny client_id alebo client_secret) | invalid_scope (Admin zuzil povolene scopy OAuth klienta medzi /authorize a /token — pozadovane scopy uz nie su povolene)
  • 401Unauthorized

Dokumenty

Odosielanie a príjem faktúr, sledovanie stavu, sťahovanie evidencie/PDF/UBL, OCR extrakcia, validácia a konverzia formátov.

POST/api/v1/documents/send

Odoslať dokument

Odosle dokument cez Peppol siet. Podporuje JSON mode a raw UBL XML mode. Pre odoslaním overíme cez SMP, či je príjemca v Peppol sieti. Ak nie, vrátime 422 a nič sa nefakturuje. Voliteľná hlavička Idempotency-Key (alebo X-Idempotency-Key) — prvé volanie sa uloží, opakovanie s rovnakým telom vráti cache (200/201), kolízia v priebehu vráti 409. Ak sa SHA-256 hash tela líši od uloženého, vráti 422 IDEMPOTENCY_KEY_MISMATCH (telo je pred hashovaním kanonizované — kľúče zoradené rekurzívne).

Parametre

NázovTypPovinnéPopis
receiverPeppolIdstringREQPeppol ID prijemcu
itemsarrayREQPoložky faktúry (max 999)
items[].descriptionstringREQPopis polozky
items[].quantitynumberREQMnozstvo
items[].unitPricenumberREQCena za jednotku bez DPH
items[].vatRatenumberREQSadzba DPH v % — povolené: 0, 5, 10, 19, 23 (povolené: 0, 5, 10, 19, 23)
items[].discountnumberoptionalZlava v %
items[].unitstringoptionalUN/ECE Rec 20 kód jednotky (default C62) (default: C62)
invoiceNumberstringoptionalČíslo faktúry — auto ak prázdne
issueDatestringoptionalISO 8601 date
dueDatestringoptionalISO 8601 date
currencystringoptionalEUR (default) (default: EUR)
paymentMethodstringoptionalUNCL4461 kód, napr. "30" (prevod)
variableSymbolstringoptionalVariabilný symbol platby
buyerReferencestringoptionalReferencia kupujúceho (napr. číslo objednávky)
notestringoptionalPoznamka
ibanstringoptionalIBAN
receiverNamestringoptionalMeno prijemcu
receiverIcostringoptionalICO
receiverDicstringoptionalDIČ príjemcu
receiverIcDphstringoptionalIČ DPH príjemcu
receiverAddressstringoptionalAdresa príjemcu
receiverCountrystringoptionalISO krajina príjemcu (default SK) (default: SK)
attachmentsarrayoptionalPrílohy (BG-24) vložené ako base64 do UBL XML — prijímateľ ich vidí priamo vo faktúre
attachments[].fileNamestringREQNázov súboru
attachments[].mimeTypestringREQapplication/pdf, image/png, image/jpeg, text/csv, xlsx, ods
attachments[].contentstringREQBase64-encoded obsah (bez data: prefixu)
attachments[].descriptionstringoptionalKrátky popis prílohy (max 100 znakov)
xmlstringoptionalUBL XML mode — Raw UBL XML string (alternatíva k JSON poliam vyššie). Max 5 MB per raw XML payload.

Odpovede

  • 200Cached/Duplicate
  • 201Sent
  • 401Unauthorized
  • 403Enterprise plan required
  • 409Duplicate Invoice / Idempotency Conflict
  • 422Validation/Peppol Failed/Idempotency Mismatch
  • 502Peppol send failed (retryable)
POST/api/v1/documents/send/batch

Hromadné odoslanie max 50

Odošle až 50 faktúr v jednom volaní. Každá položka má vlastný voliteľný idempotencyKey. Endpoint vždy vráti 200 — chyby sú per-item v poli results. Maximálna veľkosť tela 20 MB.

Parametre

NázovTypPovinnéPopis
itemsarrayREQPole max 50 položiek — rovnaká schéma ako POST /documents/send
items[].idempotencyKeystringoptionalVoliteľný kľúč pre idempotentné opakovanie položky

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise plan required
  • 413Payload too large
  • 422Validation Error
GET/api/v1/documents/inbox

Zoznam prijatych

Vrati zoznam prijatych dokumentov so strankovaniem. Pole docType moze nadobudat tieto hodnoty: invoice (BIS 380 — bezna faktura), credit_note (BIS 381 — dobropis), self_billing (BIS 389 — samofakturacia), self_billing_credit_note (BIS 261 — dobropis k samofakturaci, nova hodnota).

Parametre

NázovTypPovinnéPopis
limitintegeroptionalMax 100 (default: 20)
offsetintegeroptionalOffset pre stránkovanie. Pre stabilné stránkovanie vo veľkom objeme použite cursor namiesto offset. (default: 0)
cursorstringoptionalOpaque kurzor zo `nextCursor` predchádzajúcej odpovede. Stabilné stránkovanie aj keď sa medzitým pridajú nové dokumenty.
statusstringoptionalFilter podľa stavu (povolené: RECEIVED, ACKNOWLEDGED, ACCEPTED, REJECTED, PAID, VALIDATION_FAILED, FAILED)
peppolMessageIdstringoptionalVyhľadanie dokumentu podľa Peppol message ID (max 100 znakov)
sincestringoptionalISO 8601 dátum — filtruje createdAt >= since pre inkrementálnu synchronizáciu

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise plan required
  • 422Validation Error
GET/api/v1/documents/inbox/{id}

Detail dokumentu

Vrati detail prijateho dokumentu vratane UBL XML payloadu.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise plan required
  • 404Not Found
POST/api/v1/documents/inbox/{id}/acknowledge

Potvrdiť prijatie

Oznaci dokument ako spracovany. Telo požiadavky nie je potrebne. Funguje iba pre inbound dokumenty v stave received. Opakované volanie alebo iný stav vráti 422.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise plan required
  • 404Not Found
  • 422Invalid state transition
GET/api/v1/documents/{id}/status

Stav dokumentu

Vráti úplný životný stav dokumentu vrátane histórie stavov a výsledku validácie. Limit 400 req/min na API kľúč. Pri pravidelnom kontrolovaní viacerých dokumentov použite hromadný endpoint POST /api/v1/documents/status/batch — jedným volaním získate stav až 100 dokumentov.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Forbidden
  • 404Not Found
POST/api/v1/documents/status/batch

Hromadný stav až 100 dokumentov

Vráti stav až 100 dokumentov v jednom volaní. Výsledky sú v rovnakom poradí ako vstupné ids. Dokumenty, ktoré nepatria volajúcej firme alebo neexistujú, sú v odpovedi označené { "error": "not_found" } — endpoint nikdy nevráti 404 pre celé volanie ani neprezradí existenciu dokumentov inej firmy. Limit 300 req/min na API kľúč (až 30 000 stavov za minútu). Pre jednotlivé dokumenty použite GET /api/v1/documents/{id}/status (limit 400 req/min).

Parametre

NázovTypPovinnéPopis
idsstring[]REQ1 až 100 ID dokumentov. Duplicitné ID sa zlúčia, poradie odpovede zachová poradie vstupu.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise plan required
  • 413Payload too large (> 64 KB)
  • 422Validation Error (ids[] missing, prázdne, viac ako 100, alebo non-string)
  • 429Too Many Requests
GET/api/v1/documents/{id}/evidence

AS4 potvrdenie a MLR

Vráti AS4 potvrdenie o doručení, MLR dokument a odpoveď na faktúru (invoice response), ak sú dostupné.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Forbidden
  • 404Not Found
GET/api/v1/documents/{id}/pdf

Stiahnuť PDF

Stiahne PDF verziu dokumentu. Vráti binárny obsah s Content-Type: application/pdf.

Odpovede

  • 200application/pdf
  • 401Unauthorized
  • 403Forbidden
  • 404Not Found
GET/api/v1/documents/{id}/ubl

Stiahnuť UBL XML

Stiahne UBL XML súbor dokumentu. Vráti XML string s Content-Type: application/xml. 404 sa vracia ak dokument neexistuje, nepatri vám, alebo ešte nemá pripojené UBL XML.

Odpovede

  • 200application/xml
  • 401Unauthorized
  • 403Forbidden
  • 404Not Found
POST/api/v1/documents/{id}/respond

Odoslať odpoved na fakturu

Odošle odpoveď na prijatú faktúru (invoice response). Funguje iba pre inbound dokumenty. Iba jedna finálna odpoveď. Po odoslaní UQ je povolená ešte jedna zmena; po AP/RE/PD ďalšie volanie vráti 422.

Parametre

NázovTypPovinnéPopis
statusstringREQAB (accepted billing), IP (in process), UQ (under query), CA (conditionally accepted), RE (rejected), AP (accepted), PD (paid) (povolené: AB, IP, UQ, CA, RE, AP, PD)
notestringoptionalVoliteľná poznámka — max 500 znakov, dlhší text sa skráti

Odpovede

  • 200Úspech
  • 202Accepted-queued
  • 401Unauthorized
  • 403Forbidden
  • 404Not Found
  • 422Validation Error
POST/api/v1/documents/{id}/mark

Označiť stav dokumentu

Granulárne stavové prechody pre dokumenty spracované vlastnou pipeline integrátora (napr. SFTP doručenie, lokálne spracovanie, čítanie vo front-ende). Doplnok k /acknowledge, ktorý pokrýva len Peppol príjem. Endpoint neoveruje zdrojový stav — opakované volanie alebo mimo-poradie volanie prepíše timestamps/status. Integrátor je zodpovedný za poradie. mark processed nastaví acknowledgedAt, ale nemení status. mark failed nastaví status=failed. mark delivered / mark read nastavia iba príslušný timestamp.

Parametre

NázovTypPovinnéPopis
statestringREQdelivered | processed | failed | read (povolené: delivered, processed, failed, read)
notestringoptionalVoliteľná poznámka

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise plan required
  • 404Not Found
  • 422Invalid state
POST/api/v1/extract

Extrahovať jeden súbor

Extrahuje dáta faktúry z PDF alebo obrázku pomocou AI a vráti hotový Peppol BIS 3.0 UBL XML pripravený na odoslanie cez POST /api/v1/documents/send. Tým doplna ostatné vstupné cesty — JSON cez POST /api/v1/documents/convert a priame UBL XML cez POST /api/v1/documents/send. Max 20 MB. Pred vrátením spustíme ion-docval Schematron + XSD validáciu a v poli validation vám oznámime, či vygenerovaný UBL prejde aj pri /send. V poli vendor_verification nájdete porovnanie OCR výsledku s globálnym Peppol Directory (kanonický Peppol ID, krajina, fuzzy match mena), kontrolu IBAN-u (ISO 13616), aritmetickú self-check (sumy položiek vs OCR), VAT konzistenciu, kontrolu dátumov, a roll-up risk_level (low/medium/high). Rate limit: 10 extrakcií / minúta na firmu.

Parametre

NázovTypPovinnéPopis
fileFileREQPDF, JPEG, PNG, WebP (max 20 MB)

Odpovede

  • 200OK
  • 400Bad Request
  • 401Unauthorized
  • 403Enterprise required
  • 422Extraction failed
  • 429Rate Limited
  • 503Service Unavailable
POST/api/v1/extract/batch

Batch extrakcia max 50

Spracuje az 50 suborov naraz. Chyba jedneho neblokuje ostatne. Rate limit: 3 požiadavky / minúta na firmu. Celková veľkosť max 200 MB na požiadavku.

Parametre

NázovTypPovinnéPopis
filesFile[]REQPole suborov max 50 x 20 MB

Odpovede

  • 200OK
  • 400Bad Request
  • 401Unauthorized
  • 403Enterprise required
  • 413Payload Too Large
  • 429Rate Limited
  • 503Service Unavailable
POST/api/v1/documents/validate

Validovať dokument

Validuje dokument oproti Peppol BIS 3.0 pravidlám. Podporuje JSON aj UBL XML vstup. Maximum tela požiadavky 6 MB.

Parametre

NázovTypPovinnéPopis
formatstringREQ"json" | "ubl" (povolené: json, ubl)
documentobject|stringREQJSON objekt alebo UBL XML string

Odpovede

  • 200Valid
  • 400Bad Request
  • 401Unauthorized
  • 403Enterprise required
  • 413Payload Too Large
  • 422Invalid document
  • 503Validation service unavailable
POST/api/v1/documents/preflight

Kontrola pred odoslaním

Overí, či je príjemca registrovaný v sieti Peppol a či dokument prejde validáciou — pred skutočným odoslaním.

Parametre

NázovTypPovinnéPopis
receiverPeppolIdstringREQPeppol ID príjemcu na overenie
documentTypestringoptionalinvoice | credit-note | order | despatch-advice (povolené: invoice, credit-note, order, despatch-advice)
invoiceobjectoptionalJSON faktúra na validáciu
xmlstringoptionalUBL XML na validáciu

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
  • 413Payload Too Large
  • 422Validation Error
POST/api/v1/documents/convert

Konverzia formátov

Konvertuje dokument medzi JSON a UBL XML formátmi. Podporovaná konverzia: json→ubl a ubl→json. Maximum tela požiadavky 6 MB. Pri output_format: ubl je document reťazec s XML dokumentom (nie objekt).

Parametre

NázovTypPovinnéPopis
input_formatstringREQ"json" | "ubl" (povolené: json, ubl)
output_formatstringREQ"ubl" | "json" (povolené: ubl, json)
documentobject|stringREQDokument na konverziu

Odpovede

  • 200OK
  • 400Bad Request
  • 401Unauthorized
  • 403Enterprise required
  • 413Payload Too Large
  • 422Conversion failed
POST/api/v1/documents/parse

Rozobrať UBL XML na JSON

Rozoberie UBL XML na normalizovaný JSON bez odoslania. Užitočné pri migrácii z iného AP alebo pre príchodzie doklady z mimo-Peppol kanála (email, SFTP). Prijíma Content-Type: application/xml (raw telo) alebo application/json s poľom xml. Maximum 10 MB.

Parametre

NázovTypPovinnéPopis
xmlstringREQUBL XML dokument (pri application/json) alebo raw telo (pri application/xml)

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
  • 413Payload Too Large
  • 422Validation Error
  • 500Parse Error
GET/api/v1/documents/inbox/all

Cross-firm inbox

Vráti dokumenty zo všetkých spravovaných firiem v jednej odpovedi. Vyžaduje JWT získané zo sk_int_* kľúča. Vysledky su obmedzene na dokumenty s createdAt >= integratorFirm.createdAt — integratori vidia len dokumenty dorucene po tom, ako bol integrator priradeny k danej firme. Priame dashboard sessions (bez integratorského kontextu) zobrazia vsetky dokumenty bez tohto obmedzenia.

Parametre

NázovTypPovinnéPopis
sincestringoptionalISO 8601 — dokumenty od dátumu
statusstringoptionalFilter podľa stavu — predvolene všetky (parameter vynechajte). Hodnoty sa porovnávajú case-insensitive. (povolené: RECEIVED, ACKNOWLEDGED, ACCEPTED, REJECTED, PAID, VALIDATION_FAILED, FAILED)
firm_idstringoptionalFiltrovať podľa firmy
offsetnumberoptionalPosunutie pre stránkovanie
limitnumberoptionalMax výsledkov (default 50, max 200) (default: 50)

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Forbidden

Webhooks

Notifikacie v realnom case. Vyžaduje Enterprise plan. HMAC-SHA256 podpis. Udalosti: document.created, document.sent, document.received, document.validated, document.delivered, document.rejected, document.response_received. Doručenia sa pokúšajú max 5-krát s exponenciálnym backoffom (30s → 60s → 120s → 240s → 480s), timeout 10 s. Po 5 zlyhaniach prejde stav na FAILED. SSRF blok nespustí retry.

Overenie podpisu — Každý webhook obsahuje HMAC-SHA256 podpis. Z hlavičiek si vezmite X-Webhook-Timestamp a X-Webhook-Signature, spojte timestamp + "." + raw body, vypočítajte HMAC-SHA256 so svojím webhook secretom a porovnajte s hodnotou z hlavičky. Odmietnite požiadavku, ak je timestamp starší ako 5 minút (ochrana proti replay útokom).

GET/api/v1/webhooks

Zoznam webhookov

Vrati vsetky webhooky pre vashu firmu.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
POST/api/v1/webhooks

Vytvoriť webhook

Vytvori novy webhook. URL musi mat HTTPS. Secret pre overenie podpisu je zobrazeny iba raz.

Parametre

NázovTypPovinnéPopis
urlstringREQHTTPS URL
eventsstring[]optionalPredvolene vsetky udalosti

Odpovede

  • 201Created
  • 401Unauthorized
  • 403Enterprise required
  • 413Payload too large
  • 422Validation Error
GET/api/v1/webhooks/{id}

Detail + doručenia

Vrati detail webhooku a poslednych 20 pokusov o dorucenie.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
  • 404Not Found
PATCH/api/v1/webhooks/{id}

Upraviť webhook

Aktualizuje URL, udalosti alebo aktívny stav. Všetky polia sú nepovinné.

Parametre

NázovTypPovinnéPopis
urlstringoptionalHTTPS URL
eventsstring[]optionalNove udalosti
isActivebooleanoptionalAktivovat/deaktivovat

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
  • 404Not Found
  • 422Validation Error
DELETE/api/v1/webhooks/{id}

Zmazať webhook

Natrvalo zmaze webhook a vsetky zaznamy o doruceni.

Odpovede

  • 204No Content — webhook bol zmazaný
  • 401Unauthorized
  • 403Enterprise required
  • 404Not Found
POST/api/v1/webhooks/{id}/test

Poslať testovaciu udalosť

Pošle testovaciu udalosť na URL webhooku s platným HMAC podpisom a vráti výsledok doručenia (status, latencia). URL je znovu validovaná voči SSRF allowliste pred každým testom.

Parametre

NázovTypPovinnéPopis
eventstringoptionalTyp udalosti na simuláciu (predvolene: document.created) (default: document.created)

Odpovede

  • 200OK (200 sa vráti aj keď testovacie doručenie zlyhá — skontrolujte pole success a error)
  • 401Unauthorized
  • 403Enterprise required
  • 404Not Found
  • 422Validation Error
GET/api/v1/webhooks/{id}/deliveries

História doručení

Stránkovaná história pokusov o doručenie pre jeden webhook — status kódy, odpovede, počet pokusov, čas ďalšieho opakovania. Užitočné pri debuggovaní.

Parametre

NázovTypPovinnéPopis
limitnumberoptional1–100 (default: 20)
offsetnumberoptionalZačiatok od (predvolene 0) (default: 0)
statusstringoptionalPENDING | SUCCESS | FAILED | RETRYING (povolené: PENDING, SUCCESS, FAILED, RETRYING)
eventstringoptionalFilter podľa typu udalosti

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
  • 404Not Found
POST/api/v1/webhooks/{id}/rotate-secret

Rotovať podpisový secret

Vygeneruje nový podpisový secret pre webhook a okamžite zneplatní predchádzajúci. Nový secret sa vráti iba raz — uložte si ho. Existujúce in-flight doručenia podpísané starým secretom prestanú byť overiteľné.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
  • 404Not Found
GET/api/v1/webhook-queue

Stiahnuť udalosti

Vráti nepotvrdené udalosti (oldest-first). Po spracovaní potvrď každú udalosť pomocou DELETE alebo batch-ack.

Parametre

NázovTypPovinnéPopis
limitintegeroptionalMax 100 (default: 20)
event_typestringoptionalFilter podľa typu udalosti

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
DELETE/api/v1/webhook-queue/{eventId}

Potvrdiť udalost

Označí jednotlivú udalosť ako spracovanú (acknowledged). Vráti 204 No Content.

Odpovede

  • 204No Content
  • 401Unauthorized
  • 403Forbidden
  • 404Not Found
POST/api/v1/webhook-queue/batch-ack

Batch potvrdenie

Hromadne potvrdí viaceré udalosti. Max 1000 ID v jednej požiadavke. Vráti 204 No Content.

Parametre

NázovTypPovinnéPopis
event_idsstring[]REQPole ID udalosti max 1000

Odpovede

  • 204No Content
  • 401Unauthorized
  • 403Enterprise required
  • 422Validation Error
GET/api/v1/webhook-queue/all

Cross-firm webhook queue

Vráti webhook udalosti naprieč všetkými firmami. Vyžaduje JWT získané zo sk_int_* kľúča.

Parametre

NázovTypPovinnéPopis
limitnumberoptionalMax výsledkov (default 100, max 500) (default: 100)
sincestringoptionalISO 8601 — filter udalostí vytvorených po tomto čase

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Forbidden
POST/api/v1/webhook-queue/all/batch-ack

Hromadné potvrdenie udalostí

Hromadné potvrdenie webhook udalostí naprieč všetkými firmami.

Parametre

NázovTypPovinnéPopis
event_idsstring[]REQPole ID udalostí na potvrdenie (UUID, max 1000)

Odpovede

  • 200OK
  • 400Bad Request
  • 401Unauthorized

Peppol

Vyhľadávanie v Peppol sieti — SMP lookup, adresár, overenie firmy a jej schopností.

GET/api/v1/peppol/participants/{scheme}/{identifier}

SMP Lookup

Overí, či je účastník registrovaný v Peppol sieti cez DNS/SMP lookup. Výsledky sú cachované 24 hodín.

Parametre

NázovTypPovinnéPopis
schemestringREQ4-ciferný ISO 6523 kód napr. 0245
identifierstringREQIdentifikátor účastníka

Odpovede

  • 200Found
  • 400Invalid params
  • 401Unauthorized
  • 404Not found in Peppol
GET/api/v1/peppol/directory/search

Hľadať v adresári

Prehľadáva lokálnu kópiu Peppol adresára (3.6M+ záznamov). Fulltextové vyhľadávanie podľa názvu firmy alebo Peppol ID.

Parametre

NázovTypPovinnéPopis
qstringREQHľadaný výraz min 2 znaky
countrystringoptionalISO kod krajiny napr. SK
pageintegeroptionalStranka vysledkov
page_sizeintegeroptionalMax 50

Odpovede

  • 200OK
  • 400Query too short
  • 401Unauthorized
GET/api/v1/company/lookup/{ico}

Info o firme + Peppol status

Vyhľadá firmu podľa IČO v Registri Finančnej správy SR a skontroluje registráciu v Peppol sieti.

Odpovede

  • 200OK
  • 400Invalid ICO
  • 401Unauthorized
  • 404Not Found
POST/api/v1/peppol/capabilities

Zistiť podporované dokumenty

Sonduje Peppol SMP účastníka — vráti zoznam akceptovaných typov dokumentov a transportných profilov. Ak je zadaný documentType, vráti aj matchedDocumentType ako URN matchnutého typu (alebo null, ak ho účastník nepodporuje) na presné overenie pred odoslaním.

Parametre

NázovTypPovinnéPopis
participantobjectREQObjekt { scheme, identifier }. scheme = 4-ciferný ISO 6523 kód (napr. 0245), identifier = identifikátor účastníka
documentTypestringoptionalKonkrétny Peppol document-type URN pre overenie
processIdstringoptionalVoliteľný BIS 3 process ID

Odpovede

  • 200OK
  • 400Invalid params
  • 401Unauthorized
  • 404Not Found (participant not registered in Peppol)
POST/api/v1/peppol/participants/batch

Hromadné overenie max 100

Hromadné overenie až 100 Peppol účastníkov v jednom volaní. Vhodné na dávkovú validáciu zoznamu odberateľov pred odoslaním faktúr.

Parametre

NázovTypPovinnéPopis
participantsarrayREQPole max 100 položiek { scheme, identifier }

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required
  • 422Validation Error
POST/api/validate

Peppol BIS 3.0 validácia (verejné)

Verejný nástroj — môžu ho volať aj neregistrovaní integrátori pred sign-upom. Bez autentifikácie. Rate-limit 20 požiadaviek za minútu na IP adresu. Maximum 10 MB. Vráti trojvrstvový Peppol BIS 3.0 validation report: (1) UBL 2.1 XSD, (2) EN 16931 sémantické pravidlá, (3) Peppol schematron.

Parametre

NázovTypPovinnéPopis
xmlstringREQUBL XML dokument (pri application/json) alebo raw telo (pri application/xml)

Odpovede

  • 200OK
  • 400Invalid XML
  • 413Too Large
  • 429Rate Limited

Firmy

Správa firiem priradených k vášmu integrátorskému účtu. Správa prístupu k firmám pre integrátorské kľúče (sk_int_*).

GET/api/v1/firms

Zoznam prístupných firiem

Pre sk_int_* kľúče vráti všetky firmy prepojené cez IntegratorFirm. Pre sk_live_* kľúče vráti iba vlastnú firmu.

Odpovede

  • 200OK
  • 401Unauthorized
GET/api/v1/firms/{id}

Detail firmy

Vráti úplný detail firmy vrátane adresy, DIČ, IČ DPH a Peppol stavu.

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Forbidden
  • 404Not Found
GET/api/v1/firms/{id}/documents

Dokumenty firmy

Vráti stránkovaný zoznam dokumentov firmy. Integrátori môžu pristupovať k dokumentom spravovaných klientov. Integratori vidia len dokumenty s createdAt >= integratorFirm.createdAt — teda dokumenty dorucene az po priradeni integrátora k firme. Priame dashboard sessions (bez integratorského kontextu) zobrazia vsetky dokumenty.

Parametre

NázovTypPovinnéPopis
pageintegeroptionalStranka (default: 1)
page_sizeintegeroptionalMax 100 (default: 20)
directionstringoptionalinbound | outbound (povolené: inbound, outbound)
statusstringoptionalFilter podľa stavu
fromstringoptionalISO 8601 date
tostringoptionalISO 8601 date

Odpovede

  • 200OK
  • 400Validation Error
  • 401Unauthorized
  • 403Forbidden
POST/api/v1/firms/{id}/peppol-identifiers

Registrovat Peppol ID

Zaregistruje Peppol ID pre firmu. Registrácia v SMP prebehne do 24 hodín. Pre scheme 0245 (slovensky DIC) musi byt pole identifier zhodne s hodnotou firm.dic. Nesulad vrati 422 VALIDATION_ERROR. Pre ine schemy (0007, 0184 atd.) prebehne len formatova validacia.

Parametre

NázovTypPovinnéPopis
schemestringREQISO 6523 kód napr. 0245
identifierstringREQIdentifikátor firmy. Pre scheme 0245 musí byť rovný firm.dic (slovenské DIČ, NIE IČO).

Odpovede

  • 201Created
  • 400Validation Error
  • 401Unauthorized
  • 403Forbidden
  • 404Firm not found
POST/api/v1/firms/assign

Priradiť firmu podľa IČO

Priradí firmu k integrátorskému účtu podľa IČO. Vyžaduje JWT získané z sk_int_* kľúča. DÔLEŽITÉ: Priame priradenie cez IČO funguje len v týchto dvoch prípadoch: 1. Reaktivácia — firma už raz dala súhlas a IntegratorFirm väzba existuje (možno deaktivovaná) 2. Firma už je na pláne integrator-managed Pre prvotné priradenie firmy na pláne free musíte použiť OAuth authorization_code flow, kde majiteľ firmy explicitne klikne "Súhlasím" — vráti sa 403 CONSENT_REQUIRED s odkazom na /oauth/authorize. Firmy na inom platenom pláne (premium, basic, api-enterprise) musia takisto použiť OAuth flow — inak 403 FORBIDDEN s kódom "plan not claimable". Bezpečnostná poznámka: Pred 5. 5. 2026 mohol akýkoľvek integrátor priradiť ľubovoľnú firmu na pláne free k svojmu účtu len cez IČO, bez súhlasu majiteľa firmy. Táto medzera je zatvorená — všetky prvotné priradenia musia teraz prejsť cez OAuth authorization_code flow s explicitným súhlasom.

Parametre

NázovTypPovinnéPopis
icostringREQIČO firmy (8 číslic)

Odpovede

  • 201Created
  • 400Bad Request
  • 401Unauthorized
  • 403Forbidden — CONSENT_REQUIRED alebo plan not claimable
  • 404Not Found
  • 409Conflict
  • 422Validation Error
POST/api/v1/firms/assign/batch

Hromadné priradenie firiem

Hromadné priradenie až 50 firiem k integrátorskému účtu podľa IČO. Rovnaké obmedzenia ako pri /firms/assign: firmy na pláne free nie sú priraditeľné touto cestou — použite OAuth authorization_code flow. Firmy na pláne integrator-managed sú povolené (opätovné pripojenie). Per-item chyby majú error kód FORBIDDEN a správu "plan not claimable" alebo CONSENT_REQUIRED pre prvotné priradenie firmy na free pláne.

Parametre

NázovTypPovinnéPopis
icosstring[]REQPole IČO (max 50)

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Forbidden
  • 422Validation Error
GET/api/v1/integrator/licenses/info

Plán a agregovaná spotreba

Vráti plán integrátora, spotrebu za aktuálne fakturačné obdobie naprieč všetkými spravovanými firmami, tarifné sadzby a odhadovaný náklad. Použiteľné pre billing dashboard a kvótové upozornenia. Vyžaduje sk_int_* kľúč a scope account:read. Bez X-Firm-Id hlavičky — endpoint je integrátorský, nie firemný. billable obsahuje len firmy s plánom integrator-managed (faktúruje ich integrátor). nonManaged sumarizuje firmy, ktoré sú prepojené ale platia si plán samé. perFirm rozpisuje obe skupiny. Keď agregát prekročí contactThreshold (5 000 / mesiac), exceedsAutoTier sa nastaví na true, auto-billing sa zastaví a obchod kontaktuje integrátora pre individuálnu zmluvu.

Parametre

NázovTypPovinnéPopis
offsetintegeroptionalPosun pre stránkovanie zoznamu firiem (default: 0)
limitintegeroptionalMax 100 — počet firiem v firms (default: 50)
periodstringoptionalAktuálne fakturačné obdobie vo formáte YYYY-MM (SK časová zóna). [response field]
nextResetAtstringoptionalISO 8601 — kedy sa počítadlá vynulujú (1. deň ďalšieho mesiaca, SK polnoc v UTC). [response field]
billable.outboundChargenumberoptionalTarifný náklad za odoslané dokumenty — sadzby aplikované na outboundCount ako agregát. [response field]
billable.totalChargenumberoptionalSúčet outbound + inbound API. Zaokrúhlené na centy. [response field]
exceedsAutoTierbooleanoptionaltrue keď outbound alebo inbound prekročí contactThreshold. Auto-billing sa zastaví, obchod riadi manuálne. [response field]
contactThresholdintegeroptionalHranica (5 000) nad ktorou sa vyžaduje individuálna zmluva. [response field]
firms[].managedbooleanoptionaltrue = firma je integrator-managed a počíta sa do billable. false = patrí do nonManaged. [response field]

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Forbidden
  • 404Integrator not found

Reporty

Štatistiky a prehľady o odoslaných a prijatých dokumentoch.

GET/api/v1/reporting/statistics

Štatistiky dokumentov

Vráti agregované štatistiky dokumentov: počty odoslaných/prijatých podľa typu, miera doručenia, top príjemcovia a odosielatelia.

Parametre

NázovTypPovinnéPopis
periodstringoptionalmonth | quarter | year (default: month) (povolené: month, quarter, year)
fromstringoptionalZačiatok obdobia ISO 8601
tostringoptionalKoniec obdobia ISO 8601

Odpovede

  • 200OK
  • 401Unauthorized
GET/api/v1/reporting/submissions

História reportov pre FS SR

Vráti zoznam EUSR/TSR reportov, ktoré sme ako AP operátor odoslali na FS SR. Globálna história operátora — slúži ako dôkaz, že prevádzkujeme regulatorne povinný reporting. Zoznam je read-only, paginated, sortovaný podľa submitted_at DESC.

Parametre

NázovTypPovinnéPopis
limitnumberoptionalMax 100 (default: 20)
offsetnumberoptionalPosun pre stránkovanie (default: 0)
report_typestringoptionalEUSR | TSR (povolené: EUSR, TSR)

Odpovede

  • 200OK
  • 401Unauthorized
  • 403Enterprise required

Referencia

Cenník, uchovávanie dát a chybové kódy. Väčšina endpointov vracia chybu vo formáte {"error":{"code":"...","message":"...","requestId":"..."}}.

Cenník

Transparentné ceny bez skrytých poplatkov.

Sandbox

Testovacie prostredie pre integráciu.

ObjemCena
Neobmedzenezadarmo

Odoslané

Cena za dokument odoslaný cez Peppol.

ObjemCena
1 – 1 0000,10 €
1 001 – 2 0000,08 €
2 001+0,06 €
5 000+individuálne

Prijaté cez API

Cena za dokument prijatý a sprístupnený cez API.

ObjemCena
1 – 1 0000,08 €
1 001 – 2 0000,07 €
2 001+0,06 €
5 000+individuálne

Objemové zľavy sa počítajú naprieč všetkými spravovanými firmami, nie per-firma. Ceny sú bez DPH. Platí sa len za dokumenty skutočne doručené cez Peppol.

Rate limity

Limitácia požiadaviek na API kľúč.

Pravidlá

  • Štandardné endpointy200 požiadaviek / 60 sekúnd
  • POST /documents/send150 požiadaviek / 60 sekúnd
  • POST /documents/send/batch10 požiadaviek / 60 sekúnd (až 50 faktúr na požiadavku)
  • GET /documents/{id}/status400 požiadaviek / 60 sekúnd
  • POST /documents/status/batch300 požiadaviek / 60 sekúnd (až 100 stavov na požiadavku)
  • POST /extract (OCR)10 požiadaviek / 60 sekúnd
  • POST /extract/batch3 požiadavky / 60 sekúnd
  • POST /firms/assign a /firms/assign/batch10 požiadaviek / 60 sekúnd
  • POST /validate (verejné)20 požiadaviek / 60 sekúnd na IP

Hlavičky odpovede (HTTP 429)

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset
  • Retry-After

Hlavičky sa vracajú len v HTTP 429 odpovediach. Odporúčame implementovať exponenciálny backoff. Aktuálny limit pre konkrétny endpoint sa zobrazí v X-RateLimit-Limit hlavičke pri 429 odpovedi.

Chybové kódy

Chyby sa vracajú vo formáte {"error":{"code":"...","message":"...","requestId":"..."}}. Kódy označené ako retryable je bezpečné opakovať s exponenciálnym backoffom.

StatusKódPopis
400BAD_REQUESTNeplatné JSON telo alebo chýbajúce pole
400INVALID_PARAMNeplatná hodnota query parametra
401UNAUTHORIZEDChýbajúci alebo neplatný API kľúč
403FORBIDDENNedostatočný scope alebo prístup k cudzej firme; alebo plán nie je Enterprise API
404NOT_FOUNDProstriedok neexistuje alebo nepatrí vašej firme
409CONFLICTDuplikát (OAuth klient, priradenie firmy, idempotency in-flight)
413PAYLOAD_TOO_LARGETelo požiadavky presahuje povolený limit
422VALIDATION_ERROR / UNPROCESSABLE_ENTITYSémantická validácia (UBL, schematron, idempotency mismatch) zlyhala
429RATE_LIMITEDretryablePrekročený rate limit
500INTERNAL_ERRORretryableNeočakávaná chyba servera
502SEND_FAILEDretryableOdoslanie cez Peppol AP zlyhalo
503IDEMPOTENCY_STORE_UNAVAILABLE / VALIDATION_SERVICE_UNAVAILABLEretryableZávislosť dočasne nedostupná

Uchovávanie dát

Trvalý archív

Enterprise API ukladá všetky dokumenty trvalo — obsah (UBL/XML), štruktúrované dáta faktúr aj transportné metadata (Peppol message ID, časové pečiatky, AS4 potvrdenia, MLR). Endpointy /documents/{id} a /documents/{id}/ubl sú dostupné bez časového obmedzenia počas aktívneho predplatného. SLA 99,5 % uptime, podpora 24/7.

Uchovávanie dát

Dvojvrstvové uchovávanie: 10-ročný WORM archív signovaných AS4 obálok ako infraštruktúra Access Pointu + prístup k vlastným dokumentom viazaný na aktívne predplatné. Každá signovaná AS4 obálka — prijatá aj odoslaná — sa automaticky ukladá do WORM MinIO bucketu s S3 Object Lock v režime COMPLIANCE na 10 rokov. Platí pre všetky firmy, nezávisle od plánu. Po ukončení kontraktu — 30 dní grace, potom sa API prístup uzatvára.

10-ročná zákonná archivácia

Zákonná povinnosť uchovávať daňové doklady 10 rokov (zákon 431/2002 §35) je na vystaviteľovi/príjemcovi faktúry. Ako Peppol Access Point poskytujeme spoľahlivú WORM infraštruktúru, ktorá túto povinnosť pokrýva, ale formálne ju neprenášame na seba — ste stále vlastníkom dokumentov.

Príklady kódu

Na mobile sa code panel skladá pod obsah. Pre každý endpoint posúvaj nadol pod jeho parametre — alebo otvor desktop verziu.