- If a main server failed, but the failover server worked, you'd likely not even tell the user that there is a problem.
- If your endpoint is supposed to find corroborating data from many external services, and one of those was not working but the available sources still corroborated the data, or you'd probably only mention in passing that "service X could not be reachedreached", but the request itself and thus isits status code shouldn't indicate an error...
- ...unless there is an explicit requirement in your software specs that the only way for a request to be considered successful is when all sources can corroborate it. Now, any absence of any external service will cause a negative HTTP status code to be returned. You might still return the incomplete data that you did receive (just to be informative), but the request itself was not completely successful.
The main idea here is to ask yourself what you want the sender of that request to do. If you want to make them aware of an issue, you return an error code. If you want them to continue on as planned, then you return a success code.
Note the difference between a failure in the backend and a failed request! For example, our platform has a health endpoint that you can send a request to, and it will tell you if all database servers and external services are working. When they are not all available, the health endpoint returns a bad health report but with status code 200, because the request for health itself succeeded, regardless of the system being in bad health.
However, if the config file which contains the list of databases/services is missing, the endpoint does return a 500 because it cannot perform the health check, and therefore it cannot do what you asked it to do.
The status code does not indicate the content of the response, it only indicates whether the request was properly handled in the way the requester expected it to.
"it was not honored by the API" implies to me that the backend considers this a well-formed but "dishonorable" request that the backend actively refuses to engage in, therefore suggesting the error code belongs to the 4xx range.