Flashpoint.AIFlashpoint.AIdocs

Question types

Flashpoint.AI supports twenty-four question types, from simple single-select to choice-based conjoint and image-based stimuli. Each type maps to a structured answer schema so downstream analysis works without custom parsers.

Every question lives inside a block (section). When adding questions via the API or the agent, you specify the type string exactly as shown below.


Choice questions

select (single)

Single-select: respondent picks exactly one option from a list. Use for mutually exclusive choices like gender, purchase intent scales, or yes/no gates.

FieldRequiredDescription
typeyes"select"
subtypeyes"single"
textyesQuestion prompt
optionsyesArray of options (min 2). Each: {text, type?}
config.uino"radio" (default), "dropdown"
config.randomizenoShuffle option order per respondent
curl -X PATCH https://surveys.flashpoint.ai/api/v1/surveys/{survey_id} \
  -H "X-Service-Token: $TOKEN" \
  -H "X-Team-ID: $TEAM_ID" \
  -H "X-User-ID: $USER_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "document": {
      "blocks": [{
        "name": "Screener",
        "questions": [{
          "type": "select",
          "subtype": "single",
          "text": "How often do you purchase coffee?",
          "options": [
            {"text": "Daily"},
            {"text": "A few times a week"},
            {"text": "Weekly"},
            {"text": "Rarely"},
            {"text": "Never"}
          ]
        }]
      }]
    }
  }'

Agent prompt: "Add a single-select question asking how often they purchase coffee, with options Daily, A few times a week, Weekly, Rarely, Never"

select (multi)

Multi-select: respondent picks one or more options. Use for "select all that apply" questions.

FieldRequiredDescription
typeyes"select"
subtypeyes"multi"
optionsyesArray of options (min 2)
config.maxSelectionsnoCap on number of selections
config.minSelectionsnoMinimum selections required

Special option types: set "type": "nota" for "None of the above" (exclusive — clears other selections) or "type": "other" for a write-in field.

Agent prompt: "Add a multi-select asking which streaming services they use: Netflix, Hulu, Disney+, HBO Max, Amazon Prime Video, None of the above"

Picture-based choices? When the options are images rather than text, use image carousel or image hotspot — see Image questions.


Open-ended questions

text (single)

Single open-ended text input. Use for verbatim feedback, explanations, or follow-up probes.

FieldRequiredDescription
typeyes"text"
subtypeno"single" (default)
textyesQuestion prompt

No options are accepted. The respondent types a free-form answer.

Agent prompt: "Add an open-ended question asking what they liked most about the product"

text (multi)

Multiple labeled text inputs in a single question. Use when you need several short answers grouped together (e.g., "List three words that describe this brand").

FieldRequiredDescription
typeyes"text"
subtypeyes"multi"
config.inputsyesArray of {label, helper} objects (min 1)
{
  "type": "text",
  "subtype": "multi",
  "text": "List three words that describe this brand.",
  "config": {
    "inputs": [
      {"label": "Word 1", "helper": "First word"},
      {"label": "Word 2", "helper": "Second word"},
      {"label": "Word 3", "helper": "Third word"}
    ]
  }
}

Agent prompt: "Add a multi-text question asking them to list three words that describe the brand"

contact-form

Structured contact fields. Each input has a fixed label from the set: firstname, lastname, phone, email, company, title.

FieldRequiredDescription
typeyes"contact-form"
config.inputsyesArray of {label, helper} where label is one of the six field names

Agent prompt: "Add a contact form collecting first name, last name, email, and company"


Numeric questions

number

General numeric input with optional range validation.

FieldRequiredDescription
typeyes"number"
config.datarangeno[min, max] — use null for unbounded. Default: [null, null]

Agent prompt: "Add a number question asking their household size, between 1 and 20"

percentage

Percentage input, defaulting to a 0-100 range.

FieldRequiredDescription
typeyes"percentage"
config.datarangenoDefault: [0, 100]

Agent prompt: "Ask what percentage of their commute is by car"

year

Year input with a default minimum of 1900.

FieldRequiredDescription
typeyes"year"
config.datarangenoDefault: [1900, null]

Agent prompt: "Ask what year they were born"

currency

Currency amount input with an ISO 4217 currency code.

FieldRequiredDescription
typeyes"currency"
config.currencyno3-letter ISO code. Default: "USD"

Agent prompt: "Ask how much they spent on groceries last week in USD"

zipcode

Postal code input with country-specific validation.

FieldRequiredDescription
typeyes"zipcode"
config.countryno2-letter ISO 3166-1 alpha-2 code. Default: "US"

Agent prompt: "Add a zipcode question for their home address"


Allocation questions

percent-sum

