Start here. This is the direct spoken answer to practice first.
Why this question matters
What is cached matters as much as where it is cached. Caching the wrong shape creates coupling and hard-to-debug stale behavior.
I would cache an API response or read model when the expensive part is building that exact response and the same shape is reused often. That can avoid repeated joins, projection, and serialization work. I would be more careful caching domain objects because they may contain fields the API does not need, private data, navigation graphs, or behavior that does not survive serialization cleanly.