Wizard Field Types
22 field types for building wizard-style input forms in agents. This guide covers the JSON schema for each field type as returned by the public API.
Overview
Agents can have wizard-style input forms defined in input_schema.steps[].questions[].
Each question is an InputField with a field_type that determines its rendering and behavior.
API endpoint: GET /public/cms/agents/{id} (returns input_schema)
Localization
The public API resolves all translatable fields to plain strings based on the Accept-Language
header. All text fields (label, description, placeholder, tooltip, subtitle, on_label, off_label,
inner_text, inner_subtitle, content, divider_label) are resolved the same way.
InputField (Common Fields)
Every question shares these fields:
{ "key": "field_abc123", "label": "Upload Photo", "description": "Helper text below label", "placeholder": "Ghost text inside input", "required": true, "tooltip": "Tap for more info", "default_value": null, "visible_when": { "field_key": "mode", "operator": "equals", "value": "advanced" }, "validation": { "min_length": 1, "max_length": 500, "pattern": "^[a-z]+$" }, "field_type": { "type": "text_input" }}| Field | Type | Required | Notes |
|---|---|---|---|
key | string | yes | Unique field identifier |
label | string | yes | Section heading |
description | string? | no | Subtitle / helper text |
placeholder | string? | no | Ghost text inside input |
required | bool | yes | Shows Required/Optional badge |
tooltip | string? | no | Info icon tooltip |
default_value | any | no | Pre-filled value (type varies) |
visible_when | Condition? | no | Conditional visibility rule |
validation | object? | no | min_length, max_length, pattern |
field_type | object | yes | Type-specific config (see below) |
Condition (visible_when)
{ "field_key": "mode", "operator": "equals", "value": "advanced"}Operators: equals, not_equals, contains, not_contains, is_empty, is_not_empty
SelectOption
Used by: Select, Chips, Select Cards, Tab Bar
{ "value": "option_1", "label": "Option One", "description": "Subtitle text", "media": { "url": "https://cdn.example.com/icon.png", "type": "image" }, "media_position": "left", "is_default": false, "credit_delta": 5, "tooltip": "Per-option tooltip"}| Field | Type | Default | Notes |
|---|---|---|---|
value | string | — | Unique key sent as user’s answer |
label | string | — | Display text |
description | string? | — | Subtitle below label |
media | Media? | — | Image/icon per option |
media_position | left|top|right|bottom | left | Media placement relative to text |
is_default | bool | false | Pre-selected on load |
credit_delta | int? | — | Credit cost adjustment when selected |
tooltip | string? | — | Per-option tooltip |
Field Types
1. Text Input
Single-line text entry.
{ "type": "text_input", "input_mask": "none", "character_counter": false, "prefix": "$", "suffix": "kg"}| Field | Type | Default | Notes |
|---|---|---|---|
input_mask | none|email|phone|url|custom | none | Keyboard type + validation |
custom_mask_pattern | string? | — | Regex when mask=custom |
character_counter | bool | false | Live char count |
prefix | string? | — | Non-editable text before input |
suffix | string? | — | Non-editable text after input |
Default value type: string
2. Text Area
Multi-line text entry.
{ "type": "text_area", "character_counter": false, "rows": 3, "max_rows": 10}3. Number
Numeric input with optional unit label.
{ "type": "number", "min": 0, "max": 100, "step": 1, "unit_label": "px", "decimal_mode": "integer"}| Field | Type | Default | Notes |
|---|---|---|---|
decimal_mode | auto|integer|decimal | auto | Force integer or decimal |
4. Slider
Range selection via draggable thumb.
{ "type": "slider", "min": 0, "max": 100, "step": 1, "show_value_label": true, "unit_label": "%"}5. Image Upload
Single or multi-slot image upload.
{ "type": "image_upload", "accepted_formats": ["jpg", "png", "webp"], "camera_gallery": "both", "slots": [ { "slot_key": "photo", "inner_text": "Add Photo", "inner_subtitle": "Max 10MB", "min_count": 1, "max_count": 1, "max_file_size_mb": 10, "required": true, "face_detection_enabled": false } ]}Slot behavior:
- 1 slot, max_count=1 → single image upload
- 1 slot, max_count=N → multi image grid
- N slots → named upload boxes
6. Video
Video upload with configurable slots. Same slot fields as Image Upload, plus
max_duration_secs: int? per slot.
{ "type": "video", "accepted_formats": ["mp4", "mov", "webm"], "camera_gallery": "both", "slots": [{ "slot_key": "clip", "max_duration_secs": 60, "required": true }]}7. Audio
Audio upload or recording.
{ "type": "audio", "source": "both", "slots": [{ "slot_key": "recording", "max_duration_secs": 120 }]}source: both | record | upload
8. File Upload
Generic file upload (PDF, docs, spreadsheets).
{ "type": "file_upload", "accepted_types": ["pdf", "docx", "csv"], "slots": [{ "slot_key": "document", "max_count": 3, "max_file_size_mb": 25 }]}Empty accepted_types = all file types allowed.
9. Toggle
On/off switch.
{ "type": "toggle", "on_label": "Yes", "off_label": "No"}Default value type: boolean. If labels set → two pill buttons. Otherwise → toggle switch.
10. Select
Pick from a list. Covers single select, multi select, dropdown, radio list, checkbox list, scroll picker.
{ "type": "select", "display_mode": "dropdown", "selection_mode": "single", "options": []}| Field | Type | Default |
|---|---|---|
display_mode | dropdown|radio_list|checkbox_list|list|scroll_wheel | dropdown |
selection_mode | single|multi | single |
11. Chips
Compact inline pill selector.
{ "type": "chips", "selection_mode": "single", "layout": "wrap", "options": []}layout: wrap | scroll
12. Select Cards
Visual card selector with images.
{ "type": "select_cards", "selection_mode": "single", "card_layout": "grid", "columns": 2, "card_shape": "rectangular", "options": []}13. Tab Bar
Fixed horizontal segmented control for mode switching. Always single-select.
{ "type": "tab_bar", "options": [] }Pair with visible_when on other fields to show/hide based on selected tab.
14. Model Selector
AI model picker. Models come from admin pricing records.
{ "type": "model_selector", "card_layout": "horizontal_scroll", "models": [ { "model_id": "openai/gpt-4o", "title_override": "GPT-4o", "subtitle": "Fast, ~4c/s", "is_default": true, "credit_delta": 2 } ]}15. Voice Selector
TTS voice picker.
{ "type": "voice_selector", "filter": { "model_type": "text_to_speech" }}16. Color Picker
Color selection input.
{ "type": "color_picker", "preset_colors": ["#FF0000", "#00FF00", "#0000FF"], "allow_custom": true}Default value type: string (hex color)
17. URL Input
URL entry with validation.
{ "type": "url_input", "open_in": "browser"}open_in: browser | in_app
18. Date/Time Picker
Date, time, or combined picker.
{ "type": "date_time_picker", "mode": "date_only", "min_date": "2024-01-01", "max_date": "2025-12-31", "time_format": "24h"}mode: date_only | time_only | date_and_time
19. Variations Selector
Quantity picker for output variations.
{ "type": "variations_selector", "min": 1, "max": 4, "default": 1}20. Template Gallery
Pre-built template picker.
{ "type": "template_gallery", "template_ids": ["template:abc", "template:def"]}21. Collapsible Group
Layout container grouping questions under an expandable section.
{ "type": "collapsible_group", "children": ["field_abc", "field_def"], "default_open": false}children is an array of field keys of nested questions.
22. Content Block
Non-input content injected between questions.
{ "type": "content_block", "display_mode": "text", "content": "Important notice...", "severity": "info"}display_mode: divider | text | component
severity: info | warning | error | success (applies to text mode)
Legacy Type Aliases
Old type names are still accepted for backward compatibility:
| Old Type | Maps To |
|---|---|
number_input | number |
multi_image_upload, slotted_image_upload | image_upload |
audio_upload, voice_recording | audio |
video_upload | video |
document_upload | file_upload |
yes_no_buttons | toggle |
single_select, multi_select, dropdown, radio_list, checkbox_list, scroll_picker | select |
chips_with_icon | chips |
single_select_cards | select_cards |
date_picker, time_picker | date_time_picker |
section_divider, info_banner, field_static_text | content_block |
Removed Types
| Removed | Use Instead |
|---|---|
gender_selector | Chips |
photo_source_picker | Image Upload (camera_gallery config) |
platform_selector | Chips or Select Cards |
avatar_gallery | Select Cards (circular shape) |
style_selector | Select Cards (circular shape) |
multi_reference_input | Removed (no replacement) |