Dynamic codes: name, target.destination, target.utm, design,
folder_id, tags, is_active. Changing the design re-renders the
stored image on the code’s own host (its custom domain, if it has one);
changing the destination does not require reprinting — the short
URL stays the same. domain_id cannot change after creation (422 for
a different value; the current one is accepted): the host is printed
in the QR.
Dynamic wifi/email/sms/event codes are updated with their
structured fields (target.ssid/password/encryption,
target.email/subject/message/cc/bcc,
target.phone/message,
target.title/location/start/end) rather than
target.destination; omitted fields keep their current value.
Dynamic text codes take target.text.
The link types (youtube … googleform) take target.destination
like url. whatsapp takes target.phone and/or target.message
(an omitted one keeps its value) or a WhatsApp link in
target.destination; telegram takes target.destination (a
@username, phone or t.me link). Either can also be re-pointed to any
other http(s) page. location takes target.lat + target.lng
and/or map_app, label, address (omitted ones keep their value);
a plain target.destination turns it into an ordinary redirect.
Static codes: only name, folder_id and design (the payload is
baked into the printed code).
Dynamic GS1 codes: destination (the default link), links,
overrides, plus name, design, folder_id, tags and
is_active — all at the TOP level, not under target. The identifier
(primary_key, qualifiers, attributes, domain, domain_id,
mode, gs1_key) is printed on packaging and immutable: naming any of
them returns 422 with gs1_code: GS1_IDENTIFIER_IMMUTABLE rather
than silently ignoring the field. A dynamic GS1 code therefore reports
target.editable: false, with target.destination set to its Digital
Link URI. A static GS1 code bakes its Digital Link into the image
and, like every static code, cannot be re-pointed.
Codes that hold a page rather than a link — link pages (including review
pages created through this API), forms, menus, app-store and smart-URL
codes, and uploaded file/audio/video codes — store a
document or an uploaded file rather than a destination. They are
reported with target.editable: false (and target.destination set to
their public hosted page URL). Sending target for one of those is
refused with 409 target_not_editable and nothing in the request is
applied; edit them in the dashboard. Their other fields (name,
folder_id, tags, design, is_active) update normally.
Pause/resume scanning (dynamic codes only). Turning a
paused code back on (true on a code that is off) takes
one of the plan's QR code slots — one GS1 slot for a
dynamic GS1 code — so it is refused with 422 and
reason: PLAN_LIMIT when the plan is full, and nothing
else in the request is applied. A GS1 code whose custom
domain was removed cannot be turned back on (409,
reason: DOMAIN_RETIRED).
The stored type: any target.type the API creates (a review is stored as linkpage), gs1, or a dashboard-only type such as file, menupage, form or smarturl. Treat unknown values as opaque.
null for static codes. On the workspace custom domain when the code was created on one. For a dynamic GS1 code this is the Digital Link URI itself, not <host>/<short_code>.
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"QRKit API","colors":{"primary":"#005ae0","light":"#2563EB","dark":"#004bb8"},"logo":{"light":"https://mintcdn.com/qrkit/qrQ9pgs0aTwgkPAw/logo/light.png?fit=max\u0026auto=format\u0026n=qrQ9pgs0aTwgkPAw\u0026q=85\u0026s=3e58fbcc4c845236b5698ed0cf1ec21c","dark":"https://mintcdn.com/qrkit/qrQ9pgs0aTwgkPAw/logo/dark.png?fit=max\u0026auto=format\u0026n=qrQ9pgs0aTwgkPAw\u0026q=85\u0026s=71d33fea6810ec66d6f8db505892cd73"},"favicon":"https://mintcdn.com/qrkit/qrQ9pgs0aTwgkPAw/favicon.ico?fit=max\u0026auto=format\u0026n=qrQ9pgs0aTwgkPAw\u0026q=85\u0026s=3cd8a7d80e56c39207523aad8e84c3b5","api":{"playground":{"display":"interactive"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"qrkit","hasAudioNarration":false,"actualSubdomain":"qrkit","customDomains":["docs.useqrkit.com"],"gitSource":{"type":"github","owner":"claudiuwork","repo":"qrkit-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad3d69ed3ef82bf1d596acc","collectionId":"04c3d933-6304-4f3e-972b-ada4cebcc53d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad3d69ed3ef82bf1d596acc"},"entitlements":{},"buildId":"6ad3d69ed3ef82bf1d596acc","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"API Reference","count":54},{"language":"default","tag":"QR Codes","count":17},{"language":"default","tag":"Documentation","count":9},{"language":"default","tag":"Batches","count":8},{"language":"default","tag":"Folders","count":8},{"language":"default","tag":"Tokens","count":8},{"language":"default","tag":"Webhooks","count":8},{"language":"default","tag":"Guides","count":6},{"language":"default","tag":"Getting Started","count":3},{"language":"default","tag":"Account","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/qr-codes/update-qr-code","slug":"/api-reference/qr-codes/update-qr-code","pageMetadata":{"title":"Update QR Code","description":"Updates a QR code. Requires the `qr:write` scope.\n\nDynamic codes: `name`, `target.destination`, `target.utm`, `design`,\n`folder_id`, `tags`, `is_active`. Changing the design re-renders the\nstored image on the code's own host (its custom domain, if it has one);\nchanging the destination does **not** require reprinting — the short\nURL stays the same. `domain_id` cannot change after creation (`422` for\na different value; the current one is accepted): the host is printed\nin the QR.\n\nDynamic `wifi`/`email`/`sms`/`event` codes are updated with their\nstructured fields (`target.ssid`/`password`/`encryption`,\n`target.email`/`subject`/`message`/`cc`/`bcc`,\n`target.phone`/`message`,\n`target.title`/`location`/`start`/`end`) rather than\n`target.destination`; omitted fields keep their current value.\nDynamic `text` codes take `target.text`.\n\nThe link types (`youtube` … `googleform`) take `target.destination`\nlike `url`. `whatsapp` takes `target.phone` and/or `target.message`\n(an omitted one keeps its value) or a WhatsApp link in\n`target.destination`; `telegram` takes `target.destination` (a\n`@username`, phone or t.me link). Either can also be re-pointed to any\nother http(s) page. `location` takes `target.lat` + `target.lng`\nand/or `map_app`, `label`, `address` (omitted ones keep their value);\na plain `target.destination` turns it into an ordinary redirect.\n\nStatic codes: only `name`, `folder_id` and `design` (the payload is\nbaked into the printed code).\n\nDynamic GS1 codes: `destination` (the default link), `links`,\n`overrides`, plus `name`, `design`, `folder_id`, `tags` and\n`is_active` — all at the TOP level, not under `target`. The identifier\n(`primary_key`, `qualifiers`, `attributes`, `domain`, `domain_id`,\n`mode`, `gs1_key`) is printed on packaging and immutable: naming any of\nthem returns `422` with `gs1_code: GS1_IDENTIFIER_IMMUTABLE` rather\nthan silently ignoring the field. A dynamic GS1 code therefore reports\n`target.editable: false`, with `target.destination` set to its Digital\nLink URI. A **static** GS1 code bakes its Digital Link into the image\nand, like every static code, cannot be re-pointed.\n\nCodes that hold a page rather than a link — link pages (including review\npages created through this API), forms, menus, app-store and smart-URL\ncodes, and uploaded file/audio/video codes — store a\ndocument or an uploaded file rather than a destination. They are\nreported with `target.editable: false` (and `target.destination` set to\ntheir public hosted page URL). Sending `target` for one of those is\nrefused with `409 target_not_editable` and nothing in the request is\napplied; edit them in the dashboard. Their other fields (`name`,\n`folder_id`, `tags`, `design`, `is_active`) update normally.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /qr-codes/{id}","href":"/api-reference/qr-codes/update-qr-code","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Updates a QR code. Requires the \", _jsx(_components.code, {\n children: \"qr:write\"\n }), \" scope.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Dynamic codes: \", _jsx(_components.code, {\n children: \"name\"\n }), \", \", _jsx(_components.code, {\n children: \"target.destination\"\n }), \", \", _jsx(_components.code, {\n children: \"target.utm\"\n }), \", \", _jsx(_components.code, {\n children: \"design\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"folder_id\"\n }), \", \", _jsx(_components.code, {\n children: \"tags\"\n }), \", \", _jsx(_components.code, {\n children: \"is_active\"\n }), \". Changing the design re-renders the\\nstored image on the code’s own host (its custom domain, if it has one);\\nchanging the destination does \", _jsx(_components.strong, {\n children: \"not\"\n }), \" require reprinting — the short\\nURL stays the same. \", _jsx(_components.code, {\n children: \"domain_id\"\n }), \" cannot change after creation (\", _jsx(_components.code, {\n children: \"422\"\n }), \" for\\na different value; the current one is accepted): the host is printed\\nin the QR.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Dynamic \", _jsx(_components.code, {\n children: \"wifi\"\n }), \"/\", _jsx(_components.code, {\n children: \"email\"\n }), \"/\", _jsx(_components.code, {\n children: \"sms\"\n }), \"/\", _jsx(_components.code, {\n children: \"event\"\n }), \" codes are updated with their\\nstructured fields (\", _jsx(_components.code, {\n children: \"target.ssid\"\n }), \"/\", _jsx(_components.code, {\n children: \"password\"\n }), \"/\", _jsx(_components.code, {\n children: \"encryption\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"target.email\"\n }), \"/\", _jsx(_components.code, {\n children: \"subject\"\n }), \"/\", _jsx(_components.code, {\n children: \"message\"\n }), \"/\", _jsx(_components.code, {\n children: \"cc\"\n }), \"/\", _jsx(_components.code, {\n children: \"bcc\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"target.phone\"\n }), \"/\", _jsx(_components.code, {\n children: \"message\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"target.title\"\n }), \"/\", _jsx(_components.code, {\n children: \"location\"\n }), \"/\", _jsx(_components.code, {\n children: \"start\"\n }), \"/\", _jsx(_components.code, {\n children: \"end\"\n }), \") rather than\\n\", _jsx(_components.code, {\n children: \"target.destination\"\n }), \"; omitted fields keep their current value.\\nDynamic \", _jsx(_components.code, {\n children: \"text\"\n }), \" codes take \", _jsx(_components.code, {\n children: \"target.text\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The link types (\", _jsx(_components.code, {\n children: \"youtube\"\n }), \" … \", _jsx(_components.code, {\n children: \"googleform\"\n }), \") take \", _jsx(_components.code, {\n children: \"target.destination\"\n }), \"\\nlike \", _jsx(_components.code, {\n children: \"url\"\n }), \". \", _jsx(_components.code, {\n children: \"whatsapp\"\n }), \" takes \", _jsx(_components.code, {\n children: \"target.phone\"\n }), \" and/or \", _jsx(_components.code, {\n children: \"target.message\"\n }), \"\\n(an omitted one keeps its value) or a WhatsApp link in\\n\", _jsx(_components.code, {\n children: \"target.destination\"\n }), \"; \", _jsx(_components.code, {\n children: \"telegram\"\n }), \" takes \", _jsx(_components.code, {\n children: \"target.destination\"\n }), \" (a\\n\", _jsx(_components.code, {\n children: \"@username\"\n }), \", phone or t.me link). Either can also be re-pointed to any\\nother http(s) page. \", _jsx(_components.code, {\n children: \"location\"\n }), \" takes \", _jsx(_components.code, {\n children: \"target.lat\"\n }), \" + \", _jsx(_components.code, {\n children: \"target.lng\"\n }), \"\\nand/or \", _jsx(_components.code, {\n children: \"map_app\"\n }), \", \", _jsx(_components.code, {\n children: \"label\"\n }), \", \", _jsx(_components.code, {\n children: \"address\"\n }), \" (omitted ones keep their value);\\na plain \", _jsx(_components.code, {\n children: \"target.destination\"\n }), \" turns it into an ordinary redirect.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Static codes: only \", _jsx(_components.code, {\n children: \"name\"\n }), \", \", _jsx(_components.code, {\n children: \"folder_id\"\n }), \" and \", _jsx(_components.code, {\n children: \"design\"\n }), \" (the payload is\\nbaked into the printed code).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Dynamic GS1 codes: \", _jsx(_components.code, {\n children: \"destination\"\n }), \" (the default link), \", _jsx(_components.code, {\n children: \"links\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"overrides\"\n }), \", plus \", _jsx(_components.code, {\n children: \"name\"\n }), \", \", _jsx(_components.code, {\n children: \"design\"\n }), \", \", _jsx(_components.code, {\n children: \"folder_id\"\n }), \", \", _jsx(_components.code, {\n children: \"tags\"\n }), \" and\\n\", _jsx(_components.code, {\n children: \"is_active\"\n }), \" — all at the TOP level, not under \", _jsx(_components.code, {\n children: \"target\"\n }), \". The identifier\\n(\", _jsx(_components.code, {\n children: \"primary_key\"\n }), \", \", _jsx(_components.code, {\n children: \"qualifiers\"\n }), \", \", _jsx(_components.code, {\n children: \"attributes\"\n }), \", \", _jsx(_components.code, {\n children: \"domain\"\n }), \", \", _jsx(_components.code, {\n children: \"domain_id\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"mode\"\n }), \", \", _jsx(_components.code, {\n children: \"gs1_key\"\n }), \") is printed on packaging and immutable: naming any of\\nthem returns \", _jsx(_components.code, {\n children: \"422\"\n }), \" with \", _jsx(_components.code, {\n children: \"gs1_code: GS1_IDENTIFIER_IMMUTABLE\"\n }), \" rather\\nthan silently ignoring the field. A dynamic GS1 code therefore reports\\n\", _jsx(_components.code, {\n children: \"target.editable: false\"\n }), \", with \", _jsx(_components.code, {\n children: \"target.destination\"\n }), \" set to its Digital\\nLink URI. A \", _jsx(_components.strong, {\n children: \"static\"\n }), \" GS1 code bakes its Digital Link into the image\\nand, like every static code, cannot be re-pointed.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Codes that hold a page rather than a link — link pages (including review\\npages created through this API), forms, menus, app-store and smart-URL\\ncodes, and uploaded file/audio/video codes — store a\\ndocument or an uploaded file rather than a destination. They are\\nreported with \", _jsx(_components.code, {\n children: \"target.editable: false\"\n }), \" (and \", _jsx(_components.code, {\n children: \"target.destination\"\n }), \" set to\\ntheir public hosted page URL). Sending \", _jsx(_components.code, {\n children: \"target\"\n }), \" for one of those is\\nrefused with \", _jsx(_components.code, {\n children: \"409 target_not_editable\"\n }), \" and nothing in the request is\\napplied; edit them in the dashboard. Their other fields (\", _jsx(_components.code, {\n children: \"name\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"folder_id\"\n }), \", \", _jsx(_components.code, {\n children: \"tags\"\n }), \", \", _jsx(_components.code, {\n children: \"design\"\n }), \", \", _jsx(_components.code, {\n children: \"is_active\"\n }), \") update normally.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Update QR Code","description":"Updates a QR code. Requires the `qr:write` scope.\n\nDynamic codes: `name`, `target.destination`, `target.utm`, `design`,\n`folder_id`, `tags`, `is_active`. Changing the design re-renders the\nstored image on the code's own host (its custom domain, if it has one);\nchanging the destination does **not** require reprinting — the short\nURL stays the same. `domain_id` cannot change after creation (`422` for\na different value; the current one is accepted): the host is printed\nin the QR.\n\nDynamic `wifi`/`email`/`sms`/`event` codes are updated with their\nstructured fields (`target.ssid`/`password`/`encryption`,\n`target.email`/`subject`/`message`/`cc`/`bcc`,\n`target.phone`/`message`,\n`target.title`/`location`/`start`/`end`) rather than\n`target.destination`; omitted fields keep their current value.\nDynamic `text` codes take `target.text`.\n\nThe link types (`youtube` … `googleform`) take `target.destination`\nlike `url`. `whatsapp` takes `target.phone` and/or `target.message`\n(an omitted one keeps its value) or a WhatsApp link in\n`target.destination`; `telegram` takes `target.destination` (a\n`@username`, phone or t.me link). Either can also be re-pointed to any\nother http(s) page. `location` takes `target.lat` + `target.lng`\nand/or `map_app`, `label`, `address` (omitted ones keep their value);\na plain `target.destination` turns it into an ordinary redirect.\n\nStatic codes: only `name`, `folder_id` and `design` (the payload is\nbaked into the printed code).\n\nDynamic GS1 codes: `destination` (the default link), `links`,\n`overrides`, plus `name`, `design`, `folder_id`, `tags` and\n`is_active` — all at the TOP level, not under `target`. The identifier\n(`primary_key`, `qualifiers`, `attributes`, `domain`, `domain_id`,\n`mode`, `gs1_key`) is printed on packaging and immutable: naming any of\nthem returns `422` with `gs1_code: GS1_IDENTIFIER_IMMUTABLE` rather\nthan silently ignoring the field. A dynamic GS1 code therefore reports\n`target.editable: false`, with `target.destination` set to its Digital\nLink URI. A **static** GS1 code bakes its Digital Link into the image\nand, like every static code, cannot be re-pointed.\n\nCodes that hold a page rather than a link — link pages (including review\npages created through this API), forms, menus, app-store and smart-URL\ncodes, and uploaded file/audio/video codes — store a\ndocument or an uploaded file rather than a destination. They are\nreported with `target.editable: false` (and `target.destination` set to\ntheir public hosted page URL). Sending `target` for one of those is\nrefused with `409 target_not_editable` and nothing in the request is\napplied; edit them in the dashboard. Their other fields (`name`,\n`folder_id`, `tags`, `design`, `is_active`) update normally.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /qr-codes/{id}","href":"/api-reference/qr-codes/update-qr-code","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Update QR Code","description":"Updates a QR code. Requires the `qr:write` scope.\n\nDynamic codes: `name`, `target.destination`, `target.utm`, `design`,\n`folder_id`, `tags`, `is_active`. Changing the design re-renders the\nstored image on the code's own host (its custom domain, if it has one);\nchanging the destination does **not** require reprinting — the short\nURL stays the same. `domain_id` cannot change after creation (`422` for\na different value; the current one is accepted): the host is printed\nin the QR.\n\nDynamic `wifi`/`email`/`sms`/`event` codes are updated with their\nstructured fields (`target.ssid`/`password`/`encryption`,\n`target.email`/`subject`/`message`/`cc`/`bcc`,\n`target.phone`/`message`,\n`target.title`/`location`/`start`/`end`) rather than\n`target.destination`; omitted fields keep their current value.\nDynamic `text` codes take `target.text`.\n\nThe link types (`youtube` … `googleform`) take `target.destination`\nlike `url`. `whatsapp` takes `target.phone` and/or `target.message`\n(an omitted one keeps its value) or a WhatsApp link in\n`target.destination`; `telegram` takes `target.destination` (a\n`@username`, phone or t.me link). Either can also be re-pointed to any\nother http(s) page. `location` takes `target.lat` + `target.lng`\nand/or `map_app`, `label`, `address` (omitted ones keep their value);\na plain `target.destination` turns it into an ordinary redirect.\n\nStatic codes: only `name`, `folder_id` and `design` (the payload is\nbaked into the printed code).\n\nDynamic GS1 codes: `destination` (the default link), `links`,\n`overrides`, plus `name`, `design`, `folder_id`, `tags` and\n`is_active` — all at the TOP level, not under `target`. The identifier\n(`primary_key`, `qualifiers`, `attributes`, `domain`, `domain_id`,\n`mode`, `gs1_key`) is printed on packaging and immutable: naming any of\nthem returns `422` with `gs1_code: GS1_IDENTIFIER_IMMUTABLE` rather\nthan silently ignoring the field. A dynamic GS1 code therefore reports\n`target.editable: false`, with `target.destination` set to its Digital\nLink URI. A **static** GS1 code bakes its Digital Link into the image\nand, like every static code, cannot be re-pointed.\n\nCodes that hold a page rather than a link — link pages (including review\npages created through this API), forms, menus, app-store and smart-URL\ncodes, and uploaded file/audio/video codes — store a\ndocument or an uploaded file rather than a destination. They are\nreported with `target.editable: false` (and `target.destination` set to\ntheir public hosted page URL). Sending `target` for one of those is\nrefused with `409 target_not_editable` and nothing in the request is\napplied; edit them in the dashboard. Their other fields (`name`,\n`folder_id`, `tags`, `design`, `is_active`) update normally.\n","operationId":"updateQrCode","tags":["QR Codes"],"parameters":["c7820d00-5a39-4017-beaf-cdc5c6254c99"],"requestBody":"83160f2f-ffd1-42f1-8241-044e788e91f3","responses":{"200":"b10e065a-1bf8-4296-9449-894e821fc9eb","400":"a6efcad8-7388-4d1a-b9a4-b6db0daf64d1","401":"52962761-3094-4034-b65c-b352bed9d80f","404":"04853fa3-dea8-4cbd-93a0-e721497965a3","409":"dd95c3d6-04b7-4046-a90f-7dd509a5c1b0","422":"544a86da-aff6-4fa0-8ce8-016047af8618","429":"fe5f31a3-99bc-4512-adae-da3bc51e35ac"},"method":"patch","type":"path","servers":["aa6ca5af-dcf4-4523-a221-6a1f0c45701c","47461fe5-7010-4edd-b354-d8f475ba61ea"],"security":["55a46e2a-2cc9-49e0-9a17-83ee78dff490"],"path":"/qr-codes/{id}","baseUrlOptions":["https://api.useqrkit.com/v1","http://localhost:3001/v1"],"title":"Update QR Code","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"c7820d00-5a39-4017-beaf-cdc5c6254c99":{"name":"id","in":"path","required":true,"schema":{"type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":255,"uniqueKey":"name","typeLabel":"string"},"target":{"type":"object","properties":{"destination":{"type":"string","description":"New destination (dynamic codes only). Rejected for dynamic wifi/email/sms/event — use their structured fields below.","uniqueKey":"target.destination","typeLabel":"string"},"text":{"type":"string","maxLength":4000,"description":"New text (dynamic text codes).","uniqueKey":"target.text","typeLabel":"string"},"email":{"type":"string","format":"email","description":"New recipient (dynamic email codes).","uniqueKey":"target.email","typeLabel":"string\u003cemail>"},"subject":{"type":"string","maxLength":500,"description":"New subject (dynamic email codes).","uniqueKey":"target.subject","typeLabel":"string"},"message":{"type":"string","maxLength":2000,"description":"New body (dynamic email/sms codes) or pre-filled chat message (whatsapp, max 500).","uniqueKey":"target.message","typeLabel":"string"},"cc":{"type":"string","maxLength":500,"description":"New cc recipients (dynamic email codes).","uniqueKey":"target.cc","typeLabel":"string"},"bcc":{"type":"string","maxLength":500,"description":"New bcc recipients (dynamic email codes).","uniqueKey":"target.bcc","typeLabel":"string"},"phone":{"type":"string","maxLength":50,"description":"New number in international format, e.g. +15551234567 (dynamic sms and whatsapp codes).","uniqueKey":"target.phone","typeLabel":"string"},"ssid":{"type":"string","maxLength":100,"description":"New network name (dynamic wifi codes).","uniqueKey":"target.ssid","typeLabel":"string"},"password":{"type":"string","maxLength":200,"description":"New password (dynamic wifi codes).","uniqueKey":"target.password","typeLabel":"string"},"encryption":{"type":"string","enum":["WPA","WEP","nopass"],"description":"New security type (dynamic wifi codes).","uniqueKey":"target.encryption","typeLabel":"enum\u003cstring>"},"title":{"type":"string","maxLength":300,"description":"New event title (dynamic event codes).","uniqueKey":"target.title","typeLabel":"string"},"location":{"type":"string","maxLength":500,"description":"New venue (dynamic event codes).","uniqueKey":"target.location","typeLabel":"string"},"start":{"type":"string","maxLength":50,"description":"New start datetime, ISO 8601 (dynamic event codes).","uniqueKey":"target.start","typeLabel":"string"},"end":{"type":"string","maxLength":50,"description":"New end datetime, ISO 8601 (dynamic event codes).","uniqueKey":"target.end","typeLabel":"string"},"lat":{"type":"number","minimum":-90,"maximum":90,"description":"location codes: new latitude (send with lng).","uniqueKey":"target.lat","typeLabel":"number"},"lng":{"type":"number","minimum":-180,"maximum":180,"description":"location codes: new longitude (send with lat).","uniqueKey":"target.lng","typeLabel":"number"},"map_app":{"type":"string","enum":["auto","google","apple","waze"],"description":"location codes: which map app a scan opens.","uniqueKey":"target.map_app","typeLabel":"enum\u003cstring>"},"label":{"type":"string","maxLength":80,"description":"location codes: pin name (used by Apple Maps); empty string clears it.","uniqueKey":"target.label","typeLabel":"string"},"address":{"type":"string","maxLength":200,"description":"location codes: street address; empty string clears it.","uniqueKey":"target.address","typeLabel":"string"},"utm":{"type":"object","description":"UTM parameters baked into the destination URL (dynamic url codes only; ignored for every other type).","properties":{"source":{"type":"string","uniqueKey":"target.utm.source","typeLabel":"string"},"medium":{"type":"string","uniqueKey":"target.utm.medium","typeLabel":"string"},"campaign":{"type":"string","uniqueKey":"target.utm.campaign","typeLabel":"string"},"term":{"type":"string","uniqueKey":"target.utm.term","typeLabel":"string"},"content":{"type":"string","uniqueKey":"target.utm.content","typeLabel":"string"}},"uniqueKey":"target.utm","typeLabel":"object"}},"uniqueKey":"target","typeLabel":"object"},"design":{"type":"object","description":"Visual customization. Stored with the code, so the dashboard shows exactly what the API created.","properties":{"error_correction":{"type":"string","enum":["L","M","Q","H"],"description":"Error-correction level. Omit it for the automatic level, the same\none the dashboard uses: **H** (30% recovery) when the code has a\nlogo, **Q** (25%) otherwise. A logo code whose content is too long\nto fit at H stays at Q. A level you set explicitly is kept on every\nlater re-render.\n\n**`L` is refused on a GS1 code** (`422`, `gs1_code:\nGS1_ERROR_CORRECTION_TOO_LOW`) — a Digital Link is printed on\npackaging and read by a fixed point-of-sale imager, where 7%\nrecovery is not enough. Refused rather than quietly upgraded: a\npackage is printed once, so an API that returned success for a\ndesign it did not honour would be found out on the print run.\n","uniqueKey":"design.error_correction","typeLabel":"enum\u003cstring>"},"colors":{"type":"object","properties":{"foreground":{"type":"string","example":"#000000","uniqueKey":"design.colors.foreground","typeLabel":"string"},"background":{"type":"string","example":"#ffffff","uniqueKey":"design.colors.background","typeLabel":"string"}},"uniqueKey":"design.colors","typeLabel":"object"},"gradient":{"type":"object","description":"Foreground gradient (overrides colors.foreground).","properties":{"start":{"type":"string","example":"#005ae0","uniqueKey":"design.gradient.start","typeLabel":"string"},"end":{"type":"string","example":"#00c2ff","uniqueKey":"design.gradient.end","typeLabel":"string"},"type":{"type":"string","enum":["linear-top-to-bottom","linear-left-to-right","linear-top-left-to-bottom-right","linear-top-right-to-bottom-left","radial"],"default":"linear-top-to-bottom","uniqueKey":"design.gradient.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"design.gradient","typeLabel":"object"},"shapes":{"type":"object","properties":{"body":{"type":"string","enum":["square","dots","rounded","extra-rounded","classy","classy-rounded"],"default":"square","uniqueKey":"design.shapes.body","typeLabel":"enum\u003cstring>"},"eye_frame":{"type":"string","enum":["square","dot","extra-rounded"],"default":"square","uniqueKey":"design.shapes.eye_frame","typeLabel":"enum\u003cstring>"},"eye_ball":{"type":"string","enum":["square","dot","extra-rounded"],"default":"square","uniqueKey":"design.shapes.eye_ball","typeLabel":"enum\u003cstring>"}},"uniqueKey":"design.shapes","typeLabel":"object"},"eye_colors":{"type":"object","description":"Custom colors for the corner eyes.","properties":{"frame":{"type":"string","example":"#005ae0","uniqueKey":"design.eye_colors.frame","typeLabel":"string"},"ball":{"type":"string","example":"#004bb8","uniqueKey":"design.eye_colors.ball","typeLabel":"string"}},"uniqueKey":"design.eye_colors","typeLabel":"object"},"logo":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"http(s) image URL (PNG/JPG/SVG, max 2MB). Fetched once and embedded.","uniqueKey":"design.logo.url","typeLabel":"string\u003curi>"},"clear_background":{"type":"boolean","default":false,"description":"Hide QR dots behind the logo.","uniqueKey":"design.logo.clear_background","typeLabel":"boolean"}},"uniqueKey":"design.logo","typeLabel":"object"},"transparent_background":{"type":"boolean","default":false,"uniqueKey":"design.transparent_background","typeLabel":"boolean"}},"uniqueKey":"design","typeLabel":"object"},"folder_id":{"oneOf":[{"type":"string","description":"Folder id, or null to remove from its folder.","uniqueKey":"folder_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Folder id, or null to remove from its folder.","uniqueKey":"folder_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"folder_id","typeLabel":"string | null"},"tags":{"type":"array","items":{"type":"string","uniqueKey":"tags.items.[INDEX]","typeLabel":"string"},"maxItems":10,"uniqueKey":"tags","typeLabel":"string[]"},"is_active":{"type":"boolean","description":"Pause/resume scanning (dynamic codes only). Turning a\npaused code back on (`true` on a code that is off) takes\none of the plan's QR code slots — one GS1 slot for a\ndynamic GS1 code — so it is refused with `422` and\n`reason: PLAN_LIMIT` when the plan is full, and nothing\nelse in the request is applied. A GS1 code whose custom\ndomain was removed cannot be turned back on (`409`,\n`reason: DOMAIN_RETIRED`).\n","uniqueKey":"is_active","typeLabel":"boolean"},"destination":{"type":"string","format":"uri","description":"GS1 codes only — the new default link (`gs1:defaultLink`). Must be https.","uniqueKey":"destination","typeLabel":"string\u003curi>"},"links":{"type":"array","items":{"type":"object","required":["linkType","href","title"],"description":"One entry a resolver can return for this item.\n","properties":{"linkType":{"type":"string","description":"A GS1 Web Vocabulary link type — bare (`pip`) or prefixed\n(`gs1:pip`) — or an absolute https IRI for a custom vocabulary.\nAn invented bare word is rejected: no scanning app could interpret it.\n","example":"gs1:pip","isRequired":true,"uniqueKey":"links.items.[INDEX].linkType","typeLabel":"string"},"href":{"type":"string","format":"uri","description":"Destination. Must be https — a Digital Link is scanned by consumer phones.","isRequired":true,"uniqueKey":"links.items.[INDEX].href","typeLabel":"string\u003curi>"},"title":{"type":"string","maxLength":120,"description":"Shown verbatim in a resolver's HTML linkset page.","isRequired":true,"uniqueKey":"links.items.[INDEX].title","typeLabel":"string"},"hreflang":{"type":"array","items":{"type":"string","uniqueKey":"links.items.[INDEX].hreflang.items.[INDEX]","typeLabel":"string"},"description":"BCP-47 tags this link is for, e.g. [\"en\", \"fr-CA\"].","uniqueKey":"links.items.[INDEX].hreflang","typeLabel":"string[]"},"type":{"type":"string","description":"MIME type of the target, e.g. text/html.","uniqueKey":"links.items.[INDEX].type","typeLabel":"string"},"context":{"type":"array","items":{"type":"string","uniqueKey":"links.items.[INDEX].context.items.[INDEX]","typeLabel":"string"},"description":"GS1 context values (country/market) the link applies to.","uniqueKey":"links.items.[INDEX].context","typeLabel":"string[]"}},"uniqueKey":"links.items.[INDEX]","typeLabel":"object"},"maxItems":16,"description":"GS1 codes only — replaces the whole link list.","uniqueKey":"links","typeLabel":"object[]"},"overrides":{"type":"array","items":{"type":"object","required":["path","href"],"description":"A destination that replaces the row's default for ONE set of scanned\nqualifiers — the \"recall this lot\" primitive. A serialized run is one\ncode with many overrides, not many codes.\n","properties":{"path":{"type":"string","description":"The qualifier chain BELOW the code's own key — `10/LOT1`,\n`10/LOT1/21/SN9` — never the primary key again. Must be a legal\nqualifier chain for the primary key, in canonical order.\n","example":"10/LOT1","isRequired":true,"uniqueKey":"overrides.items.[INDEX].path","typeLabel":"string"},"href":{"type":"string","format":"uri","description":"Destination for scans carrying this chain. Must be https.","isRequired":true,"uniqueKey":"overrides.items.[INDEX].href","typeLabel":"string\u003curi>"},"links":{"type":"array","items":{"type":"object","required":["linkType","href","title"],"description":"One entry a resolver can return for this item.\n","properties":{"linkType":{"type":"string","description":"A GS1 Web Vocabulary link type — bare (`pip`) or prefixed\n(`gs1:pip`) — or an absolute https IRI for a custom vocabulary.\nAn invented bare word is rejected: no scanning app could interpret it.\n","example":"gs1:pip","isRequired":true,"uniqueKey":"overrides.items.[INDEX].links.items.[INDEX].linkType","typeLabel":"string"},"href":{"type":"string","format":"uri","description":"Destination. Must be https — a Digital Link is scanned by consumer phones.","isRequired":true,"uniqueKey":"overrides.items.[INDEX].links.items.[INDEX].href","typeLabel":"string\u003curi>"},"title":{"type":"string","maxLength":120,"description":"Shown verbatim in a resolver's HTML linkset page.","isRequired":true,"uniqueKey":"overrides.items.[INDEX].links.items.[INDEX].title","typeLabel":"string"},"hreflang":{"type":"array","items":{"type":"string","uniqueKey":"overrides.items.[INDEX].links.items.[INDEX].hreflang.items.[INDEX]","typeLabel":"string"},"description":"BCP-47 tags this link is for, e.g. [\"en\", \"fr-CA\"].","uniqueKey":"overrides.items.[INDEX].links.items.[INDEX].hreflang","typeLabel":"string[]"},"type":{"type":"string","description":"MIME type of the target, e.g. text/html.","uniqueKey":"overrides.items.[INDEX].links.items.[INDEX].type","typeLabel":"string"},"context":{"type":"array","items":{"type":"string","uniqueKey":"overrides.items.[INDEX].links.items.[INDEX].context.items.[INDEX]","typeLabel":"string"},"description":"GS1 context values (country/market) the link applies to.","uniqueKey":"overrides.items.[INDEX].links.items.[INDEX].context","typeLabel":"string[]"}},"uniqueKey":"overrides.items.[INDEX].links.items.[INDEX]","typeLabel":"object"},"maxItems":16,"uniqueKey":"overrides.items.[INDEX].links","typeLabel":"object[]"}},"uniqueKey":"overrides.items.[INDEX]","typeLabel":"object"},"maxItems":500,"description":"GS1 codes only — replaces the whole override list.","uniqueKey":"overrides","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","target":{"destination":"\u003cstring>","text":"\u003cstring>","email":"[email protected]","subject":"\u003cstring>","message":"\u003cstring>","cc":"\u003cstring>","bcc":"\u003cstring>","phone":"\u003cstring>","ssid":"\u003cstring>","password":"\u003cstring>","title":"\u003cstring>","location":"\u003cstring>","start":"\u003cstring>","end":"\u003cstring>","lat":0,"lng":0,"label":"\u003cstring>","address":"\u003cstring>","utm":{"source":"\u003cstring>","medium":"\u003cstring>","campaign":"\u003cstring>","term":"\u003cstring>","content":"\u003cstring>"}},"design":{"colors":{"foreground":"#000000","background":"#ffffff"},"gradient":{"start":"#005ae0","end":"#00c2ff","type":"linear-top-to-bottom"},"shapes":{"body":"square","eye_frame":"square","eye_ball":"square"},"eye_colors":{"frame":"#005ae0","ball":"#004bb8"},"logo":{"url":"\u003cstring>","clear_background":false},"transparent_background":false},"folder_id":"\u003cstring>","tags":["\u003cstring>"],"is_active":true,"destination":"\u003cstring>","links":[{"linkType":"gs1:pip","href":"\u003cstring>","title":"\u003cstring>","hreflang":["\u003cstring>"],"type":"\u003cstring>","context":["\u003cstring>"]}],"overrides":[{"path":"10/LOT1","href":"\u003cstring>","links":[{"linkType":"gs1:pip","href":"\u003cstring>","title":"\u003cstring>","hreflang":["\u003cstring>"],"type":"\u003cstring>","context":["\u003cstring>"]}]}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"b10e065a-1bf8-4296-9449-894e821fc9eb":{"description":"Updated QR code","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","example":"qr_123","description":"`qr_…` for dynamic, `sqr_…` for static.","uniqueKey":"id","typeLabel":"string"},"object":{"type":"string","example":"qr_code","uniqueKey":"object","typeLabel":"string"},"kind":{"type":"string","enum":["dynamic","static"],"uniqueKey":"kind","typeLabel":"enum\u003cstring>"},"name":{"type":"string","uniqueKey":"name","typeLabel":"string"},"type":{"type":"string","description":"The stored type: any `target.type` the API creates (a `review` is stored as `linkpage`), `gs1`, or a dashboard-only type such as `file`, `menupage`, `form` or `smarturl`. Treat unknown values as opaque.","example":"url","uniqueKey":"type","typeLabel":"string"},"short_code":{"type":"string","example":"AB3D5","uniqueKey":"short_code","typeLabel":"string"},"short_url":{"oneOf":[{"type":"string","example":"https://qrkit.to/AB3D5","description":"null for static codes. On the workspace custom domain when the code was created on one. For a dynamic GS1 code this is the Digital Link URI itself, not `\u003chost>/\u003cshort_code>`.","uniqueKey":"short_url.oneOf.0","typeLabel":"string"},{"type":"null","example":"https://qrkit.to/AB3D5","description":"null for static codes. On the workspace custom domain when the code was created on one. For a dynamic GS1 code this is the Digital Link URI itself, not `\u003chost>/\u003cshort_code>`.","uniqueKey":"short_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"short_url","typeLabel":"string | null"},"domain_id":{"oneOf":[{"type":"string","example":"dom_3","description":"The custom domain `short_url` is on, or null for the default host (and for static codes).","uniqueKey":"domain_id.oneOf.0","typeLabel":"string"},{"type":"null","example":"dom_3","description":"The custom domain `short_url` is on, or null for the default host (and for static codes).","uniqueKey":"domain_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"domain_id","typeLabel":"string | null"},"gs1":{"type":"object","description":"Present on GS1 codes only. The identifier half is READ-ONLY (R4 — it is\nprinted); `links` and `overrides` are the editable half.\n","properties":{"mode":{"type":"string","enum":["static","dynamic"],"uniqueKey":"gs1.mode","typeLabel":"enum\u003cstring>"},"key":{"type":"string","example":"01/09506000134352/10/LOT1","description":"Canonical Digital Link path (dynamic only). Numeric AIs, no leading slash.","uniqueKey":"gs1.key","typeLabel":"string"},"digital_link":{"type":"string","format":"uri","description":"The URI the printed QR encodes — NOT `\u003chost>/\u003cshort_code>`.","uniqueKey":"gs1.digital_link","typeLabel":"string\u003curi>"},"primary_key":{"type":"object","properties":{"ai":{"type":"string","uniqueKey":"gs1.primary_key.ai","typeLabel":"string"},"value":{"type":"string","uniqueKey":"gs1.primary_key.value","typeLabel":"string"}},"uniqueKey":"gs1.primary_key","typeLabel":"object"},"qualifiers":{"type":"array","items":{"type":"object","properties":{"ai":{"type":"string","uniqueKey":"gs1.qualifiers.items.[INDEX].ai","typeLabel":"string"},"value":{"type":"string","uniqueKey":"gs1.qualifiers.items.[INDEX].value","typeLabel":"string"}},"uniqueKey":"gs1.qualifiers.items.[INDEX]","typeLabel":"object"},"uniqueKey":"gs1.qualifiers","typeLabel":"object[]"},"attributes":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"gs1.attributes.additionalProperties","typeLabel":"string"},"uniqueKey":"gs1.attributes","typeLabel":"object"},"links":{"type":"array","items":{"type":"object","required":["linkType","href","title"],"description":"One entry a resolver can return for this item.\n","properties":{"linkType":{"type":"string","description":"A GS1 Web Vocabulary link type — bare (`pip`) or prefixed\n(`gs1:pip`) — or an absolute https IRI for a custom vocabulary.\nAn invented bare word is rejected: no scanning app could interpret it.\n","example":"gs1:pip","isRequired":true,"uniqueKey":"gs1.links.items.[INDEX].linkType","typeLabel":"string"},"href":{"type":"string","format":"uri","description":"Destination. Must be https — a Digital Link is scanned by consumer phones.","isRequired":true,"uniqueKey":"gs1.links.items.[INDEX].href","typeLabel":"string\u003curi>"},"title":{"type":"string","maxLength":120,"description":"Shown verbatim in a resolver's HTML linkset page.","isRequired":true,"uniqueKey":"gs1.links.items.[INDEX].title","typeLabel":"string"},"hreflang":{"type":"array","items":{"type":"string","uniqueKey":"gs1.links.items.[INDEX].hreflang.items.[INDEX]","typeLabel":"string"},"description":"BCP-47 tags this link is for, e.g. [\"en\", \"fr-CA\"].","uniqueKey":"gs1.links.items.[INDEX].hreflang","typeLabel":"string[]"},"type":{"type":"string","description":"MIME type of the target, e.g. text/html.","uniqueKey":"gs1.links.items.[INDEX].type","typeLabel":"string"},"context":{"type":"array","items":{"type":"string","uniqueKey":"gs1.links.items.[INDEX].context.items.[INDEX]","typeLabel":"string"},"description":"GS1 context values (country/market) the link applies to.","uniqueKey":"gs1.links.items.[INDEX].context","typeLabel":"string[]"}},"uniqueKey":"gs1.links.items.[INDEX]","typeLabel":"object"},"uniqueKey":"gs1.links","typeLabel":"object[]"},"overrides":{"type":"array","items":{"type":"object","required":["path","href"],"description":"A destination that replaces the row's default for ONE set of scanned\nqualifiers — the \"recall this lot\" primitive. A serialized run is one\ncode with many overrides, not many codes.\n","properties":{"path":{"type":"string","description":"The qualifier chain BELOW the code's own key — `10/LOT1`,\n`10/LOT1/21/SN9` — never the primary key again. Must be a legal\nqualifier chain for the primary key, in canonical order.\n","example":"10/LOT1","isRequired":true,"uniqueKey":"gs1.overrides.items.[INDEX].path","typeLabel":"string"},"href":{"type":"string","format":"uri","description":"Destination for scans carrying this chain. Must be https.","isRequired":true,"uniqueKey":"gs1.overrides.items.[INDEX].href","typeLabel":"string\u003curi>"},"links":{"type":"array","items":{"type":"object","required":["linkType","href","title"],"description":"One entry a resolver can return for this item.\n","properties":{"linkType":{"type":"string","description":"A GS1 Web Vocabulary link type — bare (`pip`) or prefixed\n(`gs1:pip`) — or an absolute https IRI for a custom vocabulary.\nAn invented bare word is rejected: no scanning app could interpret it.\n","example":"gs1:pip","isRequired":true,"uniqueKey":"gs1.overrides.items.[INDEX].links.items.[INDEX].linkType","typeLabel":"string"},"href":{"type":"string","format":"uri","description":"Destination. Must be https — a Digital Link is scanned by consumer phones.","isRequired":true,"uniqueKey":"gs1.overrides.items.[INDEX].links.items.[INDEX].href","typeLabel":"string\u003curi>"},"title":{"type":"string","maxLength":120,"description":"Shown verbatim in a resolver's HTML linkset page.","isRequired":true,"uniqueKey":"gs1.overrides.items.[INDEX].links.items.[INDEX].title","typeLabel":"string"},"hreflang":{"type":"array","items":{"type":"string","uniqueKey":"gs1.overrides.items.[INDEX].links.items.[INDEX].hreflang.items.[INDEX]","typeLabel":"string"},"description":"BCP-47 tags this link is for, e.g. [\"en\", \"fr-CA\"].","uniqueKey":"gs1.overrides.items.[INDEX].links.items.[INDEX].hreflang","typeLabel":"string[]"},"type":{"type":"string","description":"MIME type of the target, e.g. text/html.","uniqueKey":"gs1.overrides.items.[INDEX].links.items.[INDEX].type","typeLabel":"string"},"context":{"type":"array","items":{"type":"string","uniqueKey":"gs1.overrides.items.[INDEX].links.items.[INDEX].context.items.[INDEX]","typeLabel":"string"},"description":"GS1 context values (country/market) the link applies to.","uniqueKey":"gs1.overrides.items.[INDEX].links.items.[INDEX].context","typeLabel":"string[]"}},"uniqueKey":"gs1.overrides.items.[INDEX].links.items.[INDEX]","typeLabel":"object"},"maxItems":16,"uniqueKey":"gs1.overrides.items.[INDEX].links","typeLabel":"object[]"}},"uniqueKey":"gs1.overrides.items.[INDEX]","typeLabel":"object"},"uniqueKey":"gs1.overrides","typeLabel":"object[]"},"linkset_url":{"type":"string","format":"uri","description":"Absolute URL of this code's RFC 9264 linkset — `GET /v1/qr-codes/{id}/linkset`.","example":"https://api.useqrkit.com/v1/qr-codes/qr_123/linkset","uniqueKey":"gs1.linkset_url","typeLabel":"string\u003curi>"}},"uniqueKey":"gs1","typeLabel":"object"},"target":{"type":"object","properties":{"type":{"type":"string","uniqueKey":"target.type","typeLabel":"string"},"destination":{"oneOf":[{"type":"string","description":"Always a value you can act on, but it means one of two things —\nread `editable` to know which.\n\nWhen `editable` is `true`, this is the stored payload (the URL\nfor dynamic `url` codes, the encoded payload for statics), and\n`PATCH .../qr-codes/{id}` can re-point it through `target`.\nNote that dynamic `vcard` codes store the contact as JSON, so\ntheir `destination` is the full contact record (name, phone,\nemail, address) — treat webhook payloads for them as personal\ndata.\n\nWhen `editable` is `false` — codes that hold a page rather than\na link, whether made in the dashboard or through this API (a\nreview page is stored as `linkpage`) — the stored value is NOT a destination (`linkpage`,\n`form`, `menupage`, `appstores` and `smarturl` hold a JSON\ndocument; `file`, `audio`, `video` and `menu` hold an uploaded\nfile), so this is the code's **public hosted page URL** instead:\nthe same value as `short_url`, and the URL the QR image\nencodes. `null` only in the degenerate case of a dashboard-\nauthored row with no hosted URL — no URL is ever invented.\n","uniqueKey":"target.destination.oneOf.0","typeLabel":"string"},{"type":"null","description":"Always a value you can act on, but it means one of two things —\nread `editable` to know which.\n\nWhen `editable` is `true`, this is the stored payload (the URL\nfor dynamic `url` codes, the encoded payload for statics), and\n`PATCH .../qr-codes/{id}` can re-point it through `target`.\nNote that dynamic `vcard` codes store the contact as JSON, so\ntheir `destination` is the full contact record (name, phone,\nemail, address) — treat webhook payloads for them as personal\ndata.\n\nWhen `editable` is `false` — codes that hold a page rather than\na link, whether made in the dashboard or through this API (a\nreview page is stored as `linkpage`) — the stored value is NOT a destination (`linkpage`,\n`form`, `menupage`, `appstores` and `smarturl` hold a JSON\ndocument; `file`, `audio`, `video` and `menu` hold an uploaded\nfile), so this is the code's **public hosted page URL** instead:\nthe same value as `short_url`, and the URL the QR image\nencodes. `null` only in the degenerate case of a dashboard-\nauthored row with no hosted URL — no URL is ever invented.\n","uniqueKey":"target.destination.oneOf.1","typeLabel":"null"}],"uniqueKey":"target.destination","typeLabel":"string | null"},"editable":{"type":"boolean","description":"Whether `target` can be changed through\n`PATCH /v1/qr-codes/{id}`. `false` for codes that hold a page\nrather than a link (link and review pages, forms, menus, app-store and\nsmart-URL codes, and uploaded file/audio/video codes) — sending\n`target` for one of those is refused with\n`409 target_not_editable` and nothing in the request is\napplied. Edit them in the dashboard instead.\n","uniqueKey":"target.editable","typeLabel":"boolean"},"summary":{"oneOf":[{"type":"object","description":"Present only for `linkpage`, `form` and `menupage` (all of them\n`editable: false`). A short, safe description of the stored\ndocument, published in place of the document itself; `title` is\nnull when the document has none.\n","properties":{"title":{"oneOf":[{"type":"string","uniqueKey":"target.summary.oneOf.0.title.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"target.summary.oneOf.0.title.oneOf.1","typeLabel":"null"}],"uniqueKey":"target.summary.oneOf.0.title","typeLabel":"string | null"},"menus":{"type":"integer","description":"menupage only: number of VISIBLE menus (hidden ones are the author's unpublished drafts and are not counted).","uniqueKey":"target.summary.oneOf.0.menus","typeLabel":"integer"},"items":{"type":"integer","description":"menupage only: total VISIBLE items across every visible section of every visible menu.","uniqueKey":"target.summary.oneOf.0.\\items","typeLabel":"integer"}},"uniqueKey":"target.summary.oneOf.0","typeLabel":"object"},{"type":"null","description":"Present only for `linkpage`, `form` and `menupage` (all of them\n`editable: false`). A short, safe description of the stored\ndocument, published in place of the document itself; `title` is\nnull when the document has none.\n","properties":{"title":{"oneOf":[{"type":"string"},{"type":"null"}]},"menus":{"type":"integer","description":"menupage only: number of VISIBLE menus (hidden ones are the author's unpublished drafts and are not counted)."},"items":{"type":"integer","description":"menupage only: total VISIBLE items across every visible section of every visible menu."}},"uniqueKey":"target.summary.oneOf.1","typeLabel":"null"}],"uniqueKey":"target.summary","typeLabel":"object | null"}},"uniqueKey":"target","typeLabel":"object"},"design":{"oneOf":[{"type":"object","properties":{"colors":{"type":"object","properties":{"foreground":{"type":"string","uniqueKey":"design.oneOf.0.colors.foreground","typeLabel":"string"},"background":{"type":"string","uniqueKey":"design.oneOf.0.colors.background","typeLabel":"string"}},"uniqueKey":"design.oneOf.0.colors","typeLabel":"object"},"gradient":{"oneOf":[{"type":"object","properties":{"start":{"type":"string","uniqueKey":"design.oneOf.0.gradient.oneOf.0.start","typeLabel":"string"},"end":{"type":"string","uniqueKey":"design.oneOf.0.gradient.oneOf.0.end","typeLabel":"string"},"type":{"type":"string","uniqueKey":"design.oneOf.0.gradient.oneOf.0.type","typeLabel":"string"}},"uniqueKey":"design.oneOf.0.gradient.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"start":{"type":"string"},"end":{"type":"string"},"type":{"type":"string"}},"uniqueKey":"design.oneOf.0.gradient.oneOf.1","typeLabel":"null"}],"uniqueKey":"design.oneOf.0.gradient","typeLabel":"object | null"},"shapes":{"type":"object","properties":{"body":{"type":"string","uniqueKey":"design.oneOf.0.shapes.body","typeLabel":"string"},"eye_frame":{"type":"string","uniqueKey":"design.oneOf.0.shapes.eye_frame","typeLabel":"string"},"eye_ball":{"type":"string","uniqueKey":"design.oneOf.0.shapes.eye_ball","typeLabel":"string"}},"uniqueKey":"design.oneOf.0.shapes","typeLabel":"object"},"eye_colors":{"oneOf":[{"type":"object","properties":{"frame":{"type":"string","uniqueKey":"design.oneOf.0.eye_colors.oneOf.0.frame","typeLabel":"string"},"ball":{"type":"string","uniqueKey":"design.oneOf.0.eye_colors.oneOf.0.ball","typeLabel":"string"}},"uniqueKey":"design.oneOf.0.eye_colors.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"frame":{"type":"string"},"ball":{"type":"string"}},"uniqueKey":"design.oneOf.0.eye_colors.oneOf.1","typeLabel":"null"}],"uniqueKey":"design.oneOf.0.eye_colors","typeLabel":"object | null"},"has_logo":{"type":"boolean","uniqueKey":"design.oneOf.0.has_logo","typeLabel":"boolean"},"transparent_background":{"type":"boolean","uniqueKey":"design.oneOf.0.transparent_background","typeLabel":"boolean"}},"uniqueKey":"design.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"colors":{"type":"object","properties":{"foreground":{"type":"string"},"background":{"type":"string"}}},"gradient":{"oneOf":[{"type":"object","properties":{"start":{"type":"string"},"end":{"type":"string"},"type":{"type":"string"}}},{"type":"null","properties":{"start":{"type":"string"},"end":{"type":"string"},"type":{"type":"string"}}}]},"shapes":{"type":"object","properties":{"body":{"type":"string"},"eye_frame":{"type":"string"},"eye_ball":{"type":"string"}}},"eye_colors":{"oneOf":[{"type":"object","properties":{"frame":{"type":"string"},"ball":{"type":"string"}}},{"type":"null","properties":{"frame":{"type":"string"},"ball":{"type":"string"}}}]},"has_logo":{"type":"boolean"},"transparent_background":{"type":"boolean"}},"uniqueKey":"design.oneOf.1","typeLabel":"null"}],"uniqueKey":"design","typeLabel":"object | null"},"folder_id":{"oneOf":[{"type":"string","example":"fld_12","uniqueKey":"folder_id.oneOf.0","typeLabel":"string"},{"type":"null","example":"fld_12","uniqueKey":"folder_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"folder_id","typeLabel":"string | null"},"tags":{"type":"array","items":{"type":"string","uniqueKey":"tags.items.[INDEX]","typeLabel":"string"},"uniqueKey":"tags","typeLabel":"string[]"},"image_url":{"type":"string","example":"https://img.useqrkit.com/qr-AB3D5-1717000000000.svg","uniqueKey":"image_url","typeLabel":"string"},"download_url":{"type":"string","example":"/v1/qr-codes/qr_123/download","uniqueKey":"download_url","typeLabel":"string"},"is_active":{"type":"boolean","description":"Dynamic codes: whether the redirect is on. Static codes: `false` while the code is in the Trash (the printed payload itself keeps working).","uniqueKey":"is_active","typeLabel":"boolean"},"scan_count":{"oneOf":[{"type":"integer","description":"null for static codes (no tracking).","uniqueKey":"scan_count.oneOf.0","typeLabel":"integer"},{"type":"null","description":"null for static codes (no tracking).","uniqueKey":"scan_count.oneOf.1","typeLabel":"null"}],"uniqueKey":"scan_count","typeLabel":"integer | null"},"utm":{"oneOf":[{"type":"object","description":"UTM parameters (null unless set on a dynamic url code).","properties":{"source":{"type":"string","uniqueKey":"utm.oneOf.0.source","typeLabel":"string"},"medium":{"type":"string","uniqueKey":"utm.oneOf.0.medium","typeLabel":"string"},"campaign":{"type":"string","uniqueKey":"utm.oneOf.0.campaign","typeLabel":"string"},"term":{"type":"string","uniqueKey":"utm.oneOf.0.term","typeLabel":"string"},"content":{"type":"string","uniqueKey":"utm.oneOf.0.content","typeLabel":"string"}},"uniqueKey":"utm.oneOf.0","typeLabel":"object"},{"type":"null","description":"UTM parameters (null unless set on a dynamic url code).","properties":{"source":{"type":"string"},"medium":{"type":"string"},"campaign":{"type":"string"},"term":{"type":"string"},"content":{"type":"string"}},"uniqueKey":"utm.oneOf.1","typeLabel":"null"}],"uniqueKey":"utm","typeLabel":"object | null"},"created_at":{"type":"string","format":"date-time","uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"deleted_at":{"oneOf":[{"type":"string","format":"date-time","description":"`null` for a live code. Set while the code is in the Trash (or paused by a plan downgrade); restore it with `POST /v1/qr-codes/{id}/restore`.","uniqueKey":"deleted_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"`null` for a live code. Set while the code is in the Trash (or paused by a plan downgrade); restore it with `POST /v1/qr-codes/{id}/restore`.","uniqueKey":"deleted_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"deleted_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"qr_123","object":"qr_code","kind":"dynamic","name":"\u003cstring>","type":"url","short_code":"AB3D5","short_url":"https://qrkit.to/AB3D5","domain_id":"dom_3","gs1":{"mode":"static","key":"01/09506000134352/10/LOT1","digital_link":"\u003cstring>","primary_key":{"ai":"\u003cstring>","value":"\u003cstring>"},"qualifiers":[{"ai":"\u003cstring>","value":"\u003cstring>"}],"attributes":{},"links":[{"linkType":"gs1:pip","href":"\u003cstring>","title":"\u003cstring>","hreflang":["\u003cstring>"],"type":"\u003cstring>","context":["\u003cstring>"]}],"overrides":[{"path":"10/LOT1","href":"\u003cstring>","links":[{"linkType":"gs1:pip","href":"\u003cstring>","title":"\u003cstring>","hreflang":["\u003cstring>"],"type":"\u003cstring>","context":["\u003cstring>"]}]}],"linkset_url":"https://api.useqrkit.com/v1/qr-codes/qr_123/linkset"},"target":{"type":"\u003cstring>","destination":"\u003cstring>","editable":true,"summary":{"title":"\u003cstring>","menus":123,"items":123}},"design":{"colors":{"foreground":"\u003cstring>","background":"\u003cstring>"},"gradient":{"start":"\u003cstring>","end":"\u003cstring>","type":"\u003cstring>"},"shapes":{"body":"\u003cstring>","eye_frame":"\u003cstring>","eye_ball":"\u003cstring>"},"eye_colors":{"frame":"\u003cstring>","ball":"\u003cstring>"},"has_logo":true,"transparent_background":true},"folder_id":"fld_12","tags":["\u003cstring>"],"image_url":"https://img.useqrkit.com/qr-AB3D5-1717000000000.svg","download_url":"/v1/qr-codes/qr_123/download","is_active":true,"scan_count":123,"utm":{"source":"\u003cstring>","medium":"\u003cstring>","campaign":"\u003cstring>","term":"\u003cstring>","content":"\u003cstring>"},"created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","deleted_at":"2023-11-07T05:31:56Z"}}},"exampleType":"generated"}},"exampleType":"generated"},"a6efcad8-7388-4d1a-b9a4-b6db0daf64d1":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","forbidden","not_found","conflict","target_not_editable","destination_unsafe","unprocessable_entity","payload_too_large","rate_limit_exceeded","internal_error"],"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"reason":{"type":"string","description":"Machine-readable reason, where the HTTP code alone is\nambiguous. `NOT_IN_TRASH` (409): a restore of a code that is\nlive. `DEACTIVATED` (409): a restore of a code that is\nswitched off but was never deleted — re-activate it with\n`PATCH is_active: true`. `DOMAIN_RETIRED` (409): a restore or\nre-activation of a GS1 code whose custom domain was removed.\n`PLAN_LIMIT` (422): a create, batch, restore, or `PATCH` with\n`is_active: true` the plan has no room for. Parallel API\nrequests are serialized per workspace, so they cannot\ntogether go past the limit.\n","enum":["NOT_IN_TRASH","DEACTIVATED","DOMAIN_RETIRED","PLAN_LIMIT"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"gs1_code":{"type":"string","description":"Machine-readable reason for a GS1 failure, where the HTTP code\nalone is ambiguous. Present only on GS1 requests.\n","enum":["NOT_ENTITLED","PLAN_LIMIT","INVALID_KEY","INVALID_DESTINATION","INVALID_LINKS","INVALID_OVERRIDES","GS1_KEY_TAKEN","GS1_KEY_IN_TRASH","GS1_KEY_RETIRED","GS1_IDENTIFIER_IMMUTABLE","GS1_METADATA_MISSING","GS1_STATIC_HAS_NO_LINKSET","GS1_NOT_A_GS1_CODE","GS1_ERROR_CORRECTION_TOO_LOW","CREATE_FAILED"],"uniqueKey":"error.gs1_code","typeLabel":"enum\u003cstring>"},"field":{"type":"string","description":"The input to blame, e.g. `primary_key.value`, `destination`, `links[2].href`.","uniqueKey":"error.field","typeLabel":"string"},"fields":{"type":"array","items":{"type":"string","uniqueKey":"error.fields.items.[INDEX]","typeLabel":"string"},"description":"The immutable identifier fields a PATCH tried to change (GS1_IDENTIFIER_IMMUTABLE).","uniqueKey":"error.fields","typeLabel":"string[]"},"limit":{"type":"integer","description":"PLAN_LIMIT only — the plan's allowance for the kind of code involved: GS1 codes when `gs1_code` is set, otherwise dynamic QR codes (`-1` = unlimited).","uniqueKey":"error.limit","typeLabel":"integer"},"current_count":{"type":"integer","description":"PLAN_LIMIT only — codes of that kind the workspace already holds (active, not deleted).","uniqueKey":"error.current_count","typeLabel":"integer"},"requested":{"type":"integer","description":"PLAN_LIMIT on a batch only — the dynamic (or dynamic GS1) items the batch asked for.","uniqueKey":"error.requested","typeLabel":"integer"},"plan_id":{"type":"string","description":"PLAN_LIMIT only — the plan the limit was read from.","uniqueKey":"error.plan_id","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","reason":"NOT_IN_TRASH","gs1_code":"NOT_ENTITLED","field":"\u003cstring>","fields":["\u003cstring>"],"limit":123,"current_count":123,"requested":123,"plan_id":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"52962761-3094-4034-b65c-b352bed9d80f":{"description":"Missing or invalid credentials — including a revoked or expired key, and a key whose workspace has been deleted.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","forbidden","not_found","conflict","target_not_editable","destination_unsafe","unprocessable_entity","payload_too_large","rate_limit_exceeded","internal_error"],"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"reason":{"type":"string","description":"Machine-readable reason, where the HTTP code alone is\nambiguous. `NOT_IN_TRASH` (409): a restore of a code that is\nlive. `DEACTIVATED` (409): a restore of a code that is\nswitched off but was never deleted — re-activate it with\n`PATCH is_active: true`. `DOMAIN_RETIRED` (409): a restore or\nre-activation of a GS1 code whose custom domain was removed.\n`PLAN_LIMIT` (422): a create, batch, restore, or `PATCH` with\n`is_active: true` the plan has no room for. Parallel API\nrequests are serialized per workspace, so they cannot\ntogether go past the limit.\n","enum":["NOT_IN_TRASH","DEACTIVATED","DOMAIN_RETIRED","PLAN_LIMIT"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"gs1_code":{"type":"string","description":"Machine-readable reason for a GS1 failure, where the HTTP code\nalone is ambiguous. Present only on GS1 requests.\n","enum":["NOT_ENTITLED","PLAN_LIMIT","INVALID_KEY","INVALID_DESTINATION","INVALID_LINKS","INVALID_OVERRIDES","GS1_KEY_TAKEN","GS1_KEY_IN_TRASH","GS1_KEY_RETIRED","GS1_IDENTIFIER_IMMUTABLE","GS1_METADATA_MISSING","GS1_STATIC_HAS_NO_LINKSET","GS1_NOT_A_GS1_CODE","GS1_ERROR_CORRECTION_TOO_LOW","CREATE_FAILED"],"uniqueKey":"error.gs1_code","typeLabel":"enum\u003cstring>"},"field":{"type":"string","description":"The input to blame, e.g. `primary_key.value`, `destination`, `links[2].href`.","uniqueKey":"error.field","typeLabel":"string"},"fields":{"type":"array","items":{"type":"string","uniqueKey":"error.fields.items.[INDEX]","typeLabel":"string"},"description":"The immutable identifier fields a PATCH tried to change (GS1_IDENTIFIER_IMMUTABLE).","uniqueKey":"error.fields","typeLabel":"string[]"},"limit":{"type":"integer","description":"PLAN_LIMIT only — the plan's allowance for the kind of code involved: GS1 codes when `gs1_code` is set, otherwise dynamic QR codes (`-1` = unlimited).","uniqueKey":"error.limit","typeLabel":"integer"},"current_count":{"type":"integer","description":"PLAN_LIMIT only — codes of that kind the workspace already holds (active, not deleted).","uniqueKey":"error.current_count","typeLabel":"integer"},"requested":{"type":"integer","description":"PLAN_LIMIT on a batch only — the dynamic (or dynamic GS1) items the batch asked for.","uniqueKey":"error.requested","typeLabel":"integer"},"plan_id":{"type":"string","description":"PLAN_LIMIT only — the plan the limit was read from.","uniqueKey":"error.plan_id","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","reason":"NOT_IN_TRASH","gs1_code":"NOT_ENTITLED","field":"\u003cstring>","fields":["\u003cstring>"],"limit":123,"current_count":123,"requested":123,"plan_id":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"04853fa3-dea8-4cbd-93a0-e721497965a3":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","forbidden","not_found","conflict","target_not_editable","destination_unsafe","unprocessable_entity","payload_too_large","rate_limit_exceeded","internal_error"],"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"reason":{"type":"string","description":"Machine-readable reason, where the HTTP code alone is\nambiguous. `NOT_IN_TRASH` (409): a restore of a code that is\nlive. `DEACTIVATED` (409): a restore of a code that is\nswitched off but was never deleted — re-activate it with\n`PATCH is_active: true`. `DOMAIN_RETIRED` (409): a restore or\nre-activation of a GS1 code whose custom domain was removed.\n`PLAN_LIMIT` (422): a create, batch, restore, or `PATCH` with\n`is_active: true` the plan has no room for. Parallel API\nrequests are serialized per workspace, so they cannot\ntogether go past the limit.\n","enum":["NOT_IN_TRASH","DEACTIVATED","DOMAIN_RETIRED","PLAN_LIMIT"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"gs1_code":{"type":"string","description":"Machine-readable reason for a GS1 failure, where the HTTP code\nalone is ambiguous. Present only on GS1 requests.\n","enum":["NOT_ENTITLED","PLAN_LIMIT","INVALID_KEY","INVALID_DESTINATION","INVALID_LINKS","INVALID_OVERRIDES","GS1_KEY_TAKEN","GS1_KEY_IN_TRASH","GS1_KEY_RETIRED","GS1_IDENTIFIER_IMMUTABLE","GS1_METADATA_MISSING","GS1_STATIC_HAS_NO_LINKSET","GS1_NOT_A_GS1_CODE","GS1_ERROR_CORRECTION_TOO_LOW","CREATE_FAILED"],"uniqueKey":"error.gs1_code","typeLabel":"enum\u003cstring>"},"field":{"type":"string","description":"The input to blame, e.g. `primary_key.value`, `destination`, `links[2].href`.","uniqueKey":"error.field","typeLabel":"string"},"fields":{"type":"array","items":{"type":"string","uniqueKey":"error.fields.items.[INDEX]","typeLabel":"string"},"description":"The immutable identifier fields a PATCH tried to change (GS1_IDENTIFIER_IMMUTABLE).","uniqueKey":"error.fields","typeLabel":"string[]"},"limit":{"type":"integer","description":"PLAN_LIMIT only — the plan's allowance for the kind of code involved: GS1 codes when `gs1_code` is set, otherwise dynamic QR codes (`-1` = unlimited).","uniqueKey":"error.limit","typeLabel":"integer"},"current_count":{"type":"integer","description":"PLAN_LIMIT only — codes of that kind the workspace already holds (active, not deleted).","uniqueKey":"error.current_count","typeLabel":"integer"},"requested":{"type":"integer","description":"PLAN_LIMIT on a batch only — the dynamic (or dynamic GS1) items the batch asked for.","uniqueKey":"error.requested","typeLabel":"integer"},"plan_id":{"type":"string","description":"PLAN_LIMIT only — the plan the limit was read from.","uniqueKey":"error.plan_id","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","reason":"NOT_IN_TRASH","gs1_code":"NOT_ENTITLED","field":"\u003cstring>","fields":["\u003cstring>"],"limit":123,"current_count":123,"requested":123,"plan_id":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"dd95c3d6-04b7-4046-a90f-7dd509a5c1b0":{"description":"`target` is not editable for this QR code's type (code `target_not_editable`), or `is_active: true` on a GS1 code whose custom domain was removed (`reason: DOMAIN_RETIRED`). The whole request was refused.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","forbidden","not_found","conflict","target_not_editable","destination_unsafe","unprocessable_entity","payload_too_large","rate_limit_exceeded","internal_error"],"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"reason":{"type":"string","description":"Machine-readable reason, where the HTTP code alone is\nambiguous. `NOT_IN_TRASH` (409): a restore of a code that is\nlive. `DEACTIVATED` (409): a restore of a code that is\nswitched off but was never deleted — re-activate it with\n`PATCH is_active: true`. `DOMAIN_RETIRED` (409): a restore or\nre-activation of a GS1 code whose custom domain was removed.\n`PLAN_LIMIT` (422): a create, batch, restore, or `PATCH` with\n`is_active: true` the plan has no room for. Parallel API\nrequests are serialized per workspace, so they cannot\ntogether go past the limit.\n","enum":["NOT_IN_TRASH","DEACTIVATED","DOMAIN_RETIRED","PLAN_LIMIT"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"gs1_code":{"type":"string","description":"Machine-readable reason for a GS1 failure, where the HTTP code\nalone is ambiguous. Present only on GS1 requests.\n","enum":["NOT_ENTITLED","PLAN_LIMIT","INVALID_KEY","INVALID_DESTINATION","INVALID_LINKS","INVALID_OVERRIDES","GS1_KEY_TAKEN","GS1_KEY_IN_TRASH","GS1_KEY_RETIRED","GS1_IDENTIFIER_IMMUTABLE","GS1_METADATA_MISSING","GS1_STATIC_HAS_NO_LINKSET","GS1_NOT_A_GS1_CODE","GS1_ERROR_CORRECTION_TOO_LOW","CREATE_FAILED"],"uniqueKey":"error.gs1_code","typeLabel":"enum\u003cstring>"},"field":{"type":"string","description":"The input to blame, e.g. `primary_key.value`, `destination`, `links[2].href`.","uniqueKey":"error.field","typeLabel":"string"},"fields":{"type":"array","items":{"type":"string","uniqueKey":"error.fields.items.[INDEX]","typeLabel":"string"},"description":"The immutable identifier fields a PATCH tried to change (GS1_IDENTIFIER_IMMUTABLE).","uniqueKey":"error.fields","typeLabel":"string[]"},"limit":{"type":"integer","description":"PLAN_LIMIT only — the plan's allowance for the kind of code involved: GS1 codes when `gs1_code` is set, otherwise dynamic QR codes (`-1` = unlimited).","uniqueKey":"error.limit","typeLabel":"integer"},"current_count":{"type":"integer","description":"PLAN_LIMIT only — codes of that kind the workspace already holds (active, not deleted).","uniqueKey":"error.current_count","typeLabel":"integer"},"requested":{"type":"integer","description":"PLAN_LIMIT on a batch only — the dynamic (or dynamic GS1) items the batch asked for.","uniqueKey":"error.requested","typeLabel":"integer"},"plan_id":{"type":"string","description":"PLAN_LIMIT only — the plan the limit was read from.","uniqueKey":"error.plan_id","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","reason":"NOT_IN_TRASH","gs1_code":"NOT_ENTITLED","field":"\u003cstring>","fields":["\u003cstring>"],"limit":123,"current_count":123,"requested":123,"plan_id":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"544a86da-aff6-4fa0-8ce8-016047af8618":{"description":"Request understood but cannot be processed (e.g. plan limit reached)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","forbidden","not_found","conflict","target_not_editable","destination_unsafe","unprocessable_entity","payload_too_large","rate_limit_exceeded","internal_error"],"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"reason":{"type":"string","description":"Machine-readable reason, where the HTTP code alone is\nambiguous. `NOT_IN_TRASH` (409): a restore of a code that is\nlive. `DEACTIVATED` (409): a restore of a code that is\nswitched off but was never deleted — re-activate it with\n`PATCH is_active: true`. `DOMAIN_RETIRED` (409): a restore or\nre-activation of a GS1 code whose custom domain was removed.\n`PLAN_LIMIT` (422): a create, batch, restore, or `PATCH` with\n`is_active: true` the plan has no room for. Parallel API\nrequests are serialized per workspace, so they cannot\ntogether go past the limit.\n","enum":["NOT_IN_TRASH","DEACTIVATED","DOMAIN_RETIRED","PLAN_LIMIT"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"gs1_code":{"type":"string","description":"Machine-readable reason for a GS1 failure, where the HTTP code\nalone is ambiguous. Present only on GS1 requests.\n","enum":["NOT_ENTITLED","PLAN_LIMIT","INVALID_KEY","INVALID_DESTINATION","INVALID_LINKS","INVALID_OVERRIDES","GS1_KEY_TAKEN","GS1_KEY_IN_TRASH","GS1_KEY_RETIRED","GS1_IDENTIFIER_IMMUTABLE","GS1_METADATA_MISSING","GS1_STATIC_HAS_NO_LINKSET","GS1_NOT_A_GS1_CODE","GS1_ERROR_CORRECTION_TOO_LOW","CREATE_FAILED"],"uniqueKey":"error.gs1_code","typeLabel":"enum\u003cstring>"},"field":{"type":"string","description":"The input to blame, e.g. `primary_key.value`, `destination`, `links[2].href`.","uniqueKey":"error.field","typeLabel":"string"},"fields":{"type":"array","items":{"type":"string","uniqueKey":"error.fields.items.[INDEX]","typeLabel":"string"},"description":"The immutable identifier fields a PATCH tried to change (GS1_IDENTIFIER_IMMUTABLE).","uniqueKey":"error.fields","typeLabel":"string[]"},"limit":{"type":"integer","description":"PLAN_LIMIT only — the plan's allowance for the kind of code involved: GS1 codes when `gs1_code` is set, otherwise dynamic QR codes (`-1` = unlimited).","uniqueKey":"error.limit","typeLabel":"integer"},"current_count":{"type":"integer","description":"PLAN_LIMIT only — codes of that kind the workspace already holds (active, not deleted).","uniqueKey":"error.current_count","typeLabel":"integer"},"requested":{"type":"integer","description":"PLAN_LIMIT on a batch only — the dynamic (or dynamic GS1) items the batch asked for.","uniqueKey":"error.requested","typeLabel":"integer"},"plan_id":{"type":"string","description":"PLAN_LIMIT only — the plan the limit was read from.","uniqueKey":"error.plan_id","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","reason":"NOT_IN_TRASH","gs1_code":"NOT_ENTITLED","field":"\u003cstring>","fields":["\u003cstring>"],"limit":123,"current_count":123,"requested":123,"plan_id":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"fe5f31a3-99bc-4512-adae-da3bc51e35ac":{"description":"Rate limit or monthly quota exceeded — see Retry-After header","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","forbidden","not_found","conflict","target_not_editable","destination_unsafe","unprocessable_entity","payload_too_large","rate_limit_exceeded","internal_error"],"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"reason":{"type":"string","description":"Machine-readable reason, where the HTTP code alone is\nambiguous. `NOT_IN_TRASH` (409): a restore of a code that is\nlive. `DEACTIVATED` (409): a restore of a code that is\nswitched off but was never deleted — re-activate it with\n`PATCH is_active: true`. `DOMAIN_RETIRED` (409): a restore or\nre-activation of a GS1 code whose custom domain was removed.\n`PLAN_LIMIT` (422): a create, batch, restore, or `PATCH` with\n`is_active: true` the plan has no room for. Parallel API\nrequests are serialized per workspace, so they cannot\ntogether go past the limit.\n","enum":["NOT_IN_TRASH","DEACTIVATED","DOMAIN_RETIRED","PLAN_LIMIT"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"gs1_code":{"type":"string","description":"Machine-readable reason for a GS1 failure, where the HTTP code\nalone is ambiguous. Present only on GS1 requests.\n","enum":["NOT_ENTITLED","PLAN_LIMIT","INVALID_KEY","INVALID_DESTINATION","INVALID_LINKS","INVALID_OVERRIDES","GS1_KEY_TAKEN","GS1_KEY_IN_TRASH","GS1_KEY_RETIRED","GS1_IDENTIFIER_IMMUTABLE","GS1_METADATA_MISSING","GS1_STATIC_HAS_NO_LINKSET","GS1_NOT_A_GS1_CODE","GS1_ERROR_CORRECTION_TOO_LOW","CREATE_FAILED"],"uniqueKey":"error.gs1_code","typeLabel":"enum\u003cstring>"},"field":{"type":"string","description":"The input to blame, e.g. `primary_key.value`, `destination`, `links[2].href`.","uniqueKey":"error.field","typeLabel":"string"},"fields":{"type":"array","items":{"type":"string","uniqueKey":"error.fields.items.[INDEX]","typeLabel":"string"},"description":"The immutable identifier fields a PATCH tried to change (GS1_IDENTIFIER_IMMUTABLE).","uniqueKey":"error.fields","typeLabel":"string[]"},"limit":{"type":"integer","description":"PLAN_LIMIT only — the plan's allowance for the kind of code involved: GS1 codes when `gs1_code` is set, otherwise dynamic QR codes (`-1` = unlimited).","uniqueKey":"error.limit","typeLabel":"integer"},"current_count":{"type":"integer","description":"PLAN_LIMIT only — codes of that kind the workspace already holds (active, not deleted).","uniqueKey":"error.current_count","typeLabel":"integer"},"requested":{"type":"integer","description":"PLAN_LIMIT on a batch only — the dynamic (or dynamic GS1) items the batch asked for.","uniqueKey":"error.requested","typeLabel":"integer"},"plan_id":{"type":"string","description":"PLAN_LIMIT only — the plan the limit was read from.","uniqueKey":"error.plan_id","typeLabel":"string"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","reason":"NOT_IN_TRASH","gs1_code":"NOT_ENTITLED","field":"\u003cstring>","fields":["\u003cstring>"],"limit":123,"current_count":123,"requested":123,"plan_id":"\u003cstring>","doc_url":"\u003cstring>","request_id":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"55a46e2a-2cc9-49e0-9a17-83ee78dff490":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key in the Authorization header: `Bearer qr_live_…` or `Bearer qr_test_…`. Token endpoints take a Clerk session JWT instead.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"aa6ca5af-dcf4-4523-a221-6a1f0c45701c":{"url":"https://api.useqrkit.com/v1","description":"Production"},"47461fe5-7010-4edd-b354-d8f475ba61ea":{"url":"http://localhost:3001/v1","description":"Local development"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key in the Authorization header: `Bearer qr_live_…` or `Bearer qr_test_…`. Token endpoints take a Clerk session JWT instead.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key in the Authorization header: `Bearer qr_live_…` or `Bearer qr_test_…`. Token endpoints take a Clerk session JWT instead.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"qrkit","siteName":"QRKit API","title":"Update QR Code - QRKit API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-17T20:12:18.910Z","originalFileLocation":"api-reference/qr-codes/update-qr-code.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Updates a QR code. Requires the qr:write scope. Dynamic codes: name, target.destination, target.utm, design, folder_id, tags, is_active. Changing the design re-renders the stored image on the code\u0026#x27;s own host (its custom domain, if it has one); changing the destination does not require reprinting — the short URL stays the same. domain_id cannot change after creation (422 for a different value; the current one is accepted): the host is printed in the QR. Dynamic wifi/email/sms/event codes are updated with their structured fields (target.ssid/password/encryption, target.email/subject/message/cc/bcc, target.phone/message, target.title/location/start/end) rather than target.destination; omitted fields keep their current value. Dynamic text codes take target.text. The link types (youtube … googleform) take target.destination like url. whatsapp takes target.phone and/or target.message (an omitted one keeps its value) or a WhatsApp link in target.destination; telegram takes target.destination (a @username, phone or t.me link). Either can also be re-pointed to any other http(s) page. location takes target.lat + target.lng and/or map_app, label, address (omitted ones keep their value); a plain target.destination turns it into an ordinary redirect. Static codes: only name, folder_id and design (the payload is baked into the printed code). Dynamic GS1 codes: destination (the default link), links, overrides, plus name, design, folder_id, tags and is_active — all at the TOP level, not under target. The identifier (primary_key, qualifiers, attributes, domain, domain_id, mode, gs1_key) is printed on packaging and immutable: naming any of them returns 422 with gs1_code: GS1_IDENTIFIER_IMMUTABLE rather than silently ignoring the field. A dynamic GS1 code therefore reports target.editable: false, with target.destination set to its Digital Link URI. A static GS1 code bakes its Digital Link into the image and, like every static code, cannot be re-pointed. Codes that hold a page rather than a link — link pages (including review pages created through this API), forms, menus, app-store and smart-URL codes, and uploaded file/audio/video codes — store a document or an uploaded file rather than a destination. They are reported with target.editable: false (and target.destination set to their public hosted page URL). Sending target for one of those is refused with 409 target_not_editable and nothing in the request is applied; edit them in the dashboard. Their other fields (name, folder_id, tags, design, is_active) update normally.\">\u003cmeta data-mint-head name=\"application-name\" content=\"QRKit API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update QR Code - QRKit API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Updates a QR code. Requires the qr:write scope. Dynamic codes: name, target.destination, target.utm, design, folder_id, tags, is_active. Changing the design re-renders the stored image on the code\u0026#x27;s own host (its custom domain, if it has one); changing the destination does not require reprinting — the short URL stays the same. domain_id cannot change after creation (422 for a different value; the current one is accepted): the host is printed in the QR. Dynamic wifi/email/sms/event codes are updated with their structured fields (target.ssid/password/encryption, target.email/subject/message/cc/bcc, target.phone/message, target.title/location/start/end) rather than target.destination; omitted fields keep their current value. Dynamic text codes take target.text. The link types (youtube … googleform) take target.destination like url. whatsapp takes target.phone and/or target.message (an omitted one keeps its value) or a WhatsApp link in target.destination; telegram takes target.destination (a @username, phone or t.me link). Either can also be re-pointed to any other http(s) page. location takes target.lat + target.lng and/or map_app, label, address (omitted ones keep their value); a plain target.destination turns it into an ordinary redirect. Static codes: only name, folder_id and design (the payload is baked into the printed code). Dynamic GS1 codes: destination (the default link), links, overrides, plus name, design, folder_id, tags and is_active — all at the TOP level, not under target. The identifier (primary_key, qualifiers, attributes, domain, domain_id, mode, gs1_key) is printed on packaging and immutable: naming any of them returns 422 with gs1_code: GS1_IDENTIFIER_IMMUTABLE rather than silently ignoring the field. A dynamic GS1 code therefore reports target.editable: false, with target.destination set to its Digital Link URI. A static GS1 code bakes its Digital Link into the image and, like every static code, cannot be re-pointed. Codes that hold a page rather than a link — link pages (including review pages created through this API), forms, menus, app-store and smart-URL codes, and uploaded file/audio/video codes — store a document or an uploaded file rather than a destination. They are reported with target.editable: false (and target.destination set to their public hosted page URL). Sending target for one of those is refused with 409 target_not_editable and nothing in the request is applied; edit them in the dashboard. Their other fields (name, folder_id, tags, design, is_active) update normally.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"QRKit API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://qrkit.mintlify.app/_mintlify/api/og/v2?division=QR+Codes\u0026amp;title=Update+QR+Code\u0026amp;description=Updates+a+QR+code.+Requires+the+%60qr%3Awrite%60+scope.%0A%0ADynamic+codes%3A+%60name%60%2C+%60target.destination%60%2C+%60target.utm%60%2C+%60design%60%2C%0A%60folder_id%60%2C+%60tags%60%2C+%60is_active%60.+Changi\u0026amp;theme=19f3ee5af3c4683c6442e41c\u0026amp;signature=2f0869594aa6b53884c3d883f4c1f0372e002563f76fdf59c314976a60e3c7e5\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update QR Code - QRKit API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Updates a QR code. Requires the qr:write scope. Dynamic codes: name, target.destination, target.utm, design, folder_id, tags, is_active. Changing the design re-renders the stored image on the code\u0026#x27;s own host (its custom domain, if it has one); changing the destination does not require reprinting — the short URL stays the same. domain_id cannot change after creation (422 for a different value; the current one is accepted): the host is printed in the QR. Dynamic wifi/email/sms/event codes are updated with their structured fields (target.ssid/password/encryption, target.email/subject/message/cc/bcc, target.phone/message, target.title/location/start/end) rather than target.destination; omitted fields keep their current value. Dynamic text codes take target.text. The link types (youtube … googleform) take target.destination like url. whatsapp takes target.phone and/or target.message (an omitted one keeps its value) or a WhatsApp link in target.destination; telegram takes target.destination (a @username, phone or t.me link). Either can also be re-pointed to any other http(s) page. location takes target.lat + target.lng and/or map_app, label, address (omitted ones keep their value); a plain target.destination turns it into an ordinary redirect. Static codes: only name, folder_id and design (the payload is baked into the printed code). Dynamic GS1 codes: destination (the default link), links, overrides, plus name, design, folder_id, tags and is_active — all at the TOP level, not under target. The identifier (primary_key, qualifiers, attributes, domain, domain_id, mode, gs1_key) is printed on packaging and immutable: naming any of them returns 422 with gs1_code: GS1_IDENTIFIER_IMMUTABLE rather than silently ignoring the field. A dynamic GS1 code therefore reports target.editable: false, with target.destination set to its Digital Link URI. A static GS1 code bakes its Digital Link into the image and, like every static code, cannot be re-pointed. Codes that hold a page rather than a link — link pages (including review pages created through this API), forms, menus, app-store and smart-URL codes, and uploaded file/audio/video codes — store a document or an uploaded file rather than a destination. They are reported with target.editable: false (and target.destination set to their public hosted page URL). Sending target for one of those is refused with 409 target_not_editable and nothing in the request is applied; edit them in the dashboard. Their other fields (name, folder_id, tags, design, is_active) update normally.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qrkit.mintlify.app/_mintlify/api/og/v2?division=QR+Codes\u0026amp;title=Update+QR+Code\u0026amp;description=Updates+a+QR+code.+Requires+the+%60qr%3Awrite%60+scope.%0A%0ADynamic+codes%3A+%60name%60%2C+%60target.destination%60%2C+%60target.utm%60%2C+%60design%60%2C%0A%60folder_id%60%2C+%60tags%60%2C+%60is_active%60.+Changi\u0026amp;theme=19f3ee5af3c4683c6442e41c\u0026amp;signature=2f0869594aa6b53884c3d883f4c1f0372e002563f76fdf59c314976a60e3c7e5\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/qrkit/XAxoR7_XNonsJwfS/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"QRKit API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#005ae0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/qr-codes/update-qr-code.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.useqrkit.com/#organization\",\"name\":\"QRKit API\",\"url\":\"https://docs.useqrkit.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/qrkit/qrQ9pgs0aTwgkPAw/logo/light.png?fit=max\u0026auto=format\u0026n=qrQ9pgs0aTwgkPAw\u0026q=85\u0026s=3e58fbcc4c845236b5698ed0cf1ec21c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.useqrkit.com#website\",\"name\":\"QRKit API\",\"url\":\"https://docs.useqrkit.com\",\"publisher\":{\"@id\":\"https://docs.useqrkit.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code#webpage\",\"url\":\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code\",\"name\":\"Update QR Code\",\"description\":\"Updates a QR code. Requires the qr:write scope. Dynamic codes: name, target.destination, target.utm, design, folder_id, tags, is_active. Changing the design re-renders the stored image on the code's own host (its custom domain, if it has one); changing the destination does not require reprinting — the short URL stays the same. domain_id cannot change after creation (422 for a different value; the current one is accepted): the host is printed in the QR. Dynamic wifi/email/sms/event codes are updated with their structured fields (target.ssid/password/encryption, target.email/subject/message/cc/bcc, target.phone/message, target.title/location/start/end) rather than target.destination; omitted fields keep their current value. Dynamic text codes take target.text. The link types (youtube … googleform) take target.destination like url. whatsapp takes target.phone and/or target.message (an omitted one keeps its value) or a WhatsApp link in target.destination; telegram takes target.destination (a @username, phone or t.me link). Either can also be re-pointed to any other http(s) page. location takes target.lat + target.lng and/or map_app, label, address (omitted ones keep their value); a plain target.destination turns it into an ordinary redirect. Static codes: only name, folder_id and design (the payload is baked into the printed code). Dynamic GS1 codes: destination (the default link), links, overrides, plus name, design, folder_id, tags and is_active — all at the TOP level, not under target. The identifier (primary_key, qualifiers, attributes, domain, domain_id, mode, gs1_key) is printed on packaging and immutable: naming any of them returns 422 with gs1_code: GS1_IDENTIFIER_IMMUTABLE rather than silently ignoring the field. A dynamic GS1 code therefore reports target.editable: false, with target.destination set to its Digital Link URI. A static GS1 code bakes its Digital Link into the image and, like every static code, cannot be re-pointed. Codes that hold a page rather than a link — link pages (including review pages created through this API), forms, menus, app-store and smart-URL codes, and uploaded file/audio/video codes — store a document or an uploaded file rather than a destination. They are reported with target.editable: false (and target.destination set to their public hosted page URL). Sending target for one of those is refused with 409 target_not_editable and nothing in the request is applied; edit them in the dashboard. Their other fields (name, folder_id, tags, design, is_active) update normally.\",\"dateModified\":\"2026-10-17T20:12:18.910Z\",\"isPartOf\":{\"@id\":\"https://docs.useqrkit.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"QR Codes\",\"item\":\"https://docs.useqrkit.com/api-reference/qr-codes/list-qr-codes\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Update QR Code\",\"item\":\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code#apireference\",\"headline\":\"Update QR Code\",\"name\":\"Update QR Code\",\"description\":\"Updates a QR code. Requires the qr:write scope. Dynamic codes: name, target.destination, target.utm, design, folder_id, tags, is_active. Changing the design re-renders the stored image on the code's own host (its custom domain, if it has one); changing the destination does not require reprinting — the short URL stays the same. domain_id cannot change after creation (422 for a different value; the current one is accepted): the host is printed in the QR. Dynamic wifi/email/sms/event codes are updated with their structured fields (target.ssid/password/encryption, target.email/subject/message/cc/bcc, target.phone/message, target.title/location/start/end) rather than target.destination; omitted fields keep their current value. Dynamic text codes take target.text. The link types (youtube … googleform) take target.destination like url. whatsapp takes target.phone and/or target.message (an omitted one keeps its value) or a WhatsApp link in target.destination; telegram takes target.destination (a @username, phone or t.me link). Either can also be re-pointed to any other http(s) page. location takes target.lat + target.lng and/or map_app, label, address (omitted ones keep their value); a plain target.destination turns it into an ordinary redirect. Static codes: only name, folder_id and design (the payload is baked into the printed code). Dynamic GS1 codes: destination (the default link), links, overrides, plus name, design, folder_id, tags and is_active — all at the TOP level, not under target. The identifier (primary_key, qualifiers, attributes, domain, domain_id, mode, gs1_key) is printed on packaging and immutable: naming any of them returns 422 with gs1_code: GS1_IDENTIFIER_IMMUTABLE rather than silently ignoring the field. A dynamic GS1 code therefore reports target.editable: false, with target.destination set to its Digital Link URI. A static GS1 code bakes its Digital Link into the image and, like every static code, cannot be re-pointed. Codes that hold a page rather than a link — link pages (including review pages created through this API), forms, menus, app-store and smart-URL codes, and uploaded file/audio/video codes — store a document or an uploaded file rather than a destination. They are reported with target.editable: false (and target.destination set to their public hosted page URL). Sending target for one of those is refused with 409 target_not_editable and nothing in the request is applied; edit them in the dashboard. Their other fields (name, folder_id, tags, design, is_active) update normally.\",\"url\":\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code\",\"mainEntityOfPage\":{\"@id\":\"https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code#webpage\"},\"dateModified\":\"2026-10-17T20:12:18.910Z\",\"publisher\":{\"@id\":\"https://docs.useqrkit.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.useqrkit.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"QRKit API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"QRKit API","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"group":"Account","pages":[{"title":"Retrieve Account","openapi":"GET /me","href":"/api-reference/account/retrieve"}]},{"group":"QR Codes","pages":[{"title":"Create QR Code","openapi":"POST /qr-codes","href":"/api-reference/qr-codes/create"},{"title":"List QR Codes","openapi":"GET /qr-codes","href":"/api-reference/qr-codes/list"},{"title":"Retrieve QR Code","openapi":"GET /qr-codes/{id}","href":"/api-reference/qr-codes/retrieve"},{"title":"Update QR Code","openapi":"PATCH /qr-codes/{id}","href":"/api-reference/qr-codes/update"},{"title":"Delete QR Code","openapi":"DELETE /qr-codes/{id}","href":"/api-reference/qr-codes/delete"},{"title":"Restore QR Code","openapi":"POST /qr-codes/{id}/restore","href":"/api-reference/qr-codes/restore"},{"title":"Download QR Image","openapi":"GET /qr-codes/{id}/download","href":"/api-reference/qr-codes/download"},{"title":"QR Code Analytics","openapi":"GET /qr-codes/{id}/analytics","href":"/api-reference/qr-codes/analytics"}]},{"group":"Batches","pages":[{"title":"Create Batch","openapi":"POST /batches","href":"/api-reference/batches/create"},{"title":"List Batches","openapi":"GET /batches","href":"/api-reference/batches/list"},{"title":"Get Batch","openapi":"GET /batches/{id}","href":"/api-reference/batches/retrieve"},{"title":"Download Batch","openapi":"GET /batches/{id}/download","href":"/api-reference/batches/download"}]},{"group":"Folders","pages":[{"title":"Create Folder","openapi":"POST /folders","href":"/api-reference/folders/create"},{"title":"List Folders","openapi":"GET /folders","href":"/api-reference/folders/list"},{"title":"Update Folder","openapi":"PATCH /folders/{id}","href":"/api-reference/folders/update"},{"title":"Delete Folder","openapi":"DELETE /folders/{id}","href":"/api-reference/folders/delete"}]},{"group":"Tokens","pages":[{"title":"Create API Key","openapi":"POST /tokens","href":"/api-reference/tokens/create"},{"title":"List API Keys","openapi":"GET /tokens","href":"/api-reference/tokens/list"},{"title":"Revoke API Key","openapi":"DELETE /tokens/{id}","href":"/api-reference/tokens/revoke"},{"title":"Rotate API Key","openapi":"POST /tokens/rotate","href":"/api-reference/tokens/rotate"}]},{"group":"Account","pages":[{"title":"Retrieve Account","deprecated":null,"version":null,"openapi":"/openapi.yaml get /me","href":"/api-reference/account/retrieve-account"}]},{"group":"QR Codes","pages":[{"title":"List QR Codes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /qr-codes","href":"/api-reference/qr-codes/list-qr-codes"},{"title":"Create QR Code","deprecated":null,"version":null,"openapi":"/openapi.yaml post /qr-codes","href":"/api-reference/qr-codes/create-qr-code"},{"title":"Retrieve QR Code","deprecated":null,"version":null,"openapi":"/openapi.yaml get /qr-codes/{id}","href":"/api-reference/qr-codes/retrieve-qr-code"},{"title":"Delete QR Code","description":"Moves the QR code to the Trash. It disappears from the dashboard's\ncode list and from `GET /v1/qr-codes` immediately, and a dynamic\ncode's redirect stops working. Nothing is erased: the code keeps its\nid, short URL, design and scan history, shows up in\n`GET /v1/qr-codes?status=trashed`, and can be brought back with\n`POST /v1/qr-codes/{id}/restore` (or from the dashboard's Trash).\nPermanent deletion is only possible from the dashboard. Emits\n`qr.deleted`. Requires the `qr:write` scope.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /qr-codes/{id}","href":"/api-reference/qr-codes/delete-qr-code"},{"title":"Update QR Code","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /qr-codes/{id}","href":"/api-reference/qr-codes/update-qr-code"},{"title":"Restore QR Code","description":"Restores a QR code from the Trash — or a dynamic code a plan\ndowngrade paused — exactly as it was: same id, short URL, design,\nfolder and scan history. A restored dynamic code is active again, so\nits redirect works for every copy already printed. No request body.\nRequires the `qr:write` scope. Emits `qr.restored` with the restored\ncode as `data`.\n\nFind restorable codes with `GET /v1/qr-codes?status=trashed` (or\n`status=paused`).\n\n**Plan limits.** A dynamic code takes one of the plan's QR code\nslots when restored, so the restore is refused with `422` and\n`reason: PLAN_LIMIT` (plus `limit`, `current_count` and `plan_id`)\nwhen the plan is full. A dynamic GS1 Digital Link code counts against\nthe plan's separate GS1 allowance instead (the error also carries\n`gs1_code: PLAN_LIMIT`), and needs a plan that includes the GS1\nresolver (`403`, `gs1_code: NOT_ENTITLED`). Its identifier needs no\ncheck: a code in the Trash keeps holding it, so nobody else can have\nregistered it meanwhile. Static codes have no limit. Free-plan API\nkeys manage static codes only, so restoring a dynamic code with one\nis `403`.\n\n**Concurrency.** Restores, creates and re-activations through the\nAPI, and restores and re-activations in the dashboard, are\nserialized per workspace, so parallel requests cannot go past the\nplan's limit — each one counts the slots the others already took.\n(A code created in the dashboard at the same moment is not part of\nthat serialization.)\n\n**Not in the Trash.** Two `409 conflict` answers, which a client\nmust tell apart by `reason`:\n- `NOT_IN_TRASH` — the code is **live** (`is_active: true`). There\n is nothing to restore; a client retrying a restore whose response\n it lost can treat this as success.\n- `DEACTIVATED` — the code was switched off (`is_active: false`) but\n never deleted. **Not** success: its redirect is still off.\n Re-activate it with `PATCH` and `is_active: true`.\n\nAn id that does not exist, or belongs to another workspace, is\n`404` — and so is `GET /v1/qr-codes/{id}` for a code in the Trash;\nfind those with `GET /v1/qr-codes?status=trashed`.\n\n**Removed custom domain.** A dynamic GS1 code whose custom domain\nhas been removed (the hostname is gone for good) cannot be restored:\n`409` with `reason: DOMAIN_RETIRED`.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /qr-codes/{id}/restore","href":"/api-reference/qr-codes/restore-qr-code"},{"title":"Download QR Image","deprecated":null,"version":null,"openapi":"/openapi.yaml get /qr-codes/{id}/download","href":"/api-reference/qr-codes/download-qr-image"},{"title":"GS1 Linkset","deprecated":null,"version":null,"openapi":"/openapi.yaml get /qr-codes/{id}/linkset","href":"/api-reference/qr-codes/gs1-linkset"},{"title":"QR Code Analytics","deprecated":null,"version":null,"openapi":"/openapi.yaml get /qr-codes/{id}/analytics","href":"/api-reference/qr-codes/qr-code-analytics"}]},{"group":"Batches","pages":[{"title":"List Batches","deprecated":null,"version":null,"openapi":"/openapi.yaml get /batches","href":"/api-reference/batches/list-batches"},{"title":"Create Batch","deprecated":null,"version":null,"openapi":"/openapi.yaml post /batches","href":"/api-reference/batches/create-batch"},{"title":"Get Batch","deprecated":null,"version":null,"openapi":"/openapi.yaml get /batches/{id}","href":"/api-reference/batches/get-batch"},{"title":"Download Batch as ZIP","deprecated":null,"version":null,"openapi":"/openapi.yaml get /batches/{id}/download","href":"/api-reference/batches/download-batch-as-zip"}]},{"group":"Folders","pages":[{"title":"List Folders","deprecated":null,"version":null,"openapi":"/openapi.yaml get /folders","href":"/api-reference/folders/list-folders"},{"title":"Create Folder","deprecated":null,"version":null,"openapi":"/openapi.yaml post /folders","href":"/api-reference/folders/create-folder"},{"title":"Delete Folder","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /folders/{id}","href":"/api-reference/folders/delete-folder"},{"title":"Update Folder","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /folders/{id}","href":"/api-reference/folders/update-folder"}]},{"group":"Tokens","pages":[{"title":"List API Keys","deprecated":null,"version":null,"openapi":"/openapi.yaml get /tokens","href":"/api-reference/tokens/list-api-keys"},{"title":"Create API Key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /tokens","href":"/api-reference/tokens/create-api-key"},{"title":"Revoke API Key","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /tokens/{id}","href":"/api-reference/tokens/revoke-api-key"},{"title":"Rotate API Key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /tokens/rotate","href":"/api-reference/tokens/rotate-api-key"}]},{"group":"Webhooks","pages":[{"title":"List Webhook Endpoints","deprecated":null,"version":null,"openapi":"/openapi.yaml get /webhooks","href":"/api-reference/webhooks/list-webhook-endpoints"},{"title":"Create Webhook Endpoint","deprecated":null,"version":null,"openapi":"/openapi.yaml post /webhooks","href":"/api-reference/webhooks/create-webhook-endpoint"},{"title":"Retrieve Webhook Endpoint","deprecated":null,"version":null,"openapi":"/openapi.yaml get /webhooks/{id}","href":"/api-reference/webhooks/retrieve-webhook-endpoint"},{"title":"Delete Webhook Endpoint","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /webhooks/{id}","href":"/api-reference/webhooks/delete-webhook-endpoint"},{"title":"Update Webhook Endpoint","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /webhooks/{id}","href":"/api-reference/webhooks/update-webhook-endpoint"},{"title":"Rotate Webhook Secret","deprecated":null,"version":null,"openapi":"/openapi.yaml post /webhooks/{id}/rotate-secret","href":"/api-reference/webhooks/rotate-webhook-secret"},{"title":"Send Test Webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml post /webhooks/{id}/test","href":"/api-reference/webhooks/send-test-webhook"},{"title":"List Webhook Deliveries","deprecated":null,"version":null,"openapi":"/openapi.yaml get /webhooks/{id}/deliveries","href":"/api-reference/webhooks/list-webhook-deliveries"}]},{"group":"Events","pages":[{"title":"List Events","deprecated":null,"version":null,"openapi":"/openapi.yaml get /events","href":"/api-reference/events/list-events"},{"title":"Retrieve Event","deprecated":null,"version":null,"openapi":"/openapi.yaml get /events/{id}","href":"/api-reference/events/retrieve-event"}]}]}]},"title":"Update QR Code - QRKit API","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-BRm_l__d.js","utils-f1l1Oc-G.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BlhqDhJO.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DHCB7rsC.js","snippetPresets-CYXLx6Hv.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-kQh739Uz.js","ApiExamples-B78P2dEq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C4YLPVAh.js","shallow-vlLnTDkQ.js","getApiPlaygroundDisplay-D_98hhvf.js","CodeSnippet-DtnZHGqq.js","CodeSnippets-CLFb8KJt.js","getPastedJson-Cq-zlbnU.js","icon-sN3t983t.js","MethodPill-P_YQ2s09.js","DuplicateIcon-BVzyNsGJ.js","createIcon-B3jqgqC6.js","DynamicMarkdown-Crwq6WG_.js","SectionHeading-C7pGS2Bb.js","axios-vUo_bRtp.js","Markdown-BuPH8yuW.js","clsx-CCOYKgaU.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BnkC_6oA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BM4S31-f.js"]}