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
- A bearer token for the account. See Authentication.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://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; otherwise422.
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
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
store_id | query | integer | No | Only this location's designs. Must be inside your account tree. |
template_type | query | string | No | Only designs of this type: standard, hangtag or custom. |
start_date | query | string | No | Only designs created on or after this day (YYYY-MM-DD). Swapped with end_date when the two are reversed. |
end_date | query | string | No | Only designs created on or before this day (YYYY-MM-DD). |
search_field | query | string | No | The field to search with search_value: name, description, template_type, created_at, updated_at, store_name, storeId, total_scans. |
search_value | query | string | No | What 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). |
search | query | string | No | Search the design's name, up to 255 characters. Used only when search_field and search_value aren't sent. |
sort_field | query | string | No | The field to sort by: id or any search_field value. Defaults to created_at. |
sort_by | query | string | No | Sort direction: asc or desc. Defaults to desc. |
per_page | query | integer | No | Designs per page, 10 to 100 (below 10 is raised to 10; above 100 returns 422). Defaults to 15. |
page | query | integer | No | Page number. Defaults to 1. |
Request body
None.
Request payload
None.
Response body
The payload is inside data: a page of results.
| Field | Type | Description |
|---|---|---|
data | array of objects | The designs on this page. |
data[].id | integer | The design's id. Use it as templateId. |
data[].name | string | The design's name. |
data[].description | string or null | The design's description, or null. |
data[].template_type | string | standard, hangtag or custom. |
data[].store_id | integer | The location the design is for. |
data[].created_at | string | When the design was created (ISO 8601). |
data[].updated_at | string | When the design was last changed (ISO 8601). |
data[].total_scans | integer | How many times codes with this design have been scanned. |
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. |
data[].store.storeId | string | The location's own reference (storeId). |
current_page | integer | This page number. |
first_page_url | string | Link to the first page. |
from | integer or null | Position of the first item on this page, or null when empty. |
last_page | integer | The last page number. |
last_page_url | string | Link to the last page. |
links | array of objects | Page links, for building a pager. |
links[].url | string or null | The page's link, or null. |
links[].label | string | Link text. |
links[].page | integer or null | Page number, or null. |
links[].active | boolean | Whether this is the current page. |
next_page_url | string or null | Link to the next page, or null. |
path | string | The list URL without the query. |
per_page | integer | Items per page. |
prev_page_url | string or null | Link to the previous page, or null. |
to | integer or null | Position of the last item on this page, or null when empty. |
total | integer | Items 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": "« 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 »",
"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": "« 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 »",
"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."
]
}
}| Status | Meaning |
|---|---|
200 | A page of designs, or an empty page. |
401 | The token is missing, expired or invalid. |
422 | store_id is outside your tree, a filter or sort value is invalid, or per_page is above 100. |
500 | Unexpected 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'Updated 17 days ago
