Webpostázó HTTP API

Utolsó módosítás: 2026-10-15 · Szerver verzió: v1.31.218

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.

Bázis útvonal: /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 (vagy API_ADMIN) szerepkörrel kell rendelkeznie a Webpostázóban.
Ha a fenti két feltétel bármelyike hiányzik, a szerver 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

POST /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
}
A hívás HTTP státuszkódja 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 — a taskId nem "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ál null, ilyenkor csak az errors szö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. POST hívásoknál a token az Authorization: Bearer … fejlécben szükséges, de GET hí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, a reports/mvc/** export végpontok) a válasz application/octet-stream, application/pdf vagy hasonló bináris típus. Hiba esetén viszont ugyanaz a 200 OK HTTP-státusz jön vissza, de Content-Type: application/json mellett, a szokásos hibaboríték-formátumban. A kliens kódnak a Content-Type fejlécet kell vizsgálnia annak eldöntésére, hogy fájl vagy hibaüzenet érkezett.
  • A CSV riport-végpontok windows-1250 kó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ég API_USER szerepkörrel is elutasítja a hívást — ilyenkor kizárólag API_ADMIN szerepkö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 ERROR státuszban jön. A ptm/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álasz kuldemeny.hiba mezőjében jelenik meg szöveges üzenetként. A status csak a váratlan, rendszerszintű hibáknál vált ERROR-ra — a PTM hívások után mindig a kuldemeny.hiba mezőt is ellenőrizni kell.
  • Két azonos nevű, de különböző CreateKuldemenyReq típus létezik. A POST /api/public/ptm/kuldemeny/create (díjszámítási szimuláció, egy nyers FrankingModel-t vár) és a POST /api/public/kuldemeny/create (tényleges küldemény rögzítése, egy KuldemenyDto-t vár) kérésteste teljesen eltérő szerkezetű, annak ellenére, hogy a szerver forráskódjában mindkét osztály neve CreateKuldemenyReq (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.

Jelölések: ADMIN — a WinPA ADMIN szerepkör is szükséges az API-szerepkör mellett, bináris — nem JSON, hanem fájltartalom a válasz, nyilvános — JWT token nélkül is hívható, elavult — ne építs rá új integrációt.
Hitelesítés /api/public/auth/**

POST/api/public/auth/login

nyilvános

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ípusMegjegyzés
idInteger
usernameString
name1Stringmegjelenítendő név
rolesString[]pl. ROLE_API_USER, ROLE_API_ADMIN
emailString
mfaTotpEnabledBoolean
accountLocked, loginLockedString / Booleanfió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ípusMegjegyzés
generationModeenumCENTRAL (alapértelmezett), USER, COMPUTER
typeCodeStringld. getRagszamTypes kódjai
postaIrszStringkötelező KA, RB, RL, TRL, EL típusnál
csomagUgyfelkodStringalapértelmezett "000"; kötelező csomag-ügyfélkódos típusoknál (PN, PA, PB, PC, PK, PI)
cimzettIrszStringalapértelmezett "0000"
A visszakapott 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/**
Ne keverd össze ezt a 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ípusMegjegyzés
modString"IMPORT" vagy "FRANKING"
kuldemeny.idegenAzonositoStringa 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.idPortfolioIntegera díjszabás-portfólió azonosítója, ld. ptm/portfolio/list
kuldemeny.tipus, hely, szolgStringa portfólió szerinti kódok
kuldemeny.cimzettPartnerDtocí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"
}
Ha a megadott típus a jelenlegi hely/szolgáltatás kombinációval nem érvényes, a válasz továbbra is 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

bináris

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

bináris

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/**
A 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

nyilvános bináris (CSV)

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

nyilvános bináris (CSV)

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

nyilvános bináris (CSV)

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

nyilvános bináris (CSV)

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

elavult

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

bináris (választható formátum)

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/**
Ezek a végpontok az API-licenc mellett a GDPR licencopciót is megkövetelik — enélkül hibával térnek vissza szerepkörtől függetlenül.

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

nyilvános

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/**
Ez a végpontkör WinPA-felhasználók és ACL-jogosultságok adminisztrálására szolgál, nem a szokásos ERP-integrációs (küldemény/díjszámítás/riport) igényekre. Minden hívásukhoz az API-szerepkör mellett WinPA 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égpontJogosultságCélja
POST security/acl/getADMINfelhasználó ACL-jogosultságainak lekérdezése
POST security/acl/setADMINACL-jogosultságok beállítása
POST security/acl/addPrivilege / removePrivilegeADMINegy-egy jogosultság hozzáadása/elvétele
POST security/object_group/listAPIobjektumcsoportok listája
POST security/object_group/getAPIegy objektumcsoport részletei
POST security/object_group/set / rename / deleteADMINobjektumcsoport kezelése
POST security/user/searchAPIfelhasználók keresése
POST security/user/insert / update / deleteADMINfelhasználó létrehozása/módosítása/törlése
POST security/user/rolesADMINelérhető szerepkörök listája
POST security/user/set-account-lockADMINfiók zárolása/feloldása
POST security/user/change-passwordbejelentkezettsaját jelszó módosítása
POST security/user/password-policybejelentkezettjelszópolitika lekérdezése