```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 start < 0 or start > capacity:
        raise ValueError("Start level must be an integer from 0 to capacity")
    if not all(isinstance(tick, list) and len(tick) == 2 for tick in ticks):
        raise ValueError("Ticks must be a list of two-item pairs")
    if not all(isinstance(inflow, int) and inflow >= 0 for inflow, _ in ticks):
        raise ValueError("Inflow must be a non-negative integer")
    if not all(isinstance(demand, int) and demand >= 0 for _, demand in ticks):
        raise ValueError("Demand must be a non-negative integer")

    level = start
    spilled = 0
    shortfall = 0
    served = 0

    for inflow, demand in ticks:
        level += inflow
        if level > capacity:
            spilled += level - capacity
            level = capacity
        served += min(level, demand)
        level -= min(level, demand)
        if level < demand:
            shortfall += demand - level

    return {"level": level, "spilled": spilled, "shortfall": shortfall, "served": served}
```