List QR codes
Overview
Get a paginated list of QR codes scoped to the authenticated account-user's company, with each row's total_scans computed from scan history. Supports filtering by store, destination type, date range, free-text/field search, and sorting.
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
Authentication
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Who can call it: Account tokens.
-
Authentication. Rows are hard-scoped to the caller's own company (the account company).
-
The optional
store_idfilter must also sit inside your own account tree.
Rate limit
- No rate limit.
Query parameters
- Query:
store_id(integer, optional) — must Must be an existing location and belong to the auth company hierarchy. - Query:
destination_type(string, optional) — one oflanding_page,review_site,custom_url. - Query:
exclude_destination_type(string, optional) — one oflanding_page,review_site,custom_url. - Query:
start_date(stringY-m-d, optional) — filterscreated_atfrom this day. - Query:
end_date(stringY-m-d, optional) — filterscreated_atto this day. - Query:
search_field(string, optional) — one ofname,destination_type,landing_page_id,review_site_id,destination_url,created_at,updated_at,last_scanned_at,store_name,storeId,total_scans. - Query:
search_value(string, optional, max 255) — paired withsearch_field. Fortotal_scansaccepts exact5, range5-10, gte5+, or lte5-. - Query:
search(string, optional, max 255) — fallback namelikesearch (used only whensearch_field/search_valueabsent). - Query:
sort_field(string, optional) — same enum assearch_field, plusid. - Query:
sort_by(string, optional) —asc/ASC/desc/DESC(defaultsDESC). - Query:
per_page(integer, optional, 10–100, default 15; values below 10 are raised to 10).
Response
data.current_page(int)data.data[](array of QrCode rows) — selected columns:id,name,destination_type,store_id,landing_page_id,review_site_id,destination_url,customization,last_scanned_at,created_at,updated_at,qr_code_image_path, plus computedtotal_scans(int) and the QrCode's appendedqr_code_image_url. Also returnsstore:id,name,storeId,landingPage:id,reviewSite:id.data.per_page(int),data.total(int),data.last_page(int), and the rest of the standard paginator keys.
200 Success · 200
200{
"data": {
"current_page": 1,
"data": [
{
"id": 123,
"name": "Clinic front desk",
"destination_type": "landing_page",
"store_id": 8748,
"landing_page_id": 1,
"review_site_id": null,
"destination_url": "https://example.com/lp/1?store_id=8748",
"customization": null,
"last_scanned_at": "2026-06-15T10:30:00.000000Z",
"created_at": "2026-06-01T09:00:00.000000Z",
"updated_at": "2026-06-15T10:30:00.000000Z",
"qr_code_image_path": "qr-codes/abc.png",
"unique_code": "a1B2c3d4",
"qr_code_image_url": "https://s3.example.com/qr-codes/abc.png",
"total_scans": 42
}
],
"per_page": 15,
"total": 120,
"last_page": 8
}
}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" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 10 days ago
Did this page help you?
