Ako začať (Onboarding)

Štyri kroky od registrácie po prvú faktúru.

1

Registrácia na Finančnej správe SR

  • Prihláste sa na portál Finančnej správy SR pomocou občianskeho preukazu (eID) alebo prihlasovacích údajov
  • V sekcii e-Faktúry zvoľte ePošťák (Kaja Solutions s.r.o.) ako vášho digitálneho poštára. Ako si vybrať digitálneho poštára →
Momentálne nedostupné — Portál Finančnej správy SR pre výber digitálneho poštára bude dostupný do mája 2026. Pre testovanie tento krok preskočte a použite demo testovacie účty uvedené v kroku 2.
2

Aktivácia Peppol ID

  • Po registrácii vám zašleme pozvánku na e-mail
  • Po akceptovaní pozvánky vas zapíšeme do Peppol siete (SMP) a pridelíme vam unikátny Peppol ID
Pre testovanie: Tieto kroky je možné preskočiť. Vieme vás priamo zapísať do SMP a prideliť Peppol ID. Vygenerujeme aj API kľúče. Napíšte na info@epostak.sk

Demo testovacie účty

Tieto účty sú registrované v Peppol SMK (testovacom prostredí) a môžete ich ihneď použiť na testovanie Enterprise API. Posielanie dokumentov medzi nimi funguje cez reálnu Peppol sieť.

Účet Peppol ID API Key
Test Odosielateľ 0245:0000000002 sk_live_test_e8a28d2e5ec006b2e27a3a1a92739fd93f1d71e70abe6733
Test Prijímateľ 0245:0000000001 sk_live_test_5e188b91708ca938e1ee50678b345a3c152b4d4a83d31eac
Demo Integrátor (ERP)
Spravuje oba účty vyššie
X-Firm-Id:
b1022d80-5016-4dad-a8d2-53685cab1701
f2cea3cf-f29e-4ea2-9e76-b06a312ec9ab
sk_int_test_face36350e1005c930acff02a00f73140f2a1eabfb87c282
Príklad: Pošlite faktúru z Test Odosielateľa na Test Prijímateľa a overte príjem v inbox endpointe druhého účtu. Pre integrátor kľúč použite X-Firm-Id: b1022d80-5016-4dad-a8d2-53685cab1701 (Sender) alebo f2cea3cf-f29e-4ea2-9e76-b06a312ec9ab (Receiver).
3

Získanie API kľúčov

  • Ak potrebujete vlastné API kľúče (mimo demo účtov), napíšte nám na info@epostak.sk a vygenerujeme vám ich
  • Kľúč použite v hlavičke: Authorization: Bearer sk_live_xxxxx
4

Odoslanie prvého dokumentu

Príklad odoslania faktúry v JSON mode:

curl -X POST https://epostak.sk/api/enterprise/documents/send \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"receiverPeppolId":"0245:0000000001","items":[{"description":"Konzultacie","quantity":1,"unitPrice":500,"vatRate":23}]}'
import requests

resp = requests.post("https://epostak.sk/api/enterprise/documents/send",
  headers={"Authorization": "Bearer sk_live_xxxxx"},
  json={"receiverPeppolId": "0245:0000000001", "items": [{"description":"Konzultacie","quantity":1,"unitPrice":500,"vatRate":23}]}
)
print(resp.json())
const resp = await fetch("https://epostak.sk/api/enterprise/documents/send", {
  method: "POST",
  headers: {"Authorization":"Bearer sk_live_xxxxx","Content-Type":"application/json"},
  body: JSON.stringify({receiverPeppolId:"0245:0000000001",items:[{description:"Konzultacie",quantity:1,unitPrice:500,vatRate:23}]})
});
console.log(await resp.json());

ERP Integrátori

Pre systemy, ktore spravuju viacerých klientov.

1Klient sa zaregistruje na FS SR a zvolí ePošťák
2Pridelíme Peppol ID + SMP registrácia
3Kontaktujte nás — spárujeme vás s klientom a vygenerujeme integrátorský kľúč (sk_int_*)
4Používajte sk_int_* kľúč + hlavičku X-Firm-Id s UUID firmy klienta
5Odosielajte a prijímajte dokumenty v mene klienta

Príklad požiadavky s integrátorským kľúčom:

curl -X POST https://epostak.sk/api/enterprise/documents/send \
  -H "Authorization: Bearer sk_int_xxxxx" \
  -H "X-Firm-Id: firm_abc123" \
  -H "Content-Type: application/json" \
  -d '{"receiverPeppolId":"0245:0000000001","items":[...]}'

Autentifikácia

API kľúče — jednoduché a bezpečné.

A

sk_live_*

Priamy prístup k vášmu podniku.

Authorization: Bearer sk_live_xxxxx
B

sk_int_* + X-Firm-Id

Integrátorský kľúč pre správu viacerých klientov.

Authorization: Bearer sk_int_xxxxx
X-Firm-Id: firm_abc123

$Rate Limits

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

$Metóda Limit $Okno
GET / HEAD 200 $požiadaviek 60 $sekúnd
POST / PUT / PATCH / DELETE 60 $požiadaviek 60 $sekúnd

$Hlavičky odpovede

  • X-RateLimit-Limit — $maximálny počet požiadaviek
  • X-RateLimit-Remaining — $zostávajúce požiadavky
  • X-RateLimit-Reset — $Unix timestamp resetu
  • Retry-After — $sekundy do ďalšej požiadavky (pri HTTP 429)
💡 $Odporúčame implementovať exponenciálny backoff pri HTTP 429 odpovediach.

Endpointy

Všetky dostupné API endpointy.

