List QR codes

Overview

Get an account's QR codes with scan counts.

Use this to manage codes or pick one to print.

You'll need an account token.

Returns one entry per code, newest first unless you sort, 15 to a page by default.

Prerequisites

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

GET /api/v1/qr-codes

Authentication

Account token

  • Lists only the codes of the account of the user behind the token.
  • store_id, when sent, must be a location inside your own account tree; otherwise 422.
🚧

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

ParameterInTypeRequiredDescription
store_idqueryintegerNoOnly this location's codes. Must be inside your account tree.
destination_typequerystringNoOnly codes with this destination: landing_page, review_site or custom_url.
exclude_destination_typequerystringNoLeave out codes with this destination.
start_datequerystringNoOnly codes created on or after this day (YYYY-MM-DD). Swapped with end_date when the two are reversed.
end_datequerystringNoOnly codes created on or before this day (YYYY-MM-DD).
search_fieldquerystringNoThe field to search with search_value: name, destination_type, landing_page_id, review_site_id, destination_url, created_at, updated_at, last_scanned_at, store_name, storeId, total_scans.
search_valuequerystringNoWhat to search for in search_field, up to 255 characters (matches part of the value). For total_scans: 5 (exactly), 5-10 (range), 5+ (at least) or 5- (at most).
searchquerystringNoSearch the code's name, up to 255 characters. Used only when search_field and search_value aren't sent.
sort_fieldquerystringNoThe field to sort by: id or any search_field value. Defaults to created_at.
sort_byquerystringNoSort direction: asc or desc. Defaults to desc.
per_pagequeryintegerNoCodes per page, 10 to 100 (below 10 is raised to 10; above 100 returns 422). Defaults to 15.
pagequeryintegerNoPage number. Defaults to 1.

Request body

None.

Request payload

None.

Response body

The payload is inside data: a page of results.

