Scans by QR code
Overview
Get how many QR codes the account has, by destination type.
Use this to see how your codes are set up.
You'll need an account token. A period is optional: start_date and end_date filter on the day each code was created.
Returns counts of QR codes (not scans): the total, a count per destination type, and how many were created in the last 30 days. For scans, see Scan history for a code.
Prerequisites
- A bearer token. See Authentication.
- Optional: a location (
store_id) and a created-date window (start_date,end_date), bothY-m-d.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
GET /api/v1/qr-codes/stats
Authentication
Account token
- Only the caller's own company's records are counted.
store_idmust be inside your own account tree; otherwise422.
QR codes belong to the account company that created them, and every QR endpoint matches on that company exactly; it does not walk the partner hierarchy. A Partner token sees nothing, even for a location inside the partner's own tree: list and stats endpoints return an empty result, and single-record endpoints return
404. The404means "not visible to this token", not "this QR code does not exist". Use an account token for every endpoint in this section.
Rate limit
120 requests per minute, counted per user (the token’s user). See Rate limits.
Request parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
store_id | query | integer | No | Only this location's records. Must exist and be inside your account tree. |
start_date | query | string | No | Count only records created on or after this day, Y-m-d. If it's after end_date, the two are swapped. |
end_date | query | string | No | Count only records created on or before this day, Y-m-d. |
Request body
None.
Request payload
None.
Response body
The payload is inside data.
| Field | Type | Description |
|---|---|---|
status | string | success. |
data | object | The counts, for the filters you sent. |
data.total_qr_codes | integer | Records matching the filters. |
data.by_destination_type | object | QR codes per destination type (landing_page, review_site, custom_url). Only types that have codes appear; an empty array [] when there are none. |
data.recently_created | integer | Of those, the records created in the last 30 days. |
message | string | QR code statistics retrieved successfully. |
Response payload
{
"data": {
"status": "success",
"data": {
"total_qr_codes": 1,
"by_destination_type": {
"landing_page": 1
},
"recently_created": 1
},
"message": "QR code statistics retrieved successfully"
}
}Examples
Success payload
See Response payload.
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 Date not in Y-m-d
{
"message": "The start date field must match the format Y-m-d.",
"errors": {
"start_date": [
"The start date field must match the format Y-m-d."
]
}
}429 Too many requests
{
"message": "Too Many Attempts."
}| Status | Meaning |
|---|---|
200 | The counts. |
401 | The token is missing, expired or invalid. |
422 | store_id doesn't exist or is outside your tree, or a date isn't Y-m-d. |
429 | More than 120 requests in a minute from this user. |
500 | Unexpected server error. |
Example request
curl --request GET \
--url "https://production-api.shoutaboutus.com/api/v1/qr-codes/stats?store_id=3007&start_date=2026-01-01&end_date=2026-09-30" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 17 days ago