Transport vrstva — Enterprise API funguje ako Peppol transportna vrstva. Obsah dokumentov (UBL/XML) prechádza sietou na dorucenie, ale nie je trvalo ulozeny. Obsah dokumentu je dostupny na stiahnutie 30 dni, potom je vymazany. Len transportne metadata (Peppol message ID, casove peciatky, stav dorucenia, AS4 potvrdenia) su trvalo uchované. Integratori su zodpovedni za vlastny archiv.
Dokumenty
Odosielanie a prijímanie Peppol dokumentov.
POST /api/enterprise/documents/send Odoslať dokument

Odosle dokument cez Peppol siet. Podporuje JSON mode a raw UBL XML mode.

Telo požiadavky — JSON mode

PoleTypePovinnéPopis
receiverPeppolIdstringyesPeppol ID prijemcu
itemsarrayyesPoložky faktúry
items[].descriptionstringyesPopis polozky
items[].quantitynumberyesMnozstvo
items[].unitPricenumberyesCena za jednotku bez DPH
items[].vatRatenumberyesSadzba DPH v %
items[].discountnumbernoZlava v %
invoiceNumberstringnoČíslo faktúry — auto ak prázdne
issueDatestringnoISO 8601 date
dueDatestringnoISO 8601 date
currencystringnoEUR (default)
notestringnoPoznamka
ibanstringnoIBAN
receiverNamestringnoMeno prijemcu
receiverIcostringnoICO

Telo požiadavky — UBL XML mode

PoleTypePovinnéPopis
xmlstringyesRaw UBL XML string
receiverPeppolIdstringyesPeppol ID prijemcu

Príklady

curl -X POST https://epostak.sk/api/enterprise/documents/send \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "receiverPeppolId": "0245:0000000001",
    "invoiceNumber": "FAK-2025-001",
    "issueDate": "2025-04-01",
    "dueDate": "2025-04-15",
    "items": [{"description": "Vyvoj softveru","quantity": 8,"unitPrice": 125,"vatRate": 23}]
  }'
import requests

resp = requests.post("https://epostak.sk/api/enterprise/documents/send",
  headers={"Authorization": "Bearer sk_live_xxxxx"},
  json={
    "receiverPeppolId": "0245:0000000001",
    "items": [{"description": "Vyvoj softveru", "quantity": 8, "unitPrice": 125, "vatRate": 23}]
  }
)
# {"documentId": "...", "messageId": "...", "status": "SENT"}
const resp = await fetch("https://epostak.sk/api/enterprise/documents/send", {
  method: "POST",
  headers: {"Authorization":"Bearer sk_live_xxxxx","Content-Type":"application/json"},
  body: JSON.stringify({
    receiverPeppolId: "0245:0000000001",
    items: [{description:"Vyvoj softveru",quantity:8,unitPrice:125,vatRate:23}]
  })
});
// {documentId: "...", messageId: "...", status: "SENT"}

Odpoveď 201

{ "documentId": "clx9abc123", "messageId": "msg_peppol_xyz", "status": "SENT" }

HTTP kody

201 Sent400 Validation Error401 Unauthorized422 Peppol Validation Failed
GET /api/enterprise/documents/inbox Zoznam prijatych

Vrati zoznam prijatych dokumentov so strankovaniem.

Query parametre

ParameterTypeDefaultPopis
limitinteger20Max 100
offsetinteger0Offset pre strankovanie
statusstring-RECEIVED | ACKNOWLEDGED

Príklad

curl "https://epostak.sk/api/enterprise/documents/inbox?limit=10&status=RECEIVED" \
  -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{ "documents": [{"id":"clx9abc123","status":"received","totalWithVat":1230.00}], "total":42,"limit":10,"offset":0 }
GET /api/enterprise/documents/inbox/{id} Detail dokumentu

Vrati detail prijateho dokumentu vratane UBL XML payloadu.

Príklad

curl https://epostak.sk/api/enterprise/documents/inbox/clx9abc123 \
  -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{ "document": { "id":"clx9abc123", "senderPeppolId":"9914:SK9876543210", "status":"received", "receivedAt":"2025-04-01T10:00:00.000Z", "payload":"<?xml...>" } }

HTTP kody

200 OK401 Unauthorized404 Not Found
POST /api/enterprise/documents/inbox/{id}/acknowledge Potvrdiť prijatie

Oznaci dokument ako spracovany. Telo požiadavky nie je potrebne.

Príklad

curl -X POST https://epostak.sk/api/enterprise/documents/inbox/clx9abc123/acknowledge \
  -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{ "documentId":"clx9abc123", "status":"ACKNOWLEDGED", "acknowledgedAt":"2025-04-01T11:00:00.000Z" }

HTTP kody

200 OK400 Already acknowledged401 Unauthorized404 Not Found
GET /api/enterprise/documents/{id}/status Stav dokumentu

Vráti úplný životný stav dokumentu vrátane histórie stavov a výsledku validácie.

Príklad

curl https://epostak.sk/api/enterprise/documents/clx9abc123/status \
  -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{
  "id": "clx9abc123",
  "status": "DELIVERED",
  "documentType": "invoice",
  "senderPeppolId": "0245:SK9876543210",
  "receiverPeppolId": "0245:0000000001",
  "statusHistory": [{"status":"SENT","timestamp":"2025-04-01T10:00:00.000Z"},{"status":"DELIVERED","timestamp":"2025-04-01T10:01:00.000Z"}],
  "validationResult": {"valid":true,"errorCount":0},
  "deliveredAt": "2025-04-01T10:01:00.000Z",
  "invoiceResponseStatus": null,
  "as4MessageId": "msg_peppol_xyz",
  "createdAt": "2025-04-01T10:00:00.000Z"
}

HTTP kody

200 OK401 Unauthorized403 Forbidden404 Not Found
GET /api/enterprise/documents/{id}/evidence AS4 potvrdenie a MLR

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

