Start here. This is the direct spoken answer to practice first.
Why this question matters
A timeout protects more than response time. It limits how long one dependency can hold request capacity, connections, and work that the caller may no longer need.
I would start with the response-time objective for the whole user request, then give each dependency a smaller timeout inside that budget. The API must leave time to map the result and return it, so a downstream call cannot use the caller's entire deadline. I would configure the HTTP, database, or SDK timeout explicitly and pass cancellation through supported operations. A timeout means the result was not observed in time; it does not prove that a remote side effect did not happen.