Quando uso uma API, como cliente, tenho que lidar com casos de "sucesso" diferentes de casos de "erro"; Eu não tenho escolha lá. Portanto, você deve retornar um erro em situações que o cliente deseja tratar de maneira diferente e êxito em situações que o cliente deseja tratar da mesma forma.
Se eu fizer uma consulta que, em teoria, possa retornar qualquer número de resultados, zero, um, duzentos e assim por diante, você deverá retornar "sucesso" sempre que a API fornecer a lista completa de todos os resultados. E, possivelmente, nos casos em que existem muitos resultados, você retornou uma lista parcial de resultados para evitar um tamanho excessivo e existe uma maneira acordada de como eu obteria os outros resultados. Isso porque, como cliente, muitas vezes eu quero lidar com o caso de zero resultado, como o caso de mais resultados. Eu posso tratá-lo de maneira diferente, mas não quero ser forçado.
É diferente no caso em que procuro um valor. Espero exatamente um resultado, o valor que estou procurando. E preciso desse resultado para continuar o que quero fazer de maneira significativa. Aqui é muito mais aceitável retornar um status 404 para o caso em que nenhum valor existe, porque eu preciso lidar com esse caso de maneira diferente.
Resumo: se o cliente espera qualquer número de resultados, de zero a números grandes, retorne "êxito" se todos os resultados forem entregues, mesmo que o número seja zero. Se o cliente espera exatamente um resultado, retorne êxito se o resultado for encontrado e um erro se o resultado não for encontrado.