FieldTypeDescription
dataarray of objectsThe QR codes on this page.
data[].idintegerThe QR code's id. Use it as qrCodeId.
data[].namestringThe code's name.
data[].destination_typestringWhere a scan goes: landing_page (a landing page template), review_site (the location's landing page URL on a review site) or custom_url (any URL).
data[].store_idintegerThe location the code is for.
data[].landing_page_idinteger or nullThe landing page template, for landing_page.
data[].review_site_idinteger or nullThe review site, for review_site.
data[].destination_urlstring or nullThe URL a scan opens.
data[].customizationobject or nullHow the image looks: color (a hex colour such as #000000, a colour name, or [r, g, b]) and width (pixels, 64 to 2048; 300 when left out).
data[].last_scanned_atstring or nullWhen the code was last scanned (ISO 8601), or null.
data[].created_atstringWhen the code was created (ISO 8601).
data[].updated_atstringWhen the code was last changed (ISO 8601).
data[].qr_code_image_pathstringWhere the image is stored.
data[].total_scansintegerHow many times the code has been scanned.
data[].unique_codestringThe code's public id, used in the link the image encodes.
data[].qr_code_image_urlstring or nullURL of the QR code image (PNG).
data[].storeobject or nullThe location.
data[].store.idintegerThe location's id.
data[].store.namestringThe location's name.
data[].store.storeIdstringThe location's own reference (storeId).
data[].landing_pageobject or nullThe landing page template, or null.
data[].landing_page.idintegerThe template's id.
data[].landing_page.unique_codestringThe template's encoded id.
data[].review_siteobject or nullThe review site ({"id": …}), or null.
current_pageintegerThis page number.
first_page_urlstringLink to the first page.
frominteger or nullPosition of the first item on this page, or null when empty.
last_pageintegerThe last page number.
last_page_urlstringLink to the last page.
linksarray of objectsPage links, for building a pager.
links[].urlstring or nullThe page's link, or null.
links[].labelstringLink text.
links[].pageinteger or nullPage number, or null.
links[].activebooleanWhether this is the current page.
next_page_urlstring or nullLink to the next page, or null.
pathstringThe list URL without the query.
per_pageintegerItems per page.
prev_page_urlstring or nullLink to the previous page, or null.
tointeger or nullPosition of the last item on this page, or null when empty.
totalintegerItems in all pages.

Response payload

{
  "data": {
    "current_page": 1,
    "data": [
      {
        "id": 2963,
        "name": "Default QR Code",
        "destination_type": "landing_page",
        "store_id": 3007,
        "landing_page_id": 1,
        "review_site_id": null,
        "destination_url": "https://production.shoutaboutus.com/lp/1?store_id=3007",
        "customization": {
          "color": "#000000",
          "width": 240
        },
        "last_scanned_at": null,
        "created_at": "2026-09-23T10:43:44.000000Z",
        "updated_at": "2026-09-23T10:43:45.000000Z",
        "qr_code_image_path": "qr_codes/qr_2963_1790160225.png",
        "total_scans": 0,
        "unique_code": "g7qkum",
        "qr_code_image_url": "https://d2ny6zb7otrnhl.cloudfront.net/qr_codes/qr_2963_1790160225.png",
        "store": {
          "id": 3007,
          "name": "Acme Coffee",
          "storeId": "Sydney"
        },
        "landing_page": {
          "id": 1,
          "unique_code": "9ocy"
        },
        "review_site": null
      },
      {
        "id": 2964,
        "name": "Default QR Code",
        "destination_type": "landing_page",
        "store_id": 3008,
        "landing_page_id": 1,
        "review_site_id": null,
        "destination_url": "https://production.shoutaboutus.com/lp/1?store_id=3008",
        "customization": {
          "color": "#000000",
          "width": 240
        },
        "last_scanned_at": null,
        "created_at": "2026-09-23T11:28:44.000000Z",
        "updated_at": "2026-09-23T11:28:45.000000Z",
        "qr_code_image_path": "qr_codes/qr_2964_1790162925.png",
        "total_scans": 0,
        "unique_code": "o43ou5",
        "qr_code_image_url": "https://d2ny6zb7otrnhl.cloudfront.net/qr_codes/qr_2964_1790162925.png",
        "store": {
          "id": 3008,
          "name": "Acme Coffee - Circular Quay",
          "storeId": "Sydney"
        },
        "landing_page": {
          "id": 1,
          "unique_code": "9ocy"
        },
        "review_site": null
      }
    ],
    "first_page_url": "https://production-api.shoutaboutus.com/api/v1/qr-codes?page=1",
    "from": 1,
    "last_page": 1,
    "last_page_url": "https://production-api.shoutaboutus.com/api/v1/qr-codes?page=1",
    "links": [
      {
        "url": null,
        "label": "« Previous",
        "page": null,
        "active": false
      },
      {
        "url": "https://production-api.shoutaboutus.com/api/v1/qr-codes?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",
    "per_page": 15,
    "prev_page_url": null,
    "to": 2,
    "total": 2
  }
}

Examples

Success payload

See Response payload (without store_id, so both locations are listed).

No codes 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?page=1",
    "from": null,
    "last_page": 1,
    "last_page_url": "https://production-api.shoutaboutus.com/api/v1/qr-codes?page=1",
    "links": [
      {
        "url": null,
        "label": "« Previous",
        "page": null,
        "active": false
      },
      {
        "url": "https://production-api.shoutaboutus.com/api/v1/qr-codes?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",
    "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 start date field must match the format Y-m-d. (and 1 more error)",
  "errors": {
    "start_date": [
      "The start date field must match the format Y-m-d."
    ],
    "sort_field": [
      "The selected sort field is invalid."
    ]
  }
}

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."
    ]
  }
}
StatusMeaning
200A page of QR codes, or an empty page.
401The token is missing, expired or invalid.
422store_id is outside your tree, a filter or sort value is invalid, or per_page is above 100.
500Unexpected server error.

Example request

curl --request GET \
  --url "https://production-api.shoutaboutus.com/api/v1/qr-codes?store_id=3007&per_page=15" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?