List QR designs

Overview

Get the account's saved designs.

Use this to pick one when creating a code.

You'll need an account token.

Returns one entry per design, newest first unless you sort, 15 to a page by default.

Prerequisites

Base URL

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

Endpoint

GET /api/v1/qr-codes/template/list

Authentication

Account token

  • Lists only the designs of the account of the user behind the token.
  • store_id, when sent, must be a location inside your own account tree; otherwise 422.
🚧

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

ParameterInTypeRequiredDescription
store_idqueryintegerNoOnly this location's designs. Must be inside your account tree.
template_typequerystringNoOnly designs of this type: standard, hangtag or custom.
start_datequerystringNoOnly designs created on or after this day (YYYY-MM-DD). Swapped with end_date when the two are reversed.
end_datequerystringNoOnly designs created on or before this day (YYYY-MM-DD).
search_fieldquerystringNoThe field to search with search_value: name, description, template_type, created_at, updated_at, store_name, storeId, total_scans.
search_valuequerystringNoWhat to search for in search_field (matches part of the value); < and > are rejected. For total_scans: 5 (exactly), 5-10 (range), 5+ (at least) or 5- (at most).
searchquerystringNoSearch the design's name, up to 255 characters. Used only when search_field and search_value aren't sent.
sort_fieldquerystringNoThe field to sort by: id or any search_field value. Defaults to created_at.
sort_byquerystringNoSort direction: asc or desc. Defaults to desc.
per_pagequeryintegerNoDesigns per page, 10 to 100 (below 10 is raised to 10; above 100 returns 422). Defaults to 15.
pagequeryintegerNoPage number. Defaults to 1.

Request body

None.

Request payload

None.

Response body

The payload is inside data: a page of results.

FieldTypeDescription
dataarray of objectsThe designs on this page.
data[].idintegerThe design's id. Use it as templateId.
data[].namestringThe design's name.
data[].descriptionstring or nullThe design's description, or null.
data[].template_typestringstandard, hangtag or custom.
data[].store_idintegerThe location the design is for.
data[].created_atstringWhen the design was created (ISO 8601).
data[].updated_atstringWhen the design was last changed (ISO 8601).
data[].total_scansintegerHow many times codes with this design have been scanned.
data[].unique_codestringThe design's encoded id.
data[].storeobject or nullThe location.
data[].store.idintegerThe location's id.
data[].store.namestringThe location's name.
data[].store.storeIdstringThe location's own reference (storeId).
current_pageintegerThis page number.
first_page_urlstringLink to the first page.
frominteger or nullPosition of the first item on this page, or null when empty.
last_pageintegerThe last page number.
last_page_urlstringLink to the last page.
linksarray of objectsPage links, for building a pager.
links[].urlstring or nullThe page's link, or null.
links[].labelstringLink text.
links[].pageinteger or nullPage number, or null.
links[].activebooleanWhether this is the current page.
next_page_urlstring or nullLink to the next page, or null.
pathstringThe list URL without the query.
per_pageintegerItems per page.
prev_page_urlstring or nullLink to the previous page, or null.
tointeger or nullPosition of the last item on this page, or null when empty.
totalintegerItems in all pages.

Response payload

{
  "data": {
    "current_page": 1,
    "data": [
      {
        "id": 2963,
        "name": "Default QR Code Template",
        "description": null,
        "template_type": "standard",
        "store_id": 3007,
        "created_at": "2026-09-23T10:43:45.000000Z",
        "updated_at": "2026-09-23T10:43:45.000000Z",
        "total_scans": 0,
        "unique_code": "n1mraw",
        "store": {
          "id": 3007,
          "name": "Acme Coffee",
          "storeId": "Sydney"
        }
      },
      {
        "id": 2964,
        "name": "Default QR Code Template",
        "description": null,
        "template_type": "standard",
        "store_id": 3008,
        "created_at": "2026-09-23T11:28:45.000000Z",
        "updated_at": "2026-09-23T11:28:45.000000Z",
        "total_scans": 0,
        "unique_code": "1nwluo",
        "store": {
          "id": 3008,
          "name": "Acme Coffee - Circular Quay",
          "storeId": "Sydney"
        }
      }
    ],
    "first_page_url": "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list?page=1",
    "links": [
      {
        "url": null,
        "label": "&laquo; Previous",
        "page": null,
        "active": false
      },
      {
        "url": "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list?page=1",
        "label": "1",
        "page": 1,
        "active": true
      },
      {
        "url": null,
        "label": "Next &raquo;",
        "page": null,
        "active": false
      }
    ],
    "next_page_url": null,
    "path": "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list",
    "per_page": 15,
    "prev_page_url": null,
    "to": 2,
    "total": 2
  }
}

Examples

Success payload

See Response payload.

No designs match, or the token is a Partner token:

{
  "data": {
    "current_page": 1,
    "data": [],
    "first_page_url": "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list?page=1",
    "from": null,
    "last_page": 1,
    "last_page_url": "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list?page=1",
    "links": [
      {
        "url": null,
        "label": "&laquo; Previous",
        "page": null,
        "active": false
      },
      {
        "url": "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list?page=1",
        "label": "1",
        "page": 1,
        "active": true
      },
      {
        "url": null,
        "label": "Next &raquo;",
        "page": null,
        "active": false
      }
    ],
    "next_page_url": null,
    "path": "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list",
    "per_page": 15,
    "prev_page_url": null,
    "to": null,
    "total": 0
  }
}

Error payload

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."
    ]
  }
}

422 Invalid filter

{
  "message": "The selected template type is invalid. (and 1 more error)",
  "errors": {
    "template_type": [
      "The selected template type is invalid."
    ],
    "search_value": [
      "Search_value field cannot contain < or >, or invalid characters"
    ]
  }
}

422 per_page above 100

{
  "message": "The per page field must not be greater than 100.",
  "errors": {
    "per_page": [
      "The per page field must not be greater than 100."
    ]
  }
}
StatusMeaning
200A page of designs, or an empty page.
401The token is missing, expired or invalid.
422store_id is outside your tree, a filter or sort value is invalid, or per_page is above 100.
500Unexpected server error.

Example request

curl --request GET \
  --url "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list?per_page=15" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?