Úvod
Verteco API je REST nad HTTPS. Request aj response sú JSON (UTF-8). Začnite vytvorením účtu, potom API tokenu, a urobte prvé volanie do minúty. Všetky cesty sú relatívne voči základnej URL nižšie.
Celé testovacie prostredie nájdete na test.peppol.verteco.digital. Správa sa rovnako ako produkcia, navyše má testovacie nástroje (FS webhook, verifikačný token, odstránenie firmy) a simulovaný výber poskytovateľa namiesto portálu Finančnej správy.
- Base URL
https://peppol.verteco.digital/api/v1- Verzia
- v1 (v ceste). Spätne nekompatibilné zmeny prídu pod novou verziou.
- Protokol
- HTTPS only · TLS 1.2+ · TLS A+
- Formát
- application/json (UTF-8)
- Auth
- cookie session (portál) alebo Bearer token (server-to-server)
- Časy
- ISO-8601 (UTC), napr. 2026-06-03T09:40:27Z
Certifikovaný AP
Reálny Peppol Access Point (Seat ID PSK001128), nie reseller. Prešli sme OpenPeppol conformance (19/19), v produkcii.
Validné doklady
Server-side validácia EN 16931 + Peppol BIS 3.0 Schematron pri každom prijatom AJ odosielanom doklade. Doklad si viete overiť aj vopred: verejný validátor beží na /validator (a ako API na POST /api/v1/public/peppol-validate); chyby vraciame s konkrétnym pravidlom (napr. BR-CO-15). Overené vzory pre slovenské situácie (neplatiteľ DPH, cudzia mena, prenesenie daňovej povinnosti, dobropis, zálohy, vložené PDF) sú na /vzory.
Multi-tenant
Jeden účet a jeden token pre N firiem, ideálne pre SaaS, ERP a účtovníkov.
SK TDD automaticky
Daňové hlásenie (corner-5 / TDD) na Finančnú správu generujeme a odosielame za vás.
openapi-generator vygenerujte typovaného klienta v ľubovoľnom jazyku (TS, Java, PHP, Python…). Pokrýva portálové API aj SAPI-SK.Rýchly štart
Ktoré rozhranie je pre vás
SAPI-SK 1.0 (/sapi)
Účtovný alebo fakturačný program, ERP, platforma pre viac firiem: národné rozhranie pre odosielanie, príjem, stavy, doručenky a hlásenia FS. Odporúčané pre každú integráciu, ktorá posiela alebo číta doklady.
OAuth2 client credentials: client_id = UUID API kľúča, client_secret = vpt_ kľúč, 15-min access token.
Portal API (/api/v1)
Správa firiem, webhookov, notifikácií, exportov a sťahovania súborov; partnerská konzola (/resellers/me). Dopĺňa SAPI, nenahrádza ho.
Authorization: Bearer vpt_… (API kľúč účtu).
MCP server (/api/mcp)
AI asistent (Claude Code, Cursor, Claude Desktop) má čítať doklady, overovať príjemcov a po výslovnom potvrdení odosielať.
Bearer vpt_… cez MCP klienta.
E-mail do schránky firmy
Bez programovania: XML faktúra ako príloha e-mailu na tajnú adresu firmy; validuje sa a odošle ako z portálu.
Adresa odosielateľa na zozname + SPF/DKIM.
Účet aj API token si vytvoríte v portáli (cez prehliadač). Integrácia potom beží výhradne cez API token. Registráciu, prihlásenie ani heslá vaša appka nerieši.
- 1
Vytvorte si účet v portáli
Zaregistrujte sa e-mailom a potvrďte ho odkazom z e-mailu. - 2
Vygenerujte API token
V portáli API tokeny → Vytvoriť. Tokenvpt_…sa zobrazí iba raz. Uložte si ho bezpečne. - 3
Urobte prvé volanie
Token použite v hlavičkeAuthorization:javascriptconst res = await fetch('https://peppol.verteco.digital/api/v1/companies', { headers: { Authorization: 'Bearer vpt_8f2a…' }, }); const companies = await res.json(); - 4
Výber poskytovateľa na portáli Finančnej správy
V ostrej prevádzke je výber Verteco na portáli FS (vpds.financnasprava.sk) potrebný aj pri čisto odosielacom použití: odomyká odosielanie (Verifikačný údaj) a firmu aktivuje. Príjem pritom môže ostať u poskytovateľa vášho účtovného programu: príjemcu má firma v sieti práve jedného, odosielateľov môže mať viac.
Rýchly štart cez curl (najprv v testovacom prostredí)
Šesť volaní od účtu po prvú doručenú faktúru. Všetko beží proti test.peppol.verteco.digital, kde je firma aktívna hneď po vytvorení a doklady idú do testovacej siete Peppol. Očakávané odpovede sú skrátené.
export BASE=https://test.peppol.verteco.digital # production: https://peppol.verteco.digital
export KEY=vpt_… # step 1- 1
Účet a API kľúč
Zaregistrujte sa na test.peppol.verteco.digital/register (v teste bez potvrdzovacieho e-mailu) a na stránke API kľúče vytvorte kľúč. Zobrazí sa raz a používa sa celý: zoznam kľúčov ukazuje len jeho začiatok (vpt_xxxxxxxx…) a kľúč skopírovaný odtiaľ aj s bodkami API odmietne s chybou 400. Nižšie ako $KEY.
- 2
Overte kľúč
shellcurl -s $BASE/api/v1/auth/me -H "Authorization: Bearer $KEY"json{ "id": "7f1d…", "email": "dev@firma.sk", "emailVerified": true, "persona": "developer" } - 3
Vytvorte firmu
shellcurl -s -X POST $BASE/api/v1/companies -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" -d '{"ico":"12345678","dic":"SK2120000001","legalName":"Test s. r. o.","street":"Hlavná 1","city":"Žilina","postalCode":"01001"}'json{ "id": "5c0e…", "legalName": "Test s. r. o.", "dic": "SK2120000001", "status": "active", "peppolParticipantId": "0245:2120000001", "verified": true } - 4
SAPI access token
shellcurl -s -X POST $BASE/sapi/auth/token -H "Content-Type: application/json" -d '{"grant_type":"client_credentials","client_id":"<UUID kľúča zo stránky API kľúče>","client_secret":"'$KEY'"}'json{ "access_token": "eyJhbGciOiJIUzI1NiJ9…", "token_type": "Bearer", "expires_in": 900, "refresh_token": "eyJhbGciOiJIUzI1NiJ9…" } - 5
Zvalidujte doklad bez odoslania
shellcurl -s -X POST $BASE/sapi/document/validate -H "Authorization: Bearer $ACCESS" -H "Content-Type: application/json" -d '{"payload":"<Invoice …>","payloadFormat":"XML"}'json{ "valid": true, "errors": [], "warnings": [] } - 6
Odošlite a sledujte stav
shellcurl -s -X POST $BASE/sapi/document/send -H "Authorization: Bearer $ACCESS" -H "X-Peppol-Participant-Id: 0245:2120000001" -H "Idempotency-Key: FA-2026-0001" -H "Content-Type: application/json" -d @send.json a potom curl -s "$BASE/sapi/document/sent?since=2026-10-01T00:00:00Z" -H "Authorization: Bearer $ACCESS" -H "X-Peppol-Participant-Id: 0245:2120000001"jsonHTTP/2 202 { "providerDocumentId": "6a3f…", "status": "ACCEPTED", "peppolMessageId": "f1c7…", "receivedAt": "2026-10-03T12:00:01Z" } { "documents": [ { "documentId": "6a3f…", "status": "delivered", "sentAt": "2026-10-03T12:00:01Z", "deliveredAt": "2026-10-03T12:00:14Z", "hasMls": true, "fsReport": { "state": "reported" } } ] }
Testovacie prostredie (sandbox)
Okrem SAPI mock sandboxu (nižšie) prevádzkujeme aj plnohodnotné testovacie prostredie, kompletnú kópiu tohto portálu s oddelenými dátami, kde si celý tok (registrácia → firma → odoslanie → prijatie → notifikácie) vyskúšate end-to-end bez akéhokoľvek dopadu na ostrú prevádzku.
- Registrácia
- bez potvrdzovacieho e-mailu; účet je použiteľný okamžite
- Schválenie firmy
- automatické, priamo v rozhraní alebo cez API (bez výberu na portáli Finančnej správy, bez prihlásenia na portál FS); hneď po vytvorení firmy s IČ DPH môžete odosielať aj prijímať
- Registrácia v sieti
- automatická do testovacej siete Peppol. Pozor na dve vrstvy identifikátora: API a portál používajú rovnaký formát ako produkcia (
peppolParticipantId = 0245:<číslice DIČ>, váš integračný kód sa nemení); do testovacieho SMP/SML sa firma technicky zapisuje ako9950:SK<DIČ>, lebo schéma 0245 vyžaduje overovací kód Finančnej správy, ktorý v teste neexistuje. V produkcii sa registruje0245:<číslice DIČ>do ostrej siete až po výbere poskytovateľa na portáli Finančnej správy (prihlásenie cez eID alebo prihlasovacími údajmi) - Validácia
- reálna: EN 16931 + Peppol BIS 3.0 pravidlá, rovnaké ako v ostrej prevádzke
- Doručenie
- reálne cez testovaciu sieť Peppol (AS4, testovací certifikát, testovacie SML/SMP): príjemcovi registrovanému v testovacej sieti sa faktúra doručí ako prijatá (vrátane e-mailu, PDF a webhooku); do ostrej siete nič neodchádza
- Doručenka
- reálna MLS doručenka z testovacej siete
- E-maily
- reálne odchádzajú (na adresy, ktoré zadáte), s prefixom
[TEST] - Simulácia chýb
- hlavička
X-Sandbox-Simulate: 503(alebo502,500,429) na ľubovoľnom volaní/sapi/document/*s platným tokenom vráti zodpovedajúcu chybu; nič sa nespracuje ani neuloží. Pri500(SAPI-PROC-500) a429(SAPI-SYS-003 sRetry-After) dostanete chybovú obálku SAPI;503a502prejdú cez okraj siete (DigitalOcean, Cloudflare) akoHTTP 504s HTML telom bez obálky, presne tak vyzerá skutočný výpadok zvonku, takže si overíte aj spracovanie odpovede, ktorá nie je JSON. Chyby validácie vyvoláte nevalidným XML, 429 aj prekročením 300 volaní za minútu. V produkcii sa hlavička ignoruje - Cena
- zadarmo, bez limitov na skúšanie
Funguje tam všetko čo tu: portál, REST API, SAPI-SK 1.0, e-shop pluginy aj webhooky. Stačí v integrácii vymeniť doménu za test.peppol.verteco.digital a použiť tokeny vytvorené v testovacom prostredí. Ideálne na vývoj integrácie, CI testy a zaškolenie účtovníkov pred ostrým nasadením. Skúšobné doklady patria len tam: v ostrej prevádzke sa každý domáci doklad medzi platiteľmi DPH hlási Finančnej správe a hlásenie sa nedá vziať späť. V ostrom portáli skúšajte iba tlačidlom „Poslať skúšobnú faktúru“ (0,00 €); od 1. 1. 2027 ostrá prevádzka čísla TEST-/VITAJTE- odmietne (test_document_in_production).
Pozn.: edge ochrana testovacej domény blokuje generické hlavičky User-Agent: Python-urllib a User-Agent: Java/1.8.x (predvolený User-Agent HttpsURLConnection v Jave 8) odpoveďou HTTP 403 „error code: 1010“ ešte pred naším API; ostrá doména peppol.verteco.digital ich prepúšťa. Stačí nastaviť vlastný User-Agent: v Jave buď parametrom JVM -Dhttp.agent=moja-app/1.0 (bez zmeny kódu; Java pripojí „Java/1.8“, výsledný „moja-app/1.0 Java/1.8.0_xxx“ ochrana prepúšťa, blokuje len hlavičku začínajúcu na „Java/1.8“), alebo na spojení conn.setRequestProperty("User-Agent", "moja-app/1.0"). Bežné klienty (requests, httpx, Java 11+, Apache HttpClient, okhttp, axios, Go, PHP, curl) fungujú bez zmeny.
Prečo sa firmy schvaľujú automaticky
Finančná správa nemá testovacie prostredie portálu VPDS: výber poskytovateľa na vpds.financnasprava.sk beží len v produkcii a overuje sa prihlásením na portál FS (eID alebo prihlasovacie údaje PFS), takže v ostrej prevádzke si nemôžete „vybrať" ľubovoľnú cudziu firmu. Aby ste napriek tomu vedeli integráciu otestovať, v testovacom prostredí tento krok simulujeme: každá firma, ktorú vytvoríte, sa schváli automaticky (bez výberu na FS), takže si viete založiť odosielateľa aj príjemcu a prejsť celý tok.
Na testovanie FS webhookov (výber poskytovateľa) máme vlastnú obdobu nástroja Finančnej správy: test.peppol.verteco.digital/sandbox-nastroje. Vygenerujete si tam platný verifikačný token (verifikačný údaj) v štýle FS a odošlete kompletný webhook na svoj endpoint, presne ako to robí portál FS pri reálnom výbere. Firmy vytvorené na testovanie viete zase odregistrovať (z portálu aj z testovacieho SMP), práve pre chýbajúci testovací režim na strane Finančnej správy.
Autentifikácia
Integrácia sa autentifikuje API tokenom v hlavičke Authorization: Bearer vpt_…. Token vytvoríte v portáli (API tokeny); má formát vpt_ + 40 hex znakov, ukladáme len jeho SHA-256 hash a má rovnaký prístup ako váš účet. Otestujte ho cez /auth/me:
curl https://peppol.verteco.digital/api/v1/auth/me -H 'Authorization: Bearer vpt_8f2a…'
# 200 → { "id": "…", "email": "vy(at)firma.sk" } (token funguje)Pri chýbajúcom alebo neplatnom tokene API vráti:
// 401 Unauthorized
{ "error": "unauthorized", "message": "Authentication required" }portal_session, JWT, 7 dní); pri server-to-server integrácii ju nepotrebujete. Verejné bez auth sú /ping, /openapi.json a endpointy pod /public/* (overenie peppol-check, validátor peppol-validate – detail v sekcii Verejné nástroje – a stav služby status); všetko ostatné vyžaduje session alebo Bearer token.Konvencie & formáty
| Typ | Formát | Príklad |
|---|---|---|
id | UUID (string) | 08dd6c1e-… |
časové značky | ISO-8601 Instant (UTC) | 2026-06-03T09:40:27Z |
issueDate | dátum (YYYY-MM-DD) | 2026-06-03 |
totalAmount | desatinné číslo | 120.00 |
chýbajúce hodnoty | null (nie vynechané pole) | "dic": null |
Stránkovanie & idempotencia
/companies a /companies/{id}/documents podporujú voliteľné ?page&limit (odpoveď zostáva JSON pole; celkový počet nájdete v hlavičkách X-Total-Count / X-Total-Pages). Bez parametrov vrátia celé pole, doklady zoradené createdAt zostupne; /tokens vracia vždy celé pole. Hlavičku Idempotency-Key podporuje národné rozhranie SAPI-SK na POST /sapi/document/send; pre programové odosielanie použite práve to.Verzovanie a spätná kompatibilita
- Kontrakt len rastie: nové polia (vynechané, keď sú null), nové voliteľné parametre, nové endpointy a udalosti. Existujúce názvy polí, hodnoty enumov a stavové kódy sa nemenia.
- Nový enum alebo udalosť webhooku môže pribudnúť kedykoľvek; klient ignoruje, čo nepozná, a na neznámu udalosť odpovie 2xx.
- Časové pečiatky sú ISO 8601 v UTC s premenlivým počtom desatinných miest; parsujte ich, neporovnávajte ako text. Sumy prichádzajú ako reťazce s dvoma desatinnými miestami.
- Ak by zmena nemohla byť aditívna, oznámime ju v changelogu (odber e-mailom) najmenej 90 dní vopred a starý tvar ponecháme počas prechodného obdobia.
- Bezpečnostný model API kľúča (od 3. 10. 2026): kľúč číta a odosiela doklady, spravuje firmy, notifikácie a webhooky. Správu účtu a kľúčov (vytvorenie, rozsah a zrušenie kľúča, MFA, heslo, relácie, pozvánky, prevod firmy, podpisy zmlúv) vykoná len prihlásená osoba; kľúč tam dostane 403 token_not_allowed. GET /api/v1/tokens ostáva kľúču dostupný.
- Verzia kontraktu je v openapi.json (info.version) a každá zmena má riadok v changelogu s tagom API alebo Webhooky.
Chyby
statusReason z GET /sapi/document/sent), je k dispozícii ako JSON na /docs/peppol-errors.json (sk, en, de, hu). Hodí sa na tabuľku bežných chýb v účtovnom programe: identifikátor pravidla hľadajte v detaile kdekoľvek, neznáme pravidlo zobrazte aj s jeho identifikátorom. Od 7. 10. 2026 má každá JSON odpoveď hlavičku Content-Type: application/json;charset=UTF-8.Chyby majú jednotný tvar s machine-readable error kódom. Validačné chyby pridávajú mapu fields (prvá chyba na pole).
// business chyba
{ "error": "invalid_credentials", "message": "Invalid email or password" }
// validačná chyba (400)
{ "error": "validation_failed", "message": "Some fields are invalid",
"fields": { "ico": "IČO musí byť 8 číslic" } }HTTP stavy
- 200 / 201 / 204
- úspech (OK / vytvorené / bez obsahu)
- 400
- neplatný vstup (pozri error / fields)
- 401
- chýbajúca alebo neplatná autentifikácia
- 403
- nedostatočné oprávnenie (rola)
- 404
- zdroj neexistuje alebo naň nemáte prístup
- 405
- nepodporovaná HTTP metóda pre danú cestu
- 409
- konflikt (IČO / e-mail už existuje)
- 415
- nepodporovaný Content-Type (XML endpointy očakávajú application/xml)
- 429
- prekročený rate limit (hlavičky RateLimit-* a Retry-After, telo JSON rate_limited)
error. Ak dostanete odpoveď bez JSON tela (HTML alebo text ako error code: 1010 so stavom 403, prípadne 502/504 pri nasadzovaní), neprišla z API, ale z infraštruktúry pred ním (edge ochrana, brána). Typická príčina 403/1010 je generický User-Agent knižnice (Python-urllib, Java/1.8.x na testovacej doméne), riešenie je v sekcii Testovacie prostredie.Najčastejšie chybové kódy
| Kód | HTTP | Kedy |
|---|---|---|
validation_failed | 400 | telo nesplnilo validáciu (pozri fields) |
unauthorized | 401 | chýba alebo neplatný API token |
forbidden | 403 | akcia vyžaduje rolu owner/admin |
company_not_found | 404 | firma neexistuje alebo nie ste jej členom |
ico_taken | 409 | firma s týmto IČO už existuje |
ico_immutable | 400 | IČO sa nedá zmeniť |
company_dic_missing | 400 | overenie odosielania bez DIČ firmy |
token_invalid | 400 | verifikačný údaj (podpis) nesedí |
document_not_found | 404 | doklad neexistuje |
token_not_found | 404 | API token neexistuje / nie je váš |
rate_limited | 429 | priveľa requestov |
Výpadok prístupového bodu a opakovanie
- Ak API odpovie
502,503alebo504, prípadne neodpovie vôbec, doklad sme neprevzali: zopakujte volanie neskôr s rovnakýmIdempotency-Key, nič sa neodošle dvakrát. - Doklad, ktorý API prijalo (
202ACCEPTED, aj sretrying: true), odíde po obnove sám: prístupový bod doručenie opakuje a stav vidíte cezGET /sapi/document/sentalebo webhook; ak doručenie napokon vzdá, doklad skončí ako zlyhaný a rovnaký kľúč ho pošle znova. - Príjem na úrovni siete od portálu nezávisí: doručenie, ktoré počas výpadku portálu neprešlo, odosielajúci prístupový bod podľa pravidiel Peppol zopakuje a doklad sa v portáli objaví po obnove. Hlásenia Finančnej správe, ktoré pre výpadok neodišli, doplní automatický obnovovací beh (prenosové zlyhanie sa opakuje, obsahové odmietnutie nie).
- Stav a históriu dostupnosti nájdete na /status; výpadok si v testovacom prostredí nasimulujete hlavičkou
X-Sandbox-Simulate(sekcia Testovacie prostredie).
Kódy SAPI-SK (pole error.code)
| Kód | Význam |
|---|---|
SAPI-AUTH-001 | neplatné client_id/client_secret alebo zablokovaný účet (401) |
SAPI-AUTH-002 | chýbajúca alebo neplatná hlavička Authorization: Bearer (401) |
SAPI-AUTH-003 | kľúč nie je oprávnený pre daného účastníka, odosielanie nie je odomknuté alebo je pozastavené (403) |
SAPI-AUTH-004 | IP adresa nie je na allowliste kľúča (403) |
SAPI-VAL-001 | neplatné telo požiadavky (400) |
SAPI-VAL-002 | chýba X-Peppol-Participant-Id (400) |
SAPI-PROC-001 | dočasný stav: odoslanie s týmto kľúčom práve prebieha, zopakujte o chvíľu (502, retryable) |
SAPI-PROC-002 | doklad odmietnutý pred odoslaním (422 s Prefer: handling=strict) |
SAPI-PROC-003 | bez Idempotency-Key: pod týmto číslom už bol odoslaný iný doklad (409, details: documentId, status) |
SAPI-RES-001 | doklad neexistuje alebo nepatrí účastníkovi (404) |
SAPI-RES-002 | obsah dokladu už nie je uložený (retencia firmy) alebo nebol archivovaný (404, kód ostáva kvôli kompatibilite) |
SAPI-RES-003 / 004 | príloha alebo doručenka MLS zatiaľ neexistuje (404) |
SAPI-SYS-001 / 002 | dočasná chyba infraštruktúry alebo validátora (503/502, retryable) |
SAPI-SYS-003 | prekročený rate limit (429, Retry-After) |
SAPI-PROC-500 | neočakávaná chyba, correlation_id pošlite podpore (500) |
Kompletný katalóg chýb portálového API (326)
Všetky kódy, ktoré backend vracia v poli error, s textom, ktorý zobrazuje portál. Zoznam sa generuje z toho istého slovníka, ktorý používa rozhranie, takže nemôže zastarať.
Kompletný katalóg chýb portálového API
account_exists | Pre tento e-mail už účet existuje. Prihláste sa a pozvánku prijmite v portáli. |
account_inactive | Váš účet nie je aktívny. Kontaktujte nás, prosím. |
account_under_review | Váš účet práve overujeme. Zavolajte nám alebo napíšte na [email protected]. |
acknowledge_required | Potvrďte, že rozumiete rizikám sťahovania bez autorizácie. |
acknowledgement_required | Potvrďte, že rozumiete dôsledkom ukončenia zmluvy. |
address_book_full | Adresár je plný. Odstráňte nepoužívaných klientov a skúste znova. |
admin_email_unverified | Prístup do administrácie vyžaduje potvrdený e-mail. Kliknite na odkaz v správe, ktorú sme vám poslali pri registrácii. |
admin_mfa_required | Prístup do administrácie vyžaduje zapnuté dvojfaktorové overenie. Zapnite si ho v Nastaveniach. |
ai_budget | Rozpočet na AI návrhy je vyčerpaný alebo ste dosiahli denný limit. Odpoveď napíšte ručne. |
ai_failed | Návrh odpovede sa nepodarilo vygenerovať. Skúste to znova. |
ai_unavailable | AI návrhy odpovedí momentálne nie sú k dispozícii. |
already_completed | Prevod firmy už bol dokončený. |
already_member | Tento používateľ už má prístup (je členom firmy alebo vášho tímu). |
attachment_external | Táto príloha je uložená u odosielateľa ako odkaz, nie priamo vo faktúre. |
attachment_invalid | Niektorú prílohu nebolo možné odoslať (nepovolený typ, poškodený obsah alebo prekročená veľkosť). Skontrolujte prílohy a skúste znova. |
attachment_not_found | Príloha sa nenašla. |
attachment_not_readable | Prílohu sa nepodarilo prečítať. |
billing_unconfigured | Platby predplatného zatiaľ nie sú k dispozícii. |
blocked | Na túto adresu nemôžeme testovací webhook poslať (lokálne alebo interné adresy nie sú povolené). |
body_required | Napíšte, prosím, text správy. |
body_too_long | Správa môže mať najviac 4000 znakov. |
cannot_change_self | Vlastnú rolu si nemôžete zmeniť. Požiadajte druhého správcu firmy. |
cannot_invite_self | Nemôžete pozvať sami seba ani prijať vlastnú pozvánku. |
cannot_release_to_self | Firma už je pod týmto účtom. |
cannot_remove_owner | Vlastníka firmy nemožno odstrániť. Vlastníctvo sa mení prevodom firmy. |
cannot_restrict_admin | Účet správcu portálu sa takto obmedziť nedá. |
cannot_transfer_self | Firma už patrí tomuto e-mailu. |
captcha_failed | Overenie proti robotom zlyhalo. Skúste to znova. |
captcha_required | Overenie proti robotom zlyhalo, obnovte stránku a skúste znova. |
channel_unknown | Starý záznam bez známeho kanála sa nedá zopakovať. Použite ručný re-POST na správny endpoint. |
chat_not_found | Konverzácia sa nenašla alebo je prázdna. |
client_not_found | Firma nepatrí pod tento partnerský účet. |
client_not_removable | Firmu sa nedá odstrániť: je overená Finančnou správou, aktívna, registrovaná v SMP alebo má doklady. Použite odpojenie (release). |
company_active | Aktívnu firmu nie je možné odstrániť. |
company_address_required | Pred odoslaním faktúry doplňte sídlo firmy (ulica, mesto, PSČ) v detaile firmy. |
company_already_active | Firma je už aktívna, pokyny na aktiváciu nie sú potrebné. |
company_dic_missing | Najprv doplňte DIČ firmy, potom skúste overenie znova. |
company_incomplete | Pred podpisom doplňte údaje firmy: obchodné meno, IČO, Peppol identifikátor a úplné sídlo. |
company_limit | Dosiahli ste maximálny počet firiem na účet. Kontaktujte podporu, limit vám zvýšime. |
company_name_mismatch | Obchodné meno sa nezhoduje s oficiálnym registrom (ŽR/OR SR) pre zadané IČO. |
company_not_active | Migračný kód možno vydať len aktívnej firme zaregistrovanej v sieti Peppol. |
company_not_found | Firma sa nenašla. |
company_not_registered | Firma ešte nie je aktivovaná: dokončite výber Verteco na portáli Finančnej správy, potom môžete odosielať. |
company_not_verified | Migrácia je možná až po výbere Verteco na portáli Finančnej správy (firma musí byť aktívna a overená). |
company_verified_locked | Obchodné meno overenej firmy sa dá zmeniť len podľa oficiálneho registra. Najprv doplňte IČO alebo nám napíšte. |
confirm_name_mismatch | Zadaný názov sa nezhoduje s názvom zapísaného sprostredkovateľa. |
confirmation_required | Podpis vyžaduje potvrdenie vášho oprávnenia a súhlasu so znením. |
conflict | Takýto záznam už existuje. |
content_unavailable | Obsah tohto dokladu už nie je uložený alebo sa nedá prečítať ako faktúra. |
contract_pending | Zmluvný vzťah vzniká prvým vstupom do portálu (čl. 4 VOP); pri tejto firme sme ho zatiaľ nezaznamenali, vyhotovenie zmluvy preto ešte nie je možné. |
country_invalid | Krajina musí byť dvojpísmenový kód ISO (SK, CZ, AT, DE…), nie názov. |
country_outside_eu | Online žiadosť prijímame od subjektov so sídlom v členskom štáte EÚ. Subjekt mimo EÚ nám napíše na [email protected]. |
current_ip_missing | Zoznam musí obsahovať aj vašu aktuálnu IP adresu, inak by ste sa po odhlásení zamkli. |
daily_limit | Dosiahli ste denný limit správ. Skúste to zajtra alebo nám napíšte na [email protected]. |
delivery_failed | Testovací webhook sa nepodarilo doručiť, váš endpoint neodpovedal. |
delivery_not_found | Záznam o doručení webhooku sa nenašiel. |
deregister_cooldown | Z jednej IP adresy možno odstrániť najviac jednu firmu za 60 sekúnd. Skúste to o chvíľu. |
dic_immutable | Peppol identifikátor sa nedá zmeniť: je to identita firmy v sieti Peppol. |
dic_required | Zadajte DIČ firmy (SK + 10 číslic). |
dic_taken | Firma s týmto DIČ už v portáli existuje. |
directory_unavailable | Centrálne SMP momentálne neodpovedá alebo zmenu neprijalo. Skúste to o chvíľu znova. |
document_no_xml | Uložené originálne XML už neexistuje, hlásenie sa nedá znova vytvoriť. |
document_not_found | Doklad sa nenašiel. |
document_too_large | Dokument je príliš veľký (limit 3 MB). |
domestic_subject | Slovenský subjekt podáva žiadosť po prihlásení na stránke /sprostredkovatel/ziadost. |
duplicate_invoice_number | Doklad s týmto číslom už bol odoslaný. Nový doklad musí mať iné číslo; rovnaký doklad sa druhýkrát neodosiela. |
email_change_cooldown | Potvrdzovací e-mail sme už poslali. Ďalší môžete vyžiadať o 10 minút. |
email_invalid | Zadajte platnú e-mailovú adresu. |
email_not_verified | Najprv potvrďte svoj e-mail. Odkaz sme vám poslali. |
email_send_company_not_active | Prijímanie na e-mail sa dá zapnúť až pre aktívnu firmu s Peppol identifikátorom. |
email_send_unavailable | Prijímanie faktúr e-mailom nie je v tomto prostredí zapnuté. |
email_taken | Túto e-mailovú adresu už používa iný účet. |
email_unchanged | Toto je vaša súčasná e-mailová adresa. |
empty_document | Vložte XML faktúry. |
empty_idea | Napíšte, prosím, čo by sme mali zlepšiť. |
empty_message | Správa je prázdna. |
empty_reply | Odpoveď je prázdna. |
entry_not_found | Klient v adresári sa nenašiel. |
export_format_unknown | Neznámy formát exportu. |
forbidden | Na túto akciu nemáte oprávnenie. |
forwarder_unreachable | Služba spracovania dokladov neodpovedá. Skúste to o chvíľu. |
fs_change_already_sent | Žiadosť už odišla Finančnej správe, zrušiť sa nedá. Ak treba, podajte novú. |
fs_change_confirm_required | Potvrďte, že žiadate o všetky zmeny naraz. |
fs_change_cooldown | Ďalšiu žiadosť o zmenu môžete podať až 48 hodín po poslednej. |
fs_change_field_readonly | IČO a DIČ sa meniť nedajú; zmena identity subjektu je nový zápis. |
fs_change_no_changes | Nezadali ste žiadnu zmenu oproti údajom u Finančnej správy. |
fs_change_not_found | Žiadosť o zmenu sa nenašla. |
fs_change_not_open | Žiadosť je už uzavretá. |
fs_change_not_queued | Odoslať hneď sa dá len žiadosť, ktorá čaká na odoslanie. |
fs_change_pending | Jedna žiadosť o zmenu už čaká alebo je u Finančnej správy. Ďalšiu podáte po jej vybavení. |
fs_secret_invalid | Kľúč má 32 znakov (číslice a písmená a až f). Skopírujte celý obsah súboru .txt zo zipu od Finančnej správy. |
fs_secret_mismatch | Kľúč nesedí s podpisom volaní, ktoré Finančná správa na váš endpoint už poslala. Skontrolujte zip a skopírovaný kľúč; ak vaša proxy telo volania mení, napíšte nám. |
has_documents | Firma má doklady v archíve, jej odstránenie je zablokované (zákonná archivácia). |
holding_unavailable | Odpojenie klienta momentálne nie je možné. Kontaktujte podporu. |
ico_immutable | IČO sa nedá zmeniť. |
ico_required | IČO je povinné (8 číslic). |
ico_taken | Firma s týmto IČO už existuje pod iným účtom. Prihláste sa ním alebo nám napíšte. |
instructions_cooldown | Pokyny k tejto firme sme už poslali. Znova ich možno poslať po 24 hodinách. |
integration_not_found | Neznáma integrácia. |
internal | Nastala neočakávaná chyba. Skúste to znova. |
internal_error | Nastala neočakávaná chyba na serveri. Skúste to znova, chybu sme zaznamenali. |
invalid_action | Neznáma akcia. |
invalid_after | Parameter after musí byť dátum a čas v tvare ISO 8601 (napr. 2026-09-05T10:00:00Z). |
invalid_amount | Suma musí byť číslo. |
invalid_billing_model | Neznámy fakturačný model. Vyberte jeden z ponúkaných modelov. |
invalid_country | Vyberte krajinu sídla. |
invalid_credentials | Nesprávny e-mail alebo heslo. |
invalid_current_password | Aktuálne heslo nie je správne. |
invalid_date | Dátum musí byť v tvare RRRR-MM-DD. |
invalid_default_company | Predvolená firma musí byť jedna z vašich firiem. |
invalid_dic | Zadajte platné DIČ (10 číslic, prípadne s predponou SK) alebo IČ DPH. |
invalid_direction | Smer dokladov musí byť „odoslané“ alebo „prijaté“. |
invalid_due_days | Splatnosť musí byť 0 až 365 dní. |
invalid_email | Zadajte platnú e-mailovú adresu. |
invalid_feed_url | Adresa feedu musí začínať https://. |
invalid_ico | Zadajte platné IČO (8 číslic) alebo registračné číslo spoločnosti. |
invalid_id | Zadajte slovenské IČ DPH alebo DIČ (napr. SK2121358349), alebo Peppol ID (napr. 0245:2121358349). |
invalid_ids | Zoznam dokladov nie je platný. |
invalid_invite | Pozvánka je neplatná alebo už bola použitá. |
invalid_ip_entry | Zoznam obsahuje neplatnú položku. Povolené sú IP adresy (napr. 185.76.8.211) a rozsahy CIDR (napr. 185.76.8.0/24). |
invalid_key | Kľúč sprostredkovateľa musí mať 3 až 40 znakov: malé písmená, číslice a pomlčky. |
invalid_limit | Limit musí byť aspoň 1, alebo prázdny (predvolená hodnota). |
invalid_link | Prihlasovací odkaz je neplatný alebo už vypršal. Vyžiadajte si nový. |
invalid_locale | Nepodporovaný jazyk. |
invalid_month | Mesiac musí byť v tvare RRRR-MM. |
invalid_notification_email | Jedna z adries nie je platný e-mail: |
invalid_notify_event | Neznáma udalosť notifikácie. |
invalid_notify_locale | Jazyk e-mailov musí byť slovenčina, angličtina, nemčina alebo maďarčina. |
invalid_notify_mode | Neznámy režim notifikácií. Vyberte: každá udalosť, denný súhrn, týždenný súhrn alebo žiadne. |
invalid_password | Nesprávne heslo. |
invalid_pattern | Formát číslovania musí mať najviac 64 znakov a obsahovať poradové číslo {N}, {NNN} alebo {NNNN} presne raz. |
invalid_payload | Faktúra (XML) chýba alebo je príliš veľká. |
invalid_persona | Neznáma rola účtu. |
invalid_phone | Telefón zadajte v tvare +421 9xx xxx xxx (číslice, medzery, prípadne pomlčky). |
invalid_prefs | Nastavenia zobrazenia obsahujú neplatnú hodnotu a nepodarilo sa ich uložiť. |
invalid_receiver | Príjemca musí mať Peppol identifikátor v tvare schéma:hodnota (napr. 0245:2121358349). |
invalid_request | Chýbajú povinné údaje (napr. názov firmy, DIČ s 10 číslicami, platný e-mail alebo adresa endpointu). |
invalid_role | Rola musí byť správca, člen alebo iba na čítanie. |
invalid_seq | Ďalšie poradové číslo musí byť aspoň 1. |
invalid_session | Neplatná konverzácia. Obnovte stránku a skúste znova. |
invalid_signature | Notifikáciu o platbe sa nepodarilo overiť. |
invalid_signup | Registrácia už nie je platná alebo vypršala. Začnite registráciu znova. |
invalid_sort | Neznáme triedenie. |
invalid_state | Neznámy stav. |
invalid_status | Neznámy stav. |
invalid_tag | Štítok nemôže byť prázdny. |
invalid_token | Odkaz je neplatný alebo už bol použitý. |
invalid_vpds_url | Výberový odkaz musí začínať https://vpds.financnasprava.sk/. |
invalid_web | Web musí byť platná adresa (https://...). |
invalid_webhook_url | Webhook URL musí byť platná https:// adresa (najviac 512 znakov). |
invalid_window | Časové okno nie je platné: začiatok musí byť pred koncom a okno najviac 31 dní. |
invalid_xml | XML dokladu sa nedá prečítať (poškodený súbor alebo nepovolená deklarácia DOCTYPE). |
invite_email_mismatch | Táto pozvánka je určená pre inú e-mailovú adresu. Prihláste sa účtom, na ktorý prišla. |
invite_expired | Platnosť pozvánky vypršala. Požiadajte o novú. |
ip_not_allowed | Prihlásenie z tejto IP adresy nie je pre tento účet povolené. |
lead_no_email | Kontakt nemá e-mailovú adresu, nedá sa osloviť. |
lead_not_contactable | Osloviť možno len kontakt v stave „nový“. |
lead_not_found | Kontakt sa nenašiel. |
link_gone | Tento odkaz už nie je platný (vypršal, bol zrušený alebo obsah dokladu už nie je uložený). |
lookup_unavailable | Register alebo overenie je momentálne nedostupné. Skúste to o chvíľu. |
malformed_request | Požiadavka nemá platný tvar. Obnovte stránku a skúste znova. |
manager_required | Túto zmenu môže urobiť len vlastník alebo správca firmy. |
member_is_owner | Tento používateľ je vlastníkom firmy. Vlastníctvo sa mení prevodom firmy. |
member_not_found | Člen sa nenašiel. |
members_full | Firma dosiahla maximálny počet členov. |
method_not_allowed | Táto operácia nie je pre danú adresu podporovaná. |
mfa_already_enabled | Dvojfaktorové overenie už máte zapnuté. |
mfa_code_invalid | Kód nesedí. Skúste aktuálny kód z aplikácie alebo záložný kód. |
mfa_not_enabled | Záložné kódy patria k dvojfaktorovému overeniu. Najprv ho zapnite. |
mfa_not_started | Najprv spustite nastavenie dvojfaktorového overenia. |
mfa_required | Zadajte kód z autentifikačnej aplikácie. |
migration_code_live | Predošlý migračný kód je stále platný. Najprv ho zrušte. |
migration_code_none | Žiadna aktívna žiadosť o migračný kód. |
migration_code_pending | Žiadosť o migračný kód už prebieha. |
migration_code_rejected | SMP migračný kód neprijalo. Overte kód u predchádzajúceho poskytovateľa, kódy sú jednorazové a časovo obmedzené. |
migration_code_required | Zadajte migračný kód od predchádzajúceho poskytovateľa. |
migration_rejected | Centrálne SMP požiadavku o prevzatie odmietlo. Skúste to znova alebo nám napíšte. |
missing_fields | Názov a e-mail vlastníka sú povinné. |
missing_parameter | V požiadavke chýba povinný parameter. |
mls_not_available | Pre tento doklad zatiaľ nie je doručenka (MLS) k dispozícii. |
name_required | Zadajte názov (meno klienta alebo obchodné meno). |
no_billing_account | Zatiaľ nemáte fakturačný účet. Najprv nastavte predplatné. |
no_body | Záznam nemá uložené telo požiadavky, nedá sa zopakovať. |
no_content | Obsah dokladu už nie je k dispozícii, odkaz sa nedá vydať. |
no_dic | Firma nemá DIČ. |
no_documents | Za zvolené obdobie nie sú žiadne doklady (s uloženým XML). |
no_evidence | Pre tento doklad nie je uložený originál XML ani doručenka. |
no_ids | Vyberte aspoň jeden doklad. |
no_owner | Firma nemá vlastníka. Použite priame preradenie. |
no_secret | Podpisový kľúč zatiaľ neexistuje. Najprv nastavte notifikačnú webhook URL. |
no_verification_token | Firma nemá uložený verifikačný údaj z Finančnej správy, registrácia do SMP ho vyžaduje. |
not_a_reseller | Tento účet nie je vlastníkom zápisu sprostredkovateľa. |
not_acceptable | Server odpovedá len vo formáte JSON. |
not_available_for_white_label | Pre firmy pod značkou sprostredkovateľa nie je táto voľba dostupná. |
not_failed | Opakovať možno len nedoručené webhooky. |
not_found | Záznam sa nenašiel. |
not_reseller | Tento účet nie je vlastníkom zápisu sprostredkovateľa. |
not_sandbox_row | Tento zápis sprostredkovateľa spravuje správca, z účtu sa nedá vypnúť. |
note_too_long | Poznámka môže mať najviac 200 znakov. |
notification_emails_too_long | Adresy sú spolu príliš dlhé (najviac 256 znakov). |
owner_not_found | Účet vlastníka s týmto e-mailom neexistuje. Najprv ho vytvorte. |
owner_of_companies | Pre zmazanie účtu najprv požiadajte o migračný kód alebo firmu odregistrujte zo siete Peppol. Potom budete môcť účet vymazať natrvalo. |
owner_required | Túto akciu môže vykonať len vlastník účtu firmy. |
participant_not_registered | Firma zatiaľ nemá záznam v centrálnom SMP pod Verteco; zverejnenie nastavíte po registrácii. |
partner_managed | Zmluvný vzťah tejto firmy vedie jej sprostredkovateľ; potvrdenie o zmluve vystavuje on. |
party_missing_in_text | Podpisované znenie neobsahuje identifikáciu firmy. Obnovte stránku a skúste znova. |
password_already_set | Heslo už máte nastavené. Použite zmenu hesla. |
password_not_set | Účet nemá nastavené heslo. Nastavte si ho v Nastaveniach a skúste znova. |
password_required | Najprv si nastavte heslo (Zabezpečenie), potom môžete túto zmenu potvrdiť. |
payment_mismatch | Platbu sa nepodarilo spárovať so žiadosťou. Kontaktujte nás, prosím. |
payment_unconfigured | Platba momentálne nie je dostupná. Skúste neskôr alebo nás kontaktujte. |
pdf_unavailable | Generovanie PDF je dočasne nedostupné. Skúste to o chvíľu alebo použite Vytlačiť / PDF. |
profile_too_long | Niektoré pole prezentácie je príliš dlhé. Skráťte text. |
public_link_exists | Doklad už má aktívny odkaz. Ak ho chcete nahradiť, zvoľte nahradenie odkazu. |
public_links_disabled | Firma nemá zapnuté sťahovanie faktúr bez autorizácie. Zapne ho vlastník v detaile firmy (Archív dát). |
public_links_unavailable | Verejné odkazy na doklady sú momentálne vypnuté. |
rate_limited | Príliš veľa požiadaviek. Skúste to o chvíľu. |
read_only_member | Rola „iba na čítanie“ nemôže meniť stav ani štítky dokladov. |
received_only | Verejný odkaz sa vydáva len na prijaté doklady. |
receiving_toggle_cooldown | Príjem sa dá prepnúť najviac trikrát za hodinu. Ďalšia zmena bude možná, keď od najstaršej z posledných troch zmien uplynie hodina. |
registered_elsewhere | Účastník je stále zaregistrovaný u iného poskytovateľa; kód prevzatie nespustil. |
renderer_unavailable | Náhľad sa teraz nedá vykresliť (vykresľovacia služba sa reštartuje). Skúste to o chvíľu znova; odoslanie faktúry to neblokuje. |
reply_already_cancelled | Túto odpoveď medzitým zrušil iný pracovník. |
reply_already_sent | Táto odpoveď už bola odoslaná, nedá sa zrušiť ani poslať znova. |
reply_not_found | Naplánovaná odpoveď sa nenašla. |
reply_to_invalid | Adresa pre výsledky nemá tvar e-mailu. |
representative_incomplete | Uveďte meno aj funkciu osoby oprávnenej konať, alebo nechajte obe polia prázdne. |
request_rejected | Požiadavka obsahuje nepovolený znak v hlavičke alebo adrese. Ak posielate API kľúč, použite celý client_secret zobrazený pri vytvorení (zoznam kľúčov ukazuje len začiatok s …) a rovné úvodzovky. |
reseller_not_found | Sprostredkovateľ sa nenašiel. |
reseller_owner | Váš účet vlastní zápis sprostredkovateľa. Prenos zápisu dohodnite s podporou, potom budete môcť účet zmazať. |
reseller_required | Táto časť je len pre účet zapísaného sprostredkovateľa. |
sbd_not_available | Tento doklad nemá uloženú prenosovú obálku (SBDH). Stiahnite XML dokladu. |
schedule_not_found | Tento pravidelný export už neexistuje. |
sender_email_invalid | Adresa odosielateľa nemá tvar e-mailu. |
sender_email_system | Systémové adresy (noreply, postmaster, mailer-daemon…) nemožno pridať; použite schránku osoby alebo fakturačného systému. |
sender_exists | Táto adresa už je medzi povolenými odosielateľmi. |
sender_limit | Povolených odosielateľov môže byť najviac 20. |
sending_not_verified | Odosielanie nie je povolené: firma ešte nemá overený výber poskytovateľa na portáli Finančnej správy. |
sending_paused | Odosielanie je pre túto firmu pozastavené jej spravujúcim účtom. Príjem faktúr beží ďalej. |
service_unavailable | Služba je dočasne nedostupná. Skúste to, prosím, o chvíľu. |
session_full | Táto konverzácia je príliš dlhá. Obnovte stránku a začnite novú. |
session_not_found | Zariadenie sa nenašlo. |
shoptet_feed_blocked | Adresa smeruje na neverejnú sieť. Vložte verejnú adresu vášho e-shopu. |
shoptet_feed_http | Shoptet adresu odmietol. Skontrolujte hash v adrese a či export nie je obmedzený na konkrétnu IP adresu. |
shoptet_feed_invalid_xml | Odpoveď exportu nie je platné XML. Skontrolujte adresu v Shoptete. |
shoptet_feed_not_configured | Prepojenie so Shoptetom ešte nie je nastavené. |
shoptet_feed_not_orders_xml | Toto nie je export objednávok zo Shoptetu: adresa musí končiť na /export/orders.xml. |
shoptet_feed_not_system_xml | Vložte adresu systémového exportu „Systémový Shoptet XML“ (v adrese má patternId=-11). Vlastné šablóny, CSV ani XLS nepodporujeme. |
shoptet_feed_too_large | Odpoveď exportu je príliš veľká (nad 10 MB). Objednávky si pýtame po týždňoch, takže taká odpoveď býva export produktov, nie objednávok. Skontrolujte typ exportu. |
shoptet_feed_unreachable | Export zo Shoptetu neodpovedal. Skúste to o chvíľu znova; Shoptet dovoľuje len jeden export naraz. |
sidlo_incomplete | Sídlo musí obsahovať ulicu, PSČ a mesto, napríklad „Ulica 1, 010 01 Mesto“. |
smp_cancel_failed | Zrušenie kódu v centrálnom SMP sa nepodarilo. Skúste to o chvíľu alebo napíšte na [email protected]. |
smp_deregister_failed | Odregistrácia zo siete Peppol sa nepodarila. Skúste to o chvíľu znova. |
smp_held_elsewhere | Registráciu tejto firmy drží iný poskytovateľ. Migračný kód od nás nie je potrebný. |
smp_not_test | Testovacie prostredie nie je správne prepojené s testovacím SMP. Napíšte nám. |
smp_unavailable | Centrálne SMP momentálne neodpovedá; skúste to o chvíľu znova. |
smtp_fromAddress_required | Zadajte adresu odosielateľa. |
smtp_fromAddress_too_long | Adresa odosielateľa je príliš dlhá. |
smtp_from_forbidden | Adresa odosielateľa nemôže byť na doméne Verteco. |
smtp_from_invalid | Adresa odosielateľa nemá tvar e-mailu. |
smtp_from_not_yours | Adresa odosielateľa musí byť na doméne vašej firmy (ako e-mail vlastníka, člena alebo notifikačný e-mail firmy). |
smtp_from_taken | Túto adresu odosielateľa už používa iná firma. |
smtp_host_blocked | Server sa nedá nájsť v DNS alebo nie je verejne dosiahnuteľný (interné adresy nie sú povolené). |
smtp_host_invalid | Zadajte doménové meno servera (napr. smtp.firma.sk), nie IP adresu. |
smtp_host_required | Zadajte adresu SMTP servera. |
smtp_host_too_long | Adresa SMTP servera je príliš dlhá. |
smtp_incomplete | Vyplňte server, port, prihlasovacie meno, heslo a adresu odosielateľa. |
smtp_password_invalid | Heslo nesmie obsahovať medzery ani nové riadky. |
smtp_password_required | Zadajte heslo k SMTP účtu (pri zmene servera ho treba zadať znova). |
smtp_port_not_allowed | Povolené porty sú 465, 587 a 2525. |
smtp_security_invalid | Zabezpečenie musí byť STARTTLS alebo SSL. |
smtp_test_cooldown | Skúšobný e-mail možno poslať raz za minútu. Skúste to o chvíľu. |
smtp_test_failed | Skúšobný e-mail sa nepodarilo odoslať. Skontrolujte nastavenia SMTP servera. |
smtp_username_invalid | Prihlasovacie meno nesmie obsahovať medzery ani nové riadky. |
smtp_username_required | Zadajte prihlasovacie meno k SMTP účtu. |
smtp_username_too_long | Prihlasovacie meno je príliš dlhé. |
state_not_for_direction | Tento stav nie je možný pre daný smer dokladu (prijatý alebo odoslaný). |
stripe_error | Platobnú bránu sa nepodarilo otvoriť alebo platbu overiť. Skúste to znova. |
support_not_on_sandbox | Podpora beží na ostrom portáli peppol.verteco.digital, nie v testovacom prostredí. |
tag_too_long | Štítok je príliš dlhý. |
target_blocked | Cieľový účet je zablokovaný, prevod naň nie je možný. |
team_full | Dosiahli ste maximálny počet členov tímu. |
termination_confirmed | Potvrdenú výpoveď nie je možné zrušiť z aplikácie. Napíšte na [email protected]. |
termination_pending | Žiadosť o výpoveď už prebieha. Potvrďte ju cez odkaz v e-maile alebo ju zrušte. |
terms_not_accepted | Na vytvorenie účtu je potrebné súhlasiť s obchodnými podmienkami. |
test_document_in_production | Skúšobné doklady (číslo TEST-… alebo VITAJTE-…) sa od 1. 1. 2027 cez ostrú sieť neodosielajú. Na skúšky použite testovacie prostredie test.peppol.verteco.digital. |
ticket_link_expired | Požiadavka je uzavretá dlhšie ako 90 dní, odkaz už nie je platný. Napíšte nám znova na [email protected]. |
ticket_not_found | Požiadavka sa nenašla alebo odkaz nie je platný. |
token_companies_required | Vyberte aspoň jednu firmu, ku ktorej má mať kľúč prístup. |
token_company_not_allowed | Tento API kľúč nemá prístup k tejto firme (bol vytvorený len pre vybrané firmy). |
token_company_not_member | Kľúč môže mať prístup len k firmám, ktorých je váš účet členom. |
token_expired | Platnosť odkazu vypršala. Vyžiadajte si nový. |
token_invalid | Odkaz alebo verifikačný údaj je neplatný, prípadne už neplatí. |
token_limit | Máte príliš veľa aktívnych API kľúčov (max 50). Zrušte nepoužívané a skúste znova. |
token_not_allowed | Toto nastavenie sa mení len po prihlásení v portáli, nie cez API kľúč. |
token_not_found | API kľúč sa nenašiel. |
token_not_revoked | Tento API kľúč je aktívny, nie je čo obnovovať. |
token_restore_expired | Kľúč bol zrušený pred viac ako 7 dňami a už sa nedá obnoviť. Vytvorte nový kľúč. |
token_scope_invalid | Rozsah kľúča musí byť „všetky firmy“ alebo „vybrané firmy“. |
too_many_ids | Naraz možno spracovať najviac 500 dokladov. |
too_many_notification_emails | Zadajte najviac 5 e-mailových adries. |
too_many_schedules | Firma môže mať najviac päť pravidelných exportov. Ak chcete pridať ďalší, najprv niektorý zmažte. |
too_many_tags | Doklad má príliš veľa štítkov. |
too_many_tickets | Máte príliš veľa otvorených požiadaviek. Počkajte, prosím, na odpoveď. |
transfer_canceled | Prevod firmy bol zrušený. |
transfer_expired | Platnosť odkazu na prevod vypršala. Požiadajte o nový prevod. |
transfer_stale | Vlastníctvo firmy sa medzičasom zmenilo, prevod bol zrušený. |
unauthorized | Prihláste sa znova. |
unknown_document | Podpísať možno len dokumenty DPA, SLA a NDA. |
unsupported_document | Náhľad vie vykresliť len faktúru alebo dobropis (UBL Invoice alebo CreditNote). |
unsupported_media_type | Tento typ obsahu server neprijíma. Odošlite údaje vo formáte JSON. |
user_not_found | Účet s týmto e-mailom sa nenašiel. Používateľ sa musí najprv zaregistrovať. |
validation_failed | Niektoré polia nie sú vyplnené správne. |
validator_unavailable | Validácia je momentálne nedostupná. Skúste to o chvíľu. |
verification_code_rejected | SMP neprijalo verifikačný údaj z výberu na portáli Finančnej správy; zopakujte výber. |
verification_token_missing | Chýba verifikačný údaj z výberu na portáli Finančnej správy; zopakujte výber a skúste znova. |
verified_company_required | Žiadosť môže podať len účet s aspoň jednou overenou firmou. |
version_stale | Znenie dokumentu sa medzičasom zmenilo. Obnovte stránku a podpíšte aktuálne znenie. |
webhook_not_configured | Najprv nastavte a uložte webhook URL. |
webhook_url_https_required | Webhook URL musí v produkcii začínať https:// (doručenie nesie identifikátory zákazníka a podpis). |
webhook_url_unreachable | Webhook URL musí byť verejne dosiahnuteľná. Localhost a interné siete nie sú z našich serverov dostupné. |
white_label_owner_fixed | Firmu vedenú cez partnera spravuje partnerský účet. Ďalšieho vlastníka pridá partner uvoľnením firmy alebo výber Verteco na portáli Finančnej správy. |
wrong_endpoint | Toto nie je adresa na získanie tokenu. Použite POST /sapi/auth/token s client_id a client_secret. |
xml_not_available | Pre tento doklad nie je uložené pôvodné XML, obsah už nie je k dispozícii. |
xml_required | Chýba XML dokladu, náhľad sa nedá vykresliť. |
xml_too_large | Doklad je priveľký na náhľad (najviac 8 MB vrátane príloh). |
Rate limity
API je chránené rate limitingom v 60-sekundovom okne (per inštancia). Limit a zostatok vraciame v každej odpovedi cez hlavičky; pri prekročení vráti 429 Too Many Requests s Retry-After.
- Bežné volania
- dynamický limit s veľkou rezervou, na API token (alebo session, inak IP); aktuálnu hodnotu vracia hlavička RateLimit-Limit
- Auth (/auth/*)
- prísnejší limit na IP (anti brute-force; mimo /auth/me a /auth/logout)
RateLimit-Limit- limit v okne
RateLimit-Remaining- koľko ešte ostáva
RateLimit-Reset- sekúnd do resetu okna
Retry-After- sekúnd do ďalšieho pokusu (pri 429)
HTTP/2 429 Too Many Requests
RateLimit-Limit: <limit v okne>
RateLimit-Remaining: 0
RateLimit-Reset: 37
Retry-After: 37
{ "error": "rate_limited", "message": "Too many requests. Slow down." }- Zľavy a zaokrúhľovanie: pravidlá R040 (suma zľavy = základ × % / 100) aj R120 (suma riadku = množstvo × cena − zľavy riadku) majú toleranciu 0,02 €; presné je iba R046 pre zľavu na úrovni ceny (PriceAmount = BaseAmount − Amount). Jednotková cena (BT-146) ani cenníková cena a zľava z ceny (BT-147, BT-148) nemajú obmedzený počet desatinných miest, všetky ostatné sumy majú 2. Ak váš systém uplatňuje zľavu na jednotkovú cenu a zaokrúhľuje ju, zapíšte ju na úrovni ceny: PriceAmount = zaokrúhlená cena po zľave, BaseAmount = cenníková cena, Amount = presný rozdiel, suma riadku = round(množstvo × PriceAmount, 2); percento tam uviesť nemožno (patrí do poznámky riadku). Druhá možnosť je riadková zľava len sumou s kódom 95; percento a základ v riadkovej zľave uvádzajte len vtedy, keď základ = round(množstvo × exportovaná PriceAmount, 2) a Amount = round(základ × % / 100, 2). Záporné množstvo s kladnou cenou (vrátený tovar, odpočet zdanenej zálohy) je dovolené aj v dobropise aj vo faktúre. Vzory 11, 15 a 16 na /vzory.
- Limity sú viazané na prihlasovací údaj, nie na IP: 300 volaní za minútu na API token (SAPI: na access token), auth endpointy 20 za minútu na IP a ochranný strop 600 za minútu na IP pre /api/v1. Serverovej integrácii za jednou IP to neprekáža; vyššie limity nastavíme na požiadanie, napíšte očakávanú špičku.
- Kapacita: objem nie je obmedzený cenníkom, odosielanie je asynchrónne (volanie doklad odovzdá a doručenie beží na pozadí) a dávkové volanie prijme až 100 dokladov naraz; pri plánovanej špičke nám vopred napíšte očakávaný objem a zdvihneme limit kľúča.
- Polling je plnohodnotná cesta: GET /sapi/document/sent a /receive s ?since a ?until každých 1 až 5 minút; webhooky sú doplnok, nie podmienka.
- Časové pečiatky (§ 76a ods. 2 písm. d): sentAt = odovzdanie doručovacej službe (tým je podľa § 85o ods. 11 splnená povinnosť vystaviteľa), deliveredAt = potvrdenie AP príjemcu doručenkou MLS, fsReportedAt = hlásenie FS; pri prijatých dokladoch creationDateTime = prijatie. Všetky tri sú v každom riadku /sapi/document/sent, v detaile /sapi/document/sent/{id} aj vo webhookoch (occurredAt navyše).
- PDF: GET /sapi/document/receive/{id}/pdf a GET /sapi/document/sent/{id}/pdf (odkaz aj v links.pdf) vrátia PDF dodávateľa, ak ho doklad nesie, inak PDF vygenerované z XML; tlačiteľné HTML je na …/html (portál ?format=html).
- C#/.NET a iné jazyky: klienta vygenerujte z OpenAPI (NSwag, Kiota, openapi-generator); vlastný NuGet balík nedodávame.
- Rozsah kľúča: pri vytváraní API kľúča (stránka API kľúče) zvolíte, či má prístup ku všetkým firmám účtu (aj tým, ktoré pribudnú neskôr) alebo len k vybraným. Volanie s kľúčom na inú firmu vráti 403 token_company_not_allowed (SAPI-SK: SAPI-AUTH-003); rotácia kľúča rozsah zachová. Kľúč len na čítanie zatiaľ neexistuje.
- Základná cesta: všetky volania SAPI-SK vrátane našich rozšírení (GET /sapi/document/sent, GET /sapi/document/receive/{id}/pdf, GET /sapi/discovery) idú pod
/sapis tým istým access tokenom a hlavičkouX-Peppol-Participant-Id. Odpoveď 401 „Authentication required“ bez kódu SAPI-… znamená, že cesta je mimo/sapi(napríklad /api/v1/document/sent);/api/v1je portálové API a ako Bearer očakáva kľúčvpt_, nie SAPI access token. - Dátum vyhotovenia (BT-2) nekontrolujeme voči dňu odovzdania na doručenie: doklad odovzdáme do siete v momente prijatia, preto ho posielajte v deň vyhotovenia a neraďte ho do fronty cez polnoc. Doklad v cudzej mene nahlasujeme Finančnej správe so sumou dane v EUR z BT-110 a BT-111 (TaxCurrencyCode EUR), ako ukazuje vzor 03.
- Dátum dodania: v XML ho nesie BT-72 (
cac:Delivery/cbc:ActualDeliveryDate); doklad k prijatej platbe nesie v BT-72 dátum prijatia platby (vzor 12). Naše vlastné faktúry za službu aj doklady z portálu ho uvádzajú vždy, aj keď sa zhoduje s dátumom vyhotovenia (§ 74 ods. 1 písm. d) zákona o DPH ho vyžaduje len pri rozdiele). Pri čítaní berte BT-72, ak chýba tak BT-7 (cbc:TaxPointDate), inak dátum vyhotovenia.
Rozpočty rate limitu (aktuálne hodnoty)
Okno je 60 sekúnd. Každá odpoveď nesie RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset a RateLimit-Policy (limit;w=okno v sekundách), pri 429 aj Retry-After. Hodnoty sa môžu zvýšiť bez oznámenia; čítajte hlavičky, nie túto tabuľku.
| Volania | Kľúč rozpočtu | Limit |
|---|---|---|
/sapi/* a /api/mcp s tokenom | client_id za tokenom (rotácia access tokenu rozpočet neresetuje) | 300 / min |
/api/v1/* s API kľúčom alebo session | kľúč (hash) alebo session | 300 / min |
POST /sapi/auth/token, renew, revoke | IP | 60 / min |
/api/v1/auth/* (prihlásenie, reset) | IP | 20 / min |
Verejné nástroje (/api/v1/public/peppol-check, validator) | IP | 15 / min |
Hromadné overenie (/public/peppol-check/batch) | IP | 6 / min |
Živé overenie v sieti (peppol-check, /sapi/discovery, MCP check_participant) | IP alebo kľúč; spolu celý portál | 40 / hod na volajúceho a 150 / hod spolu; nad limit odpovedá nočný prieskum (source: index), hromadné overenie nie je obmedzené |
Registrácia, zabudnuté heslo, kontaktný formulár | IP | 15 / hod |
Ochranný strop pre všetko s neovereným bearerom | IP | 600 / min |
HTTP/2 200
RateLimit-Limit: 300
RateLimit-Remaining: 287
RateLimit-Reset: 41
RateLimit-Policy: 300;w=60API tokeny
Opaque tokeny vpt_… pre server-to-server prístup. Plaintext sa zobrazí iba raz pri vytvorení. Uložte si ho. Ukladáme len SHA-256 hash a 12-znakový prefix na zobrazenie.
/tokenssession / tokenZoznam vašich aktívnych tokenov (bez secretu), createdAt zostupne.
/tokenssession / tokenVytvorí token; vráti plaintext (jediný raz).
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
name | string | áno | názov tokenu, max 128 |
curl -X POST https://peppol.verteco.digital/api/v1/tokens -b cookies.txt \
-H 'Content-Type: application/json' -d '{"name":"moja-appka"}'
# 201 Created
{ "id":"…","name":"moja-appka","token":"vpt_8f2a…","prefix":"vpt_8f2a3b…","createdAt":"…" }/tokens/{id}session / tokenZruší token. Vráti 204.
Chyby: token_not_found (404)
Firmy
Firmy (IČO / IČ DPH), ktoré spravujete. Prístup je viazaný na členstvo: vidíte len firmy, ktorých ste členom. Tvorca firmy sa stáva jej owner.
/companiessession / tokenZoznam firiem, ktorých ste členom (s vašou rolou).
/companiessession / tokenPridá firmu; stanete sa owner, status = pending_verification.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
ico | string | áno | presne 8 číslic |
dic | string | áno | IČ DPH vo formáte SK + 10 číslic (napr. SK2121358349); neplatiteľ DPH pošle len 10 číslic DIČ, SK doplníme |
legalName | string | áno | obchodné meno, max 500 |
registeredAddress | string | nie | sídlo, max 1000 |
curl -X POST https://peppol.verteco.digital/api/v1/companies \
-H 'Authorization: Bearer vpt_8f2a…' -H 'Content-Type: application/json' \
-d '{"ico":"53412834","dic":"SK2121358349","legalName":"Verteco digital services, s. r. o."}'
# 201 Created
{ "id":"08dd…","ico":"53412834","dic":"SK2121358349","legalName":"…",
"registeredAddress":null,"peppolParticipantId":null,
"status":"pending_verification","role":"owner","createdAt":"2026-06-03T09:40:27Z" }Chyby: ico_taken (409) · validation_failed (400)
/companies/{id}session / tokenDetail firmy (musíte byť členom).
/companies/{id}owner / adminÚprava firmy. IČO je nemenné (musí sa rovnať existujúcemu).
Chyby: forbidden (403) · ico_immutable (400) · company_not_found (404)
Pole status
pending_verification- po vytvorení; odosielanie ešte nie je odomknuté
active- overená, odosielanie odomknuté
Rola člena
owner- tvorca firmy (plný prístup)
admin- správca (úpravy, webhooky, overenie)
member- člen (čítanie)
viewer- iba čítanie
owner aj admin (manažér firmy).Overenie odosielania (Verifikačný údaj)
Pred odosielaním treba firmu overiť cez Verifikačný údaj (VÚ), podpísaný token od Finančnej správy. Po úspešnom overení sa status firmy zmení na active a odomkne sa odosielanie. V bežnom toku VÚ nikto neprepisuje: Finančná správa ho pošle na náš webhook v momente, keď si firma na portáli FS zvolí Verteco (alebo vášho sprostredkovateľa), a overenie prebehne automaticky. Tento endpoint je záložná cesta pre prípad, že VÚ máte z e-mailu FS a webhook nedorazil; neregistruje firmu do SMP.
/companies/{id}/verificationowner / adminSelf-verify Verifikačného údaja. Po úspechu nastaví status na active.
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
token | string | áno | VÚ = hex podpis (prod/pPFS 1024 hex, test/tPFS 768 hex) |
curl -X POST https://peppol.verteco.digital/api/v1/companies/{id}/verification \
-H 'Authorization: Bearer vpt_8f2a…' -H 'Content-Type: application/json' \
-d '{"token":"<1024-hex VÚ>"}'
# 200 OK
{ "companyId":"08dd…","status":"active","sendingVerified":true,
"verificationMethod":"self","verifiedAt":"2026-06-15T…Z" }Chyby: company_dic_missing (400) · token_invalid (400) · forbidden (403)
Dokumenty
Log Peppol dokladov (prijatých a odoslaných) za firmu. Napĺňa sa, ako cez Access Point tečú faktúry. Viazané na členstvo vo firme, zoradené createdAt zostupne.
/companies/{id}/documentssession / tokenZoznam dokladov firmy. Voliteľný filter ?direction=sent|received.
curl 'https://peppol.verteco.digital/api/v1/companies/{id}/documents?direction=received' \
-H 'Authorization: Bearer vpt_8f2a…'
# 200 OK
[ { "id":"…","direction":"received","peppolMessageId":"…","docTypeId":"…",
"senderId":"0088:7300010000001","receiverId":"0245:2121358349",
"invoiceNumber":"2026001","issueDate":"2026-06-03",
"currency":"EUR","totalAmount":120.00,"status":"received","createdAt":"…" } ]/companies/{id}/documents/{docId}session / tokenDetail jedného dokladu.
Chyby: document_not_found (404)
/companies/{id}/documents/{docId}/downloadsession / tokenSamostatné HTML faktúry na tlač. ?inline=1 → zobrazí v prehliadači, inak stiahne.
Vráti text/html, Content-Disposition s názvom faktura-<číslo>.html.
SAPI-SK 1.0 (národné rozhranie)
SAPI-SK je štandardizované národné REST rozhranie medzi klientskym/ERP systémom a Access Pointom (sapi-sk.sk). Implementujeme ho v plnom rozsahu. Vďaka tomu nie ste viazaní na náš proprietárny tvar API a integráciu napíšete raz pre ktorýkoľvek SAPI-SK Access Point. Prehľad bez technických detailov je v článku SAPI-SK pre vývojárov.
- Base URL
https://peppol.verteco.digital/sapi- Autentifikácia
- OAuth2 client_credentials → krátkodobý access token (JWT)
- client_id
- UUID vášho API tokenu (zoznam v sekcii API tokeny / dashboard)
- client_secret
- samotný
vpt_…token z portálu - Verzia
- 1.3 (10 operácií: 4× auth, 6× dokumenty)
vpt_ token ani session). Zrušenie API tokenu v portáli okamžite zneplatní aj /auth/token aj /auth/renew.Sandbox (skúšobné prostredie)
Chcete si SAPI-SK vyskúšať bez registrácie a bez rizika? Použite verejné sandbox prihlasovacie údaje. Sandbox validuje požiadavky presne ako ostrá prevádzka, ale nikdy nič neodošle na Peppol sieť a nepracuje s reálnymi dátami; vráti realistické mock odpovede. Ideálne na vývoj, CI a onboarding integrácie.
- client_id
sandbox- client_secret
sandbox- send
- plná validácia kontraktu + mock 202 (nič sa nedoručí)
- receive
- 1 vzorový doklad
sandbox-doc-0001na test parsovania a acknowledge
# 1) sandbox token (bez registrácie)
curl -X POST https://peppol.verteco.digital/sapi/auth/token \
-H 'Content-Type: application/json' \
-d '{ "client_id": "sandbox", "client_secret": "sandbox",
"grant_type": "client_credentials" }'
# 2) mock odoslanie: zvaliduje sa, ale NIČ sa reálne nedoručí
curl -X POST https://peppol.verteco.digital/sapi/document/send \
-H 'Authorization: Bearer <sandbox access_token>' \
-H 'X-Peppol-Participant-Id: 0245:0000000000' \
-H 'Content-Type: application/json' \
-d '{ "metadata": { "documentId": "TEST-1",
"documentTypeId": "urn:…::Invoice##…::2.1",
"senderParticipantId": "0088:sandbox-sender",
"receiverParticipantId": "0088:sandbox-receiver" },
"payload": "<Invoice>…</Invoice>", "payloadFormat": "XML" }'
# 202 { "providerDocumentId": "sandbox-…", "status": "ACCEPTED", … }
# 3) vzorová schránka + detail vzorového dokladu
curl https://peppol.verteco.digital/sapi/document/receive \
-H 'Authorization: Bearer <sandbox access_token>'
curl https://peppol.verteco.digital/sapi/document/receive/sandbox-doc-0001 \
-H 'Authorization: Bearer <sandbox access_token>'client_id/client_secret z portálu (nižšie).Autentifikácia
/sapi/auth/tokenclient_credentialsVymení client_id + client_secret za access token (15 min) a refresh token (30 dní). Token si uložte a používajte ho celých 15 minút - nový token na každé volanie je zbytočná réžia (limit požiadaviek sa počíta aj na /auth/token).
curl -X POST https://peppol.verteco.digital/sapi/auth/token \
-H 'Content-Type: application/json' \
-d '{ "client_id": "<UUID tokenu>", "client_secret": "vpt_8f2a…",
"grant_type": "client_credentials" }'
# 200 OK
{ "access_token": "eyJhbGciOi…", "token_type": "Bearer",
"expires_in": 900, "refresh_token": "eyJhbGciOi…" }Chyby: SAPI-AUTH-001 (401) · SAPI-AUTH-003 (401: IP mimo allowlistu kľúča) · SAPI-VAL-001 (400)
/sapi/auth/token/statusBearer (access)Platnosť a expirácia access tokenu; should_refresh = true pri < 3 min do konca.
/sapi/auth/renewrefresh tokenVystaví nový access + refresh token. Zlyhá, ak bol podkladový API token zrušený.
// body
{ "refresh_token": "eyJhbGciOi…" }/sapi/auth/revoke–Vždy vráti success (RFC 7009). Trvalý kill-switch = zrušenie API tokenu v portáli.
Odoslanie dokumentu
/sapi/document/sendBearer (access)Odošle Peppol biznis dokument (UBL / BIS 3.0) príjemcovi cez náš Access Point. Odosielanie je fail-closed: firma musí mať overený Verifikačný údaj. Odpoveď môže niesť aditívne pole warnings[] s rovnakými nezáväznými upozorneniami ako /document/validate (číslo TEST-, odberateľ z toho istého účtu, dátum vystavenia iný než deň odoslania); upozornenie doklad nikdy neblokuje.
Povinné hlavičky:
| Hlavička | Popis |
|---|---|
Authorization | Bearer <access_token> |
X-Peppol-Participant-Id | účastník, za ktorého odosielate (napr. 0245:2121358349, číslice DIČ bez „SK“) |
Idempotency-Key | jeden kľúč na jednu faktúru, odvodený z niečoho stáleho (napr. váš systém + ID alebo číslo faktúry); opakované volanie s ním vráti pôvodný výsledok a nikdy nedoručí dvakrát, nový kľúč pre tú istú faktúru túto ochranu obíde. Kľúč platí v rámci firmy (X-Peppol-Participant-Id). Výnimka: ak prvý pokus do siete neodišiel (chyba validácie, neúplná požiadavka, príjemca nepublikuje daný typ dokladu, prístupový bod vzdal opakovanie, transportná chyba so stavom failed) alebo skončil ako undeliverable, rovnaký kľúč odoslanie zopakuje, takže „oprav a pošli znova“ funguje aj pod rovnakým číslom faktúry; postup je v poznámke Oprava a opätovné odoslanie nižšie. Kľúč nikdy nevyprší: je uložený pri zázname dokladu, ktorý uchovávame natrvalo (retencia maže len obsah), takže opakovanie s rovnakým kľúčom vráti pôvodný výsledok aj po mesiacoch. |
curl -X POST https://peppol.verteco.digital/sapi/document/send \
-H 'Authorization: Bearer eyJ…' \
-H 'X-Peppol-Participant-Id: 0245:2121358349' \
-H 'Idempotency-Key: 7b1f0e2a-…' \
-H 'Content-Type: application/json' \
-d '{ "metadata": {
"documentId": "INV-2026-001",
"documentTypeId": "urn:…::Invoice##…::2.1",
"processId": "urn:…:bis:billing:3.0",
"senderParticipantId": "0245:2121358349",
"receiverParticipantId": "0088:7300010000001",
"creationDateTime": "2026-06-17T10:00:00Z" },
"payload": "<Invoice …>…</Invoice>",
"payloadFormat": "XML" }'
# 202 Accepted
{ "providerDocumentId": "…", "status": "ACCEPTED",
"receivedAt": "2026-06-17T10:00:01Z", "timestamp": "…" }
# pri status "REJECTED" nesie odpoveď aj pole "detail"
# s dôvodom odmietnutia (validačné pravidlá, napr. BR-CO-15)metadata sú smerovacie a technické: documentId je váš interný identifikátor, nie číslo faktúry. Obchodné údaje (číslo faktúry cbc:ID, dátum vystavenia, splatnosť, dátum dodania, mena, suma) si preberáme priamo z UBL payloadu; nič z toho v metadata neposielate a UBL je vždy zdroj pravdy pre zobrazenie v portáli aj webhooky. documentTypeId: úplný identifikátor busdox-docid-qns; holý namespace alebo samotné CustomizationID normalizujeme na typ odvodený z payloadu, typ, ktorý payloadu odporuje, odmietneme chybou SAPI-VAL-001; schéma účastníka musí byť zo zoznamu EAS.Chyby: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-VAL-001 (400) · SAPI-PROC-001 (502) · SAPI-PROC-002 (503) · SAPI-PROC-500 (500: neopakovať, nahláste correlation_id)
202a verdikt nesie telo (status ACCEPTED alebo REJECTED). Ak chcete, aby verdikt niesol aj HTTP kód, pošlite hlavičku Prefer: handling=strict (RFC 7240): synchrónne odmietnutie sa vráti ako 422 so SAPI chybovou obálkou (SAPI-VAL-002 pri chybe validácie, SAPI-RES-003 keď príjemcovi nejde doručiť; details[] nesú providerDocumentId a detail) a odpoveď má Preference-Applied: handling=strict. Pri ACCEPTED sa nič nemení. Pred odovzdaním prístupovému bodu robíme rovnaký SML lookup ako on. Doklad najprv prejde validáciou: prevezmeme a nahlásime len platný doklad, nevalidný dostane REJECTED s validation_failed aj vtedy, keď príjemca v sieti nie je. Príjemca, ktorý v sieti Peppol vôbec nie je, znamená ACCEPTED s undeliverable: true: doklad sme prevzali a nahlásime ho Finančnej správe bez ohľadu na doručenie (§ 85o ods. 11, FS FAQ 9/DPH/2025/IM, časť II, príklad 9), nikomu sa však nedoručí; na GET /sapi/document/sent má status undeliverable, webhook dostane invoice.undeliverable, e-mail nikomu neposielame a rovnaký Idempotency-Key ide odoslať znova po oprave identifikátora príjemcu alebo po jeho registrácii (postup v poznámke Oprava a opätovné odoslanie nižšie). Príjemca, ktorý v sieti je, ale nepublikuje daný typ dokladu, dostane REJECTED okamžite, bez pokusu o doručenie. Pole retrying: true pri ACCEPTED znamená, že prvý pokus o doručenie zlyhal (napr. dočasne nedostupné SMP) a prístupový bod ho sám opakuje spravidla do 20 minút; detail nesie dôvod a konečný verdikt príde cez GET /sapi/document/sent alebo webhook.handling=strict aj 422), dostane vlastné providerDocumentId, aj odmietnutý.- REJECTED pri našej kontrole pred odoslaním (chyba validácie, neúplná požiadavka, príjemca nepublikuje daný typ dokladu, jeho SMP záznam pre typ nemá endpoint, prístupový bod vzdal opakovanie): do siete nič neodišlo, nič sa nedoručilo a nič sa nehlási Finančnej správe. Opravte údaje a pošlite doklad znova s rovnakým
Idempotency-Key. Nový pokus dostane novéproviderDocumentId; prvý záznam ostáva v zozname odoslaných akorejecteds dôvodom, len ako stopa neúspešného pokusu, a zmazať sa nedá. Faktúru vo vašom systéme viažte vždy na poslednéproviderDocumentId. Číslo faktúry môže ostať rovnaké, faktúra ešte nebola vyhotovená v zmysle zákona. Dátum vystavenia (BT-2) však musí byť deň, keď faktúra skutočne odíde: elektronická faktúra sa považuje za vyhotovenú dňom odovzdania doručovacej službe a odoslať ju treba najneskôr do 15 dní od dodania alebo prijatia platby (FS FAQ 9/DPH/2025/IM, časť I, príklad 74). Ak opravenú faktúru posielate v neskorší deň, dátum vystavenia zmeňte na tento deň. - Odovzdané sieti (ACCEPTED bez undeliverable: submitted, delivered alebo sa opakuje na pozadí; patrí sem aj doklad, ktorý po prenose odmietla doručenka MLS príjemcu a ktorý opakované volanie vráti ako REJECTED s dôvodom): rovnaký kľúč vráti výsledok tohto odoslania a nič sa neodošle dvakrát. Doručenú faktúru nikdy neposielajte znova; opravuje sa dobropisom (381) alebo ťarchopisom (383).
- undeliverable (príjemca nemá adresu v sieti Peppol): faktúra bola odovzdaná, hlási sa Finančnej správe bez ohľadu na doručenie a povinnosť vystaviteľa je splnená (FS FAQ 9/DPH/2025/IM, časť I, príklady 42 a 75). Kľúč sa uvoľní. Ak bol chybný identifikátor príjemcu (napríklad IČO alebo DIČ s preklepom namiesto 0245:<10 číslic DIČ>, alebo je príjemca v sieti pod iným identifikátorom), opravte identifikátor a pošlite znova s rovnakým kľúčom; faktúru nechajte rovnakú (to isté číslo aj dátum), už bola odovzdaná. 8-miestne číslo je IČO a v sieti sa nikdy nenájde. Ak je identifikátor správny a príjemca len nie je registrovaný, pošlite mu tú istú faktúru inou cestou, najlepšie jej XML e-mailom (PDF len ako náhľad). Podľa FS FAQ (časť I, príklad 75) ide o opätovné zaslanie tej istej faktúry, nie o novú faktúru, preto nevystavujte novú faktúru s iným číslom. Keď sa príjemca zaregistruje, tú istú faktúru mu cez Peppol pošlete znova zopakovaním volania s rovnakým
Idempotency-Key. - Nesprávny identifikátor odberateľa alebo prázdny vlastný: hlavička
X-Peppol-Participant-Idlen so schémou (napríklad0245:, keď v nastavení programu chýba DIČ firmy) vráti pri odoslaní 403 SAPI-AUTH-003 s vysvetlením a /document/validate s takou hlavičkou pridá dowarningsupozornenie ešte pred odoslaním. Odberateľ zadaný ako 0088 (GLN) alebo 0245 s 8 číslicami (IČO namiesto DIČ) sa v slovenskej sieti nenájde: doklad skončí ako undeliverable a jehostatusReason(detail v odpovedi na send) nesie návod, ktorý identifikátor použiť: 0245 a 10 číslic DIČ. - Predchádzajte chybám: pred odoslaním zavolajte
POST /sapi/document/validate(rovnaké pravidlá ako pri odoslaní, nič neukladá ani neodosiela) aGET /sapi/discovery?receiverId=…(je príjemca v sieti a aké typy dokladov prijíma). Konečný stav zistíte cezGET /sapi/document/sent?invoiceNumber=…,GET /sapi/document/sent/{id},POST /sapi/document/sent/statusalebo webhookyinvoice.delivered,invoice.rejectedainvoice.undeliverable.
/sapi/document/validateBearer (access)Overí dokument bez odoslania: rovnaké pravidlá EN 16931 + Peppol BIS 3.0, aké prístupový bod uplatňuje pred odoslaním. Nič sa neukladá ani neodosiela; funguje aj so sandbox tokenom. Telo = JSON pár { payload, payloadFormat } ako pri /document/send, alebo priamo XML (Content-Type: application/xml). Limit 10 MB. Odpoveď nesie aj pole warnings[] s nezáväznými upozorneniami (napríklad číslo TEST-, odberateľ, ktorý je inou firmou toho istého účtu, alebo dátum vystavenia BT-2 iný než deň odoslania); upozornenie doklad nikdy neblokuje.
curl -X POST https://peppol.verteco.digital/sapi/document/validate \
-H 'Authorization: Bearer eyJ…' \
-H 'Content-Type: application/xml' \
--data-binary @faktura.xml
# 200 OK
{ "valid": false,
"errors": [ "BR-CO-15: Invoice total amount with VAT (BT-112) = … " ],
"warnings": [],
"checkedAt": "2026-09-10T12:00:00Z" }Chyby: SAPI-AUTH-002 (401) · SAPI-VAL-001 (400: prázdne telo, neplatný JSON, payloadFormat iný než XML, > 10 MB) · SAPI-SYS-002 (502: validátor dočasne nedostupný, opakujte)
Príjem dokumentov
/sapi/document/receiveBearer (access)Zoznam prijatých dokumentov (najstaršie prvé); metadáta nesú aj invoiceNumber, takže doklad identifikujete bez sťahovania payloadu. Query: ?pageToken, ?limit (max 200), ?status (filter: received = iba doklady, ktoré ste ešte nepotvrdili, acknowledged = iba potvrdené, bez parametra všetky prijaté doklady; bez ohľadu na veľkosť písmen, iná hodnota vráti chybu SAPI-VAL-001), ?invoiceNumber (presná zhoda s cbc:ID), ?since a ?until (ISO-8601 instant; okno podľa času prijatia – napr. doklady za posledných 5 dní, hromadné stiahnutie na externú archiváciu či rekonštrukciu účtovníctva), ?deliveryDateFrom a ?deliveryDateTo (ISO-8601 dátum; filter podľa dátumu dodania z dokladu). Hlavička X-Peppol-Participant-Id povinná.
// 200 OK
{ "documents": [ { "documentId":"…","documentTypeId":"…",
"senderParticipantId":"0088:…","receiverParticipantId":"0245:…",
"creationDateTime":"2026-06-17T…Z" } ],
"nextPageToken": "50" }/sapi/document/receive/{documentId}Bearer (access)Detail vrátane payloadu (raw XML, ako prišiel cez Peppol).
Chyby: SAPI-RES-001 (404) · SAPI-RES-002 (404: payload nearchivovaný)
/sapi/document/receive/{documentId}/acknowledgeBearer (access)Potvrdí prevzatie dokumentu vaším systémom. Idempotentné.
/sapi/document/receive/{documentId}/xmlBearer (access)Archívny odkaz (metadata.links.xml): samotný obchodný doklad ako XML súbor, rovnaký obsah ako payload v detaile.
/sapi/document/receive/{documentId}/htmlBearer (access)Archívny odkaz (metadata.links.html): generický tlačiteľný náhľad faktúry (HTML).
/sapi/document/receive/{documentId}/pdfBearer (access)Archívny odkaz (metadata.links.pdf): PDF dokladu. Ak dodávateľ vložil do XML vlastné PDF faktúry (BT-125), vraciame ten originál; inak PDF vygenerované z uloženého XML na požiadanie (PDF neukladáme). Hlavička X-Verteco-Pdf-Source: supplier | generated. 404 SAPI-RES-002 po výmaze obsahu, 503 pri výpadku renderera (skúste neskôr alebo použite /html).
/sapi/document/receive/{documentId}/attachments/{index}Bearer (access)Archívny odkaz (metadata.links.attachments[].url): bajty jednej prílohy vloženej v doklade, napr. PDF originál dodávateľa. Vynútené stiahnutie.
/sapi/document/receive/{documentId}/public-linkBearer (access)Odkaz bez prihlásenia (voliteľné): vydá NOVÝ náhodný kľúč k dokladu ({"rotate":true} nahradí existujúci). Vráti url (stránka), xmlUrl, htmlUrl, pdfUrl a expiresAt; kľúč sa zobrazí len raz. Firma musí mať zapnuté Sťahovanie faktúr bez autorizácie (403 SAPI-AUTH-004 inak). DELETE odkaz zruší.
Stav odoslaných dokumentov
/sapi/discovery?receiverId=0245:2121358349Preflight pred odoslaním: je príjemca registrovaný v sieti Peppol a aké typy dokladov vie prijať? Rovnaký SML lookup, aký robí Access Point; receiverId prijme Peppol ID, IČ DPH aj samotné DIČ. Odpoveď: {registered, participantId, smp, documentTypes, checkedAt}. Hlavička X-Peppol-Participant-Id tu nie je potrebná.
/sapi/document/sentBearer (access)Stav doručenia odoslaných dokladov: pending (odovzdávame sieti) → submitted → delivered / rejected (potvrdené doručenkou MLS od AP príjemcu); failed = transportná chyba (retry s rovnakým Idempotency-Key pošle znova). Query: ?pageToken, ?limit, ?status (pending / submitted / sent / delivered / rejected / failed; bez ohľadu na veľkosť písmen, iná hodnota vráti chybu SAPI-VAL-001), ?invoiceNumber (presná zhoda s cbc:ID – stav konkrétnej faktúry jedným volaním), ?since a ?until (ISO-8601 instant; okno podľa času), ?deliveryDateFrom a ?deliveryDateTo (ISO-8601 dátum; filter podľa dátumu dodania).
// 200 OK
{ "documents": [ {
"documentId": "…",
"receiverParticipantId": "0245:1084695645",
"peppolMessageId": "befc9112-…",
"status": "delivered",
"statusDateTime": "2026-07-09T14:52:31Z",
"creationDateTime": "2026-07-09T14:52:12Z" } ],
"nextPageToken": null }Chyby: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-VAL-001 (400: neplatné since)
Doručenka (MLS) a dôkazy doručenia
Doručenka MLS (Peppol Message Level Status) je odpoveď Access Pointu príjemcu na našu zásielku: AP = prijaté a doručené, AB = doručené bez obchodného potvrdenia, RE = odmietnuté s dôvodom. Portál ju uloží k odoslanému dokladu a podľa nej prepne stav: AP aj AB znamenajú delivered (pri AB začína statusDetail „MLS AB: “ a mls.responseCode je AB; podľa SPOG on MLS je to doručenie bez obchodného potvrdenia, nie výhrada), RE znamená rejected. Podľa § 76a ods. 2 písm. d zákona 222/2004 musí poskytovateľ vedieť preukázať dátum a čas odoslania, doručenia a prijatia; tie tri časy nesie každý riadok GET /sapi/document/sent aj webhook: sentAt (odovzdanie doručovacej službe, tým je podľa § 85o ods. 11 splnená povinnosť vystaviteľa), deliveredAt (potvrdenie AP príjemcu doručenkou) a fsReportedAt (hlásenie údajov FS). Zahraničný Access Point doručenku nemusí poslať nikdy: doklad ostane delivered s detailom as4_receipt_only a bez MLS.
/sapi/document/sent/{documentId}Bearer (access)Detail jedného odoslaného dokladu: rovnaký riadok ako v zozname (vrátane sentAt, deliveredAt, fsReportedAt, hasMls, links) plus mls.responseCode (AP/AB/RE), mls.receivedAt a mls.url. mls je null, kým doručenka nepríde.
// 200 OK
{ "document": {
"documentId": "…", "peppolMessageId": "befc9112-…", "status": "delivered",
"sentAt": "2026-09-17T08:00:12Z", "deliveredAt": "2026-09-17T08:00:31Z", "fsReportedAt": null,
"hasMls": true,
"links": { "detail": "…/sapi/document/sent/…", "mls": "…/sapi/document/sent/…/mls" } },
"mls": { "responseCode": "AP", "receivedAt": "2026-09-17T08:00:31Z", "url": "…/sapi/document/sent/…/mls" } }Chyby: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-RES-001 (404: cudzí alebo prijatý doklad) · SAPI-RES-004 (404: doručenka zatiaľ nie je)
/sapi/document/sent/{documentId}/mlsBearer (access)Doručenka ako súbor: MLS ApplicationResponse od Access Pointu príjemcu, ktorý sa odkazuje na peppolMessageId zásielky. Dôkaz doručenia alebo odmietnutia; vynútené stiahnutie. SAPI-RES-004, kým doručenka neprišla.
/sapi/document/sent/{documentId}/xmlBearer (access)Obsah odoslaného dokladu (SAPI 1.8.15): samotné UBL XML, ktoré sme odovzdali sieti (prenosová obálka odstránená), vynútené stiahnutie. Protipól odkazov na prijaté doklady: účtovný program externého účtovníka si takto načíta aj VYSTAVENÉ faktúry klienta (MK-soft: „Načítavať aj vystavené faktúry“). Odkazy sú v každom riadku ako links.xml, links.html a links.pdf. SAPI-RES-002 po výmaze obsahu podľa retencie firmy.
/sapi/document/sent/{documentId}/htmlBearer (access)Tlačová podoba odoslaného dokladu vygenerovaná z uloženého XML (nič sa neukladá).
/sapi/document/sent/{documentId}/pdfBearer (access)PDF odoslaného dokladu: vlastné PDF vystaviteľa vložené v XML (BT-125), ak ho doklad nesie, inak PDF vygenerované z XML; hlavička X-Verteco-Pdf-Source: supplier | generated. 503 SAPI-PROC-001, kým je generátor nedostupný (použite /html).
Dôkazy hlásenia FS, integrita a časová os (SAPI 1.8.14)
Od verzie 1.8.14 nesie každý riadok GET /sapi/document/sent aj detail a zoznam prijatých dokladov objekt fsReport: state = reported (hlásenie odovzdané zbernému bodu C5, reportedAt = fsReportedAt), pending (hlásenie je dlžné, odovzdanie zlyhalo a opakuje sa automaticky, reason = c5_unavailable) alebo not_required (hlásenie nevzniká; reason vysvetľuje prečo: cross_border, self_send_test, issuer_without_vat_id, recipient_without_vat_id, not_billing_document, tdd_disabled, before_2026_09_01, not_recorded). Po odovzdaní pribudne tddMessageId (SBDH InstanceIdentifier hlásenia) a po odpovedi C5 c5ResponseCode (AP/AB/RE), c5ResponseAt, c5Detail a zhrnutie outcome: accepted (AP), accepted_with_reservations (AB), rejected (RE) alebo null, kým C5 neodpovedalo. outcome = rejected znamená, že hlásenie sme odovzdali, ale Finančná správa ho odmietla (c5Detail nesie porušené pravidlo, napríklad BR-AE-08); state ostáva reported, lebo odovzdanie prebehlo, a portál opravené hlásenie odošle znova automaticky (po prijatí sa outcome zmení na accepted). Odoslané riadky majú navyše statusReason (strojový kód za statusDetail: network_retrying, network_retrying_sent, as4_receipt_only, recipient_not_registered, transport_failed, mls_rejected, validation_failed), xmlSha256 (SHA-256 odovzdaného XML, ostáva aj po výmaze obsahu), retention a receiptRetention = permanent (doručenka MLS sa nikdy nemaže). Doručenka v detaile má mls.sha256 a mls.messageId. Prijaté doklady dostali peppolMessageId, status (received/acknowledged), receivedAt, acknowledgedAt a xmlSha256 (SHA-256 bajtov obchodného dokladu presne tak, ako ich vydáva links.xml, bez prenosovej obálky SBDH; počíta sa pri prijatí a ostáva aj po výmaze obsahu). Oba zoznamy filtrujete cez ?fsReport=reported|pending|not_required|rejected (rejected = outcome rejected), odoslané aj cez ?status=undeliverable. Odpoveď POST /sapi/document/send nesie peppolMessageId už pri prevzatí. Všetko je doplnené ako nové polia, existujúce zostávajú nezmenené.
/sapi/document/sent/statusBearer (access)Stav až 200 odoslaných dokladov jedným volaním: rovnaké riadky ako v zozname plus mls, ak doručenka už prišla. Id, ktoré nie sú odoslanými dokladmi tejto firmy, sa vrátia v missing; volanie kvôli nim nezlyhá. Náhrada za N volaní GET /sapi/document/sent/{id} pri synchronizácii účtovného systému.
// POST { "documentIds": ["7c1e…", "9af0…", "neznáme"] } (max 200)
{ "documents": [ {
"documentId": "7c1e…", "status": "delivered", "statusReason": null, "peppolMessageId": "befc9112-…",
"sentAt": "2026-09-21T08:00:12Z", "deliveredAt": "2026-09-21T08:00:31Z", "fsReportedAt": "2026-09-21T08:05:40Z",
"fsReport": { "state": "reported", "reportedAt": "2026-09-21T08:05:40Z", "reason": null, "outcome": "accepted",
"tddMessageId": "3f2a…", "c5ResponseCode": "AP", "c5ResponseAt": "2026-09-21T08:06:02Z", "c5Detail": null },
"xmlSha256": "9b74…", "retention": { "mode": "storage", "contentAvailableUntil": null }, "receiptRetention": "permanent",
"hasMls": true, "links": { "detail": "…", "mls": "…" },
"mls": { "responseCode": "AP", "receivedAt": "2026-09-21T08:00:31Z", "url": "…", "sha256": "e1c0…", "messageId": "mls-…" } } ],
"missing": ["9af0…", "neznáme"] }Chyby: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-VAL-001 (400: 0 / > 200 id)
/sapi/document/sent/{documentId}/eventsBearer (access)Časová os dokladu zoradená podľa času: submitted, network_retrying, delivered / rejected / undeliverable / failed, mls_received, fs_reported, fs_c5_verdict, content_wiped, webhook_delivered a ďalšie (neznámy typ ignorujte). Fáza 1 je odvodená z uložených skutočností dokladu, nie záznam každej medzizmeny stavu.
Chyby: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-RES-001 (404: cudzí alebo prijatý doklad)
/sapi/document/receive/{documentId}/eventsBearer (access)Časová os prijatého dokladu: received, acknowledged, fs_reported, fs_c5_verdict, content_wiped, doručenia webhookov.
Hromadné odoslanie
/sapi/document/batchBearer (access)Až 100 dokumentov v jednom volaní. Každá položka prejde plnou logikou jednotlivého odoslania (idempotencia cez itemId + idempotencyKey, rezervácia, submit, verdikt) a vráti vlastný výsledok; chyba jednej položky nezastaví ostatné. Položky sa spracúvajú sekvenčne; failed položky opakujte s rovnakým idempotencyKey.
// request
{ "documents": [ {
"itemId": "fa-2026-001",
"idempotencyKey": "fa-2026-001",
"metadata": { "documentId": "2026001", "documentTypeId": "…", "processId": "…",
"senderParticipantId": "0245:2121358349", "receiverParticipantId": "0245:1084695645" },
"payload": "<Invoice …>", "payloadFormat": "XML" } ] }
// 202 Accepted
{ "total": 2, "accepted": 1, "rejected": 1, "failed": 0,
"results": [
{ "itemId": "fa-2026-001", "ok": true, "providerDocumentId": "…", "status": "ACCEPTED" },
{ "itemId": "fa-2026-002", "ok": false, "errorCode": "SAPI-AUTH-003", "errorMessage": "…" } ] }Chyby: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-VAL-001 (400: prázdny/príliš veľký zoznam)
Model chýb
Všetky SAPI chyby majú jednotnú obálku s kategóriou, stabilným kódom, príznakom retryable a correlation_id na podporu. Pri chybe prihlásenia (SAPI-AUTH-001) nesie obálka navyše hint (ľudsky čitateľné vysvetlenie, čo patrí do Client Id a Client Secret) a docs (odkaz na návod; pre programy MK-soft priamo na /navody/mksoft#prepojenie). Obe polia sú voliteľné a inde chýbajú (1.8.20).
{ "error": {
"category": "AUTH",
"code": "SAPI-AUTH-001",
"message": "Invalid client credentials.",
"retryable": false,
"correlation_id": "b4191dfc-…" } }Notifikácie & webhooky
Pri prijatej faktúre vieme firmu upozorniť e-mailom alebo webhookom (POST na vašu URL). Doručenie je durable: ukladá sa do výstupnej fronty a doručuje asynchrónne (15 s timeout); pri zlyhaní opakujeme až 12× s exponenciálnym backoffom (30 s → max 8 h, spolu približne 16 hodín), potom dead-letter. Výpadok vášho servera teda notifikáciu nestratí, doručíme ju pri ďalšom pokuse. HTTP 401/403 znamená, že váš endpoint vyžaduje autentifikáciu, ktorú neposielame; overujte podpis webhook-signature a odpovedajte 2xx. SSRF ochrana blokuje loopback/lokálne adresy; webhook URL musí byť verejná.
/companies/{id}/notificationssession / tokenNastavenia notifikácií: { webhookUrl, notificationEmail, notificationEmails, hasSecret }.
/companies/{id}/notificationsowner / adminNastaví oba kanály (prázdny reťazec = zruší daný kanál).
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
webhookUrl | string | nie | prázdne alebo http(s) URL, max 512 |
notificationEmail | string | nie | jedna adresa alebo najviac 5 oddelených čiarkou, max 256; každá dostáva e-maily o prijatých faktúrach (400 invalid_notification_email / too_many_notification_emails) |
/companies/{id}/webhooksession / tokenKonfigurácia webhooku: { url, hasSecret } (bez secretu).
/companies/{id}/webhookowner / adminNastaví URL webhooku (auto-vygeneruje podpisový secret, ak ešte nie je).
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
url | string | áno | http(s) URL, max 512 |
curl -X PUT https://peppol.verteco.digital/api/v1/companies/{id}/webhook \
-H 'Authorization: Bearer vpt_8f2a…' -H 'Content-Type: application/json' \
-d '{"url":"https://vas-system.sk/peppol/webhook"}'
# 200 OK { "url":"https://vas-system.sk/peppol/webhook", "hasSecret": true }/companies/{id}/webhookowner / adminZruší webhook URL aj secret. Vráti 204.
/companies/{id}/webhook/secretowner / adminVygeneruje nový podpisový secret a vráti ho JEDENKRÁT; uložte si ho na overovanie X-Verteco-Signature.
// 200 OK
{ "secret": "vpt_8f2a…" }/companies/{id}/webhook/testowner / adminPošle synchrónne testovaciu notifikáciu (event webhook.test, podpísanú, SSRF-chránenú) na uloženú URL a vráti, ČO poslala a ČO prišlo späť. To isté spustíte tlačidlom Otestovať webhook v detaile firmy.
// 200 OK
{
"sent": { "url": "https://vas-system.sk/peppol/webhook", "event": "webhook.test",
"signed": true, "payload": "{…}" },
"received": { "status": 200, "body": "OK", "durationMs": 142, "error": null }
}
// 400 webhook_not_configured, ak nie je uložená webhook URLPayload webhooku
Pri prijatej (invoice.received) aj odoslanej (invoice.sent) faktúre pošleme POST s týmto telom; pole event rozlišuje typ.
Ďalšie dve udalosti oznamujú verdikt siete o faktúre, ktorú ste odoslali: invoice.delivered (príjemcov Access Point potvrdil doručenie doručenkou MLS) a invoice.rejected (odmietnutá, či už sieťou, alebo pri validácii ešte pred odoslaním); invoice.undeliverable hlási príjemcu bez záznamu v sieti Peppol (prevzaté, nahlásené FS, nedoručené). Nesú identifikáciu dokladu a firmy (documentId, invoiceNumber, receiverId, peppolMessageId, companyDic, peppolParticipantId) plus status, statusDetail s dôvodom odmietnutia a statusDateTime. Ak prvý pokus o doručenie zlyhal a prístupový bod ho sám opakuje (spravidla do hodiny), doklad ostáva submitted a statusDetail začína predponou network_retrying: ; po doručení príde delivered, po vzdaní rejected s predponou network_gave_up: . Vďaka nim nemusíte stav odoslaných faktúr zisťovať polovaním.
Udalosť company.activated príde, keď zákazník dokončí výber poskytovateľa na portáli Finančnej správy (telo: event, companyId, companyDic, peppolParticipantId, status, verifiedAt); company.deactivated zase pri odregistrovaní firmy zo siete (rovnaké telo bez verifiedAt). company.smp_registered_elsewhere príde, keď firma dokončila výber na portáli FS, ale jej záznam v národnom SMP drží iný poskytovateľ (telo ako pri company.activated plus action: "migration_code_required" a migrateUrl). Postup pre partnerov je v dokumentácii pre sprostredkovateľov. Kým zákazník nevloží migračný kód, sieť doručuje starému poskytovateľovi. Detaily v návode /saas:
{
"event": "invoice.received",
"eventId": "7f1c2d9e-4b1a-4e3d-9c1f-0a2b3c4d5e6f",
"occurredAt": "2026-09-03T15:04:05Z",
"companyId": "08dd…",
"documentId": "…",
"invoiceNumber": "2026001",
"senderId": "0088:7300010000001",
"supplierName": "Dodávateľ s.r.o.",
"receiverId": "0245:2121358349",
"issueDate": "2026-06-03",
"dueDate": "2026-06-17",
"deliveryDate": "2026-06-03",
"currency": "EUR",
"totalAmount": "120.00",
"peppolMessageId": "…",
"companyDic": "SK2121358349",
"peppolParticipantId": "0245:2121358349"
}Polia companyDic a peppolParticipantId identifikujú firmu, ktorej sa udalosť týka (dôležité pre partnerov, ktorí majú jednu webhook URL pre všetkých svojich klientov).
Verdikt siete o odoslanej faktúre:
{
"event": "invoice.delivered", // alebo "invoice.rejected"
"occurredAt": "2026-09-03T15:04:05Z",
"companyId": "08dd…",
"companyDic": "SK2121358349",
"peppolParticipantId": "0245:2121358349",
"documentId": "…",
"invoiceNumber": "2026001",
"receiverId": "0245:2120049096",
"peppolMessageId": "…",
"status": "delivered", // alebo "rejected"
"statusDetail": null, // pri rejected: dôvod odmietnutia
"statusDateTime": "2026-06-03T10:15:42Z"
}Aktivácia firmy po výbere na portáli Finančnej správy:
{
"event": "company.activated", // company.deactivated má rovnaké telo bez verifiedAt
"occurredAt": "2026-09-03T15:04:05Z",
"companyId": "08dd…",
"companyDic": "SK2121358349",
"peppolParticipantId": "0245:2121358349",
"status": "active",
"verifiedAt": "2026-06-03T10:02:11Z"
}Názov udalosti nesie aj hlavička X-Verteco-Event. Úplný zoznam udalostí: invoice.received, invoice.sent, invoice.delivered, invoice.rejected, invoice.undeliverable, invoice.reported, invoice.report_pending, invoice.report_rejected, company.activated, company.deactivated, company.smp_registered_elsewhere a testovací webhook.test. Neznámy typ udalosti odporúčame odložiť bokom a zalogovať; nový typ vždy vopred ohlásime. Každá udalosť nesie aj occurredAt (čas vzniku udalosti, ISO-8601 UTC), podľa ktorého udalosti radíte, a eventId (rovnaká hodnota aj v hlavičke X-Verteco-Delivery-Id): jedinečný pre každú udalosť a nemenný pri jej opakovaní, preto je to správny kľúč na dedupliáciu (peppolMessageId sa opakuje naprieč invoice.sent, invoice.delivered a invoice.reported). Udalosti invoice.* nesú aj časy sentAt, deliveredAt, receivedAt a fsReportedAt (ISO-8601 UTC, null kým skutočnosť nenastala). invoice.reported príde, keď bolo hlásenie Finančnej správe (TDD) k dokladu odovzdané doručovacej službe (§ 85o ods. 11), a to aj s odstupom dní pri výpadku zberného bodu C5. Formálne schémy všetkých udalostí sú v sekcii webhooks špecifikácie OpenAPI.
Overenie podpisu
Ak má firma secret, posielame hlavičku X-Verteco-Signature v tvare sha256=HMAC-SHA256(secret, raw telo) (lowercase hex). Vždy počítajte HMAC nad presnými bajtmi tela:
import crypto from 'node:crypto';
// rawBody = presné bajty tela requestu (nie znova serializovaný JSON)
function verify(rawBody, header, secret) {
const expected = 'sha256=' +
crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
return crypto.timingSafeEqual(Buffer.from(header), Buffer.from(expected));
}Hlavičky každého doručenia: X-Verteco-Event (názov udalosti), X-Verteco-Delivery-Id (= eventId v tele, rovnaké pri každom opakovaní), X-Verteco-Signature (HMAC vyššie) a paralelne hlavičky podľa štandardu Standard Webhooks: webhook-id (= eventId), webhook-timestamp (unix sekundy okamihu pokusu) a webhook-signature = v1,base64(HMAC-SHA256(secret, id + "." + timestamp + "." + telo)). Kľúčom sú bajty vášho secretu v UTF-8; knižnica standardwebhooks ho očakáva ako whsec_ + base64(secret). Odporúčaný postup: overte podpis, odmietnite doručenie s webhook-timestamp starším ako 5 minút (ochrana pred prehratím), spracúvajte idempotentne podľa eventId, odpovedzte 2xx do 15 sekúnd a ťažšie spracovanie odložte do vlastnej fronty. Neúspešné doručenie opakujeme 12× s odstupom 30 s až 8 h (spolu približne 16 hodín); potom skončí ako dead-letter s upozornením e-mailom a je viditeľné v Realtime logu. Produkčná webhook URL musí byť https://, v testovacom prostredí je dovolené aj http://.
POST /companies/{id}/webhook/secret; vráti ho jedenkrát (rotácia vygeneruje nový). Bez secretu hlavičku X-Verteco-Signature neposielame.Hromadné nastavenie: jeden token, viac firiem
Jeden API token (viazaný na váš účet/e-mail) spravuje všetky firmy, ktoré vlastní: kto firmu založí cez POST /companies, stáva sa jej ownerom a vie jej nastaviť webhook. Webhook je per firma (vlastná URL aj secret), takže rovnakým tokenom napojíte ľubovoľný počet firiem:
# 1) zoznam vašich firiem (stránkovane, viď Firmy)
curl 'https://peppol.verteco.digital/api/v1/companies?page=0&limit=100' -H 'Authorization: Bearer vpt_8f2a…'
# 2) pre KAŽDÚ firmu {id}: nastavte webhook (a/alebo e-mail)
curl -X PUT https://peppol.verteco.digital/api/v1/companies/{id}/notifications \
-H 'Authorization: Bearer vpt_8f2a…' -H 'Content-Type: application/json' \
-d '{"webhookUrl":"https://vas-system.sk/peppol/webhook","notificationEmail":"faktury@firma.sk"}'
# 3) vyzdvihnite podpisový secret (vráti sa LEN RAZ) a uložte si ho pre overovanie podpisu
curl -X POST https://peppol.verteco.digital/api/v1/companies/{id}/webhook/secret -H 'Authorization: Bearer vpt_8f2a…'
# → { "secret": "…" }- Token musí byť
owner/admindanej firmy; pri firme, kde je len member/viewer, vráti403 forbidden(žiadny cross-tenant zásah). - Každej firme môžete dať inú URL alebo všetkým rovnakú; v payloade ich rozlíšite podľa
companyId(areceiverId). - Pri stovkách firiem rešpektujte rate-limit na token (aktuálnu hodnotu vracia hlavička
RateLimit-Limit); dávkujte s backoffom na429(hlavičkaRetry-After). - Webhook reálne chodí, až keď je firma aktívna v Peppole (po výbere Verteco ako poskytovateľa u Finančnej správy) a teda skutočne prijíma doklady.
Dátové modely
Polia objektov vracaných API.
Company
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | UUID | – | identifikátor firmy |
ico | string | – | IČO (8 číslic) |
dic | string|null | – | IČ DPH |
legalName | string | – | obchodné meno |
registeredAddress | string|null | – | sídlo |
peppolParticipantId | string|null | – | účastník v Peppol (po registrácii) |
status | string | – | pending_verification | active |
role | string | – | owner | admin | member | viewer (vaša rola) |
createdAt | Instant | – | čas vytvorenia |
Document
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
id | UUID | – | identifikátor dokladu |
direction | string | – | sent | received |
peppolMessageId | string|null | – | ID Peppol správy |
docTypeId | string|null | – | typ dokumentu (Peppol) |
senderId | string|null | – | odosielateľ (scheme:id) |
receiverId | string|null | – | príjemca (scheme:id) |
invoiceNumber | string|null | – | číslo faktúry |
issueDate | date|null | – | dátum vystavenia |
currency | string|null | – | mena (napr. EUR) |
totalAmount | number|null | – | suma |
status | string | – | stav spracovania |
createdAt | Instant | – | čas záznamu |
User · Token · Webhook
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
User | objekt | – | { id: UUID, email: string } |
Token | objekt | – | { id, name, prefix, lastUsedAt|null, createdAt } |
Webhook | objekt | – | { url: string|null, hasSecret: boolean } |
Polia sa načítavajú priamo z publikovaného openapi.json, takže tabuľky sú vždy totožné s tým, čo API vracia. Popisy sú v angličtine.
Načítavam dátové modely z openapi.json…
Slovník pojmov
- DIČ
- Daňové identifikačné číslo (10 číslic). Slovenský Peppol identifikátor je 0245: + číslice DIČ, bez SK.
- IČ DPH
- Identifikačné číslo pre DPH (SK + DIČ). Majú ho len platitelia DPH; neplatiteľ vystavuje s kategóriou O.
- IČO
- Identifikačné číslo organizácie (8 číslic). V API pole ico, v UBL BT-30.
- Verifikačný údaj (VÚ)
- Podpis Finančnej správy, ktorý vznikne výberom poskytovateľa na portáli FS; odomyká odosielanie za firmu.
- VPDS
- Výber poskytovateľa doručovacej služby, aplikácia Finančnej správy, kde si subjekt volí poštára (nás).
- TDD
- Tax Data Document, hlásenie údajov o faktúre Finančnej správe; zostavujeme a posielame ho za vás.
- C5 / C6
- Piaty a šiesty roh Peppol modelu: prístupový bod Finančnej správy, ktorý TDD prijíma (0242:001180).
- MLS
- Message Level Status, doručenka od prístupového bodu príjemcu (AP = prijaté, RE = odmietnuté, AB = potvrdené).
- SBDH
- Standard Business Document Header, obálka, v ktorej doklad cestuje sieťou; jej InstanceIdentifier je peppolMessageId.
- SML / SMP
- Adresár siete: SML nájde SMP príjemcu, SMP povie, aký prístupový bod a aké typy dokladov príjemca prijíma.
Slovenské konvencie z praxe implementátorov
Nad rámec Peppol BIS Billing 3.0 sa slovenskí výrobcovia ERP a fakturačných systémov priebežne zhodujú na spoločnej interpretácii voliteľných polí (diskusia prebieha v Slack kanáli Finančnej správy). Nižšie sú konvencie, ktoré náš portál už dnes rešpektuje – všetko sú platné BIS konštrukcie, cez naše API prechádzajú bez zmeny a prijaté doklady ich zobrazujú aj v ľudsky čitateľnom náhľade a PDF.
- Odpočet zdanenej zálohy na riadku: záporný riadok s
cac:DocumentReference, kdecbc:IDnesie číslo daňového dokladu k prijatej platbe acbc:DocumentTypeCodeje130(BIS: invoice line object identifier, max. 1 na riadok). Prijatá faktúra s takýmto riadkom sa v našom náhľade zobrazí s poznámkou „odpočet zálohy – daňový doklad č. …". - Daňový doklad k prijatej platbe: podľa FAQ Finančnej správy sa používa
InvoiceTypeCode 388(Tax invoice). Naším API aj validáciou prechádza; odpočet neuhradenej (nezdanenej) zálohy sa vyjadruje cezcbc:PrepaidAmount. - Storno faktúry: dobropis
381(CreditNote) scac:BillingReferencena pôvodnú faktúru – nie záporná faktúra 380. Pozor: kód 384 sieť pre slovenské strany odmieta (pravidlo PEPPOL-EN16931-P0112 ho povoľuje len medzi nemeckými subjektmi); na opravu nahor slúži ťarchopis 383. - BT-83 PaymentID: v SK praxi sa presadzuje tvar referencie platiteľa
/VS…/SS…/KS…; samotný variabilný symbol je tiež bežný. Naše spracovanie hodnotu prenáša bez zmeny a zobrazuje ju pri platobných údajoch. - Doplnkové údaje položiek (šarže, sériové čísla, expirácie) cez
cac:AdditionalItemPropertys ustálenými názvami akoBatchNumber,SerialNumber,ExpirationDate.
Prílohy dokladov (BT-125)
K e-faktúre je možné pripojiť prílohy (PDF, obrázky) ako base64 v elemente cac:AdditionalDocumentReference (BT-125). Pri prijatých dokladoch spracujeme prílohy do 25 MB na prílohu; pri odosielaní musí celé XML vrátane base64 príloh zostať do 10 MB cez SAPI-SK a do 2 MB cez záložku Odoslať súborom v portáli. Peppol jednotný celosieťový limit neurčuje, jednotliví poskytovatelia si ho stanovujú sami (FS FAQ 9/DPH/2025/IM, príklad č. 67), takže pri veľmi veľkých prílohách si overte aj limit poskytovateľa druhej strany.
Verejné nástroje (validácia, overenie príjemcu)
Dva pomocné endpointy bez autentifikácie – rovnaké validačné jadro a rovnaký SML lookup, aké používa náš Access Point. Hodia sa do CI aj do predodoslacích kontrol; platí na ne prísnejší verejný rate limit.
/public/peppol-validateverejnéValidácia e-faktúry proti schéme UBL 2.1, EN 16931 a Peppol BIS Billing 3.0 – to isté, čo UI validátor na /validator. Telo požiadavky = priamo UBL 2.1 XML (Invoice / CreditNote, prípadne celý Peppol SBD), Content-Type application/xml, limit 3 MB.
curl -X POST https://peppol.verteco.digital/api/v1/public/peppol-validate \
-H "Content-Type: application/xml" \
--data-binary @faktura.xml// 200 OK
{
"valid": false,
"errors": [
"BR-CO-09: [BR-CO-09]-The Seller VAT identifier (BT-31) … shall have a prefix in accordance with ISO code…"
],
"warnings": []
}
// 400 = prázdne telo (empty_document) alebo dokument nad 3 MB (document_too_large)/public/peppol-check?id=0245:2121358349verejnéOverenie príjemcu v produkčnej sieti Peppol (SML lookup): je registrovaný a aké typy dokladov vie prijať? Parameter id prijme Peppol ID (0245:…), IČ DPH (SK…) aj samotné DIČ. Autentifikovaná obdoba pre ERP pipeline: GET /sapi/discovery.
// 200 OK
{
"registered": true,
"participantId": "0245:2121358349",
"smp": "sml.peppol-smp.sk",
"capabilities": ["Faktúra (BIS Billing)", "Dobropis", "Self-billing", "MLS doručenky"],
"lastCheckedAt": "2026-08-31T…Z"
}MCP server (AI asistenti)
Portál má vlastný server pre Model Context Protocol, otvorený štandard, cez ktorý sa AI asistenti (Claude Code, Claude Desktop, Cursor, VS Code Copilot a ďalší) pripájajú k externým systémom. Asistent sa prihlási bežným API kľúčom účtu a dostane šesť nástrojov; nikdy nevidí viac než ten účet a každé volanie je v API logu kľúča.
Adresa: https://peppol.verteco.digital/api/mcp. Transport: Streamable HTTP, JSON-RPC 2.0, bezstavovo (POST /api/mcp, žiadny SSE stream, GET vráti 405). Prihlásenie hlavičkou Authorization: Bearer <API kľúč>. Podporované metódy: initialize, ping, tools/list, tools/call, resources/list, prompts/list.
Nástroje
list_companies: firmy účtu s Peppol ID, stavom a rolou (začiatok každej konverzácie)list_documents: odoslané/prijaté faktúry firmy s stavom doručenia a hlásenia FS, stránkovanéget_document: detail faktúry vrátane doručenky MLS a hlásenia FS, voliteľne UBL XML (do 1 MB)check_participant: živé overenie príjemcu v sieti Peppol (SML)validate_document: validácia UBL proti EN 16931 + Peppol BIS 3.0send_document: odoslanie faktúry za firmu, vyžaduje confirm = true a platí brána Verifikačného údaja
Pripojenie v Claude Code
claude mcp add --transport http verteco-peppol https://peppol.verteco.digital/api/mcp \
--header "Authorization: Bearer vpt_..."Claude Desktop (cez most mcp-remote, potrebuje Node.js)
{
"mcpServers": {
"verteco-peppol": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://peppol.verteco.digital/api/mcp", "--header", "Authorization: Bearer vpt_..."]
}
}
}Odoslanie faktúry je právne záväzné: nástroj bez confirm = true odmietne volanie a asistent má v inštrukciách servera pokyn vyžiadať si výslovný súhlas používateľa s konkrétnou faktúrou a príjemcom. Hotové konfigurácie pre Cursor a VS Code a tlačidlo na vytvorenie kľúča nájdete v portáli: API kľúče → záložka MCP server. API kľúče → MCP server
Odosielanie e-mailom (adresa firmy)
Firma si v portáli zapne vlastnú adresu <24 náhodných znakov>@peppol.send.verteco.app. E-mail s prílohou UBL XML poslaný na túto adresu z povolenej schránky odošleme cez sieť Peppol rovnako, ako keby ste súbor nahrali na záložke Odoslať súborom; odosielateľ dostane jednu odpoveď s výsledkom za každú prílohu a doklad je v portáli aj v API so stavom doručenia, doručenkou MLS a hlásením FS. Nastavenie: Prepojenia a integrácie → Odosielanie e-mailom (vlastník alebo správca firmy, len po prihlásení). /dashboard/integrations/email
Pravidlá spracovania
- Prijmeme len správu od adresy na zozname povolených odosielateľov firmy (najviac 20); ostatné zahodíme bez odpovede.
- Predvolene musí doména odosielateľa prejsť overením SPF alebo DKIM u doručujúceho servera (zladenie ako pri DMARC, relaxed). Doručujúci server navyše odmieta správy, ktoré neprešli ani SPF, ani DKIM, a správy proti DMARC politike odosielateľa. Kontrolu možno vypnúť v nastavení, neodporúčame.
- Príloha: UBL 2.1 Invoice alebo CreditNote (Peppol BIS Billing 3.0), prípona .xml, prípadne v obálke SBDH; najviac 10 príloh v správe, 15 MB na prílohu, 200 správ na adresu za deň. PDF a text správy sa nespracúvajú.
- IFS Finvoice 2.0: prílohu .xml so SOAP obálkou IFS (
IFSFinvoice) alebo samotný Finvoice prevedieme na UBL a ďalej spracujeme rovnako. Pravidlá prevodu:INV02alebo záporná suma = dobropis (381) s kladnými sumami a odkazom na pôvodnú faktúru (OriginalInvoiceNumber, u IFSOrderIdentifier); predajca a odberateľ podľa slovenského IČ DPH (SellerOrganisationTaxCode,BuyerOrganisationTaxCode→0245:DIČ), odberateľ mimo SR sa neprevádza; rozpis DPH zVatSpecificationDetails, riadky s 0 % ako kategória E s dôvodom zVatFreeText, inak „Oslobodené od DPH“; zaokrúhľovacie riadky IFS (základ 0,00, DPH 0,01) sa vynechajú, cena riadku, ktorá nesedí so sumou riadku, sa prepočíta; jednotky podľa UN/ECE (kg → KGM, pcs → H87, h → HUR, neznáme → C62 s pôvodným textom v poznámke riadku); vložený obraz faktúry (InvoiceAttachments, PDF) ide ako príloha dokladu do 5 MB; len EUR. Výsledok prevodu je v odpovedi aj v denníku firmy. - Adresa pre výsledky: ak faktúry posiela systémová schránka, v nastavení zvolíte inú adresu, na ktorú chodí odpoveď s výsledkom (pole
replyTovPUT /companies/{id}/email-send, prázdne = odpovedať odosielateľovi). - Predajca v XML (EndpointID dodávateľa, BT-34) musí byť táto firma, inak správu odmietneme (preposlaná faktúra od vášho dodávateľa sa nikdy neodošle ako vaša). Odberateľ musí mať EndpointID so schémou (BT-49).
- Rovnaká správa (Message-ID) sa spracuje raz. Doklad má v API a webhookoch
origin = email, aktér = adresa odosielateľa.
Stav (ping)
Verejný health-check endpoint, vhodný na monitoring.
/pingverejnéStav backendu.
// 200 OK
{ "service": "peppol-portal-backend", "status": "ok", "timestamp": "2026-06-17T…Z" }Živý prehľad všetkých komponentov nájdete na stránke stavu systémov.
Čo je hotové a čo pripravujeme
Už v produkcii (často mylne považované za chýbajúce)
- POST /companies/{id}/documents/send je stabilné rozhranie portálu; pre ERP integrácie ostáva odporúčané SAPI-SK s Idempotency-Key.
- Registrácia do SMP prebieha automaticky po výbere na portáli FS; prechod od iného poštára cez POST /companies/{id}/smp-migrate s migračným kódom.
- Doručenky MLS, dôkazy doručenia a hlásenia FS (fsReport) v každom riadku /sapi/document/sent; replay webhookov za časové okno.
- Kľúč obmedzený na vybrané firmy; MCP server pre AI asistentov; vzory UBL na /vzory; verejný validátor.
Pripravujeme (poradie podľa dopytu integrátorov)
- Asynchrónny batch: POST /sapi/document/batch odpovie 202 s odkazom na job a stav po položkách.
- Zmenový kanál GET /sapi/document/changes?since&cursor s kurzorom namiesto stránkovania offsetom.
- Expirácia a rotácia API kľúčov v portáli, kľúč len na čítanie.
- Viac webhook endpointov na firmu s filtrom udalostí.