curl -X PATCH "https://api.scanova.io/qr/Qa1b2c3d4e5f6g7h8/migrate-theme/" \
-H "Authorization: 401f7ac837da42b97f613d789819ff93537bee6a" \
-H "Content-Type: application/json" \
-d '{
"theme_id": 7,
"theme_overrides": {
"color": {
"accent": "#0b3d91"
}
}
}'
{
"id": 1042,
"qrid": "Qa1b2c3d4e5f6g7h8",
"name": "Summer Sale Landing",
"qr_type": "dy",
"qr_type_display": "Dynamic",
"category": {
"id": 3,
"name": "Website URL",
"slug": "url",
"allowed_qr_types": "dy",
"has_landing_page": false
},
"info": "{\"type\":\"url\",\"data\":{\"url\":\"https://example.com/summer-sale\"}}",
"pattern_info": null,
"svg_code": null,
"dynamic_url_object": {
"id": 501,
"url_hash": "a1b2c3d4",
"custom_domain": null,
"complete_url": "https://scnv.io/a1b2c3d4",
"qr_url": "https://scnv.io/a1b2c3d4",
"is_active": true,
"is_expired": false,
"visit_count": 0,
"web_tracking_site_id": null
},
"thumbnail": null,
"is_active": true,
"folder": null,
"version": 2,
"tags_list": [
"campaign-2026",
"print"
],
"is_password_protected": false,
"is_age_restricted": false,
"is_designer": false,
"high_accuracy_mode": false,
"activate_on": null,
"expire_on": null,
"expire_on_scan_count": null,
"minimum_age": null,
"is_page": false,
"has_qr": true,
"is_draft": false,
"draft_info": null,
"draft_saved_at": null,
"published_at": "2026-09-01T10:04:11Z",
"is_currently_draft": false,
"created": "2026-09-01T10:04:11Z",
"modified": "2026-09-01T10:04:11Z"
}{
"non_field_errors": [
"This QR code already uses the new theme schema."
]
}QR Codes
Migrate a legacy theme
PATCH /qr//migrate-theme/
PATCH
/
qr
/
{qrid}
/
migrate-theme
/
curl -X PATCH "https://api.scanova.io/qr/Qa1b2c3d4e5f6g7h8/migrate-theme/" \
-H "Authorization: 401f7ac837da42b97f613d789819ff93537bee6a" \
-H "Content-Type: application/json" \
-d '{
"theme_id": 7,
"theme_overrides": {
"color": {
"accent": "#0b3d91"
}
}
}'
{
"id": 1042,
"qrid": "Qa1b2c3d4e5f6g7h8",
"name": "Summer Sale Landing",
"qr_type": "dy",
"qr_type_display": "Dynamic",
"category": {
"id": 3,
"name": "Website URL",
"slug": "url",
"allowed_qr_types": "dy",
"has_landing_page": false
},
"info": "{\"type\":\"url\",\"data\":{\"url\":\"https://example.com/summer-sale\"}}",
"pattern_info": null,
"svg_code": null,
"dynamic_url_object": {
"id": 501,
"url_hash": "a1b2c3d4",
"custom_domain": null,
"complete_url": "https://scnv.io/a1b2c3d4",
"qr_url": "https://scnv.io/a1b2c3d4",
"is_active": true,
"is_expired": false,
"visit_count": 0,
"web_tracking_site_id": null
},
"thumbnail": null,
"is_active": true,
"folder": null,
"version": 2,
"tags_list": [
"campaign-2026",
"print"
],
"is_password_protected": false,
"is_age_restricted": false,
"is_designer": false,
"high_accuracy_mode": false,
"activate_on": null,
"expire_on": null,
"expire_on_scan_count": null,
"minimum_age": null,
"is_page": false,
"has_qr": true,
"is_draft": false,
"draft_info": null,
"draft_saved_at": null,
"published_at": "2026-09-01T10:04:11Z",
"is_currently_draft": false,
"created": "2026-09-01T10:04:11Z",
"modified": "2026-09-01T10:04:11Z"
}{
"non_field_errors": [
"This QR code already uses the new theme schema."
]
}Migrates a legacy QR Code onto the current theme schema.
PATCH https://api.scanova.io/qr/{qrid}/migrate-theme/
Authorization: 401f7ac837da42b97f613d789819ff93537bee6a
string
required
The QR Code’s
qrid.integer
Primary key of the theme to adopt. Nullable — omit or send
null to migrate without picking a named theme.object
Per-QR overrides layered on top of the theme. Schema-validated when non-empty.
curl -X PATCH "https://api.scanova.io/qr/Qa1b2c3d4e5f6g7h8/migrate-theme/" \
-H "Authorization: 401f7ac837da42b97f613d789819ff93537bee6a" \
-H "Content-Type: application/json" \
-d '{
"theme_id": 7,
"theme_overrides": {
"color": {
"accent": "#0b3d91"
}
}
}'
This endpoint only accepts legacy QR Codes — those whose Check
version is below 2. A QR Code already on the current schema is rejected:{
"non_field_errors": ["This QR code already uses the new theme schema."]
}
version on Retrieve a QR Code before calling, and treat this as a one-time migration rather than a way to change themes. For QR Codes already on the current schema, set the theme through the normal update path.Related
- Retrieve a QR Code — read
versionto see whether migration applies. - Update a QR Code — the normal path for theming a current-schema QR Code.
- Update a QR Code’s design — the design layer, separate from the theme.
- QR Manager overview — the quotas, role permissions, and Trash model shared by every endpoint in this module.
- Management API overview — the auth scheme and quota rules that apply to this endpoint.
Authorizations
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
The QR code's qrid — the opaque public identifier returned by the list endpoint, not the numeric id.
Response
QR code migrated onto the current theme schema.
Was this page helpful?