Príklad

curl https://epostak.sk/api/enterprise/documents/clx9abc123/evidence \
  -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{
  "documentId": "clx9abc123",
  "as4Receipt": "<?xml ...AS4 receipt...>",
  "mlrDocument": "<?xml ...MLR...>",
  "invoiceResponse": {"status":"AP","document":"<?xml...>"},
  "deliveredAt": "2025-04-01T10:01:00.000Z",
  "sentAt": "2025-04-01T10:00:00.000Z"
}

HTTP kody

200 OK401 Unauthorized403 Forbidden404 Not Found
GET /api/enterprise/documents/{id}/pdf Stiahnuť PDF

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

Príklady

curl https://epostak.sk/api/enterprise/documents/clx9abc123/pdf \
  -H "Authorization: Bearer sk_live_xxxxx" \
  --output invoice.pdf
resp = requests.get("https://epostak.sk/api/enterprise/documents/clx9abc123/pdf",
  headers={"Authorization": "Bearer sk_live_xxxxx"}, stream=True)
with open("invoice.pdf", "wb") as f:
    f.write(resp.content)
const resp = await fetch("https://epostak.sk/api/enterprise/documents/clx9abc123/pdf", {
  headers: {"Authorization": "Bearer sk_live_xxxxx"}
});
const buf = await resp.arrayBuffer();
fs.writeFileSync("invoice.pdf", Buffer.from(buf));

HTTP kody

200 application/pdf401 Unauthorized403 Forbidden404 Not Found
GET /api/enterprise/documents/{id}/ubl Stiahnuť UBL XML

Stiahne UBL XML súbor dokumentu. Vráti XML string s Content-Type: application/xml.

Príklady

curl https://epostak.sk/api/enterprise/documents/clx9abc123/ubl \
  -H "Authorization: Bearer sk_live_xxxxx" \
  --output invoice.xml
resp = requests.get("https://epostak.sk/api/enterprise/documents/clx9abc123/ubl",
  headers={"Authorization": "Bearer sk_live_xxxxx"})
with open("invoice.xml", "w") as f:
    f.write(resp.text)
const resp = await fetch("https://epostak.sk/api/enterprise/documents/clx9abc123/ubl", {
  headers: {"Authorization": "Bearer sk_live_xxxxx"}
});
const xml = await resp.text();

HTTP kody

200 application/xml401 Unauthorized403 Forbidden404 Not Found
POST /api/enterprise/documents/{id}/respond Odoslať odpoved na fakturu

Odošle odpoveď na prijatú faktúru (invoice response). Funguje iba pre inbound dokumenty.

Telo požiadavky

PoleTypePovinnéPopis
statusstringyesAP (akceptovana), RE (odmietnutá), UQ (na overenie)
notestringnoVolitelna poznamka

Príklady

curl -X POST https://epostak.sk/api/enterprise/documents/clx9abc123/respond \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"status":"AP","note":"Faktura akceptovana"}'
resp = requests.post("https://epostak.sk/api/enterprise/documents/clx9abc123/respond",
  headers={"Authorization": "Bearer sk_live_xxxxx"},
  json={"status": "AP", "note": "Faktura akceptovana"})
const resp = await fetch("https://epostak.sk/api/enterprise/documents/clx9abc123/respond", {
  method: "POST",
  headers: {"Authorization":"Bearer sk_live_xxxxx","Content-Type":"application/json"},
  body: JSON.stringify({status:"AP",note:"Faktura akceptovana"})
});

Odpoveď 202

{"documentId":"clx9abc123","responseStatus":"AP","respondedAt":"2025-04-01T11:00:00.000Z"}

HTTP kody

202 Accepted400 Validation Error401 Unauthorized403 Forbidden404 Not Found
Konto
Informácie o firme a využití API.
GET /api/enterprise/account Info o konte

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

Príklad

curl https://epostak.sk/api/enterprise/account -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{
  "firm": {"name":"Moja Firma s.r.o.","ico":"12345678","peppolId":"0245:0000000001","peppolStatus":"active"},
  "plan": {"name":"api-enterprise","status":"active"},
  "usage": {"outbound":47,"inbound":12}
}
Extrakcia OCR
AI extrakcia dat z faktúr (PDF/obrázky) do UBL XML. Vyžaduje Enterprise plan.
POST /api/enterprise/extract Extrahovať jeden súbor

Extrahuje dáta faktúry z PDF alebo obrázku pomocou AI a vráti UBL XML. Max 20 MB.

Multipart form polia

PoleTypePovinnéPopis
fileFileyesPDF, JPEG, PNG, WebP (max 20 MB)

Príklady

curl -X POST https://epostak.sk/api/enterprise/extract \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -F "file=@invoice.pdf"
import requests
with open("invoice.pdf", "rb") as f:
    resp = requests.post("https://epostak.sk/api/enterprise/extract",
        headers={"Authorization":"Bearer sk_live_xxxxx"},
        files={"file":("invoice.pdf",f,"application/pdf")})
const form = new FormData();
form.append("file", fs.createReadStream("invoice.pdf"));
const resp = await fetch("https://epostak.sk/api/enterprise/extract", {
  method:"POST", headers:{"Authorization":"Bearer sk_live_xxxxx",...form.getHeaders()}, body:form
});

Odpoveď 200

{"extraction":{"invoiceNumber":"FAK-001","totalWithVat":1230.00},"ubl_xml":"<?xml...>","confidence":"high","file_name":"invoice.pdf"}

HTTP kody

200 OK400 Bad Request401 Unauthorized403 Enterprise required422 Extraction failed
POST /api/enterprise/extract/batch Batch extrakcia max 50

Spracuje az 50 suborov naraz. Chyba jedneho neblokuje ostatne.

