Pakeitimų žurnalas
Pakeitimų žurnalas
Atrinkti svarbiausi pastarųjų leidimų akcentai. Norėdami sužinoti apie pilnas API versijas ir esminių pakeitimų politiką (Breaking-Change-Policy), žr. API versijavimas ir LTS politika.
Išsamūs atskirų galinių taškų (endpoints) pakeitimai: OpenAPI specifikacija ir interaktyvi API nuoroda.
2026-10 · Spalvos valdymo skydelyje
- Nauja: kodo išsamios informacijos puslapyje yra kortelė Spalvos: priekinis planas ir fonas kaip šešioliktainė reikšmė, permatomas fonas, peržiūra per tikrąjį paveikslėlio maršrutą. Patikra tokia pati kaip
PATCH /v1/codes/{id}: kritinėms poroms reikia patvirtinimo, poros, mažesnės nei 1,5:1, neišsaugomos. - Atkūrus juodą ant baltos, visi keturi formatai vėl pateikia tuos pačius baitus kaip be spalvų. Kodai be spalvų nesikeičia.
- Permatomi kodai visose valdymo skydelio peržiūrose rodomi ant šachmatų lentos rašto. Išsamiau: Spalvos valdymo skydelyje.
2026-10 · Spalvos PDF ir EPS
- Naujiena:
qr.pdfirqr.epsatvaizduojafgirbgkaip parametrus ir kaip išsaugotas spalvas. Juoda ir bet kokia pilka spalva įrašomos kaip pilkumo tonai (tik juoda plokštė), bet kuri kita spalva – kaip CMYK sveikaisiais procentais, pavyzdžiui,1F4E79kaip C74 M36 Y0 K53. - Fonas kaip ir SVG: Kai tik pasirenkama spalva, už kodo ir jo ramybės zonos atsiranda nepermatomas plotas, baltas arba
bg.bg=transparentneatvaizduoja jokio fono. Pavadinimas lieka juodas, logotipo plokštė – balta. - Jokių pakeitimų be spalvų: Be
fg/bgir be išsaugotų spalvų abu formatai pateikia tuos pačius baitus kaip ir anksčiau. Produkto paso PDF lieka nespalvotas. - Apribojimai: nėra ICC profilio, nėra PDF/X. Išsami informacija: Spalvos spaudoje.
2026-09 · Statiniai kodai be nukreipimo talpyklos, lygiagretus trynimas
- Pakeista: Statiniai kodai nebėra saugomi nukreipimo talpykloje. Iškvietus jų trumpąją nuorodą (
redirect_url), visada nuskaitoma naujausia būsena. Todėl poDELETE /v1/accountstatinis kodas kito iškvietimo metu nebenukreipia, nors anksčiau tai galėjo trukti iki 24 valandų. Plano keitimas statiniams kodams taip pat įsigalioja iš karto. Dinaminiai kodai ištrinami naikinant paskyrą, kaip ir anksčiau. Atspausdinti statiniai kodai tiesiogiai nurodo savo tikslą, todėl jiems tai įtakos neturi. - Ištaisyta: Dvi lygiagrečios užklausos
DELETE /v1/codes/:idtam pačiam kodui vieną kartą grąžina200, o kitą kartą –404. Webhookqr.deletedišsiunčiamas lygiai vieną kartą, anksčiau buvo siunčiamas du kartus. - Nauja:
POSTirDELETE /v1/codes/:id/logoatsako kodu409(errors/conflict), jei kita užklausa tuo pačiu metu pakeitė to paties kodo logotipą, ir tada nieko nekeičia. Anksčiau įkeltas logotipas galėjo likti išsaugotas ir nenaudojamas. Dvi lygiagrečios užklausosDELETE /v1/codes/:id/logoabi grąžina200. Išsamiau: Logotipas.
2026-09 · TypeScript-SDK 1.2.0
- Naujiena
@qr3/sdk1.2.0:client.codes.update()priimaappearanceir grąžina kontrasto patikros rezultatus kaipissuesrezultate; jei išvadų nėra, šio lauko nėra.client.codes.imageUrl()priimafg,bgirecc. Kiekvienas kodas, kurį grąžina API (get,list,create,update,batchCreate), turititleirappearance. - Atnaujinimas:
npm install @qr3/sdk@latest. Python, Go ir PHP bus vėliau. Išsami informacija: SDK ir CLI ir Spalvų išsaugojimas kode.
2026-09 · Pakeistas galiojimo laikas įsigalioja maždaug per minutę
- Ištaisyta: Atlikus
PATCHužklausą laukuiexpires_at, dabar išvaloma kodo nukreipimo talpykla. Taigi naujas galiojimo laikas įsigalioja maždaug per minutę, o ne iki 24 valandų vėliau. Anksčiau pašalintas arba atidėtas galiojimo laikas iki 24 valandų toliau grąžindavo410, o galiojimo laiką nustačius į „dabar“, nukreipimas veikdavo dar iki 24 valandų. - Ištaisyta: Kodas, sukurtas su
expires_at, nustoja galioti laiku net ir tada, kai galiojimo pabaiga yra per pirmąsias 24 valandas. - Ištaisyta: Jei kodas ištrinamas jo logotipo įkėlimo ar pašalinimo metu,
POSTirDELETE /v1/codes/:id/logoatsako404ir nekeičia ištrinto kodo, kaip jau daroPATCH. - Ištaisyta: Statinis kodas, kurio trumpoji nuoroda (
redirect_url) buvo iškviesta, taip pat išsaugomas nukreipimo talpykloje. Dabar jį pakeitus, pristabdžius ar ištrynus, talpykla taip pat išvaloma, ne tik dinaminių kodų atveju.
2026-09 · Spalvų išsaugojimas kode
- Naujiena:
PATCH /v1/codes/:idpriimaappearancesuforeground_colorirbackground_color(#RRGGBB, fonas taip pat gali būtitransparent).qr.svgirqr.pngatvaizduoja išsaugotas spalvas be jokių parametrų; užklausos parametras, pavyzdžiui,?fg=000000, vis tiek turi pirmenybę. PDF ir EPS spalvas atvaizduos tik vėlesnėje versijoje. - Kontrasto patikra: Pora, kurios santykis mažesnis nei 1,5:1, grąžina
422. Silpnesnės poros yra išsaugomos ir apie jas pranešamameta.issueskaip apiewarningarbacritical; permatomas fonas visada yracritical, bet niekada nėra blokuojamas. - Sujungimas: Praleisti laukai išlaiko savo išsaugotą reikšmę,
nullją anuliuoja. Vienu metu atliekami to paties kodo pakeitimai nebepersirašo vieni ant kitų. - Kiekviename kodo atsakyme:
appearanceyra pateikiamas kiekviename kodo atsakyme beiqr.createdirqr.updatedwebhook pranešimuose.POST, paketinis apdorojimas ir importavimas jį atmeta su422. - Jokių pakeitimų esamiems kodams: Be išsaugotų spalvų kiekvienas kodas pateikia tuos pačius baitus kaip ir anksčiau. Išsami informacija: Spalvų išsaugojimas kode.
2026-09 · Spalvos ir klaidų taisymas kaip paveikslėlių maršrutų parametrai
- Nauja: Visi keturi paveikslėlių maršrutai priima
fg(priekinio plano spalva),bg(fono spalva arbatransparent) irecc(klaidų taisymasL,M,Q,H). SVG ir PNG piešia spalvas; PDF ir EPS jas priima, bet pieš tik vėlesniame leidime.eccveikia visais keturiais formatais, logotipas ir toliau reikalaujaH. - Skaidrumas:
bg=transparentgrąžina SVG be fono ir PNG su tikru alfa kanalu. Pagrindas turi būti šviesus ir palikti laisvą ramybės zoną. - Niekada ne klaida: Neteisingos reikšmės ignoruojamos; tada paveikslėlis pateikiamas lygiai toks pat kaip be parametro.
- Talpykla: Kiekvienas pritaikytas parametras pateikia
Cache-Control: public, max-age=300vietoj standartinio paveikslėlio 24 valandų. - Jokių pakeitimų be parametrų: Kiekvienas esamas kodas visais keturiais formatais pateikia tuos pačius baitus kaip anksčiau.
- Prieinama visuose planuose. Išsami informacija: Spalvos ir klaidų taisymas.
2026-09 · PDF ir EPS dabar taip pat įterpia logotipą
- Išplėtimas:
qr.pdfirqr.epsdabar įterpia nustatytą logotipą lygiai taip pat, kaipqr.svgirqr.png(žr. žemiau) — kaip įterptą vaizdą (PDF perImage XObject, EPS per vaizdo žodyną PostScript, ten tik su%%LanguageLevel: 3), centruotą tame pačiame plote, su tuo pačiu klaidų taisymo lygio padidinimu ikiH. Abu formatai iki šiol logotipo nepateikdavo; tai jau ištaisyta. - Talpykla: Su nustatytu logotipu dabar ir
qr.pdfbeiqr.epspateikiaCache-Control: public, max-age=300vietoj įprastų 24 valandų — lygiai taip pat, kaip SVG/PNG. - Atsarginis variantas: Jei pačio logotipo vaizdo nepavyksta apdoroti (pavyzdžiui, sugadintas išsaugotas objektas), klaidų taisymas išlieka
H, tačiau rezervuotas plotas lieka tuščias vietoj vaizdo — niekada nekyla serverio klaida. - Jokių elgsenos pokyčių be logotipo: Kodai be logotipo ir toliau pateikia baitų atžvilgiu identiškus
qr.pdf/qr.epssu nepakeista 24 valandų talpykla. - Informacija ir spausdinimo patarimai: Logotipas QR kode.
2026-09 · Logotipas QR kode — Valdymo skydelis ir API
- Nauja: Kodas dabar gali turėti logotipą viduryje. Valdymo skydelis kodo detalių puslapyje sukuria atskirą logotipo kortelę: Pasirinkti logotipą, pridedant pirmą kartą arba šalinant patvirtinti įspėjimą su privaloma varnele (abu veiksmai keičia taškų šabloną), tada Įkelti logotipą/Pašalinti logotipą. Pakeitimui patvirtinimo nereikia — pasikeičia tik paveikslėlis, o ne šablonas. Rolė
viewermato būseną ir peržiūrą, bet neatlieka nė vieno iš trijų veiksmų. - API:
POST /v1/codes/{id}/logo(daugiaveislis laukasfile; PNG, JPEG arba WebP, ne daugiau kaip 1 MB, SVG atmetamas) sukuria arba pakeičia logotipą;DELETE /v1/codes/{id}/logojį vėl pašalina ir yra idempotentiškas. Per didelis paveikslėlis grąžina413, nepalaikomas formatas —422, rolėviewer—403. - Atvaizdavimas:
qr.svgirqr.pngįterpia logotipą kaip tikrus pikselius (512 × 512, normalizuotas) ir tam padidina klaidų taisymą ikiH. Pridėjimas ir pašalinimas taip pakeičia taškų šabloną (M↔H), o pakeitimas — ne.qr.pdfirqr.epsneįterpia jokio logotipo ir lieka nepakeisti. Jau atspausdintas kodas bet kuriuo atveju veikia toliau, nes užkoduotas tikslas nepriklauso nuo logotipo — iš naujo spausdinti reikia tik tiems, kurie nori matyti (naują) logotipo išvaizdą ir ant medžiagos, bei neturėtų maišyti senų ir naujų spaudos failų. - Talpykla: Kai logotipas nustatytas,
qr.svgirqr.pnggrąžinaCache-Control: public, max-age=300vietoj įprastų 24 valandų. Informacija, ribinės vertės ir spausdinimo nurodymai: Logotipas QR kode.
2026-08 · operationId visoms 75 operacijoms ir „kada naudoti“ instrukcija agentams
- Papildymas: Visos 75 OpenAPI specifikacijos operacijos dabar turi
operationId—listCodes,createCode,getCodeStats,archiveWorkspaceir taip toliau. Iki šiol šio lauko visiškai nebuvo, todėl kiekvienas generatorius turėjo išvesti metodo pavadinimą iš HTTP metodo ir kelio (postV1Codes). Tokie pavadinimai priklauso nuo kelio ir keičiasi su kiekviena kelio rekonstrukcija. Pavadinimo forma visose 75 vietose yra vienoda:list/get/create/update/replace/delete, kitu atveju – verslo veiksmo veiksmažodis (validateDpp,registerGs1Identifier,pingWebhook). Veiksmažodis atitinka verslo logiką, o ne HTTP metodą —archiveWorkspaceyraDELETE,importDppsyraPOST. - Poveikis pačių sugeneruotiems klientams: Tie, kurie generuoja savo SDK iš specifikacijos, kito paleidimo metu gaus pervadintus metodus (
postV1Codes→createCode). Tai yra šio pakeitimo tikslas, tačiau tai yra pervadinimas svetimame kode — todėl čia tai aiškiai paminėta. Keliai, parametrai, atsakymų formos ir būsenos kodai lieka nepakeisti; oficialiems SDK, CLI ir MCP serveriams tai įtakos neturi. - Agentų įvadas:
https://qr3.app/llms.txtturi skiltį## When to use qr3.app— šešios užduotys vietoj šešių funkcijų, taip pat sakinys, kam qr3.app nėra tinkamas įrankis. Tą pačią informaciją dabar pateikia MCP serveris rankos paspaudimo metu:initializeužklausa įhttps://mcp.qr3.app/mcpatsako su laukuinstructions(anksčiau: vienuolika įrankių be jokio suskirstymo). Taip pat nurodyta, kuriems iškvietimams reikalingas API raktas —initializeirtools/listnereikia, o kiekvienamtools/callreikia. - Klaidų taisymai
llms.txt: Keturi teiginiai buvo patikrinti gamybinėje aplinkoje ir nepasitvirtino: (1) Python SDKqr3appnėra paskelbtas PyPI —pip installeilutė pašalinta be pakeitimo; (2)Accept: text/markdowngalioja pagrindiniam puslapiui ir tinklaraščiui, o ne kiekvienam serverio pusėje sugeneruotam puslapiui; (3) kontaktinis adresas yra[email protected], taip pat ir pagrindinio puslapio JSON-LD; (4)/de/security/yra nukreipimas į inkarą, o ne atskiras puslapis. Nauja nuoroda:docs.qr3.app/de/skills/. - Apsauga: Trys teiginiai
openapi-spec.test.tsfaile — išsamumas, unikalumas,lowerCamelCase—, kiekvienas patikrintas mutacija. Dar devyni testai užfiksuoja keturis ištaisytus duomenis, kad jie vėl nepasikartotų. - Žinomas apribojimas: Dvi iš 75 operacijų yra aprašytos specifikacijoje, tačiau grąžina
404(GET /v1/codes/{id}/statsirGET /v1/account). Čia jos gavo pavadinimą ir vėl jį praras, kai tik bus nuspręsta, ar jos bus sukurtos, ar pašalintos.
2026-08 · Tarifų planų sumažinimai ir atšaukimai dabar veikia ir limitus
- Ištaisyta: Stripe webhook keičiant planą ar jį atšaukiant įrašydavo tik plano pavadinimą, bet ne keturis organizacijos limitų stulpelius (
max_workspaces,max_members,max_dynamic_codes,max_scans_per_month). Kadangi taikant ribojimus imama didžiausia reikšmė iš išsaugotos vertės ir bazinio plano lygio, plano lygį sumažinusi arba narystę nutraukusi organizacija išlaikydavo savo senus, didesnius limitus – plano sumažinimas neturėjo jokio poveikio. Dabar webhook kiekvieno tikro plano keitimo metu nustato stulpelių reikšmes pagal naujojo tarifo bazinį lygį, o atšaukimo atveju – pagal nemokamo plano bazinį lygį – lygiai taip pat, kaip tai jau daro administratoriaus valdymas. - Elgsena: Įprasti prenumeratos atnaujinimai (pratęsimas, mokėjimo priemonė, proporcingas perskaičiavimas) ir toliau nekeičia limitų; individualiai suteikti didesni limitai išlieka nepakitę. Tik tikras plano pakeitimas nustato juos pagal naujojo tarifo bazinį lygį.
- Poveikis: Jokių API ar atsakymo formato pakeitimų. Organizacijos, kurių plano lygis buvo sumažintas prieš šį ištaisymą, išlaiko senąsias reikšmes, kol įsigalios kitas plano pakeitimas arba pagalbos tarnyba jas pakoreguos.
2026-08 · Keyset žymeklis (cursor) dabar visuose sąrašų galiniuose taškuose
- Ištaisyta: Žymeklio (cursor) pataisymas, skirtas
GET /v1/codesirGET /v1/dpp(žr. žemiau), dabar pritaikytas visiems likusiems pagal žymeklį puslapiuojamiems sąrašams:GET /v1/qr-codes/:id/comments,/v1/workspaces,/v1/gs1/identifiers,/v1/members,/v1/audit-logs,/v1/admin/orgs,/v1/admin/usersir/v1/webhooks/:id/deliveries. Visi jie buvo puslapiuojami tik pagalcreated_at; eilutės su identiška laiko žyma (grupinių operacijų audito įrašai, pakartotiniai webhook bandymai, narių importavimas) kitame puslapyje galėjo būti prarastos. Rūšiavimo raktas dabar visur yra kortežas(created_at, id). - API pakeitimas: Šiuose sąrašuose
meta.pagination.next_cursornuo šiol taip pat yra nepermatoma reikšmė (base64url), o ne tiesioginė laiko žyma; neįskaitomi žymekliai grąžina400, o seni laiko žymos žymekliai laikinai bus priimami toliau. IšimtisGET /v1/webhooks/:id/deliveries: čianext_cursorlieka paskutinio pristatymo ID (nežinomas ID → pirmas puslapis). Klientams, kurie grąžinanext_cursornepakeistą — Valdymo skydelis, CLI, SDKs, MCP —, nieko keisti nereikia. - Poveikis: Migracija nereikalinga. Jei kuriame nors iš šių sąrašų (pvz., audito žurnale arba pristatymo žurnale valdymo skydelyje) vartydami puslapius pasigedote įrašų: jie niekur nebuvo dingę — nuo šiol sąrašai juos rodo visus.
2026-08 · Laiko žymos po redagavimo ir trynimo vėl atitinka OpenAPI
- Ištaisyta: Atlikus
PATCH /v1/codes/{id},updated_atbuvo grąžinama SQLite formatu be laiko juostos (2026-08-17 09:00:00), nors OpenAPI specifikacija numatoformat: date-time, o sukūrimas (POST) pateikia ISO laiko žymą (2026-08-17T09:00:00.000Z). Tas pats galiojodeleted_at/updated_atšvelnaus trynimo (Soft-Delete) atveju, taip pat API raktų, organizacijų, darbo sričių (Workspaces), narių, komentarų ir webhook redagavimo bei trynimo keliams, be to, API raktų laukuilast_used_atir webhook laukuilast_triggered_at. Visi rašymo keliai dabar žymi laiką ISO 8601 formatu (UTC,TirZ). - Poveikis: Klientai, kurie analizuoja
updated_atnaudodaminew Date(...)(SDKs, CLI, Valdymo skydelis), tarpų formatą skaitė kaip vietos laiką — CLI rodė bent kartą redaguotų kodų laiką, pastumtą per vietinį poslinkį (Viena: −2 h). Tai ištaisyta. Be to, duomenų migracija normalizuoja jau išsaugotas senojo formato vertes į ISO, kad rūšiavimas ir palyginimai mišriuose rinkiniuose būtų teisingi. Jokių laukų pavadinimų ar atsakymo struktūros pakeitimų. - Kontekstas: Tokia pati klaidų klasė kaip ir du toliau pateikti pataisymai (API raktų galiojimo pabaiga, pakartotinio skenavimo riba): SQLite
datetime('now')įrašoYYYY-MM-DD HH:MM:SS, o visi kiti rašymo keliai – ISO 8601. Ateityje naujiems atvejams užkirs kelią pirminio kodo apsaugos testas.
2026-08 · Sąrašų puslapiavimas nebepraranda grupinių kodų
- Ištaisyta:
GET /v1/codesirGET /v1/dpppuslapiavo tik pagalcreated_at. Tačiau kodai išPOST /v1/codes/batch,POST /v1/dpp/batchir CSV/XLSX importo dalijasi viena laiko žyma — kai tik grupė buvo didesnė neilimit(numatytoji reikšmė 20), antrasis puslapis nebegrąžindavo likusių tos pačios laiko žymos eilučių. Kodai egzistavo ir buvo pasiekiami perGET /v1/codes/:id, tačiau sąraše (Valdymo skydelis, CLIqr3 list, SDK, MCP) niekada nepasirodydavo. Dabar žymeklis yra raktų rinkinys (keyset) pagal(created_at, id). - API pakeitimas: nuo šiol
meta.pagination.next_cursoryra nepermatoma (opaque) reikšmė (base64url), o ne tiesioginė laiko žyma. Tiems, kurie grąžina nepakeistą žymeklį kaip?cursor=— kaip daro Valdymo skydelis, CLI, visi SDK ir MCP serveris — nieko keisti nereikia. Senieji laiko žymos žymekliai laikinai bus priimami toliau; neįskaitomi žymekliai dabar grąžina400, užuot tyliai pateikę pirmąjį puslapį. - Poveikis: Jei po grupinio importavimo sąraše matėte mažiau kodų, nei buvo sukurta: kodai niekur nebuvo dingę — nuo šiol sąrašas juos rodo visus. Migracija nereikalinga.
2026-08 · Saugumo pakartotinis skenavimas vėl vyksta kas 24 valandas
- Ištaisyta: Periodinis tikslinių URL adresų ir nukreipimo puslapių nuorodų pakartotinis skenavimas (Google Web Risk) praleisdavo kodus, kurių paskutinis skenavimas buvo tą pačią kalendorinę dieną kaip ir 24 valandų riba — priklausomai nuo paros laiko, pakartotinis skenavimas vėluodavo iki papildomos paros. Riba dabar skaičiuojama tuo pačiu ISO formatu, kuriuo saugomos skenavimo laiko žymos.
- Poveikis: Tikslinis URL adresas, kuris po paskutinio skenavimo klasifikuojamas kaip nesaugus, vėl sukelia automatinį kodo pristabdymą per dokumentuotą 24 valandų langą. API ar atsakymo formato pakeitimų nėra.
2026-08 · API raktai nustoja galioti pasibaigus jų galiojimo laikui
- Ištaisyta: API raktas, kurio
expires_atbuvo tą pačią dieną, buvo priimamas iki vidurnakčio UTC. Galiojimo pabaiga dabar lyginama kaip laiko žyma, o ne kaip simbolių eilutė – pasibaigusio galiojimo raktas iškart grąžina401. - Kontekstas:
expires_atsaugomas kaip ISO laiko žyma (2026-08-14T09:00:00Z), o palyginamoji pusė pateikdavo formatą su tarpu (2026-08-14 09:00:00). Todėl tiesioginis simbolių eilučių palyginimas buvo teisingas tik tol, kol skyrėsi pati data. - Poveikis: Migracija nereikalinga,
GET /v1/api-keysatsakymo formatas lieka nepakitęs. Neįskaitomos galiojimo pabaigos reikšmės dabar laikomos pasibaigusiomis, o ne galiojančiomis.
2026-08 · API nuoroda: Tenant valdymas dokumentuotas
- OpenAPI: Specifikacija — o kartu ir interaktyvi nuoroda — dabar dokumentuoja organizacijas (įsk.
GET /v1/organizations/usage), darbo sritis (Workspaces), narius ir roles bei audito žurnalus (Audit-Logs). - Billing: Planų apžvalga (
GET /v1/billing/plans) yra vieša; Checkout (POST /v1/billing/checkout) ir Stripe klientų portalas (GET /v1/billing/portal) yra nurodyti kaip galiniai taškai organizacijos administratoriams. - Nuskaitymų eksportas: Nuskaitymų statistika (
GET /v1/codes/{id}/scans) ir neapdorotų duomenų eksportas (…/scans.csv,…/scans.xlsx) yra visiškai dokumentuoti — įskaitant BDAR pranešimą:ip_hashniekada neįtraukiamas į eksportą. - Klaidų elgsena: Taip pat naujai dokumentuotas užklausos patvirtinimo
400atsakymas: pranešimo turinys (body) yra neapdorota Zod klaida, o ne RFC-7807 problemos dokumentas — vis dėlto jis pateikiamas su Content-Typeapplication/problem+json.
2026-08 · Viešųjų failų nuorodų kopijavimas
- Valdymo skydelis: Vieši failai kodo išsamios informacijos puslapyje dabar turi mygtuką, kuris nukopijuoja jų viešąją nuorodą į iškarpinę. Ją galima iškart naudoti kaip QR kodo tikslo URL, kai nuskaičius kodą turi atsidaryti konkretus dokumentas, o ne nukreipimo puslapis su failų sąrašu.
- API: Failų galiniai taškai (
/v1/files) papildomai grąžinapublic_url. Šis laukas užpildomas tik failams suvisibility: public– privatūs failai viešo adreso negauna. - Elgsena: Nuoroda veikia be prisijungimo ir atidaro failą tiesiai naršyklėje. Failą pakeitus funkcija Pakeisti, nuoroda nesikeičia, todėl su ja atspausdintas kodas lieka galioti. Išsamiau: Failai ir duomenų lapai.
2026-07 · Komandos vaidmenys: bendradarbiai be šalinimo teisės ir administratoriaus atsiskaitymas
- Nauja: nario vaidmuo Bendradarbis (be šalinimo) — kuria ir redaguoja QR kodus, failus bei Digital Product Passports, tačiau negali nieko šalinti ar kurti API raktų. Visi destruktyvūs programinės sąsajos taškai tikrina vaidmenį serverio pusėje (
403). - Atsiskaitymas: plano keitimas ir Stripe klientų portalas (
POST /v1/billing/checkout,GET /v1/billing/portal) dabar yra prieinami tik organizacijos administratoriams — visiems kitiems vaidmenims rodoma tik skaitoma plano apžvalga. - Valdymo skydelis: veiksmai, kurių neleidžia naudotojo vaidmuo, yra paslepiami: pavyzdžiui, Žiūrovas nemato kūrimo, redagavimo ar šalinimo mygtukų, tačiau sąrašai, atsisiuntimai ir statistika lieka matomi. Išsamiau: Komanda ir vaidmenys.
2026-06 · Išorinės nuorodos kodo nukreipimo puslapyje
- Nukreipimo puslapis: qr3 talpinamas kodo nukreipimo puslapis dabar gali pateikti išorines, savarankiškai talpinamas nuorodas (
{ label, url }) kartu su įkeltais failais arba vietoj jų – pavyzdžiui, techninių duomenų lapams jūsų pačių svetainėje. - API:
POST/PATCH /v1/codespriima masyvąlinks(0–20 įrašų,http(s), ≤ 2048 simbolių). Kiekvienas URL tikrinamas naudojant „Google Web Risk“; nesaugus URL grąžina422. Tuščias masyvas pašalina visas nuorodas. - Valdymo skydelis: Pridėkite, pertvarkykite ir pašalinkite nuorodas kodo informacijos puslapyje.
- Sauga: Atvaizduotos nuorodos lieka apsaugotos nuo XSS (su kaitos ženklais, tik
http(s)), o puslapis išsaugo savonoindexantraštę.
2026-04 · Valdymo skydelio analitika kiekvienam QR kodui
- Valdymo skydelis: Analitikos mygtukas QR kodų sąraše dabar atidaro atitinkamo QR kodo statistikos puslapį adresu
/dashboard/codes/{id}. - Routing: Alternatyvus adresas (alias)
/dashboard/codesir toliau nukreipia į/dashboard, tačiau nebeperima detalių maršrutų, tokių kaip/dashboard/codes/{id}. - API: Detalusis puslapis įkelia QR kodą tiesiogiai per
GET /v1/codes/:id; dėl to jis nebėra priklausomas nuo sąrašo puslapiavimo (pagination) ribojimų. - Testai: Regresijos testai apima alternatyvaus adreso nukreipimą (alias redirect) ir tiesioginį kodo įkėlimą.
2026-04 · QR kodų trynimo dialogas valdymo skydelyje
- Valdymo skydelis: Šiukšliadėžės piktograma QR kodų sąraše dabar atidaro atskirą React dialogą, o ne naršyklės iššokantį langą (popup).
- Feedback: Ištrynus pasirodo iškylantysis pranešimas (toast) apie sėkmę arba klaidą.
- Testai:
packages/dashboard/tests/dashboard.test.tsapsaugo nuo regresijų naudojantconfirm()QR kodo trynimo sraute.
2026-04 · Trumpųjų nuorodų testas dinaminiams QR kodams valdymo skydelyje
- Valdymo skydelis: Trumpieji kodai (shortcodes) QR kodų sąraše dabar yra tiesiogiai spustelėjami als išorinės nukreipimo nuorodos. Išorinės nuorodos piktograma šalia, pvz.,
wu3qaa, atidarohttps://qr3.app/{shortCode}naujame skirtuke. - i18n: Pridėti patarimų (tooltip) tekstai vokiečių ir anglų kalbomis.
- Testai:
packages/dashboard/tests/dashboard.test.tsapsaugo nuorodos „href“, naujo skirtuko elgseną,noopener noreferrerir piktogramą nuo regresijų.
2026-04 · Nukreipimo Worker maršrutas dinaminiams QR kodams
- Ištaisyta: Dinaminius QR kodus adresu
https://qr3.app/{shortCode}vėl apdoroja nukreipimo Worker. Gamybinis (production) maršrutas dabar naudojaqr3.app/*, nes Cloudflare Worker maršrutai nepalaiko:codekelio parametrų. - Sustiprinimas: Neatitinkantys keliai perduodami į pradinę svetainę (landing origin), kad nukreipimo Worker neblokuotų įprastų puslapių, tokių kaip
/de/pricing. - Testai:
packages/redirect/tests/unit/redirect.test.tstikrina pakaitos simbolio (wildcard) maršrutą, trumpojo kodo apdorojimą ir pradinės svetainės praleidimą (origin pass-through).
2026-04 · Darbo srities DPP nuskaitymų apžvalga (Q3.4.2)
- Nauja:
GET /v1/workspace/stats/dpp?days=30— agreguoja visus API rakto darbo srities (workspace)dpp_scans(active_dpps,scans_by_day,top_dppssu produkto pavadinimu / kategorija). - Valdymo skydelis: Kortelė pradiniame puslapyje (
/dashboard) su 30 dienų stulpeline diagrama + populiariausių sąrašais — lygiagrečiai su QR kodo kortelėmis. - Public: Rinkodaros trumpoji nuoroda
GET /dpp/dpp_<id>(vienas segmentas) tiesioginėms demonstracijoms, lygiagrečiai su/dpp/{gtin}/{serial}.
2026-04 · DPP nuskaitymų analitika (Q3.4.1)
- Nauja:
GET /v1/dpp/:id/stats?days=30— agreguoti viešojo GS1 atpažintuvo (resolver) nuskaitymai vienam DPP. Laukai:total_scans,period_scans,scans_by_day,top_countries,top_devices,top_representations. - Nauja: Lentelė
dpp_scans(migracija0011) — atskirta nuoscans(nukreipimo Worker). IP adresai maišomi (hashed) naudojant kasdien keičiamą druską (salt), neapdoroti IP adresai niekada nepasiekia D1. - Valdymo skydelis: Mini diagramos kortelė (SVG, nenaudojant diagramų bibliotekos) adresu
/dashboard/dpp/:dppIdsu 30 dienų stulpeliais + 3 populiariausių pasiskirstymais. Tuščia būsena (empty-state), kai tik DPP yra paskelbtas, bet dar neturėjo nuskaitymų.
2026-04 · Tiesioginis ES atitikties simuliatorius (Q3.3.7)
- Nauja:
POST /v1/dpp/:id/validate-update— simuliuoja dalinius atnaujinimus be būsenos išsaugojimo (stateless) (būsena, rinkų sąrašas, …) be išliekamumo. Atsakyme yraeu_compliance+preview.changed_fields. - Valdymo skydelis: Simuliatoriaus kortelė detaliame DPP puslapyje (
/dashboard/dpp/:dppId) — žymos (chips) skirtosDE/AT/FR/IT/ES/NL+ pasirinktinėms, būsenos išskleidžiamasis sąrašas, Preview EU impact / Save changes / Reset. Neblokuojantis veikimas per RemixuseFetcher. - Sustiprinimas: Iškelti simuliatoriaus pagalbiniai įrankiai (helpers) (
readUpdatePatchFromForm,marketCountriesKey) + 18 naujų vienetų testų (unit tests); klaidų pataisymas: vienišas ne ISO įvesties laukas nebeištrina rinkų sąrašo.
2026-04 · Tiesioginė ES atitikties peržiūra kūrimo formoje (Q3.3.6)
- Pakeista:
POST /v1/dpp/validatepapildomai pateikiaeu_compliance— tas pats tikrintuvas (validator) kaip irGET /v1/dpp/:id/eu-compliance, veikiantis be būsenos išsaugojimo (stateless) prieš išsaugant. - Valdymo skydelis: Peržiūra po esamu patvirtinimo skydeliu + naujas apsauginis išsaugojimo skydelis (Save-Guard-Banner) prieš pateikimo mygtukus, jei yra klaidų / įspėjimų (i18n daugiskaitos formos DE/EN).
2026-04 · ES tikrintuvas + tekstilės vartotojo sąsaja (Q3.3.4 + Q3.3.5)
- Nauja: ES atitikties tikrintuvas (EU-Compliance-Validator) su 5 tekstilės taisyklėmis (
TEXTILE_AGEC_REQUIRED,TEXTILE_MICROPLASTICS_CONSISTENCY,TEXTILE_SVHC_THRESHOLD,TEXTILE_GREENWASHING,TEXTILE_ESPR_READY). - Nauja:
GET /v1/dpp/:id/eu-compliancesucompliant/espr_ready/issues[]/summary. - Valdymo skydelis: ES atitikties skiltis detaliame DPP puslapyje (suvestinės kortelės, sugrupuotos problemų kortelės, ESPR-Ready ženklelis antraštėje).
2026-04 · Tekstilės DPP schema (Q3.3.1–Q3.3.3)
- Nauja: Kategorija
textilesu privaloma AGEC grandine (audimas / mezgimas → dažymas / spausdinimas → siuvimas / konfekcija), kiekvienam pluoštuiorigin_country+recycled_pct,svhc_substances[], ESPR-Opt-in (PEF, tarnavimo laikas, Recyclability). - Nauja: Bazinis laukas
market_countries: string[](ISO 3166-1 alpha-2) visose DPP kategorijose — valdo Prancūzijai būdingas AGEC taisykles ir privalomą prancūzišką pastabą vartotojui. - Nauja: Vartotojo HTML šablonas su AGEC mikroplastiko įspėjamuoju laukeliu, 3 pakopų kilmės grandine (vėliavėlių žymekliais), SVHC sąrašu, Durability ir Recyclability skiltimis.
- Migracija:
0010_dpp_market_countries(D1).
2026-04 · Masinis DPP importas (Q3.2.1–Q3.2.5)
- Nauja:
POST /v1/dpp/importpriima CSV ir XLSX (suderinama su Worker per SheetJSxlsx, ~283 KB gzip paketas). - Skaliuojama: planu pagrįstas limitas (Free 100 → Enterprise 10k) + suskaidytas
db.batch()po 100 + 5 MB užklausos kūno (body) limitas. - Nauja: Klaidų ataskaita kaip CSV atsakymo 201 lauke
errors_csv;GET /v1/dpp/import/templates/:category?format=csv|xlsxpateikia paruoštus šablonus baterijoms ir tekstilei. - Valdymo skydelis: Failų vilkimo ir nuleidimo (drag-and-drop) įkėlimas adresu
/dashboard/dpp/importsu šablonų tarpiniu serveriu (proxy) ir tiesioginiu CSV atsisiuntimu.
Neesminiai pakeitimai (Non-Breaking) — LTS išplėtimai
Visi aukščiau išvardyti pakeitimai yra papildomi:
- Esami
POST /v1/dpp/validateklientai ignoruoja naująeu_compliancelauką be jokių pakeitimų. - Esami
batterysrautai lieka nepakeisti. market_countriesyra neprivalomas ir jo numatytoji reikšmė yra[].
Žr. API versijavimas dėl esminių pakeitimų politikos (Breaking-Change-Policy).