Monitor performance

Monitor the performance of your site and services through reports. Each report returns data based on the time interval you set.

📘

Support for specific intervals, filters, and metrics may vary by report type.

List all report types

To get a list of available report types, use the Get-ReportType command. It uses Reporting v2 API.

Get-ReportType
reportName    : API usage report data
description   : Provides requests and volume for API traffic.
reportLink    : /reporting-api/v2/reports/common/apis/usage
status        : PUBLISHED
ProductFamily : common
ReportingArea : apis
Report        : usage

reportName    : CDN emissions report data
description   : Provides CDN traffic hits, volume and calculated carbon emissions data.
reportLink    : /reporting-api/v2/reports/delivery/traffic/emissions
status        : PUBLISHED
ProductFamily : delivery
ReportingArea : traffic
Report        : emissions
...

To see all report types with their metadata, run the Get-LegacyReportType command. It uses Reporting v1 API.

Get-LegacyReportType
name                : urlhits-by-time
description         : Returns URL traffic data over time.
businessObjectName  : cpcode
version             : 1
status              : PUBLISHED
deprecated          : False
internalOnly        : False
timeBased           : True
supportsPagination  : False
outputType          : FLAT
requiredProducts    : {Basic Traffic Reports}
requiredRoles       : {Reports - All privileges , Reports - View only, OTA App User}
available           : True
metrics             : {@{name=allEdgeHitsPerSecond; description=The rate of hits from Akamai to the end user.; label=Edge Hits/Sec; unit=COUNT_PER_SECOND; summaryStatistic=False}, @{name=allEdgeHitsPerSecondMax; description=The highest rate of hits from Akamai to the end user.; label=Edge Hits/Sec Maximum; unit=COUNT_PER_SECOND; summaryStatistic=True}, @{name=allEdgeHitsPerSecondMin; description=The lowest rate of hits from Akamai to the end user.; label=EdgeHits/Sec Minimum; unit=COUNT_PER_SECOND; summaryStatistic=True}, @{name=allEdgeHitsSlope; description=Represents the overall change in the number of hits from Akamai to the end user, a positive number if increasing or a negative number if decreasing.; label=Edge Hits Slope; unit=COUNT; summaryStatistic=True}…}
groupOutlyingValues : @{enabled=False}
groupBy             : {date_id}
filters             : {@{name=url_end_with; type=string; description=URL ends with the specified string.; required=False}, @{name=url_not_contain; type=string; description=URL 
does not contain the specified string.; required=False}, @{name=url_match; type=string; description=URL matches the specified string.; required=False}, @{name=url_not_start_with; type=string; description=URL does not start with the specified string.; required=False}…}
intervals           : {MONTH, WEEK, DAY}
dataRetentionDays   : 92
links               : {@{rel=self; href=/reporting-api/v1/reports/urlhits-by-time/versions/1}, @{rel=versions; href=/reporting-api/v1/reports/urlhits-by-time/versions}, @{rel=all-reports; href=/reporting-api/v1/reports}, @{rel=execute-report; href=/reporting-api/v1/reports/urlhits-by-time/versions/1/report-data}}

