```python
from typing import List, Tuple

def run_reservoir(capacity: int, start: int, ticks: List[Tuple[int, int]]) -> dict:
    if not (isinstance(capacity, int) and capacity > 0):
        raise ValueError("Capacity must be a positive integer")
    if not (isinstance(start, int) and 0 <= start <= capacity):
        raise ValueError("Starting level must be an integer from 0 to the capacity")
    if not all(isinstance(tick, tuple) and len(tick) == 2 and all(isinstance(val, int) and val >= 0 for val in tick) for tick in ticks):
        raise ValueError("All ticks must be two-item tuples with non-negative integers")

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

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

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