We study a general version of the problem of online learning under binary feedback: there is a hidden function $f : \mathcal{X} \rightarrow \mathcal{Y}$ in a certain hypothesis class $\mathcal{H}$. A learner is given adversarially chosen inputs (contexts) $x_t \in \mathcal{X}$ and is asked to submit a guess $y_t \in \mathcal{Y}$ for the value $f(x_t)$. Upon guessing the learner incurs a certain loss $L(y_t, f(x_t))$ and learns whether $y_t \leq f(x_t)$ or $y_t > f(x_t)$. The special case where $\mathcal{H}$ is the class of linear functions over the unit ball has been studied in a series of papers. We both generalize and improve these results. We provide a $O(d^2)$ regret bound where $d$ is the covering dimension of the hypothesis class. The algorithms are based on a novel technique which we call Steiner potential since in the linear case it reduces to controlling the value of the Steiner polynomial of a convex region at various scales. We also show that this new technique provides optimal regret (up to log factors) in the linear case (i.e. the original contextual search problem), improving the previously known bound of $O(d^4)$ to $O(d \log d)$. Finally, we extend these results to a noisy feedback model, where each round our feedback is flipped with fixed probability $p < 1/2$.