name                : urlresponses-by-time
description         : Returns URL data by response class over time.
businessObjectName  : cpcode
version             : 1
status              : PUBLISHED
deprecated          : False
internalOnly        : False
timeBased           : True
supportsPagination  : False
outputType          : FLAT
requiredProducts    : {Basic Traffic Reports}
requiredRoles       : {Reports - All privileges, Reports - View only, OTA App User}
available           : True
metrics             : {@{name=0XXEdgeHitsMax; description=The highest number of hits from Akamai to the end user returning 0XX responses.; label=Edge Hits/Sec Maximum; unit=COUNT_PER_SECOND; summaryStatistic=True}, @{name=0XXEdgeHitsMin; description=The lowest number of hits from Akamai to the end user returning 0XX responses.; label=Edge Hits/Sec Minimum; unit=COUNT_PER_SECOND; summaryStatistic=True}, @{name=0XXEdgeHitsPerSecond; description=The rate of hits from 
Akamai to the end user returning 0XX responses.; label=Edge Hits/Sec; unit=COUNT_PER_SECOND; summaryStatistic=False}, @{name=0XXEdgeHitsSlope; description=Represents the overall change in the number of URLs returning 0XX responses, a positive number if increasing or a negative number if 
decreasing.; label=Edge Hits Slope; unit=COUNT; summaryStatistic=True}…}
groupOutlyingValues : @{enabled=False}
groupBy             : {date_id}
filters             : {@{name=url_end_with; type=string; description=URL ends with the specified string. ; required=False}, @{name=url_not_contain; type=string; description=URL does not contain the specified string.; required=False}, @{name=url_match; type=string; description=URL matches the specified string.; required=False}, @{name=url_not_start_with; type=string; description=URL does not start with the specified string.; required=False}…}
intervals           : {MONTH, WEEK, DAY}
dataRetentionDays   : 92
links               : {@{rel=self; href=/reporting-api/v1/reports/urlresponses-by-time/versions/1}, @{rel=versions; href=/reporting-api/v1/reports/urlresponses-by-time/versions}, @{rel=all-reports; href=/reporting-api/v1/reports}, @{rel=execute-report; href=/reporting-api/v1/reports/urlresponses-by-time/versions/1/report-data}}
...

Sort report list types

You can filter the report types with Get-ReportType (Reporting v2 API) by -ProductFamily and -ReportingArea or use a sort term.

Note: If you don't know which product families and reporting areas are available to you, run the Get-ReportProductFamily and Get-ReportingArea commands.

# Gets a list of all reports by a specified product family and reporting area
Get-ReportType -ProductFamily 'delivery' -ReportingArea 'ivm'

# Gets a sorted list of all report names with their product families and reporting areas
Get-ReportType | Sort-Object -Property reportName | Select-Object reportName, ProductFamily, ReportingArea

# Gets a sorted list of reports with "IVM" in the name
Get-ReportType | where reportName -Like *IVM* | Sort-Object -Property reportName | Select-Object reportName, ProductFamily, ReportingArea
# All reports by a specified product family and reporting area (truncated)
reportName    : IVM image traffic report data
description   : Provides traffic data for images configured to use Image and Video Manager.
reportLink    : /reporting-api/v2/reports/delivery/ivm/image-traffic
status        : PUBLISHED
ProductFamily : delivery
ReportingArea : ivm
Report        : image-traffic

reportName    : IVM image stats report data
description   : Provides policy stats data for images configured to use Image and Video Manager.
reportLink    : /reporting-api/v2/reports/delivery/ivm/image-policy-stats
status        : PUBLISHED
ProductFamily : delivery
ReportingArea : ivm
Report        : image-policy-stats
...

# All sorted report names with their product families and reporting areas (truncated)
reportName                         ProductFamily ReportingArea
----------                         ------------- -------------
API usage details report data      common        apis
API usage report data              common        apis
CDN emissions report data          delivery      traffic
CDN traffic report data            delivery      traffic
IVM image stats report data        delivery      ivm
IVM image traffic report data      delivery      ivm
Purge objects details report data  delivery      purge
Purge requests details report data delivery      purge

# All sorted reports with "IVM" in the name
reportName                    ProductFamily ReportingArea
----------                    ------------- -------------
IVM image stats report data   delivery      ivm
IVM image traffic report data delivery      ivm

The number of available reports returned with Get-LegacyReportType (Reporting v1 API) is large, and so is the total information returned for each report. To make the list of report types manageable, use a sort term, for example, name or version.

# Gets a running list of all report names and versions
Get-LegacyReportType | Sort-Object -Property name | Select-Object name, version

