Dokumentáció

Fejlesztőknek: API-referencia

A portál REST API-ja és a nemzeti SAPI-SK 1.0 interfész: hitelesítés, cégek, bizonylatok, webhookok, hibák és korlátok.

Bevezetés

A Verteco API REST alapú, HTTPS felett. A kérés és a válasz egyaránt JSON (UTF-8). Kezdje egy fiók, majd egy API-token létrehozásával, és egy percen belül elküldheti az első hívást. Minden útvonal az alábbi alap-URL-hez (base URL) képest értendő.

A teljes tesztkörnyezet (sandbox) a következő címen érhető el: test.peppol.verteco.digital. Ugyanúgy viselkedik, mint az éles környezet, és ezen felül teszteszközöket (a Szlovák Köztársaság Pénzügyi Igazgatóságának (Finančná správa, FS) webhookja, ellenőrző token (Verifikačný údaj), cég eltávolítása) és egy szimulált szolgáltatóválasztást kínál az FS portál (VPDS) helyett.

Alap-URL (base URL)
https://peppol.verteco.digital/api/v1
Verzió
v1 (az útvonalban). A visszafelé nem kompatibilis változások új verzió alatt jelennek meg.
Protokoll
csak HTTPS · TLS 1.2+ · TLS A+
Formátum
application/json (UTF-8)
Hitelesítés
cookie alapú munkamenet (portál) vagy Bearer token (szerver-szerver)
Időbélyegek
ISO-8601 (UTC), pl. 2026-06-03T09:40:27Z

Tanúsított Access Point

Valódi Peppol hozzáférési pont (Access Point, Seat ID PSK001128), nem viszonteladó. Sikeresen teljesítettük az OpenPeppol megfelelőségi tesztjét (19/19), és éles üzemben vagyunk.

Érvényes bizonylatok

Szerveroldali EN 16931 + Peppol BIS 3.0 Schematron-validáció minden fogadott ÉS küldött bizonylaton. A bizonylatot előzetesen is ellenőrizheti: a nyilvános validátor a /validator címen fut (API-ként: POST /api/v1/public/peppol-validate); a hibákat a konkrét szabállyal együtt adjuk vissza (pl. BR-CO-15). Szlovák esetekre ellenőrzött minták (nem áfaalany, deviza, fordított adózás, jóváírás, előlegek, beágyazott PDF): /hu/vzory.

Több cég egy fiókban (multi-tenant)

Egy fiók és egy token N céghez, ideális SaaS-, ERP-rendszerek és könyvelők számára.

SK TDD automatikusan

Az adóhatósági jelentést (corner-5 / TDD) az Ön nevében állítjuk elő és küldjük el a Pénzügyi Igazgatóságnak (FS).

Géppel olvasható interfész (OpenAPI 3.1): /api/v1/openapi.json. Importálja Postmanbe, nyissa meg a Swagger Editorban, vagy generáljon típusos klienst tetszőleges nyelven (TS, Java, PHP, Python…) az openapi-generator eszközzel. A portál API-t és a SAPI-SK-t is lefedi.

Gyors kezdés

Melyik felület való Önnek

SAPI-SK 1.0 (/sapi)

Könyvelő- vagy számlázóprogram, ERP, több céget kezelő platform: a nemzeti felület küldésre, fogadásra, állapotokra, kézbesítési igazolásokra és FS-jelentésekre. Minden bizonylatot küldő vagy olvasó integrációhoz ajánlott.

OAuth2 client credentials: client_id = az API-kulcs UUID-ja, client_secret = a vpt_ kulcs, 15 perces access token.

Portal API (/api/v1)

Cégek, webhookok, értesítések, exportok és letöltések; partnerkonzol (/resellers/me). Kiegészíti a SAPI-t, nem helyettesíti.

Authorization: Bearer vpt_… (a fiók API-kulcsa).

MCP-szerver (/api/mcp)

AI-asszisztens (Claude Code, Cursor, Claude Desktop) olvasson bizonylatokat, ellenőrizzen címzetteket és kifejezett megerősítés után küldjön.

Bearer vpt_… az MCP-kliensen keresztül.

E-mail a cég postafiókjába

Programozás nélkül: az XML-számla mellékletként a cég titkos címére; ellenőrizzük és a portálból küldöttként továbbítjuk.

Feladó cím az engedélyezőlistán + SPF/DKIM.

A fiókot és az API-tokent is a portálon (böngészőben) hozza létre. Az integráció ezután kizárólag az API-tokenen keresztül működik. Az alkalmazásának nem kell regisztrációt, bejelentkezést vagy jelszavakat kezelnie.

  1. 1

    Hozzon létre fiókot a portálon

    Regisztráljon az e-mail-címével, és erősítse meg az e-mailben kapott hivatkozással.
  2. 2

    Generáljon API-tokent

    A portálon nyissa meg az API tokeny → Vytvoriť (API-tokenek → Létrehozás) menüpontot. A vpt_… token csak egyszer jelenik meg. Tárolja biztonságosan.
  3. 3

    Küldje el az első hívást

    Használja a tokent az Authorization fejlécben:
    javascript
    const res = await fetch('https://peppol.verteco.digital/api/v1/companies', {
    headers: { Authorization: 'Bearer vpt_8f2a…' },
    });
    const companies = await res.json();
  4. 4

    Szolgáltató kiválasztása a Pénzügyi Igazgatóság portálján

    Éles környezetben a Verteco kiválasztása az FS portálján (vpds.financnasprava.sk) tisztán küldő használathoz is szükséges: ez oldja fel a küldést (ellenőrző token) és aktiválja a céget. A fogadás közben maradhat a könyvelőprogram szolgáltatójánál: egy cégnek a hálózatban pontosan egy fogadója van, küldője viszont több is lehet.

Gyors kezdés curl-lel (először a tesztkörnyezetben)

Hat hívás a fióktól az első kézbesített számláig, mind a test.peppol.verteco.digital ellen, ahol a cég létrehozáskor azonnal aktív, és a bizonylatok a Peppol-teszthálózatba mennek. A várt válaszok rövidítettek.

shell
export BASE=https://test.peppol.verteco.digital   # production: https://peppol.verteco.digital
export KEY=vpt_…        # step 1
  1. 1

    Fiók és API-kulcs

    Regisztráljon a test.peppol.verteco.digital/register oldalon (a tesztkörnyezetben nincs megerősítő e-mail), és az API-kulcsok oldalon hozzon létre kulcsot. Egyszer jelenik meg; lent $KEY.

  2. 2

    Kulcs ellenőrzése

    shell
    curl -s $BASE/api/v1/auth/me -H "Authorization: Bearer $KEY"
    json
    { "id": "7f1d…", "email": "dev@firma.sk", "emailVerified": true, "persona": "developer" }
  3. 3

    Cég létrehozása

    shell
    curl -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. 4

    SAPI access token

    shell
    curl -s -X POST $BASE/sapi/auth/token -H "Content-Type: application/json" -d '{"grant_type":"client_credentials","client_id":"<kulcs UUID az API-kulcsok oldalról>","client_secret":"'$KEY'"}'
    json
    { "access_token": "eyJhbGciOiJIUzI1NiJ9…", "token_type": "Bearer", "expires_in": 900,
      "refresh_token": "eyJhbGciOiJIUzI1NiJ9…" }
  5. 5

    Ellenőrzés küldés nélkül

    shell
    curl -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. 6

    Küldés és állapot követése

    shell
    curl -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, majd curl -s "$BASE/sapi/document/sent?since=2026-10-01T00:00:00Z" -H "Authorization: Bearer $ACCESS" -H "X-Peppol-Participant-Id: 0245:2120000001"
    json
    HTTP/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" } } ] }
Éles indulás: cserélje a $BASE-t peppol.verteco.digital-ra, hozzon létre éles fiókot és kulcsot, és az ügyfél válassza ki a szolgáltatót a Pénzügyi Igazgatóság portálján (a cég magától aktiválódik, a küldést a hitelesítő adat oldja fel).

Tesztkörnyezet (sandbox)

A tesztbizonylatok 60 nap után automatikusan törlődnek: a környezet kipróbálásra szolgál, nem archiválásra. Ez a megőrzési szabály az éles portálra nem vonatkozik.

A SAPI mock sandbox (lásd lent) mellett egy teljes értékű tesztkörnyezetet is üzemeltetünk, e portál teljes másolatát külön adatokkal, ahol a teljes folyamatot (regisztráció → cég → küldés → fogadás → értesítések) végigpróbálhatja az éles környezetre gyakorolt bármilyen hatás nélkül.

