```python
def run_reservoir(capacity: int, start: int, ticks: list) -> dict:
    if not isinstance(capacity, int) or capacity <= 0:
        raise ValueError("Capacity must be a positive integer.")
    
    if not isinstance(start, int) or not (0 <= start <= capacity):
        raise ValueError("Starting level must be an integer between 0 and the capacity.")
    
    if not all(isinstance(tick, list) and len(tick) == 2 for tick in ticks):
        raise ValueError("Each tick must be a two-item pair.")
    
    for inflow, demand in ticks:
        if not isinstance(inflow, int) or not isinstance(demand, int) or inflow < 0 or demand < 0:
            raise ValueError("Inflow and demand must be non-negative integers.")
    
    level = start
    spilled = 0
    shortfall = 0
    served = 0
    
    for inflow, demand in ticks:
        level += inflow
        if level > capacity:
            spilled += level - capacity
            level = capacity
        
        if level >= demand:
            served += demand
            level -= demand
        else:
            shortfall += demand - level
            level = 0
    
    return {
        "level": level,
        "spilled": spilled,
        "shortfall": shortfall,
        "served": served
    }
```