Single Select Responses

Single select responses allow reviewers to choose exactly one option from a predefined list, making them perfect for clear decision workflows, approval processes, and structured categorization where mutual exclusivity is important.

When to Use Single Select

Single select responses are ideal for:

Approval Workflows

Simple approve/reject decisions, or approval with conditions like “Approve”, “Reject”, “Needs Changes”

Content Classification

Categorizing content into mutually exclusive categories like content type, priority level, or department

Quality Assessment

Rating content quality with discrete levels like “Excellent”, “Good”, “Fair”, “Poor”

Status Assignment

Setting request status, priority levels, or routing decisions where only one choice makes sense

Configuration Options

Single select responses require an options array and support visual customization:

Required Parameters

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

Optional Parameters

required
boolean
default:"false"
Whether a selection is mandatory for completion

Implementation Examples

Basic Approval Workflow

Simple approve/reject decision with visual indicators:
request_data = {
    "processing_type": "time-sensitive",
    "type": "markdown",
    "priority": "high", 
    "request_text": "Please review this user comment for community guideline compliance:\n\n'This product is amazing! I've been using it for 3 months and it completely changed my workflow. Highly recommend to anyone looking to improve productivity!'",
    "response_type": "single_select",
    "response_config": {
        "options": [
            {
                "value": "approve",
                "label": "✅ Approve Content",
                "description": "Content follows all community guidelines", 
                "color": "#22c55e"
            },
            {
                "value": "reject",
                "label": "❌ Reject Content",
                "description": "Content violates community policies",
                "color": "#ef4444"
            },
            {
                "value": "escalate", 
                "label": "🚨 Escalate for Review",
                "description": "Unclear case requiring senior reviewer",
                "color": "#8b5cf6"
            }
        ],
        "required": True
    },
    "default_response": "reject",
    "timeout_seconds": 1800,
    "platform": "api"
}

Content Classification

Categorizing content into specific types:
# Content categorization for routing
request_data = {
    "processing_type": "deferred",
    "type": "markdown", 
    "priority": "medium",
    "request_text": "Please categorize this customer inquiry:\n\n'Hi, I'm having trouble with my recent order #12345. The item was supposed to arrive yesterday but I haven't received it yet. Can you help track it down?'",
    "response_type": "single_select",
    "response_config": {
        "options": [
            {
                "value": "shipping_inquiry",
                "label": "📦 Shipping & Delivery",
                "description": "Questions about order status, shipping, or delivery",
                "color": "#3b82f6"
            },
            {
                "value": "product_support",
                "label": "🛠️ Product Support",
                "description": "Technical issues or questions about using products",
                "color": "#f59e0b"
            },
            {
                "value": "billing_payment", 
                "label": "💳 Billing & Payment",
                "description": "Payment issues, refunds, or billing questions",
                "color": "#10b981"
            },
            {
                "value": "returns_exchanges",
                "label": "🔄 Returns & Exchanges", 
                "description": "Returning items or requesting exchanges",
                "color": "#8b5cf6"
            },
            {
                "value": "general_inquiry",
                "label": "📞 General Inquiry",
                "description": "Other questions not fitting specific categories",
                "color": "#6b7280"
            }
        ],
        "required": True
    },
    "default_response": "general_inquiry",
    "timeout_seconds": 7200,
    "platform": "api"
}

Quality Assessment

Rating content quality with discrete levels:
# Content quality evaluation
request_data = {
    "processing_type": "time-sensitive",
    "type": "markdown",
    "priority": "medium",
    "request_text": "Please evaluate the quality of this AI-generated article:\n\n[Article content would be included here...]\n\nFocus on accuracy, readability, and usefulness for our target audience.",
    "response_type": "single_select", 
    "response_config": {
        "options": [
            {
                "value": "excellent",
                "label": "⭐ Excellent Quality",
                "description": "Publish immediately - exceptional content",
                "color": "#059669"
            },
            {
                "value": "good",
                "label": "✨ Good Quality", 
                "description": "Publish with minor edits - solid content",
                "color": "#22c55e"
            },
            {
                "value": "fair",
                "label": "📝 Fair Quality",
                "description": "Needs revision before publishing",
                "color": "#f59e0b" 
            },
            {
                "value": "poor",
                "label": "❌ Poor Quality",
                "description": "Major issues - recommend rewrite",
                "color": "#ef4444"
            },
            {
                "value": "unusable",
                "label": "🚫 Unusable",
                "description": "Content not suitable for publication",
                "color": "#dc2626"
            }
        ],
        "required": True
    },
    "default_response": "fair",
    "timeout_seconds": 3600,
    "platform": "api"
}

Response Format

When a reviewer selects an option, you’ll receive both the internal value and the display label:
{
  "response_data": {
    "selected_value": "approve",
    "selected_label": "✅ Approve Content"
  }
}

