Create QR code
Overview
Create a QR code for the authenticated account. Requires the store's active plan to have the review-solicitation feature enabled (review_solicitation_email or review_solicitation_sms, enabled = 1), else 400. Generates and stores the QR image on save. Optionally fan-out the same QR to every sibling store that also has the feature (generate_for_sibling_stores). Writes a QR_CODE_CREATED audit event.
Prerequisites
- A bearer token in the
Authorizationheader.
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
POST /api/v1/qr-codes
Authentication
-
Requires a bearer token in the
Authorization: Bearer <bearer-token>header. -
Bearer — account (account) role.
store_idmust sit inside your own account tree; the QR records the caller'scompany_id.
Rate limit
- No rate limit.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Required | Max 255. Unique per store_id. |
store_id | integer | Required | Must be an existing location + must belong to the auth company. |
destination_type | string | Required | landing_page, review_site or custom_url. |
landing_page_id | integer | Optional | Required when destination_type = landing_page; Must be an existing landing-page template. |
review_site_id | integer | Optional | Required when destination_type = review_site; Must be an existing review site. |
destination_url | string | Optional | Required when destination_type = custom_url. |
customization | object | Optional | QR styling payload. |
generate_for_sibling_stores | boolean | Optional | Also create the QR for sibling stores whose plan carries the solicitation feature (checked by feature name; the enabled flag is not re-checked per sibling). |
{
"name": "Lobby",
"store_id": 123,
"destination_type": "landing_page",
"landing_page_id": 1
}How it works
- 201 (
createdResponse). Body is double-nested:{ "data": { "data": {.QrCode }, "message": "QR code created successfully" } }. The model appendsunique_code(hashid) andqr_code_image_url. - 400 solicitation feature not enabled · 422 validation.
Response
201 Created · 201
201{
"data": {
"data": {
"id": 124,
"name": "Lobby",
"company_id": 456,
"store_id": 26,
"qr_code_image_path": "uploads/qr/124.png",
"destination_type": "landing_page",
"landing_page_id": 1,
"review_site_id": null,
"destination_url": "https://development.shoutaboutus.com/lp/1?store_id=26",
"last_scanned_at": null,
"customization": null,
"created_at": "2026-07-09T10:00:00.000000Z",
"updated_at": "2026-07-09T10:00:00.000000Z",
"unique_code": "a1B2c3d4",
"qr_code_image_url": "https://s3.amazonaws.com/bucket/uploads/qr/124.png",
"company": {
"id": 456,
"name": "Brand 1"
},
"store": {
"id": 26,
"name": "Demo Store"
},
"landing_page": {
"id": 1
},
"review_site": null
},
"message": "QR code created successfully"
}
}400 Bad Request · 400
400{
"message": "Review Solicitation is not enabled for this store. Please enable it in your plan or contact support for assistance.",
"status": "error",
"errors": {}
}422 Unprocessable Entity · 422
422{
"message": "QR code name is required.",
"errors": {
"name": [
"QR code name is required."
]
}
}Errors
| Status | Meaning |
|---|---|
400 | Bad Request |
401 | The bearer token is missing, expired or invalid |
422 | Unprocessable Entity |
500 | Unexpected server error |
Example request
curl --request POST \
--url "https://production-api.shoutaboutus.com/api/v1/qr-codes" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '{"name": "Lobby", "store_id": 123, "destination_type": "landing_page", "landing_page_id": 1}'Updated 18 days ago
Did this page help you?
