Skip to content

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" }
}
FieldTypeRequiredNotes
keystringyesUnique field identifier
labelstringyesSection heading
descriptionstring?noSubtitle / helper text
placeholderstring?noGhost text inside input
requiredboolyesShows Required/Optional badge
tooltipstring?noInfo icon tooltip
default_valueanynoPre-filled value (type varies)
visible_whenCondition?noConditional visibility rule
validationobject?nomin_length, max_length, pattern
field_typeobjectyesType-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"
}
FieldTypeDefaultNotes
valuestringUnique key sent as user’s answer
labelstringDisplay text
descriptionstring?Subtitle below label
mediaMedia?Image/icon per option
media_positionleft|top|right|bottomleftMedia placement relative to text
is_defaultboolfalsePre-selected on load
credit_deltaint?Credit cost adjustment when selected
tooltipstring?Per-option tooltip

Field Types

1. Text Input

Single-line text entry.

{
"type": "text_input",
"input_mask": "none",
"character_counter": false,
"prefix": "$",
"suffix": "kg"
}
FieldTypeDefaultNotes
input_masknone|email|phone|url|customnoneKeyboard type + validation
custom_mask_patternstring?Regex when mask=custom
character_counterboolfalseLive char count
prefixstring?Non-editable text before input
suffixstring?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"
}
FieldTypeDefaultNotes
decimal_modeauto|integer|decimalautoForce 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": []
}
FieldTypeDefault
display_modedropdown|radio_list|checkbox_list|list|scroll_wheeldropdown
selection_modesingle|multisingle

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
}

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 TypeMaps To
number_inputnumber
multi_image_upload, slotted_image_uploadimage_upload
audio_upload, voice_recordingaudio
video_uploadvideo
document_uploadfile_upload
yes_no_buttonstoggle
single_select, multi_select, dropdown, radio_list, checkbox_list, scroll_pickerselect
chips_with_iconchips
single_select_cardsselect_cards
date_picker, time_pickerdate_time_picker
section_divider, info_banner, field_static_textcontent_block

Removed Types

RemovedUse Instead
gender_selectorChips
photo_source_pickerImage Upload (camera_gallery config)
platform_selectorChips or Select Cards
avatar_gallerySelect Cards (circular shape)
style_selectorSelect Cards (circular shape)
multi_reference_inputRemoved (no replacement)