Respondent allocates percentages across items that must total 100. Use for budget allocation, time split, or preference distribution.

FieldRequiredDescription
typeyes"percent-sum"
config.inputsyesArray of {label, helper} (min 2). Each becomes a percentage input
{
  "type": "percent-sum",
  "text": "How do you split your work time across these activities?",
  "config": {
    "inputs": [
      {"label": "Meetings", "helper": "Meetings"},
      {"label": "Deep work", "helper": "Deep work"},
      {"label": "Email", "helper": "Email"},
      {"label": "Admin", "helper": "Admin"}
    ]
  }
}

Agent prompt: "Add a percent-sum question asking how they split their work time across Meetings, Deep work, Email, and Admin"

multi-percentage

Multiple independent percentage inputs (they do not need to sum to 100). Use when you need several percentage estimates that are unrelated.

FieldRequiredDescription
typeyes"multi-percentage"
config.inputsyesArray of {label, helper} (min 2)

Agent prompt: "Add a multi-percentage question asking the likelihood of purchasing each product"


Ranking

ranking

Drag-to-rank: respondent orders items by preference. Use for priority rankings, feature importance, or brand preference.

FieldRequiredDescription
typeyes"ranking"
optionsyesArray of options to rank (min 2)

Agent prompt: "Add a ranking question asking them to rank these features by importance: Battery life, Camera quality, Screen size, Price, Durability"


Grid / matrix

grid (single)

Matrix question with single-select per row. Rows are the items being rated; columns are the rating scale.

FieldRequiredDescription
typeyes"grid"
subtypeno"" (default) for single-select per row
optionsyesObject: {vertical: [{text}], horizontal: [{text}]}
{
  "type": "grid",
  "subtype": "",
  "text": "Rate each brand on the following attributes.",
  "options": {
    "vertical": [
      {"text": "Nike"},
      {"text": "Adidas"},
      {"text": "New Balance"}
    ],
    "horizontal": [
      {"text": "Quality"},
      {"text": "Style"},
      {"text": "Value"},
      {"text": "Innovation"}
    ]
  }
}

Agent prompt: "Add a grid question rating Nike, Adidas, and New Balance on Quality, Style, Value, and Innovation"

grid (multi)

Matrix with multi-select per row. Same structure, but respondents can pick multiple columns per row.

FieldRequiredDescription
typeyes"grid"
subtypeyes"multi"
optionsyesSame nested structure as single grid

Agent prompt: "Add a multi-select grid asking which features each product has"

Rating images? To rate a set of images on a scale, use image rating — a grid whose rows are pictures. See Image questions.


Advanced research types

nps

Net Promoter Score. Pre-configured 0-10 scale with Detractor/Passive/Promoter classification. No config or options needed — the scale is built in.

FieldRequiredDescription
typeyes"nps"
textyesQuestion prompt (conventionally "How likely are you to recommend...")

Agent prompt: "Add an NPS question for our customer service team"

maxdiff

Best-worst scaling exercise. Respondents see subsets of items and pick the best and worst in each set. The experimental design (which items appear in which sets) is auto-generated.

FieldRequiredDescription
typeyes"maxdiff"
optionsyesFull list of items (min 4)
config.setsyesNumber of choice sets shown per respondent
config.designsyesNumber of randomized design variants (typically 5-10)
config.featuresyesItems shown per set (typically 3-5)
config.lowerTextnoLabel for "worst" pole. Default: "Least Important"
config.upperTextnoLabel for "best" pole. Default: "Most Important"

The config.ranking array (the experimental design) is auto-generated from the parameters. Do not set it manually.

{
  "type": "maxdiff",
  "text": "Which product features are most and least important to you?",
  "options": [
    {"text": "Battery life"},
    {"text": "Camera quality"},
    {"text": "Screen size"},
    {"text": "Storage capacity"},
    {"text": "Water resistance"},
    {"text": "Processor speed"}
  ],
  "config": {
    "sets": 4,
    "designs": 5,
    "features": 3,
    "lowerText": "Least Important",
    "upperText": "Most Important"
  }
}

Agent prompt: "Add a maxdiff with 6 phone features: Battery life, Camera quality, Screen size, Storage, Water resistance, Processor speed. Show 3 per set, 4 sets, 5 designs."

Comparing images? For a MaxDiff over pictures (including simple A‑vs‑B pairs), use image comparison — see Image questions.

conjoint

Choice-based conjoint analysis. Respondents choose between product profiles defined by combinations of attribute levels. The experimental design is auto-generated.

