Webpostázó HTTP API
Ez az útmutató azoknak a fejlesztőknek szól, akik egy másik rendszerből (pl. saját ERP, ügyviteli szoftver) szeretnék elérni a Webpostázó funkcióit HTTP hívásokon keresztül. Bemutatja a hitelesítést, a válaszok szerkezetét és a legfontosabb végpontköröket.
/api/public/
Teljes referencia: Végpont-referencia
Bevezetés
A Webpostázó szerver a saját webes klienshez és a más rendszerek integrációjához ugyanazt a HTTP API-t használja, de két elérési körre osztva:
/api/public/**— ez a külső integrátoroknak szánt, ebben az útmutatóban leírt API./api/private/**— a Webpostázó saját webes kliense használja, külső rendszerek számára nem elérhető.
Minden hívás JSON-t vár és JSON-nal válaszol (a fájlletöltést adó végpontok kivételével, ezeket jelöljük).
Előfeltételek
- A szerveren engedélyezett API licencopciónak kell lennie. Enélkül a
/api/public/**végpontok csak rendszergazdai szerepkörrel érhetők el. - A hívó felhasználónak
API_USER(vagyAPI_ADMIN) szerepkörrel kell rendelkeznie a Webpostázóban.
403 Forbidden választ ad
minden /api/public/** hívásra, függetlenül attól, hogy a bejelentkezés sikeres volt-e.
Hitelesítés
A hitelesítés JWT (JSON Web Token) alapú. A folyamat: bejelentkezés felhasználónévvel és jelszóval, a kapott tokent minden további híváshoz csatolni kell, majd lejárat előtt megújítani.
Bejelentkezés
/api/public/auth/login
POST /api/public/auth/login
Content-Type: application/json
{
"userName": "integracios.felhasznalo",
"password": "..."
}
Sikeres válasz:
{
"status": "OK",
"errors": [],
"warnings": [],
"authToken": "eyJhbGciOiJIUzI1NiJ9...",
"verificationRequired": false,
"passwordChangeRequired": false,
"object": { "userName": "integracios.felhasznalo", "..." : "..." }
}
Ha a felhasználón kétfaktoros hitelesítés (MFA) van bekapcsolva, verificationRequired
értéke true lesz, és a authToken egy ideiglenes token, amivel csak a
/api/public/auth/verify végpont hívható a kapott verificationCode beküldésével.
Integrációs (rendszer-) felhasználóknál javasolt az MFA kikapcsolva tartása.
A token használata
A megkapott authToken értéket minden további híváson Authorization
fejlécben, Bearer sémával kell elküldeni:
GET /api/public/... HTTP/1.1
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
Token megújítás
A token korlátozott ideig érvényes. Lejárat előtt a jelenlegi (még érvényes) tokennel hívható a megújítás, ami egy új tokent ad vissza:
POST /api/public/auth/renewToken
Authorization: Bearer <jelenlegi token>
A /api/public/auth/logout hívással a token érvényteleníthető.
Válaszformátum
A legtöbb végpont egy közös borítékformátumban válaszol:
{
"status": "OK", // "OK" vagy "ERROR"
"errors": [], // hibaüzenetek listája, ERROR esetén nem üres
"warnings": [], // figyelmeztetések, sikeres válasz mellett is előfordulhat
"errorCode": null, // gépi feldolgozásra alkalmas hibakód, ha van
"object": { ... } // a tényleges eredmény, végpontonként eltérő szerkezetű
}
Hiba esetén:
{
"status": "ERROR",
"errors": ["Elektronikus feladójegyzék készítés sikertelen. Eset sorszáma: 481203"],
"warnings": [],
"errorCode": null,
"object": null
}
ERROR esetén is jellemzően 200 OK — a sikerességet
mindig a status mezőből kell megállapítani, ne a HTTP státuszkódból.
Az errors tömb végén szereplő "Eset sorszáma" a szerver oldali naplóbejegyzésre
hivatkozik, ez segíti a hibakeresést support-megkeresés esetén.
Néhány végpont (pl. fájlletöltés) ettől eltérően natív bináris tartalommal (application/octet-stream
vagy application/pdf) válaszol — ezeket a végpont leírásánál jelezzük. Két mező ritkábban
fordul elő, de érdemes ismerni:
taskId— hosszabb, aszinkron jellegű műveleteknél (pl. GDPR-archiválás, CSV-import) kitöltött azonosító. Fontos: a tényleges feldolgozás a jelenlegi szerververzióban mindig szinkron módon, még a HTTP válasz visszaadása előtt lezajlik — ataskIdnem "indítsd el és kérdezd le később" mintát jelent, hanem a szerver oldali naplóbejegyzésekhez való korrelációt szolgálja.errorCode— gépi feldolgozásra alkalmas hibakód, ha az adott hiba ilyet hordoz; a legtöbb hibánálnull, ilyenkor csak azerrorsszöveges üzenetére lehet támaszkodni.
Nem minden végpont követi a fenti borítékformátumot — néhány helyen (pl.
reports/departs, system/properties, system/encode) a kérés
vagy a válasz csupasz JSON-érték (szám, tömb, objektum), boríték nélkül. Ezeket a végpont-referenciában
külön jelezzük.
Gyakori buktatók
Ezek a pontok okozzák a legtöbb integrációs hibát — érdemes elolvasni implementálás előtt.
-
GET híváson a token nem fejlécben megy.
POSThívásoknál a token azAuthorization: Bearer …fejlécben szükséges, deGEThívásoknál (pl.efj/get,transferbook/document, a riport-letöltések) a szerver a?authToken=…lekérdezési paraméterből olvassa — a fejlécet ezeknél figyelmen kívül hagyja. -
Fájlletöltő végpontoknál a Content-Type dönt, nem a HTTP státuszkód.
Sikeres letöltésnél (
efj/get,transferbook/document, areports/mvc/**export végpontok) a válaszapplication/octet-stream,application/pdfvagy hasonló bináris típus. Hiba esetén viszont ugyanaz a200 OKHTTP-státusz jön vissza, deContent-Type: application/jsonmellett, a szokásos hibaboríték-formátumban. A kliens kódnak aContent-Typefejlécet kell vizsgálnia annak eldöntésére, hogy fájl vagy hibaüzenet érkezett. -
A CSV riport-végpontok
windows-1250kódolásúak, nem UTF-8. Az/api/public/reports/csv/**alatti négy letöltés Excel-kompatibilis cp1250 kódolással ad vissza szöveget — UTF-8-ként értelmezve az ékezetes karakterek hibásan jelennek meg. -
A 403-as hiba néha licencprobléma, nem jogosultsághiány.
A
/api/public/**kör eléréséhez a szerveren engedélyezett API licencopció szükséges. Ha ez az opció nincs bekapcsolva, a rendszer mégAPI_USERszerepkörrel is elutasítja a hívást — ilyenkor kizárólagAPI_ADMINszerepkörű felhasználó tud bármit hívni ez alól a kör alól. 403 esetén tehát először a szerver licencét érdemes ellenőrizni, nem csak a felhasználó szerepkörét. -
A GDPR-végpontokhoz külön licencopció is kell.
Az
/api/public/gdpr/**végpontok az API-licenc mellett a GDPR licencopciót is megkövetelik — enélkül a hívás akkor is hibával tér vissza, ha egyébként minden más feltétel (szerepkör, API-licenc) teljesül. -
A PTM küldemény-összeállító végpontok üzleti hibája nem
ERRORstátuszban jön. Aptm/kuldemeny/**alatti módosító hívásoknál (súly, típus, hely, szolgáltatás, utánvét stb.) egy szabálysértés (pl. érvénytelen típus-hely kombináció)status: "OK"mellett, a válaszkuldemeny.hibamezőjében jelenik meg szöveges üzenetként. Astatuscsak a váratlan, rendszerszintű hibáknál váltERROR-ra — a PTM hívások után mindig akuldemeny.hibamezőt is ellenőrizni kell. -
Két azonos nevű, de különböző
CreateKuldemenyReqtípus létezik. APOST /api/public/ptm/kuldemeny/create(díjszámítási szimuláció, egy nyersFrankingModel-t vár) és aPOST /api/public/kuldemeny/create(tényleges küldemény rögzítése, egyKuldemenyDto-t vár) kérésteste teljesen eltérő szerkezetű, annak ellenére, hogy a szerver forráskódjában mindkét osztály neveCreateKuldemenyReq(más csomagban). Ne keverjük össze a két folyamatot.
Példa folyamat
Egy tipikus integráció — bejelentkezés, majd egy ragszám lekérése — így néz ki végig:
# 1. Bejelentkezés
curl -X POST https://szerver-cim/api/public/auth/login \
-H "Content-Type: application/json" \
-d '{"userName":"integracios.felhasznalo","password":"..."}'
# Válaszból kinyerjük az authToken mezőt.
# 2. Ragszám lekérése a kapott tokennel
curl -X POST https://szerver-cim/api/public/ragszam/getRagszam \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <authToken>" \
-d '{"typeCode": "RL", "postaIrsz": "1112"}'
# 3. Token megújítása lejárat előtt
curl -X POST https://szerver-cim/api/public/auth/renewToken \
-H "Authorization: Bearer <authToken>"
A pontos kérés- és válaszmezőket, minden funkciócsoportra kiterjedően, a lenti végpont-referencia mutatja meg részletesen.
Végpont-referencia
Minden /api/public/** végpont teljes kérés- és válaszmezőlistával, valódi
JSON-példákkal. A csoportok összecsukhatók — kattints a fejlécre a kinyitáshoz.
Hitelesítés /api/public/auth/**
POST/api/public/auth/login
Bejelentkezés felhasználónévvel és jelszóval. A visszakapott authToken
kell minden további híváshoz.
Kérés
{
"userName": "integracios.felhasznalo",
"password": "titkosjelszo"
}
Válasz — sikeres bejelentkezés, MFA nélkül
{
"status": "OK",
"errors": [],
"warnings": [],
"errorCode": null,
"authToken": "eyJhbGciOiJIUzI1NiJ9...",
"verificationRequired": false,
"verificationType": "NONE",
"verificationMessage": null,
"passwordChangeRequired": false,
"object": {
"id": 42,
"username": "integracios.felhasznalo",
"name1": "Integrációs Felhasználó",
"roles": ["ROLE_API_USER"],
"email": "integracio@ceg.hu",
"mfaTotpEnabled": false
}
}
Válasz — MFA szükséges
Ha a felhasználón kétfaktoros hitelesítés van bekapcsolva, verificationRequired
értéke true, és a kapott authToken egy ideiglenes token, amivel
csak a /api/public/auth/verify hívható. Az object mező
ilyenkor üres. Integrációs (rendszer-) felhasználóknál javasolt az MFA kikapcsolva
tartása, hogy a bejelentkezési folyamat egyetlen hívással lezárható legyen.
{
"status": "OK",
"errors": [],
"authToken": "eyJhbGciOiJIUzI1NiJ9...(ideiglenes)",
"verificationRequired": true,
"verificationType": "TOTP",
"verificationMessage": "Adja meg a hitelesítő alkalmazásban látható kódot.",
"passwordChangeRequired": false,
"object": null
}
Mezők — UserModel (object)
| Mező | Típus | Megjegyzés |
|---|---|---|
id | Integer | |
username | String | |
name1 | String | megjelenítendő név |
roles | String[] | pl. ROLE_API_USER, ROLE_API_ADMIN |
email | String | |
mfaTotpEnabled | Boolean | |
accountLocked, loginLocked | String / Boolean | fiókzárolási állapot |
password és mfaTotpSecret mezők soha nem szerepelnek a válaszban.
POST/api/public/auth/verify
MFA-kód beküldése a login hívás által kért második faktorra.
Kérés
{
"verificationCode": "482913"
}
A válasz szerkezete megegyezik a login válaszával. Siker esetén
verificationRequired: false és az object már a teljes UserModel-t
tartalmazza, az authToken pedig a végleges, teljes jogú token.
POST/api/public/auth/renewToken
A jelenlegi, még érvényes tokennel új tokent kér lejárat előtt. Nincs kérésteste,
csak az Authorization fejléc kell.
POST /api/public/auth/renewToken
Authorization: Bearer <jelenlegi token>
Válasz: ugyanaz a LoginResp szerkezet, friss authToken-nel és a
felhasználó adataival az object-ben.
POST/api/public/auth/logout
A jelenlegi token érvénytelenítése. Nincs kérésteste.
{
"status": "OK",
"errors": [],
"warnings": [],
"object": null
}
Ragszám-kezelés /api/public/ragszam/**
POST/api/public/ragszam/getRagszamTypes
A rendszerben ismert összes ragszámtípus (RL, TRL, EL, KA, RR, VV, PC, PA, PK, PB, PN, UA, CC, CP, EA) katalógusa formátummaszkkal és mintapéldával. Nincs kérésteste.
Válasz (object: RagszamType[], kivonat)
{
"status": "OK",
"object": [
{
"name": "Belföldi ajánlott.",
"code": "RL",
"length": 9,
"maskFormat": "?? #### ### ### ### #",
"example": "RL 1112 000 001 027 4"
},
{ "name": "Elsőbbségi.", "code": "EL", "length": 9, "...": "..." }
]
}
POST/api/public/ragszam/getRagszam
A soron következő ragszám lekérése — ez a tárolt, adatbázisban vezetett számlálót léptetve fogyasztja el a következő sorszámot. Ha még nincs beállítva kezdő ragszám az adott típushoz/telephelyhez, hibával tér vissza.
Kérés
{
"generationMode": "CENTRAL",
"typeCode": "RL",
"postaIrsz": "1112"
}
Válasz (object: Ragszam)
{
"status": "OK",
"object": {
"type": { "code": "RL", "name": "Belföldi ajánlott.", "...": "..." },
"sorszam": 1027,
"cdv": 4,
"postaIrsz": "1112",
"ugyfelkod": "000",
"szallitmanyAzonosito": "001",
"cimzettIrsz": "0000",
"arufizetesOsszege": 0,
"keyName": "WinPA.ragszam.RL.1"
}
}
| Kérés mező | Típus | Megjegyzés |
|---|---|---|
generationMode | enum | CENTRAL (alapértelmezett), USER, COMPUTER |
typeCode | String | ld. getRagszamTypes kódjai |
postaIrsz | String | kötelező KA, RB, RL, TRL, EL típusnál |
csomagUgyfelkod | String | alapértelmezett "000"; kötelező csomag-ügyfélkódos típusoknál (PN, PA, PB, PC, PK, PI) |
cimzettIrsz | String | alapértelmezett "0000" |
Ragszam objektum nem tartalmaz kész,
nyomtatható ragszám-stringet — azt a type.maskFormat minta és a
sorszam/cdv mezők alapján kell összeállítani a kliens oldalon.POST/api/public/ragszam/getRagszamFromSorszam
Ugyanaz, mint a getRagszam, de a sorszámot a kérésben megadott
sorszam értékből képezi, a tárolt számláló érintése nélkül — nem
fogyaszt el számlálóértéket.
{
"generationMode": "CENTRAL",
"typeCode": "RL",
"postaIrsz": "1112",
"sorszam": 1027
}
POST/api/public/ragszam/getRagszamok
A soron következő ragszám lekérése egyszerre minden regisztrált
típushoz. Egy adott típusnál fellépő hiba nem állítja meg a többit — a sikertelen típushoz nulla
értékű Ragszam kerül a listába, és a hiba a warnings tömbben jelenik meg.
POST/api/public/ragszam/incRagszam
A tárolt számláló kézi léptetése és mentése egy megadott Ragszam
alapján.
{
"ragszam": {
"type": { "code": "RL" },
"sorszam": 1027,
"postaIrsz": "1112"
}
}
POST/api/public/ragszam/setLastUsedRagszam
Az utoljára felhasznált ragszám rögzítése (pl. migrációkor, meglévő nyomtatott ragszám-tartomány folytatásához). Ugyanazon a napon egy típusra csak egyszer hívható — ismételt hívás hibát ad.
{
"generationMode": "CENTRAL",
"ragszam": "RL 1112 000 001 027 4"
}
POST/api/public/ragszam/isValid
Egy ragszám-string formai ellenőrzése (ellenőrzőszám, hosszúság).
{ "text": "RL 1112 000 001 027 4" }
Válasz object: true / false. Ennél a végpontnál a
hibaüzenet nem kapja meg a szokásos "Eset sorszáma" előtagot.
Küldemények /api/public/kuldemeny/**
kuldemeny/create végpontot a lentebbi
ptm/kuldemeny/create végponttal — a kérésteste teljesen más
(ez itt egy kész KuldemenyDto-t rögzít, a PTM-es egy díjszámítási szimulációt indít
egy nyers FrankingModel-ből).
POST/api/public/kuldemeny/create
Új küldemény rögzítése.
Kérés
{
"mod": "FRANKING",
"kuldemeny": {
"idegenAzonosito": "SAJAT-RENDSZER-ID-00042",
"idPortfolio": 19,
"tipus": "A_111_LEV",
"hely": "BELF",
"szolg": "AJ",
"suly": 50,
"koltseghelyKod": "TITK",
"ugyfelazonosito": "12345",
"cimzett": {
"nev": "Teszt Elek",
"telepules": "Budapest",
"kozelebbiCim": "Fő utca 1.",
"irsz": "1011",
"orszagIsoKod": "HU"
}
}
}
Válasz (object helyett közvetlen kuldemeny mező)
{
"status": "OK",
"errors": [],
"kuldemeny": {
"id": 10432,
"ragszam": "RL111200000102743",
"ragszamFormatted": "RL 1112 000 001 027 4",
"tipus": "A_111_LEV",
"hely": "BELF",
"sulydij": 300,
"kuldemenyStatus": { "isValid": true, "isAjanlott": true, "isBelfoldi": true }
}
}
| Kérés mező | Típus | Megjegyzés |
|---|---|---|
mod | String | "IMPORT" vagy "FRANKING" |
kuldemeny.idegenAzonosito | String | a hívó rendszer saját azonosítója — érdemes mindig kitölteni, később ez alapján is kereshető/törölhető a tétel |
kuldemeny.idPortfolio | Integer | a díjszabás-portfólió azonosítója, ld. ptm/portfolio/list |
kuldemeny.tipus, hely, szolg | String | a portfólió szerinti kódok |
kuldemeny.cimzett | PartnerDto | címzett adatai: nev, telepules, kozelebbiCim, irsz, orszagIsoKod, email, ugyfelazonosito stb. |
POST/api/public/kuldemeny/update
Meglévő küldemény módosítása — a kérésteste megegyezik a create-tel,
de a kuldemeny.id mezőt is meg kell adni.
POST/api/public/kuldemeny/bulkUpdate
Több küldemény egyszerre történő módosítása azonos mezőértékekre (pl. új feladójegyzékhez rendelés, ragszám-hozzárendelés).
Kérés — konkrét id-listával
{
"idFrankingList": [10432, 10433, 10434],
"newIdFeladojegyzek": 88,
"generationMode": "CENTRAL"
}
Kérés — keresési feltétellel (nagy tétel-halmazokhoz)
idFrankingList helyett/mellett megadható searchReq is (ugyanaz az
objektum, mint a kuldemeny/search kérésteste — a
mod mezőt nem kell kitölteni, mindig "FRANKING" módban keres).
idFrankingList elsődleges prioritású: ha meg van adva, pontosan azokon
a tételeken fut a módosítás. Ha nincs megadva, a szerver a searchReq alapján maga oldja
fel a teljes találati id-listát — nem kell előtte külön searchIds hívással lekérdezni és
visszaküldeni az id-tömböt. A kettő közül legalább az egyik megadása kötelező.
{
"searchReq": {
"idFeladojegyzek": 88,
"periodStart": "2026-08-01T00:00:00",
"periodEnd": "2026-08-31T23:59:59"
},
"newIdFeladojegyzek": 90,
"generationMode": "CENTRAL",
"ptmKuldemeny": {
"osszevontDarab": null,
"szolgaltatasok": ["K_AJN", "K_TEV"]
}
}
Figyelem: a ptmKuldemeny.osszevontDarab mező explicit
megadható a tömeges módosításhoz — ilyenkor a megadott érték a találati halmaz
minden érintett tételére egységesen alkalmazódik a díjszámításnál (sávos
díjtételeknél ez dönti el, melyik sávba esik a tétel), és perzisztálódik a tétel
tomegesDarab mezőjébe. Ha "osszevontDarab": null (vagy a mező
hiányzik), a tételek egyéni osszevontDarab/tomegesDarab állapota
nem módosul. Csak pozitív egész szám adható meg — 0 vagy negatív érték esetén
a hívás elutasításra kerül.
Kérés — explicit osszevontDarab megadásával (pl. sávos díjú, tömeges
kategória esetén)
{
"idFrankingList": [10432, 10433, 10434],
"newIdFeladojegyzek": 90,
"generationMode": "CENTRAL",
"ptmKuldemeny": {
"osszevontDarab": 13827
}
}
A ptmKuldemeny.szolgaltatasok mező (ha meg van adva) a teljes
szolgáltatáskombinációt lecseréli a megadott listára — nem
egészíti ki a meglévővel. Ha a találati halmaz tételeinek eltérő az eredeti
szolgáltatás-kombinációja, egy tömeges módosítás mindegyiket egységesen a megadott listára
állítja.
A ptmKuldemeny.tvMod (tértivevény visszaküldési mód, 1–6) mező, ha meg van adva,
perzisztálódik a tételen, és a későbbi módosításoknál (pl. véglegesítés) is megmarad. Ha
null (vagy hiányzik), a tétel meglévő módja nem változik; belföldi, nem csomag,
tértivevényes tételnél, ha még nincs mód beállítva, a beállításokban megadott alapértelmezett
mód kerül rá. Nem tértivevényes tételnél a mód üres marad.
Válasz
{
"status": "OK",
"succeeded": [10432, 10433],
"failed": [10434]
}
failed tételekhez a konkrét okot az errors/warnings
tömb tartalmazza, tételenkénti bontás nélkül — ha ez fontos, a sikertelen azonosítókat érdemes
egyenként, külön update hívással újrapróbálni a pontos hibaüzenetért.
POST/api/public/kuldemeny/bulkCimzettUpdate
Több küldemény címzett-adatainak egyszerre történő cseréje.
{
"idList": [10432, 10433],
"ujCimzett": {
"nev": "Új Címzett Kft.",
"telepules": "Szeged",
"irsz": "6720"
}
}
POST/api/public/kuldemeny/search
Küldemények keresése szűrőfeltételekkel, lapozással.
Kérés (kivonat a leggyakoribb szűrőkből)
{
"mod": "FRANKING",
"idegenAzonosito": "SAJAT-RENDSZER-ID-00042",
"periodStart": "2026-08-01T00:00:00",
"periodEnd": "2026-08-31T23:59:59",
"params": { "page": 1, "maxPerPage": 50, "orderBy": "frankingdate", "ascending": "false" }
}
Válasz
{
"status": "OK",
"count": 132,
"objectList": [
{ "id": 10432, "ragszamFormatted": "RL 1112 000 001 027 4", "...": "..." }
]
}
params.page = 0 esetén a szerver a teljes találatszámot adja
vissza count-ban, lapozott adat nélkül — utána külön hívással, page ≥ 1
értékkel kérhető a tényleges lista.
POST/api/public/kuldemeny/searchIds
A search-el azonos szűrőfeltételekkel keres, de lapozás nélkül,
egyben adja vissza a teljes találati halmaz franking azonosítóit — nagy
tétel-halmazok (pl. bulkUpdate) előkészítéséhez, amikor a teljes id-listára van
szükség egy hívásban. Csak "mod": "FRANKING" mellett használható.
Kérés
{
"mod": "FRANKING",
"periodStart": "2026-08-01T00:00:00",
"periodEnd": "2026-08-31T23:59:59"
}
Válasz
{
"status": "OK",
"ids": [10432, 10433, 10434]
}
POST/api/public/kuldemeny/delete
Küldemény törlése — vagy a WinPA belső id-ja, vagy a hívó
rendszer saját idegenAzonosito/uuid azonosítója alapján.
{ "mod": "FRANKING", "idegenAzonosito": "SAJAT-RENDSZER-ID-00042" }
PTM — postai díjszámítás /api/public/ptm/**
A PTM végpontok egy küldemény-összeállítási folyamatot valósítanak meg:
a kliens létrehoz egy munkapéldányt (kuldemeny/create), majd egymás után hívja a
mezőnkénti mutátor végpontokat (súly, típus, hely, szolgáltatás…), és minden hívás visszaadja a
frissített állapotot és az aktuálisan számított díjat. Ez a folyamat nem menti el
a küldeményt — csak szimulál/számol; a tényleges rögzítéshez a
kuldemeny/create végpont kell.
POST/api/public/ptm/portfolio/list
Az elérhető díjszabás-portfóliók listája. Nincs kérésteste. A válasz nagy, beágyazott fákat tartalmaz (hely-, típus-, szolgáltatás- és díjszabás-struktúra) — ezekhez inkább élő hívással érdemes mintát venni, itt csak a legfelső szint látszik:
{
"status": "OK",
"object": [
{
"id": 19,
"dueDate": "2026-05-01",
"folder": "20260501",
"active": true,
"helyek": { "...": "beágyazott célhely-fa" },
"tipusok": { "...": "beágyazott küldeménytípus-fa" },
"szolgaltatasok": { "...": "beágyazott szolgáltatás-fa" },
"orszagok": { "...": "ország-lista" }
}
]
}
POST/api/public/ptm/portfolio/get
Egy adott portfólió adatai lapos listaként (nem beágyazott
faként) — integrációhoz jellemzően ez kényelmesebb, mint a portfolio/list.
{ "idPortfolio": 19 }
{
"status": "OK",
"object": {
"id": 19,
"dueDate": "2026-05-01",
"helyekList": [ { "kod": "BELF", "nev": "Belföld", "...": "..." } ],
"tipusokList": [ { "kod": "A_111_LEV", "nev": "Levél 20g-ig", "...": "..." } ],
"szolgaltatasokList": [ { "kod": "AJ", "nev": "Ajánlott", "...": "..." } ],
"orszagokList": [ { "isoKod": "DE", "nevHu": "Németország", "...": "..." } ]
}
}
POST/api/public/ptm/kuldemeny/create
Egy új PTM munkapéldány létrehozása alapértékekkel.
Kérés
{
"idPortfolio": 19,
"jegyzekTipus": "LEVEL",
"frankingModel": { "suly": 50 }
}
Válasz
{
"status": "OK",
"kuldemeny": {
"suly": 50,
"tipus": "A_111_LEV",
"hely": "BELF",
"dij": 300,
"hiba": null,
"valaszthatoTipusok": ["A_111_LEV", "A_112_LEV"],
"kuldemenyInfo": "Levél 20g-ig - Belföld - "
},
"kuldemenyStatus": { "isValid": true, "isBelfoldi": true },
"ragszamType": { "code": "EL", "name": "Elsőbbségi." }
}
POST/api/public/ptm/kuldemeny/tipus
Küldeménytípus beállítása a munkapéldányon.
{
"kuldemeny": { "suly": 50, "tipus": "A_111_LEV", "hely": "BELF" },
"tipusId": "A_112_LEV"
}
status: "OK", de
kuldemeny.hiba mezőben szöveges hibaüzenet jelenik meg — ld.
Gyakori buktatók.POST/api/public/ptm/kuldemeny/hely
Célhely (pl. BELF, EU) beállítása. Kérésmező: helyId.
POST/api/public/ptm/kuldemeny/suly
Súly (gramm) beállítása. Kérésmező: suly.
POST/api/public/ptm/kuldemeny/szolgaltatas/add
Egy szolgáltatás (pl. AJ — ajánlott) hozzáadása. Kérésmező: szolgId.
POST/api/public/ptm/kuldemeny/szolgaltatas/delete
Egy szolgáltatás eltávolítása. Kérésmező: szolgId.
POST/api/public/ptm/kuldemeny/szolgaltatas/clearall
Az összes szolgáltatás törlése a munkapéldányról.
POST/api/public/ptm/kuldemeny/erteknyilvanitas
Értéknyilvánítás összegének beállítása. Kérésmező: ertek.
POST/api/public/ptm/kuldemeny/utanvet
Utánvét összegének beállítása. Kérésmező: utanvet.
POST/api/public/ptm/kuldemeny/tvMod
Tértivevény kézbesítési mód beállítása. Kérésmező: tvMod (1–6).
POST/api/public/ptm/kuldemeny/orszag
Célország beállítása nemzetközi küldeménynél. Kérésmező: orszagIsoKod (pl. "DE").
POST/api/public/ptm/kuldemeny/feladasiHely
Feladás helyének beállítása (posta vagy OLK). Kérésmező: feladasiHely.
POST/api/public/ptm/kuldemeny/osszevontDarab
Összevont darabszám beállítása tömeges díjszámításhoz. Kérésmező: osszevontDarab.
POST/api/public/ptm/kuldemeny/tomegesDijazasAdatok
Feladási hely és összevont darabszám egyszerre történő beállítása.
{
"kuldemeny": { "...": "..." },
"feladasiHely": "OLK",
"osszevontDarab": 25
}
POST/api/public/ptm/tomegesDijazas
Egy teljes feladójegyzék/könyv tömeges újraárazása a portfólió aktuális díjszabása szerint.
{ "idFeladojegyzek": 88 }
{
"status": "OK",
"changedCount": 214,
"resultMessages": "214 tétel átárazva."
}
POST/api/public/ptm/portfolio/getOrszag
Egy ország részletes adatai (régióbesorolás, elérhető típus/hely kombinációk) a portfólión belül.
{ "idPortfolio": 19, "isoKod": "DE" }
Elektronikus feladójegyzék (EFJ) /api/public/efj/**
POST/api/public/efj/create
Elektronikus feladójegyzék (posta felé leadandó XML) előállítása egy meglévő feladójegyzék tételeiből.
Kérés
{
"efjType": "LEVEL",
"idFeladojegyzek": 88,
"megallapodas": { "szama": "12345678", "id": "1" },
"krid": "KRID-0001",
"kezdoAllas": "000001",
"zaroAllas": "000214"
}
Válasz
{
"status": "OK",
"efjXmlFileName": "efj-20260904103000.xml",
"efjXml": "<?xml version=\"1.0\"...>...",
"feladojegyzekModel": { "id": 88, "darabszam": 214, "...": "..." }
}
GET/api/public/efj/get
A korábban előállított EFJ XML letöltése.
GET /api/public/efj/get?idFeladojegyzek=88&authToken=<jwt>
Siker esetén Content-Type: application/octet-stream,
Content-Disposition: attachment; filename="…xml", a törzs maga a nyers XML-tartalom.
Hiba esetén Content-Type: application/json a szokásos hibaborítékkal — ld.
Gyakori buktatók.
GET/api/public/efj/getPreview
Az EFJ emberi olvasásra szánt előnézete.
GET /api/public/efj/getPreview?idFeladojegyzek=88&kezdoAllas=000001&zaroAllas=000214&authToken=<jwt>
A válasz nyers szöveg/HTML, nem a szokásos JSON-boríték.
Feladási könyv /api/public/transferbook/**
POST/api/public/transferbook/create
Feladási könyv (átadójegyzék) létrehozása egy időszak és szűrőfeltételek alapján kiválasztott küldeményekből.
{
"periodStart": "2026-08-01T00:00:00",
"periodEnd": "2026-08-31T23:59:59",
"directions": [2],
"breakByDepart": false,
"onlyAjanlott": true
}
{
"status": "OK",
"createdBooks": [
{ "id": 55, "periodStart": "2026-08-01T00:00:00", "countOfItems": 214 }
]
}
directions a FrankingModel irány-konstansaira hivatkozik:
0=belső, 1=bejövő, 2=kimenő, 3=kimenő egyéb.
GET/api/public/transferbook/document
A feladási könyv PDF dokumentumának letöltése. Több azonosító is megadható — ekkor a válasz egy ZIP.
GET /api/public/transferbook/document?transferBookIds=55&authToken=<jwt>
GET /api/public/transferbook/document?transferBookIds=55&transferBookIds=56&authToken=<jwt>
Egy azonosítónál Content-Type: application/pdf, több azonosítónál
Content-Type: application/octet-stream és egy atadojegyzek.zip nevű
állomány. Hiba esetén itt is a JSON-boríték jön 200 OK mellett.
POST/api/public/transferbook/sign
Feladási könyv aláírása egy Base64-kódolt PNG aláírásképpel.
{
"id": 55,
"signerName": "Kovács Elemér",
"signPngImageBase64": "iVBORw0KGgoAAAANSUhEUgAA..."
}
POST/api/public/transferbook/search
Feladási könyvek keresése (aláíró, aláírás időpontja, tartalmazott küldemény alapján is).
{
"signerName": "Kovács",
"params": { "page": 1, "maxPerPage": 20 }
}
POST/api/public/transferbook/delete
Feladási könyv törlése azonosító alapján.
{ "id": 55 }
Import /api/public/import/**
POST/api/public/import/level/csv
CSV állomány beolvasása egy köztes (import_level) táblába —
ellenőrzés és előkészítés, még nem hoz létre tényleges küldeményeket.
Kérés
{
"idDepart": 3,
"idPortfolio": 19,
"uploadFileName": "kuldemenyek.csv",
"uploadFileBase64Content": "TkVWO1RFTEVQVUxFUzsuLi4=",
"deleteItemsByUserIdBeforeImport": true
}
Válasz
{
"status": "OK",
"itemCount": 214,
"items": [
{ "nev": "Teszt Elek", "telepules": "Budapest", "irsz": "1011", "error": null }
]
}
Soronkénti hiba esetén az adott tétel error mezője tartalmazza az okot, a
többi sor importja nem áll le emiatt.
POST/api/public/import/level/csv/franking
CSV beolvasása közvetlenül tényleges küldeményekbe (a
level/csv + level/db/franking két lépését végzi el egyben). A kérésteste
megegyezik a level/csv-ével.
POST/api/public/import/level/db/franking
A level/csv lépésben már betöltött, köztes tételek véglegesítése
tényleges küldeményekké egy adott költséghelyhez.
{ "idDepart": 3 }
Riportok /api/public/reports/**
reports/csv/** alatti négy letöltés
windows-1250 kódolású szöveget ad vissza, nem UTF-8-at.GET/api/public/reports/csv/kimeno/koltseghely
Kimenő forgalom riportja költséghelyenként, adott időszakra.
GET /api/public/reports/csv/kimeno/koltseghely?startDate=2026-08-01&endDate=2026-08-31&koltseghely=TITK,PENZ&koltsegosztaly=1
GET/api/public/reports/csv/kimeno/osszesito
Kimenő forgalom összesítője adott időszakra.
GET /api/public/reports/csv/kimeno/osszesito?startDate=2026-08-01&endDate=2026-08-31
GET/api/public/reports/csv/bejovo/belso
Bejövő belső riport adott időszakra.
GET /api/public/reports/csv/bejovo/belso?startDate=2026-08-01T00:00&endDate=2026-08-31T23:59
GET/api/public/reports/csv/bejovo/belso/koltseghely
Bejövő belső riport költséghelyenkénti bontásban.
GET /api/public/reports/csv/bejovo/belso/koltseghely?startDate=2026-08-01T00:00&endDate=2026-08-31T23:59&koltseghely=TITK&koltsegosztaly=1
POST/api/public/reports/departs
Egy költségosztályhoz tartozó költséghelyek listája. Nem a szokásos boríték — a kérés egy csupasz szám, a válasz egy csupasz tömb.
// Kérés:
5
// Válasz:
[
{ "id": 3, "code": "TITK", "division": "1", "name1": "Titkárság" }
]
POST/api/public/reports/kimeno/kulfold/belfold
Kimenő forgalom belföld/külföld bontásban, költséghelyenkénti sorokkal.
{ "startDate": "2026-08-01T00:00:00", "endDate": "2026-08-31T23:59:59" }
{
"status": "OK",
"items": [
{
"depCode": "TITK", "depName": "Titkárság",
"totBelfNormalItems": 120, "totKulfNormalItems": 8,
"totItems": 214, "totValue": 64200
}
]
}
POST/api/public/reports/csv/kimeno/kulfold/belfold
Ne építs erre új integrációt — helyette a
reports/mvc/kimenoKulfoldiBelfoldiNormalAjanlottTerti?exportFormat=CSV végpont
használandó (lásd lentebb), ami rendes, dátumozott fájlnévvel adja vissza a CSV-t.
GET/api/public/reports/mvc/kimenoKulfoldiBelfoldiNormalAjanlottTerti
Ugyanaz a kimutatás, mint a reports/kimeno/kulfold/belfold, de
letölthető fájlként.
GET /api/public/reports/mvc/kimenoKulfoldiBelfoldiNormalAjanlottTerti?startDate=2026-08-01T00:00:00&endDate=2026-08-31T23:59:59&exportFormat=CSV&authToken=<jwt>
exportFormat: HTML (alapértelmezett, text/html törzs),
CSV/JSON/XML (application/octet-stream,
letöltendő fájlként, Content-Disposition fejléccel).
GET/api/public/reports/mvc/koltsegosztalyok
Költségosztályonkénti kimutatás, ugyanazokkal a formátumopciókkal
(exportFormat), mint fent.
GET/api/public/reports/mvc/egyKoltseghely
Egyetlen költséghely részletes kimutatása.
GET /api/public/reports/mvc/egyKoltseghely?startDate=2026-08-01T00:00:00&endDate=2026-08-31T23:59:59&idDepartment=3&sortBy=DATUM&exportFormat=CSV&authToken=<jwt>
GET/api/public/reports/mvc/osszesKoltseghely
Az összes költséghely kimutatása, opcionálisan egy divízióra szűrve
(idDivision).
GET/api/public/reports/mvc/tipusok
Küldeménytípusonkénti kimutatás.
GET/api/public/reports/mvc/tertivevenyek
Tértivevény-nyomonkövetési kimutatás.
GET /api/public/reports/mvc/tertivevenyek?startDate=2026-08-01T00:00:00&endDate=2026-08-31T23:59:59&searchByKikuldes=true&exportFormat=CSV&authToken=<jwt>
Postai törzsadatok /api/public/postinfo/**, /api/public/irszam/**
POST/api/public/postinfo/search
Postai szolgáltatási pontok (posta, postapont, csomagautomata) keresése.
{ "servicePointType": "PM", "nameContains": "Szeged" }
{
"status": "OK",
"result": [
{
"id": 4021, "name": "Szeged 1 posta", "city": "Szeged", "zipCode": 6720,
"street": { "name": "Kölcsey", "type": "utca", "houseNumber": "2" },
"servicePointType": "PM"
}
]
}
servicePointType: PM (posta), PP (postapont),
CS (csomagautomata) — üresen hagyva mindhárom típusra keres.
POST/api/public/postinfo/replace
A teljes postai törzsadat-állomány cseréje. Nem JSON, hanem
multipart/form-data feltöltés, file mezőnévvel. Adminisztratív
jellegű, tömeges adatcsere-művelet — jellemzően nem egy ERP-integráció napi használatú végpontja.
curl -X POST https://szerver-cim/api/public/postinfo/replace \
-H "Authorization: Bearer <authToken>" \
-F "file=@postainfo.xml"
POST/api/public/irszam/search
Irányítószám keresése.
{
"irszam": "67",
"params": { "page": 1, "maxPerPage": 20, "orderBy": "irszam", "ascending": "true" }
}
{
"status": "OK",
"count": 3,
"objectList": [
{ "id": 812, "irszam": "6720", "telepules": "Szeged", "orszagIsoKod": "HU" }
]
}
EKI — elektronikus kézbesítési igazolás /api/public/eki/**
POST/api/public/eki/export
Kézbesítési igazolások exportálása a szerver fájlrendszerére (a szerveren futó, nem a hívó gépén). Elsősorban helyi/rendszergazdai automatizáláshoz, nem tipikus ERP-integrációs mintázat.
{ "ekiStore": "2026", "onlyNew": true, "createDatumFolders": true }
POST/api/public/eki/download
Egy tárolt kézbesítési igazolás PDF letöltése, Base64-be ágyazva a JSON-válaszban.
{ "id": 991, "ekiStore": "2026" }
{
"status": "OK",
"fileName": "eki-991.pdf",
"length": 48213,
"base64Content": "JVBERi0xLjQKJ...=="
}
GDPR /api/public/gdpr/**
POST/api/public/gdpr/archiving
Adott időszak adatainak archiválása.
{ "startDate": "2023-01-01T00:00:00", "endDate": "2023-12-31T23:59:59" }
POST/api/public/gdpr/anonymization
Adott időszak adatainak anonimizálása. Kérésformátum megegyezik az
archiving-éval.
POST/api/public/gdpr/anonymize-partner
Egyetlen partner adatainak anonimizálása azonosító alapján.
{ "partnerId": 4021 }
Rendszerinformáció /api/public/system/**
POST/api/public/system/properties
Néhány, bejelentkezés előtt is hasznos szerver-beállítás lekérdezése (pl. kötelező-e az MFA) — nem a szokásos boríték, hanem egy csupasz JSON objektum. Nincs kérésteste.
{
"app.mfa.required": false,
"app.mfa.type": "TOTP",
"app.auth.mode": "dao",
"app.database.version": "SQLSERVER_2008"
}
Biztonság — felhasználó- és jogosultságkezelés (haladó) /api/public/security/**
ADMIN szerepkör is szükséges — kivéve a jelszóváltást
és a jelszópolitika lekérdezését, amikhez elég a bejelentkezett állapot. Ha egy ERP-integráció
ezt is használná (pl. felhasználó-szinkronizáció), a konkrét mezőlistát kérje a fejlesztőktől.
| Végpont | Jogosultság | Célja |
|---|---|---|
POST security/acl/get | ADMIN | felhasználó ACL-jogosultságainak lekérdezése |
POST security/acl/set | ADMIN | ACL-jogosultságok beállítása |
POST security/acl/addPrivilege / removePrivilege | ADMIN | egy-egy jogosultság hozzáadása/elvétele |
POST security/object_group/list | API | objektumcsoportok listája |
POST security/object_group/get | API | egy objektumcsoport részletei |
POST security/object_group/set / rename / delete | ADMIN | objektumcsoport kezelése |
POST security/user/search | API | felhasználók keresése |
POST security/user/insert / update / delete | ADMIN | felhasználó létrehozása/módosítása/törlése |
POST security/user/roles | ADMIN | elérhető szerepkörök listája |
POST security/user/set-account-lock | ADMIN | fiók zárolása/feloldása |
POST security/user/change-password | bejelentkezett | saját jelszó módosítása |
POST security/user/password-policy | bejelentkezett | jelszópolitika lekérdezése |