Multi Select Responses

Multi select responses allow reviewers to choose multiple options from a predefined list, making them ideal for identifying multiple issues, categorizing content across several dimensions, or conducting comprehensive audits where multiple aspects need evaluation.

When to Use Multi Select

Multi select responses are perfect for:

Issue Identification

Identifying multiple problems or violations where content might have several issues simultaneously

Content Categorization

Tagging content with multiple categories, departments, or attributes that aren’t mutually exclusive

Audit Checklists

Quality assurance workflows where multiple criteria need to be verified or flagged

Feature Analysis

Evaluating multiple aspects or features of content, products, or submissions

Configuration Options

Multi select responses require an options array and support selection limits and validation:

Required Parameters

options
array
required
Array of SelectOption objects (1-20 options maximum)

Optional Parameters

min_selections
integer
default:"0"
Minimum number of options that must be selected
max_selections
integer
default:"unlimited"
Maximum number of options that can be selected
required
boolean
default:"false"
Whether at least one selection is mandatory for completion

Implementation Examples

Content Violation Detection

Identify multiple policy violations in a single review:
request_data = {
    "processing_type": "time-sensitive",
    "type": "markdown",
    "priority": "high",
    "request_text": "Review this user post for policy violations:\n\n'🔥 AMAZING DEAL! Buy my crypto course for $999 (normally $5000)! DM me now before spots run out! This will make you RICH! Use my special link: bit.ly/crypto-riches. Limited time only - act fast or miss out forever! 💰💰💰'",
    "response_type": "multi_select",
    "response_config": {
        "options": [
            {
                "value": "spam",
                "label": "🚫 Spam Content",
                "description": "Unsolicited promotional or repetitive content",
                "color": "#dc2626"
            },
            {
                "value": "misleading_claims",
                "label": "⚠️ Misleading Claims",
                "description": "False or exaggerated promises",
                "color": "#f59e0b"
            },
            {
                "value": "financial_scam",
                "label": "💸 Potential Financial Scam",
                "description": "Get-rich-quick schemes or fraudulent investment advice",
                "color": "#7c2d12"
            },
            {
                "value": "suspicious_links",
                "label": "🔗 Suspicious Links",
                "description": "Shortened URLs or potentially malicious links",
                "color": "#b91c1c"
            },
            {
                "value": "pressure_tactics",
                "label": "⏰ High-Pressure Tactics",
                "description": "Artificial urgency or scarcity claims",
                "color": "#ea580c"
            },
            {
                "value": "no_violations",
                "label": "✅ No Policy Violations",
                "description": "Content appears to comply with all policies",
                "color": "#16a34a"
            }
        ],
        "min_selections": 1,
        "max_selections": 5,
        "required": True
    },
    "default_response": ["spam", "misleading_claims"],  # Conservative default
    "timeout_seconds": 1800,
    "platform": "api"
}

Product Quality Assessment

Evaluate multiple aspects of product quality:
# Multi-dimensional product evaluation
request_data = {
    "processing_type": "deferred",
    "type": "markdown",
    "priority": "medium",
    "request_text": "Evaluate this product listing for quality and completeness:\n\nTitle: 'Wireless Bluetooth Headphones - Premium Sound Quality'\nDescription: 'Experience crystal clear audio with our latest wireless headphones. Features noise cancellation, 20-hour battery life, and comfortable design.'\nPrice: $89.99\nImages: 3 product photos provided\nSpecifications: Listed in product details",
    "response_type": "multi_select",
    "response_config": {
        "options": [
            {
                "value": "title_quality",
                "label": "📝 Title Quality Good",
                "description": "Title is descriptive and follows naming conventions",
                "color": "#059669"
            },
            {
                "value": "description_complete",
                "label": "📄 Description Complete",
                "description": "Product description covers key features and benefits",
                "color": "#0891b2"
            },
            {
                "value": "images_high_quality",
                "label": "📸 High-Quality Images",
                "description": "Product images are clear and professionally shot",
                "color": "#7c3aed"
            },
            {
                "value": "pricing_competitive",
                "label": "💰 Competitive Pricing",
                "description": "Price aligns with similar products in category",
                "color": "#dc2626"
            },
            {
                "value": "specifications_detailed",
                "label": "⚙️ Detailed Specifications",
                "description": "Technical specs are comprehensive and accurate",
                "color": "#ea580c"
            },
            {
                "value": "category_correct",
                "label": "🏷️ Correct Category",
                "description": "Product is placed in the appropriate category",
                "color": "#16a34a"
            },
            {
                "value": "seo_optimized",
                "label": "🔍 SEO Optimized",
                "description": "Title and description use relevant keywords",
                "color": "#2563eb"
            }
        ],
        "min_selections": 1,
        "max_selections": 7,
        "required": True
    },
    "default_response": [],
    "timeout_seconds": 86400,  # 24 hours
    "platform": "api"
}

Customer Service Ticket Categorization