Multipart form polia

PoleTypePopis
filesFile[]Pole suborov max 50 x 20 MB

Príklad

curl -X POST https://epostak.sk/api/enterprise/extract/batch \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -F "files=@invoice1.pdf" -F "files=@invoice2.pdf"

Odpoveď 200

{"batch_id":"550e8400-...","total":2,"successful":2,"failed":0,"results":[{"file_name":"invoice1.pdf","confidence":"high","ubl_xml":"..."}]}
Validácia a overenie
Validácia dokumentov pred odoslanim a konverzia formatov.
POST /api/enterprise/documents/validate Validovať dokument

Validuje dokument oproti Peppol BIS 3.0 pravidlám. Podporuje JSON aj UBL XML vstup.

Telo požiadavky

PoleTypePovinnéPopis
formatstringyes"json" | "ubl"
documentobject|stringyesJSON objekt alebo UBL XML string

Príklady

curl -X POST https://epostak.sk/api/enterprise/documents/validate \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"format":"ubl","document":"<?xml version=\"1.0\"?><Invoice>...</Invoice>"}'
resp = requests.post("https://epostak.sk/api/enterprise/documents/validate",
  headers={"Authorization": "Bearer sk_live_xxxxx"},
  json={"format": "ubl", "document": xml_string})
const resp = await fetch("https://epostak.sk/api/enterprise/documents/validate", {
  method: "POST",
  headers: {"Authorization":"Bearer sk_live_xxxxx","Content-Type":"application/json"},
  body: JSON.stringify({format:"ubl",document:xmlString})
});

Odpoveď 200 (valid) / 422 (invalid)

{
  "valid": true,
  "errorCount": 0,
  "warningCount": 1,
  "errors": [],
  "warnings": [{"id":"PEPPOL-EN16931-R001","message":"..."}]
}

HTTP kody

200 Valid400 Bad Request401 Unauthorized422 Invalid document
POST /api/enterprise/documents/preflight Kontrola pred odoslaním

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

Telo požiadavky

PoleTypePovinnéPopis
receiverPeppolIdstringyesPeppol ID príjemcu na overenie
documentTypestringnoinvoice | credit-note | order | despatch-advice
invoiceobjectnoJSON faktúra na validáciu
xmlstringnoUBL XML na validáciu

Príklady

curl -X POST https://epostak.sk/api/enterprise/documents/preflight \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"receiverPeppolId":"0245:0000000001","documentType":"invoice"}'
resp = requests.post("https://epostak.sk/api/enterprise/documents/preflight",
  headers={"Authorization": "Bearer sk_live_xxxxx"},
  json={"receiverPeppolId": "0245:0000000001"})
const resp = await fetch("https://epostak.sk/api/enterprise/documents/preflight", {
  method: "POST",
  headers: {"Authorization":"Bearer sk_live_xxxxx","Content-Type":"application/json"},
  body: JSON.stringify({receiverPeppolId:"0245:0000000001"})
});

Odpoveď 200

{
  "canSend": true,
  "recipientFound": true,
  "recipientAcceptsDocumentType": true,
  "validationPassed": null,
  "validationErrors": [],
  "warnings": ["Dokument bude smerovaný cez prístupový bod príjemcu"]
}

HTTP kody

200 OK400 Validation Error401 Unauthorized
POST /api/enterprise/documents/convert Konverzia formátov

Konvertuje dokument medzi JSON a UBL XML formátmi. Podporovaná konverzia: json→ubl a ubl→json.

Telo požiadavky

PoleTypePovinnéPopis
input_formatstringyes"json" | "ubl"
output_formatstringyes"ubl" | "json"
documentobject|stringyesDokument na konverziu

Príklady

curl -X POST https://epostak.sk/api/enterprise/documents/convert \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"input_format":"ubl","output_format":"json","document":"<?xml...>"}'
resp = requests.post("https://epostak.sk/api/enterprise/documents/convert",
  headers={"Authorization": "Bearer sk_live_xxxxx"},
  json={"input_format":"ubl","output_format":"json","document":xml_string})
const resp = await fetch("https://epostak.sk/api/enterprise/documents/convert", {
  method: "POST",
  headers: {"Authorization":"Bearer sk_live_xxxxx","Content-Type":"application/json"},
  body: JSON.stringify({input_format:"ubl",output_format:"json",document:xmlString})
});

Odpoveď 200

{"output_format":"json","document":{"invoice_number":"FAK-001","issue_date":"2025-04-01",...},"warnings":[]}

HTTP kody

200 OK400 Bad Request401 Unauthorized422 Conversion failed
Webhooks

🔐 Overenie podpisu webhook

Každý webhook obsahuje HMAC-SHA256 podpis. Overte ho takto:

  1. Získajte X-Webhook-Timestamp a X-Webhook-Signature
  2. Spojte: timestamp + "." + raw_body
  3. HMAC-SHA256 so svojím webhook secretom
  4. Porovnajte s hodnotou z hlavičky
  5. Odmietnite ak je timestamp starší ako 5 minút
const crypto = require('crypto');

function verifyWebhook(secret, timestamp, body, signature) {
  // Replay protection
  if (Date.now() / 1000 - Number(timestamp) > 300) return false;
  const expected = crypto
    .createHmac('sha256', secret)
    .update(timestamp + '.' + body)
    .digest('hex');
  return signature === 'sha256=' + expected;
}
Notifikacie v realnom case. Vyžaduje Enterprise plan. HMAC-SHA256 podpis. Udalosti: document.created, document.sent, document.received, document.validated
GET /api/enterprise/webhooks Zoznam webhookov

Vrati vsetky webhooky pre vashu firmu.

Príklad

