Dnevnik sprememb
Dnevnik sprememb
Izbrani poudarki zadnjih izdaj. Za celotne različice API-ja in pravilnik o prelomnih spremembah si oglejte Različice API-ja in pravilnik LTS.
Podrobne spremembe posameznih končnih točk: Specifikacija OpenAPI in interaktivno referenco API.
2026-10 · Barve na nadzorni plošči
- Novo: stran s podrobnostmi kode ima kartico Barve: ospredje in ozadje kot šestnajstiška vrednost, prosojno ozadje, predogled prek resnične poti slike. Preverjanje je enako kot pri
PATCH /v1/codes/{id}: kritični pari zahtevajo potrditev, parov pod 1,5:1 ni mogoče shraniti. - Ponastavitev na črno na belem v vseh štirih formatih spet vrne enake bajte kot brez barv. Kode brez barv se ne spremenijo.
- Prosojne kode so v vseh predogledih na nadzorni plošči prikazane na šahovnici. Podrobnosti: Barve na nadzorni plošči.
2026-10 · Barve v PDF in EPS
- Novo:
qr.pdfinqr.epsizrisujetafginbgkot parametra in kot shranjene barve. Črna in vsaka siva se zapišeta kot sivine (samo črna plošča), vsaka druga barva pa kot CMYK v celih odstotkih, na primer1F4E79kot C74 M36 Y0 K53. - Ozadje kot pri SVG: Takoj ko je izbrana barva, se za kodo in njenim tihim območjem nahaja prekrivna površina, bela ali
bg.bg=transparentne izriše nobene. Naslov ostane črn, plošča z logotipom pa bela. - Brez sprememb brez barv: Brez
fg/bgin brez shranjenih barv oba formata vrneta enake bajte kot prej. PDF potnega lista izdelka ostane neobarvan. - Omejitve: brez profila ICC, brez PDF/X. Podrobnosti: Barve v tisku.
2026-09 · Statične kode brez predpomnilnika preusmeritev, sočasno brisanje
- Spremenjeno: Statične kode niso več v predpomnilniku preusmeritev. Klic njihove kratke povezave (
redirect_url) vedno prebere trenutno stanje. PoDELETE /v1/accountstatična koda ob naslednjem klicu zato ne preusmerja več, prej pa se je to lahko dogajalo do 24 ur. Tudi sprememba naročniškega paketa pri statičnih kodah začne veljati takoj. Izbris računa počisti dinamične kode kot do sedaj. Natisnjene statične kode neposredno vsebujejo svoj cilj in to nanje ne vpliva. - Odpravljeno: Dve sočasni zahtevi
DELETE /v1/codes/:idza isto kodo vrneta enkrat200in enkrat404. Webhookqr.deletedse pošlje natanko enkrat, prej dvakrat. - Novo:
POSTinDELETE /v1/codes/:id/logoodgovorita s409(errors/conflict), če je druga zahteva sočasno spremenila logotip iste kode, in nato ne spremenita ničesar. Prej je naložen logotip lahko ostal shranjen, ne da bi bil uporabljen. Dve sočasni zahteviDELETE /v1/codes/:id/logoobe vrneta200. Podrobnosti: Logotip.
2026-09 · TypeScript-SDK 1.2.0
- Novo v
@qr3/sdk1.2.0:client.codes.update()sprejmeappearancein vrne ugotovitve preverjanja kontrasta kotissuesv rezultatu; brez ugotovitev to polje manjka.client.codes.imageUrl()sprejmefg,bginecc. Vsaka koda, ki jo vrne API (get,list,create,update,batchCreate), vsebujetitleinappearance. - Posodobitev:
npm install @qr3/sdk@latest. Sledijo Python, Go in PHP. Podrobnosti: SDK-ji in CLI in Shranjevanje barv na kodi.
2026-09 · Spremenjen čas poteka velja v približno eni minuti
- Odpravljeno:
PATCHnaexpires_atzdaj počisti predpomnilnik preusmeritev kode. Nov čas poteka tako začne veljati v približno eni minuti namesto šele do 24 ur pozneje. Prej je odstranjen ali prestavljen potek še do 24 ur vračal410, potek, nastavljen na trenutni čas, pa je preusmeritev pustil delovati še do 24 ur. - Odpravljeno: Koda, ustvarjena z
expires_at, poteče pravočasno tudi takrat, ko je potek v prvih 24 urah. - Odpravljeno: Če je koda izbrisana med nalaganjem ali odstranjevanjem njenega logotipa,
POSTinDELETE /v1/codes/:id/logoodgovorita s404in ne spremenita izbrisane kode, enako kot žePATCH. - Odpravljeno: Tudi statična koda, katere kratka povezava (
redirect_url) je bila obiskana, se nahaja v predpomnilniku preusmeritev. Spreminjanje, zaustavitev in brisanje jo zdaj prav tako počistijo, ne le pri dinamičnih kodah.
2026-09 · Shranjevanje barv na kodi
- Novo:
PATCH /v1/codes/:idsprejemaappearancesforeground_colorinbackground_color(#RRGGBB, ozadje tuditransparent).qr.svginqr.pngizrišeta shranjene barve brez parametrov; parameter poizvedbe, kot je?fg=000000, ima še vedno prednost. PDF in EPS bosta barve izrisovala šele v kasnejši različici. - Preverjanje kontrasta: Par pod 1,5:1 vrne
422. Šibkejši pari se shranijo in vmeta.issuesjavijo kotwarningalicritical; prozorno ozadje je vednocritical, nikoli blokirano. - Združevanje: Izpuščena polja ohranijo svojo shranjeno vrednost,
nulljo ponastavi. Hkratne spremembe na isti kodi se ne prepisujejo več med seboj. - V vsakem odgovoru kode:
appearanceje prisoten v vsakem odgovoru kode in v spletnih kavljih (webhooks)qr.createdinqr.updated.POST, batch in uvoz ga zavrnejo z422. - Brez sprememb za obstoječe kode: Brez shranjenih barv vsaka koda vrne enake bajte kot prej. Podrobnosti: Shranjevanje barv na kodi.
2026-09 · Barve in odpravljanje napak kot parametri slikovnih poti
- Novo: Vse štiri slikovne poti sprejemajo
fg(barva ospredja),bg(barva ozadja alitransparent) inecc(odpravljanje napakL,M,Q,H). SVG in PNG izrišeta barve; PDF in EPS jih sprejmeta, vendar jih bosta izrisala šele v kasnejši izdaji.eccdeluje v vseh štirih formatih, logotip pa še naprej zahtevaH. - Prosojno:
bg=transparentvrne SVG brez ozadja in PNG s pravim alfa kanalom. Podlaga mora biti svetla in puščati mirno območje prosto. - Nikoli napaka: Neveljavne vrednosti so prezrte; slika se nato vrne natanko tako kot brez parametrov.
- Predpomnilnik: Vsak dejansko uporabljen parameter vrne
Cache-Control: public, max-age=300namesto 24 ur privzete slike. - Brez spremembe delovanja brez parametrov: Vsaka obstoječa koda v vseh štirih formatih vrne enake bajte kot prej.
- Na voljo v vseh paketih. Podrobnosti: Barve in odpravljanje napak.
2026-09 · PDF in EPS zdaj prav tako vgrajujeta logotip
- Razširitev:
qr.pdfinqr.epszdaj vgrajujeta nastavljeni logotip natanko tako kotqr.svginqr.png(glejte spodaj) — kot vgrajeno sliko (PDF prekImage XObject, EPS prek slikovnega slovarja v PostScript, tam samo z%%LanguageLevel: 3), centrirano na isti površini, z enakim dvigom popravljanja napak naH. Obe obliki zapisa prej nista vključevali logotipa; to je zdaj odpravljeno. - Predpomnilnik: Z nastavljenim logotipom zdaj tudi
qr.pdfinqr.epsvračataCache-Control: public, max-age=300namesto običajnih 24 ur — natanko tako kot SVG/PNG. - Varnostna možnost: Če same slike logotipa ni mogoče pripraviti (na primer poškodovan shranjen objekt), popravljanje napak ostane na
H, vendar rezervirano območje ostane prazno namesto slike — nikoli ne pride do napake strežnika. - Brez spremembe delovanja brez logotipa: Kode brez logotipa še naprej vračajo bajtno identična
qr.pdf/qr.eps, z nespremenjenim 24-urnim predpomnilnikom. - Podrobnosti in navodila za tiskanje: Logotip v kodi QR.
2026-09 · Logotip v kodi QR — Nadzorna plošča in API
- Novo: Koda ima lahko zdaj logotip na sredini. V Nadzorni plošči stran s podrobnostmi kode ustvari lastno kartico za logotip: Izberi logotip, ob prvem dodajanju ali odstranjevanju potrdite opozorilo z obvezno kljukico (oboje spremeni vzorec pik), nato Naloži logotip/Odstrani logotip. Zamenjava ne zahteva potrditve — spremeni se le slika, ne pa tudi vzorec. Vloga
viewervidi stanje in predogled, ne pa tudi treh dejanj. - API:
POST /v1/codes/{id}/logo(večdelno poljefile; PNG, JPEG ali WebP, največ 1 MB, SVG je zavrnjen) ustvari ali zamenja logotip;DELETE /v1/codes/{id}/logoga ponovno odstrani in je idempotenten. Prevelika slika vrne413, nepodprt format422, vlogaviewerpa403. - Upodabljanje:
qr.svginqr.pngvdelata logotip kot dejanske slikovne pike (512 × 512, normalizirano) in za to zvišata raven popravljanja napak naH. Dodajanje in odstranjevanje s tem spremenita vzorec pik (M↔H), zamenjava pa ne.qr.pdfinqr.epsne vdelujeta logotipa in ostaneta nespremenjena. Že natisnjena koda v vsakem primeru deluje naprej, saj kodirani cilj ni odvisen od logotipa — ponovno natisniti mora le tisti, ki želi (nov) videz logotipa videti tudi na materialu, in pri tem ne mešati starih in novih datotek za tisk. - Predpomnilnik: Z nastavljenim logotipom
qr.svginqr.pngvrnetaCache-Control: public, max-age=300namesto običajnih 24 ur. Podrobnosti, omejitve in navodila za tisk: Logotip v kodi QR.
2026-08 · operationId za vseh 75 operacij in navodila “kdaj uporabiti” za agente
- Dopolnitev: Vseh 75 operacij v specifikaciji OpenAPI zdaj vsebuje
operationId—listCodes,createCode,getCodeStats,archiveWorkspacein tako naprej. Prej je to polje povsod manjkalo, zato je moral vsak generator ime metode izpeljati iz metode HTTP in poti (postV1Codes). Takšna imena so odvisna od poti in se spremenijo z vsako spremembo poti. Oblika imena je na vseh 75 mestih enaka:list/get/create/update/replace/delete, sicer pa glagol poslovnega dejanja (validateDpp,registerGs1Identifier,pingWebhook). Glagol sledi poslovni logiki in ne metodi HTTP —archiveWorkspacejeDELETE,importDppspaPOST. - Vpliv na samodejno generirane odjemalce: Tisti, ki svoj SDK generirajo iz specifikacije, bodo ob naslednjem zagonu prejeli preimenovane metode (
postV1Codes→createCode). To je namen te spremembe, vendar gre za preimenovanje v tuji kodi — zato je to tukaj izrecno omenjeno. Poti, parametri, oblike odgovorov in statusne kode ostajajo nespremenjeni; uradni SDK-ji, CLI in MCP-strežniki niso prizadeti. - Vstopna točka za agente:
https://qr3.app/llms.txtvsebuje razdelek## When to use qr3.app— šest nalog namesto petih ali šestih funkcij, plus stavek o tem, za kaj qr3.app ni pravo orodje. Enako informacijo zdaj posreduje MCP-strežnik ob rokovanju:initializenahttps://mcp.qr3.app/mcpodgovori s poljeminstructions(prej: enajst orodij brez kakršne koli razvrstitve). Vključeno je tudi, kateri klici potrebujejo ključ API —initializeintools/listne, vsaktools/callpa da. - Popravki v
llms.txt: Štirje podatki so bili preverjeni v produkciji in niso držali: (1) SDK za Pythonqr3appni objavljen na PyPI — vrsticapip installje odstranjena brez nadomestila; (2)Accept: text/markdownvelja za domačo stran in blog, ne pa za vsako na strežniku upodobljeno stran; (3) kontaktni naslov je[email protected], tudi v JSON-LD domače strani; (4)/de/security/je preusmeritev na sidro, ne pa samostojna stran. Novo povezano:docs.qr3.app/de/skills/. - Zaščita: Tri trditve v
openapi-spec.test.ts— popolnost, edinstvenost,lowerCamelCase—, vsaka navzkrižno preverjena z mutacijo. Devet dodatnih testov fiksira štiri popravljene podatke, da se ne bi ponovili. - Znana omejitev: Dve od 75 operacij sta opisani v specifikaciji, vendar odgovarjata s
404(GET /v1/codes/{id}/statsinGET /v1/account). Tukaj sta prejeli ime in ga bosta znova izgubili, ko bo odločeno, ali bosta zgrajeni ali opuščeni.
2026-08 · Znižanja paketov in preklici zdaj vplivajo tudi na omejitve
- Popravek: Stripeov webhook je ob spremembi paketa in preklicu zapisal le ime paketa, ne pa tudi štirih stolpcev z omejitvami organizacije (
max_workspaces,max_members,max_dynamic_codes,max_scans_per_month). Ker uveljavljanje upošteva maksimum med shranjeno vrednostjo in izhodiščem paketa, je organizacija, ki je prešla na nižji paket ali ga preklicala, obdržala svoje stare, višje omejitve — znižanje paketa je bilo brez učinka. Webhook zdaj ob vsaki dejanski spremembi paketa nastavi stolpce na izhodišče novega paketa, ob preklicu pa na izhodišče brezplačnega paketa — natanko tako, kot to že počne skrbniško upravljanje. - Vedenje: Rutinske posodobitve naročnine (podaljšanje, plačilno sredstvo, sorazmerno zaračunavanje) še naprej ne vplivajo na omejitve; individualno odobrene višje omejitve ostanejo nespremenjene. Šele dejanska sprememba paketa jih ponastavi na izhodišče novega paketa.
- Vpliv: Brez sprememb API-ja ali formata odgovora. Organizacije, katerih znižanje paketa se je zgodilo pred tem popravkom, obdržijo stare vrednosti, dokler ne začne veljati naslednja sprememba paketa ali jih ne prilagodi podpora.
2026-08 · Keyset kazalec zdaj na vseh seznamskih končnih točkah
- Popravek: Popravek kazalca za
GET /v1/codesinGET /v1/dpp(glejte spodaj) je zdaj uveden za vse preostale seznamske končne točke s paginacijo na podlagi kazalca:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersin/v1/webhooks/:id/deliveries. Vsi so prej listali izključno pocreated_at; vrstice z enakim časovnim žigom (revizijski zapisi paketne operacije, ponovni poskusi webhookov, uvozi članov) so se lahko na naslednji strani izgubile. Sortirni ključ je zdaj povsod nabor(created_at, id). - Sprememba API-ja: V teh seznamih je
meta.pagination.next_cursorod zdaj naprej prav tako neprozorna vrednost (base64url) namesto samega časovnega žiga; nečitljivi kazalci vrnejo400, stari kazalci s časovnim žigom pa se začasno še naprej sprejemajo. Izjema jeGET /v1/webhooks/:id/deliveries: tamnext_cursorostaja ID zadnje dostave (neznan ID → prva stran). Odjemalcem, kinext_cursorvračajo nespremenjen — Nadzorna plošča, CLI, SDK-ji, MCP —, ni treba ničesar spreminjati. - Vpliv: Migracija ni potrebna. Če ste v katerem od teh seznamov (npr. revizijski dnevnik ali dnevnik dostav v Nadzorni plošči) pri listanju pogrešali zapise: nikoli niso izginili — seznami jih od zdaj naprej prikazujejo v celoti.
2026-08 · Časovni žigi po urejanju in brisanju ponovno skladni z OpenAPI
- Popravek: Po
PATCH /v1/codes/{id}se jeupdated_atvrnil v formatu SQLite brez časovnega pasu (2026-08-17 09:00:00), čeprav specifikacija OpenAPI določaformat: date-timein ustvarjanje (POST) vrne časovni žig ISO (2026-08-17T09:00:00.000Z). Enako je veljalo zadeleted_at/updated_atpri mehkem brisanju (soft-delete) ter za poti urejanja/brisanja API-ključev, organizacij, delovnih prostorov, članov, komentarjev in webhookov, poleg tega pa tudi zalast_used_atAPI-ključev inlast_triggered_atwebhookov. Vse poti za pisanje zdaj zapisujejo časovni žig v formatu ISO 8601 (UTC,TinZ). - Vpliv: Odjemalci, ki razčlenjujejo
updated_atznew Date(...)(SDK-ji, CLI, Nadzorna plošča), so format s presledkom prebrali kot lokalni čas — CLI je pri enkrat urejenih kodah prikazal čas, zamaknjen za lokalni odmik (Dunaj: −2 h). To je odpravljeno. Poleg tega migracija podatkov normalizira že shranjene vrednosti v starem formatu na ISO, da bosta razvrščanje in primerjava v mešanih podatkih pravilna. Brez sprememb imen polj ali strukture odgovora. - Ozadje: Isti razred napake kot pri spodnjih dveh popravkih (potek veljavnosti API-ključa, meja za ponovni pregled): SQLite-ova funkcija
datetime('now')zapisujeYYYY-MM-DD HH:MM:SS, vsi ostali zapisovalci pa ISO 8601. Zaščitni test v izvorni kodi bo v prihodnje preprečil nove pojavitve te napake.
2026-08 · Paginacija seznamov ne izgublja več paketno ustvarjenih kod
- Popravek:
GET /v1/codesinGET /v1/dppsta uporabljala paginacijo samo prekcreated_at. Vendar pa si kode izPOST /v1/codes/batch,POST /v1/dpp/batchin uvoza CSV/XLSX delijo en časovni žig — takoj ko je bil batch večji odlimit(privzeto 20), druga stran ni več vrnila preostalih vrstic istega časovnega žiga. Kode so obstajale in so bile dosegljive prekGET /v1/codes/:id, vendar se niso nikoli pojavile v seznamu (Nadzorna plošča, CLIqr3 list, SDK-ji, MCP). Kazalec je zdaj nabor ključev (keyset) prek(created_at, id). - Sprememba API-ja:
meta.pagination.next_cursorje od zdaj naprej neprozorna vrednost (base64url) namesto golega časovnega žiga. Tistim, ki kazalec vračajo nespremenjen kot?cursor=— kot to počnejo Nadzorna plošča, CLI, vsi SDK-ji in strežnik MCP —, ni treba ničesar spreminjati. Stari kazalci s časovnim žigom bodo prehodno še naprej sprejeti; nečitljivi kazalci zdaj vrnejo400namesto tihega prikaza prve strani. - Vpliv: Če ste po uvozu batcha v seznamu videli manj kod, kot jih je bilo ustvarjenih: kode niso nikoli izginile — seznam jih od zdaj naprej prikazuje v celoti. Migracija ni potrebna.
2026-08 · Varnostni ponovni pregledi ponovno potekajo v 24-urnem intervalu
- Popravek: Periodično ponovno skeniranje ciljnih URL-jev in povezav na pristajalnih straneh (Google Web Risk) je preskočilo kode, katerih zadnji pregled je bil na isti koledarski dan kot 24-urna časovna meja — glede na čas se je ponovni pregled zakasnil za do en dodaten dan. Časovna meja se zdaj izračunava v enakem formatu ISO, v katerem so shranjeni časovni žigi pregledov.
- Vpliv: Ciljni URL, ki je po zadnjem pregledu označen kot nevaren, ponovno v dokumentiranem 24-urnem oknu vodi do samodejne zaustavitve kode. Brez sprememb API-ja ali formata odgovora.
2026-08 · API-ključi potečejo ob točnem času poteka
- Popravek: API-ključ, katerega
expires_atje bil na isti dan, je bil še naprej sprejet do polnoči UTC. Potek se zdaj primerja kot časovni žig namesto kot niz znakov — potekel ključ takoj vrne401. - Ozadje:
expires_atse shrani kot časovni žig ISO (2026-08-14T09:00:00Z), primerjalna stran pa je vrnila format s presledkom (2026-08-14 09:00:00). Surova primerjava nizov znakov je bila zato pravilna le, dokler se je razlikoval že sam datum. - Vpliv: Migracija ni potrebna, format odgovora
GET /v1/api-keysostaja nespremenjen. Nečitljive vrednosti poteka zdaj veljajo za potekle namesto za veljavne.
2026-08 · Referenca API: Dokumentirano upravljanje tenantov
- OpenAPI: Specifikacija — in s tem interaktivna referenca — zdaj dokumentira organizacije (vklj.
GET /v1/organizations/usage), delovne prostore (workspaces), člane in vloge ter revizijske dnevnike (audit logs). - Billing: Pregled naročniških paketov (
GET /v1/billing/plans) je javen; Checkout (POST /v1/billing/checkout) in Stripe portal za stranke (GET /v1/billing/portal) sta označena kot končni točki za administratorje organizacij. - Izvoz skeniranj: Statistika skeniranj (
GET /v1/codes/{id}/scans) in izvoz surovih podatkov (…/scans.csv,…/scans.xlsx) sta v celoti dokumentirana — vključno z opozorilom o GDPR:ip_hashni nikoli vključen v izvoz. - Obnašanje ob napakah: Na novo je dokumentiran tudi odgovor
400pri validaciji zahtev: telo (body) je surova napaka Zod, ne dokument o težavi RFC-7807 — vendar se kljub temu dostavi pod vrsto vsebineapplication/problem+json.
2026-08 · Kopiranje javnih povezav do datotek
- Nadzorna plošča: Javne datoteke na strani s podrobnostmi kode imajo zdaj gumb, ki njihovo javno povezavo kopira v odložišče – ta je neposredno uporabna kot ciljni URL QR-kode, kadar naj skeniranje namesto pristajalne strani s seznamom datotek takoj odpre določen dokument.
- API: Končne točke za datoteke (
/v1/files) dodatno vračajopublic_url. Polje je nastavljeno samo pri datotekah zvisibility: public– zasebne datoteke ne dobijo javnega naslova. - Vedenje: Povezava ne zahteva prijave in datoteko odpre neposredno v brskalniku. Zamenjava datoteke z gumbom Zamenjaj povezave ne spremeni, zato natisnjena koda ostane veljavna. Podrobnosti: Datoteke in podatkovni listi.
2026-07 · Vloge v ekipi: Sodelavci brez pravice brisanja in administratorsko obračunavanje
- Novo: Vloga člana Sodelavec (brez brisanja) — ustvarja in ureja QR-kode, datoteke in Digital Product Passports, ne more pa ničesar izbrisati ali ustvarjati API-ključev. Vsi destruktivni endpointi preverjajo vlogo na strežniški strani (
403). - Obračunavanje: Nadgradnje naročnin in Stripe portal za stranke (
POST /v1/billing/checkout,GET /v1/billing/portal) so zdaj omejeni na Administratorje organizacije — vse druge vloge vidijo pregled naročnin samo za branje. - Nadzorna plošča: Dejanja, ki jih trenutna vloga ne dovoljuje, so skrita: Gledalec na primer ne vidi gumbov za ustvarjanje, urejanje ali brisanje; seznami, prenosi in statistika ostanejo vidni. Podrobnosti: Ekipa in vloge.
2026-06 · Zunanje povezave na pristajalni strani kode
- Pristajalna stran: qr3-gostovana pristajalna stran kode lahko zdaj poleg naloženih datotek ali namesto njih navede zunanje, samostojno gostovane povezave (
{ label, url }) – na primer za podatkovne liste na vaši lastni strani. - API:
POST/PATCH /v1/codessprejemata poljelinks(0–20 vnosov,http(s), ≤ 2048 znakov). Vsak URL se preveri z Google Web Risk; nevaren URL vrne422. Prazno polje izbriše vse povezave. - Nadzorna plošča: Dodajanje, prerazporejanje in odstranjevanje povezav na strani s podrobnostmi kode.
- Varnost: Upodobljene povezave ostanejo varne pred XSS (escapirane, samo
http(s)) in stran ohrani svojo glavonoindex.
2026-04 · Analitika nadzorne plošče na posamezno kodo QR
- Nadzorna plošča: Gumb za analitiko na seznamu kod QR zdaj odpre stran s statistiko posamezne kode QR na naslovu
/dashboard/codes/{id}. - Usmerjanje: Alias
/dashboard/codesše naprej preusmerja na/dashboard, vendar ne prestreza več podrobnih poti, kot je/dashboard/codes/{id}. - API: Podrobna stran naloži kodo QR neposredno prek
GET /v1/codes/:id; s tem ni več odvisna od omejitev strani na seznamu (pagination). - Testi: Regresijski testi pokrivajo preusmeritev aliasa in neposredno nalaganje kode.
2026-04 · Pogovorno okno za brisanje kod QR na nadzorni plošči
- Nadzorna plošča: Ikona smetnjaka na seznamu kod QR zdaj odpre lastno pogovorno okno React namesto izvornega pojavnega okna brskalnika.
- Povratne informacije: Po brisanju se prikaže pojavno obvestilo (toast) o uspehu ali napaki.
- Testi:
packages/dashboard/tests/dashboard.test.tspreprečuje regresije priconfirm()v poteku brisanja kode QR.
2026-04 · Test kratkih povezav na nadzorni plošči za dinamične kode QR
- Nadzorna plošča: Kratke kode na seznamu kod QR so zdaj neposredno klikljive kot zunanje preusmeritvene povezave. Ikona za zunanjo povezavo poleg npr.
wu3qaaodprehttps://qr3.app/{shortCode}v novem zavihku. - i18n: Dodana besedila orodnih namigov (tooltip) za nemščino in angleščino.
- Testi:
packages/dashboard/tests/dashboard.test.tsščiti povezavo href, vedenje novega zavihka,noopener noreferrerin ikono pred regresijami.
2026-04 · Pot preusmeritvenega delavca (Redirect-Worker) za dinamične kode QR
- Popravek: Dinamične kode QR na
https://qr3.app/{shortCode}ponovno obdeluje preusmeritveni delavec (Redirect-Worker). Produkcijska pot zdaj uporabljaqr3.app/*, ker poti Cloudflare Workers ne podpirajo parametrov poti:code. - Utrjevanje: Neprilagojene poti se posredujejo ciljnemu naslovu pristajalne strani (landing origin), tako da preusmeritveni delavec ne blokira običajnih strani, kot je
/de/pricing. - Testi:
packages/redirect/tests/unit/redirect.test.tspreverja pot z divjo karto (wildcard), obdelavo kratkih kod in prehod do ciljnega naslova (origin pass-through).
2026-04 · Pregled skeniranj DPP v delovnem prostoru (Q3.4.2)
- Novo:
GET /v1/workspace/stats/dpp?days=30— združuje vsa skeniranjadpp_scansdelovnega prostora ključa API (active_dpps,scans_by_day,top_dppsz imenom izdelka/kategorijo). - Nadzorna plošča: Kartica na začetni strani (
/dashboard) s 30-dnevnim paličnim grafikonom + seznami najboljših — vzporedno s karticami kod QR. - Javno: Tržna kratka povezava
GET /dpp/dpp_<id>(en segment) za predstavitve v živo, vzporedno z/dpp/{gtin}/{serial}.
2026-04 · Analitika skeniranj DPP (Q3.4.1)
- Novo:
GET /v1/dpp/:id/stats?days=30— združena skeniranja javnega razreševalnika GS1 na DPP. Polja:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Novo: Tabela
dpp_scans(migracija0011) — ločena odscans(preusmeritveni delavec). IP-naslovi so zgoščeni z dnevno rotirajočo soljo (salt), surove IP-naslove pa nikoli ne dosežejo baze D1. - Nadzorna plošča: Mini kartica z grafikonom (SVG, brez knjižnice za grafikone) na
/dashboard/dpp/:dppIds 30-dnevnimi stolpci + razčlenitvijo najboljših 3. Prazno stanje (empty state), takoj ko je DPP aktiven, vendar še nima skeniranj.
2026-04 · Simulator skladnosti z EU v živo (Q3.3.7)
- Novo:
POST /v1/dpp/:id/validate-update— simulira delne posodobitve brez stanja (stateless) (status, seznam trgov, …) brez obstojnosti. Odgovor vsebujeeu_compliance+preview.changed_fields. - Nadzorna plošča: Kartica simulatorja v podrobnostih DPP (
/dashboard/dpp/:dppId) — žetoni (chips) zaDE/AT/FR/IT/ES/NL+ po meri, spustni meni za status, Predogled vpliva na EU / Shrani spremembe / Ponastavi. Neblokirajoče prek RemixuseFetcher. - Utrjevanje: Zunanji pomočniki simulatorja (
readUpdatePatchFromForm,marketCountriesKey) + 18 novih enotskih testov; popravek hrošča: samostojni ne-ISO vnos ne izbriše več seznama trgov.
2026-04 · Predogled skladnosti z EU v živo v obrazcu za ustvarjanje (Q3.3.6)
- Spremenjeno:
POST /v1/dpp/validatedodatno vrneeu_compliance— isti validator kotGET /v1/dpp/:id/eu-compliance, brez stanja (stateless) pred shranjevanjem. - Nadzorna plošča: Predogled pod obstoječo ploščo za preverjanje veljavnosti + nova pasica za zaščito pred shranjevanjem (Save-Guard-Banner) pred gumbi za pošiljanje, če so odprte napake/opozorila (i18n množina DE/EN).
2026-04 · Validator EU + uporabniški vmesnik za tekstil (Q3.3.4 + Q3.3.5)
- Novo: Validator skladnosti z EU s 5 tekstilnimi pravili (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Novo:
GET /v1/dpp/:id/eu-compliancezcompliant/espr_ready/issues[]/summary. - Nadzorna plošča: Razdelek za skladnost z EU v podrobnostih DPP (povzetki v obliki ploščic, skupinske kartice težav, značka ESPR-Ready v glavi).
2026-04 · Shema DPP za tekstil (Q3.3.1–Q3.3.3)
- Novo: Kategorija
textilez obvezno verigo AGEC (tkanje/pletenje → barvanje/tiskanje → konfekcija), za vsako vlaknoorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, življenjska doba, možnost recikliranja). - Novo: Osnovno polje
market_countries: string[](ISO 3166-1 alpha-2) v vseh kategorijah DPP — upravlja specifična francoska pravila AGEC in obvezno francosko obvestilo za potrošnike. - Novo: Potrošniška predloga HTML z opozorilnim poljem AGEC za mikroplastiko, 3-stopenjsko verigo izvora (zastavice), seznamom SVHC ter razdelkom za trajnost (Durability) in možnost recikliranja (Recyclability).
- Migracija:
0010_dpp_market_countries(D1).
2026-04 · Množični uvoz DPP (Q3.2.1–Q3.2.5)
- Novo:
POST /v1/dpp/importsprejema CSV in XLSX (združljivo z delavci prek SheetJSxlsx, ~283 KB stisnjen paket gzip). - Skalirano: omejitev glede na paket (Free 100 → Enterprise 10k) + razdeljen
db.batch()po 100 + 5 MB omejitev telesa (body limit). - Novo: Poročilo o napakah kot CSV v polju
errors_csvodgovora 201;GET /v1/dpp/import/templates/:category?format=csv|xlsxponuja pripravljene predloge za baterije in tekstil. - Nadzorna plošča: Prenos z vlečenjem in spuščanjem (Drag-and-Drop) na
/dashboard/dpp/imports posrednikom predlog (template proxy) in neposrednim prenosom CSV.
Neprelomne spremembe — razširitve LTS
Vse zgoraj navedene spremembe so aditivne:
- Obstoječe stranke
POST /v1/dpp/validateprezrejo novo poljeeu_compliancebrez sprememb. - Obstoječi poteki za
batteryostajajo nespremenjeni. market_countriesje neobvezen in ima privzeto vrednost[].
Glejte Različice API-ja za pravilnik o prelomnih spremembah.