Skip to main content
POST
Moves one or more QR Codes into a folder — either an explicit list of QR Codes, or every QR Code matching a filter.
Requires the account’s FOLDER_MANAGEMENT quota and the FOLDER_CAN_CREATE_AND_MANAGE permission. See the Management API overview for authentication details.
integer
required
Target folder ID.
array
required
Either a list of qrid strings, or the single-element sentinel ["all"] to move every QR Code matching filter/search below. Sending anything other than an array returns 400 with {"error": "qr_code_ids must be a list"}. An empty list is a no-op: 200 with moved_count: 0.
integer | string
Only meaningful alongside qr_code_ids: ["all"]. A folder ID restricts the source to QR Codes currently in that folder; the literal string "uncategorized" restricts it to QR Codes with no folder at all.
Omitting from entirely is not the same as "uncategorized" — it means “no source restriction, consider every QR Code regardless of its current folder.” Confusing the two is an easy mistake if you’re building a “move all” UI around the account’s full QR list.
object
Only honored alongside qr_code_ids: ["all"]. Accepts the same filter keys as List QR Codes (category, tags, type, status, qrid, users, no_user, created_from, created_till, scan_type, scan_count1, scan_count2). A folder key here is ignored even if sent — use from instead to scope by source folder.
Only honored alongside qr_code_ids: ["all"]{"search_value": "..."}, matched the same way the main QR-code search does.
Only QR Codes you own are eligible, and a soft-deleted (trashed) QR Code is always excluded — passing a trashed qrid is silently a no-op. If the target folder’s folder_type is page, only page-builder QR Codes are moved (and vice versa for qr folders); an ["all"] move against the wrong folder_type silently skips the ineligible QR Codes rather than erroring. QR Codes already in the target folder don’t count toward moved_count.
404 if the target folder or from (when a real folder ID) isn’t owned by this account.

Authorizations

Authorization
string
header
required

Send your Management API key as the raw value of the Authorization header — no "Bearer " or "Token " prefix, and no other characters. Example: Authorization: 401f7ac837da42b97f613d789819ff93537bee6a. A header containing more than one space-separated part is rejected outright. Requests also require the request's Host header to be the management API host (e.g. api.scanova.io) — the same key sent to the regular API host will not authenticate.

Path Parameters

id
integer
required

Response

QR codes moved.