Test Odosielateľ (Participant 1)
0245:0000000001487d008a-b3a5-49d0-be3e-ba45cc9c4ffesk_live_••••••••••••••••1eacf2cea3cf-f29e-4ea2-9e76-b06a312ec9abZač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).
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).
487d008a-b3a5-49d0-be3e-ba45cc9c4ffesk_live_••••••••••••••••1eacf2cea3cf-f29e-4ea2-9e76-b06a312ec9abb6649c59-2f9d-4ae2-a750-af257c455478sk_live_••••••••••••••••6733b1022d80-5016-4dad-a8d2-53685cab17018924a11d-a93c-4d5a-b54b-1f1ff246152csk_int_t••••••••••••••••c282Integrá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).
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.
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.
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).
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.
Vrati informácie o firme, Peppol ID, plane a pocte dokumentov.
Registrácia nového OAuth klienta pre integrátora. Vráti client_id a client_secret. Auth: integrátorský JWT (sk_int_* kľúč).
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| name | string | REQ | Názov OAuth klienta |
| redirect_uris | string[] | REQ | Povolené redirect URI (HTTPS alebo localhost) |
| logo_url | string | optional | URL loga zobrazené na consent obrazovke |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| grant_type | string | REQ | authorization_code (povolené: authorization_code) |
| code | string | REQ | Autorizačný kód z redirect_uri |
| client_id | string | REQ | OAuth client ID |
| client_secret | string | REQ | OAuth client secret |
| redirect_uri | string | REQ | Rovnaká URL ako pri autorizácii |
| code_verifier | string | REQ | PKCE code verifier |
Odosielanie a príjem faktúr, sledovanie stavu, sťahovanie evidencie/PDF/UBL, OCR extrakcia, validácia a konverzia formátov.
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).
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| receiverPeppolId | string | REQ | Peppol ID prijemcu |
| items | array | REQ | Položky faktúry (max 999) |
| items[].description | string | REQ | Popis polozky |
| items[].quantity | number | REQ | Mnozstvo |
| items[].unitPrice | number | REQ | Cena za jednotku bez DPH |
| items[].vatRate | number | REQ | Sadzba DPH v % — povolené: 0, 5, 10, 19, 23 (povolené: 0, 5, 10, 19, 23) |
| items[].discount | number | optional | Zlava v % |
| items[].unit | string | optional | UN/ECE Rec 20 kód jednotky (default C62) (default: C62) |
| invoiceNumber | string | optional | Číslo faktúry — auto ak prázdne |
| issueDate | string | optional | ISO 8601 date |
| dueDate | string | optional | ISO 8601 date |
| currency | string | optional | EUR (default) (default: EUR) |
| paymentMethod | string | optional | UNCL4461 kód, napr. "30" (prevod) |
| variableSymbol | string | optional | Variabilný symbol platby |
| buyerReference | string | optional | Referencia kupujúceho (napr. číslo objednávky) |
| note | string | optional | Poznamka |
| iban | string | optional | IBAN |
| receiverName | string | optional | Meno prijemcu |
| receiverIco | string | optional | ICO |
| receiverDic | string | optional | DIČ príjemcu |
| receiverIcDph | string | optional | IČ DPH príjemcu |
| receiverAddress | string | optional | Adresa príjemcu |
| receiverCountry | string | optional | ISO krajina príjemcu (default SK) (default: SK) |
| attachments | array | optional | Prílohy (BG-24) vložené ako base64 do UBL XML — prijímateľ ich vidí priamo vo faktúre |
| attachments[].fileName | string | REQ | Názov súboru |
| attachments[].mimeType | string | REQ | application/pdf, image/png, image/jpeg, text/csv, xlsx, ods |
| attachments[].content | string | REQ | Base64-encoded obsah (bez data: prefixu) |
| attachments[].description | string | optional | Krátky popis prílohy (max 100 znakov) |
| xml | string | optional | UBL XML mode — Raw UBL XML string (alternatíva k JSON poliam vyššie). Max 5 MB per raw XML payload. |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| items | array | REQ | Pole max 50 položiek — rovnaká schéma ako POST /documents/send |
| items[].idempotencyKey | string | optional | Voliteľný kľúč pre idempotentné opakovanie položky |
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).
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| limit | integer | optional | Max 100 (default: 20) |
| offset | integer | optional | Offset pre stránkovanie. Pre stabilné stránkovanie vo veľkom objeme použite cursor namiesto offset. (default: 0) |
| cursor | string | optional | Opaque kurzor zo `nextCursor` predchádzajúcej odpovede. Stabilné stránkovanie aj keď sa medzitým pridajú nové dokumenty. |
| status | string | optional | Filter podľa stavu (povolené: RECEIVED, ACKNOWLEDGED, ACCEPTED, REJECTED, PAID, VALIDATION_FAILED, FAILED) |
| peppolMessageId | string | optional | Vyhľadanie dokumentu podľa Peppol message ID (max 100 znakov) |
| since | string | optional | ISO 8601 dátum — filtruje createdAt >= since pre inkrementálnu synchronizáciu |
Vrati detail prijateho dokumentu vratane UBL XML payloadu.
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.
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.
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).
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| ids | string[] | REQ | 1 až 100 ID dokumentov. Duplicitné ID sa zlúčia, poradie odpovede zachová poradie vstupu. |
Vráti AS4 potvrdenie o doručení, MLR dokument a odpoveď na faktúru (invoice response), ak sú dostupné.
Stiahne PDF verziu dokumentu. Vráti binárny obsah s Content-Type: application/pdf.
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.
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| status | string | REQ | AB (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) |
| note | string | optional | Voliteľná poznámka — max 500 znakov, dlhší text sa skráti |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| state | string | REQ | delivered | processed | failed | read (povolené: delivered, processed, failed, read) |
| note | string | optional | Voliteľná poznámka |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| file | File | REQ | PDF, JPEG, PNG, WebP (max 20 MB) |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| files | File[] | REQ | Pole suborov max 50 x 20 MB |
Validuje dokument oproti Peppol BIS 3.0 pravidlám. Podporuje JSON aj UBL XML vstup. Maximum tela požiadavky 6 MB.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| format | string | REQ | "json" | "ubl" (povolené: json, ubl) |
| document | object|string | REQ | JSON objekt alebo UBL XML string |
Overí, či je príjemca registrovaný v sieti Peppol a či dokument prejde validáciou — pred skutočným odoslaním.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| receiverPeppolId | string | REQ | Peppol ID príjemcu na overenie |
| documentType | string | optional | invoice | credit-note | order | despatch-advice (povolené: invoice, credit-note, order, despatch-advice) |
| invoice | object | optional | JSON faktúra na validáciu |
| xml | string | optional | UBL XML na validáciu |
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).
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| input_format | string | REQ | "json" | "ubl" (povolené: json, ubl) |
| output_format | string | REQ | "ubl" | "json" (povolené: ubl, json) |
| document | object|string | REQ | Dokument na konverziu |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| xml | string | REQ | UBL XML dokument (pri application/json) alebo raw telo (pri application/xml) |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| since | string | optional | ISO 8601 — dokumenty od dátumu |
| status | string | optional | Filter podľa stavu — predvolene všetky (parameter vynechajte). Hodnoty sa porovnávajú case-insensitive. (povolené: RECEIVED, ACKNOWLEDGED, ACCEPTED, REJECTED, PAID, VALIDATION_FAILED, FAILED) |
| firm_id | string | optional | Filtrovať podľa firmy |
| offset | number | optional | Posunutie pre stránkovanie |
| limit | number | optional | Max výsledkov (default 50, max 200) (default: 50) |
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).
Vrati vsetky webhooky pre vashu firmu.
Vytvori novy webhook. URL musi mat HTTPS. Secret pre overenie podpisu je zobrazeny iba raz.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| url | string | REQ | HTTPS URL |
| events | string[] | optional | Predvolene vsetky udalosti |
Vrati detail webhooku a poslednych 20 pokusov o dorucenie.
Aktualizuje URL, udalosti alebo aktívny stav. Všetky polia sú nepovinné.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| url | string | optional | HTTPS URL |
| events | string[] | optional | Nove udalosti |
| isActive | boolean | optional | Aktivovat/deaktivovat |
Natrvalo zmaze webhook a vsetky zaznamy o doruceni.
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| event | string | optional | Typ udalosti na simuláciu (predvolene: document.created) (default: document.created) |
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í.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| limit | number | optional | 1–100 (default: 20) |
| offset | number | optional | Začiatok od (predvolene 0) (default: 0) |
| status | string | optional | PENDING | SUCCESS | FAILED | RETRYING (povolené: PENDING, SUCCESS, FAILED, RETRYING) |
| event | string | optional | Filter podľa typu udalosti |
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é.
Vráti nepotvrdené udalosti (oldest-first). Po spracovaní potvrď každú udalosť pomocou DELETE alebo batch-ack.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| limit | integer | optional | Max 100 (default: 20) |
| event_type | string | optional | Filter podľa typu udalosti |
Označí jednotlivú udalosť ako spracovanú (acknowledged). Vráti 204 No Content.
Hromadne potvrdí viaceré udalosti. Max 1000 ID v jednej požiadavke. Vráti 204 No Content.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| event_ids | string[] | REQ | Pole ID udalosti max 1000 |
Vráti webhook udalosti naprieč všetkými firmami. Vyžaduje JWT získané zo sk_int_* kľúča.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| limit | number | optional | Max výsledkov (default 100, max 500) (default: 100) |
| since | string | optional | ISO 8601 — filter udalostí vytvorených po tomto čase |
Hromadné potvrdenie webhook udalostí naprieč všetkými firmami.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| event_ids | string[] | REQ | Pole ID udalostí na potvrdenie (UUID, max 1000) |
Vyhľadávanie v Peppol sieti — SMP lookup, adresár, overenie firmy a jej schopností.
Overí, či je účastník registrovaný v Peppol sieti cez DNS/SMP lookup. Výsledky sú cachované 24 hodín.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| scheme | string | REQ | 4-ciferný ISO 6523 kód napr. 0245 |
| identifier | string | REQ | Identifikátor účastníka |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| q | string | REQ | Hľadaný výraz min 2 znaky |
| country | string | optional | ISO kod krajiny napr. SK |
| page | integer | optional | Stranka vysledkov |
| page_size | integer | optional | Max 50 |
Vyhľadá firmu podľa IČO v Registri Finančnej správy SR a skontroluje registráciu v Peppol sieti.
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| participant | object | REQ | Objekt { scheme, identifier }. scheme = 4-ciferný ISO 6523 kód (napr. 0245), identifier = identifikátor účastníka |
| documentType | string | optional | Konkrétny Peppol document-type URN pre overenie |
| processId | string | optional | Voliteľný BIS 3 process ID |
Hromadné overenie až 100 Peppol účastníkov v jednom volaní. Vhodné na dávkovú validáciu zoznamu odberateľov pred odoslaním faktúr.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| participants | array | REQ | Pole max 100 položiek { scheme, identifier } |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| xml | string | REQ | UBL XML dokument (pri application/json) alebo raw telo (pri application/xml) |
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_*).
Pre sk_int_* kľúče vráti všetky firmy prepojené cez IntegratorFirm. Pre sk_live_* kľúče vráti iba vlastnú firmu.
Vráti úplný detail firmy vrátane adresy, DIČ, IČ DPH a Peppol stavu.
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| page | integer | optional | Stranka (default: 1) |
| page_size | integer | optional | Max 100 (default: 20) |
| direction | string | optional | inbound | outbound (povolené: inbound, outbound) |
| status | string | optional | Filter podľa stavu |
| from | string | optional | ISO 8601 date |
| to | string | optional | ISO 8601 date |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| scheme | string | REQ | ISO 6523 kód napr. 0245 |
| identifier | string | REQ | Identifikátor firmy. Pre scheme 0245 musí byť rovný firm.dic (slovenské DIČ, NIE 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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| ico | string | REQ | IČO firmy (8 číslic) |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| icos | string[] | REQ | Pole IČO (max 50) |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| offset | integer | optional | Posun pre stránkovanie zoznamu firiem (default: 0) |
| limit | integer | optional | Max 100 — počet firiem v firms (default: 50) |
| period | string | optional | Aktuálne fakturačné obdobie vo formáte YYYY-MM (SK časová zóna). [response field] |
| nextResetAt | string | optional | ISO 8601 — kedy sa počítadlá vynulujú (1. deň ďalšieho mesiaca, SK polnoc v UTC). [response field] |
| billable.outboundCharge | number | optional | Tarifný náklad za odoslané dokumenty — sadzby aplikované na outboundCount ako agregát. [response field] |
| billable.totalCharge | number | optional | Súčet outbound + inbound API. Zaokrúhlené na centy. [response field] |
| exceedsAutoTier | boolean | optional | true keď outbound alebo inbound prekročí contactThreshold. Auto-billing sa zastaví, obchod riadi manuálne. [response field] |
| contactThreshold | integer | optional | Hranica (5 000) nad ktorou sa vyžaduje individuálna zmluva. [response field] |
| firms[].managed | boolean | optional | true = firma je integrator-managed a počíta sa do billable. false = patrí do nonManaged. [response field] |
Štatistiky a prehľady o odoslaných a prijatých dokumentoch.
Vráti agregované štatistiky dokumentov: počty odoslaných/prijatých podľa typu, miera doručenia, top príjemcovia a odosielatelia.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| period | string | optional | month | quarter | year (default: month) (povolené: month, quarter, year) |
| from | string | optional | Začiatok obdobia ISO 8601 |
| to | string | optional | Koniec obdobia ISO 8601 |
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.
| Názov | Typ | Povinné | Popis |
|---|---|---|---|
| limit | number | optional | Max 100 (default: 20) |
| offset | number | optional | Posun pre stránkovanie (default: 0) |
| report_type | string | optional | EUSR | TSR (povolené: EUSR, TSR) |
Cenník, uchovávanie dát a chybové kódy. Väčšina endpointov vracia chybu vo formáte {"error":{"code":"...","message":"...","requestId":"..."}}.
Transparentné ceny bez skrytých poplatkov.
Testovacie prostredie pre integráciu.
| Objem | Cena |
|---|---|
| Neobmedzene | zadarmo |
Cena za dokument odoslaný cez Peppol.
| 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ý a sprístupnený cez API.
| Objem | Cena |
|---|---|
| 1 – 1 000 | 0,08 € |
| 1 001 – 2 000 | 0,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.
Limitácia požiadaviek na API kľúč.
Štandardné endpointy200 požiadaviek / 60 sekúndPOST /documents/send150 požiadaviek / 60 sekúndPOST /documents/send/batch10 požiadaviek / 60 sekúnd (až 50 faktúr na požiadavku)GET /documents/{id}/status400 požiadaviek / 60 sekúndPOST /documents/status/batch300 požiadaviek / 60 sekúnd (až 100 stavov na požiadavku)POST /extract (OCR)10 požiadaviek / 60 sekúndPOST /extract/batch3 požiadavky / 60 sekúndPOST /firms/assign a /firms/assign/batch10 požiadaviek / 60 sekúndPOST /validate (verejné)20 požiadaviek / 60 sekúnd na IPX-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetRetry-AfterHlavič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.
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 | BAD_REQUEST | Neplatné JSON telo alebo chýbajúce pole |
| 400 | INVALID_PARAM | Neplatná hodnota query parametra |
| 401 | UNAUTHORIZED | Chýbajúci alebo neplatný API kľúč |
| 403 | FORBIDDEN | Nedostatočný scope alebo prístup k cudzej firme; alebo plán nie je Enterprise API |
| 404 | NOT_FOUND | Prostriedok neexistuje alebo nepatrí vašej firme |
| 409 | CONFLICT | Duplikát (OAuth klient, priradenie firmy, idempotency in-flight) |
| 413 | PAYLOAD_TOO_LARGE | Telo požiadavky presahuje povolený limit |
| 422 | VALIDATION_ERROR / UNPROCESSABLE_ENTITY | Sémantická validácia (UBL, schematron, idempotency mismatch) zlyhala |
| 429 | RATE_LIMITEDretryable | Prekročený rate limit |
| 500 | INTERNAL_ERRORretryable | Neočakávaná chyba servera |
| 502 | SEND_FAILEDretryable | Odoslanie cez Peppol AP zlyhalo |
| 503 | IDEMPOTENCY_STORE_UNAVAILABLE / VALIDATION_SERVICE_UNAVAILABLEretryable | Závislosť dočasne nedostupná |
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.
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.
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.
Na mobile sa code panel skladá pod obsah. Pre každý endpoint posúvaj nadol pod jeho parametre — alebo otvor desktop verziu.