FieldRequiredDescription
typeyes"conjoint"
config.setsyesChoice sets per respondent
config.designsyesNumber of design variants
config.featuresyesProfiles per choice set (typically 2-4)
config.attributesyesArray of attributes, each with text and levels: [{text}] (min 2 attributes, min 2 levels each)
{
  "type": "conjoint",
  "text": "Which laptop would you prefer?",
  "config": {
    "sets": 6,
    "designs": 8,
    "features": 3,
    "attributes": [
      {
        "text": "Brand",
        "levels": [{"text": "Apple"}, {"text": "Dell"}, {"text": "Lenovo"}]
      },
      {
        "text": "Price",
        "levels": [{"text": "$999"}, {"text": "$1,299"}, {"text": "$1,599"}]
      },
      {
        "text": "Screen Size",
        "levels": [{"text": "13 inch"}, {"text": "15 inch"}]
      }
    ]
  }
}

Agent prompt: "Create a conjoint for laptops with attributes Brand (Apple, Dell, Lenovo), Price ($999, $1299, $1599), and Screen Size (13in, 15in). 6 sets, 8 designs, 3 profiles per set."

van-westendorp

Price Sensitivity Meter. Four price questions that together reveal acceptable price ranges. The four inputs must map to: too cheap, bargain, expensive, too expensive.

FieldRequiredDescription
typeyes"van-westendorp"
config.inputsyesExactly 4 inputs, each with label (short id) and helper (displayed question text)
config.currencynoISO 4217 currency code. Default: "USD"
{
  "type": "van-westendorp",
  "text": "Thinking about this product, at what price would you say...",
  "config": {
    "currency": "USD",
    "inputs": [
      {"label": "1", "helper": "It is so cheap that you would question its quality?"},
      {"label": "2", "helper": "It is a bargain -- a great buy for the money?"},
      {"label": "3", "helper": "It is starting to get expensive but you would still consider it?"},
      {"label": "4", "helper": "It is too expensive to consider?"}
    ]
  }
}

Agent prompt: "Add a van-westendorp price sensitivity question for our new product"


Image questions

Image questions use pictures as the stimulus instead of text. Under the hood they are subtypes of the choice, grid, and MaxDiff families, so they share the same answer schema and analysis as their parent type — they just render images and require an image on every stimulus.

Add the images in the builder (upload, AI‑generate, or pick a stock photo). Each image is normalized and hosted on the Flashpoint CDN, and referenced by its URL: media_url on an option (the picture for that choice), or config.image_url for a single base image. If any required image is missing, the survey will not validate.

image carousel

Single‑ (or multi‑) select where each option is an image, shown in a swipeable carousel. Use for pack tests, ad/creative selection, or "pick the design you prefer."

FieldRequiredDescription
typeyes"select"
subtypeyes"image_carousel"
textyesQuestion prompt
optionsyesArray (min 2). Each: {text, media_url}. Every option requires media_url (the image); text is the caption
config.selectionno"single" (default) or "multi"
config.show_captionsnoShow each option's text as a caption. Default true
config.allow_zoomnoAllow tap/click to zoom an image. Default true
{
  "type": "select",
  "subtype": "image_carousel",
  "text": "Which packaging design do you prefer?",
  "options": [
    {"text": "Design A", "media_url": "https://cdn.flashpoint.ai/.../design-a.webp"},
    {"text": "Design B", "media_url": "https://cdn.flashpoint.ai/.../design-b.webp"},
    {"text": "Design C", "media_url": "https://cdn.flashpoint.ai/.../design-c.webp"}
  ],
  "config": {"selection": "single", "show_captions": true, "allow_zoom": true}
}

Agent prompt: "Add an image carousel asking which of three packaging designs they prefer." (Then upload or generate the image for each option.)

image hotspot

Respondents click one or more regions on a single base image. Use for "tap what catches your eye," shelf/planogram tests, or pointing at parts of a design.

FieldRequiredDescription
typeyes"select"
subtypeyes"image_hotspot"
textyesQuestion prompt
config.image_urlyesURL of the base image the regions sit on
optionsyesOne per clickable region. Each: {text, coords} where coords is {x, y, w, h} as percentages (0–100) of the base image
config.selectionno"single" (default) or "multi"
{
  "type": "select",
  "subtype": "image_hotspot",
  "text": "Tap the area of the shelf you would reach for first.",
  "config": {
    "image_url": "https://cdn.flashpoint.ai/.../shelf.webp",
    "selection": "single"
  },
  "options": [
    {"text": "Top shelf", "coords": {"x": 5, "y": 4, "w": 90, "h": 28}},
    {"text": "Middle shelf", "coords": {"x": 5, "y": 36, "w": 90, "h": 28}},
    {"text": "Bottom shelf", "coords": {"x": 5, "y": 68, "w": 90, "h": 28}}
  ]
}

