Create a QR design

Overview

Save a QR code design.

Use this to keep codes consistent across locations.

You'll need a name, a location (store_id) and the design type (template_type); the design options are optional.

Each design counts towards the location's plan allowance for QR codes. When the plan doesn't include QR codes or the allowance is used up, the call returns 402.

Returns the template with its id.

Prerequisites

  • A bearer token for the account. See Authentication.
  • A location id (store_id).

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

POST /api/v1/qr-codes/template/create

Authentication

Account token

  • store_id must be a location inside your own account tree; otherwise 422.
  • The design is saved under the account of the user behind the token.
🚧

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

FieldTypeRequiredDescription
namestringYesThe design's name, up to 255 characters. Must be unique for the location.
store_idintegerYesThe location the design is for. Must be inside your account tree.
template_typestringYesstandard, hangtag or custom.
design_htmlstringNoMarkup for the front of the design.
design_settingsobjectNoSettings for the front of the design, as an object or a JSON string (invalid JSON is saved as an empty list).
design_html_backstringNoMarkup for the back of the design.
design_settings_backobjectNoSettings for the back of the design, sent like design_settings.
qr_code_idintegerNoThe QR code the design is for (id in List QR codes). Must be one of your account's QR codes.

Request payload

{
  "name": "Standard A6 Template",
  "store_id": 3007,
  "template_type": "standard",
  "qr_code_id": 2963,
  "design_settings": {
    "title": "QR Code",
    "caption": "Scan the QR code to leave us a quick review.",
    "titleColor": "#438bc7"
  }
}

Response body

The payload is inside data. There is no status field. data.data holds the fields you sent, plus the ones below.

FieldTypeDescription
dataobjectThe new design.
data.namestringThe design's name.
data.store_idintegerThe location the design is for.
data.template_typestringstandard, hangtag or custom.
data.design_settingsobject or nullSettings for the front of the design.
data.qr_code_idinteger or nullThe QR code the design is for, or null.
data.company_idintegerThe account that owns the design.
data.updated_atstringWhen the design was last changed (ISO 8601).
data.created_atstringWhen the design was created (ISO 8601).
data.idintegerThe design's id. Use it as templateId.
data.unique_codestringThe design's encoded id.
messagestringQR code template created successfully

Response payload

{
  "data": {
    "data": {
      "name": "Standard A6 Template",
      "store_id": 3007,
      "template_type": "standard",
      "design_settings": {
        "title": "QR Code",
        "caption": "Scan the QR code to leave us a quick review.",
        "titleColor": "#438bc7"
      },
      "qr_code_id": 2963,
      "company_id": 5994,
      "updated_at": "2026-10-01T10:00:00.000000Z",
      "created_at": "2026-10-01T10:00:00.000000Z",
      "id": 3119,
      "unique_code": "r2mzqv"
    },
    "message": "QR code template created successfully"
  }
}

Examples

Success payload

See Response payload.

Error payload

402 QR code allowance used up

{
  "status": "error",
  "message": "Limit reached for 'QR Codes': 5 of 5 units consumed this period.",
  "feature": "review_qr_code",
  "remaining": 0,
  "hard_stop": true
}

402 QR codes not on the plan

{
  "status": "error",
  "message": "Feature 'QR Codes' is not enabled on this plan.",
  "feature": "review_qr_code",
  "remaining": 0,
  "hard_stop": true
}

422 Required fields missing

{
  "message": "Template name is required. (and 2 more errors)",
  "errors": {
    "name": [
      "Template name is required."
    ],
    "store_id": [
      "Store is required."
    ],
    "template_type": [
      "Template type is required."
    ]
  }
}

422 Name taken

{
  "message": "Template name already exists.",
  "errors": {
    "name": [
      "Template name already exists."
    ]
  }
}

422 Location outside your tree

{
  "message": "The selected store id does not belong to your company hierarchy.",
  "errors": {
    "store_id": [
      "The selected store id does not belong to your company hierarchy."
    ]
  }
}
StatusMeaning
201The design was created.
401The token is missing, expired or invalid.
402The location's plan doesn't include QR codes, or the allowance for this period is used up. The X-Feature, X-Feature-Remaining and X-Feature-Hard-Stop headers give the details.
422A required field is missing or invalid, the name is already used at the location, or store_id is outside your tree.
500Unexpected server error.

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/create" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"name": "Standard A6 Template", "store_id": 3007, "template_type": "standard", "qr_code_id": 2963, "design_settings": {"title": "QR Code", "caption": "Scan the QR code to leave us a quick review.", "titleColor": "#438bc7"}}'

Did this page help you?