Changelog
Changelog
A legutóbbi kiadások válogatott fénypontjai. A teljes API-verziókért és a visszamenőleges kompatibilitást érintő változások (Breaking Changes) irányelveiért lásd az API-verziókezelés és LTS-irányelvek oldalt.
Részletes változások az egyes végpontokon (endpoints): OpenAPI-specifikáció és interaktív API-referencia.
2026-10 · Színek a Dashboardon
- Új: Egy kód részletes oldalán megjelent a Színek kártya: előtér és háttér hex-értékként, átlátszó háttér, előnézet a valódi képútvonalon keresztül. Az ellenőrzés ugyanaz, mint a
PATCH /v1/codes/{id}esetén: a kritikus párokhoz megerősítés kell, az 1,5:1 alatti párok nem menthetők. - A visszaállítás fekete-fehérre mind a négy formátumban ismét ugyanazokat a bájtokat adja, mint színek nélkül. A színek nélküli kódok nem változnak.
- Az átlátszó kódok a Dashboard minden előnézetében sakktábla-mintán jelennek meg. Részletek: Színek a Dashboardon.
2026-10 · Színek PDF és EPS formátumban
- Új: A
qr.pdfés aqr.epskirajzolja azfgésbgértékeket paraméterként és mentett színként is. A fekete és minden szürke árnyalat szürkeárnyalatosként (csak fekete lemez) kerül mentésre, minden más szín pedig egész százalékos CMYK-ként, például a1F4E79mint C74 M36 Y0 K53. - Háttér, mint az SVG esetében: Amint kiválasztásra kerül egy szín, egy fedő terület jelenik meg a kód és annak csendes zónája mögött, fehér vagy
bgszínben. Abg=transparentnem rajzol semmit. A cím fekete marad, a logólemez pedig fehér. - Nincs változás színek nélkül: Az
fg/bgés mentett színek nélkül mindkét formátum ugyanazokat a bájtokat adja vissza, mint korábban. A termékútlevél PDF-je színezetlen marad. - Korlátok: nincs ICC-profil, nincs PDF/X. Részletek: Színek a nyomtatásban.
2026-09 · Statikus kódok átirányítási gyorsítótár nélkül, egyidejű törlés
- Módosítva: A statikus kódok már nem szerepelnek az átirányítási gyorsítótárban. A rövid linkjük (
redirect_url) meghívása mindig az aktuális állapotot olvassa be. Ezért aDELETE /v1/accountután egy statikus kód a következő meghíváskor már nem irányít át, míg korábban ez akár 24 óráig is eltarthatott. A díjcsomagváltás is azonnal érvénybe lép a statikus kódok esetében. A fiók törlése a dinamikus kódokat a korábbiaknak megfelelően eltávolítja. A kinyomtatott statikus kódok közvetlenül tartalmazzák a céljukat, így ezeket nem érinti a változás. - Javítva: Két egyidejű
DELETE /v1/codes/:idhívás ugyanarra a kódra egyszer200-as, egyszer pedig404-es választ ad vissza. Aqr.deletedwebhook pontosan egyszer kerül elküldésre, a korábbi kettő helyett. - Új: A
POSTés aDELETE /v1/codes/:id/logo409(errors/conflict) hibakóddal válaszol, ha egy másik kérés egyidejűleg módosította ugyanazon kód logóját, és ilyenkor nem történik változtatás. Korábban előfordulhatott, hogy egy feltöltött logó használaton kívül mentve maradt. Két egyidejűDELETE /v1/codes/:id/logohívás mindkét esetben200-as választ ad vissza. Részletek: Logó.
2026-09 · TypeScript-SDK 1.2.0
- Újdonság a
@qr3/sdk1.2.0 verziójában: Aclient.codes.update()elfogadja azappearanceparamétert, és a kontrasztellenőrzés megállapításaitissuesmezőként adja vissza az eredményben; megállapítás hiányában ez a mező hiányzik. Aclient.codes.imageUrl()elfogadja azfg,bgéseccparamétereket. Minden kód, amelyet az API visszaad (get,list,create,update,batchCreate), tartalmazza atitleésappearancemezőket. - Frissítés:
npm install @qr3/sdk@latest. A Python, Go és PHP verziók következnek. Részletek: SDK-k és CLI és Színek mentése a kódban.
2026-09 · A módosított lejárati idő körülbelül egy percen belül érvénybe lép
- Javítva: Az
expires_atmezőre küldöttPATCHkérés mostantól üríti a kód átirányítási gyorsítótárát. Az új lejárati idő így körülbelül egy percen belül érvénybe lép, ahelyett, hogy akár 24 órával később lépne életbe. Korábban egy eltávolított vagy elhalasztott lejárat akár 24 órán át továbbra is410-es kódot adott vissza, a mostanra beállított lejárat pedig akár 24 órán keresztül engedte tovább működni az átirányítást. - Javítva: Az
expires_atértékkel létrehozott kód akkor is pontosan jár le, ha a lejárat az első 24 órán belülre esik. - Javítva: Ha egy kódot törölnek, miközben a logóját éppen feltöltik vagy eltávolítják, a
POSTés aDELETE /v1/codes/:id/logokérések404-es kóddal válaszolnak, és nem módosítják a törölt kódot, aPATCHkéréshez hasonlóan. - Javítva: Az a statikus kód is bekerül az átirányítási gyorsítótárba, amelynek a rövid linkjét (
redirect_url) meghívták. A módosítás, a szüneteltetés és a törlés mostantól ezt is üríti, nem csak a dinamikus kódok esetében.
2026-09 · Színek mentése a kódhoz
- Új: A
PATCH /v1/codes/:idelfogadja azappearanceparamétert aforeground_colorésbackground_colorértékekkel (#RRGGBB, a háttértransparentis lehet). Aqr.svgés aqr.pngparaméterek nélkül is a mentett színekkel rajzol; az olyan lekérdezési paraméterek, mint a?fg=000000, továbbra is elsőbbséget élveznek. A PDF és az EPS formátumok csak egy későbbi kiadásban fogják támogatni a színek kirajzolását. - Kontrasztellenőrzés: Egy 1,5:1 alatti páros
422hibát eredményez. A gyengébb párosok mentésre kerülnek, és ameta.issuesmezőbenwarningvagycriticaljelöléssel szerepelnek; a transzparens háttér mindigcritical, de soha nem tiltott. - Összefésülés: A kihagyott mezők megtartják a mentett értéküket, a
nullvisszaállítja azokat. Az ugyanazon a kódon végzett egyidejű módosítások már nem írják felül egymást. - Minden kód-válaszban: Az
appearanceszerepel minden kód-válaszban, valamint aqr.createdésqr.updatedwebhookokban. APOST, a batch és az import422hibával elutasítja azt. - Nincs változás a meglévő kódoknál: Mentett színek nélkül minden kód ugyanazokat a bájtokat adja vissza, mint korábban. Részletek: Színek mentése a kódhoz.
2026-09 · Színek és hibajavítás mint a képútvonalak paraméterei
- Új: Mind a négy képútvonal elfogadja az
fg(előtérszín),bg(háttérszín vagytransparent) ésecc(hibajavítás:L,M,Q,H) paramétereket. Az SVG és a PNG kirajzolja a színeket; a PDF és az EPS elfogadja őket, de csak egy későbbi verzióban fogja kirajzolni. Azeccmind a négy formátumban működik, a logó továbbra isHértéket kényszerít ki. - Transzparens: A
bg=transparentháttér nélküli SVG-t és valódi alfacsatornával rendelkező PNG-t eredményez. Az aljzatnak világosnak kell lennie, és a csendes zónát szabadon kell hagyni. - Soha nem hiba: Az érvénytelen értékeket figyelmen kívül hagyja a rendszer; a kép pontosan úgy jelenik meg, mint paraméterek nélkül.
- Gyorsítótár: Minden ténylegesen alkalmazott paraméter
Cache-Control: public, max-age=300fejlécet ad vissza az alapértelmezett kép 24 órás időtartama helyett. - Nincs viselkedésbeli változás paraméterek nélkül: Minden meglévő kód mind a négy formátumban ugyanazokat a bájtokat adja vissza, mint korábban.
- Minden díjcsomagban elérhető. Részletek: Színek és hibajavítás.
2026-09 · A PDF és az EPS mostantól szintén beágyazza a logót
- Bővítés: A
qr.pdfés aqr.epsmostantól ugyanúgy beágyazza a beállított logót, mint aqr.svgés aqr.png(lásd alább) — beágyazott képként (PDF esetén egyImage XObjectsegítségével, EPS esetén egy PostScript kép-szótáron keresztül, ott csak%%LanguageLevel: 3szinttel), ugyanazon a területen középre igazítva, a hibajavítás azonos módonHszintre emelésével. Mindkét formátum eddig nem tartalmazta a logót; ez most javításra került. - Gyorsítótár: Beállított logó esetén mostantól a
qr.pdfés aqr.epsis aCache-Control: public, max-age=300fejlécet adja vissza a megszokott 24 óra helyett — pontosan úgy, mint az SVG/PNG. - Fallback: Ha maga a logókép nem dolgozható fel (például egy sérült mentett objektum miatt), a hibajavítás
Hszintű marad, de a fenntartott terület üresen marad a kép helyett — ez soha nem okoz szerverhibát. - Nincs változás logó nélkül: A logó nélküli kódok továbbra is bájt-azonos
qr.pdf/qr.epsfájlokat adnak vissza, változatlan 24 órás gyorsítótárral. - Részletek és nyomtatási útmutató: Logó a QR-kódban.
2026-09 · Logo a QR-kódban — Dashboard és API
- Új: Egy kód mostantól egy középen elhelyezett logót is tartalmazhat. A Dashboard-on egy kód részletes oldala egy saját logó-kártyát hoz létre: Logó kiválasztása, az első hozzáadáskor vagy az eltávolításkor egy kötelező jelölőnégyzettel ellátott figyelmeztetés megerősítése (mindkettő megváltoztatja a pontmintázatot), majd Logó feltöltése/Logó eltávolítása. A Csere nem igényel megerősítést — csak a kép változik, a mintázat nem. A
viewerszerepkör látja az állapotot és az előnézetet, de a három művelet egyikét sem. - API: A
POST /v1/codes/{id}/logo(multipart mező:file; PNG, JPEG vagy WebP, legfeljebb 1 MB, az SVG elutasításra kerül) létrehoz egy logót vagy lecseréli azt; aDELETE /v1/codes/{id}/logoeltávolítja azt, és idempotens. A túl nagy kép413-as, a nem támogatott formátum422-es, aviewerszerepkör pedig403-as hibát ad vissza. - Megjelenítés: A
qr.svgés aqr.pngvalódi képpontokként ágyazza be a logót (512 × 512, normalizált), és ehhez a hibajavítástHszintre emeli. A hozzáadás és az eltávolítás így megváltoztatja a pontmintázatot (M↔H), a csere viszont nem. Aqr.pdfés aqr.epsnem ágyaz be logót, és változatlan marad. A már kinyomtatott kód minden esetben továbbra is működik, mivel a kódolt cél nem függ a logótól — csak annak kell újra nyomtatnia, aki a (új) logó megjelenését az anyagon is látni szeretné, és eközben nem keveri a régi és az új nyomtatási fájlokat. - Gyorsítótár: Beállított logó esetén a
qr.svgés aqr.pngaCache-Control: public, max-age=300fejlécet adja vissza a megszokott 24 óra helyett. Részletek, határértékek és nyomtatási útmutató: Logo a QR-kódban.
2026-08 · operationId mind a 75 művelethez, és egy „mikor használjuk” útmutató ágenseknek
- Kiegészítés: Az OpenAPI-specifikáció mind a 75 művelete rendelkezik most már egy
operationIdazonosítóval —listCodes,createCode,getCodeStats,archiveWorkspaceés így tovább. Eddig ez a mező teljesen hiányzott, így minden generátornak a HTTP-metódusból és az útvonalból kellett levezetnie a metódusnevet (postV1Codes). Az ilyen nevek az útvonaltól függenek, és minden útvonal-átalakítással változnak. A névformátum mind a 75 helyen azonos:list/get/create/update/replace/delete, egyébként az üzleti művelet igéje (validateDpp,registerGs1Identifier,pingWebhook). Az ige az üzleti logikát követi, nem a HTTP-metódust — azarchiveWorkspaceegyDELETE, azimportDppsegyPOST. - Hatás a saját generálású kliensekre: Azok, akik a specifikációból generálják az SDK-jukat, a következő futtatáskor átnevezett metódusokat kapnak (
postV1Codes→createCode). Ez a változtatás célja, de ez egy átnevezést jelent a külső kódban — ezért említjük meg itt kifejezetten. Az útvonalak, paraméterek, válaszformátumok és állapotkódok változatlanok; a hivatalos SDK-k, a CLI és az MCP-szerverek nem érintettek. - Belépési pont ágenseknek: A
https://qr3.app/llms.txttartalmaz egy## When to use qr3.appszakaszt — hat feladattal a hat funkció helyett, plusz azt a mondatot, hogy mire nem a qr3.app a megfelelő eszköz. Ugyanezt az információt nyújtja most az MCP-szerver is a kézfogás során: azinitializeahttps://mcp.qr3.app/mcpcímmel szemben egyinstructionsmezővel válaszol (korábban: tizenegy eszköz mindenféle besorolás nélkül). Azt is tartalmazza, hogy mely hívásokhoz szükséges API-kulcs — azinitializeés atools/listhívásokhoz nem, de mindentools/callhívásnál igen. - Javítások a
llms.txtfájlban: Négy adatot ellenőriztünk az éles környezettel szemben, és nem bizonyultak helytállónak: (1) aqr3appPython SDK nincs közzétéve a PyPI-n — apip installsor pótlás nélkül kikerült; (2) azAccept: text/markdowna kezdőlapra és a blogra vonatkozik, nem minden szerveroldalon renderelt oldalra; (3) a kapcsolattartási cím[email protected], a kezdőlap JSON-LD-jében is; (4) a/de/security/egy horgonyra való átirányítás, nem önálló oldal. Új link:docs.qr3.app/de/skills/. - Biztosítás: Három ellenőrzés az
openapi-spec.test.tsfájlban — hiánytalanság, egyediség,lowerCamelCase—, mindegyik mutációval ellenőrizve. További kilenc teszt rögzíti a négy javított adatot, hogy azok ne térhessenek vissza. - Ismert korlátozás: A 75 művelet közül kettő szerepel a specifikációban, de
404választ ad (GET /v1/codes/{id}/statsésGET /v1/account). Itt kaptak egy nevet, és el is veszítik azt, amint eldől, hogy megépülnek vagy törlésre kerülnek.
2026-08 · A csomag-visszaminősítések és lemondások mostantól a limitekre is érvényesek
- Javítás: A Stripe-webhook csomagváltáskor és lemondáskor korábban csak a csomag nevét írta be, a szervezet négy limitoszlopát (
max_workspaces,max_members,max_dynamic_codes,max_scans_per_month) nem. Mivel az érvényesítés a mentett érték és a csomag-baseline közül a maximumot veszi alapul, a visszaminősített vagy lemondott szervezet megtartotta a régi, magasabb limitjeit — így a visszaminősítés hatástalan maradt. A webhook mostantól minden tényleges csomagváltáskor az új csomag baseline-jára, lemondáskor pedig a Free-baseline-ra állítja be az oszlopokat — pontosan úgy, ahogy az adminisztrációs felület már eddig is tette. - Működés: Az előfizetés rutinszerű frissítései (meghosszabbítás, fizetési mód, proration) továbbra sem érintik a limiteket; az egyedileg megadott magasabb limitek változatlanul megmaradnak. Csak egy tényleges csomagváltás állítja vissza őket az új csomag baseline-jára.
- Hatás: Nincs változás az API-ban vagy a válaszformátumban. Azok a szervezetek, amelyek visszaminősítése ezen javítás előtt történt, megtartják a régi értékeket, amíg a következő csomagváltás életbe nem lép, vagy a support nem módosítja azokat.
2026-08 · Keyset kurzor mostantól minden lista-végponton
- Javítás: A
GET /v1/codesésGET /v1/dppvégpontokhoz készült kurzor-javítás (lásd alább) mostantól az összes többi kurzor-lapozású listára is kiterjesztésre került:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersés/v1/webhooks/:id/deliveries. Mindegyik kizárólag acreated_atmező alapján lapozott; az azonos időbélyeggel rendelkező sorok (egy kötegelt művelet audit bejegyzései, Webhook-újrapróbálkozások, tagok importálása) elveszhettek a következő oldalon. A rendezési kulcs mostantól mindenhol a(created_at, id)pár. - API-változás: Ezeken a listákon a
meta.pagination.next_cursormostantól szintén egy opak (nem átlátszó) érték (base64url) a puszta időbélyeg helyett; az olvashatatlan kurzorok400-as hibát adnak vissza, a régi időbélyeg-kurzorokat átmenetileg továbbra is elfogadjuk. Kivétel aGET /v1/webhooks/:id/deliveries: ott anext_cursortovábbra is az utolsó kézbesítés azonosítója marad (ismeretlen azonosító → első oldal). Azoknak a klienseknek, amelyek anext_cursorértéket változatlanul küldik vissza — Vezérlőpult, CLI, SDK-k, MCP —, nem kell semmit sem változtatniuk. - Hatás: Nincs szükség migrációra. Ha valaki hiányolt bejegyzéseket a lapozás során ezen listák valamelyikében (pl. az audit naplóban vagy a kézbesítési naplóban a Vezérlőpulton): Soha nem tűntek el — a listák mostantól teljes egészében megjelenítik őket.
2026-08 · Az időbélyegek szerkesztés és törlés után újra OpenAPI-konformak
- Javítás: A
PATCH /v1/codes/{id}hívás után azupdated_atSQLite formátumban, időzóna nélkül tért vissza (2026-08-17 09:00:00), bár az OpenAPI-specifikáció aformat: date-timeformátumot ígéri, és a létrehozás (POST) az ISO időbélyeget (2026-08-17T09:00:00.000Z) adja vissza. Ugyanez vonatkozott adeleted_at/updated_atértékekre soft-delete esetén, valamint az API-kulcsok, szervezetek, Workspace-ek, tagok, megjegyzések és webhookok szerkesztési/törlési útvonalaira, továbbá az API-kulcsoklast_used_atés a webhookoklast_triggered_atértékeire. Mostantól minden írási útvonal ISO 8601 (UTC,TésZ) formátumú időbélyeget használ. - Hatás: Azok a kliensek, amelyek az
updated_atértéket anew Date(...)függvénnyel elemzik (SDK-k, CLI, Vezérlőpult), a szóközös formátumot helyi időként értelmezték — a CLI az egyszer már szerkesztett kódoknál a helyi eltolódással eltolt időt mutatta (Bécs: −2 h). Ez javításra került. Emellett egy adatmigráció normalizálja a már elmentett, régi formátumú értékeket ISO formátumra, hogy a rendezés és az összehasonlítás a vegyes adatokban is helyes legyen. A mezőnevek és a válaszstruktúra nem változott. - Háttér: Ugyanaz a hibaosztály, mint az alábbi két javítás (API-kulcs lejárata, újraszkennelési cutoff): az SQLite
datetime('now')függvényeYYYY-MM-DD HH:MM:SSformátumban ír, míg az összes többi író ISO 8601 formátumot használ. Egy forráskód-védelmi teszt (guard test) a jövőben megakadályozza az újabb előfordulásokat.
2026-08 · A listás lapozás többé nem veszít el batch kódokat
- Javítás: A
GET /v1/codesés aGET /v1/dppkizárólag acreated_atalapján lapozott. APOST /v1/codes/batch,POST /v1/dpp/batchvégpontokból és a CSV/XLSX-importból származó kódok azonban egyetlen időbélyegen osztoznak — amint egy batch nagyobb volt, mint alimit(alapértelmezetten 20), a második oldal már nem adta vissza az ugyanahhoz az időbélyeghez tartozó többi sort. A kódok léteztek és elérhetők voltak aGET /v1/codes/:idútvonalon, de a listában (Vezérlőpult, CLIqr3 list, SDK-k, MCP) soha nem jelentek meg. A kurzor mostantól egy keyset a(created_at, id)felett. - API-változás: A
meta.pagination.next_cursormostantól egy opak érték (base64url) a puszta időbélyeg helyett. Azoknak, akik a kurzort változatlanul adják vissza?cursor=paraméterként — ahogyan a Vezérlőpult, a CLI, az összes SDK és az MCP-szerver is teszi —, semmit sem kell változtatniuk. A régi időbélyeg-kurzorokat átmenetileg továbbra is elfogadjuk; az olvashatatlan kurzorok mostantól400-as hibát adnak vissza ahelyett, hogy csendben az első oldalt adnák vissza. - Hatás: Ha egy batch-import után kevesebb kódot láttál a listában, mint amennyi létrejött: a kódok soha nem tűntek el — a lista mostantól hiánytalanul megjeleníti őket. Nincs szükség migrációra.
2026-08 · A biztonsági újraszkennelések ismét 24 órás ütemben futnak
- Javítás: A cél-URL-ek és a landing page-linkek időszakos újraszkennelése (Google Web Risk) kihagyta azokat a kódokat, amelyek utolsó szkennelése ugyanarra a naptári napra esett, mint a 24 órás cutoff — az időponttól függően az újraszkennelés akár egy további nappal is késhetett. A cutoff kiszámítása mostantól ugyanabban az ISO-formátumban történik, amelyben a szkennelési időbélyegek tárolva vannak.
- Hatás: Ha egy cél-URL az utolsó szkennelés után nem biztonságosnak minősül, az ismét a dokumentált 24 órás időablakon belül a kód automatikus szüneteltetését eredményezi. Nincs változás az API-ban vagy a válaszformátumban.
2026-08 · Az API-kulcsok lejárnak a lejárati időpontban
- Javítás: Azokat az API-kulcsokat, amelyek
expires_atértéke az adott napra esett, UTC szerint éjfélig továbbra is elfogadta a rendszer. A lejárat összehasonlítása mostantól időbélyegként történik karakterlánc helyett — a lejárt kulcsok azonnal401-es hibát adnak vissza. - Háttér: Az
expires_atérték ISO-időbélyegként van tárolva (2026-08-14T09:00:00Z), míg az összehasonlító oldal szóközös formátumot adott vissza (2026-08-14 09:00:00). A nyers karakterlánc-összehasonlítás ezért csak akkor működött helyesen, ha már a dátum is eltért. - Hatás: Nincs szükség migrációra, a
GET /v1/api-keysválaszformátuma változatlan marad. Az olvashatatlan lejárati értékek mostantól lejártnak minősülnek az érvényes helyett.
2026-08 · API-referencia: Tenant-kezelés dokumentálva
- OpenAPI: A specifikáció — és ezáltal az interaktív referencia — mostantól dokumentálja a szervezeteket (beleértve a
GET /v1/organizations/usagevégpontot), a Workspace-eket, a tagokat és szerepköröket, valamint az Audit-logokat. - Billing: A díjcsomag-áttekintés (
GET /v1/billing/plans) nyilvános; a Checkout (POST /v1/billing/checkout) és a Stripe-ügyfélportál (GET /v1/billing/portal) a szervezet adminisztrátorai számára fenntartott végpontokként vannak megjelölve. - Scan-export: A beolvasási statisztikák (
GET /v1/codes/{id}/scans) és a nyersadat-export (…/scans.csv,…/scans.xlsx) teljes körűen dokumentálva vannak — beleértve a GDPR-tájékoztatást: azip_hashsoha nem szerepel az exportban. - Hibakezelés: Újonnan dokumentálásra került a kérés-validáció
400-as válasza is: a törzs a nyers Zod-hiba, nem egy RFC-7807 problémadokumentum — ennek ellenére azapplication/problem+jsonContent-Type fejléccel kerül kiküldésre.
2026-08 · Nyilvános fájlhivatkozások másolása
- Dashboard: A kód részletező oldalán található nyilvános fájlok mostantól rendelkeznek egy gombbal, amely a nyilvános hivatkozásukat a vágólapra másolja – ez közvetlenül használható egy QR-kód cél-URL-jeként, ha a beolvasásnak azonnal egy adott dokumentumot kell megnyitnia a fájllistát tartalmazó landing page helyett.
- API: A fájl-végpontok (
/v1/files) mostantól apublic_urlmezőt is visszaadják. Ez a mező csak avisibility: publicbeállítású fájloknál van kitöltve – a privát fájlok nem kapnak nyilvános címet. - Működés: A hivatkozás nem igényel bejelentkezést, és közvetlenül a böngészőben nyitja meg a fájlt. A fájl lecserélése változatlanul hagyja a hivatkozást, így a rá nyomtatott kód érvényes marad. Részletek: Fájlok és adatlapok.
2026-07 · Csapatszerepkörök: Szerkesztő törlés nélkül és Admin számlázás
- Új: Szerkesztő (törlés nélkül) tagi szerepkör — QR-kódokat, fájlokat és Digital Product Passport-okat hozhat létre és szerkeszthet, de nem törölhet semmit, és nem hozhat létre API-kulcsokat. Minden destruktív végpont szerveroldalon ellenőrzi a szerepkört (
403). - Számlázás: A csomag-upgrade-ek és a Stripe ügyfélportál (
POST /v1/billing/checkout,GET /v1/billing/portal) mostantól a szervezet adminisztrátorai (Organisations-Administratoren) számára vannak fenntartva — az összes többi szerepkör egy írásvédett csomagáttekintést lát. - Dashboard: A saját szerepkör által nem engedélyezett műveletek elrejtésre kerülnek: Egy Olvasó (Betrachter) például nem látja a létrehozásra, szerkesztésre vagy törlésre szolgáló gombokat; a listák, letöltések és statisztikák láthatóak maradnak. Részletek: Csapat és szerepkörök.
2026-06 · Külső hivatkozások a kód landing page-én
- Landing page: A qr3 által hosztolt landing page mostantól képes külső, saját hosztolású hivatkozásokat (
{ label, url }) is listázni – a feltöltött fájlok mellett vagy azok helyett, például a saját webhelyen található adatlapokhoz. - API: A
POST/PATCH /v1/codesvégpontok elfogadnak egylinkstömböt (0–20 bejegyzés,http(s), ≤ 2048 karakter). Minden URL-t ellenőriz a Google Web Risk; a nem biztonságos URL-ek422-es hibát adnak vissza. Egy üres tömb törli az összes hivatkozást. - Dashboard: Hivatkozások hozzáadása, rendezése és eltávolítása a kód részletező oldalán.
- Biztonság: A renderelt hivatkozások XSS-biztosak maradnak (escaped, csak
http(s)), és az oldal megtartja anoindexfejlécét.
2026-04 · Dashboard-Analytics QR-kódonként
- Dashboard: A QR-kód listában található Analytics gomb mostantól megnyitja az adott QR-kód statisztikai oldalát a
/dashboard/codes/{id}útvonalon. - Routing: A
/dashboard/codesalias továbbra is átirányít a/dashboardoldalra, de már nem kapja el a részletes útvonalakat, mint például a/dashboard/codes/{id}. - API: A részletező oldal közvetlenül a
GET /v1/codes/:idhívással tölti be a QR-kódot; ezáltal már nem függ a listázási lapozási (pagination) korlátoktól. - Tesztek: A regressziós tesztek lefedik az alias-átirányítást és a közvetlen kód-betöltést.
2026-04 · Dashboard törlési párbeszédpanel QR-kódokhoz
- Dashboard: A QR-kód listában lévő kuka ikon mostantól egy saját React párbeszédpanelt (dialog) nyit meg a natív böngészős felugró ablak (popup) helyett.
- Visszajelzés: Törlés után egy toast értesítés jelenik meg a sikerről vagy a hibáról.
- Tesztek: A
packages/dashboard/tests/dashboard.test.tsmegakadályozza a regressziókat aconfirm()hívásra a QR-kód törlési folyamatában.
2026-04 · Dashboard rövid link teszt dinamikus QR-kódokhoz
- Dashboard: A QR-kód listában szereplő shortcode-ok mostantól közvetlenül kattintható külső átirányítási (redirect) linkekként működnek. A külső link ikon például a
wu3qaamellett megnyitja ahttps://qr3.app/{shortCode}címet egy új lapon. - i18n: Bővítettük a tooltip szövegeket német és angol nyelven.
- Tesztek: A
packages/dashboard/tests/dashboard.test.tsvédi a link href-et, az új lapon való megnyitást, anoopener noreferrerattribútumot és az ikont a regressziókkal szemben.
2026-04 · Redirect-Worker útvonal dinamikus QR-kódokhoz
- Javítás: A
https://qr3.app/{shortCode}alatti dinamikus QR-kódokat ismét a redirect-worker dolgozza fel. A production útvonal mostantól aqr3.app/*mintát használja, mivel a Cloudflare Worker útvonalak nem támogatják a:codeútvonal-paramétereket. - Megerősítés: A nem egyező útvonalak továbbításra kerülnek a landing-origin felé, hogy a normál oldalakat, mint például a
/de/pricing, ne blokkolja a redirect-worker. - Tesztek: A
packages/redirect/tests/unit/redirect.test.tsellenőrzi a wildcard útvonalat, a shortcode feldolgozást és az origin-pass-through működését.
2026-04 · Workspace DPP beolvasási áttekintés (Q3.4.2)
- Új:
GET /v1/workspace/stats/dpp?days=30— összesíti az API-key workspace összesdpp_scansadatát (active_dpps,scans_by_day,top_dppsterméknévvel/kategóriával). - Dashboard: Kártya a kezdőlapon (
/dashboard) 30 napos oszlopdiagrammal + toplistákkal — a QR-kód kártyákkal párhuzamosan. - Nyilvános: Marketing shortlink
GET /dpp/dpp_<id>(egy szegmens) élő demókhoz, a/dpp/{gtin}/{serial}útvonallal párhuzamosan.
2026-04 · DPP beolvasási analitika (Q3.4.1)
- Új:
GET /v1/dpp/:id/stats?days=30— a nyilvános GS1-resolver összesített beolvasásai DPP-nként. Mezők:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Új:
dpp_scanstábla (migráció:0011) — elkülönítve ascanstáblától (redirect-worker). Az IP-címek naponta változó (rotáló) salt segítségével kerülnek hashelésre, a nyers IP-címek soha nem érik el a D1-et. - Dashboard: Mini diagramkártya (SVG, diagramkönyvtár nélkül) a
/dashboard/dpp/:dppIdoldalon 30 napos oszlopokkal + top 3 lebontással. Empty-state (üres állapot) jelenik meg, amint egy DPP éles, de még nem volt beolvasása.
2026-04 · Élő EU-megfelelőségi szimulátor (Q3.3.7)
- Új:
POST /v1/dpp/:id/validate-update— részleges frissítéseket szimulál stateless módon (státusz, piaclista, …) perzisztencia nélkül. A válasz tartalmazza azeu_compliance+preview.changed_fieldsadatokat. - Dashboard: Szimulátor kártya a DPP részleteiben (
/dashboard/dpp/:dppId) — chipek aDE/AT/FR/IT/ES/NL+ egyéni értékekhez, státusz legördülő menü, Preview EU impact / Save changes / Reset. Nem blokkoló működés RemixuseFetchersegítségével. - Megerősítés: Kiszervezett szimulátor segédfunkciók (
readUpdatePatchFromForm,marketCountriesKey) + 18 új unit teszt; hibajavítás: az egyedülálló, nem ISO formátumú bemenet már nem törli a piaclistát.
2026-04 · Élő EU-megfelelőségi előnézet a létrehozási űrlapon (Q3.3.6)
- Módosítva: A
POST /v1/dpp/validatemostantól azeu_complianceadatot is visszaadja — ugyanaz a validátor, mint aGET /v1/dpp/:id/eu-compliance, stateless módon a mentés előtt. - Dashboard: Előnézet a meglévő validációs panel alatt + új Save-Guard-Banner a beküldő gombok előtt, ha hibák/figyelmeztetések vannak (i18n többes szám kezelés DE/EN).
2026-04 · EU-validátor + Textil UI (Q3.3.4 + Q3.3.5)
- Új: EU-megfelelőségi validátor 5 textilipari szabállyal (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Új:
GET /v1/dpp/:id/eu-compliancea következő mezőkkel:compliant/espr_ready/issues[]/summary. - Dashboard: EU-megfelelőségi szakasz a DPP részleteiben (összegző kártyák, csoportosított Issue-kártyák, ESPR-Ready-Badge a fejlécben).
2026-04 · Textil DPP-séma (Q3.3.1–Q3.3.3)
- Új:
textilekategória kötelező AGEC-lánccal (szövés/kötés → festés/nyomás → konfekcionálás), szálankéntiorigin_country+recycled_pct,svhc_substances[], ESPR-opt-in (PEF, élettartam, újrahasznosíthatóság). - Új: Alapvető
market_countries: string[]mező (ISO 3166-1 alpha-2) minden DPP kategórián — vezérli a Franciaország-specifikus AGEC-szabályokat és a kötelező francia fogyasztói tájékoztatót. - Új: Fogyasztói HTML-sablon AGEC mikroműanyag-figyelmeztető dobozzal, 3 lépcsős származási lánccal (zászló-pille ikonok), SVHC-listával, tartóssági (durability) és újrahasznosíthatósági (recyclability) szakasszal.
- Migráció:
0010_dpp_market_countries(D1).
2026-04 · DPP tömeges import (Q3.2.1–Q3.2.5)
- Új: A
POST /v1/dpp/importelfogad CSV és XLSX formátumokat (Worker-kompatibilis a SheetJSxlsxsegítségével, ~283 KB gzip csomagméret). - Skálázott: csomagalapú korlát (Free 100 → Enterprise 10k) + darabolt (chunked)
db.batch()100-asával + 5 MB-os kéréstörzs-korlát (body-limit). - Új: Hibajelentés CSV formátumban a 201-es válasz
errors_csvmezőjében; aGET /v1/dpp/import/templates/:category?format=csv|xlsxkész sablonokat biztosít az akkumulátor (battery) és textil kategóriákhoz. - Dashboard: Drag-and-drop feltöltés a
/dashboard/dpp/importoldalon sablon-proxyval és beágyazott (inline) CSV-letöltéssel.
Nem kompatibilitást törő (Non-Breaking) — LTS-bővítések
A fent említett változások mindegyike additív:
- A meglévő
POST /v1/dpp/validatekliensek változtatás nélkül figyelmen kívül hagyják az újeu_compliancemezőt. - A meglévő
batteryfolyamatok változatlanok. - A
market_countriesopcionális, és alapértelmezetten[]értékű.
Lásd az API-verziókezelés oldalt a Breaking-Change irányelvekért.