curl https://epostak.sk/api/enterprise/webhooks -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{"data":[{"id":"wh_abc123","url":"https://your-app.com/webhook","events":["document.received"],"isActive":true}]}
POST /api/enterprise/webhooks Vytvoriť webhook

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

Telo požiadavky

PoleTypePovinnéPopis
urlstringyesHTTPS URL
eventsstring[]noPredvolene vsetky udalosti

Príklad

curl -X POST https://epostak.sk/api/enterprise/webhooks \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://your-app.com/webhook","events":["document.received"]}'

Odpoveď 201

{"id":"wh_abc123","url":"https://your-app.com/webhook","secret":"whsec_a1b2c3...","isActive":true}

HTTP kody

201 Created400 Validation Error401 Unauthorized403 Enterprise required
GET /api/enterprise/webhooks/{id} Detail + doručenia

Vrati detail webhooku a poslednych 20 pokusov o dorucenie.

Príklad

curl https://epostak.sk/api/enterprise/webhooks/wh_abc123 -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{"id":"wh_abc123","isActive":true,"deliveries":[{"event":"document.received","status":"success","attempts":1,"responseStatus":200}]}
PATCH /api/enterprise/webhooks/{id} Upraviť webhook

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

Telo požiadavky

PoleTypePopis
urlstringHTTPS URL
eventsstring[]Nove udalosti
isActivebooleanAktivovat/deaktivovat

Príklad

curl -X PATCH https://epostak.sk/api/enterprise/webhooks/wh_abc123 \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -H "Content-Type: application/json" -d '{"isActive":false}'
DELETE /api/enterprise/webhooks/{id} Zmazať webhook

Natrvalo zmaze webhook a vsetky zaznamy o doruceni.

Príklad

curl -X DELETE https://epostak.sk/api/enterprise/webhooks/wh_abc123 -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{"deleted":true}
Webhook Queue
Pull-based alternatíva k webhookom. Stiahni udalosti a potvrď ich spracovanie. Vyžaduje Enterprise plan.
GET /api/enterprise/webhook-queue Stiahnuť udalosti

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

Query parametre

ParameterTypeDefaultPopis
limitinteger20Max 100
event_typestring-Filter podľa typu udalosti

Príklad

curl "https://epostak.sk/api/enterprise/webhook-queue?limit=10" \
  -H "Authorization: Bearer sk_live_xxxxx"

Odpoveď 200

{
  "items": [{
    "id": "evt_abc123",
    "type": "document.received",
    "created_at": "2025-04-01T10:00:00.000Z",
    "payload": {"documentId":"clx9abc123"}
  }],
  "has_more": false
}

HTTP kody

200 OK401 Unauthorized403 Enterprise required
DELETE /api/enterprise/webhook-queue/{eventId} Potvrdiť udalost

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

Príklady

curl -X DELETE https://epostak.sk/api/enterprise/webhook-queue/evt_abc123 \
  -H "Authorization: Bearer sk_live_xxxxx"
resp = requests.delete("https://epostak.sk/api/enterprise/webhook-queue/evt_abc123",
  headers={"Authorization": "Bearer sk_live_xxxxx"})
# 204 No Content on success
const resp = await fetch("https://epostak.sk/api/enterprise/webhook-queue/evt_abc123", {
  method: "DELETE",
  headers: {"Authorization":"Bearer sk_live_xxxxx"}
});
// 204 No Content on success

HTTP kody

204 No Content401 Unauthorized403 Forbidden404 Not Found
POST /api/enterprise/webhook-queue/batch-ack Batch potvrdenie

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

Telo požiadavky

PoleTypePovinnéPopis
event_idsstring[]yesPole ID udalosti max 1000

Príklady

curl -X POST https://epostak.sk/api/enterprise/webhook-queue/batch-ack \
  -H "Authorization: Bearer sk_live_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"event_ids":["evt_abc123","evt_def456"]}'
resp = requests.post("https://epostak.sk/api/enterprise/webhook-queue/batch-ack",
  headers={"Authorization": "Bearer sk_live_xxxxx"},
  json={"event_ids": ["evt_abc123", "evt_def456"]})
const resp = await fetch("https://epostak.sk/api/enterprise/webhook-queue/batch-ack", {
  method: "POST",
  headers: {"Authorization":"Bearer sk_live_xxxxx","Content-Type":"application/json"},
  body: JSON.stringify({event_ids:["evt_abc123","evt_def456"]})
});

HTTP kody

204 No Content400 Validation Error401 Unauthorized403 Enterprise required
Peppol siet
Vyhľadávanie v Peppol adresári a SMP lookup.
GET /api/enterprise/peppol/participants/{scheme}/{identifier} SMP Lookup

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

URL parametre

PoleTypePopis
schemestring4-ciferný ISO 6523 kód napr. 0245
identifierstringIdentifikátor účastníka

Príklady

curl https://epostak.sk/api/enterprise/peppol/participants/0245/SK1234567890 \
  -H "Authorization: Bearer sk_live_xxxxx"
resp = requests.get("https://epostak.sk/api/enterprise/peppol/participants/0245/SK1234567890",
  headers={"Authorization": "Bearer sk_live_xxxxx"})
const resp = await fetch("https://epostak.sk/api/enterprise/peppol/participants/0245/SK1234567890", {
  headers: {"Authorization":"Bearer sk_live_xxxxx"}
});

Odpoveď 200 (najdeny) / 404 (nenajdeny)

{
  "found": true,
  "participantId": "0245:SK1234567890",
  "scheme": "0245",
  "accessPoint": {
    "url": "https://ap.provider.com/as4",
    "transportProfile": "peppol-transport-as4-v2_0"
  }
}

HTTP kody

200 Found400 Invalid params401 Unauthorized404 Not found in Peppol
GET /api/enterprise/peppol/directory/search Hľadať v adresári

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

