(pageSize as number, oldestDate as date, continuationToken as number) => let // Add continuationToken only when it's not 0 since the first page does not need one. BaseQueryParams = [ statusFilter = "active", #"$top" = Number.ToText(pageSize), #"api-version" = "6.0" ], QueryParams = if (continuationToken=0) then BaseQueryParams else Record.AddField(BaseQueryParams, "continuationToken", Number.ToText(continuationToken)), // Invoke the API to retrieve info about releases WebResponse = Web.Contents( "https://vsrm.dev.azure.com/SAMPLE/SAMPLE/_apis", [ RelativePath="/release/releases", Query=QueryParams, Headers=[Authorization="Basic " & ADO_token] ] ), // Convert the response to a proper table JsonDoc = Json.Document(WebResponse), #"Converted to Table" = Table.FromList(JsonDoc[value], Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded release" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"id", "name", "deploymentStatus", "createdOn","releaseDefinition", "url"}, {"id", "name", "deploymentStatus", "createdOn", "releaseDefinition", "release.url"}), #"Expanded releaseDefinition" = Table.ExpandRecordColumn(#"Expanded release", "releaseDefinition", {"id", "name", "path", "url"}, {"releaseDefinition.id", "releaseDefinition.name", "releaseDefinition.path", "releaseDefinition.url"}), AllData = Table.TransformColumnTypes(#"Expanded releaseDefinition",{{"id", Int64.Type}, {"name", type text}, {"createdOn", type datetime}, {"releaseDefinition.id", Int64.Type}, {"releaseDefinition.name", type text}, {"releaseDefinition.path", type text}, {"releaseDefinition.url", type text}, {"release.url", type text}}), // Remove data that is too old. By doing so, we also make the response smaller. // Returning less records than the maximum page size is also the trigger to // set IsLastPage to true and stop retrieving data. Data = Table.SelectRows(AllData, each Date.From([createdOn]) >= oldestDate), // Check if last page is NumberOfRecordsRetrieved = Table.RowCount(Data), IsLastPage=(NumberOfRecordsRetrieved < pageSize), // Compose the result Result = Record.FromList( { IsLastPage, [ Count=NumberOfRecordsRetrieved, StartIndex=continuationToken, LastId=Table.Min(Data,"id")[id], // Since it is sorted Descending, the last item has the lowest id. Content=Data ] }, type [IsLastPage = logical, Page = record] ) in Result