Use Case Examples

1. Content Moderation

moderation_config = {
    "response_type": "single_select",
    "response_config": {
        "options": [
            {
                "value": "approve",
                "label": "✅ Approve",
                "description": "Content meets community guidelines",
                "color": "#22c55e"
            },
            {
                "value": "approve_with_warning",
                "label": "⚠️ Approve with Warning", 
                "description": "Borderline content - warn user",
                "color": "#f59e0b"
            },
            {
                "value": "reject_minor",
                "label": "❌ Reject - Minor Violation",
                "description": "Minor policy violation - remove content",
                "color": "#f97316"
            },
            {
                "value": "reject_major",
                "label": "🚨 Reject - Major Violation",
                "description": "Serious violation - remove and warn user",
                "color": "#ef4444"
            },
            {
                "value": "reject_ban",
                "label": "🛑 Reject - Ban User", 
                "description": "Severe violation - ban user account",
                "color": "#dc2626"
            }
        ],
        "required": True
    }
}

2. Support Ticket Routing

ticket_routing_config = {
    "response_type": "single_select",
    "response_config": {
        "options": [
            {
                "value": "technical_support",
                "label": "🔧 Technical Support",
                "description": "Route to engineering team",
                "color": "#3b82f6"
            },
            {
                "value": "billing_support", 
                "label": "💰 Billing Support",
                "description": "Route to finance team",
                "color": "#10b981"
            },
            {
                "value": "customer_success",
                "label": "🤝 Customer Success",
                "description": "Route to account management",
                "color": "#8b5cf6"
            },
            {
                "value": "sales_inquiry",
                "label": "💼 Sales Inquiry", 
                "description": "Route to sales team",
                "color": "#f59e0b"
            },
            {
                "value": "escalation",
                "label": "🚨 Executive Escalation",
                "description": "Route to leadership team",
                "color": "#ef4444"
            }
        ],
        "required": True
    }
}

3. Document Approval Workflow

document_approval_config = {
    "response_type": "single_select", 
    "response_config": {
        "options": [
            {
                "value": "approved",
                "label": "✅ Approved for Publication",
                "description": "Document meets all requirements",
                "color": "#22c55e"
            },
            {
                "value": "approved_with_changes",
                "label": "📝 Approved with Minor Changes",
                "description": "Approve after addressing small issues",
                "color": "#84cc16"
            },
            {
                "value": "needs_revision", 
                "label": "🔄 Needs Revision",
                "description": "Significant changes required before approval",
                "color": "#f59e0b"
            },
            {
                "value": "needs_legal_review",
                "label": "⚖️ Needs Legal Review",
                "description": "Requires legal department approval",
                "color": "#8b5cf6"
            },
            {
                "value": "rejected",
                "label": "❌ Rejected",
                "description": "Document does not meet standards",
                "color": "#ef4444"
            }
        ],
        "required": True
    }
}

Validation and Error Handling

Automatic Validation

The mobile app automatically validates single select responses:
  • Option validation: Ensures selected value exists in the options array
  • Required validation: Prevents submission when required=true and no selection made
  • Single selection: Enforces exactly one choice (radio button behavior)

Processing Validation

Your application should validate received responses:
def validate_single_select_response(response_data, response_config):
    """Validate single select response against configuration"""
    
    # Check response structure
    if not isinstance(response_data, dict):
        return False, "Response must be an object"
    
    if "selected_value" not in response_data:
        return False, "Missing selected_value field"
    
    # Validate selected value exists in options
    valid_values = [opt["value"] for opt in response_config["options"]]
    selected = response_data["selected_value"]
    
    if selected not in valid_values:
        return False, f"Invalid selection: {selected}"
    
    # Check required
    if response_config.get("required", False) and not selected:
        return False, "Selection is required"
    
    return True, "Valid"

# Usage
is_valid, error_message = validate_single_select_response(
    response_data={
        "selected_value": "approve",
        "selected_label": "✅ Approve Content"
    },
    response_config={
        "options": [...],
        "required": True
    }
)

Best Practices

Option Design

Processing Best Practices

Common Patterns

Progressive Approval Workflow

# Multi-stage approval with escalation
approval_stages = {
    "initial_review": {
        "options": ["approve", "needs_changes", "escalate_to_senior"]
    },
    "senior_review": {
        "options": ["final_approval", "send_back_for_revision", "escalate_to_executive"] 
    },
    "executive_review": {
        "options": ["executive_approval", "reject_with_explanation"]
    }
}

Severity-Based Processing

# Handle different severity levels appropriately
severity_handling = {
    "low": {"priority": "normal", "sla_hours": 24},
    "medium": {"priority": "high", "sla_hours": 8}, 
    "high": {"priority": "urgent", "sla_hours": 2},
    "critical": {"priority": "immediate", "sla_hours": 1}
}

Next Steps