Query parametre

ParameterTypePovinnéPopis
qstringyesHľadaný výraz min 2 znaky
countrystringnoISO kod krajiny napr. SK
pageintegernoStranka vysledkov
page_sizeintegernoMax 50

Príklady

curl "https://epostak.sk/api/enterprise/peppol/directory/search?q=Kaja&country=SK" \
  -H "Authorization: Bearer sk_live_xxxxx"
resp = requests.get("https://epostak.sk/api/enterprise/peppol/directory/search",
  headers={"Authorization": "Bearer sk_live_xxxxx"},
  params={"q": "Kaja", "country": "SK"})
const resp = await fetch("https://epostak.sk/api/enterprise/peppol/directory/search?q=Kaja&country=SK", {
  headers: {"Authorization":"Bearer sk_live_xxxxx"}
});

Odpoveď 200

{
  "items": [{
    "participantId": "0245:SK1234567890",
    "name": "Kaja Solutions s.r.o.",
    "countryCode": "SK",
    "registrationDate": "2024-01-15"
  }],
  "page": 1,
  "page_size": 20,
  "has_next": false
}

HTTP kody

200 OK400 Query too short401 Unauthorized
GET /api/enterprise/company/lookup/{ico} Info o firme + Peppol status

Vyhľadá firmu podľa IČO v ORSR a FinStat a skontroluje registráciu v Peppol sieti.

Príklady

curl https://epostak.sk/api/enterprise/company/lookup/52819886 \
  -H "Authorization: Bearer sk_live_xxxxx"
resp = requests.get("https://epostak.sk/api/enterprise/company/lookup/52819886",
  headers={"Authorization": "Bearer sk_live_xxxxx"})
const resp = await fetch("https://epostak.sk/api/enterprise/company/lookup/52819886", {
  headers: {"Authorization":"Bearer sk_live_xxxxx"}
});

Odpoveď 200

{
  "ico": "52819886",
  "name": "Kaja Solutions s.r.o.",
  "address": {"street":"Hlavna 1","city":"Bratislava","zip":"811 01","country":"SK"},
  "dic": "2021234567",
  "icDph": "SK2021234567",
  "peppolRegistered": true,
  "peppolId": "0245:SK2021234567"
}

HTTP kody

200 OK400 Invalid ICO401 Unauthorized404 Not Found
Správa firiem
Správa prístupu k firmám pre integrátorské kľúče (sk_int_*).
GET /api/enterprise/firms Zoznam prístupných firiem

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

Príklad

curl https://epostak.sk/api/enterprise/firms \
  -H "Authorization: Bearer sk_int_xxxxx"

Odpoveď 200

{"firms":[{"id":"firm_abc123","name":"Klient s.r.o.","ico":"12345678","peppolId":"0245:0000000001","peppolStatus":"active"}]}

HTTP kody

200 OK401 Unauthorized
GET /api/enterprise/firms/{id} Detail firmy

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

Príklad

curl https://epostak.sk/api/enterprise/firms/firm_abc123 \
  -H "Authorization: Bearer sk_int_xxxxx"

Odpoveď 200

{
  "id": "firm_abc123",
  "name": "Klient s.r.o.",
  "ico": "12345678",
  "dic": "2021234567",
  "icDph": "SK2021234567",
  "address": {"street":"Hlavna 1","city":"Bratislava","zip":"811 01"},
  "peppolId": "0245:0000000001",
  "peppolStatus": "active",
  "plan": "api-enterprise",
  "createdAt": "2025-01-01T00:00:00.000Z"
}

HTTP kody

200 OK401 Unauthorized403 Forbidden404 Not Found
GET /api/enterprise/firms/{id}/documents Dokumenty firmy

Vráti stránkovaný zoznam dokumentov firmy. Integrátori môžu pristupovať k dokumentom spravovaných klientov.

Query parametre

ParameterTypeDefaultPopis
pageinteger1Stranka
page_sizeinteger20Max 100
directionstring-inbound | outbound
statusstring-Filter podľa stavu
fromstring-ISO 8601 date
tostring-ISO 8601 date

Príklad

curl "https://epostak.sk/api/enterprise/firms/firm_abc123/documents?direction=inbound&page=1" \
  -H "Authorization: Bearer sk_int_xxxxx"

Odpoveď 200

{"documents":[{"id":"clx9abc123","status":"RECEIVED","direction":"inbound"}],"pagination":{"total":42,"page":1,"pageSize":20,"totalPages":3}}

HTTP kody

200 OK400 Validation Error401 Unauthorized403 Forbidden
POST /api/enterprise/firms/{id}/peppol-identifiers Registrovat Peppol ID

Zaregistruje Peppol ID pre firmu. Registrácia v SMP prebehne do 24 hodín.

Telo požiadavky

PoleTypePovinnéPopis
schemestringyesISO 6523 kód napr. 0191
identifierstringyesIdentifikátor firmy napr. ICO

Príklady

curl -X POST https://epostak.sk/api/enterprise/firms/firm_abc123/peppol-identifiers \
  -H "Authorization: Bearer sk_int_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{"scheme":"0191","identifier":"12345678"}'
resp = requests.post("https://epostak.sk/api/enterprise/firms/firm_abc123/peppol-identifiers",
  headers={"Authorization": "Bearer sk_int_xxxxx"},
  json={"scheme": "0191", "identifier": "12345678"})
const resp = await fetch("https://epostak.sk/api/enterprise/firms/firm_abc123/peppol-identifiers", {
  method: "POST",
  headers: {"Authorization":"Bearer sk_int_xxxxx","Content-Type":"application/json"},
  body: JSON.stringify({scheme:"0191",identifier:"12345678"})
});

Odpoveď 201

