---
title: "Scanning questions"
description: "Create and update sponsor lead-scanning questions with validated choice options."
lastModified: "2026-10-09"
---

> **Release timing:** This page includes changes planned for 9 October 2026. See the [deployment note](https://docs.brella.io/changelog/update-2026-10-09-sponsor-scanning-and-qr) before using the updated operations or inputs.

Configure an event-level `ScanningQuestion` scope with the required actions, input mappings and sponsor access. Enable `sponsor_id` and `field_type` query fields only when needed. Sponsor row restrictions remain in effect.


Example request with fictional IDs. Set BRELLA_API_BASE_URL and BRELLA_API_ACCESS_TOKEN in the execution environment. Optional inputs are documented in the resource input reference.

```shell
curl --fail-with-body --silent --show-error --globoff --max-time 30 --request POST \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/scanning-questions' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "sponsor_id": 103705,
  "title": "When will you purchase?",
  "field_type": "SingleChoice",
  "options": [
    "This quarter",
    "Next quarter"
  ]
}'
```



**Collection path:** `events/{event_id}/scanning-questions`

## POST a scanning question


Example request with fictional IDs. Set BRELLA_API_BASE_URL and BRELLA_API_ACCESS_TOKEN in the execution environment. 

```shell
curl --fail-with-body --silent --show-error --globoff --max-time 30 --request POST \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/scanning-questions' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "sponsor_id": 103705,
  "title": "When will you purchase?",
  "field_type": "SingleChoice",
  "options": [
    "This quarter",
    "Next quarter"
  ],
  "position": 1
}'
```



Save the returned `data.id` and, when selected as a write-response field, the generated `key`. Do not supply your own key. The sponsor must belong to the URL event. Choice types require at most 50 non-empty string options, each at most 1,000 characters.

## PATCH a scanning question


Example request with fictional IDs. Set BRELLA_API_BASE_URL and BRELLA_API_ACCESS_TOKEN in the execution environment. Optional inputs are documented in the resource input reference.

```shell
curl --fail-with-body --silent --show-error --globoff --max-time 30 --request PATCH \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/scanning-questions/901' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "title": "When do you expect to purchase?"
}'
```




Example request with fictional IDs. Set BRELLA_API_BASE_URL and BRELLA_API_ACCESS_TOKEN in the execution environment. 

```shell
curl --fail-with-body --silent --show-error --globoff --max-time 30 --request PATCH \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/scanning-questions/901' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "title": "When do you expect to purchase?",
  "options": [
    "This quarter",
    "Next quarter",
    "Later"
  ],
  "position": 2
}'
```



The starting request updates only the title. A supplied options array replaces the options; omitted options stay unchanged. The full example assumes an existing choice question. Moving a question to another sponsor is unsupported: mapped `sponsor_id` on PATCH returns 400.

To change a choice question to free text, send both fields:

```json
{ "field_type": "Text", "options": [] }
```

Review existing answers before changing the question's type or choices. [DELETE](https://docs.brella.io/reference/scanning-questions#operations) removes the question and its collected answers.

## Input reference

### sponsor_id

Type: Scalar ID. POST: Required. PATCH: Rejected when mapped and supplied.

Sponsor in the URL event. The question cannot move to another sponsor; mapped sponsor_id on PATCH returns 400. Sponsor row restrictions also apply.

### title

Type: Scalar string. POST: Required. PATCH: Optional.

Question title, 1–1,000 characters.

### field_type

Type: Scalar string. POST: Required. PATCH: Optional.

Text, SingleChoice or MultipleChoice. CustomValues is unavailable. A transition to a choice type needs valid options in the same request.

### options

Type: Array of strings. POST: Required for choice types. PATCH: Optional; replaces options.

At most 50 non-empty strings, each at most 1,000 characters. Numeric and boolean values are rejected. Non-empty options are allowed only for choice types. Use [] when changing to Text. Title-only PATCH can preserve legacy options.

### position

Type: Scalar number. POST: Optional; appended when omitted. PATCH: Optional.

Non-null integer within the signed 32-bit range; normalized to the valid list insertion range starting at 1. Order is within the sponsor's lead-scanning questions.