# Gets a list of reports with "today" in the name
Get-LegacyReportType | where name -Like *today* | Sort-Object -Property name | Select-Object name, version
# All report names and versions (truncated)
name                                 version
----                                 -------
actionstaken-by-cpcode                     1
actionstaken-by-time                       1
aic-by-time                                1
aic-by-time                                2
aic-by-time-test                           1
apirequests-by-agentfamily                 1
apirequests-by-endpoint                    1
apirequests-by-httpmethod                  1
apirequests-by-owner                       1
apirequests-internal-by-httpmethod         1
apiusage-by-time                           1
...

# All reports with "today" in the name
name                                 version
----                                 -------
todaytraffic-by-response                   1
todaytraffic-by-time                       1
todaytraffic-by-timeandresponseclass       1
todaytraffic-bytes-by-cpcode               1
todaytraffic-hits-by-cpcode                1

Get a specific type

To get details of a specific report type, specify the value for the -Report parameter along with the -ProductFamily and ReportingArea when running the Get-ReportType command (Reporting v2 API).

Note: For the -Report parameter, use the final segment of the reportLink value returned by Get-ReportType when getting all report types. For example, if the reportLink is /reporting-api/v2/reports/delivery/ivm/image-policy-stats, the value for the -Report is image-policy-stats.

Get-ReportType -ProductFamily 'delivery' -ReportingArea 'ivm' -Report 'image-policy-stats'
name                 : IVM image stats report data
description          : Provides policy stats data for images configured to use Image and Video Manager.
status               : PUBLISHED
metrics              : {@{name=hits; description=The number of received image hits.; type=LONG; filterable=True; mandatory=False}, @{name=bytes; description=The number of delivered 
                       bytes of image content.; type=LONG; filterable=True; mandatory=False}, @{name=hits200; description=The number of requests that returned successful responses.; 
                       type=LONG; filterable=True; mandatory=False}, @{name=bytes200; description=The volume of data served with successful responses.; type=LONG; filterable=True; 
                       mandatory=False}…}
dimensions           : {@{name=cpcode; description=Content provider (CP) code.; type=LONG; filterable=True; mandatory=False; filterType=TEXT; authorizable=True}, @{name=time1day; 
                       description=Datapoint timestamp for 1 day granularity.; type=LONG; filterable=True; mandatory=False; filterType=TEXT; authorizable=False}, @{name=token; 
                       description=The Image and Video Manager policy token for which you want data included.; type=STRING; filterable=True; mandatory=False; filterType=TEXT; 
                       authorizable=False}, @{name=tokenWithVersion; description=The Image and Video Manager policy token with the version for which you want data included.; 
                       type=STRING; filterable=True; mandatory=False; filterType=TEXT; authorizable=False}…}
predefinedTimeRanges : {LAST_1_DAY, LAST_1_WEEK, LAST_30_DAYS, LAST_90_DAYS}
defaults             : @{defaultTimeRange=; defaultMetrics=System.Object[]; defaultSortBys=System.Object[]}
limits               : @{maxDimensions=4; maxDateRangeInDays=90; maxRetentionInDays=90; inListFilterMaxValues=10000; textFilterMaxLength=100; dataPointsLimit=50000}
links                : {@{rel=self; href=/reporting-api/v2/reports/delivery/ivm/image-policy-stats; describedBy=/reporting-api/v2/reports/schema; allow=System.Object[]}, @{rel=data; 
                       href=/reporting-api/v2/reports/delivery/ivm/image-policy-stats/data; allow=System.Object[]}}

Reports fetched with Reporting v1 API have multiple versions to choose from. For example, the load-balancing-dns-traffic-property-all-datacenters-liveness report has four versions, all of which you can use. The versions denote changes to the report structure. If you're not sure which version to use, choose the latest version.

