Invoicing - calling multiple pages of Api and concatinating the results
When you have an assumption of getting a mix of return one or more values. You need to favor collection over single value return; because treating it as a collection would make things easier to deal with. 

So, you can get rid of GetAllInvoices and adjust GetAllInvoicesAsync to something like this : 

public async Task&lt;IEnumerable&lt;Invoice&gt;&gt; GetAllInvoicesAsync()
{
    const string endPoint = @"foo/{0}/invoices?pageNum={1}&amp;itemsPerPage={2}";
    const int itemsPerPage = xxx;
    int pageNumber = 1; 
    int iterationCount = 0;

    var tasks = new List&lt;Task&lt;InvoiceCollection&gt;&gt;();

    var isFirstRound = true;

    do
    {   
        var response = await _apiClient.GetAsync&lt;InvoiceCollection&gt;(string.Format(endPoint, _apiClient.OrgId, pageNumber, itemsPerPage));

        if(isFirstRound) 
        { 
            iterationCount = response?.TotalCount &lt;= itemsPerPage ? response?.TotalCount : (int) Math.Ceiling(totalPageItems / (double)itemsPerPage);
            isFirstRound = false;
        }

        tasks.Add(response);

        pageNumber++;
    } 
    while(pageNumber &lt;= iterationCount)

    var invoiceResponseList = new List&lt;InvoiceCollection&gt;(await Task.WhenAll(tasks));

    var invoiceCollection = invoiceResponseList.SelectMany(i =&gt; i.Invoices ?? Enumerable.Empty&lt;Invoice&gt;());

    return invoiceCollection?.Invoices; 
}