The builder includes a visual region editor — draw rectangles on the base image and the coordinates are filled in for you.

Agent prompt: "Add an image hotspot on the shelf photo asking which area they would reach for first." (Then upload the base image and draw the regions.)

image rating

A grid whose rows are images and columns are a rating scale. Use to rate a set of creatives, products, or logos on the same scale.

FieldRequiredDescription
typeyes"grid"
subtypeyes"image_rating"
textyesQuestion prompt
optionsyes{vertical: [...rows], horizontal: [...columns]}. Every vertical row requires media_url; horizontal columns are the rating labels
{
  "type": "grid",
  "subtype": "image_rating",
  "text": "Rate each ad on how appealing it is.",
  "options": {
    "vertical": [
      {"text": "Ad 1", "media_url": "https://cdn.flashpoint.ai/.../ad-1.webp"},
      {"text": "Ad 2", "media_url": "https://cdn.flashpoint.ai/.../ad-2.webp"}
    ],
    "horizontal": [
      {"text": "Not at all appealing"},
      {"text": "Somewhat appealing"},
      {"text": "Very appealing"}
    ]
  }
}

Agent prompt: "Add an image rating grid to rate each of these ads on a 3-point appeal scale." (Then upload an image for each row.)

image comparison

A MaxDiff where the items are images. With two images per set it is a simple A‑vs‑B pairwise comparison; with more, it is best‑worst scaling over images. Use for preference testing across many creatives.

FieldRequiredDescription
typeyes"maxdiff"
subtypeyes"image_compare"
optionsyesFull list of image items (min 4). Each: {text, media_url}. Every item requires media_url
config.setsyesChoice sets shown per respondent
config.designsyesNumber of randomized design variants
config.featuresyesImages per set — use 2 for A‑vs‑B pairwise
{
  "type": "maxdiff",
  "subtype": "image_compare",
  "text": "In each pair, which image do you prefer?",
  "options": [
    {"text": "Image 1", "media_url": "https://cdn.flashpoint.ai/.../1.webp"},
    {"text": "Image 2", "media_url": "https://cdn.flashpoint.ai/.../2.webp"},
    {"text": "Image 3", "media_url": "https://cdn.flashpoint.ai/.../3.webp"},
    {"text": "Image 4", "media_url": "https://cdn.flashpoint.ai/.../4.webp"}
  ],
  "config": {"sets": 6, "designs": 5, "features": 2}
}

Agent prompt: "Add an image comparison over these 6 creatives, shown 2 at a time, 6 sets, 5 designs." (Then upload an image for each item.)


Structural types

transition

Display-only screen with text or instructions between sections. No answer is collected. Use to introduce a new topic or provide context.

FieldRequiredDescription
typeyes"transition"
textyesContent to display

Agent prompt: "Add a transition screen introducing the product evaluation section"

terminate

Ends the survey immediately. Used as a routing destination for disqualification logic. Auto-labels as S1, S2, etc.

FieldRequiredDescription
typeyes"terminate"
textyesMessage shown on termination (e.g., "Thank you for your time.")

Agent prompt: "Add a terminate screen that says 'Thank you for your interest, but you do not qualify for this survey.'"

variable

Hidden computed field. Stores a DSL expression that is evaluated at runtime from other question answers. Not shown to respondents. Used for computed routing, scoring, or downstream data enrichment.

FieldRequiredDescription
typeyes"variable"
textyesInternal description of what the variable computes

Variables are typically added after all questions exist, since their definitions reference other question labels.

Agent prompt: "Add a variable that computes a satisfaction score from Q3 and Q5"

ai-chat

Conversational AI follow-up. Opens a freeform chat interface where the AI probes deeper based on prior answers. Use for qualitative depth on key topics.

FieldRequiredDescription
typeyes"ai-chat"
textyesThe AI's opening prompt

Agent prompt: "Add an AI chat follow-up asking them to elaborate on their product experience"


Common configuration

These fields apply across all question types.

FieldTypeDefaultDescription
labelstringAuto (Q1, Q2...)Stable identifier used in skip logic and data exports
config.requiredbooltrueWhether the question must be answered
config.randomizeboolfalseShuffle option order per respondent
optoutobjectnone{allowed: true, text: "Prefer not to say"} adds a skip button
conditionstringnoneDSL display condition — see Skip logic
skipsarray[]Skip/branch rules — see Skip logic

Option types

Options in choice-based questions support a type field:

TypeBehavior
"user"Standard option (default)
"other"Write-in: shows a text input when selected
"nota""None of the above": exclusive — deselects all others when chosen
"dontknow""Don't know" option
"optout"Opt-out option
"notapplicable""Not applicable" option

Next steps