{
  "peppolId": "0191:12345678",
  "registrationStatus": "pending",
  "message": "Peppol ID registration requested. We will register you in SMP within 24 hours."
}

HTTP kody

201 Created400 Validation Error401 Unauthorized403 Forbidden404 Firm not found
Reporty
Štatistiky odoslaných a prijatých dokumentov za vybrané obdobie.
GET /api/enterprise/reporting/statistics Štatistiky dokumentov

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

Query parametre

ParameterTypeDefaultPopis
periodstringmonthmonth | quarter | year
fromstring-Začiatok obdobia ISO 8601
tostring-Koniec obdobia ISO 8601

Príklady

curl "https://epostak.sk/api/enterprise/reporting/statistics?period=month" \
  -H "Authorization: Bearer sk_live_xxxxx"
resp = requests.get("https://epostak.sk/api/enterprise/reporting/statistics",
  headers={"Authorization": "Bearer sk_live_xxxxx"},
  params={"period": "month"})
const resp = await fetch("https://epostak.sk/api/enterprise/reporting/statistics?period=month", {
  headers: {"Authorization":"Bearer sk_live_xxxxx"}
});

Odpoveď 200

{
  "period": {"from":"2025-04-01","to":"2025-04-30"},
  "sent": {"total":47,"by_type":{"invoice":45,"credit_note":2}},
  "received": {"total":12,"by_type":{"invoice":12}},
  "delivery_rate": 0.979,
  "top_recipients": [{"name":"ABC s.r.o.","peppol_id":"0245:SK...","count":10}],
  "top_senders": []
}

HTTP kody

200 OK401 Unauthorized

Lifecycle integrátora

Od výberu digitálneho poštára po aktívny API prístup.

STEP 1
FS SR Portal
Firma zvolí ePošťák
STEP 2
Webhook
ePošťák dostane notifikáciu
STEP 3
Invite Email
Firma dostane registračný link
STEP 4
Registrácia
Účet + SMP registrácia
STEP 5
Peppol Active
Firma môže posielať/prijímať
STEP 6
OAuth Consent
Integrátor spojí firmu
STEP 7
API Access
Plná správa dokumentov
Jedna zmluva — Integrátor uzavrie zmluvu s jedným digitálnym poštárom (ePošťák). Platí len integrátor, jeho klienti neplatia za digitálneho poštára.
Objem naprieč firmami — Objemové zľavy sa počítajú naprieč všetkými spravovanými firmami, nie per-firma.

OAuth 2.0 Authorization Code Flow

PKCE-chránený OAuth tok pre integrátorov — klient udelí prístup k svojmu účtu.

POST /api/internal/integrator/oauth/clients Registrovať OAuth klienta

Registrácia nového OAuth klienta pre integrátora. Vráti client_id a client_secret.

Telo požiadavky

PoleTypePovinnéPopis
namestringyesNázov OAuth klienta
redirect_urisstring[]yesPovolené redirect URI

Odpoveď 201

{
  "client_id": "oc_abc123def456",
  "client_secret": "ocs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "name": "My ERP Integration",
  "redirect_uris": ["https://myerp.sk/oauth/callback"]
}

HTTP kody

201 Created401 Unauthorized
GET /oauth/authorize Autorizačná URL

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

Query parametre

ParameterTypePovinnéPopis
client_idstringyesID vášho OAuth klienta
redirect_uristringyesRegistrovaná callback URL
response_typestringyescode
scopestringyesenterprise:read enterprise:write
statestringyesCSRF ochrana — náhodný reťazec
code_challengestringyesPKCE code challenge (SHA-256)
code_challenge_methodstringyesS256

Príklad URL

https://epostak.sk/oauth/authorize
  ?client_id=oc_abc123def456
  &redirect_uri=https://myerp.sk/oauth/callback
  &response_type=code
  &scope=enterprise:read%20enterprise:write
  &state=random_csrf_token
  &code_challenge=BASE64URL(SHA256(code_verifier))
  &code_challenge_method=S256

HTTP kody

302 Redirect400 Bad Request
POST /api/oauth/token Výmena kódu za token

Vymení autorizačný kód za prístupový token (sk_int_*) a metadata firmy.

Telo požiadavky

PoleTypePovinnéPopis
grant_typestringyesauthorization_code
codestringyesAutorizačný kód z redirect_uri
client_idstringyesOAuth client ID
client_secretstringyesOAuth client secret
redirect_uristringyesRovnaká URL ako pri autorizácii
code_verifierstringyesPKCE code verifier

Odpoveď 200

{
  "access_token": "sk_int_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "token_type": "Bearer",
  "firm_id": "b1022d80-5016-4dad-a8d2-53685cab1701",
  "firm_name": "Kaja Solutions s.r.o.",
  "firm_ico": "12345678"
}

HTTP kody

200 OK400 Bad Request401 Unauthorized

Bulk Endpointy pre Integrátorov

Cross-firm operácie — spravujte všetky firmy cez jedinú požiadavku.

POST /api/enterprise/firms/assign Priradiť firmu podľa IČO

Priradí firmu k integrátorskému účtu podľa IČO. Vyžaduje sk_int_* kľúč.

Telo požiadavky

PoleTypePovinnéPopis
icostringyesIČO firmy (8 číslic)

Odpoveď 200

{
  "firm_id": "b1022d80-5016-4dad-a8d2-53685cab1701",
  "firm_name": "Kaja Solutions s.r.o.",
  "ico": "52345678",
  "peppol_id": "0245:SK52345678",
  "assigned": true
}

HTTP kody

200 OK400 Bad Request401 Unauthorized404 Not Found
POST /api/enterprise/firms/assign/batch Hromadné priradenie firiem

Hromadné priradenie až 50 firiem k integrátorskému účtu podľa IČO.

Telo požiadavky

