List QR templates
Overview
Get a paginated list of QR code templates scoped to the authenticated user's company, with filtering (store, type, date range), full-text search, and sorting. Each row is decorated with a total_scans count.
Prerequisites
- A bearer token. Callable with Account tokens.
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
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Who can call it: Account tokens.
-
Authentication. Templates are hard-scoped to the auth user's own company (no partner-tree walk).
-
The optional
store_idfilter must also sit inside your own account tree. It must resolve into the auth company's hierarchy.
Rate limit
- No rate limit.
Query parameters
- Query:
store_id(integer, optional) — must be an existing location and belong to the auth company (an ownership check). - Query:
template_type(string, optional) — one ofstandard,hangtag,custom. - Query:
start_date(stringY-m-d, optional) — the earliestcreated_atto include; swapped withend_datewhen the two are reversed. - Query:
end_date(stringY-m-d, optional) — the latestcreated_atto include. - Query:
search_field(string, optional) — one ofname,description,template_type,created_at,updated_at,store_name,storeId,total_scans. - Query:
search_value(string, optional) — LIKE value; fortotal_scanssupports exact5, range5-10, gte5+, lte5-. Rejects angle brackets (NameNoAngleBrackets). - Query:
search(string, optional, max 255) — fallbacknameLIKE search, used only whensearch_field/search_valueabsent. - Query:
sort_field(string, optional) — same allowed list assearch_field(plusid). - Query:
sort_by(string, optional) —asc/ASC/desc/DESC; defaults toDESC. Default sort when you omit it iscreated_at DESC. - Query:
per_page(integer, optional, 10–100, default 15; values below 10 are raised to 10).
Response
data.current_page(integer)data.data[](array) — template rows, each selectingid,name,description,template_type,store_id,created_at,updated_at, plus includedstore(id,name,storeId) and an injectedtotal_scans(integer, non-deleted scan count).data.per_page(integer)data.total(integer)last_page,from,to,links, etc. (standard paginator fields)
200 Success · 200
200{
"data": {
"current_page": 1,
"data": [
{
"id": 10,
"name": "Standard A6",
"description": "Front counter card",
"template_type": "standard",
"store_id": 8748,
"unique_code": "t9X8y7z6",
"created_at": "2026-06-15T10:30:00.000000Z",
"updated_at": "2026-06-15T10:30:00.000000Z",
"store": { "id": 8748, "name": "Downtown Branch", "storeId": "ST-8748" },
"total_scans": 7
}
],
"per_page": 15,
"total": 50,
"last_page": 4
}
}Errors
| Status | Meaning |
|---|---|
401 | The bearer token is missing, expired or invalid |
422 | The request failed validation — the response names the fields |
500 | Unexpected server error |
Example request
curl --request GET \
--url "https://production-api.shoutaboutus.com/api/v1/qr-codes/template/list" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 10 days ago
Did this page help you?