Get-LegacyReportType -Name urlhits-by-time -Version 1
name                : urlhits-by-time
description         : Returns URL traffic data over time.
businessObjectName  : cpcode
version             : 1
status              : PUBLISHED
deprecated          : False
internalOnly        : False
timeBased           : True
supportsPagination  : False
outputType          : FLAT
requiredProducts    : {Basic Traffic Reports}
requiredRoles       : {Reports - All privileges , Reports - View only, OTA App User}
available           : True
metrics             : {@{name=allEdgeHitsPerSecond; description=The rate of hits from Akamai to the end user.; label=Edge Hits/Sec; unit=COUNT_PER_SECOND; 
                      summaryStatistic=False}, @{name=allEdgeHitsPerSecondMax; description=The highest rate of hits from Akamai to the end user.; label=Edge Hits/Sec Maximum; 
                      unit=COUNT_PER_SECOND; summaryStatistic=True}, @{name=allEdgeHitsPerSecondMin; description=The lowest rate of hits from Akamai to the end user.; label=Edge 
                      Hits/Sec Minimum; unit=COUNT_PER_SECOND; summaryStatistic=True}, @{name=allEdgeHitsSlope; description=Represents the overall change in the number of hits 
                      from Akamai to the end user, a positive number if increasing or a negative number if decreasing.; label=Edge Hits Slope; unit=COUNT; summaryStatistic=True}…}
groupOutlyingValues : @{enabled=False}
groupBy             : {date_id}
filters             : {@{name=url_not_end_with; type=string; description=URL does not end with the specified string.; required=False}, @{name=delivery_type; type=enum; 
                      description=Distinguishes secure from non-secure traffic. Optional. No selection returns both secure and non-secure traffic.  ; values=System.Object[]; 
                      required=False}, @{name=url_contain; type=string; description=URL contains the specified string. ; required=False}, @{name=url_end_with; type=string; 
                      description=URL ends with the specified string. ; required=False}…}
intervals           : {MONTH, WEEK, DAY}
dataRetentionDays   : 92
links               : {@{rel=self; href=/reporting-api/v1/reports/urlhits-by-time/versions/1}, @{rel=versions; href=/reporting-api/v1/reports/urlhits-by-time/versions}, 
                      @{rel=all-reports; href=/reporting-api/v1/reports}, @{rel=execute-report; href=/reporting-api/v1/reports/urlhits-by-time/versions/1/report-data}}

Use filters and metrics

You can also reduce the output of most reports returned with Reporting v1 API using filters and metrics. Filters allow you to reduce the data by various conditions, such as IP version or response code. Metrics reduce the result to the metric(s) returned, such as allEdgeHitsPerSecondMax. You can see the filters and metrics in the response for a given report type. For example:

# Using filters
$Report = Get-LegacyReportType -Name urlhits-by-time -Version 1
$Report.filters

# Using metrics
$Report = Get-LegacyReportType -Name urlhits-by-time -Version 1
$Report.metrics
# Filters
name               type   description                                                                                                      required
----               ----   -----------                                                                                                      --------
url_not_end_with   string URL does not end with the specified string.                                                                         False
url_start_with     string URL starts with the specified string.                                                                               False
url_end_with       string URL ends with the specified string.                                                                                 False
delivery_type      enum   Distinguishes secure from non-secure traffic. Optional. No selection returns both secure and non-secure traffic.    False
url_not_contain    string URL does not contain the specified string.                                                                          False
url_not_match      string URL does not match the specified string.                                                                            False
url_not_start_with string URL does not start with the specified string.                                                                       False
url_match          string URL matches the specified string.                                                                                   False
url_exact_match    string URL is an exact match for the specified string.                                                                     False
url_contain        string URL contains the specified string.                                                                                  False

# Metrics
name             : allEdgeHitsPerSecond
description      : The rate of hits from Akamai to the end user.
label            : Edge Hits/Sec
unit             : COUNT_PER_SECOND
summaryStatistic : False