PoleTypePovinnéPopis
icosstring[]yesPole IČO (max 50)

Odpoveď 200

{
  "assigned": [
    {"ico":"52345678","firm_id":"b1022d80-...","firm_name":"Kaja Solutions s.r.o.","ok":true},
    {"ico":"99887766","firm_id":null,"ok":false,"error":"NOT_FOUND"}
  ],
  "total": 2,
  "succeeded": 1,
  "failed": 1
}

HTTP kody

200 OK400 Bad Request401 Unauthorized
GET /api/enterprise/documents/inbox/all Cross-firm inbox

Vráti dokumenty zo všetkých spravovaných firiem v jednej odpovedi. Vyžaduje sk_int_* kľúč.

Query parametre

ParameterTypePovinnéPopis
sincestringnoISO 8601 — dokumenty od dátumu
statusstringnopending | acknowledged | all (predvolene: all)
firm_idstringnoFiltrovať podľa firmy
offsetnumbernoPosunutie pre stránkovanie
limitnumbernoMax výsledkov (default 50, max 200)

Odpoveď 200

{
  "total": 128,
  "offset": 0,
  "limit": 50,
  "items": [
    {
      "document_id": "doc_abc123",
      "firm_id": "b1022d80-5016-4dad-a8d2-53685cab1701",
      "firm_name": "Kaja Solutions s.r.o.",
      "sender_peppol_id": "0245:0000000002",
      "document_type": "invoice",
      "status": "pending",
      "received_at": "2026-04-01T12:00:00Z",
      "total_amount": 1230.00,
      "currency": "EUR"
    }
  ]
}

HTTP kody

200 OK401 Unauthorized403 Forbidden
GET /api/enterprise/webhook-queue/all Cross-firm webhook queue

Vráti webhook udalosti naprieč všetkými firmami. Vyžaduje sk_int_* kľúč.

Odpoveď 200

{
  "items": [
    {
      "event_id": "evt_abc123",
      "firm_id": "b1022d80-5016-4dad-a8d2-53685cab1701",
      "firm_name": "Kaja Solutions s.r.o.",
      "event_type": "document.received",
      "payload": {"document_id":"doc_abc123"},
      "created_at": "2026-04-01T12:00:00Z",
      "acknowledged": false
    }
  ]
}

HTTP kody

200 OK401 Unauthorized403 Forbidden
POST /api/enterprise/webhook-queue/all/batch-ack Hromadné potvrdenie udalostí

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

Telo požiadavky

PoleTypePovinnéPopis
event_idsstring[]yesPole ID udalostí na potvrdenie

Odpoveď 200

{
  "acknowledged": 5,
  "failed": 0,
  "event_ids": ["evt_abc1","evt_abc2","evt_abc3","evt_abc4","evt_abc5"]
}

HTTP kody

200 OK400 Bad Request401 Unauthorized

Cenník

Transparentné ceny bez skrytých poplatkov. Integrátor platí za všetky firmy — klientske firmy neplatia nič za digitálneho poštára. Objem sa počíta naprieč všetkými spravovanými firmami.

Základný poplatok

79€/mes
Zahŕňa Peppol registráciu, SMP záznam a neobmedzené firmy

Odoslané (Outbound)

ObjemCena/dok
1 - 1 0000.10€
1 001 - 2 0000.08€
2 001+0.06€
5 000+Individuálne

Prijaté cez API (Inbound)

ObjemCena/dok
1 - 1 0000.08€
1 001 - 2 0000.07€
2 001+0.06€
5 000+Individuálne
Objem naprieč firmami — Objemové zľavy sa počítajú naprieč všetkými spravovanými firmami, nie per-firma. Ak integrátor spravuje 20 firiem a každá odošle 100 dokumentov mesačne, celkový objem je 2 000 dokumentov.

Uchovávanie dát

ePošťák funguje ako Peppol transportná vrstva, nie ako archivačná služba. Integrátor zodpovedá za vlastný archív dokumentov.

Trvalé uchovanie (Peppol compliance)

  • Peppol Message ID
  • Peppol ID odosielateľa/príjemcu
  • Časové pečiatky doručenia (odoslané, doručené)
  • Stav doručenia + história stavov
  • AS4 Receipt (doklad o doručení)
  • MLR (Message Level Response)
  • Stav Invoice Response + dokument
90

Dočasné uchovanie (90 dní)

  • Obsah UBL/XML dokumentu — dostupný na stiahnutie cez /api/enterprise/documents/{id}/ubl
  • Po 90 dňoch: obsah je vymazaný, endpoint vracia HTTP 410 Gone
0

Neukladáme

  • Obchodné dáta faktúry (dodávateľ/odberateľ, adresy, sumy, položky)
  • PDF konverzie
  • Toto je zodpovednosť integrátora
Zodpovednosť integrátora — Integrátor musí viesť vlastný archív dokumentov podľa slovenského zákona (10 rokov pre daňové doklady). ePošťák je Peppol transportná vrstva, nie archivačná služba.

Chybové kódy

Formát chybovej odpovede: {"error": {"code": "...", "message": "..."}}

HTTPCodePopisOpakovateľné
400VALIDATION_ERRORNeplatne telo požiadavkyNo
401UNAUTHORIZEDChýbajúci alebo neplatný API kľúčNo
403FORBIDDENNedostatocne opravnenia alebo planNo
404NOT_FOUNDDokument alebo webhook neexistujeNo
409CONFLICTDokument už bol potvrdenýNo
422VALIDATION_FAILEDDokument neprešiel Peppol validáciouNo
422EXTRACTION_FAILEDAI extrakcia zlyhalaYes
429RATE_LIMITEDPríliš veľa požiadaviekYes
500INTERNAL_ERRORInterná chyba serveraYes