Regisztráció
nincs megerősítő e-mail; a fiók azonnal használható
Cég jóváhagyása
automatikus, közvetlenül a felületen vagy az API-n keresztül; nincs szolgáltatóválasztás a Szlovák Köztársaság Pénzügyi Igazgatóságának (Finančná správa, FS) portálján és nincs bejelentkezés az FS-portálra; közvetlenül egy áfaazonosítóval (IČ DPH) rendelkező cég létrehozása után küldhet és fogadhat is
Hálózati regisztráció
automatikus, a Peppol teszthálózatba. Figyeljen az azonosító két rétegére: az API és a portál ugyanazt a formátumot használja, mint az éles környezet (peppolParticipantId = 0245:<DIČ számjegyei>, ahol a DIČ a szlovák adóazonosító szám; az integrációs kódja nem változik); a teszt SMP/SML-ben a cég technikailag 9950:SK<DIČ> formában van regisztrálva, mert a 0245 séma a Pénzügyi Igazgatóság ellenőrző kódját igényli, amely a tesztkörnyezetben nem létezik. Az éles környezetben a 0245:<DIČ számjegyei> azonosító csak az FS-portálon végzett szolgáltatóválasztás után (eID-vel vagy belépési adatokkal) kerül regisztrálásra az éles Peppol hálózatban
Validáció
valódi: EN 16931 + Peppol BIS 3.0 szabályok, ugyanúgy, mint az éles környezetben
Kézbesítés
valódi, a Peppol teszthálózaton keresztül (AS4, tesztcertifikát, teszt SML/SMP): a teszthálózatban regisztrált címzett fogadott számlaként kapja meg a számlát (e-maillel, PDF-fel és webhookkal együtt); az éles hálózatba semmi nem kerül
Kézbesítési igazolás (MLS)
valódi MLS igazolás a teszthálózatból
E-mailek
valóban elküldésre kerülnek (a megadott címekre), [TEST] előtaggal
Hibaszimuláció
az X-Sandbox-Simulate: 503 fejléc (vagy 502, 500, 429) bármely /sapi/document/* híváson érvényes tokennel a megfelelő hibát adja vissza; semmi sem kerül feldolgozásra vagy mentésre. 500 (SAPI-PROC-500) és 429 (SAPI-SYS-003, Retry-After fejléccel) esetén SAPI hibaborítékot kap; az 503 és 502 a hálózati peremen (DigitalOcean, Cloudflare) HTTP 504-ként, HTML törzzsel, boríték nélkül érkezik, pontosan így néz ki egy valódi kiesés kívülről, így a nem JSON válasz kezelését is tesztelheti. Validációs hibát érvénytelen XML-lel, 429-et percenként 300 hívás túllépésével is kiválthat. Az éles környezet a fejlécet figyelmen kívül hagyja
Ár
ingyenes, tesztelési korlátok nélkül

Minden, ami itt működik, ott is működik: a portál, a REST API, a SAPI-SK 1.0, a webshop-bővítmények és a webhookok. Csak váltsa át az integrációjában a domaint a test.peppol.verteco.digital címre, és használja a tesztkörnyezetben létrehozott tokeneket. Ideális integrációfejlesztéshez, CI-tesztekhez és a könyvelők betanításához az éles bevezetés előtt. Próbabizonylat csak oda való: éles környezetben minden belföldi, áfaalanyok közötti bizonylatot jelentünk a Pénzügyi Igazgatóságnak, és a jelentés nem vonható vissza. Az éles portálon csak a „Poslať skúšobnú faktúru“ (próbaszámla küldése, 0,00 €) gombbal próbáljon; 2027. 1. 1-jétől az éles környezet elutasítja a TEST-/VITAJTE- számokat (test_document_in_production).

Megjegyzés: a tesztdomain peremvédelme (edge) a generikus User-Agent: Python-urllib és User-Agent: Java/1.8.x fejléceket (a Java 8HttpsURLConnection alapértelmezett User-Agentje) HTTP 403 "error code: 1010" válasszal blokkolja, még mielőtt a kérés elérné az API-nkat; az éles peppol.verteco.digital domain átengedi őket. Állítson be saját User-Agentet: Java alatt vagy a -Dhttp.agent=my-app/1.0 JVM-kapcsolóval (kódmódosítás nélkül; a Java hozzáfűzi a "Java/1.8" részt, és az így kapott "my-app/1.0 Java/1.8.0_xxx" átjut, csak a "Java/1.8" kezdetű fejléc van blokkolva), vagy a kapcsolaton a conn.setRequestProperty("User-Agent", "my-app/1.0") hívással. A gyakori kliensek (requests, httpx, Java 11+, Apache HttpClient, okhttp, axios, Go, PHP, curl) változtatás nélkül működnek.

Miért kerülnek a cégek automatikusan jóváhagyásra

A Pénzügyi Igazgatóságnak nincs tesztkörnyezete a VPDS portálhoz: a szolgáltatóválasztás a vpds.financnasprava.sk portálon csak élesben fut, és az FS-portálra való bejelentkezéssel (eID vagy belépési adatok) ellenőrzik, így élesben nem lehet tetszőleges, nem saját céget „kiválasztani”. Hogy az integrációját mégis tesztelhesse, ezt a lépést a tesztkörnyezetben szimuláljuk: minden létrehozott cég automatikusan jóváhagyásra kerül (FS-nél történő választás nélkül), így beállíthat küldőt és címzettet is, és végigmehet a teljes folyamaton.

Az FS webhookok (szolgáltatóválasztás) teszteléséhez saját megfelelőnk van a Pénzügyi Igazgatóság eszközéhez: test.peppol.verteco.digital/sandbox-nastroje. Itt érvényes, FS-stílusú ellenőrző tokent (Verifikačný údaj) generálhat, és teljes webhookot küldhet a saját végpontjára, pontosan úgy, ahogy az FS portál teszi egy valódi választásnál. A teszteléshez létrehozott cégek pedig kiregisztrálhatók (a portálról és a teszt SMP-ből), éppen a Pénzügyi Igazgatóság oldalán hiányzó tesztmód miatt.

A tesztkörnyezet nem része az éles Peppol hálózatnak: a cégek egy külön teszthálózatban (teszt SMP/SML) vannak regisztrálva, semmi nem kerül elküldésre valódi végpontokra, és az adatai bármikor törölhetők. Ne használja valódi számlákra; azokhoz az éles környezet a peppol.verteco.digital címen érhető el, ahol az éles hálózati regisztrációt a Pénzügyi Igazgatóság portálján végzett, bejelentkezéssel (eID vagy belépési adatok) megerősített szolgáltatóválasztás oldja fel.

Hitelesítés

Az integrációja API-tokennel hitelesít az Authorization: Bearer vpt_… fejlécben. A tokent a portálon hozza létre (API-tokenek); formátuma vpt_ + 40 hexadecimális karakter, mi csak a SHA-256 hash-ét tároljuk, és ugyanolyan hozzáférése van, mint az Ön fiókjának. Tesztelje az /auth/me hívással:

curl
curl https://peppol.verteco.digital/api/v1/auth/me -H 'Authorization: Bearer vpt_8f2a…'
# 200 → { "id": "…", "email": "vy(at)firma.sk" }   (token works)

Hiányzó vagy érvénytelen token esetén az API a következőt adja vissza:

json
// 401 Unauthorized
{ "error": "unauthorized", "message": "Authentication required" }
A portál (böngésző) belső munkamenet-cookie-t használ (portal_session, JWT, 7 nap); szerver-szerver integrációhoz erre nincs szüksége. Hitelesítés nélkül nyilvános a /ping, az /openapi.json és a /public/* alatti végpontok (a peppol-check lekérdezés, a peppol-validate validátor, részletek a Nyilvános eszközök szakaszban, valamint a szolgáltatás állapota a status végponton); minden más munkamenetet vagy Bearer tokent igényel.

Konvenciók és formátumok

TípusFormátumPélda
idUUID (string)08dd6c1e-…
időbélyegekISO-8601 Instant (UTC)2026-06-03T09:40:27Z
issueDatedátum (YYYY-MM-DD)2026-06-03
totalAmountdecimális szám120.00
hiányzó értékeknull (nem kihagyott mező)"dic": null

Lapozás és idempotencia

A /companies és a /companies/{id}/documents támogatja az opcionális ?page&limit paramétereket (a válasz JSON tömb marad; a teljes darabszám az X-Total-Count / X-Total-Pages fejlécekben van). Paraméterek nélkül a teljes tömböt adják vissza, a bizonylatokat createdAt szerint csökkenő sorrendben; a /tokens mindig a teljes tömböt adja vissza. Az Idempotency-Key fejlécet a nemzeti interfész, a SAPI-SK támogatja a POST /sapi/document/send végponton; programozott küldéshez pontosan ezt használja.

Verziózás és visszafelé kompatibilitás

  • A szerződés csak bővül: új mezők (null esetén kihagyva), új opcionális paraméterek, új végpontok és események. A meglévő mezőnevek, enum-értékek és státuszkódok nem változnak.
  • Új enum-érték vagy webhook-esemény bármikor megjelenhet; hagyja figyelmen kívül az ismeretlent, és ismeretlen eseményre 2xx-szel válaszoljon.
  • Az időbélyegek ISO 8601 UTC formátumúak változó számú tizedesjeggyel; elemezze, sose hasonlítsa szövegként. Az összegek két tizedesjegyű szövegként érkeznek.
  • Ha egy változás nem lehetne additív, a changelogban (e-mail feliratkozással) legalább 90 nappal előre bejelentjük, és az átmeneti időszakban megtartjuk a régi alakot.
  • Az API-kulcs biztonsági modellje (2026. október 3-tól): a kulcs bizonylatokat olvas és küld, cégeket, értesítéseket és webhookokat kezel. A fiók- és kulcskezelést (kulcs létrehozása, szűkítése, visszavonása, MFA, jelszó, munkamenetek, meghívók, cégátadás, szerződésaláírás) csak bejelentkezett személy végzi; a kulcs ott 403 token_not_allowed választ kap. A GET /api/v1/tokens kulccsal továbbra is elérhető.
  • A szerződés verziója az openapi.json info.version mezője, és minden változásnak van API vagy Webhookok címkéjű changelog-sora.

/changelog · /changelog/odber · openapi.json

Hibák

Letölthető hibaszótár: ugyanaz a szótár, amellyel a portál az elutasítás részleteit lefordítja (EN 16931 és Peppol BIS szabályazonosítók, a hálózati hibák mintái, a GET /sapi/document/sent statusReason kódjai) JSON formában elérhető itt: /docs/peppol-errors.json (sk, en, de, hu). Gyakori hibák táblázatához a könyvelőprogramban: a szabályazonosítót a részletben bárhol keresse, az ismeretlen szabályt az azonosítójával együtt jelenítse meg. 2026. 10. 7-től minden JSON válasz Content-Type: application/json;charset=UTF-8 fejlécet kap.

A hibák egységes alakúak, géppel olvasható error kóddal. A validációs hibák egy fields térképet is tartalmaznak (mezőnként az első hiba).

json
// business error
{ "error": "invalid_credentials", "message": "Invalid email or password" }

// validation error (400); field messages are returned in Slovak ("IČO musí byť 8 číslic" = "IČO must be 8 digits")
{ "error": "validation_failed", "message": "Some fields are invalid",
"fields": { "ico": "IČO musí byť 8 číslic" } }

HTTP-státuszok

200 / 201 / 204
siker (OK / Created / No Content)
400
érvénytelen bemenet (lásd error / fields)
401
hiányzó vagy érvénytelen hitelesítés
403
nincs elegendő jogosultság (szerepkör)
404
az erőforrás nem létezik, vagy nincs hozzá hozzáférése
405
a HTTP-metódus nem támogatott ezen az útvonalon
409
ütközés (az IČO / e-mail már létezik)
415
nem támogatott Content-Type (az XML végpontok application/xml-t várnak)
429
kérésszám-korlát (rate limit) túllépve (RateLimit-* és Retry-After fejlécek, JSON törzs: rate_limited)
Az API-nk mindig JSON-nal válaszol, error mezővel. A JSON törzs nélküli válasz (HTML vagy szöveg, például error code: 1010 403-as státusszal, vagy 502/504 telepítés közben) nem az API-tól, hanem az előtte álló infrastruktúrától érkezett (peremvédelem, gateway). A 403/1010 tipikus oka egy generikus könyvtári User-Agent (Python-urllib, Java/1.8.x a tesztdomainen); a megoldást a Tesztkörnyezet szakasz írja le.

Leggyakoribb hibakódok

KódHTTPMikor
validation_failed400a törzs nem ment át a validáción (lásd fields)
unauthorized401hiányzó vagy érvénytelen API-token
forbidden403a művelet owner/admin szerepkört igényel
company_not_found404a cég nem létezik, vagy Ön nem tagja
ico_taken409ezzel az IČO-val (cégjegyzékszám) már létezik cég
ico_immutable400az IČO nem módosítható
company_dic_missing400küldési ellenőrzés a cég DIČ-je (szlovák adóazonosító szám) nélkül
token_invalid400az ellenőrző token (Verifikačný údaj, aláírás) nem egyezik
document_not_found404a bizonylat nem létezik
token_not_found404az API-token nem létezik / nem az Öné
rate_limited429túl sok kérés

A hozzáférési pont kiesése és az ismétlés

  • Ha az API 502, 503 vagy 504 választ ad, vagy egyáltalán nem válaszol, a bizonylatot nem vettük át: ismételje meg a hívást később ugyanazzal az Idempotency-Key értékkel, semmi nem megy ki kétszer.
  • Az API által elfogadott bizonylat (202 ACCEPTED, retrying: true esetén is) a helyreállítás után magától kimegy: a hozzáférési pont ismétli a kézbesítést, az állapotot a GET /sapi/document/sent hívással vagy webhookon látja; ha végül feladja, a bizonylat sikertelenként zárul, és ugyanaz a kulcs újra elküldi.
  • A hálózati szintű fogadás nem függ a portáltól: a portál kiesése alatt át nem jutott kézbesítést a küldő hozzáférési pont a Peppol szabályai szerint megismétli, és a bizonylat a helyreállítás után megjelenik a portálon. A kiesés miatt el nem küldött FS-jelentéseket automatikus helyreállító futás pótolja (az átviteli hibát ismételjük, a tartalmi elutasítást nem).
  • Az állapot és a rendelkezésre állás előzményei a /status oldalon vannak; a tesztkörnyezetben a kiesést az X-Sandbox-Simulate fejléccel szimulálhatja (Tesztkörnyezet szakasz).

SAPI-SK kódok (error.code mező)

KódJelentés
SAPI-AUTH-001érvénytelen client_id/client_secret vagy letiltott fiók (401)
SAPI-AUTH-002hiányzó vagy hibás Authorization: Bearer fejléc (401)
SAPI-AUTH-003a kulcs nem jogosult a résztvevőre, a küldés nincs feloldva vagy szünetel (403)
SAPI-AUTH-004az IP-cím nincs a kulcs engedélyezőlistáján (403)
SAPI-VAL-001érvénytelen kéréstörzs (400)
SAPI-VAL-002hiányzik az X-Peppol-Participant-Id (400)
SAPI-PROC-001átmeneti: ezzel a kulccsal küldés van folyamatban, próbálja újra kicsit később (502, retryable)
SAPI-PROC-002a bizonylat küldés előtt elutasítva (422, Prefer: handling=strict)
SAPI-PROC-003Idempotency-Key nélkül: ezen a számon már más bizonylat ment ki (409, details: documentId, status)
SAPI-RES-001a bizonylat nem létezik vagy más résztvevőé (404)
SAPI-RES-002a bizonylat tartalma már nincs tárolva (a cég megőrzése) vagy sosem volt archiválva (404; a kód kompatibilitás miatt marad)
SAPI-RES-003 / 004a melléklet vagy az MLS-igazolás még nem létezik (404)
SAPI-SYS-001 / 002átmeneti infrastruktúra- vagy validátorhiba (503/502, retryable)
SAPI-SYS-003túllépett kérésszám-korlát (429, Retry-After)
SAPI-PROC-500váratlan hiba, a correlation_id-t küldje a támogatásnak (500)

A portál API teljes hibakatalógusa (326)

Minden kód, amelyet a backend az error mezőben visszaad, a portál által mutatott szöveggel. Ugyanabból a szótárból készül, mint a felület, így nem avulhat el.

A portál API teljes hibakatalógusa
account_existsEhhez az e-mail-címhez már létezik fiók. Jelentkezzen be, és fogadja el a meghívót a portálon.
account_inactiveFiókja nem aktív. Kérjük, lépjen kapcsolatba velünk.
account_under_reviewFiókját éppen ellenőrizzük. Hívjon minket, vagy írjon a [email protected] címre.
acknowledge_requiredErősítse meg, hogy tisztában van a bejelentkezés nélküli letöltés kockázataival.
acknowledgement_requiredErősítse meg, hogy tisztában van a szerződés felmondásának következményeivel.
address_book_fullA címjegyzék megtelt. Töröljön nem használt ügyfeleket, és próbálja újra.
admin_email_unverifiedAz adminisztrációhoz megerősített e-mail-cím szükséges. Kattintson a regisztrációnál küldött üzenetben lévő linkre.
admin_mfa_requiredAz adminisztrációhoz kétfaktoros hitelesítés szükséges. Kapcsolja be a Beállításokban.
ai_budgetAz AI-vázlatok kerete elfogyott, vagy elérte a napi limitet. Írja meg a választ kézzel.
ai_failedA válaszvázlatot nem sikerült létrehozni. Kérjük, próbálja újra.
ai_unavailableAz AI-válaszvázlatok jelenleg nem érhetők el.
already_completedA cég átruházása már befejeződött.
already_memberEz a felhasználó már hozzáféréssel rendelkezik (a cég vagy az Ön csapatának tagja).
attachment_externalEz a melléklet a küldőnél van tárolva hivatkozásként, nem a számlában.
attachment_invalidEgy mellékletet nem sikerült elküldeni (nem engedélyezett típus, sérült tartalom vagy túllépett méret). Ellenőrizze a mellékleteket, és próbálja újra.
attachment_not_foundA melléklet nem található.
attachment_not_readableA mellékletet nem sikerült beolvasni.
billing_unconfiguredAz előfizetési fizetés még nem érhető el.
blockedErre a címre nem küldhető teszt-webhook (helyi vagy belső címek nem engedélyezettek).
body_requiredKérjük, írja be az üzenet szövegét.
body_too_longAz üzenet legfeljebb 4000 karakter lehet.
cannot_change_selfA saját szerepét nem módosíthatja. Kérje a cég másik adminisztrátorát.
cannot_invite_selfNem hívhatja meg saját magát, és nem fogadhatja el a saját meghívóját.
cannot_release_to_selfA cég már ehhez a fiókhoz tartozik.
cannot_remove_ownerA cég tulajdonosa nem távolítható el. A tulajdonjog a cég átruházásával változik.
cannot_restrict_adminA portál adminisztrátori fiókja így nem korlátozható.
cannot_transfer_selfA cég már ehhez az e-mail-címhez tartozik.
captcha_failedA robotellenőrzés sikertelen. Kérjük, próbálja újra.
captcha_requiredA robotellenőrzés sikertelen; töltse újra az oldalt és próbálja újra.
channel_unknownIsmeretlen csatornájú régi bejegyzés nem játszható újra. Küldje el kézzel a megfelelő végpontra.
chat_not_foundA beszélgetés nem található vagy üres.
client_not_foundA cég nem tartozik ehhez a partnerfiókhoz.
client_not_removableA cég nem törölhető: a Pénzügyi Igazgatóság ellenőrizte, aktív, az SMP-ben regisztrált vagy bizonylatai vannak. Használja helyette a leválasztást (release).
company_activeAktív cég nem törölhető.
company_address_requiredSzámla küldése előtt adja meg a cég székhelyét (utca, város, irányítószám) a cég adatainál.
company_already_activeA cég már aktív, az aktiválási útmutató nem szükséges.
company_dic_missingElőször adja meg a cég DIČ-jét (adószámát), majd próbálja újra az ellenőrzést.
company_incompleteAláírás előtt töltse ki a cég adatait: cégnév, IČO, Peppol azonosító és teljes székhely.
company_limitElérte a fiókonkénti cégek maximális számát. Lépjen kapcsolatba az ügyfélszolgálattal, megemeljük a limitet.
company_name_mismatchA cégnév nem egyezik a hivatalos nyilvántartással (ŽR/OR SR) ehhez az IČO-hoz.
company_not_activeMigrációs kód csak a Peppol hálózatban regisztrált, aktív cég számára adható ki.
company_not_foundA cég nem található.
company_not_registeredA cég még nincs aktiválva: fejezze be a Verteco kiválasztását a Pénzügyi Igazgatóság portálján, utána tud küldeni.
company_not_verifiedAz átállás csak a Verteco Pénzügyi Igazgatóság portálján történő kiválasztása után lehetséges (a cégnek aktívnak és ellenőrzöttnek kell lennie).
company_verified_lockedEllenőrzött cég neve csak a hivatalos nyilvántartás szerint módosítható. Először adja meg az IČO-t, vagy írjon nekünk.
confirm_name_mismatchA megadott név nem egyezik a bejegyzett közvetítő nevével.
confirmation_requiredAz aláíráshoz meg kell erősítenie a jogosultságát és a szöveggel való egyetértését.
conflictEz a bejegyzés már létezik.
content_unavailableEnnek a bizonylatnak a tartalma már nincs tárolva, vagy nem olvasható számlaként.
contract_pendingA szerződéses jogviszony a portálba való első belépéssel jön létre (ÁSZF 4. cikk); ennél a cégnél még nem rögzítettünk ilyet, ezért a szerződés még nem állítható ki.
country_invalidAz ország kétbetűs ISO-kód legyen (SK, CZ, AT, DE…), nem név.
country_outside_euAz online kérelem EU-tagállamban székhellyel rendelkező jogalanyoknak érhető el. EU-n kívüli jogalany írjon a [email protected] címre.
current_ip_missingA listának tartalmaznia kell az Ön aktuális IP-címét is, különben kijelentkezés után kizárná magát.
daily_limitElérte a napi üzenetlimitet. Próbálja újra holnap, vagy írjon a [email protected] címre.
delivery_failedA teszt-webhookot nem sikerült kézbesíteni, a végpontja nem válaszolt.
delivery_not_foundA webhook-kézbesítési bejegyzés nem található.
deregister_cooldownEgy IP-címről 60 másodpercenként csak egy cég törölhető. Próbálja újra kis idő múlva.
dic_immutableA Peppol azonosító nem módosítható: ez a cég identitása a Peppol hálózatban.
dic_requiredAdja meg a cég DIČ-jét (adószám: SK + 10 számjegy).
dic_takenIlyen DIČ-vel már létezik cég a portálon.
directory_unavailableA központi SMP nem válaszol, vagy elutasította a módosítást. Próbálja újra kis idő múlva.
document_no_xmlA tárolt eredeti XML már nem létezik, a jelentés nem építhető újra.
document_not_foundA bizonylat nem található.
document_too_largeA dokumentum túl nagy (a limit 3 MB).
domestic_subjectSzlovák jogalany a kérelmet bejelentkezés után, a /sprostredkovatel/ziadost oldalon nyújtja be.
duplicate_invoice_numberEzzel a számmal már küldtek bizonylatot. Új bizonylathoz új szám kell; ugyanazt a bizonylatot sosem küldjük el kétszer.
email_change_cooldownA megerősítő e-mailt már elküldtük. Újat 10 perc múlva kérhet.
email_invalidAdjon meg egy érvényes e-mail-címet.
email_not_verifiedElőször erősítse meg az e-mail-címét. A linket elküldtük Önnek.
email_send_company_not_activeAz e-mailes küldés csak aktív, Peppol-azonosítóval rendelkező cégnél kapcsolható be.
email_send_unavailableAz e-mailes küldés ebben a környezetben nem érhető el.
email_takenEzt az e-mail-címet már másik fiók használja.
email_unchangedEz az Ön jelenlegi e-mail-címe.
empty_documentIllessze be a számla XML-jét.
empty_ideaKérjük, írja le, mit kellene javítanunk.
empty_messageAz üzenet üres.
empty_replyA válasz üres.
entry_not_foundAz ügyfél nem található a címjegyzékben.
export_format_unknownIsmeretlen exportformátum.
forbiddenEhhez a művelethez nincs jogosultsága.
forwarder_unreachableA bizonylatfeldolgozó szolgáltatás nem válaszol. Próbálja újra kis idő múlva.
fs_change_already_sentA kérelem már elment a Pénzügyi Igazgatóságnak, nem vonható vissza. Szükség esetén adjon be újat.
fs_change_confirm_requiredErősítse meg, hogy az összes módosítást egyszerre kéri.
fs_change_cooldownA következő módosítási kérelem az előző után 48 órával adható be.
fs_change_field_readonlyA cégazonosító és az adószám nem módosítható; új azonosság új bejegyzést jelent.
fs_change_no_changesNem adott meg módosítást a Pénzügyi Igazgatóságnál lévő adatokhoz képest.
fs_change_not_foundA módosítási kérelem nem található.
fs_change_not_openA kérelem már lezárult.
fs_change_not_queuedCsak küldésre váró kérelem küldhető el azonnal.
fs_change_pendingEgy módosítási kérelem már várakozik vagy a Pénzügyi Igazgatóságnál van. A következőt annak lezárása után adhatja be.
fs_secret_invalidA kulcs 32 karakter (számjegyek és az a–f betűk). Másolja a Pénzügyi Igazgatóság zipjében lévő .txt fájl teljes tartalmát.
fs_secret_mismatchA kulcs nem egyezik azoknak a hívásoknak az aláírásával, amelyeket a Pénzügyi Igazgatóság már elküldött a végpontjára. Ellenőrizze a zipet és a másolt kulcsot; ha a proxyja módosítja a hívás törzsét, írjon nekünk.
has_documentsA cégnek bizonylatai vannak az archívumban, a törlés zárolva van (törvényi archiválás).
holding_unavailableAz ügyfél leválasztása jelenleg nem lehetséges. Lépjen kapcsolatba az ügyfélszolgálattal.
ico_immutableAz IČO nem módosítható.
ico_requiredAz IČO megadása kötelező (8 számjegy).
ico_takenIlyen IČO-val már létezik cég egy másik fiók alatt. Jelentkezzen be azzal, vagy írjon nekünk.
instructions_cooldownEhhez a céghez már elküldtük az útmutatót. Újraküldés 24 óra után lehetséges.
integration_not_foundIsmeretlen integráció.
internalVáratlan hiba történt. Kérjük, próbálja újra.
internal_errorVáratlan szerverhiba történt. Kérjük, próbálja újra; a hibát rögzítettük.
invalid_actionIsmeretlen művelet.
invalid_afterAz after paraméternek ISO 8601 formátumú dátumnak és időnek kell lennie (pl. 2026-09-05T10:00:00Z).
invalid_amountAz összegnek számnak kell lennie.
invalid_billing_modelIsmeretlen számlázási modell. Válasszon a felajánlott modellek közül.
invalid_countryVálassza ki a székhely országát.
invalid_credentialsHibás e-mail-cím vagy jelszó.
invalid_current_passwordA jelenlegi jelszó nem helyes.
invalid_dateA dátumnak ÉÉÉÉ-HH-NN formátumúnak kell lennie.
invalid_default_companyAz alapértelmezett cégnek az Ön cégei közül kell lennie.
invalid_dicAdjon meg érvényes DIČ-et (10 számjegy, opcionálisan SK előtaggal) vagy IČ DPH-t.
invalid_directionA bizonylat iránya elküldött vagy beérkezett lehet.
invalid_due_daysA fizetési határidő 0 és 365 nap között lehet.
invalid_emailAdjon meg egy érvényes e-mail-címet.
invalid_feed_urlA feed URL-jének https:// előtaggal kell kezdődnie.
invalid_icoAdjon meg érvényes IČO-t (8 számjegy) vagy cégjegyzékszámot.
invalid_idAdjon meg szlovák IČ DPH-t vagy DIČ-et (pl. SK2121358349), vagy Peppol ID-t (pl. 0245:2121358349).
invalid_idsA bizonylatok listája érvénytelen.
invalid_inviteA meghívó érvénytelen vagy már felhasználták.
invalid_ip_entryA lista érvénytelen elemet tartalmaz. IP-címek (pl. 185.76.8.211) és CIDR-tartományok (pl. 185.76.8.0/24) engedélyezettek.
invalid_keyA közvetítői kulcs 3 és 40 karakter közötti lehet: kisbetűk, számjegyek és kötőjelek.
invalid_limitA limitnek legalább 1-nek kell lennie, vagy üresnek (alapértelmezett érték).
invalid_linkA bejelentkezési link érvénytelen vagy lejárt. Kérjen újat.
invalid_localeNem támogatott nyelv.
invalid_monthA hónapnak ÉÉÉÉ-HH formátumúnak kell lennie.
invalid_notification_emailAz egyik cím nem érvényes e-mail:
invalid_notify_eventIsmeretlen értesítési esemény.
invalid_notify_localeAz e-mailek nyelve szlovák, angol, német vagy magyar lehet.
invalid_notify_modeIsmeretlen értesítési mód. Válasszon: minden esemény, napi összefoglaló, heti összefoglaló vagy nincs.
invalid_passwordHibás jelszó.
invalid_patternA számozási formátum legfeljebb 64 karakter lehet, és pontosan egyszer tartalmazhatja a {N}, {NNN} vagy {NNNN} sorszámot.
invalid_payloadA számla (XML) hiányzik vagy túl nagy.
invalid_personaIsmeretlen fiókszerepkör.
invalid_phoneA telefonszámot +421 9xx xxx xxx formában adja meg (számjegyek, szóközök, esetleg kötőjelek).
invalid_prefsA megjelenítési beállítások érvénytelen értéket tartalmaznak, és nem sikerült menteni őket.
invalid_receiverA címzettnek séma:érték formátumú Peppol azonosítóval kell rendelkeznie (pl. 0245:2121358349).
invalid_requestHiányoznak kötelező adatok (pl. cégnév, 10 számjegyű DIČ, érvényes e-mail vagy végpont URL).
invalid_roleA szerepkör adminisztrátor, tag vagy csak olvasás lehet.
invalid_seqA következő sorszámnak legalább 1-nek kell lennie.
invalid_sessionÉrvénytelen beszélgetés. Töltse újra az oldalt, és próbálja újra.
invalid_signatureA fizetési értesítést nem sikerült ellenőrizni.
invalid_signupA regisztráció már nem érvényes vagy lejárt. Kezdje újra a regisztrációt.
invalid_sortIsmeretlen rendezés.
invalid_stateIsmeretlen állapot.
invalid_statusIsmeretlen státusz.
invalid_tagA címke nem lehet üres.
invalid_tokenA link érvénytelen vagy már felhasználták.
invalid_vpds_urlA kiválasztási linknek https://vpds.financnasprava.sk/ előtaggal kell kezdődnie.
invalid_webA webcímnek érvényes címnek kell lennie (https://...).
invalid_webhook_urlA webhook URL-nek érvényes https:// címnek kell lennie (legfeljebb 512 karakter).
invalid_windowAz időablak érvénytelen: a kezdetnek a vég előtt kell lennie, és legfeljebb 31 nap lehet.
invalid_xmlA bizonylat XML-je nem olvasható (sérült fájl vagy nem engedélyezett DOCTYPE deklaráció).
invite_email_mismatchEz a meghívó másik e-mail-címre szól. Jelentkezzen be azzal a fiókkal, amelyre a meghívó érkezett.
invite_expiredA meghívó lejárt. Kérjen újat.
ip_not_allowedErről az IP-címről a bejelentkezés nem engedélyezett ehhez a fiókhoz.
lead_no_emailA lead nem rendelkezik e-mail-címmel, nem kereshető meg.
lead_not_contactableCsak új állapotú lead kereshető meg.
lead_not_foundA lead nem található.
link_goneEz a link már nem érvényes (lejárt, visszavonták, vagy a bizonylat tartalma már nincs tárolva).
lookup_unavailableA nyilvántartás vagy az ellenőrző szolgáltatás jelenleg nem érhető el. Próbálja újra kis idő múlva.
malformed_requestA kérés formátuma érvénytelen. Töltse újra az oldalt, és próbálja újra.
manager_requiredEzt a módosítást csak a cég tulajdonosa vagy adminisztrátora végezheti el.
member_is_ownerEz a felhasználó a cég tulajdonosa. A tulajdonjog a cég átruházásával változik.
member_not_foundA tag nem található.
members_fullA cég elérte a tagok maximális számát.
method_not_allowedEz a művelet nem támogatott ezen a címen.
mfa_already_enabledA kétfaktoros hitelesítés már be van kapcsolva.
mfa_code_invalidA kód nem egyezik. Próbálja az alkalmazás aktuális kódját vagy egy tartalék kódot.
mfa_not_enabledA tartalék kódok a kétfaktoros hitelesítéshez tartoznak. Először kapcsolja be.
mfa_not_startedElőször indítsa el a kétfaktoros hitelesítés beállítását.
mfa_requiredAdja meg a hitelesítő alkalmazás kódját.
migration_code_liveAz előző migrációs kód még érvényes. Először vonja vissza.
migration_code_noneNincs aktív migrációs kód kérés.
migration_code_pendingMár folyamatban van egy migrációs kód kérés.
migration_code_rejectedAz SMP elutasította a migrációs kódot. Ellenőrizze a korábbi szolgáltatónál; a kódok egyszer használhatók és időben korlátozottak.
migration_code_requiredAdja meg a korábbi szolgáltató migrációs kódját.
migration_rejectedA központi SMP elutasította az átvételi kérést. Próbálja újra, vagy írjon nekünk.
missing_fieldsA név és a tulajdonos e-mail-címe kötelező.
missing_parameterA kérésből hiányzik egy kötelező paraméter.
mls_not_availableEhhez a bizonylathoz még nem érhető el kézbesítési igazolás (MLS).
name_requiredAdja meg a nevet (ügyfélnév vagy cégnév).
no_billing_accountMég nincs számlázási fiókja. Először állítson be előfizetést.
no_bodyA bejegyzésnek nincs tárolt kéréstörzse, nem játszható újra.
no_contentA bizonylat tartalma már nem érhető el, a link nem adható ki.
no_dicA cégnek nincs DIČ-je (adószáma).
no_documentsA kiválasztott időszakban nincsenek bizonylatok (tárolt XML-lel).
no_evidenceEhhez a bizonylathoz nincs tárolva sem az eredeti XML, sem kézbesítési igazolás.
no_idsVálasszon ki legalább egy bizonylatot.
no_ownerA cégnek nincs tulajdonosa. Használja a közvetlen átsorolást.
no_secretAz aláírókulcs még nem létezik. Először állítsa be az értesítési webhook URL-t.
no_verification_tokenA cégnek nincs tárolt ellenőrző adata a Pénzügyi Igazgatóságtól; az SMP-regisztrációhoz szükséges.
not_a_resellerEz a fiók nem tulajdonosa közvetítői bejegyzésnek.
not_acceptableA szerver csak JSON formátumban válaszol.
not_available_for_white_labelViszonteladói márka alatti cégeknél ez a lehetőség nem érhető el.
not_failedCsak sikertelen webhookok ismételhetők meg.
not_foundA bejegyzés nem található.
not_resellerEz a fiók nem tulajdonosa közvetítői bejegyzésnek.
not_sandbox_rowEzt a közvetítői bejegyzést adminisztrátor kezeli, a fiókból nem kapcsolható ki.
note_too_longA megjegyzés legfeljebb 200 karakter lehet.
notification_emails_too_longA címek együtt túl hosszúak (legfeljebb 256 karakter).
owner_not_foundEhhez az e-mail-címhez nem létezik tulajdonosi fiók. Először hozza létre.
owner_of_companiesA fiók törléséhez először kérjen migrációs kódot, vagy jelentkeztesse ki a céget a Peppol hálózatból. Ezután véglegesen törölheti a fiókot.
owner_requiredEzt a műveletet csak a cég fiókjának tulajdonosa végezheti el.
participant_not_registeredA cégnek még nincs bejegyzése a központi SMP-ben a Verteco alatt; a közzétételt a regisztráció után állítsa be.
partner_managedEnnek a cégnek a szerződéses jogviszonyát a közvetítője kezeli; a szerződés igazolását ő állítja ki.
party_missing_in_textAz aláírandó szöveg nem tartalmazza a cég azonosítását. Töltse újra az oldalt, és próbálja újra.
password_already_setMár van beállított jelszava. Használja a jelszómódosítást.
password_not_setA fiókhoz nincs jelszó beállítva. Állítson be egyet a Beállításokban, majd próbálja újra.
password_requiredElőször állítson be jelszót (Biztonság), ezután megerősítheti ezt a módosítást.
payment_mismatchA fizetést nem sikerült a kérelemhez rendelni. Kérjük, lépjen kapcsolatba velünk.
payment_unconfiguredA fizetés jelenleg nem érhető el. Próbálja később, vagy lépjen kapcsolatba velünk.
pdf_unavailableA PDF-készítés átmenetileg nem érhető el. Próbálja újra kis idő múlva, vagy használja a Nyomtatás / PDF funkciót.
profile_too_longA profil egyik mezője túl hosszú. Rövidítse le a szöveget.
public_link_existsA bizonylatnak már van aktív linkje. Ha újat szeretne, válassza a link cseréjét.
public_links_disabledA cégnél nincs bekapcsolva a számlák bejelentkezés nélküli letöltése. A tulajdonos a cég adatainál (Adatarchívum) kapcsolhatja be.
public_links_unavailableA nyilvános bizonylatlinkek jelenleg ki vannak kapcsolva.
rate_limitedTúl sok kérés. Próbálja újra kis idő múlva.
read_only_memberA csak olvasás szerepkör nem módosíthatja a bizonylatok állapotát vagy címkéit.
received_onlyNyilvános link csak beérkezett bizonylatokhoz adható ki.
receiving_toggle_cooldownA fogadás óránként legfeljebb háromszor kapcsolható. A következő módosítás akkor lehetséges, amikor az utolsó három módosítás közül a legrégebbitől eltelt egy óra.
registered_elsewhereA résztvevő továbbra is másik szolgáltatónál van regisztrálva; a kód nem indította el az átvételt.
renderer_unavailableAz előnézet most nem készíthető el (a megjelenítő szolgáltatás újraindul). Próbálja újra egy perc múlva; a számla küldését ez nem akadályozza.
reply_already_cancelledEzt a választ időközben egy kolléga visszavonta.
reply_already_sentEzt a választ már elküldtük, nem vonható vissza és nem küldhető újra.
reply_not_foundAz ütemezett válasz nem található.
reply_to_invalidAz eredménycím nem érvényes e-mail-cím.
representative_incompleteAdja meg a jogosult személy nevét és beosztását is, vagy hagyja mindkét mezőt üresen.
request_rejectedA kérés nem engedélyezett karaktert tartalmaz egy fejlécben vagy az URL-ben. Ha API-kulcsot küldött, használja a létrehozáskor megjelenített teljes client_secret értéket (a lista csak az elejét mutatja …-tal) és egyenes idézőjeleket.
reseller_not_foundA közvetítő nem található.
reseller_ownerAz Ön fiókja egy közvetítői bejegyzés tulajdonosa. Egyeztesse az átadását az ügyfélszolgálattal; ezután törölheti a fiókot.
reseller_requiredEz a rész csak bejegyzett közvetítő fiókjához érhető el.
sbd_not_availableEhhez a bizonylathoz nincs tárolt szállítási boríték (SBDH). Töltse le helyette a bizonylat XML-jét.
schedule_not_foundEz a rendszeres export már nem létezik.
sender_email_invalidA feladó címe nem érvényes e-mail-cím.
sender_email_systemAutomatikus postafiókok (noreply, postmaster, mailer-daemon…) nem adhatók hozzá; személy vagy számlázó rendszer postafiókját használja.
sender_existsEz a cím már szerepel az engedélyezett feladók között.
sender_limitLegfeljebb 20 engedélyezett feladó adható meg.
sending_not_verifiedA küldés nem engedélyezett: a cégnek még nincs ellenőrzött szolgáltatóválasztása a Pénzügyi Igazgatóság portálján.
sending_pausedEnnél a cégnél a küldést a kezelő fiók szüneteltette. A számlák fogadása tovább működik.
service_unavailableA szolgáltatás átmenetileg nem érhető el. Kérjük, próbálja újra kis idő múlva.
session_fullEz a beszélgetés túl hosszú. Töltse újra az oldalt, és kezdjen újat.
session_not_foundAz eszköz nem található.
shoptet_feed_blockedA cím privát hálózatra mutat. Illessze be webáruháza nyilvános címét.
shoptet_feed_httpA Shoptet elutasította a címet. Ellenőrizze a címben lévő hasht, és hogy az export nincs-e egy IP-címre korlátozva.
shoptet_feed_invalid_xmlAz export válasza nem érvényes XML. Ellenőrizze a címet a Shoptetben.
shoptet_feed_not_configuredA Shoptet-kapcsolat még nincs beállítva.
shoptet_feed_not_orders_xmlEz nem Shoptet rendelésexport: a címnek /export/orders.xml-re kell végződnie.
shoptet_feed_not_system_xmlIllessze be a „Rendszer Shoptet XML” export címét (a címben patternId=-11 szerepel). Saját sablonokat, CSV-t és XLS-t nem támogatunk.
shoptet_feed_too_largeAz export válasza túl nagy (10 MB felett). A rendeléseket hetenként kérjük le, így az ilyen válasz általában termékexport, nem rendelésexport. Ellenőrizze az export típusát.
shoptet_feed_unreachableA Shoptet export nem válaszolt. Próbálja meg kicsit később; a Shoptet egyszerre csak egy exportot engedélyez.
sidlo_incompleteA székhelynek tartalmaznia kell az utcát, az irányítószámot és a várost, pl. „Ulica 1, 010 01 Mesto”.
smp_cancel_failedA kód visszavonása a központi SMP-ben nem sikerült. Próbálja újra kis idő múlva, vagy írjon a [email protected] címre.
smp_deregister_failedA Peppol hálózatból való kijelentkeztetés nem sikerült. Próbálja újra kis idő múlva.
smp_held_elsewhereEnnek a cégnek a regisztrációját másik szolgáltató tartja. Tőlünk nem szükséges migrációs kód.
smp_not_testA tesztkörnyezet nincs megfelelően összekötve a teszt SMP-vel. Kérjük, írjon nekünk.
smp_unavailableA központi SMP jelenleg nem válaszol; próbálja újra kis idő múlva.
smtp_fromAddress_requiredAdja meg a küldő címét.
smtp_fromAddress_too_longA küldő címe túl hosszú.
smtp_from_forbiddenA küldő címe nem lehet Verteco-domainen.
smtp_from_invalidA küldő címe nem érvényes e-mail-cím.
smtp_from_not_yoursA küldő címének a cége domainjén kell lennie (mint a tulajdonos, egy tag vagy a cég értesítési e-mailje).
smtp_from_takenEzt a küldő címet már másik cég használja.
smtp_host_blockedA szerver nem található a DNS-ben, vagy nem érhető el nyilvánosan (belső címek nem engedélyezettek).
smtp_host_invalidA szerver domainnevét adja meg (pl. smtp.ceg.hu), ne IP-címet.
smtp_host_requiredAdja meg az SMTP-szerver címét.
smtp_host_too_longAz SMTP-szerver címe túl hosszú.
smtp_incompleteTöltse ki a szervert, a portot, a felhasználónevet, a jelszót és a küldő címét.
smtp_password_invalidA jelszó nem tartalmazhat szóközt vagy sortörést.
smtp_password_requiredAdja meg az SMTP-fiók jelszavát (szerverváltásnál újra meg kell adni).
smtp_port_not_allowedAz engedélyezett portok: 465, 587 és 2525.
smtp_security_invalidA biztonsági módnak STARTTLS-nek vagy SSL-nek kell lennie.
smtp_test_cooldownTeszt e-mail percenként egyszer küldhető. Próbálja újra kis idő múlva.
smtp_test_failedA teszt e-mailt nem sikerült elküldeni. Ellenőrizze az SMTP-szerver beállításait.
smtp_username_invalidA felhasználónév nem tartalmazhat szóközt vagy sortörést.
smtp_username_requiredAdja meg az SMTP-fiók felhasználónevét.
smtp_username_too_longA felhasználónév túl hosszú.
state_not_for_directionEz az állapot nem lehetséges a bizonylat irányához (beérkezett vagy elküldött).
stripe_errorA fizetési kaput nem sikerült megnyitni, vagy a fizetést nem sikerült ellenőrizni. Kérjük, próbálja újra.
support_not_on_sandboxAz ügyfélszolgálat az éles portálon (peppol.verteco.digital) működik, nem a tesztkörnyezetben.
tag_too_longA címke túl hosszú.
target_blockedA célfiók zárolva van, az átruházás nem lehetséges.
team_fullElérte a csapattagok maximális számát.
termination_confirmedA megerősített felmondás az alkalmazásból nem vonható vissza. Írjon a [email protected] címre.
termination_pendingMár folyamatban van egy felmondási kérés. Erősítse meg az e-mailben kapott linkkel, vagy vonja vissza.
terms_not_acceptedA fiók létrehozásához el kell fogadnia az általános szerződési feltételeket.
test_document_in_productionPróbabizonylatokat (TEST-… vagy VITAJTE-… számmal) 2027. január 1-jétől nem küldünk az éles hálózaton. Próbákhoz használja a test.peppol.verteco.digital tesztkörnyezetet.
ticket_link_expiredA kérés több mint 90 napja lezárt, a link már nem érvényes. Írjon nekünk újra a [email protected] címre.
ticket_not_foundA kérés nem található, vagy a link érvénytelen.
token_companies_requiredVálasszon legalább egy céget, amelyhez a kulcs hozzáférhet.
token_company_not_allowedEnnek az API-kulcsnak nincs hozzáférése ehhez a céghez (csak kiválasztott cégekhez jött létre).
token_company_not_memberA kulcs csak olyan cégekhez férhet hozzá, amelyeknek a fiókja tagja.
token_expiredA link lejárt. Kérjen újat.
token_invalidA link vagy az ellenőrző adat érvénytelen, vagy már nem érvényes.
token_limitTúl sok aktív API kulcsa van (max. 50). Vonja vissza a nem használtakat, és próbálja újra.
token_not_allowedEz a beállítás csak a portálra bejelentkezve módosítható, API kulccsal nem.
token_not_foundAz API kulcs nem található.
token_not_revokedEz az API kulcs aktív, nincs mit visszaállítani.
token_restore_expiredA kulcsot több mint 7 napja vonták vissza, már nem állítható vissza. Hozzon létre új kulcsot.
token_scope_invalidA kulcs hatóköre „összes” vagy „kiválasztott” lehet.
too_many_idsEgyszerre legfeljebb 500 bizonylat dolgozható fel.
too_many_notification_emailsLegfeljebb 5 e-mail-címet adjon meg.
too_many_schedulesEgy cégnek legfeljebb öt rendszeres exportja lehet. Újabb hozzáadása előtt töröljön egyet.
too_many_tagsA bizonylatnak túl sok címkéje van.
too_many_ticketsTúl sok nyitott kérése van. Kérjük, várja meg a választ.
transfer_canceledA cég átruházását visszavonták.
transfer_expiredAz átruházási link lejárt. Kérjen új átruházást.
transfer_staleA cég tulajdonjoga időközben megváltozott, az átruházást visszavontuk.
unauthorizedKérjük, jelentkezzen be újra.
unknown_documentCsak a DPA, SLA és NDA dokumentumok írhatók alá.
unsupported_documentAz előnézet csak számlát vagy jóváírást tud megjeleníteni (UBL Invoice vagy CreditNote).
unsupported_media_typeEz a tartalomtípus nem elfogadott. Küldje az adatokat JSON formátumban.
user_not_foundNem található fiók ezzel az e-mail-címmel. A felhasználónak először regisztrálnia kell.
validation_failedNéhány mező hibásan van kitöltve.
validator_unavailableAz érvényesítés jelenleg nem érhető el. Próbálja újra kis idő múlva.
verification_code_rejectedAz SMP elutasította az FS-választásból származó ellenőrző adatot; ismételje meg a választást.
verification_token_missingHiányzik az FS-választásból származó ellenőrző adat; ismételje meg a választást és próbálja újra.
verified_company_requiredA kérelmet csak legalább egy ellenőrzött céggel rendelkező fiók nyújthatja be.
version_staleA dokumentum szövege időközben megváltozott. Töltse újra az oldalt, és írja alá az aktuális változatot.
webhook_not_configuredElőször állítsa be és mentse a webhook URL-t.
webhook_url_https_requiredÉles környezetben a webhook URL-nek https://-vel kell kezdődnie (a kézbesítés ügyfélazonosítókat és aláírást tartalmaz).
webhook_url_unreachableA webhook URL-nek nyilvánosan elérhetőnek kell lennie. A localhost és a belső hálózatok nem érhetők el a szervereinkről.
white_label_owner_fixedA partneren keresztül vezetett céget a partnerfiók kezeli. További tulajdonost a partner ad hozzá a cég elengedésével, vagy a Verteco kiválasztása a Pénzügyi Igazgatóság portálján.
wrong_endpointEz nem a token végpont. Használja a POST /sapi/auth/token hívást client_id és client_secret adatokkal.
xml_not_availableEhhez a bizonylathoz nincs tárolva az eredeti XML, a tartalom már nem érhető el.
xml_requiredHiányzik a bizonylat XML-je, az előnézet nem készíthető el.
xml_too_largeA bizonylat túl nagy az előnézethez (legfeljebb 8 MB a mellékletekkel együtt).

Kérésszám-korlátok (rate limit)

Az API-t kérésszám-korlátozás védi 60 másodperces ablakban (példányonként). A korlátot és a fennmaradó keretet minden válasz fejlécekben adja vissza; túllépés esetén az API 429 Too Many Requests választ ad Retry-After fejléccel.

Rendes hívások
dinamikus korlát nagy ráhagyással, API-tokenenként (vagy munkamenetenként, egyébként IP-címenként); az aktuális értéket a RateLimit-Limit fejléc adja vissza
Hitelesítés (/auth/*)
szigorúbb korlát IP-címenként (brute force ellen; kivéve /auth/me és /auth/logout)
RateLimit-Limit
korlát az ablakban
RateLimit-Remaining
hány kérés maradt
RateLimit-Reset
másodpercek az ablak újraindulásáig
Retry-After
másodpercek a következő próbálkozásig (429 esetén)
http
HTTP/2 429 Too Many Requests
RateLimit-Limit: <limit in the window>
RateLimit-Remaining: 0
RateLimit-Reset: 37
Retry-After: 37

{ "error": "rate_limited", "message": "Too many requests. Slow down." }
Gyakorlati válaszok integrátoroknak:
  • Kedvezmények és kerekítés: az R040 (kedvezmény összege = alap × % / 100) és az R120 (sor összege = mennyiség × ár − sorkedvezmények) szabály egyaránt 0,02 € tűréssel működik; csak az R046 pontos, amely az ár szintű kedvezményre vonatkozik (PriceAmount = BaseAmount − Amount). Az egységár (BT-146), valamint a bruttó ár és az árkedvezmény (BT-147, BT-148) tizedesjegyeinek száma nincs korlátozva, minden más összegé 2. Ha a rendszere a kedvezményt az egységárra alkalmazza és kerekíti, az ár szintjén írja: PriceAmount = kerekített nettó egységár, BaseAmount = listaár, Amount = pontos különbség, sor összege = round(mennyiség × PriceAmount, 2); százalék ott nem adható meg (a sor megjegyzésébe való). A másik lehetőség a csak összeggel megadott sorkedvezmény 95-ös indokkóddal; százalékot és alapot a sorkedvezményben csak akkor adjon meg, ha alap = round(mennyiség × exportált PriceAmount, 2) és Amount = round(alap × % / 100, 2). Negatív mennyiség pozitív árral (visszáru, adózott előleg levonása) jóváírásban és számlában egyaránt megengedett. 11., 15. és 16. minta: /hu/vzory.
  • A limitek a hitelesítő adathoz kötődnek, nem az IP-hez: percenként 300 hívás API-tokenenként (SAPI: access tokenenként), az auth végpontok percenként 20 IP-nként, és védelmi felső határ percenként 600 IP-nként az /api/v1-en. Egy IP mögötti szerveroldali integrációt ez nem érint; magasabb limitet kérésre állítunk be, írja meg a várható csúcsot.
  • Kapacitás: a mennyiséget az árlista nem korlátozza, a küldés aszinkron (a hívás átadja a bizonylatot, a kézbesítés a háttérben fut), és egy kötegelt hívás egyszerre legfeljebb 100 bizonylatot fogad; tervezett csúcs esetén írja meg előre a várható mennyiséget, és megemeljük a kulcs limitjét.
  • A polling teljes értékű út: GET /sapi/document/sent és /receive ?since és ?until paraméterrel 1–5 percenként; a webhook kiegészítés, nem feltétel.
  • Időbélyegek (76a § (2) bek. d) pont): sentAt = átadás a kézbesítő szolgálatnak (ezzel a 85o § (11) bek. szerint a kiállító kötelezettsége teljesül), deliveredAt = a fogadó Access Point MLS-megerősítése, fsReportedAt = adatszolgáltatás az FS felé; fogadott dokumentumoknál creationDateTime = átvétel. Mindhárom szerepel a /sapi/document/sent minden sorában, a /sapi/document/sent/{id} részletben és a webhookokban (plusz occurredAt).
  • PDF: a GET /sapi/document/receive/{id}/pdf és a GET /sapi/document/sent/{id}/pdf (a links.pdf mezőben is) a szállító PDF-jét adja vissza, ha a bizonylat tartalmazza, egyébként az XML-ből generált PDF-et; nyomtatható HTML a …/html címen (portál ?format=html).
  • C#/.NET és más nyelvek: a klienst az OpenAPI-ból generálja (NSwag, Kiota, openapi-generator); saját NuGet-csomagot nem szállítunk.
  • Kulcs hatóköre: az API-kulcs létrehozásakor (API-kulcsok oldal) kiválasztja, hogy a fiók összes cégére vonatkozzon (a később hozzáadottakra is) vagy csak a kijelöltekre. Más cégre irányuló hívás 403 token_company_not_allowed választ ad (SAPI-SK: SAPI-AUTH-003); a kulcs rotálása megőrzi a hatókört. Csak olvasható kulcs egyelőre nincs.
  • Alapútvonal: minden SAPI-SK hívás, a bővítéseinket is beleértve (GET /sapi/document/sent, GET /sapi/document/receive/{id}/pdf, GET /sapi/discovery), a /sapi alatt fut ugyanazzal az access tokennel és az X-Peppol-Participant-Id fejléccel. A SAPI-… kód nélküli 401 „Authentication required” válasz azt jelenti, hogy az útvonal a /sapi-n kívül van (például /api/v1/document/sent); az /api/v1 a portál API-ja, és Bearerként a vpt_ kulcsot várja, nem SAPI access tokent.
  • A kiállítás dátumát (BT-2) nem vetjük össze az átadás napjával: a bizonylat abban a pillanatban kerül a hálózatba, amikor megkapjuk, ezért a kiállítás napján küldje, és ne sorolja éjfélen túl várólistába. A devizás bizonylatot a Pénzügyi Igazgatóságnak a BT-110 és BT-111 (TaxCurrencyCode EUR) szerinti, euróban megadott adóösszeggel jelentjük, ahogy a 03. minta mutatja.
  • Teljesítés dátuma: az XML-ben a BT-72 (cac:Delivery/cbc:ActualDeliveryDate) hordozza; az átvett fizetésről szóló adóbizonylat a BT-72-ben a fizetés dátumát viszi (12. minta). Saját szolgáltatási számláink és a portálból küldött bizonylatok mindig tartalmazzák, akkor is, ha megegyezik a kiállítás dátumával (az áfatörvény 74. § (1) d) pontja csak eltérés esetén követeli meg). Olvasáskor vegye a BT-72-t, ha hiányzik, a BT-7-et (cbc:TaxPointDate), különben a kiállítás dátumát.

Kérésszám-keretek (aktuális értékek)

Az ablak 60 másodperc. Minden válasz tartalmazza a RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset és RateLimit-Policy (limit;w=ablak másodpercben) fejlécet, a 429 a Retry-After-t is. Az értékek bejelentés nélkül nőhetnek; a fejléceket olvassa, ne ezt a táblázatot.

HívásokKeret kulcsaLimit
/sapi/* és /api/mcp tokennela token mögötti client_id (az access token forgatása nem nullázza)300 / perc
/api/v1/* API-kulccsal vagy munkamenettelkulcs (hash) vagy munkamenet300 / perc
POST /sapi/auth/token, renew, revokeIP60 / perc
/api/v1/auth/* (bejelentkezés, visszaállítás)IP20 / perc
Nyilvános eszközök (/api/v1/public/peppol-check, validátor)IP15 / perc
Tömeges ellenőrzés (/public/peppol-check/batch)IP6 / perc
Élő hálózati lekérdezés (peppol-check, /sapi/discovery, MCP check_participant)IP vagy kulcs; plusz az egész portál40 / óra hívónként és 150 / óra összesen; a kereten túl az éjszakai felmérés válaszol (source: index), a tömeges ellenőrzés nincs korlátozva
Regisztráció, elfelejtett jelszó, kapcsolati űrlapIP15 / óra
Védelmi plafon minden ellenőrizetlen bearerhezIP600 / perc
http
HTTP/2 200
RateLimit-Limit: 300
RateLimit-Remaining: 287
RateLimit-Reset: 41
RateLimit-Policy: 300;w=60
A /sapi 429-es válasza az error és message mellett code SAPI-SYS-003, retryable true és correlation_id mezőt is hoz. Több bérlőt egy IP mögül kiszolgáló platform: írja meg a várható csúcsot, a keretet egyedileg állítjuk.

API-tokenek

Átlátszatlan (opaque) vpt_… tokenek szerver-szerver hozzáféréshez. A nyílt szöveg csak egyszer jelenik meg, a létrehozáskor. Mentse el. Mi csak a SHA-256 hash-t és egy 12 karakteres előtagot tárolunk a megjelenítéshez.

GET/tokensmunkamenet / token

Az Ön aktív tokenjeinek listája (a titok nélkül), createdAt szerint csökkenő sorrendben.

POST/tokensmunkamenet / token

Tokent hoz létre; a nyílt szöveget adja vissza (csak egyszer).

MezőTípusKötelezőLeírás
namestringigena token neve, max. 128
curl
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":"…" }
DELETE/tokens/{id}munkamenet / token

Visszavonja a tokent. 204-et ad vissza.

Hibák: token_not_found (404)

Cégek

Az Ön által kezelt, cégjegyzékszámmal (IČO) / áfaazonosítóval (IČ DPH) azonosított cégek. A hozzáférés a tagsághoz kötött: csak azokat a cégeket látja, amelyeknek tagja. A cég létrehozója lesz annak owner-e.

GET/companiesmunkamenet / token

Azoknak a cégeknek a listája, amelyeknek tagja (az Ön szerepkörével).

POST/companiesmunkamenet / token

Céget ad hozzá; Ön lesz a tulajdonosa, status = pending_verification.

MezőTípusKötelezőLeírás
icostringigenpontosan 8 számjegy
dicstringigenadószám SK + 10 számjegy formában (pl. SK2121358349); nem áfaalany csak a 10 jegyű DIČ-et küldi, az SK-t mi tesszük elé
legalNamestringigenhivatalos (cég)név, max. 500
registeredAddressstringnema székhely címe, max. 1000
curl
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" }

Hibák: ico_taken (409) · validation_failed (400)

GET/companies/{id}munkamenet / token

A cég részletei (tagnak kell lennie).

PUT/companies/{id}owner / admin

Frissíti a céget. Az IČO nem módosítható (meg kell egyeznie a meglévő értékkel).

Hibák: forbidden (403) · ico_immutable (400) · company_not_found (404)

A status mező

pending_verification
létrehozás után; a küldés még nincs feloldva
active
ellenőrzött, a küldés feloldva

Tagi szerepkör

owner
a cég létrehozója (teljes hozzáférés)
admin
adminisztrátor (szerkesztés, webhookok, ellenőrzés)
member
tag (olvasás)
viewer
csak olvasás
Az „owner / admin” jelölésű műveletek az owner és az admin szerepkör számára is elérhetők (cégkezelő).

Küldési ellenőrzés (ellenőrző token, Verifikačný údaj)

Küldés előtt a céget ellenőrizni kell az ellenőrző tokennel (Verifikačný údaj, VÚ), amely a Szlovák Köztársaság Pénzügyi Igazgatósága (Finančná správa, FS) által kiállított aláírt token. Sikeres ellenőrzés után a cég status mezője active értékre vált, és a küldés feloldódik.

POST/companies/{id}/verificationowner / admin

Az ellenőrző token (Verifikačný údaj) önálló ellenőrzése. Siker esetén a status értékét active-ra állítja.

MezőTípusKötelezőLeírás
tokenstringigenVÚ = hexadecimális aláírás (prod/pPFS 1024 hex, test/tPFS 768 hex)
curl
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" }

Hibák: company_dic_missing (400) · token_invalid (400) · forbidden (403)

Bizonylatok

A cég Peppol bizonylatainak (fogadott és küldött) naplója. Ahogy a számlák áthaladnak a hozzáférési ponton (Access Point), úgy telik meg. A cégtagsághoz kötött, createdAt szerint csökkenő sorrendben.

GET/companies/{id}/documentsmunkamenet / token

A cég bizonylatainak listája. Opcionális szűrő: ?direction=sent|received.

curl
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":"…" } ]
GET/companies/{id}/documents/{docId}munkamenet / token

Egy bizonylat részletei.

Hibák: document_not_found (404)

GET/companies/{id}/documents/{docId}/downloadmunkamenet / token

A számla önálló, nyomtatható HTML változata. ?inline=1 → a böngészőben jeleníti meg, egyébként letölti.

text/html típust ad vissza, a Content-Disposition fejlécben a fájlnév faktura-<číslo>.html (číslo = a számla száma).

SAPI-SK 1.0 (nemzeti interfész)

A SAPI-SK a szabványosított nemzeti REST interfész az ügyfél/ERP-rendszer és a hozzáférési pont (Access Point) között (sapi-sk.sk). Teljes körűen implementáljuk. Ez azt jelenti, hogy Ön nincs a saját API-formátumunkhoz kötve, és az integrációt egyszer írja meg, bármely SAPI-SK hozzáférési ponthoz.

Alap-URL (base URL)
https://peppol.verteco.digital/sapi
Hitelesítés
OAuth2 client_credentials → rövid élettartamú access token (JWT)
client_id
az Ön API-tokenjének UUID-ja (az API-tokenek szakaszban / a vezérlőpulton látható)
client_secret
maga a portálról származó vpt_… token
Verzió
1.3 (10 művelet: 4× hitelesítés, 6× bizonylatok)
A SAPI access token külön kulccsal van aláírva (nem a portál vpt_ tokenje és nem is munkamenet). Az API-token visszavonása a portálon azonnal érvényteleníti az /auth/token és az /auth/renew végpontot is.

Sandbox (próbakörnyezet)

Kipróbálná a SAPI-SK-t regisztráció nélkül és kockázat nélkül? Használja a nyilvános sandbox hitelesítő adatokat. A sandbox pontosan úgy validálja a kéréseket, mint az éles környezet, de soha semmit nem küld a Peppol hálózatba, és nem dolgozik valódi adatokkal; valósághű mock válaszokat ad vissza. Ideális fejlesztéshez, CI-hoz és az integráció bevezetéséhez.

client_id
sandbox
client_secret
sandbox
send
teljes szerződésvalidáció + mock 202 (semmi nem kerül kézbesítésre)
receive
1 mintabizonylat sandbox-doc-0001 a feldolgozás és az acknowledge teszteléséhez
curl
# 1) sandbox token (no registration required)
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 send: it is validated, but NOTHING is actually delivered
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) sample inbox + detail of the sample document
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>'
A sandbox tokenek elszigeteltek: soha nem kézbesítenek a Peppol hálózatba, és soha nem látnak valódi bizonylatokat. Éles küldéshez használja a portálról származó client_id/client_secret adatokat (lent).

Hitelesítés

POST/sapi/auth/tokenclient_credentials

A client_id + client_secret párost access tokenre (15 perc) és refresh tokenre (30 nap) cseréli. Tárolja a tokent, és használja a teljes 15 percig: minden hívásnál új tokent kérni szükségtelen többletterhelés (a kérésszám-korlát az /auth/token hívásokat is számolja).

curl
curl -X POST https://peppol.verteco.digital/sapi/auth/token \
-H 'Content-Type: application/json' \
-d '{ "client_id": "<token UUID>", "client_secret": "vpt_8f2a…",
      "grant_type": "client_credentials" }'
# 200 OK
{ "access_token": "eyJhbGciOi…", "token_type": "Bearer",
"expires_in": 900, "refresh_token": "eyJhbGciOi…" }

Hibák: SAPI-AUTH-001 (401) · SAPI-AUTH-003 (401: a kulcs engedélyezőlistáján kívüli IP-cím) · SAPI-VAL-001 (400)

GET/sapi/auth/token/statusBearer (access)

Az access token érvényessége és lejárata; should_refresh = true, ha kevesebb mint 3 perc van hátra.

POST/sapi/auth/renewrefresh token

Új access + refresh tokent ad ki. Sikertelen, ha a mögöttes API-tokent visszavonták.

json
// body
{ "refresh_token": "eyJhbGciOi…" }
POST/sapi/auth/revoke–

Mindig sikert ad vissza (RFC 7009). A végleges leállító kapcsoló az API-token visszavonása a portálon.

Bizonylat küldése

POST/sapi/document/sendBearer (access)

Peppol üzleti bizonylatot (UBL / BIS 3.0) küld a címzettnek a hozzáférési pontunkon keresztül. A küldés fail-closed: a cégnek ellenőrzött ellenőrző tokennel (Verifikačný údaj) kell rendelkeznie. A válasz tartalmazhat egy additív warnings[] tömböt a /document/validate hívással azonos, nem blokkoló figyelmeztetésekkel (TEST- szám, ugyanazon fiók másik cége címzettként, a küldés napjától eltérő kiállítási dátum); a figyelmeztetés soha nem blokkolja a bizonylatot.

Kötelező fejlécek:

FejlécLeírás
AuthorizationBearer <access_token>
X-Peppol-Participant-Ida résztvevő, akinek a nevében küld (pl. 0245:2121358349, a DIČ (szlovák adóazonosító szám) számjegyei az "SK" előtag nélkül)
Idempotency-Keyszámlánként egy kulcs, valami állandóból származtatva (pl. az Ön rendszere + a számla azonosítója vagy száma); az ismételt hívás vele az eredeti eredményt adja vissza, és soha nem kézbesít kétszer, ugyanahhoz a számlához használt új kulcs ezt a védelmet megkerüli. A kulcs cégenként érvényes (X-Peppol-Participant-Id). Kivétel: ha az első kísérlet nem jutott be a hálózatba (validációs hiba, hiányos kérés, a címzett nem publikálja a dokumentumtípust, az Access Point feladta az ismétlést, átviteli hiba failed státusszal), vagy undeliverable lett, ugyanaz a kulcs újra elvégzi a küldést, így a „javítsd és küldd újra” ugyanazzal a számlaszámmal is működik; az eljárás lent, a Javítás és újraküldés megjegyzésben. A kulcs soha nem jár le: a dokumentum rekordján tároljuk, amelyet tartósan megőrzünk (a megőrzési idő csak a tartalmat törli), így az azonos kulccsal való ismétlés hónapok múlva is az eredeti eredményt adja vissza.
curl
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": "…" }
# when status is "REJECTED", the response also carries a "detail" field
# with the rejection reason (validation rules, e.g. BR-CO-15)
metadata vs. UBL: a metadata mezői útválasztási és technikai mezők: a documentId az Ön belső azonosítója, nem a számla száma. Az üzleti adatok (számlaszám cbc:ID, kiállítás dátuma, fizetési határidő, teljesítés dátuma, pénznem, összeg) közvetlenül az UBL payloadból származnak; ezekből semmit nem küld a metadata mezőben, és a portálon való megjelenítéshez és a webhookokhoz mindig az UBL az igazság forrása. documentTypeId: a teljes busdox-docid-qns azonosító; a puszta namespace-t vagy az önálló CustomizationID-t a payloadból levezetett típusra normalizáljuk, a payloadnak ellentmondó típust SAPI-VAL-001 hibával elutasítjuk; a résztvevő sémájának az EAS-listából kell származnia.

Hibák: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-VAL-001 (400) · SAPI-PROC-001 (502) · SAPI-PROC-002 (503) · SAPI-PROC-500 (500: ne próbálja újra, jelentse a correlation_id-t)

HTTP-kód és verdikt. A nemzeti SAPI-SK szerződés szerint a küldés mindig 202-vel válaszol, a verdikt a törzsben van (status ACCEPTED vagy REJECTED). Ha azt szeretné, hogy a HTTP-kód is hordozza a verdiktet, küldje a Prefer: handling=strict fejlécet (RFC 7240): a szinkron elutasítás ekkor 422-vel és a SAPI hibaborítékkal tér vissza (SAPI-VAL-002 validációs hibánál, SAPI-RES-003, ha a címzettnek nem kézbesíthető; a details[] tartalmazza a providerDocumentId-t és a detail-t), a válasz pedig Preference-Applied: handling=strict fejlécet kap. Az ACCEPTED nem változik. Az Access Pointnak való átadás előtt ugyanazt az SML-lekérdezést végezzük, mint ő. A dokumentumot először validáljuk: csak érvényes dokumentumot veszünk át és jelentünk, az érvénytelen REJECTED-et kap validation_failed okkal akkor is, ha a címzett nincs a hálózatban. A Peppol-hálózatban egyáltalán nem szereplő címzett ACCEPTED-et jelent undeliverable: true jelzéssel: a dokumentumot átvettük és a kézbesítéstől függetlenül jelentjük a Pénzügyi Igazgatóságnak (§ 85o (11) bek., FS FAQ 9/DPH/2025/IM, II. rész, 9. példa), de senkinek nem kézbesül; a GET /sapi/document/sent hívásban undeliverable státuszú, a webhook invoice.undeliverableeseményt kap, e-mailt senkinek nem küldünk, és ugyanaz az Idempotency-Key újra küld, amint a címzett azonosítóját kijavítja, vagy a címzett regisztrál (az eljárás lent, a Javítás és újraküldés megjegyzésben). A hálózatban szereplő, de a dokumentumtípust nem publikáló címzett azonnal REJECTED-et kap, kézbesítési kísérlet nélkül. A retrying: true ACCEPTED mellett azt jelenti, hogy az első kézbesítési kísérlet sikertelen volt (pl. átmenetileg elérhetetlen SMP), és az Access Point maga ismétli, általában 20 percen belül; a detail az okot hordozza, a végső verdikt a GET /sapi/document/sent hívással vagy webhookon érkezik.
Javítás és újraküldés. Minden kísérlet, amelyet az API feldolgozásra átvesz (202-es válasz, handling=strict esetén 422 is), saját providerDocumentId-t kap, az elutasított is.
  • REJECTED a küldés előtti ellenőrzésünknél (validációs hiba, hiányos kérés, a címzett nem publikálja a dokumentumtípust, az SMP-bejegyzésében nincs végpont a típushoz, az Access Point feladta az ismétlést): semmi nem jutott be a hálózatba, semmi nem kézbesült, és semmit nem jelentünk a Pénzügyi Igazgatóságnak. Javítsa az adatokat, és küldje el a dokumentumot újra ugyanazzal az Idempotency-Key-jel. Az új kísérlet új providerDocumentId-t kap; az első rekord a küldött bizonylatok listájában rejected státusszal és az okkal marad, csak a sikertelen kísérlet nyomaként, és nem törölhető. A számlát a rendszerében mindig a legutolsó providerDocumentId-hez kösse. A számlaszám maradhat ugyanaz, a számla a törvény értelmében még nem lett kiállítva. A kiállítás dátuma (BT-2) azonban annak a napnak kell lennie, amikor a számla ténylegesen elmegy: az elektronikus számla azon a napon számít kiállítottnak, amikor átadják a kézbesítő szolgálatnak, és legkésőbb 15 nappal a teljesítés vagy a fizetés beérkezése után el kell küldeni (FS FAQ 9/DPH/2025/IM, I. rész, 74. példa). Ha a javított számla későbbi napon megy el, a kiállítás dátumát módosítsa erre a napra.
  • A hálózatnak átadva (ACCEPTED undeliverable nélkül: submitted, delivered vagy ismétlés a háttérben; ide tartozik az a dokumentum is, amelyet az átvitel után a címzett MLS-e elutasított, és amelyet egy ismételt hívás REJECTED státusszal és az okkal ad vissza): ugyanaz a kulcs ennek a küldésnek az eredményét adja vissza, semmi nem megy ki kétszer. Kézbesített számlát soha ne küldjön újra; javítása jóváíró számlával (381) vagy terhelési értesítővel (383) történik.
  • undeliverable (a címzettnek nincs címe a Peppol-hálózatban): a számlát átadták, a kézbesítéstől függetlenül jelentjük a Pénzügyi Igazgatóságnak, és a kiállító kötelezettsége teljesült (FS FAQ 9/DPH/2025/IM, I. rész, 42. és 75. példa). A kulcs felszabadul. Ha a címzett azonosítója volt hibás (például IČO vagy elgépelt DIČ a 0245:<a DIČ 10 számjegye> helyett, vagy a címzett más azonosítóval szerepel a hálózatban), javítsa az azonosítót, és küldje újra ugyanazzal a kulccsal; a számlát hagyja változatlanul (ugyanaz a szám és dátum), mert már átadták. A 8 jegyű szám IČO, a hálózatban soha nem található. Ha az azonosító helyes, és a címzett egyszerűen nincs regisztrálva, küldje el neki ugyanazt a számlát más úton, legjobb az XML-jét e-mailben (a PDF csak előnézet). Az FS FAQ I. rész 75. példája szerint ez ugyanannak a számlának az újbóli megküldése, nem új számla kiállítása, ezért ne állítson ki új számlát más számmal. Amint a címzett regisztrál, ugyanazt a számlát Peppolon is újra elküldheti, ha a hívást ugyanazzal az Idempotency-Key-jel megismétli.
  • Hibás vevőazonosító vagy üres saját azonosító: a csak sémát tartalmazó X-Peppol-Participant-Id fejléc (például 0245:, amikor a program beállításaiból hiányzik a cég DIČ-je) küldéskor 403 SAPI-AUTH-003 választ ad magyarázattal, a /document/validate pedig ilyen fejléccel már küldés előtt figyelmeztetést tesz a warnings mezőbe. A 0088 (GLN) sémával vagy 0245 és 8 számjegy (IČO a DIČ helyett) formában megadott vevő a szlovák hálózatban nem található: a dokumentum undeliverable lesz, és a statusReason (a send válasz detail mezője) tartalmazza a javítást: 0245 és a DIČ 10 számjegye.
  • Előzze meg a hibákat: küldés előtt hívja a POST /sapi/document/validate végpontot (ugyanazok a szabályok, mint küldéskor, semmit nem tárol és nem küld) és a GET /sapi/discovery?receiverId=… végpontot (a címzett a hálózatban van-e, és milyen dokumentumtípusokat fogad). A végleges állapotot a GET /sapi/document/sent?invoiceNumber=…, GET /sapi/document/sent/{id}, POST /sapi/document/sent/status vagy az invoice.delivered, invoice.rejected és invoice.undeliverable webhookok adják.
POST/sapi/document/validateBearer (access)

Dokumentum ellenőrzése küldés nélkül: ugyanazok az EN 16931 + Peppol BIS 3.0 szabályok, amelyeket az Access Point küldés előtt alkalmaz. Semmi nem tárolódik és nem megy ki; sandbox tokennel is működik. Törzs = a /document/send JSON párja { payload, payloadFormat }, vagy közvetlenül az XML (Content-Type: application/xml). Limit 10 MB. A válasz egy warnings[] tömböt is tartalmaz nem blokkoló figyelmeztetésekkel (például TEST- szám, olyan címzett, amely ugyanannak a fióknak egy másik cége, vagy a küldés napjától eltérő BT-2 kiállítási dátum); a figyelmeztetés soha nem blokkolja a bizonylatot.

curl
curl -X POST https://peppol.verteco.digital/sapi/document/validate \
-H 'Authorization: Bearer eyJ…' \
-H 'Content-Type: application/xml' \
--data-binary @szamla.xml
# 200 OK
{ "valid": false,
  "errors": [ "BR-CO-15: Invoice total amount with VAT (BT-112) = … " ],
  "warnings": [],
  "checkedAt": "2026-09-10T12:00:00Z" }

Hibák: SAPI-AUTH-002 (401) · SAPI-VAL-001 (400: üres törzs, érvénytelen JSON, payloadFormat nem XML, > 10 MB) · SAPI-SYS-002 (502: a validátor átmenetileg nem elérhető, próbálja újra)

Bizonylatok fogadása

GET/sapi/document/receiveBearer (access)

A fogadott bizonylatok listája (a legrégebbi elöl); a metadata az invoiceNumber mezőt is tartalmazza, így a bizonylat a payload letöltése nélkül is azonosítható. Query: ?pageToken, ?limit (max. 200), ?status (szűrő: received = csak a még nem visszaigazolt bizonylatok, acknowledged = csak a visszaigazoltak, paraméter nélkül az összes fogadott bizonylat; kis- és nagybetűre érzéketlen, bármely más érték SAPI-VAL-001 hibát ad), ?invoiceNumber (pontos egyezés a cbc:ID-vel), ?since és ?until (ISO-8601 instant; időablak a fogadás időpontja szerint, pl. az utolsó 5 nap bizonylatai, tömeges letöltés külső archiváláshoz vagy a könyvelés rekonstrukciójához), ?deliveryDateFrom és ?deliveryDateTo (ISO-8601 dátum; szűrés a bizonylatban megadott teljesítési dátum szerint). Az X-Peppol-Participant-Id fejléc kötelező.

json
// 200 OK
{ "documents": [ { "documentId":"…","documentTypeId":"…",
  "senderParticipantId":"0088:…","receiverParticipantId":"0245:…",
  "creationDateTime":"2026-06-17T…Z" } ],
"nextPageToken": "50" }
GET/sapi/document/receive/{documentId}Bearer (access)

Részletek a payloaddal együtt (nyers XML, pontosan úgy, ahogy a Peppolon keresztül érkezett).

Hibák: SAPI-RES-001 (404) · SAPI-RES-002 (404: a payload nincs archiválva)

POST/sapi/document/receive/{documentId}/acknowledgeBearer (access)

Megerősíti, hogy az Ön rendszere átvette a bizonylatot. Idempotens.

GET/sapi/document/receive/{documentId}/xmlBearer (access)

Archív hivatkozás (metadata.links.xml): maga az üzleti dokumentum XML fájlként, ugyanaz a tartalom, mint a részletek payload mezője.

GET/sapi/document/receive/{documentId}/htmlBearer (access)

Archív hivatkozás (metadata.links.html): a számla általános, nyomtatható megjelenítése (HTML).

GET/sapi/document/receive/{documentId}/pdfBearer (access)

Archív link (metadata.links.pdf): a bizonylat PDF-je. Ha a szállító a saját számla-PDF-jét ágyazta az XML-be (BT-125), azt az eredetit kapja; különben a tárolt XML-ből igény szerint generált PDF-et (PDF-et nem tárolunk). Fejléc: X-Verteco-Pdf-Source: supplier | generated. 404 SAPI-RES-002 a tartalom törlése után, 503 ha a renderelő nem elérhető (próbálja később vagy használja a /html-t).

GET/sapi/document/receive/{documentId}/attachments/{index}Bearer (access)

Archív hivatkozás (metadata.links.attachments[].url): a dokumentumba ágyazott egyik melléklet bájtjai, pl. a szállító eredeti PDF-je. Kényszerített letöltés.

POST/sapi/document/receive/{documentId}/public-linkBearer (access)

Bejelentkezés nélküli link (opcionális): ÚJ véletlen kulcsot ad ki a bizonylathoz ({"rotate":true} lecseréli a meglévőt). Visszaadja: url (oldal), xmlUrl, htmlUrl, pdfUrl és expiresAt; a kulcs csak egyszer látható. A cégnél be kell legyen kapcsolva a „letöltés bejelentkezés nélkül” (különben 403 SAPI-AUTH-004). A DELETE visszavonja.

Archívum másolat helyett: minden beérkezett dokumentum metaadata tartalmazza a links (xml, html, pdf, mellékletek) és a retention mezőt. Az integrátor a könyvelt tétel mellé csak a hivatkozást tárolhatja, és a dokumentumot megjelenítéskor tölti le; a hivatkozásokhoz ugyanaz a Bearer token és az X-Peppol-Participant-Id fejléc kell. retention.mode = storage: a cég a beérkező bizonylatokat nálunk archiválja, az eredetit a teljes szerződéses kapcsolat alatt megőrizzük (ÁSZF 11a.1). retention.mode = secure: a cég a beérkező bizonylatokat nálunk nem archiválja, a tartalom a retention.contentAvailableUntil időpontban visszavonhatatlanul törlődik, amely a minden dokumentumnál tárolt tervezett törlési dátum (alapból 14 nap a beérkezéstől; a határidő külön állítható a beérkező és a kimenő bizonylatokra, és a beállítás minden módosítása a meglévő bizonylatoknál a módosítás napjától számít, soha nem korábbról), utána a hivatkozások SAPI-RES-002-t adnak; ha secure mód mellett a contentAvailableUntil null, a tartalmat még függő adóbevallás miatt tartjuk, és dátumot nem ígérünk. Az archívumot a cég tulajdonosa a cég adatlapján a beérkező és a kiállított bizonylatokra külön állítja be. Hivatkozások bejelentkezés nélkül: ha a tulajdonos a cég adatlapján bekapcsolja a „Számlák letöltése bejelentkezés nélkül” lehetőséget, a POST /sapi/document/receive/{id}/public-link egy saját véletlen kulccsal ellátott hivatkozást ad, amely token nélkül megnyitja a bizonylatot (url embereknek, xmlUrl és htmlUrl programoknak). A kulcs pontosan egyszer szerepel ebben a válaszban; a hivatkozás legfeljebb a contentAvailableUntil-ig él, visszavonható (DELETE), lejárat után 410-et ad indoklással, ekkor kérjen újat. A portálbeállítás nélkül a hívás 403 SAPI-AUTH-004-et ad.
Bejelentkezés nélküli linkek: a links.* mezők mindig Bearer tokent kérnek (archív linkek). Ha a cégnél be van kapcsolva a „letöltés bejelentkezés nélkül” (cég adatai → Adatarchívum, vagy PUT /companies/{id}/public-links), a bizonylat részlete metadata.publicLink-ben kész címeket hordoz: url, xmlUrl, htmlUrl és pdfUrl – minden olvasásnál ugyanaz a cím, és ugyanaz, amit a felhasználó a portálon a számlánál lát. Tárolja a lekönyvelt bizonylat mellé; a POST …/public-link csak új kulcs kikényszerítéséhez kell. Kikapcsolt opciónál publicLink.issued=false, reason=public_links_disabled. A link állandó: addig érvényes, amíg a bizonylat tartalma tárolva van (a beérkezett bizonylatokat nem archiváló cégnél a retention.contentAvailableUntil dátumig), ezért az expiresAt null (a SAPI-válaszban a mező hiányzik), és semmit nem kell megújítani. Az xmlUrl és a links.xml magát az üzleti dokumentumot adja vissza (Invoice/CreditNote gyökér) az SBDH szállítási boríték nélkül. A pdfUrl és a links.pdf a szállító által az XML-be ágyazott PDF-et adja vissza (BT-125), ha van, különben az XML-ből generált PDF-et; az X-Verteco-Pdf-Source fejléc mondja meg, melyiket (supplier | generated).

Küldött bizonylatok állapota

GET/sapi/discovery?receiverId=0245:2121358349

Előzetes ellenőrzés küldés előtt: regisztrálva van-e a címzett a Peppol hálózatban, és milyen bizonylattípusokat tud fogadni? Ugyanaz az SML lekérdezés, amelyet a hozzáférési pont végez; a receiverId Peppol ID-t, áfaazonosítót (IČ DPH) vagy puszta DIČ-et fogad. Válasz: {registered, participantId, smp, documentTypes, checkedAt}. Az X-Peppol-Participant-Id fejléc itt nem szükséges.

GET/sapi/document/sentBearer (access)

A küldött bizonylatok kézbesítési állapota: pending (átadás a hálózatnak folyamatban) → submitted → delivered / rejected (a címzett AP-jától érkező kézbesítési igazolás (MLS) alapján); failed = átviteli hiba (az ugyanazzal az Idempotency-Key-jel végzett újrapróbálkozás újra küld). Query: ?pageToken, ?limit, ?status (pending / submitted / sent / delivered / rejected / failed; kis- és nagybetűre érzéketlen, bármely más érték SAPI-VAL-001 hibát ad), ?invoiceNumber (pontos egyezés a cbc:ID-vel: egy konkrét számla állapota egyetlen hívással), ?since és ?until (ISO-8601 instant; időablak), ?deliveryDateFrom és ?deliveryDateTo (ISO-8601 dátum; szűrés teljesítési dátum szerint).

json
// 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 }

Hibák: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-VAL-001 (400: érvénytelen since)

MLS visszaigazolás és kézbesítési bizonyítékok

Az MLS visszaigazolás (Peppol Message Level Status) a fogadó Access Point válasza a küldeményünkre: AP = elfogadva és kézbesítve, AB = kézbesítve üzleti megerősítés nélkül, RE = elutasítva, indokkal. A portál a küldött dokumentumhoz menti, és ennek alapján váltja az állapotot: AP és AB egyaránt delivered (AB esetén a statusDetail „MLS AB: ” szöveggel kezdődik, az mls.responseCode AB; az SPOG on MLS szerint ez üzleti megerősítés nélküli kézbesítés, nem fenntartás), RE pedig rejected. A 222/2004. sz. törvény 76a § (2) bek. d) pontja szerint a szolgáltatónak bizonyítania kell a küldés, kézbesítés és átvétel dátumát és idejét; a GET /sapi/document/sent minden sora és minden webhook hordozza ezt a három időt: sentAt (átadás a kézbesítő szolgálatnak, ezzel a 85o § (11) bek. szerint a kiállító kötelezettsége teljesül), deliveredAt (a fogadó Access Point MLS-megerősítése) és fsReportedAt (adatszolgáltatás a pénzügyi igazgatóság felé). Külföldi Access Point esetleg soha nem küld MLS-t: a dokumentum ekkor delivered marad as4_receipt_only részlettel, visszaigazolás nélkül.

GET/sapi/document/sent/{documentId}Bearer (access)

Egy küldött dokumentum részletei: a listával azonos sor (sentAt, deliveredAt, fsReportedAt, hasMls, links) plusz mls.responseCode (AP/AB/RE), mls.receivedAt és mls.url. Az mls null, amíg a visszaigazolás meg nem érkezik.

json
// 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" } }

Hibák: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-RES-001 (404: idegen vagy fogadott dokumentum) · SAPI-RES-004 (404: még nincs visszaigazolás)

GET/sapi/document/sent/{documentId}/mlsBearer (access)

A visszaigazolás fájlként: a fogadó Access Point MLS ApplicationResponse üzenete, amely a küldemény peppolMessageId-jára hivatkozik. A kézbesítés vagy elutasítás bizonyítéka; kényszerített letöltés. SAPI-RES-004, amíg nincs visszaigazolás.

GET/sapi/document/sent/{documentId}/xmlBearer (access)

Küldött bizonylat tartalma (SAPI 1.8.15): a hálózatnak átadott tiszta UBL XML (szállítási boríték nélkül), kényszerített letöltés. A fogadott bizonylatok linkjeinek párja: a külső könyvelő programja így az ügyfél KIÁLLÍTOTT számláit is betöltheti. Minden sor hordozza a links.xml, links.html és links.pdf mezőket. SAPI-RES-002, miután a cég megőrzési beállítása törölte a tartalmat.

GET/sapi/document/sent/{documentId}/htmlBearer (access)

Küldött bizonylat nyomtatható nézete a tárolt XML-ből (semmi nem tárolódik).

GET/sapi/document/sent/{documentId}/pdfBearer (access)

Küldött bizonylat PDF-je: a kiállító XML-be ágyazott saját PDF-je (BT-125), ha van, különben az XML-ből generált; fejléc X-Verteco-Pdf-Source: supplier | generated. 503 SAPI-PROC-001, amíg a generátor nem elérhető (használja a /html-t).

Közvetítők: ugyanezek a hívások az ügyfél X-Peppol-Participant-Id fejlécével egy tokennel adják vissza minden kezelt cég visszaigazolását; a portálon ugyanez a visszaigazolás a küldött számla részleteinél (Visszaigazolás letöltése), az MCP get_document eszköz is tartalmazza.

FS-jelentés bizonyítékai, integritás és idővonal (SAPI 1.8.14)

Az 1.8.14 óta a GET /sapi/document/sent minden sora, a küldött részlet, valamint a beérkezett lista és részlet fsReport objektumot hordoz: state = reported (a jelentés átadva a C5 gyűjtőpontnak, reportedAt = fsReportedAt), pending (a jelentés esedékes, az átadás sikertelen és automatikusan ismétlődik, reason = c5_unavailable) vagy not_required (nem keletkezik jelentés; a reason megmondja, miért: cross_border, self_send_test, issuer_without_vat_id, recipient_without_vat_id, not_billing_document, tdd_disabled, before_2026_09_01, not_recorded). Átadás után megjelenik a tddMessageId (a jelentés SBDH InstanceIdentifier-e), a C5 válasza után a c5ResponseCode (AP/AB/RE), c5ResponseAt, c5Detail és az összefoglaló outcome: accepted (AP), accepted_with_reservations (AB), rejected (RE) vagy null, amíg a C5 nem válaszolt. Az outcome = rejected azt jelenti, hogy a jelentést átadtuk, de a pénzügyi igazgatóság elutasította (a c5Detail a megsértett szabályt hordozza, pl. BR-AE-08); a state reported marad, mert az átadás megtörtént, és a portál a javított jelentést automatikusan újraküldi (elfogadás után az outcome accepted lesz). A küldött sorok ezen felül statusReason-t (gépi kód a statusDetail mögött: network_retrying, network_retrying_sent, as4_receipt_only, recipient_not_registered, transport_failed, mls_rejected, validation_failed), xmlSha256-ot (az átadott XML SHA-256-ja, a tartalom törlése után is megmarad), retention-t és receiptRetention = permanent-et hordoznak (az MLS visszaigazolás soha nem törlődik). A részletben a visszaigazolásnak van mls.sha256 és mls.messageId mezője. A beérkezett bizonylatok peppolMessageId, status (received/acknowledged), receivedAt, acknowledgedAt és xmlSha256 mezőt kaptak (az üzleti dokumentum bájtjainak SHA-256-ja pontosan úgy, ahogy a links.xml kiadja, SBDH szállítási boríték nélkül; beérkezéskor számoljuk, és a tartalom törlése után is megmarad). Mindkét lista szűrhető ?fsReport=reported|pending|not_required|rejected-del (rejected = outcome rejected), a küldött ?status=undeliverable-lel is. A POST /sapi/document/send válasza már az elfogadáskor hordozza a peppolMessageId-t. Minden csak bővítés, a meglévő mezők változatlanok.

POST/sapi/document/sent/statusBearer (access)

Legfeljebb 200 küldött bizonylat állapota egy hívásban: ugyanazok a sorok, mint a listában, plusz mls, ha a visszaigazolás már megérkezett. Azok az id-k, amelyek nem e cég küldött bizonylatai, a missing-ben jönnek vissza; a hívás miattuk nem bukik el. N darab GET /sapi/document/sent/{id} hívás helyett ERP-szinkronizáláskor.

json
// POST { "documentIds": ["7c1e…", "9af0…", "ismeretlen"] }  (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…", "ismeretlen"] }

Hibák: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-VAL-001 (400: 0 / > 200 id)

GET/sapi/document/sent/{documentId}/eventsBearer (access)

A bizonylat idővonala időrendben: submitted, network_retrying, delivered / rejected / undeliverable / failed, mls_received, fs_reported, fs_c5_verdict, content_wiped, webhook_delivered és továbbiak (ismeretlen típust hagyjon figyelmen kívül). Az 1. fázis a tárolt tényekből származik, nem minden köztes állapotváltás naplója.

Hibák: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-RES-001 (404: idegen vagy beérkezett bizonylat)

GET/sapi/document/receive/{documentId}/eventsBearer (access)

Beérkezett bizonylat idővonala: received, acknowledged, fs_reported, fs_c5_verdict, content_wiped, webhook-kézbesítések.

Webhookok: minden invoice.* esemény ugyanazt az fsReport objektumot hordozza; új események: invoice.report_pending (a jelentés átadása sikertelen, esedékes marad és ismétlődik; bizonylatonként egyszer) és invoice.report_rejected (a C5 elutasította a jelentést, a c5Detail hordozza az okot). Az új események csak a minden eseményre feliratkozott integrációkhoz jutnak el; ismeretlen típusra 2xx-szel válaszoljon. A tesztkörnyezet a mintabizonylatnál fsReport not_required-et ad reason tdd_disabled-del, a batch hívásnál üres documents-et. Elutasításkor az fsReport.outcome értéke rejected, a bizonylat a ?fsReport=rejected szűrővel listázható. Önszámlázás (389-es bizonylatkód, a számlát a vevő állítja ki): a bizonylatot kézbesítjük, de az FS-nek szóló jelentést ennél egyelőre nem garantáljuk, mert a jelentés a bizonylatban megnevezett szállító alapján készül, nem a küldő alapján; az fsReport pending vagy rejected maradhat. Az önszámlázás bevezetése előtt írjon nekünk.

Tömeges küldés

POST/sapi/document/batchBearer (access)

Legfeljebb 100 bizonylat egyetlen hívásban. Minden elem a teljes egyedi küldési logikán megy át (idempotencia az itemId + idempotencyKey alapján, foglalás, beküldés, ítélet), és saját eredményt ad vissza; egy elem hibája nem állítja meg a többit. Az elemek feldolgozása szekvenciális; a sikertelen elemeket ugyanazzal az idempotencyKey-jel próbálja újra.

json
// 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": "…" } ] }

Hibák: SAPI-AUTH-002 (401) · SAPI-AUTH-003 (403) · SAPI-VAL-001 (400: üres vagy túl nagy lista)

Hibamodell

Minden SAPI hiba egységes borítékot használ kategóriával, stabil kóddal, egy retryable jelzővel és egy correlation_id értékkel a támogatás számára. Hitelesítési hiba (SAPI-AUTH-001) esetén a boríték tartalmaz egy hint mezőt (emberi nyelven, mi tartozik a Client Id és Client Secret mezőkbe) és egy docs mezőt (link az útmutatóra; MK-soft programok közvetlenül a /navody/mksoft#prepojenie oldalra). Mindkét mező opcionális, máshol hiányzik (1.8.20).

json
{ "error": {
  "category": "AUTH",
  "code": "SAPI-AUTH-001",
  "message": "Invalid client credentials.",
  "retryable": false,
  "correlation_id": "b4191dfc-…" } }
Megjegyzés: küldéskor az üzleti bizonylatot kézbesítjük; a küldött bizonylatok adóhatósági jelentésének (TDD) C2 oldala előkészítés alatt áll. A fogadáskor esedékes adóhatósági jelentést (C3) automatikusan előállítjuk és benyújtjuk a Szlovák Köztársaság Pénzügyi Igazgatóságának (Finančná správa, FS).

Értesítések és webhookok

Fogadott számláról a céget e-mailben vagy webhookkal (POST az Ön URL-jére) értesíthetjük. A kézbesítés tartós: kimenő várólistában tároljuk, és aszinkron módon kézbesítjük (15 s időtúllépés); hiba esetén legfeljebb 12× újrapróbáljuk exponenciális visszatartással (30 s → max. 8 óra, összesen kb. 16 óra), majd dead-letter. A HTTP 401/403 azt jelenti, hogy az Ön végpontja olyan hitelesítést kér, amelyet nem küldünk; ehelyett ellenőrizze a webhook-signature aláírást, és válaszoljon 2xx-szel. Az Ön szerverének kimaradása így nem veszíti el az értesítést; a következő próbálkozásnál kézbesítjük. Az SSRF-védelem blokkolja a loopback/helyi címeket; a webhook-URL-nek nyilvánosnak kell lennie.

GET/companies/{id}/notificationsmunkamenet / token

Értesítési beállítások: { webhookUrl, notificationEmail, notificationEmails, hasSecret }.

PUT/companies/{id}/notificationsowner / admin

Mindkét csatornát beállítja (üres string kikapcsolja az adott csatornát).

MezőTípusKötelezőLeírás
webhookUrlstringnemüres vagy http(s) URL, max. 512
notificationEmailstringnemegy cím vagy legfeljebb 5 vesszővel elválasztva, max. 256; mindegyik megkapja a beérkezett számlákról szóló e-maileket (400 invalid_notification_email / too_many_notification_emails)
GET/companies/{id}/webhookmunkamenet / token

Webhook-konfiguráció: { url, hasSecret } (a titok nélkül).

PUT/companies/{id}/webhookowner / admin

Beállítja a webhook-URL-t (automatikusan aláíró titkot generál, ha még nincs).

MezőTípusKötelezőLeírás
urlstringigenhttp(s) URL, max. 512
curl
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 }
DELETE/companies/{id}/webhookowner / admin

Eltávolítja a webhook-URL-t és a titkot is. 204-et ad vissza.

POST/companies/{id}/webhook/secretowner / admin

Új aláíró titkot generál, és EGYSZER adja vissza; tárolja el az X-Verteco-Signature ellenőrzéséhez.

json
// 200 OK
{ "secret": "vpt_8f2a…" }
POST/companies/{id}/webhook/testowner / admin

Szinkron módon tesztértesítést küld (webhook.test esemény, aláírva, SSRF-védelemmel) a tárolt URL-re, és visszaadja, MIT küldött és MI jött vissza. Ugyanezt indítja a cég részleteinél az „Otestovať webhook“ (Webhook tesztelése) gomb.

json
// 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 if no webhook URL is stored

Webhook payload

Fogadott (invoice.received) és küldött (invoice.sent) számla esetén is POST kérést küldünk ezzel a törzzsel; a típust az event mező különbözteti meg.

Két további esemény jelzi a hálózat ítéletét az Ön által küldött számláról: invoice.delivered (a címzett hozzáférési pontja kézbesítési igazolással (MLS) megerősítette a kézbesítést) és invoice.rejected (elutasítva, vagy a hálózat által, vagy a küldés előtti validáció során); az invoice.undeliverable olyan címzettet jelez, akinek nincs bejegyzése a Peppol hálózatban (átvéve, a FS-nek jelentve, nem kézbesítve). A bizonylat és a cég azonosítóit hordozzák (documentId, invoiceNumber, receiverId, peppolMessageId, companyDic, peppolParticipantId), valamint a status mezőt, a statusDetail mezőt az elutasítás okával és a statusDateTime mezőt. Ha az első kézbesítési kísérlet nem sikerült és a hozzáférési pont magától újrapróbálja (általában egy órán belül), a dokumentum submitted marad, és a statusDetail a network_retrying: előtaggal kezdődik; a kézbesítés után delivered, feladás után rejected lesz network_gave_up: előtaggal. Ezeknek köszönhetően nem kell lekérdezéssel figyelnie a küldött számlák állapotát.

A company.activated esemény akkor érkezik, amikor egy ügyfél befejezi a szolgáltatóválasztást a Szlovák Köztársaság Pénzügyi Igazgatóságának (Finančná správa, FS) portálján (VPDS); törzs: event, companyId, companyDic, peppolParticipantId, status, verifiedAt. A company.deactivated pedig akkor érkezik, amikor egy céget kiregisztrálnak a hálózatból (ugyanaz a törzs verifiedAt nélkül). A company.smp_registered_elsewhere akkor érkezik, amikor a cég befejezte a PI-választást, de nemzeti SMP bejegyzését másik szolgáltató tartja (törzs mint a company.activated, plusz action: "migration_code_required" és migrateUrl). A partnerek teendői a közvetítői dokumentációban találhatók. Amíg az ügyfél be nem írja a migrációs kódot, a hálózat a régi szolgáltatónak kézbesít. Részletek a /saas útmutatóban:

json
{
"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"
}

A companyDic és a peppolParticipantId mező azonosítja azt a céget, amelyre az esemény vonatkozik (fontos azoknak a partnereknek, amelyek egyetlen webhook-URL-t használnak minden ügyfelükhöz).

A hálózat ítélete a küldött számláról:

json
{
"event": "invoice.delivered",          // or "invoice.rejected"
"occurredAt": "2026-09-03T15:04:05Z",
"companyId": "08dd…",
"companyDic": "SK2121358349",
"peppolParticipantId": "0245:2121358349",
"documentId": "…",
"invoiceNumber": "2026001",
"receiverId": "0245:2120049096",
"peppolMessageId": "…",
"status": "delivered",                 // or "rejected"
"statusDetail": null,                  // for rejected: the rejection reason
"statusDateTime": "2026-06-03T10:15:42Z"
}

Cég aktiválása az FS portálon (VPDS) végzett szolgáltatóválasztás után:

json
{
"event": "company.activated",          // company.deactivated has the same body without verifiedAt
"occurredAt": "2026-09-03T15:04:05Z",
"companyId": "08dd…",
"companyDic": "SK2121358349",
"peppolParticipantId": "0245:2121358349",
"status": "active",
"verifiedAt": "2026-06-03T10:02:11Z"
}

Az esemény neve az X-Verteco-Event fejlécben is szerepel. Az események teljes listája: 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 és a webhook.test tesztesemény. Az ismeretlen eseménytípust javasoljuk félretenni és naplózni; új típust mindig előre bejelentünk. Minden esemény tartalmaz occurredAt mezőt is (az esemény ideje, ISO-8601 UTC) a rendezéshez, valamint eventId mezőt (ugyanaz az érték, mint az X-Verteco-Delivery-Id fejlécben): eseményenként egyedi, ismétléskor változatlan, ezért ez a helyes deduplikációs kulcs (a peppolMessageId ismétlődik az invoice.sent, invoice.delivered és invoice.reported események között). Az invoice.* események tartalmazzák a sentAt, deliveredAt, receivedAt és fsReportedAt időpontokat is (ISO-8601 UTC, null, amíg az esemény be nem következett). Az invoice.reported akkor érkezik, amikor a bizonylathoz tartozó adóhatósági jelentés (TDD) átadásra került a kézbesítő hálózatnak (85o. § (11) bek.), C5-kimaradás esetén akár napokkal később. Az összes esemény formális sémája az OpenAPI-specifikáció webhooks szakaszában található.

A partneri értesítő webhook, az ügyfélkezelés (release, pause-sending) és a számlázási modell csak bejegyzett közvetítőknek érhető el, leírásuk itt található: Közvetítőknek.

Aláírás ellenőrzése

Ha a cégnek van titka, az X-Verteco-Signature fejlécet küldjük sha256=HMAC-SHA256(secret, raw body) formában (kisbetűs hex). A HMAC-et mindig a törzs pontos bájtjain számolja:

javascript
import crypto from 'node:crypto';

// rawBody = the exact bytes of the request body (not re-serialized 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));
}

Minden kézbesítés fejlécei: X-Verteco-Event (az esemény neve), X-Verteco-Delivery-Id (= a törzsben lévő eventId, minden ismétlésnél azonos), X-Verteco-Signature (a fenti HMAC), valamint párhuzamosan a Standard Webhooks fejlécek: webhook-id (= eventId), webhook-timestamp (a kísérlet unix másodperce) és webhook-signature = v1,base64(HMAC-SHA256(secret, id + "." + timestamp + "." + body)). A kulcs a titok UTF-8 bájtjai; a standardwebhooks könyvtár whsec_ + base64(secret) formában várja. Ajánlott feldolgozás: ellenőrizze az aláírást, utasítsa el az 5 percnél régebbi webhook-timestamp értékű kézbesítést (visszajátszás elleni védelem), dolgozzon fel idempotensen az eventId alapján, válaszoljon 2xx-szel 15 másodpercen belül, és a nehéz feldolgozást tegye saját várólistára. A sikertelen kézbesítést 12-szer ismételjük 30 s és 8 h közötti időközökkel (összesen kb. 16 óra); utána dead-letterbe kerül e-mail figyelmeztetéssel, és látható marad a Realtime logban. Az éles webhook URL-nek https://-nek kell lennie; a tesztkörnyezet a http://-t is elfogadja.

A titkot a POST /companies/{id}/webhook/secret hívással kapja meg; ez egyszer adja vissza (a rotáció újat generál). Titok nélkül nem küldjük az X-Verteco-Signature fejlécet.

Tömeges beállítás: egy token, több cég

Egyetlen API-token (a fiókjához/e-mail-címéhez kötve) kezeli az összes tulajdonában lévő céget: aki a POST /companies hívással céget hoz létre, annak owner-e lesz, és beállíthatja a webhookját. A webhook cégenkénti (saját URL és titok), így ugyanazzal a tokennel tetszőleges számú céget csatlakoztathat:

bash
# 1) list of your companies (paginated, see Companies)
curl 'https://peppol.verteco.digital/api/v1/companies?page=0&limit=100' -H 'Authorization: Bearer vpt_8f2a…'

# 2) for EACH company {id}: set the webhook (and/or 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) fetch the signing secret (returned ONLY ONCE) and store it for signature verification
curl -X POST https://peppol.verteco.digital/api/v1/companies/{id}/webhook/secret -H 'Authorization: Bearer vpt_8f2a…'
# → { "secret": "…" }
  • A tokennek az adott cég owner/admin szerepkörével kell rendelkeznie; olyan cégnél, ahol csak member/viewer, 403 forbidden választ ad (nincs bérlők közötti hozzáférés).
  • Minden cégnek adhat eltérő URL-t, vagy mindnek ugyanazt; a payloadban a companyId (és a receiverId) alapján különbözteti meg őket.
  • Több száz cég esetén tartsa be a tokenenkénti kérésszám-korlátot (az aktuális értéket a RateLimit-Limit fejléc adja vissza); kötegeljen visszatartással 429 esetén (Retry-After fejléc).
  • A webhook ténylegesen csak akkor sül el, amikor a cég aktív a Peppolban (miután a Pénzügyi Igazgatóságnál a Vertecót választotta szolgáltatónak) és így ténylegesen fogad bizonylatokat.

Adatmodellek

Az API által visszaadott objektumok mezői.

Company

MezőTípusKötelezőLeírás
idUUID–a cég azonosítója
icostring–cégjegyzékszám (IČO, 8 számjegy)
dicstring|null–áfaazonosító (IČ DPH)
legalNamestring–hivatalos név
registeredAddressstring|null–a székhely címe
peppolParticipantIdstring|null–Peppol résztvevő (regisztráció után)
statusstring–pending_verification | active
rolestring–owner | admin | member | viewer (az Ön szerepköre)
createdAtInstant–a létrehozás időpontja

Document

MezőTípusKötelezőLeírás
idUUID–a bizonylat azonosítója
directionstring–sent | received
peppolMessageIdstring|null–Peppol üzenetazonosító
docTypeIdstring|null–bizonylattípus (Peppol)
senderIdstring|null–küldő (scheme:id)
receiverIdstring|null–címzett (scheme:id)
invoiceNumberstring|null–számlaszám
issueDatedate|null–a kiállítás dátuma
currencystring|null–pénznem (pl. EUR)
totalAmountnumber|null–teljes összeg
statusstring–feldolgozási állapot
createdAtInstant–a rögzítés időpontja

User · Token · Webhook

MezőTípusKötelezőLeírás
Userobject–{ id: UUID, email: string }
Tokenobject–{ id, name, prefix, lastUsedAt|null, createdAt }
Webhookobject–{ url: string|null, hasSecret: boolean }

A mezők közvetlenül a közzétett openapi.json-ból töltődnek, így a táblázatok mindig azonosak azzal, amit az API visszaad. A leírások angolul vannak.

Adatmodellek betöltése az openapi.json-ból…

Fogalomtár

DIČ
Szlovák adóazonosító szám (10 számjegy). A szlovák Peppol-azonosító 0245: + a DIČ számjegyei, SK nélkül.
IČ DPH
Áfa-azonosító szám (SK + DIČ). Csak áfaalanyoknak van; nem alany O adókategóriával állít ki.
IČO
Cégjegyzékszám (8 számjegy). Az API-ban ico mező, UBL-ben BT-30.
Hitelesítő adat (VÚ)
A Pénzügyi Igazgatóság aláírása, amely a szolgáltató FS-portálon történő kiválasztásakor jön létre; feloldja a cég küldését.
VPDS
Az FS alkalmazása, ahol az adóalany kiválasztja kézbesítési szolgáltatóját (minket).
TDD
Tax Data Document, a számlaadat-jelentés a Pénzügyi Igazgatóságnak; mi állítjuk össze és küldjük Ön helyett.
C5 / C6
A Peppol-modell ötödik és hatodik sarka: a Pénzügyi Igazgatóság hozzáférési pontja, amely a TDD-ket fogadja (0242:001180).
MLS
Message Level Status, a címzett hozzáférési pontjának igazolása (AP = elfogadva, RE = elutasítva, AB = nyugtázva).
SBDH
Standard Business Document Header, a boríték, amelyben a bizonylat utazik; InstanceIdentifier-e a peppolMessageId.
SML / SMP
A hálózat címtára: az SML megtalálja a címzett SMP-jét, az SMP megmondja a hozzáférési pontot és az elfogadott bizonylattípusokat.

Szlovák konvenciók az implementálói gyakorlatból

A Peppol BIS Billing 3.0-n túl a szlovák ERP- és számlázószoftver-gyártók fokozatosan közös értelmezésre jutnak az opcionális mezőkről (az egyeztetés a Szlovák Köztársaság Pénzügyi Igazgatósága (Finančná správa, FS) által működtetett Slack-csatornán zajlik). Alább azok a konvenciók, amelyeket a portálunk már ma is tiszteletben tart: mindegyik érvényes BIS-konstrukció, változatlanul haladnak át az API-nkon, és a fogadott bizonylatokban az emberi olvasásra szánt előnézetben és a PDF-ben is megjelennek.

  • Adózott előleg levonása egy soron: negatív sor cac:DocumentReference elemmel, ahol a cbc:ID a kapott fizetésről szóló adóbizonylat számát hordozza, és a cbc:DocumentTypeCode értéke 130 (BIS: invoice line object identifier, soronként max. 1). Az ilyen sort tartalmazó fogadott számlát az előnézetünk az „odpočet zálohy – daňový doklad č. …” megjegyzéssel jeleníti meg (előleg levonása, adóbizonylat száma: …).
  • Adóbizonylat kapott fizetésről: a Pénzügyi Igazgatóság GYIK-je szerint az InvoiceTypeCode 388 (Tax invoice) kódot használják. Átmegy az API-nkon és a validáción is; a ki nem fizetett (nem adózott) előleg levonását a cbc:PrepaidAmount fejezi ki.
  • Számla érvénytelenítése (sztornó): 381 jóváíró számla (CreditNote) cac:BillingReference hivatkozással az eredeti számlára, nem negatív 380-as számla. Megjegyzés: a hálózat a 384-es kódot szlovák felek között elutasítja (a PEPPOL-EN16931-P0112 szabály csak német szervezetek között engedi); felfelé történő korrekcióhoz használja a 383-as terhelési értesítőt (debit note).
  • BT-83 PaymentID: a szlovák gyakorlat a /VS…/SS…/KS… fizetői hivatkozási formátum felé tart; a puszta változó szimbólum (variabilný symbol) is gyakori. A feldolgozásunk az értéket változatlanul továbbítja, és a fizetési adatokkal együtt jeleníti meg.
  • További tételadatok (gyártási tételszámok, sorozatszámok, lejárati dátumok) a cac:AdditionalItemProperty elemen keresztül, bevett nevekkel, például BatchNumber, SerialNumber, ExpirationDate.
Ezek közösségi konvenciók, nem kötelező nemzeti szabályok: a fogadó rendszernek az ezeket nem használó bizonylatot is kezelnie kell. Ahogy a Pénzügyi Igazgatóságnál folyó egyeztetés lezárul, ezt a szakaszt frissítjük (kövesse a /changelog oldalt).

Bizonylatmellékletek (BT-125)

Mellékletek (PDF, képek) base64 formában csatolhatók az e-számlához a cac:AdditionalDocumentReference elemben (BT-125). A fogadott bizonylatoknál mellékletenként 25 MB-ig dolgozzuk fel a mellékleteket; küldésnél a teljes XML a base64 mellékletekkel együtt SAPI-SK-n keresztül 10 MB, a portál Odoslať súborom fülén 2 MB alatt kell maradjon. A Peppol nem határoz meg egységes, hálózatszintű korlátot; az egyes szolgáltatók sajátot állapítanak meg (FS GYIK 9/DPH/2025/IM, 67. példa), ezért nagyon nagy mellékleteknél ellenőrizze a másik fél szolgáltatójának korlátját is.

Nyilvános eszközök (validáció, címzett ellenőrzése)

Két segédvégpont hitelesítés nélkül: ugyanaz a validációs mag és ugyanaz az SML lekérdezés, amelyet a hozzáférési pontunk használ. CI-hoz és küldés előtti ellenőrzésekhez alkalmasak; szigorúbb nyilvános kérésszám-korlát vonatkozik rájuk.

POST/public/peppol-validatenyilvános

E-számla validációja az UBL 2.1 séma, az EN 16931 és a Peppol BIS Billing 3.0 szerint, ugyanúgy, mint a /validator felületi validátor. A kérés törzse = közvetlenül az UBL 2.1 XML (Invoice / CreditNote, vagy a teljes Peppol SBD), Content-Type application/xml, korlát 3 MB.

bash
curl -X POST https://peppol.verteco.digital/api/v1/public/peppol-validate \
-H "Content-Type: application/xml" \
--data-binary @faktura.xml
json
// 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 = empty body (empty_document) or document over 3 MB (document_too_large)
GET/public/peppol-check?id=0245:2121358349nyilvános

A címzett ellenőrzése az éles Peppol hálózatban (SML lekérdezés): regisztrálva van-e, és milyen bizonylattípusokat tud fogadni? Az id paraméter Peppol ID-t (0245:…), áfaazonosítót (IČ DPH, SK…) vagy puszta DIČ-et (szlovák adóazonosító szám) fogad. Hitelesített megfelelője ERP-folyamatokhoz: GET /sapi/discovery.

json
// 200 OK
{
"registered": true,
"participantId": "0245:2121358349",
"smp": "sml.peppol-smp.sk",
"capabilities": ["Faktúra (BIS Billing)", "Dobropis", "Self-billing", "MLS doručenky"], // Slovak labels: Invoice (BIS Billing), Credit note, Self-billing, MLS delivery receipts
"lastCheckedAt": "2026-08-31T…Z"
}

MCP-szerver (AI-asszisztensek)

A portál saját szervert működtet a Model Context Protocolhoz, a nyílt szabványhoz, amelyen keresztül az AI-asszisztensek (Claude Code, Claude Desktop, Cursor, VS Code Copilot és mások) külső rendszerekhez kapcsolódnak. Az asszisztens a fiók közönséges API-kulcsával jelentkezik be, és hat eszközt kap; soha nem lát többet, mint az adott fiók, és minden hívása megjelenik a kulcs API-naplójában.

Cím: https://peppol.verteco.digital/api/mcp. Átvitel: Streamable HTTP, JSON-RPC 2.0, állapotmentes (POST /api/mcp, nincs SSE-folyam, a GET 405-öt ad). Bejelentkezés az Authorization: Bearer <API-kulcs> fejléccel. Támogatott metódusok: initialize, ping, tools/list, tools/call, resources/list, prompts/list.

Eszközök

  • list_companies: a fiók cégei Peppol-azonosítóval, állapottal és szereppel (minden beszélgetés kezdete)
  • list_documents: egy cég elküldött/fogadott számlái kézbesítési és adóhatósági jelentési állapottal, lapozva
  • get_document: egy számla részletesen az MLS-visszaigazolással és jelentéssel, opcionálisan az UBL XML (1 MB-ig)
  • check_participant: a címzett élő ellenőrzése a Peppol-hálózatban (SML)
  • validate_document: UBL validálás az EN 16931 + Peppol BIS 3.0 szerint
  • send_document: számla küldése a cég nevében, confirm = true szükséges, és érvényes a Verifikačný údaj kapu

Csatlakozás a Claude Code-ban

bash
claude mcp add --transport http verteco-peppol https://peppol.verteco.digital/api/mcp \
  --header "Authorization: Bearer vpt_..."

Claude Desktop (az mcp-remote hídon keresztül, Node.js szükséges)

json
{
  "mcpServers": {
    "verteco-peppol": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://peppol.verteco.digital/api/mcp", "--header", "Authorization: Bearer vpt_..."]
    }
  }
}

A számlaküldés jogilag kötelező erejű: az eszköz confirm = true nélkül elutasítja a hívást, és a szerver utasításai kötelezik az asszisztenst, hogy kérje a felhasználó kifejezett hozzájárulását a konkrét számlához és címzetthez. A Cursor és VS Code kész konfigurációi és a kulcs létrehozásának gombja a portálon található: API-kulcsok → MCP-szerver fül. API-kulcsok → MCP-szerver

Küldés e-mailben (a cég címe)

A portálon a cég bekapcsolja saját címét: <24 véletlen karakter>@peppol.send.verteco.app. Az engedélyezett postafiókból erre a címre küldött, UBL XML mellékletű e-mailt ugyanúgy elküldjük a Peppol-hálózaton, mintha a fájlt a Küldés fájlból lapon töltötte volna fel; a feladó mellékletenként egy választ kap az eredménnyel, a bizonylat pedig a portálon és az API-ban is elérhető kézbesítési állapottal, MLS-visszaigazolással és FS-jelentéssel. Beállítás: Kapcsolatok és integrációk → Küldés e-mailben (a cég tulajdonosa vagy adminisztrátora, bejelentkezve). /dashboard/integrations/email

Feldolgozási szabályok

  • Csak a cég engedélyezett feladói listáján (legfeljebb 20) szereplő címről érkező levelet fogadunk; minden mást válasz nélkül eldobunk.
  • Alapértelmezetten a feladó domainjének át kell mennie az SPF- vagy DKIM-ellenőrzésen a kézbesítő szervernél (DMARC-szerű, relaxed igazítás). A kézbesítő szerver emellett elutasítja azokat a leveleket, amelyek sem SPF-en, sem DKIM-en nem mennek át, és a feladó DMARC-szabályzatát sértő leveleket. Az ellenőrzés a beállításokban kikapcsolható; nem ajánlott.
  • Melléklet: UBL 2.1 Invoice vagy CreditNote (Peppol BIS Billing 3.0), .xml kiterjesztés, akár SBDH-borítékban; üzenetenként legfeljebb 10 melléklet, mellékletenként 15 MB, címenként napi 200 üzenet. PDF-et és az üzenet szövegét nem dolgozzuk fel.
  • IFS Finvoice 2.0: az IFS SOAP-borítékos (IFSFinvoice) vagy csupasz Finvoice .xml mellékletet UBL-re alakítjuk, majd ugyanúgy dolgozzuk fel. Átalakítási szabályok: INV02 vagy negatív végösszeg = jóváíró számla (381) pozitív összegekkel és az eredeti számla hivatkozásával (OriginalInvoiceNumber, IFS-nél OrderIdentifier); eladó és vevő a szlovák adószám szerint (SellerOrganisationTaxCode, BuyerOrganisationTaxCode → 0245:DIČ), Szlovákián kívüli vevőt nem alakítunk át; áfabontás a VatSpecificationDetails-ből, a 0 %-os sorok E kategóriával és a VatFreeText indokával, különben „Oslobodené od DPH”; az IFS kerekítő sorai (nettó 0,00, áfa 0,01) kimaradnak, a sor összegével nem egyező egységárat újraszámoljuk; mértékegységek UN/ECE szerint (kg → KGM, pcs → H87, h → HUR, ismeretlen → C62 az eredeti szöveggel a sor megjegyzésében); a beágyazott számlakép (InvoiceAttachments, PDF) 5 MB-ig a bizonylat melléklete lesz; csak EUR. Az átalakítás eredménye a válaszban és a cég naplójában szerepel.
  • Eredménycím: ha a számlákat rendszerpostafiók küldi, a beállításokban más címet adhat meg az eredményt tartalmazó válasznak (replyTo a PUT /companies/{id}/email-send kérésben, üres = válasz a feladónak).
  • Az XML-ben az eladó (szállítói EndpointID, BT-34) ez a cég kell legyen, különben az üzenetet elutasítjuk (a saját szállítójától továbbított számla soha nem megy ki az Ön számlájaként). A vevőnek sémával ellátott EndpointID-vel kell szerepelnie (BT-49).
  • Ugyanaz az üzenet (Message-ID) egyszer kerül feldolgozásra. A bizonylat az API-ban és a webhookokban origin = email jelölést visel, a szereplő = a feladó címe.
A cím jogosultság: aki ismeri és az engedélyezettek között van, a cég nevében küld. Ezért bármikor lecserélhető (Új cím generálása; a régi azonnal érvényét veszti), és minden beérkezés szerepel a cég naplójában és a biztonsági nyilvántartásban.

Állapot (ping)

Nyilvános health-check végpont, monitorozásra alkalmas.

GET/pingnyilvános

A backend állapota.

json
// 200 OK
{ "service": "peppol-portal-backend", "status": "ok", "timestamp": "2026-06-17T…Z" }

Az összes komponens élő áttekintése a rendszerállapot oldalon érhető el.

Ami kész, és ami készül

Már éles üzemben (gyakran hiányzónak hitt)

  • A POST /companies/{id}/documents/send stabil portálfelület; ERP-integrációkhoz továbbra is a SAPI-SK ajánlott Idempotency-Key-jel.
  • Az SMP-regisztráció az FS-portálon történő választás után automatikus; átállás másik szolgáltatótól a POST /companies/{id}/smp-migrate végponttal, migrációs kóddal.
  • MLS-igazolások, kézbesítési bizonyítékok és FS-jelentések (fsReport) a /sapi/document/sent minden sorában; webhook-visszajátszás időablakra.
  • Kiválasztott cégekre szűkített kulcsok; MCP-szerver AI-asszisztenseknek; UBL-minták a /vzory oldalon; nyilvános validátor.

Előkészületben (az integrátori igények sorrendjében)

  • Aszinkron kötegelés: a POST /sapi/document/batch 202-vel válaszol, job-hivatkozással és tételenkénti állapottal.
  • Változásfolyam GET /sapi/document/changes?since&cursor kurzorral az offset-lapozás helyett.
  • API-kulcsok lejárata és forgatása a portálon, csak olvasható kulcs.
  • Több webhook-végpont cégenként eseményszűrővel.
Hiányzik valami konkrét? Írja meg a [email protected] címre, mi és hány bizonylathoz; ez alakítja a sorrendet.