Skip to main content
A QR Group is returned as a JSON object with object: "qr_group". Status and destination are nullable because they’re inheritable — when set, child codes that don’t override them inherit. See the inheritance model.

Example

{
  "object": "qr_group",
  "id": "b2c3d4e5-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
  "name": "Fall 2024 tabletop run",
  "description": "1000 table cards, all Brunswick venues",
  "status": "active",
  "destination": {
    "type": "page",
    "chatbot": null,
    "page": "a1c2e4f6-8b0d-4e2a-9c1b-3d5e7f9a2c4e",
    "knowledge_base": null,
    "url": null
  },
  "created_at": "2024-09-12T01:14:33Z",
  "updated_at": "2026-04-30T22:08:14Z"
}

Identifiers

object
string
required
Always "qr_group".
id
string (uuid)
required
Stable UUID. The value child codes carry in their group_id.
name
string
required
Operator-facing name. Required on POST. Free-form, not unique.
description
string | null
Free-form description. Operator-facing.

Status

status
string | null
required
One of unconfigured, active, inactive, archived, or null.When non-null, every child code that doesn’t override this inherits the value at scan time. When null, each child uses its own status.
ValueEffect on inheriting children
nullNo inheritance — child’s own status applies.
unconfiguredChildren show “not configured” until they’re set up.
activeChildren resolve and redirect.
inactiveChildren show “paused”.
archivedChildren soft-deleted from listings.

Destination

destination
object
required
Inheritable destination. When destination.type is non-null, child codes that don’t set their own destination inherit this one at scan time. When null, each child uses its own destination.Exactly one of chatbot, page, knowledge_base, or url is non-null when type is set.

Timestamps

created_at
string (datetime)
required
When the group was created. ISO 8601.
updated_at
string (datetime)
required
Last mutation. ISO 8601.

Listing the group’s children

QR Groups don’t expose a children[] array on the group object. To list child codes, query the QR Codes endpoint and filter by group_id:
GET /qr-codes?group_id=b2c3d4e5-6f7a-4b8c-9d0e-1f2a3b4c5d6e
This keeps the group response light and lets you paginate children independently.

Delete behaviour

DELETE /qr-groups/{id} returns 204 No Content. The group row is removed and every child has its group_id set to null (ON DELETE SET NULL at the database). Child codes are not deleted.
Children that were inheriting status or destination become unconfigured the moment the group is deleted. Re-group or set explicit values on each child before deleting if you can’t tolerate a gap.