Changelog
Changelog
Vybrané najdôležitejšie zmeny z posledných verzií. Pre úplné verzie API a pravidlá pre spätne nekompatibilné zmeny (Breaking-Change-Policy) si pozrite Verziovanie API & LTS pravidlá.
Podrobné zmeny jednotlivých endpointov: Špecifikácia OpenAPI a interaktívna API referencia.
2026-10 · Farby v Dashboarde
- Novinka: detailná stránka kódu má kartu Farby: popredie a pozadie ako hex hodnota, priehľadné pozadie, náhľad cez skutočnú cestu k obrázku. Kontrola je rovnaká ako pri
PATCH /v1/codes/{id}: kritické dvojice vyžadujú potvrdenie, dvojice pod 1,5:1 sa nedajú uložiť. - Obnovenie čiernej na bielej vracia vo všetkých štyroch formátoch opäť rovnaké bajty ako bez farieb. Kódy bez farieb sa nemenia.
- Priehľadné kódy sa vo všetkých náhľadoch Dashboardu zobrazujú na šachovnici. Podrobnosti: Farby v Dashboarde.
2026-10 · Farby v PDF a EPS
- Novinka:
qr.pdfaqr.epsvykresľujúfgabg, ako parametre aj ako uložené farby. Čierna a akákoľvek sivá sa zapisujú ako odtieň sivej (iba čierny plát), akákoľvek iná farba ako CMYK v celých percentách, napríklad1F4E79ako C74 M36 Y0 K53. - Pozadie ako pri SVG: Akonáhle je zvolená farba, za kódom a jeho tichou zónou sa nachádza nepriehľadná plocha, biela alebo
bg.bg=transparentnevykresľuje žiadnu. Názov zostáva čierny, podklad loga biely. - Žiadna zmena bez farieb: Bez
fg/bga bez uložených farieb poskytujú oba formáty rovnaké bajty ako predtým. PDF produktového pasu zostáva nezafarbené. - Obmedzenia: žiadny ICC profil, žiadne PDF/X. Podrobnosti: Farby pri tlači.
2026-09 · Statické kódy bez vyrovnávacej pamäte presmerovania, súbežné odstraňovanie
- Zmena: Statické kódy sa už nenachádzajú vo vyrovnávacej pamäti presmerovania. Volanie ich krátkeho odkazu (
redirect_url) vždy načíta aktuálny stav. PoDELETE /v1/accountpreto statický kód pri ďalšom volaní už nepresmeruje, predtým to trvalo až 24 hodín. Aj zmena tarify sa pri statických kódoch prejaví okamžite. Dynamické kódy sa pri vymazaní účtu odstránia ako doteraz. Vytlačené statické kódy obsahujú svoj cieľ priamo a nie sú ovplyvnené. - Opravené: Dve súbežné požiadavky
DELETE /v1/codes/:idna rovnaký kód vrátia raz200a raz404. Webhookqr.deletedsa odošle presne raz, predtým dvakrát. - Novinka:
POSTaDELETE /v1/codes/:id/logoodpovedajú s409(errors/conflict), ak iná požiadavka súbežne zmenila logo rovnakého kódu, a vtedy nič nezmenia. Predtým mohlo nahrané logo zostať uložené bez využitia. Dve súbežné požiadavkyDELETE /v1/codes/:id/logovrátia obe200. Podrobnosti: Logo.
2026-09 · TypeScript-SDK 1.2.0
- Nové v
@qr3/sdk1.2.0:client.codes.update()prijímaappearancea vracia výsledky kontroly kontrastu akoissuesvo výsledku; bez nálezu toto pole chýba.client.codes.imageUrl()prijímafg,bgaecc. Každý kód, ktorý API vracia (get,list,create,update,batchCreate), obsahujetitleaappearance. - Aktualizácia:
npm install @qr3/sdk@latest. Python, Go a PHP budú nasledovať. Podrobnosti: SDK a CLI a Uloženie farieb v kóde.
2026-09 · Zmenený čas expirácie platí do približne jednej minúty
- Opravené:
PATCHnaexpires_atteraz vymaže vyrovnávaciu pamäť presmerovaní kódu. Nový čas expirácie tak začne platiť do približne jednej minúty namiesto až o 24 hodín neskôr. Predtým odstránená alebo posunutá expirácia naďalej vracala410až po dobu 24 hodín, a expirácia nastavená na aktuálny čas nechala presmerovanie fungovať až ďalších 24 hodín. - Opravené: Kód vytvorený s
expires_atvyprší načas aj vtedy, ak čas expirácie nastane počas prvých 24 hodín. - Opravené: Ak sa kód vymaže počas nahrávania alebo odstraňovania jeho loga,
POSTaDELETE /v1/codes/:id/logoodpovedia s404a vymazaný kód nezmenia, rovnako ako už predtýmPATCH. - Opravené: Aj statický kód, ktorého skrátený odkaz (
redirect_url) bol otvorený, sa nachádza vo vyrovnávacej pamäti presmerovaní. Zmena, pozastavenie a vymazanie ho teraz tiež vymažú, nielen pri dynamických kódoch.
2026-09 · Ukladanie farieb ku kódu
- Novinka:
PATCH /v1/codes/:idakceptujeappearancesforeground_colorabackground_color(#RRGGBB, pozadie ajtransparent).qr.svgaqr.pngvykresľujú uložené farby bez akýchkoľvek parametrov; parameter dopytu ako?fg=000000má stále prednosť. PDF a EPS budú vykresľovať farby až v neskoršej verzii. - Kontrola kontrastu: Pár pod 1,5:1 vráti
422. Slabšie páry sa uložia a nahlásia vmeta.issuesakowarningalebocritical; transparentné pozadie je vždycritical, nikdy nie je zablokované. - Zlúčenie: Vynechané polia si ponechajú svoju uloženú hodnotu,
nullju resetuje. Súbežné zmeny na rovnakom kóde sa už navzájom neprepíšu. - V každej odpovedi kódu:
appearancesa nachádza v každej odpovedi kódu a vo webhookochqr.createdaqr.updated.POST, batch a import ho odmietnu s kódom422. - Žiadna zmena pre existujúce kódy: Bez uložených farieb poskytuje každý kód rovnaké bajty ako predtým. Podrobnosti: Ukladanie farieb ku kódu.
2026-09 · Farby a korekcia chýb ako parametre obrázkových trás
- Novinka: Všetky štyri obrázkové trasy prijímajú
fg(farba popredia),bg(farba pozadia alebotransparent) aecc(korekcia chýbL,M,Q,H). SVG a PNG vykresľujú farby; PDF a EPS ich prijímajú, ale vykreslia ich až v neskoršom vydaní.eccfunguje vo všetkých štyroch formátoch, logo naďalej vynucujeH. - Transparentné:
bg=transparentposkytuje SVG bez pozadia a PNG so skutočným alfa kanálom. Podklad musí byť svetlý a tichá zóna musí zostať voľná. - Nikdy nie chyba: Neplatné hodnoty sa ignorujú; obrázok sa potom vráti presne tak isto, ako keby bol bez parametrov.
- Medzipamäť: Každý účinný parameter poskytuje
Cache-Control: public, max-age=300namiesto 24 hodín predvoleného obrázka. - Žiadna zmena správania bez parametrov: Akýkoľvek existujúci kód poskytuje vo všetkých štyroch formátoch rovnaké bajty ako predtým.
- K dispozícii v každej tarife. Podrobnosti: Farby a korekcia chýb.
2026-09 · PDF a EPS teraz tiež vkladajú logo
- Rozšírenie:
qr.pdfaqr.epsteraz vkladajú nastavené logo rovnako akoqr.svgaqr.png(pozri nižšie) — ako vložený obrázok (PDF cezImage XObject, EPS cez slovník obrázkov v PostScripte, tam iba s%%LanguageLevel: 3), vycentrované na rovnakej ploche, s rovnakým zvýšením opravy chýb naH. Oba formáty doteraz logo nedodávali; toto je teraz opravené. - Medzipamäť: S nastaveným logom teraz aj
qr.pdfaqr.epsposkytujúCache-Control: public, max-age=300namiesto zvyčajných 24 hodín — presne ako SVG/PNG. - Záložné riešenie: Ak samotný obrázok loga nemožno spracovať (napríklad poškodený uložený objekt), oprava chýb zostáva
H, ale vyhradená plocha zostane prázdna namiesto obrázka — nikdy nedôjde k chybe servera. - Žiadna zmena správania bez loga: Kódy bez loga naďalej poskytujú
qr.pdf/qr.epsbajtovo identické, s nezmenenou 24-hodinovou medzipamäťou. - Podrobnosti a pokyny na tlač: Logo v QR kóde.
2026-09 · Logo v QR kóde — Dashboard a API
- Novinka: Kód teraz môže obsahovať logo v strede. V paneli Dashboard
detailná stránka kódu vytvorí vlastnú kartu loga: Vybrať logo,
pri prvom pridaní alebo odstránení potvrdiť upozornenie s povinným
začiarkavacím políčkom (obe akcie menia vzor bodiek), potom Nahrať logo/Odstrániť logo.
Nahradenie nevyžaduje potvrdenie — zmení sa iba obrázok, nie vzor.
Rola
viewervidí stav a náhľad, ale žiadnu z týchto troch akcií. - API:
POST /v1/codes/{id}/logo(multipart polefile; PNG, JPEG alebo WebP, maximálne 1 MB, SVG je odmietnuté) vytvorí alebo nahradí logo;DELETE /v1/codes/{id}/logoho opäť odstráni a je idempotentné. Príliš veľký obrázok vráti413, nepodporovaný formát422, rolaviewer403. - Vykresľovanie:
qr.svgaqr.pngvkladajú logo ako skutočné pixely (512 × 512, normalizované) a kvôli tomu zvyšujú úroveň korekcie chýb naH. Pridanie a odstránenie tak menia vzor bodiek (M↔H), nahradenie nie.qr.pdfaqr.epsnevkladajú žiadne logo a zostávajú nezmenené. Už vytlačený kód funguje v každom prípade ďalej, pretože kódovaný cieľ nezávisí od loga — znova tlačiť musí iba ten, kto chce (nový) vzhľad s logom vidieť aj na materiáli, pričom by nemal miešať staré a nové tlačové súbory. - Medzipamäť: S nastaveným logom vracajú
qr.svgaqr.pngCache-Control: public, max-age=300namiesto bežných 24 hodín. Podrobnosti, limity a pokyny na tlač: Logo v QR kóde.
2026-08 · operationId pre všetkých 75 operácií a návod „kedy použiť“ pre agentov
- Doplnenie: Všetkých 75 operácií v špecifikácii OpenAPI teraz obsahuje
operationId—listCodes,createCode,getCodeStats,archiveWorkspacea tak ďalej. Doteraz toto pole úplne chýbalo, takže každý generátor musel názov metódy odvodzovať z HTTP metódy a cesty (postV1Codes). Takéto názvy závisia od cesty a menia sa pri každej zmene štruktúry cesty. Formát názvu je na všetkých 75 miestach rovnaký:list/get/create/update/replace/delete, inak sloveso vyjadrujúce biznis logiku (validateDpp,registerGs1Identifier,pingWebhook). Sloveso sa riadi biznis logikou, nie HTTP metódou —archiveWorkspacejeDELETE,importDppsjePOST. - Dopad na vlastnoručne generovaných klientov: Tí, ktorí si generujú svoje SDK zo špecifikácie, získajú pri ďalšom spustení premenované metódy (
postV1Codes→createCode). To je účelom tejto zmeny, ide však o premenovanie v cudzom kóde — preto to tu výslovne uvádzame. Cesty, parametre, formáty odpovedí a stavové kódy zostávajú nezmenené; oficiálne SDK, CLI a MCP servery nie sú ovplyvnené. - Vstup pre agentov:
https://qr3.app/llms.txtmá sekciu## When to use qr3.app— šesť úloh namiesto šiestich funkcií, plus vetu o tom, na čo qr3.app nie je tým správnym nástrojom. Rovnakú informáciu teraz poskytuje MCP server pri nadviazaní spojenia:initializevočihttps://mcp.qr3.app/mcpodpovedá s poľominstructions(predtým: jedenásť nástrojov bez akéhokoľvek zaradenia). Zahrnuté je aj to, ktoré volania vyžadujú API kľúč —initializeatools/listnie, každétools/calláno. - Opravy v
llms.txt: Štyri údaje boli overené voči produkcii a neobstáli: (1) Python SDKqr3appnie je zverejnené na PyPI — riadok spip installje bez náhrady odstránený; (2)Accept: text/markdownplatí pre úvodnú stránku a blog, nie pre každú serverom renderovanú stránku; (3) kontaktná adresa je[email protected], a to aj v JSON-LD úvodnej stránky; (4)/de/security/je presmerovanie na kotvu, nie samostatná stránka. Nový odkaz:docs.qr3.app/de/skills/. - Zabezpečenie: Tri overenia v
openapi-spec.test.ts— úplnosť, jedinečnosť,lowerCamelCase—, každé spätne skontrolované pomocou mutácie. Deväť ďalších testov fixuje štyri opravené údaje, aby sa predišlo ich opätovnému výskytu. - Známe obmedzenie: Dve zo 75 operácií sú popísané v špecifikácii, ale odpovedajú kódom
404(GET /v1/codes/{id}/statsaGET /v1/account). Tu dostali svoj názov a opäť oň prídu, hneď ako sa rozhodne, či budú implementované alebo odstránené.
2026-08 · Downgrade-y programov a zrušenia teraz vplývajú aj na limity
- Oprava: Stripe webhook pri zmene programu a zrušení zapisoval iba názov programu, nie štyri stĺpce limitov organizácie (
max_workspaces,max_members,max_dynamic_codes,max_scans_per_month). Keďže vynucovanie limitov berie maximum z uloženej hodnoty a základnej úrovne (baseline) programu, organizácia s downgrade-om alebo zrušeným predplatným si ponechala svoje staré, vyššie limity — downgrade bol neúčinný. Webhook teraz pri každej skutočnej zmene programu nastaví stĺpce na základnú úroveň nového programu a pri zrušení na základnú úroveň Free — presne tak, ako to už robí administrátorská správa. - Správanie: Rutinné aktualizácie predplatného (predĺženie, platobné prostriedky, pomerné účtovanie) sa limitov naďalej nedotýkajú; individuálne udelené vyššie limity prežijú bez zmien. Až skutočná zmena programu ich nastaví na základnú úroveň nového programu.
- Dopad: Žiadna zmena API ani formátu odpovede. Organizácie, ktorých downgrade prebehol pred touto opravou, si ponechajú staré hodnoty, kým nenastane ďalšia zmena programu alebo ich neupraví podpora.
2026-08 · Keyset kurzor teraz na všetkých zoznamových endpointoch
- Oprava: Oprava kurzora pre
GET /v1/codesaGET /v1/dpp(pozri nižšie) je teraz nasadená na všetky ostatné zoznamy s pagináciou pomocou kurzora:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersa/v1/webhooks/:id/deliveries. Všetky doteraz stránkovali iba na základecreated_at; riadky s identickou časovou pečiatkou (záznamy auditu z dávkovej operácie, opakované pokusy webhookov, importy členov) sa mohli na nasledujúcej stránke stratiť. Kľúčom na triedenie je teraz všade n-tica(created_at, id). - Zmena API: V týchto zoznamoch je
meta.pagination.next_cursorodteraz taktiež nepriehľadná hodnota (base64url) namiesto čistej časovej pečiatky; nečitateľné kurzory vracajú400, staré kurzory s časovou pečiatkou budú prechodne naďalej akceptované. Výnimkou jeGET /v1/webhooks/:id/deliveries: tam zostávanext_cursorID posledného doručenia (neznáme ID → prvá stránka). Klienti, ktorí vracajúnext_cursornezmenený — Dashboard, CLI, SDKs, MCP —, nemusia nič meniť. - Dopad: Nie je potrebná žiadna migrácia. Ak vám pri prechádzaní v niektorom z týchto zoznamov (napr. audit log alebo log doručení v Dashboarde) chýbali položky: Nikdy nezmizli — zoznamy ich odteraz zobrazujú kompletne.
2026-08 · Časové pečiatky po úprave a vymazaní opäť v súlade s OpenAPI
- Oprava: Po
PATCH /v1/codes/{id}saupdated_atvracal vo formáte SQLite bez časového pásma (2026-08-17 09:00:00), hoci špecifikácia OpenAPI sľubujeformat: date-timea vytvorenie (POST) poskytuje časovú pečiatku ISO (2026-08-17T09:00:00.000Z). To isté platilo predeleted_at/updated_atpri soft-delete, ako aj pre cesty úpravy/vymazania API kľúčov, organizácií, workspacov, členov, komentárov a webhookov, a navyše prelast_used_atAPI kľúčov alast_triggered_atwebhookov. Všetky zapisovacie cesty teraz ukladajú čas podľa ISO 8601 (UTC,TaZ). - Dopad: Klienti, ktorí parsujú
updated_atpomocounew Date(...)(SDKs, CLI, Dashboard), čítali formát s medzerou ako miestny čas — CLI zobrazovalo pri raz upravených kódoch čas posunutý o lokálny offset (Viedeň: −2 h). Toto je opravené. Okrem toho migrácia dát normalizuje už uložené hodnoty v starom formáte na ISO, aby triedenie a porovnávanie v zmiešaných záznamoch fungovalo správne. Žiadna zmena v názvoch polí ani v štruktúre odpovede. - Pozadie: Rovnaká trieda chýb ako pri dvoch opravách nižšie (expirácia API kľúča, cutoff re-scanu): funkcia
datetime('now')v SQLite zapisujeYYYY-MM-DD HH:MM:SS, zatiaľ čo všetci ostatní zapisovatelia používajú ISO 8601. Test v zdrojovom kóde (guard test) v budúcnosti zabráni novému výskytu tejto chyby.
2026-08 · Stránkovanie zoznamov už nestráca batch kódy
- Oprava:
GET /v1/codesaGET /v1/dppstránkovali iba na základecreated_at. Kódy zPOST /v1/codes/batch,POST /v1/dpp/batcha CSV/XLSX importu však zdieľajú jednu časovú pečiatku — akonáhle bol batch väčší akolimit(predvolene 20), druhá stránka už nevrátila zostávajúce riadky s rovnakou časovou pečiatkou. Kódy existovali a boli dostupné cezGET /v1/codes/:id, ale v zozname (Dashboard, CLIqr3 list, SDKs, MCP) sa nikdy neobjavili. Kurzor je teraz keyset nad(created_at, id). - Zmena API:
meta.pagination.next_cursorje odteraz nepriehľadná hodnota (base64url) namiesto čistej časovej pečiatky. Tí, ktorí vracajú kurzor nezmenený ako?cursor=— tak ako to robí Dashboard, CLI, všetky SDKs a MCP server — nemusia nič meniť. Staré kurzory s časovou pečiatkou budú prechodne naďalej akceptované; nečitateľné kurzory teraz vrátia400namiesto tichého vrátenia prvej stránky. - Dopad: Ak ste po batch importe videli v zozname menej kódov, než ich bolo vytvorených: Kódy sa nikdy nestratili — zoznam ich odteraz zobrazuje kompletne. Nie je potrebná žiadna migrácia.
2026-08 · Bezpečnostné re-scany opäť bežia v 24-hodinovom cykle
- Oprava: Periodické opätovné skenovanie cieľových URL a odkazov na vstupnej stránke (Google Web Risk) vynechávalo kódy, ktorých posledný sken bol v rovnaký kalendárny deň ako 24-hodinový cutoff — v závislosti od času sa opätovný sken oneskoril až o ďalší deň. Cutoff sa teraz počíta v rovnakom ISO formáte, v akom sú uložené časové pečiatky skenov.
- Dopad: Cieľová URL, ktorá je po poslednom skene vyhodnotená ako nebezpečná, opäť vedie k automatickému pozastaveniu kódu v rámci zdokumentovaného 24-hodinového okna. Žiadna zmena API alebo formátu odpovede.
2026-08 · API kľúče vypršia presne v čase expirácie
- Oprava: API kľúč, ktorého
expires_atbol v rovnaký deň, bol akceptovaný až do polnoci UTC. Expirácia sa teraz porovnáva ako časová pečiatka namiesto reťazca — expirovaný kľúč okamžite vráti401. - Pozadie:
expires_atsa ukladá ako ISO časová pečiatka (2026-08-14T09:00:00Z), porovnávacia strana poskytovala formát s medzerou (2026-08-14 09:00:00). Porovnanie surových reťazcov preto fungovalo správne iba vtedy, ak sa líšil už samotný dátum. - Dopad: Nie je potrebná žiadna migrácia, formát odpovede z
GET /v1/api-keyszostáva nezmenený. Nečitateľné hodnoty expirácie sa teraz považujú za expirované namiesto platných.
2026-08 · API referencia: Správa tenantov zdokumentovaná
- OpenAPI: Špecifikácia — a tým pádom aj interaktívna referencia — teraz dokumentuje organizácie (vrátane
GET /v1/organizations/usage), workspacy, členov & roly a auditovacie logy. - Billing: Prehľad programov (
GET /v1/billing/plans) je verejný; checkout (POST /v1/billing/checkout) a zákaznícky portál Stripe (GET /v1/billing/portal) sú označené ako endpointy pre administrátorov organizácie. - Export skenov: Štatistiky skenov (
GET /v1/codes/{id}/scans) a export surových dát (…/scans.csv,…/scans.xlsx) sú plne zdokumentované — vrátane upozornenia týkajúceho sa GDPR:ip_hashnie je nikdy súčasťou exportu. - Spracovanie chýb: Novo zdokumentovaná je aj odpoveď
400pri validácii požiadavky: telo (body) obsahuje surovú chybu Zod, nie dokument problému podľa RFC-7807 — napriek tomu je však odosielaný s Content-Typeapplication/problem+json.
2026-08 · Kopírovanie verejných odkazov na súbory
- Dashboard: Verejné súbory na stránke s podrobnosťami o kóde majú teraz tlačidlo, ktoré skopíruje ich verejný odkaz do schránky – dá sa použiť priamo ako cieľová URL adresa QR kódu, ak má naskenovanie okamžite otvoriť konkrétny dokument namiesto landing page so zoznamom súborov.
- API: Súborové endpointy (
/v1/files) navyše vracajúpublic_url. Toto pole je nastavené len pre súbory svisibility: public– súkromné súbory nedostanú verejnú adresu. - Správanie: Odkaz nevyžaduje prihlásenie a otvorí súbor priamo v prehliadači. Nahradenie súboru ho ponechá nezmenený, takže kód vytlačený na ňom zostáva platný. Podrobnosti: Súbory & dátové hárky.
2026-07 · Tímové roly: Editor bez možnosti mazania & Admin fakturácia
- Novinka: Rola člena Editor (bez mazania) — vytvára a upravuje QR kódy, súbory a Digital Product Passports, ale nemôže nič mazať ani vytvárať API kľúče. Všetky deštruktívne endpointy overujú rolu na strane servera (
403). - Fakturácia: Upgrady programov a zákaznícky portál Stripe (
POST /v1/billing/checkout,GET /v1/billing/portal) sú teraz vyhradené pre administrátorov organizácie — všetky ostatné roly vidia prehľad programov len na čítanie. - Dashboard: Akcie, ktoré vlastná rola neumožňuje, sú skryté: Čitateľ napríklad nevidí tlačidlá na vytváranie, úpravu alebo mazanie; zoznamy, sťahovania a štatistiky zostávajú viditeľné. Podrobnosti: Tím & roly.
2026-06 · Externé odkazy na landing page kódu
- Landing page: Landing page kódu hostovaná na qr3 môže teraz zobrazovať externé, vlastné hostované odkazy (
{ label, url }) – navyše k nahraným súborom alebo namiesto nich, napríklad pre dátové hárky na vašom vlastnom webe. - API:
POST/PATCH /v1/codesakceptujú polelinks(0–20 položiek,http(s), ≤ 2048 znakov). Každá URL adresa je kontrolovaná pomocou Google Web Risk; nebezpečná URL vráti422. Prázdne pole vymaže všetky odkazy. - Dashboard: Pridávanie, triedenie a odstraňovanie odkazov na stránke s podrobnosťami o kóde.
- Bezpečnosť: Vykreslené odkazy zostávajú zabezpečené proti XSS (escaped, iba
http(s)) a stránka si zachováva hlavičkunoindex.
2026-04 · Analytika pre jednotlivé QR kódy v Dashboarde
- Dashboard: Tlačidlo analytiky v zozname QR kódov teraz otvára stránku so štatistikami príslušného QR kódu na adrese
/dashboard/codes/{id}. - Routing: Alias
/dashboard/codesnaďalej presmerováva na/dashboard, ale už nezachytáva detailné cesty ako/dashboard/codes/{id}. - API: Stránka s podrobnosťami načítava QR kód priamo cez
GET /v1/codes/:id; vďaka tomu už nezávisí od limitov stránkovania zoznamu. - Testy: Regresné testy pokrývajú presmerovanie aliasu a priame načítanie kódu.
2026-04 · Dialógové okno na mazanie QR kódov v Dashboarde
- Dashboard: Ikona koša v zozname QR kódov teraz otvára vlastný React dialóg namiesto natívneho vyskakovacieho okna prehliadača.
- Spätná väzba: Po vymazaní sa zobrazí toast správa o úspechu alebo chybe.
- Testy:
packages/dashboard/tests/dashboard.test.tszabraňuje regresiám preconfirm()v procese mazania QR kódu.
2026-04 · Testovanie skrátených odkazov pre dynamické QR kódy v Dashboarde
- Dashboard: Shortcodes v zozname QR kódov sú teraz priamo klikateľné ako externé presmerovacie odkazy. Ikona externého odkazu vedľa napr.
wu3qaaotvoríhttps://qr3.app/{shortCode}na novej karte. - i18n: Doplnené texty tooltipov pre nemčinu a angličtinu.
- Testy:
packages/dashboard/tests/dashboard.test.tschráni href odkazu, správanie novej karty,noopener noreferrera ikonu pred regresiami.
2026-04 · Smerovanie Redirect-Workera pre dynamické QR kódy
- Oprava: Dynamické QR kódy na
https://qr3.app/{shortCode}sú opäť spracovávané Redirect-Workerom. Produkčná cesta teraz využívaqr3.app/*, pretože Cloudflare Worker cesty nepodporujú parametre cesty:code. - Zabezpečenie: Nezhodujúce sa cesty sa prepúšťajú na pôvodnú landing origin adresu, aby bežné stránky ako
/de/pricingneboli blokované Redirect-Workerom. - Testy:
packages/redirect/tests/unit/redirect.test.tsoveruje wildcard cestu, spracovanie shortcode a prepúšťanie na origin.
2026-04 · Prehľad skenovania DPP vo workspace (Q3.4.2)
- Novinka:
GET /v1/workspace/stats/dpp?days=30— agreguje všetkydpp_scanspre workspace daného API kľúča (active_dpps,scans_by_day,top_dppss názvom produktu/kategóriou). - Dashboard: Karta na domovskej stránke (
/dashboard) s 30-dňovým stĺpcovým grafom + top zoznamami — paralelne ku kartám QR kódov. - Verejné: Marketingový skrátený odkaz
GET /dpp/dpp_<id>(jeden segment) pre live ukážky, paralelne k/dpp/{gtin}/{serial}.
2026-04 · Analytika skenovania DPP (Q3.4.1)
- Novinka:
GET /v1/dpp/:id/stats?days=30— agregované skeny verejného GS1 resolvera pre jedno DPP. Polia:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Novinka: Tabuľka
dpp_scans(migrácia0011) — oddelená odscans(Redirect-Worker). IP adresy sú hashované pomocou denne rotujúcej soli (salt), surové IP adresy sa nikdy nedostanú do D1. - Dashboard: Mini grafová karta (SVG, bez knižnice na grafy) na
/dashboard/dpp/:dppIds 30-dňovými stĺpcami + top 3 prehľadmi. Prázdny stav (empty state), akonáhle je DPP aktívny, ale ešte nemal žiadne skeny.
2026-04 · Simulátor súladu s predpismi EÚ v reálnom čase (Q3.3.7)
- Novinka:
POST /v1/dpp/:id/validate-update— simuluje čiastočné aktualizácie bezstavovo (stateless) (status, zoznam trhov, …) bez perzistencie. Odpoveď obsahujeeu_compliance+preview.changed_fields. - Dashboard: Karta simulátora v detaile DPP (
/dashboard/dpp/:dppId) — čipy preDE/AT/FR/IT/ES/NL+ vlastné, rozbaľovací zoznam stavov, Preview EU impact / Save changes / Reset. Neblokujúce cez RemixuseFetcher. - Zabezpečenie: Vyčlenené pomocné funkcie simulátora (
readUpdatePatchFromForm,marketCountriesKey) + 18 nových unit testov; oprava chyby: osamotený ne-ISO vstup už nevymaže zoznam trhov.
2026-04 · Náhľad súladu s predpismi EÚ v reálnom čase vo formulári na vytvorenie (Q3.3.6)
- Zmena:
POST /v1/dpp/validatenavyše vraciaeu_compliance— rovnaký validátor akoGET /v1/dpp/:id/eu-compliance, bezstavovo pred uložením. - Dashboard: Náhľad pod existujúcim validačným panelom + nový Save-Guard banner pred odosielacími tlačidlami, ak sú otvorené chyby/varovania (i18n pluralizácia DE/EN).
EU validátor + textilné UI (Q3.3.4 + Q3.3.5)
- Novinka: Validátor súladu s predpismi EÚ s 5 textilnými pravidlami (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Novinka:
GET /v1/dpp/:id/eu-compliancescompliant/espr_ready/issues[]/summary. - Dashboard: Sekcia súladu s predpismi EÚ v detaile DPP (súhrnné dlaždice, zoskupené karty problémov, odznak ESPR-Ready v hlavičke).
Textil-DPP-Schema (Q3.3.1–Q3.3.3)
- Novinka: Kategória
textiles povinným reťazcom AGEC (tkanie/pletenie → farbenie/potlač → konfekcia), pre každé vláknoorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, životnosť, Recyclability). - Novinka: Základné pole
market_countries: string[](ISO 3166-1 alpha-2) vo všetkých kategóriách DPP — riadi špecifické francúzske pravidlá AGEC a povinné francúzske upozornenie pre spotrebiteľov. - Novinka: Spotrebiteľská HTML šablóna s varovným boxom AGEC pre mikroplasty, 3-stupňovým reťazcom pôvodu (vlajkové pilulky), zoznamom SVHC, sekciou Durability a Recyclability.
- Migrácia:
0010_dpp_market_countries(D1).
DPP-Bulk-Import (Q3.2.1–Q3.2.5)
- Novinka:
POST /v1/dpp/importakceptuje CSV a XLSX (kompatibilné s Workerom cez SheetJSxlsx, ~283 KB gzip balík). - Škálovanie: limit na základe programu (Free 100 → Enterprise 10k) + dávkovanie
db.batch()po 100 + 5 MB limit pre body. - Novinka: Chybový report ako CSV v poli
errors_csvv odpovedi 201;GET /v1/dpp/import/templates/:category?format=csv|xlsxposkytuje hotové šablóny pre batérie a textil. - Dashboard: Nahrávanie pretiahnutím (Drag-and-Drop) na
/dashboard/dpp/imports proxy šablónou a priamym stiahnutím CSV.
Spätne kompatibilné zmeny (Non-Breaking) — rozšírenia LTS
Všetky vyššie uvedené zmeny sú aditívne:
- Existujúci klienti
POST /v1/dpp/validateignorujú nové poleeu_compliancebez akýchkoľvek zmien. - Existujúce procesy pre
batteryzostávajú nezmenené. market_countriesje voliteľné a predvolene nastavené na[].
Pozrite si Verziovanie API pre pravidlá pre spätne nekompatibilné zmeny (Breaking-Change-Policy).