Start with evidence.
Before changing an API, understand what a request is doing. Which database queries run? How much data comes back? Which external services does it wait for?
Measurements make the next step clearer. A small, targeted change is easier to assess than several optimizations introduced together.
Pay attention to related data.
Repeated database calls inside a loop can become expensive as a dataset grows. In Django, select_related and prefetch_related can help retrieve related records more efficiently. Choose the approach that matches the relationships and verify the query behaviour.
Return what the caller needs.
Paginate long lists. Keep response shapes predictable. Review which fields are necessary and which are simply being returned because they are available.
Make improvement repeatable.
Keep a representative request and dataset for checking each change. Measure again after the change, and keep the simpler solution when the extra complexity has no meaningful benefit.
The Django database optimization guide is a useful reference for profiling and query decisions.