Categorize support tickets across multiple dimensions:
# Multi-category ticket classification
request_data = {
    "processing_type": "time-sensitive",
    "type": "markdown",
    "priority": "medium",
    "request_text": "Categorize this customer support ticket:\n\n'Subject: Billing issue and account access problem\n\nMessage: Hi, I was charged twice for my subscription last month, and now I can't log into my account. I've tried resetting my password but the email isn't coming through. This is really frustrating and I need this resolved ASAP since I have a presentation tomorrow that requires access to my files. Can someone please help? I've been a customer for 3 years and this has never happened before.'",
    "response_type": "multi_select", 
    "response_config": {
        "options": [
            {
                "value": "billing_issue",
                "label": "💳 Billing & Payment",
                "description": "Related to charges, subscriptions, or payments",
                "color": "#dc2626"
            },
            {
                "value": "account_access",
                "label": "🔐 Account Access",
                "description": "Login problems, password issues, or account lockouts",
                "color": "#f59e0b"
            },
            {
                "value": "technical_issue",
                "label": "⚙️ Technical Problem",
                "description": "System bugs, feature malfunctions, or technical errors",
                "color": "#3b82f6"
            },
            {
                "value": "urgent_priority",
                "label": "🚨 Urgent Priority",
                "description": "Customer indicates time-sensitive business need",
                "color": "#dc2626"
            },
            {
                "value": "email_delivery",
                "label": "📧 Email Delivery Issue",
                "description": "Problems receiving system emails or notifications",
                "color": "#8b5cf6"
            },
            {
                "value": "loyal_customer",
                "label": "⭐ Loyal Customer",
                "description": "Long-term customer requiring special attention",
                "color": "#059669"
            },
            {
                "value": "escalation_needed",
                "label": "📞 Needs Escalation",
                "description": "Complex issue requiring senior support attention",
                "color": "#ea580c"
            }
        ],
        "min_selections": 2,
        "max_selections": 6,
        "required": True
    },
    "default_response": ["billing_issue", "account_access"],
    "timeout_seconds": 3600,
    "platform": "api"
}

Response Format

When a reviewer selects multiple options, you’ll receive both values and labels:
{
  "response_data": {
    "selected_values": ["spam", "misleading_claims", "pressure_tactics"],
    "selected_labels": ["🚫 Spam Content", "⚠️ Misleading Claims", "⏰ High-Pressure Tactics"]
  }
}

Use Case Examples

1. Content Moderation Review

moderation_config = {
    "response_type": "multi_select",
    "response_config": {
        "options": [
            {
                "value": "harassment",
                "label": "👤 Harassment/Bullying",
                "description": "Targeted harassment or bullying behavior",
                "color": "#dc2626"
            },
            {
                "value": "hate_speech",
                "label": "😡 Hate Speech",
                "description": "Content promoting hatred against groups",
                "color": "#991b1b"
            },
            {
                "value": "misinformation",
                "label": "❌ Misinformation",
                "description": "False or misleading information",
                "color": "#f59e0b"
            },
            {
                "value": "adult_content",
                "label": "🔞 Adult Content",
                "description": "Sexual or mature content",
                "color": "#7c2d12"
            },
            {
                "value": "violence",
                "label": "⚔️ Violence/Graphic Content",
                "description": "Violent imagery or graphic content",
                "color": "#7f1d1d"
            },
            {
                "value": "spam_promotion",
                "label": "📢 Spam/Promotion",
                "description": "Unsolicited advertising or spam",
                "color": "#ea580c"
            },
            {
                "value": "copyright",
                "label": "©️ Copyright Violation",
                "description": "Unauthorized use of copyrighted material",
                "color": "#8b5cf6"
            },
            {
                "value": "content_approved",
                "label": "✅ No Violations Found",
                "description": "Content appears to comply with all policies",
                "color": "#16a34a"
            }
        ],
        "min_selections": 1,
        "max_selections": 7,
        "required": True
    }
}

2. Quality Assurance Checklist

qa_checklist_config = {
    "response_type": "multi_select",
    "response_config": {
        "options": [
            {
                "value": "grammar_correct",
                "label": "📝 Grammar & Spelling Correct",
                "description": "No grammatical or spelling errors found",
                "color": "#059669"
            },
            {
                "value": "facts_accurate",
                "label": "✅ Facts Verified",
                "description": "All factual claims have been verified",
                "color": "#0891b2"
            },
            {
                "value": "sources_cited",
                "label": "📚 Sources Properly Cited",
                "description": "All sources are properly attributed",
                "color": "#7c3aed"
            },
            {
                "value": "formatting_consistent",
                "label": "🎨 Formatting Consistent",
                "description": "Follows style guide and formatting standards",
                "color": "#2563eb"
            },
            {
                "value": "images_optimized",
                "label": "🖼️ Images Optimized",
                "description": "Images are properly sized and compressed",
                "color": "#16a34a"
            },
            {
                "value": "seo_compliant",
                "label": "🔍 SEO Best Practices",
                "description": "Follows SEO guidelines and best practices",
                "color": "#ea580c"
            },
            {
                "value": "links_functional",
                "label": "🔗 All Links Working",
                "description": "All hyperlinks have been tested and work",
                "color": "#8b5cf6"
            },
            {
                "value": "mobile_responsive",
                "label": "📱 Mobile Responsive",
                "description": "Content displays correctly on mobile devices",
                "color": "#f59e0b"
            }
        ],
        "min_selections": 0,
        "max_selections": 8,
        "required": False
    }
}

