Skip to main content
Every question in a FormBharo agent has a response_type that controls how the voice agent captures and stores the answer. There are six types. Each type also has common fields that every question can use.

Fields common to every question

string
required
The wording of the question as the agent will understand it. Also used as the key in form_data if name is omitted.
string
required
One of string, number, date, boolean, single-select, or multi-select. Determines how the agent captures and stores the answer.
string
A short, machine-friendly key used in form_data and form_status. Auto-generated from the question wording if omitted. Set this explicitly when you want a stable key that won’t change if you rephrase the question.
boolean
When true, the call ends if no valid answer is obtained after all retries. The conversation status is set to failed.
string
The exact words the agent speaks to ask this question. If omitted, the agent generates its own phrasing from the question text.
string
What the agent says when moving past an unanswered optional question. Useful for maintaining conversational flow.
string
Per-question extra prompt instructions. Applied in addition to the agent-level ai_instructions.
Validation object
Enforces a specific format on the answer. See Validation for the full rule reference.
RetryConfig object
Controls how many times the agent re-asks the question and what happens when retries run out. See Retries.
array of strings
A list of answer values that trigger the screened_out conversation status and end the call immediately. Use this to implement eligibility screening.
string
Places this question inside a conditional branch. The question is only asked when the branch condition evaluates to true. See Branching.

The six response types

string

Free-text response. The agent transcribes whatever the caller says and stores it as-is. Extra fields: None. Stored as: A plain string — e.g., "I have had a headache for three days".

number

A numeric response. The agent extracts the number from the caller’s speech. Extra fields:
"integer" | "decimal"
Controls whether the stored value is rounded to an integer or preserved as a decimal.
Stored as: A JSON number — e.g., 42 or 3.5.

date

A date response in DD-MM-YYYY format. Extra fields: None. Stored as: A string in "DD-MM-YYYY" format — e.g., "25-12-2024". The agent handles natural-language date expressions (“last Tuesday”, “the fifth of March”) and normalises them.

boolean

A yes/no response. Optionally, you can use custom labels instead of true/false. Extra fields:
object
Custom display labels for the two states. Provide { "true": "Yes", "false": "No" } or any other pair of strings.
Stored as: true or false when no labels are set. When labels are set, stored as the matching label text — e.g., "Yes". Patching: When you manually correct a boolean answer via the API, you can send true, false, or either label text (e.g., "Yes" or "No").

single-select

The caller chooses one option from a predefined list. Extra fields:
array of strings
required
The list of options the caller can choose from — e.g., ["Morning", "Afternoon", "Evening"].
Stored as: The chosen option text as a string — e.g., "Morning". Patching: When correcting a single-select answer via the API, send the option text (case-insensitive) or the 0-based index of the option (e.g., 0 for the first option).

multi-select

The caller can choose one or more options from a predefined list. Extra fields:
array of strings
required
The list of options the caller can choose from — e.g., ["Headache", "Cough", "Fever"].
Stored as: A comma-and-space-joined string of the chosen options — e.g., "Headache, Cough". Not a JSON array. Patching: When correcting a multi-select answer via the API, send a list of 0-based indices (e.g., [0, 2]) or a comma-separated string of option texts (e.g., "Headache, Fever").
A multi-select answer is stored as a string, not a list. "Headache, Cough" not ["Headache", "Cough"]. Split on ", " to get the array back when processing results in your application.