Changelog
Changelog
Odabrani naglasci iz nedavnih izdanja. Za potpune verzije API-ja i pravila o prekinutim promjenama pogledajte Verzioniranje API-ja i LTS pravila.
Detaljne promjene na pojedinačnim krajnjim točkama: OpenAPI specifikacija i interaktivna API referenca.
2026-10 · Boje na Nadzornoj ploči
- Novo: stranica s pojedinostima koda ima karticu Boje: prednji plan i pozadina kao hex vrijednost, prozirna pozadina, pregled putem stvarne rute slike. Provjera je ista kao kod
PATCH /v1/codes/{id}: kritični parovi traže potvrdu, parovi ispod 1,5:1 ne mogu se spremiti. - Vraćanje na crno na bijelom u sva četiri formata ponovno daje iste bajtove kao bez boja. Kodovi bez boja se ne mijenjaju.
- Prozirni kodovi prikazuju se na šahovskoj podlozi u svim pregledima na Nadzornoj ploči. Pojedinosti: Boje na Nadzornoj ploči.
2026-10 · Boje u PDF-u i EPS-u
- Novo:
qr.pdfiqr.epsiscrtavajufgibg, kao parametre i kao spremljene boje. Crna i svaka siva boja zapisuju se kao sivi ton (samo crna ploča), svaka druga boja kao CMYK u cijelim postocima, primjerice1F4E79kao C74 M36 Y0 K53. - Pozadina kao kod SVG-a: Čim se odabere boja, iza koda i njegove
tihe zone nalazi se neprozirna površina, bijela ili
bg.bg=transparentne iscrtava ništa. Naslov ostaje crn, a ploča s logotipom bijela. - Bez promjena bez boja: Bez
fg/bgi bez spremljenih boja, oba formata isporučuju iste bajtove kao i prije. PDF putovnice proizvoda ostaje neobojan. - Ograničenja: bez ICC profila, bez PDF/X. Pojedinosti: Boje u tisku.
2026-09 · Statični kodovi bez predmemorije preusmjeravanja, istovremeno brisanje
- Izmijenjeno: Statični kodovi više se ne nalaze u predmemoriji preusmjeravanja. Poziv njihove kratke poveznice (
redirect_url) uvijek čita trenutačno stanje. NakonDELETE /v1/accountstatični kod stoga pri sljedećem pozivu više ne preusmjerava, dok je prije to trajalo do 24 sata. Također, promjena tarife odmah utječe na statične kodove. Brisanje računa uklanja dinamične kodove kao i do sada. Tiskani statični kodovi izravno sadrže svoje odredište i na njih ovo ne utječe. - Ispravljeno: Dva istovremena zahtjeva
DELETE /v1/codes/:idza isti kod vraćaju jednom200i jednom404. Webhookqr.deletedšalje se točno jednom, dok se prije slao dvaput. - Novo:
POSTiDELETE /v1/codes/:id/logoodgovaraju s409(errors/conflict) ako je drugi zahtjev istovremeno promijenio logotip istog koda, te tada ne mijenjaju ništa. Prije je preneseni logotip mogao ostati spremljen a da se ne koristi. Dva istovremena zahtjevaDELETE /v1/codes/:id/logooba vraćaju200. Detalji: Logo.
2026-09 · TypeScript-SDK 1.2.0
- Novo u
@qr3/sdk1.2.0:client.codes.update()prihvaćaappearancei vraća nalaze provjere kontrasta kaoissuesu rezultatu; bez nalaza ovo polje nedostaje.client.codes.imageUrl()prihvaćafg,bgiecc. Svaki kod koji API vraća (get,list,create,update,batchCreate) sadržititleiappearance. - Ažuriranje:
npm install @qr3/sdk@latest. Python, Go i PHP slijede. Detalji: SDKs & CLI i Spremanje boja na kodu.
2026-09 · Izmijenjeno vrijeme isteka primjenjuje se unutar otprilike jedne minute
- Ispravljeno:
PATCHnaexpires_atsada prazni predmemoriju preusmjeravanja koda. Novo vrijeme isteka time se primjenjuje unutar otprilike jedne minute umjesto tek do 24 sata kasnije. Prethodno je uklonjeno ili odgođeno vrijeme isteka i dalje vraćalo410do 24 sata, a istek postavljen na trenutno vrijeme omogućavao je preusmjeravanju da nastavi raditi do 24 sata. - Ispravljeno: Kod kreiran s
expires_atistječe točno na vrijeme čak i ako je vrijeme isteka unutar prva 24 sata. - Ispravljeno: Ako se kod obriše dok se njegov logotip učitava ili uklanja,
POSTiDELETE /v1/codes/:id/logoodgovaraju s404i ne mijenjaju obrisani kod, baš kao iPATCH. - Ispravljeno: Čak i statički kod čija je kratka poveznica (
redirect_url) bila pozvana nalazi se u predmemoriji preusmjeravanja. Izmjena, pauziranje i brisanje sada ga također čiste iz predmemorije, a ne samo kod dinamičkih kodova.
2026-09 · Spremanje boja na kodu
- Novo:
PATCH /v1/codes/:idprihvaćaappearancesforeground_coloribackground_color(#RRGGBB, pozadina takođertransparent).qr.svgiqr.pngiscrtavaju spremljene boje bez parametara; parametar upita kao što je?fg=000000i dalje ima prednost. PDF i EPS iscrtavaju boje tek u kasnijem izdanju. - Provjera kontrasta: Par ispod 1,5:1 rezultira s
422. Slabiji parovi se spremaju i prijavljuju umeta.issueskaowarningilicritical; transparentna pozadina je uvijekcritical, nikada blokirana. - Spajanje: Izostavljena polja zadržavaju svoju spremljenu vrijednost,
nullresetira vrijednost. Istovremene promjene na istom kodu više se međusobno ne prepisuju. - U svakom odgovoru koda:
appearancese nalazi u svakom odgovoru koda i u webhookovimaqr.creatediqr.updated.POST, batch i uvoz odbijaju ga s422. - Bez promjena za postojeće kodove: Bez spremljenih boja, svaki kod isporučuje iste bajtove kao i prije. Pojedinosti: Spremanje boja na kodu.
2026-09 · Boje i ispravak pogrešaka kao parametri ruta slika
- Novo: Sve četiri rute slika prihvaćaju
fg(boja prednjeg plana),bg(boja pozadine ilitransparent) iecc(ispravak pogrešakaL,M,Q,H). SVG i PNG iscrtavaju boje; PDF i EPS ih prihvaćaju, ali će ih iscrtavati tek u kasnijem izdanju.eccdjeluje u sva četiri formata, a logotip i dalje namećeH. - Prozirno:
bg=transparentvraća SVG bez pozadine i PNG sa stvarnim alfa kanalom. Podloga mora biti svijetla i ostaviti tihu zonu slobodnom. - Nikada pogreška: Nevaljane vrijednosti se zanemaruju; slika se tada isporučuje točno kao i bez parametara.
- Predmemorija: Svaki aktivni parametar vraća
Cache-Control: public, max-age=300umjesto 24 sata standardne slike. - Nema promjene ponašanja bez parametara: Svaki postojeći kod vraća iste bajtove u sva četiri formata kao i prije.
- Dostupno u svakoj tarifi. Pojedinosti: Boje i ispravak pogrešaka.
2026-09 · PDF i EPS sada također ugrađuju logotip
- Proširenje:
qr.pdfiqr.epssada ugrađuju postavljeni logotip na isti način kao iqr.svgiqr.png(vidi dolje) — kao ugrađenu sliku (PDF putemImage XObject, EPS putem rječnika slika u PostScriptu, tamo samo s%%LanguageLevel: 3), centrirano na istoj površini, s istim povećanjem ispravljanja pogrešaka naH. Oba formata prethodno nisu isporučivala logotip; to je sada ispravljeno. - Predmemorija: S postavljenim logotipom,
qr.pdfiqr.epssada također isporučujuCache-Control: public, max-age=300umjesto inače uobičajenih 24 sata — baš kao i SVG/PNG. - Rezervna opcija: Ako se sama slika logotipa ne može obraditi (na primjer, oštećeni spremljeni objekt), ispravljanje pogrešaka ostaje
H, ali rezervirana površina ostaje prazna umjesto slike — nikada se ne događa pogreška poslužitelja. - Nema promjene ponašanja bez logotipa: Kodovi bez logotipa i dalje isporučuju
qr.pdf/qr.epsbajt-identično, s nepromijenjenom predmemorijom od 24 sata. - Detalji i upute za ispis: Logo u QR kodu.
2026-09 · Logo u QR kodu — Nadzorna ploča i API
- Novo: Kod sada može imati logo u sredini. Na Nadzornoj ploči, stranica s pojedinostima koda stvara vlastitu karticu za logo: Odaberi logo, prilikom prvog dodavanja ili uklanjanja potvrdite upozorenje s obveznim kvačicama (oboje mijenja uzorak točaka), zatim Učitaj logo/Ukloni logo. Zamjena ne zahtijeva potvrdu — mijenja se samo slika, ne i uzorak. Uloga
viewervidi status i pregled, ali ne i tri navedene akcije. - API:
POST /v1/codes/{id}/logo(multipart poljefile; PNG, JPEG ili WebP, najviše 1 MB, SVG se odbija) stvara ili zamjenjuje logo;DELETE /v1/codes/{id}/logoga ponovno uklanja i idempotentno je. Prevelika slika vraća413, nepodržani format422, a ulogaviewer403. - Renderiranje:
qr.svgiqr.pngugrađuju logo kao stvarne piksele (512 × 512, normalizirano) i za to podižu ispravljanje pogrešaka naH. Dodavanje i uklanjanje time mijenjaju uzorak točaka (M↔H), dok zamjena ne mijenja.qr.pdfiqr.epsne ugrađuju logo i ostaju nepromijenjeni. Već ispisani kod u svakom slučaju nastavlja raditi jer kodirano odredište ne ovisi o logotipu — ponovno ispisati moraju samo oni koji žele vidjeti (novi) izgled logotipa i na materijalu, pazeći pritom da ne pomiješaju stare i nove datoteke za ispis. - Predmemorija: S postavljenim logotipom
qr.svgiqr.pngisporučujuCache-Control: public, max-age=300umjesto uobičajenih 24 sata. Pojedinosti, granične vrijednosti i savjeti za ispis: Logo u QR kodu.
2026-08 · operationId za svih 75 operacija i upute “kada koristiti” za agente
- Dodatak: Svih 75 operacija u OpenAPI specifikaciji sada ima
operationId—listCodes,createCode,getCodeStats,archiveWorkspacei tako dalje. Dosad je to polje u potpunosti nedostajalo, pa je svaki generator morao izvoditi naziv metode iz HTTP metode i putanje (postV1Codes). Takvi nazivi ovise o putanji i mijenjaju se sa svakom izmjenom putanje. Format naziva isti je na svih 75 mjesta:list/get/create/update/replace/delete, inače glagol poslovne radnje (validateDpp,registerGs1Identifier,pingWebhook). Glagol prati poslovnu logiku, a ne HTTP metodu —archiveWorkspacejeDELETE,importDppsjePOST. - Utjecaj na samostalno generirane klijente: Svatko tko generira svoj SDK iz specifikacije dobit će preimenovane metode (
postV1Codes→createCode) pri sljedećem pokretanju. To je svrha ove promjene, ali radi se o preimenovanju u tuđem kodu — stoga se ovdje izričito spominje. Putanje, parametri, formati odgovora i statusni kodovi ostaju nepromijenjeni; službeni SDK-ovi, CLI i MCP poslužitelji nisu pogođeni. - Početna točka za agente:
https://qr3.app/llms.txtima odjeljak## When to use qr3.app— šest zadataka umjesto šest funkcija, plus rečenicu o tome za što qr3.app nije pravi alat. Istu informaciju MCP poslužitelj sada pruža prilikom rukovanja:initializepremahttps://mcp.qr3.app/mcpodgovara s poljeminstructions(prije: jedanaest alata bez ikakve klasifikacije). Također je navedeno koji pozivi zahtijevaju API ključ —initializeitools/listne, dok svakitools/callzahtijeva. - Ispravci u
llms.txt: Četiri podatka provjerena su u produkciji i pokazala su se netočnima: (1) Python SDKqr3appnije objavljen na PyPI — redakpip installuklonjen je bez zamjene; (2)Accept: text/markdownvrijedi za početnu stranicu i blog, a ne za svaku stranicu renderiranu na poslužitelju; (3) kontakt adresa je[email protected], uključujući i u JSON-LD-u početne stranice; (4)/de/security/je preusmjeravanje na sidro, a ne zasebna stranica. Nova poveznica:docs.qr3.app/de/skills/. - Osiguranje: Tri tvrdnje u
openapi-spec.test.ts— potpunost, jedinstvenost,lowerCamelCase—, svaka provjerena mutacijom. Devet dodatnih testova bilježi četiri ispravljena podatka kako se ne bi ponovno pojavili. - Poznato ograničenje: Dvije od 75 operacija opisane su u specifikaciji, ali odgovaraju s
404(GET /v1/codes/{id}/statsiGET /v1/account). Ovdje su dobile naziv, a izgubit će ga čim se odluči hoće li biti implementirane ili uklonjene.
2026-08 · Smanjenja tarifa i otkazivanja sada utječu i na limite
- Ispravak: Stripe-webhook je pri promjeni plana i otkazivanju zapisivao samo naziv plana, a ne četiri stupca limita organizacije (
max_workspaces,max_members,max_dynamic_codes,max_scans_per_month). Budući da se pri primjeni uzima maksimum između spremljene vrijednosti i osnovne vrijednosti plana (baseline), organizacija koja je smanjila paket ili ga otkazala zadržala bi svoje stare, više limite — smanjenje (downgrade) je bilo bez učinka. Webhook sada postavlja stupce na osnovnu vrijednost (baseline) nove tarife pri svakoj stvarnoj promjeni plana, a pri otkazivanju na besplatnu (Free) osnovnu vrijednost — točno onako kako to već čini administratorsko upravljanje. - Ponašanje: Rutinska ažuriranja pretplate (produljenje, način plaćanja, proračunavanje/proration) i dalje ne utječu na limite; individualno odobreni viši limiti ostaju nepromijenjeni. Tek stvarna promjena plana vraća ih na osnovnu vrijednost (baseline) nove tarife.
- Utjecaj: Nema promjena u API-ju ili formatu odgovora. Organizacije čije je smanjenje (downgrade) uslijedilo prije ovog ispravka zadržat će stare vrijednosti sve dok ne stupi na snagu sljedeća promjena plana ili dok ih podrška ne prilagodi.
2026-08 · Keyset kursor sada na svim endpointima popisa
- Ispravak: Ispravak kursora za
GET /v1/codesiGET /v1/dpp(vidi dolje) sada je primijenjen na sve preostale popise s paginacijom pomoću kursora:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersi/v1/webhooks/:id/deliveries. Svi su listali isključivo premacreated_at; redovi s identičnim vremenskim oznakama (zapisi revizije skupne operacije, ponovni pokušaji webhooka, uvozi članova) mogli su se izgubiti na sljedećoj stranici. Ključ sortiranja sada je posvuda torka(created_at, id). - Promjena API-ja: Na ovim popisima
meta.pagination.next_cursorod sada je također neprozirna vrijednost (base64url) umjesto same vremenske oznake; nečitljivi kursori vraćaju400, a stari kursori s vremenskom oznakom privremeno se i dalje prihvaćaju. Iznimka jeGET /v1/webhooks/:id/deliveries: tamonext_cursorostaje ID zadnje isporuke (nepoznati ID → prva stranica). Klijenti koji vraćajunext_cursornepromijenjen — nadzorna ploča, CLI, SDK-ovi, MCP — ne moraju ništa mijenjati. - Utjecaj: Nije potrebna migracija. Ako su vam u nekom od ovih popisa (npr. zapisnik revizije ili zapisnik isporuka na nadzornoj ploči) nedostajali zapisi prilikom listanja: nikada nisu nestali — popisi ih od sada prikazuju u cijelosti.
2026-08 · Vremenske oznake nakon uređivanja i brisanja ponovno usklađene s OpenAPI
- Ispravak: Nakon
PATCH /v1/codes/{id},updated_atse vraćao u SQLite formatu bez vremenske zone (2026-08-17 09:00:00), iako OpenAPI specifikacija obećavaformat: date-time, a kreiranje (POST) isporučuje ISO vremensku oznaku (2026-08-17T09:00:00.000Z). Isto je vrijedilo zadeleted_at/updated_atkod soft-deletea, kao i za putanje uređivanja/brisanja za API ključeve, organizacije, radne prostore, članove, komentare i webhookove, te dodatno zalast_used_atAPI ključeva ilast_triggered_atwebhookova. Sve putanje pisanja sada zapisuju ISO 8601 (UTC,TiZ). - Utjecaj: Klijenti koji analiziraju
updated_atpomoćunew Date(...)(SDK-ovi, CLI, nadzorna ploča) čitali su format s razmakom kao lokalno vrijeme — CLI je za jednom uređene kodove prikazivao vrijeme pomaknuto za lokalno odstupanje (Beč: −2 h). To je ispravljeno. Dodatno, migracija podataka normalizira već pohranjene vrijednosti u starom formatu na ISO, kako bi sortiranje i usporedbe u mješovitim podacima bili ispravni. Nema promjena u nazivima polja ili strukturi odgovora. - Pozadina: Ista klasa pogreške kao i dva ispravka u nastavku (istek API ključa, granica ponovnog skeniranja): SQLite-ov
datetime('now')zapisujeYYYY-MM-DD HH:MM:SS, dok svi ostali zapisivači koriste ISO 8601. Guard test izvornog koda spriječit će buduće pojave.
2026-08 · Paginacija popisa više ne gubi batch kodove
- Ispravak:
GET /v1/codesiGET /v1/dppkoristili su paginaciju isključivo putemcreated_at. Međutim, kodovi izPOST /v1/codes/batch,POST /v1/dpp/batchi CSV/XLSX uvoza dijele jednu vremensku oznaku — čim je batch bio veći odlimit(zadano 20), druga stranica više nije vraćala preostale retke s istom vremenskom oznakom. Kodovi su postojali i bili su dostupni putemGET /v1/codes/:id, ali se nikada nisu pojavljivali na popisu (nadzorna ploča, CLIqr3 list, SDK-ovi, MCP). Kursor je sada skup ključeva (keyset) preko(created_at, id). - Promjena API-ja:
meta.pagination.next_cursorod sada je neprozirna vrijednost (base64url) umjesto obične vremenske oznake. Svatko tko vraća kursor nepromijenjen kao?cursor=— kao što to čine nadzorna ploča, CLI, svi SDK-ovi i MCP poslužitelj — ne mora ništa mijenjati. Stari kursori s vremenskom oznakom i dalje će se privremeno prihvaćati; nečitljivi kursori sada vraćaju400umjesto prešutnog vraćanja prve stranice. - Utjecaj: Ako ste nakon batch uvoza na popisu vidjeli manje kodova nego što ih je stvoreno: kodovi nikada nisu nestali — popis ih od sada prikazuje u cijelosti. Nije potrebna migracija.
2026-08 · Sigurnosna ponovna skeniranja ponovno se izvode u 24-satnom ciklusu
- Ispravak: Periodičko ponovno skeniranje ciljnih URL-ova i poveznica landing stranica (Google Web Risk) preskakalo je kodove čije je posljednje skeniranje bilo na isti kalendarski dan kao i 24-satna granica — ovisno o dobu dana, ponovno skeniranje odgađalo se za još najviše jedan dan. Granica se sada izračunava u istom ISO formatu u kojem su pohranjene vremenske oznake skeniranja.
- Utjecaj: Ciljni URL koji se nakon posljednjeg skeniranja klasificira kao nesiguran ponovno dovodi do automatskog pauziranja koda unutar dokumentiranog 24-satnog prozora. Nema promjena u API-ju ili formatu odgovora.
2026-08 · API ključevi istječu u trenutku isteka
- Ispravak: API ključ čiji je
expires_atbio na isti dan nastavio se prihvaćati do ponoći UTC. Istek se sada uspoređuje kao vremenska oznaka umjesto kao tekstualni niz — istekli ključ odmah vraća401. - Pozadina:
expires_atse pohranjuje kao ISO vremenska oznaka (2026-08-14T09:00:00Z), dok je strana za usporedbu isporučivala format s razmakom (2026-08-14 09:00:00). Usporedba sirovih tekstualnih nizova stoga je bila točna samo dok se već i sam datum razlikovao. - Utjecaj: Nije potrebna migracija, format odgovora za
GET /v1/api-keysostaje nepromijenjen. Nečitljive vrijednosti isteka sada se smatraju isteklima umjesto valjanima.
2026-08 · API referenca: Dokumentirano upravljanje tenantima
- OpenAPI: Specifikacija — a time i interaktivna referenca — sada dokumentira organizacije (uklj.
GET /v1/organizations/usage), radne prostore, članove i uloge i revizijske zapisnike. - Billing: Pregled tarifa (
GET /v1/billing/plans) je javan; Checkout (POST /v1/billing/checkout) i Stripe korisnički portal (GET /v1/billing/portal) označeni su kao krajnje točke za administratore organizacije. - Izvoz skeniranja: Statistika skeniranja (
GET /v1/codes/{id}/scans) i izvoz sirovih podataka (…/scans.csv,…/scans.xlsx) potpuno su dokumentirani — uključujući napomenu o GDPR-u:ip_hashnikada nije uključen u izvoz. - Ponašanje pri pogreškama: Također je novo dokumentiran
400odgovor validacije zahtjeva: tijelo (body) je sirova Zod pogreška, a ne RFC-7807 dokument o problemu — ipak se isporučuje pod Content-Typeapplication/problem+json.
2026-08 · Kopiranje javnih poveznica na datoteke
- Nadzorna ploča: Javne datoteke na stranici s detaljima koda sada imaju gumb koji njihovu javnu poveznicu kopira u međuspremnik – odmah spremnu za upotrebu kao ciljni URL QR koda kada skeniranje treba otvoriti određeni dokument umjesto landing stranice s popisom datoteka.
- API: Krajnje točke za datoteke (
/v1/files) dodatno isporučujupublic_url. Polje je postavljeno samo za datoteke svisibility: public– privatne datoteke ne dobivaju javnu adresu. - Ponašanje: Poveznica ne zahtijeva prijavu i otvara datoteku izravno u pregledniku. Opcija Zamijeni ne mijenja tu poveznicu, pa tiskani kod ostaje valjan. Pojedinosti: Datoteke i tehnički listovi.
2026-07 · Timske uloge: Suradnik bez brisanja i administratorska naplata
- Novo: Članska uloga Suradnik (bez brisanja) — stvara i uređuje QR kodove, datoteke i Digital Product Passports, ali ne može ništa brisati niti stvarati API ključeve. Svi destruktivni endpointi provjeravaju ulogu na strani poslužitelja (
403). - Naplata: Nadogradnje tarifa i Stripe korisnički portal (
POST /v1/billing/checkout,GET /v1/billing/portal) sada su rezervirani isključivo za organizacijske Administratore — sve ostale uloge vide pregled tarifa samo za čitanje. - Nadzorna ploča: Radnje koje korisnička uloga ne dopušta automatski se skrivaju: Pregledatelj tako ne vidi gumbe za stvaranje, uređivanje ili brisanje, dok popisi, preuzimanja i statistike ostaju vidljivi. Pojedinosti: Tim i uloge.
2026-06 · Vanjske poveznice na landing stranici koda
- Landing stranica: qr3-hostana landing stranica koda sada može navesti vanjske, samostalno hostane poveznice (
{ label, url }) uz prenesene datoteke ili umjesto njih – primjerice za tehničke listove na vašoj vlastitoj stranici. - API:
POST/PATCH /v1/codesprihvaćaju poljelinks(0–20 unosa,http(s), ≤ 2048 znakova). Svaki URL provjerava se pomoću Google Web Risk; nesiguran URL vraća422. Prazno polje briše sve poveznice. - Nadzorna ploča: Dodavanje, promjena redoslijeda i uklanjanje poveznica na stranici s detaljima koda.
- Sigurnost: Prikazane poveznice ostaju sigurne od XSS-a (escapirane, samo
http(s)) i stranica zadržava svojenoindexzaglavlje.
2026-04 · Analitika nadzorne ploče po QR kodu
- Nadzorna ploča: Gumb za analitiku na popisu QR kodova sada otvara stranicu sa statistikama za odgovarajući QR kod na
/dashboard/codes/{id}. - Usmjeravanje: Alias
/dashboard/codesi dalje preusmjerava na/dashboard, ali više ne presreće detaljne rute poput/dashboard/codes/{id}. - API: Stranica s detaljima učitava QR kod izravno putem
GET /v1/codes/:id; time više ne ovisi o ograničenjima paginacije popisa. - Testovi: Regresijski testovi pokrivaju preusmjeravanje aliasa i izravno učitavanje koda.
2026-04 · Dijalog za brisanje QR kodova na nadzornoj ploči
- Nadzorna ploča: Ikona kante za smeće na popisu QR kodova sada otvara namjenski React dijalog umjesto izvornog skočnog prozora preglednika.
- Povratna informacija: Nakon brisanja pojavljuje se toast obavijest o uspjehu ili pogrešci.
- Testovi:
packages/dashboard/tests/dashboard.test.tssprječava regresije naconfirm()u tijeku brisanja QR koda.
2026-04 · Test kratkih poveznica na nadzornoj ploči za dinamičke QR kodove
- Nadzorna ploča: Kratki kodovi (shortcodes) na popisu QR kodova sada se mogu izravno kliknuti kao vanjske poveznice za preusmjeravanje. Ikona vanjske poveznice pokraj npr.
wu3qaaotvarahttps://qr3.app/{shortCode}u novoj kartici. - i18n: Dodani tekstovi opisa (tooltips) za njemački i engleski jezik.
- Testovi:
packages/dashboard/tests/dashboard.test.tsštiti href poveznice, ponašanje nove kartice,noopener noreferreri ikonu od regresija.
2026-04 · Ruta Redirect Workera za dinamičke QR kodove
- Ispravak: Dinamički QR kodovi na
https://qr3.app/{shortCode}ponovno se obrađuju putem Redirect Workera. Produkcijska ruta sada koristiqr3.app/*jer Cloudflare rute Workera ne podržavaju parametre staze:code. - Učvršćivanje: Nepodudarne staze prosljeđuju se na izvorište odredišne stranice (landing origin) kako normalne stranice poput
/de/pricingne bi bile blokirane od strane Redirect Workera. - Testovi:
packages/redirect/tests/unit/redirect.test.tsprovjerava zamjensku (wildcard) rutu, obradu kratkog koda i prosljeđivanje izvorištu (origin pass-through).
2026-04 · Pregled DPP skeniranja za radni prostor (Q3.4.2)
- Novo:
GET /v1/workspace/stats/dpp?days=30— agregira svadpp_scansskeniranja radnog prostora API ključa (active_dpps,scans_by_day,top_dppss nazivom proizvoda/kategorijom). - Nadzorna ploča: Kartica na početnoj stranici (
/dashboard) s 30-dnevnim stupčastim grafikonom + top listama — paralelno s karticama QR kodova. - Javno: Marketinška kratka poveznica
GET /dpp/dpp_<id>(jedan segment) za demonstracije uživo, paralelno s/dpp/{gtin}/{serial}.
2026-04 · Analitika DPP skeniranja (Q3.4.1)
- Novo:
GET /v1/dpp/:id/stats?days=30— agregirana skeniranja javnog GS1 resolvera po DPP-u. Polja:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Novo: Tablica
dpp_scans(migracija0011) — odvojena odscans(Redirect Worker). IP adrese se hashiraju s dnevno rotirajućom soli (salt), sirove IP adrese nikada ne dolaze do D1. - Nadzorna ploča: Mini kartica s grafikonom (SVG, bez biblioteke za grafikone) na
/dashboard/dpp/:dppIds 30-dnevnim stupcima + top 3 raščlambe. Prikaz praznog stanja (empty-state) čim je DPP aktivan, ali još nema skeniranja.
2026-04 · Simulator usklađenosti s EU propisima uživo (Q3.3.7)
- Novo:
POST /v1/dpp/:id/validate-update— simulira djelomična ažuriranja bez stanja (stateless) (status, popis tržišta, …) bez perzistencije. Odgovor sadržieu_compliance+preview.changed_fields. - Nadzorna ploča: Kartica simulatora u detaljima DPP-a (
/dashboard/dpp/:dppId) — oznake (chips) zaDE/AT/FR/IT/ES/NL+ prilagođeno, padajući izbornik statusa, Preview EU impact / Save changes / Reset. Neblokirajuće putem RemixuseFetcher. - Učvršćivanje: Izdvojeni pomoćni alati simulatora (
readUpdatePatchFromForm,marketCountriesKey) + 18 novih jediničnih testova; ispravak pogreške: samostalni unos koji nije u ISO formatu više ne briše popis tržišta.
2026-04 · Pregled usklađenosti s EU propisima uživo u obrascu za izradu (Q3.3.6)
- Izmijenjeno:
POST /v1/dpp/validatedodatno isporučujeeu_compliance— isti validator kaoGET /v1/dpp/:id/eu-compliance, bez stanja (stateless) prije spremanja. - Nadzorna ploča: Pregled ispod postojećeg panela za validaciju + novi Save-Guard-Banner ispred gumba za slanje ako postoje otvorene pogreške/upozorenja (i18n pluralizacija DE/EN).
2026-04 · EU validator + tekstilno sučelje (Q3.3.4 + Q3.3.5)
- Novo: Validator usklađenosti s EU propisima s 5 tekstilnih pravila (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Novo:
GET /v1/dpp/:id/eu-compliancescompliant/espr_ready/issues[]/summary. - Nadzorna ploča: Odjeljak za usklađenost s EU propisima u detaljima DPP-a (sažeti prikazi, grupirane kartice problema, ESPR-Ready značka u zaglavlju).
2026-04 · Shema tekstilnog DPP-a (Q3.3.1–Q3.3.3)
- Novo: Kategorija
textiles obveznim AGEC lancem (tkanje/pleenje → bojenje/tisak → konfekcija), po vlaknuorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, životni vijek, mogućnost recikliranja). - Novo: Osnovno polje
market_countries: string[](ISO 3166-1 alpha-2) na svim DPP kategorijama — upravlja specifičnim francuskim AGEC pravilima i obveznom napomenom za francuske potrošače. - Novo: HTML predložak za potrošače s AGEC okvirom upozorenja za mikroplastiku, trostupanjskim lancem podrijetla (oznake sa zastavicama), SVHC popisom te odjeljcima za trajnost i mogućnost recikliranja.
- Migracija:
0010_dpp_market_countries(D1).
2026-04 · Skupni uvoz DPP-a (Q3.2.1–Q3.2.5)
- Novo:
POST /v1/dpp/importprihvaća CSV i XLSX (kompatibilno s Workerima putem SheetJSxlsx, ~283 KB gzip paket). - Skalirano: ograničenje temeljeno na pretplati (Free 100 → Enterprise 10k) + podijeljeni
db.batch()u serijama od 100 + ograničenje tijela zahtjeva od 5 MB. - Novo: Izvješće o pogreškama kao CSV u polju
errors_csvodgovora 201;GET /v1/dpp/import/templates/:category?format=csv|xlsxpruža gotove predloške za baterije i tekstil. - Nadzorna ploča: Drag-and-drop prijenos na
/dashboard/dpp/imports proxyjem predloška i ugrađenim preuzimanjem CSV-a.
Bez prekidanja kompatibilnosti — LTS proširenja
Sve gore navedene promjene su aditivne:
- Postojeći klijenti koji koriste
POST /v1/dpp/validatezanemaruju novo poljeeu_compliancebez potrebe za izmjenama. - Postojeći
batterytijekovi ostaju nepromijenjeni. market_countriesje opcionalno polje i zadano je postavljeno na[].
Pogledajte Verzioniranje API-ja za pravila o prekinutim promjenama.