3. Feature Request Analysis

feature_analysis_config = {
    "response_type": "multi_select",
    "response_config": {
        "options": [
            {
                "value": "high_user_demand",
                "label": "📈 High User Demand",
                "description": "Feature is frequently requested by users",
                "color": "#dc2626"
            },
            {
                "value": "strategic_value",
                "label": "🎯 Strategic Business Value", 
                "description": "Aligns with key business objectives",
                "color": "#059669"
            },
            {
                "value": "technical_feasible",
                "label": "⚙️ Technically Feasible",
                "description": "Can be implemented with current technology",
                "color": "#3b82f6"
            },
            {
                "value": "resource_available",
                "label": "👥 Resources Available",
                "description": "Team has capacity to implement",
                "color": "#f59e0b"
            },
            {
                "value": "competitive_advantage",
                "label": "🚀 Competitive Advantage",
                "description": "Would differentiate us from competitors",
                "color": "#8b5cf6"
            },
            {
                "value": "low_maintenance",
                "label": "🔧 Low Maintenance",
                "description": "Won't require significant ongoing maintenance",
                "color": "#16a34a"
            },
            {
                "value": "security_compliant",
                "label": "🔒 Security Compliant",
                "description": "Meets security and compliance requirements",
                "color": "#ea580c"
            },
            {
                "value": "scalability_ready",
                "label": "📊 Scalability Ready",
                "description": "Can handle expected growth and usage",
                "color": "#0891b2"
            }
        ],
        "min_selections": 1,
        "max_selections": 8,
        "required": True
    }
}

Validation and Error Handling

Automatic Validation

The mobile app automatically validates multi select responses:
  • Option validation: Ensures all selected values exist in the options array
  • Selection limits: Enforces min_selections and max_selections constraints
  • Required validation: Prevents submission when required=true and no selections made
  • Duplicate prevention: Prevents selecting the same option multiple times

Processing Validation

Your application should validate received responses:
def validate_multi_select_response(response_data, response_config):
    """Validate multi select response against configuration"""
    
    # Check response structure
    if not isinstance(response_data, dict):
        return False, "Response must be an object"
    
    if "selected_values" not in response_data:
        return False, "Missing selected_values field"
    
    selected_values = response_data["selected_values"]
    
    # Validate it's an array
    if not isinstance(selected_values, list):
        return False, "selected_values must be an array"
    
    # Validate all values exist in options
    valid_values = [opt["value"] for opt in response_config["options"]]
    invalid_values = [val for val in selected_values if val not in valid_values]
    
    if invalid_values:
        return False, f"Invalid selections: {invalid_values}"
    
    # Check selection limits
    min_selections = response_config.get("min_selections", 0)
    max_selections = response_config.get("max_selections", len(valid_values))
    
    if len(selected_values) < min_selections:
        return False, f"Must select at least {min_selections} options"
    
    if len(selected_values) > max_selections:
        return False, f"Cannot select more than {max_selections} options"
    
    # Check required
    if response_config.get("required", False) and len(selected_values) == 0:
        return False, "At least one selection is required"
    
    # Check for duplicates
    if len(selected_values) != len(set(selected_values)):
        return False, "Duplicate selections not allowed"
    
    return True, "Valid"

# Usage
is_valid, error_message = validate_multi_select_response(
    response_data={
        "selected_values": ["spam", "misleading_claims"],
        "selected_labels": ["🚫 Spam Content", "⚠️ Misleading Claims"]
    },
    response_config={
        "options": [...],
        "min_selections": 1,
        "max_selections": 5,
        "required": True
    }
)

Best Practices

Option Design

Processing Best Practices

Common Patterns

Issue Escalation Matrix

# Escalate based on selection combinations
escalation_rules = {
    ("security_threat", "customer_data"): "immediate_security_team",
    ("billing_error", "high_value_customer"): "senior_billing_specialist",
    ("technical_bug", "production_system"): "engineering_lead", 
    ("content_violation", "repeat_offender"): "policy_enforcement_team"
}

def check_escalation_needed(selected_values):
    for combination, escalation_target in escalation_rules.items():
        if all(item in selected_values for item in combination):
            return escalation_target
    return None

Quality Scoring System

# Score content quality based on passed/failed criteria
def calculate_quality_score(selected_criteria, all_possible_criteria):
    # Basic completion percentage
    completion_rate = len(selected_criteria) / len(all_possible_criteria)
    
    # Weight critical criteria more heavily
    critical_criteria = ["security_compliant", "legally_compliant", "factually_accurate"]
    critical_passed = len([c for c in selected_criteria if c in critical_criteria])
    critical_total = len([c for c in all_possible_criteria if c in critical_criteria])
    
    if critical_total > 0:
        critical_rate = critical_passed / critical_total
        # Heavily weight critical criteria (70% of score)
        final_score = (0.7 * critical_rate) + (0.3 * completion_rate)
    else:
        final_score = completion_rate
    
    return min(final_score, 1.0)  # Cap at 1.0

Next Steps