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), both Y-m-d.

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://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_id must be inside your own account tree; otherwise 422.
circle-info

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. The 404 means "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

ParameterInTypeRequiredDescription
store_idqueryintegerNoOnly this location's records. Must exist and be inside your account tree.
start_datequerystringNoCount only records created on or after this day, Y-m-d. If it's after end_date, the two are swapped.
end_datequerystringNoCount only records created on or before this day, Y-m-d.

Request body

None.

Request payload

None.

Response body

The payload is inside data.

FieldTypeDescription
statusstringsuccess.
dataobjectThe counts, for the filters you sent.
data.total_qr_codesintegerRecords matching the filters.
data.by_destination_typeobjectQR 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_createdintegerOf those, the records created in the last 30 days.
messagestringQR 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."
}
StatusMeaning
200The counts.
401The token is missing, expired or invalid.
422store_id doesn't exist or is outside your tree, or a date isn't Y-m-d.
429More than 120 requests in a minute from this user.
500Unexpected 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'

Did this page help you?