name             : allEdgeHitsPerSecondMax
description      : The highest rate of hits from Akamai to the end user.
label            : Edge Hits/Sec Maximum
unit             : COUNT_PER_SECOND
summaryStatistic : True

Metrics are also available for reports returned with Reporting v2 API.

$Report = Get-ReportType -ProductFamily 'delivery' -ReportingArea 'ivm' -Report 'image-policy-stats'
$Report.metrics
name        : hits
description : The number of received image hits.
type        : LONG
filterable  : True
mandatory   : False

name        : bytes
description : The number of delivered bytes of image content.
type        : LONG
filterable  : True
mandatory   : False

Get report data

There are two ways to get your report data: by creating a new one or getting an existing one.

Generate a report

Run the New-Report command (Reporting v2 API). This method doesn't cache results and is better for large data requests and non-repeating requests.

Optionally, pass the -Async switch parameter. This returns a query ID you can use to get the report any time with Get-Report. Omitting this parameter returns the report right now.

Note: If you don't know which product families and reporting areas are available to you, run the Get-ReportProductFamily and Get-ReportingArea commands.

$Report = New-Report -Report 'usage' -ProductFamily 'common' -ReportingArea 'apis' -Start "2026-03-28T00:00:00Z" -End "2026-04-27T00:00:00Z" -Async

Alternatively, use the New-LegacyReport command (Reporting v1 API), which is similar to New-Report, but accepts a bit different parameters. Optionally, you can also provide a report with given -Metrics or -Filters in the command.

$Report = New-LegacyReport -Name 'urlhits-by-time' -Version 1 -Start 2026-05-27T00:00:00Z -End 2026-05-29T00:00:00Z -Interval 'DAY' -ObjectIds 12345

Get a report

Use Get-Report (Reporting v2 API) to return available options for a report. Note that it can take a few minutes to actually get to the report if you've just run the New-Report command.

You need to pass a report name, product family, and reporting area, along with a query ID returned to you from the New-Report command.

Note: If you don't know which product families and reporting areas are available to you, run the Get-ReportProductFamily and Get-ReportingArea commands.

$Report = Get-Report -Report 'usage' -ProductFamily 'common' -ReportingArea 'apis' -QueryID $Report.QueryID

Get-LegacyReport (Reporting v1 API) uses a cacheable result and returns data for subsequent requests more quickly. This method has a query string max. If your query is long, use New-LegacyReport instead. Both commands use the same parameters.

$Report = Get-LegacyReport -Name 'urlhits-by-time' -Version 1 -Start 2026-05-27T00:00:00Z -End 2026-05-29T00:00:00Z -Interval 'DAY' -ObjectIds 12345

Parse results

Assign your report results to a variable and parse out the information you need to analyze your data.

  1. Printing the results of a report saved to $Report may not display all of the information contained within the variable. To see more information, pipe your results to Format-List or fl.

    $Report | fl
    data     : {@{endpoint=config-dns/2; requestsSum=3025636; requestsPercentage=53.3498703738414; bytesSum=1080925151243; bytesPercentage=79.5413296922291}, @{endpoint=appsec/1; requestsSum=747816; 
             requestsPercentage=13.1859505451034; bytesSum=5167106681; bytesPercentage=0.380228488157313}, @{endpoint=config-gtm/1; requestsSum=569048; requestsPercentage=10.0338034834639; bytesSum=228769938787; 
             bytesPercentage=16.8343433435726}, @{endpoint=identity-management/3; requestsSum=394910; requestsPercentage=6.96329542262642; bytesSum=622262684; bytesPercentage=0.0457900357358679}…}
    metadata : @{name=API usage report data; links=System.Object[]; rows=69; totalRows=69; requestTime=6/8/2026 2:06:41 PM; evictionTime=6/15/2026 2:07:02 PM}
  2. Export the results of your request to wherever you normally keep report data.

    $Report.data | Export-CSV results.csv