We have a REST API as part of which we provide the client with several APIs to draw analytic reports. Some very large queries can take 5 to 10 minutes to complete and can return responses in the 50mb to 150mb range. 
At the moment, the client is just expected to wait for the response. We are not sure if this is really the best practice or if such complex/large queries & responses should be dealt with in another manner. Any advice on current best practices would be appreciated please?
Note: The API will be called by automated processes building large reports, so we are not sure if standard pagination is efficient or desirable.
If you need to process a long running task, from client point of view it is always better to process it asynchronously as follows. 
A client sends a POST request, the server creates a new resource (or can start immediate background processing) and returns HTTP 202 Accepted with a representation of the task (e.g. status, start time, expected end time and the like) along with the task URL in Content-Location header so that the client can track it.
The client can send a GET request to the specified URL to get the status. Server can return following responses.
Not done yet
Server returns HTTP 200 OK along with the task resource so that client can check status.
Done
Server returns HTTP 303 See Other and a Location header with the URL of a resource that shows the task results.
Error
Server returns HTTP 200 OK with the task resource describing the error
API Responses with large result sets