Thank you for using Coinbase forum, we are happy to help you.
It appears that the pagination is working correctly. The endpoint /v1/portfolios/${portfolioId}/transactions is using cursor pagination, which allows you to fetch additional results after the current page of results. To retrieve more results, subsequent requests should specify which direction to paginate based on the data previously returned. You can do this by adding the cursor=<next_cursor> parameter to your request.
If your initial request returns a pagination value with a non-null next_cursor, you should repeat the identical request again while adding a cursor=<next_cursor> query parameter to get the next page of results. Repeat until is next_cursor=‘’ to paginate through all the results.
There is definitely an issue with the has_next set to false. It should be set to true since there are other transactions with the cursor given by the API.