Edit a QR design
Overview
Change a saved design.
Use this to update branding across codes that use it.
You'll need the template id (id), its name and its type. The other fields you send replace the saved ones; fields you leave out keep their values.
The location's plan must include review solicitation (email or text); otherwise 400.
Returns the updated design.
Prerequisites
- A bearer token for the account. See Authentication.
- The design's id (
id), from List QR designs.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
POST /api/v1/qr-codes/template/update
Authentication
Account token
- The design must have been created under your token's account; otherwise
404.
QR codes belong to the account that created them, and every QR endpoint matches on that account exactly; it doesn't walk the partner tree. A Partner token sees nothing, even for a location inside the partner's own tree: list endpoints return an empty result, and single-record endpoints return
404 QR code not found. The 404 means "not visible to this token", not "this QR code doesn't exist". Use an Account token for every endpoint in this section.
Rate limit
This endpoint has no rate limit.
Request parameters
None.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | The design to edit (id in List QR designs). Without it the call returns 404. |
name | string | Yes | The design's name, up to 255 characters. |
template_type | string | Yes | standard, hangtag or custom. |
design_html | string | No | Markup for the front of the design. |
design_settings | object | No | Settings for the front of the design, as an object or a JSON string (invalid JSON is saved as an empty list). |
design_html_back | string | No | Markup for the back of the design. |
design_settings_back | object | No | Settings for the back of the design, sent like design_settings. |
qr_code_id | integer | No | The QR code the design is for (id in List QR codes). Must be one of your account's QR codes. |
Request payload
{
"id": 2964,
"name": "Updated Standard A6",
"template_type": "standard",
"design_html": "<p>Scan to leave us a review</p>",
"design_settings": {
"title": "QR Code",
"titleColor": "#222222"
},
"design_html_back": "<p>Thank you</p>",
"design_settings_back": {
"backSameAsFront": false
}
}Response body
The payload is inside data.
| Field | Type | Description |
|---|---|---|
status | string | success. |
data | object | The updated design. |
data.id | integer | The design's id. Use it as templateId. |
data.store_id | integer | The location the design is for. |
data.company_id | integer | The account that owns the design. |
data.name | string | The design's name. |
data.description | string or null | The design's description, or null. |
data.qr_code_id | integer or null | The QR code the design is for, or null. |
data.template_type | string | standard, hangtag or custom. |
data.design_settings | object or null | Settings for the front of the design. |
data.design_html | string or null | Markup for the front of the design. |
data.design_settings_back | object or null | Settings for the back of the design. |
data.design_html_back | string or null | Markup for the back of the design. |
data.metadata | object or null | Extra data, or null. |
data.created_at | string | When the design was created (ISO 8601). |
data.updated_at | string | When the design was last changed (ISO 8601). |
data.deleted_at | string or null | Always null here. |
data.unique_code | string | The design's encoded id. |
data.store | object or null | The location. |
data.store.id | integer | The location's id. |
data.store.name | string | The location's name. |
message | string | QR code template updated successfully |
Response payload
{
"data": {
"status": "success",
"data": {
"id": 2964,
"store_id": 3008,
"company_id": 5994,
"name": "Updated Standard A6",
"description": null,
"qr_code_id": 2964,
"template_type": "standard",
"design_settings": {
"title": "QR Code",
"titleColor": "#222222"
},
"design_html": "<p>Scan to leave us a review</p>",
"design_settings_back": {
"backSameAsFront": false
},
"design_html_back": "<p>Thank you</p>",
"metadata": null,
"created_at": "2026-09-23T11:28:45.000000Z",
"updated_at": "2026-10-01T10:15:00.000000Z",
"deleted_at": null,
"unique_code": "1nwluo",
"store": {
"id": 3008,
"name": "Acme Coffee - Circular Quay"
}
},
"message": "QR code template updated successfully"
}
}Examples
Success payload
See Response payload.
Error payload
400 Review solicitation not on the plan
{
"message": "Review Solicitation is not enabled for this store. Please enable it in your plan or contact support for assistance.",
"status": "error",
"errors": []
}404 Not found
{
"message": "QR code template not found",
"status": "error",
"errors": []
}422 Invalid fields
{
"message": "QR code template does not exist. (and 2 more errors)",
"errors": {
"id": [
"QR code template does not exist."
],
"name": [
"Template name is required."
],
"template_type": [
"Template type is required."
]
}
}| Status | Meaning |
|---|---|
200 | The design was updated. |
400 | The location's plan doesn't include review solicitation. |
401 | The token is missing, expired or invalid. |
404 | QR code template not found: id is missing, or the design wasn't created under your token's account. |
422 | name or template_type is missing or invalid, or no design has this id. |
500 | Unexpected server error. |
Example request
curl --request POST \
--url "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/update" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"id": 2964, "name": "Updated Standard A6", "template_type": "standard", "design_html": "<p>Scan to leave us a review</p>", "design_settings": {"title": "QR Code", "titleColor": "#222222"}, "design_html_back": "<p>Thank you</p>", "design_settings_back": {"backSameAsFront": false}}'Updated 17 days ago
