Logo
Search
Docs

Fields & validation

Every field with its exact validation rule, nullability, and the database column that stores it.

Core fields

FieldTypeRequiredNullableRules (verbatim)DB column
namestringyesnorequired|string|max:40assistants.name
typestringnoyesnullable|string|in:demo,productionassistants.type
selected_phone_numberstringnoyesnullable|string|max:20|regex:/^\+[1-9]\d{1,14}$/assistants.phone_number (after purchase)
template_idintegernoyesnullable|integerassistants.template_id
user_idintegernoyesnullable|integer|exists:users,id (admins only)assistants.user_id

Conversation fields

FieldRules (verbatim)DB column
firstMessagenullable|string|max:1000assistants.first_message
firstMessageModenullable|string|in:assistant-speaks-first,assistant-speaks-first-with-model-generated-message,assistant-waits-for-userassistants.first_message_mode
firstMessageInterruptionsEnablednullable|booleanassistants.first_message_interruptions_enabled
voicemailMessagenullable|string|max:1000assistants.voicemail_message
endCallMessagenullable|string|max:1000assistants.end_call_message
endCallPhrasesnullable|arrayassistants.end_call_phrases
maxDurationSecondsnullable|integer|min:10|max:43200assistants.max_duration_seconds
backgroundSoundnullable|string|in:office,coffee-shop,convention-hall,summit,traffic,rain,storm,wind,fire,crackling-fire,rain-on-roof,coastal-storm,howling-wind,seagulls,night-insects,fan,white-noise,offassistants.background_sound

Behaviour plans

All plan objects validate as nullable|array and store one-to-one into their JSON columns:

FieldNotable sub-rules (verbatim)DB column
voicemailDetectionenabled/beepDetection boolean · silenceDuration/greetingDuration integer|min:0assistants.voicemail_detection
compliancePlanrecordingEnabled/transcriptionEnabled boolean · dataRetentionDays integer|min:1assistants.compliance_plan
backgroundSpeechDenoisingPlansmartDenoising/fourierDenoising booleanassistants.background_speech_denoising_plan
startSpeakingPlan / stopSpeakingPlaninitialDelayMs integer|min:0 · backgroundSoundVolume numeric|min:0|max:1assistants.start_speaking_plan / stop_speaking_plan
monitorPlanlistenEnabled/controlEnabled boolean · websocketUrl urlassistants.monitor_plan
keypadInputPlanenabled/terminateOnHash boolean · maxDigits integer|min:1|max:10assistants.keypad_input_plan
analysisPlan / artifactPlan (advanced editor)artifactPlan.recording/transcript/summary/analysis booleanassistants.analysis_plan / artifact_plan

Business metadata

FieldRules (verbatim)DB column
metadata.company_namenullable|string|max:255assistants.metadata
metadata.industrynullable|string|max:255assistants.metadata
metadata.locationnullable|string|max:500assistants.metadata
metadata.services_productsnullable|string|max:1000assistants.metadata
metadata.sms_phone_numbernullable|string|max:20assistants.metadata
metadata.assistant_phone_numbernullable|string|max:20|regex:/^\+[1-9]\d{1,14}$/assistants.metadata
metadata.webhook_urlnullable|url|max:500assistants.webhook_url
metadata.sms_notifications.* (advanced)nullable|string|max:30assistants.metadata
metadata.email_notifications.* (advanced)nullable|email|max:255assistants.metadata
variableValuesnullable|arrayassistants.metadata

Constraints the rules cannot express

  • Provider selection is platform-managed. The engine/provider keys inside voice, model and transcriber are set by the platform (via personality and plan settings) and are not part of the public contract.
  • backgroundSound: "none" is normalised to "off"; "default"/"custom"/empty are treated as unset.
  • The live voice platform is written first on create/update/delete; on failure nothing is saved locally.
  • Updating re-renders the prompt from template + metadata + variables — direct prompt edits belong to the advanced editor.
  • The platform mirror object sometimes present in responses is internal and excluded from this contract.