> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://akamai.ferndocs.com/edge-workers/api/edge-workers-api/reports/get-report/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://akamai.ferndocs.com/_mcp/server. # Get an EdgeWorker report GET https://{hostname}/edgeworkers/v1/reports/{reportId} View details for a specific EdgeWorker. Reference: https://akamai.ferndocs.com/edge-workers/api/edge-workers-api/reports/get-report ## Request ### Path parameters - `reportId` (string, required) ### Query parameters - `start` (datetime, required) — ISO 8601 timestamp indicating the start time of the EdgeWorker report. - `end` (datetime, required) — ISO 8601 timestamp indicating the end time of the EdgeWorker report. If not specified, the end time defaults to the current time. - `edgeWorker` (string, required) — Filter by EdgeWorker ID such as `42` or more specific version such as `42-1.0`. - `status` (enum, required) — __Enum__ Filter by the EdgeWorker status, either `success`, `genericError`, `unknownEdgeWorkerId`, `unimplementedEventHandler`, `runtimeError`, `executionError`, `timeoutError`, `resourceLimitHit`, `cpuTimeoutError`, `wallTimeoutError`, `initCpuTimeoutError`, or `initWallTimeoutError`. - Allowed values: `success`, `genericError`, `unknownEdgeWorkerId`, `unimplementedEventHandler`, `runtimeError`, `executionError`, `timeoutError`, `resourceLimitHit`, `cpuTimeoutError`, `wallTimeoutError`, `initCpuTimeoutError`, `initWallTimeoutError` - `eventHandler` (enum, optional) — __Enum__ Filter EdgeWorkers by the event that triggers them, either `onClientRequest`, `onOriginRequest`, `onOriginResponse`, `onClientResponse`, or `responseProvider`. - Allowed values: `onClientRequest`, `onOriginRequest`, `onOriginResponse`, `onClientResponse`, `responseProvider` - `accountSwitchKey` (string, optional) — For customers who manage more than one account, this [runs the operation from another account](https://techdocs.akamai.com/developer/docs/manage-many-accounts-with-one-api-client). The Identity and Access Management API provides a [list of available account switch keys](https://techdocs.akamai.com/iam-api/reference/get-client-account-switch-keys). ## Response ### 200 This section describes attributes of an EdgeWorker report. - `data` (ReportsReportIdGetResponsesContentApplicationJsonSchemaData, optional) — Object containing data points of the EdgeWorker report. - `description` (string, optional) — Description of the EdgeWorker report. - `end` (datetime, optional) — ISO 8601 timestamp indicating the end time of the EdgeWorker report. - `name` (string, optional) — Name of the EdgeWorker report. - `reportId` (integer, optional) — Unique identifier of the EdgeWorker report. - `start` (datetime, optional) — ISO 8601 timestamp indicating the start time of the EdgeWorker report. - `unavailable` (boolean, optional) — Boolean stating if the report is available or not. ## Types ### ReportsReportIdGetResponsesContentApplicationJsonSchemaData Object containing data points of the EdgeWorker report. ## Examples **Response** ```json { "data": [ { "data": { "init": [ { "edgeWorkerVersion": "0.8", "invocations": 1, "startDateTime": "2022-04-18T15:04:39Z", "initDuration": { "avg": 4.192, "fiftyPercentile": 1, "max": 4.192, "min": 4.192, "ninetyFivePercentile": 7, "ninetyNinePercentile": 20, "seventyFivePercentile": 3, "twentyFivePercentile": 0.5 } } ], "onClientRequest": [ { "edgeWorkerVersion": "1", "invocations": 3, "startDateTime": "2022-04-18T15:35:00Z", "execDuration": { "avg": 0.128, "fiftyPercentile": 1, "max": 0.217, "min": 0.077, "ninetyFivePercentile": 7, "ninetyNinePercentile": 10, "seventyFivePercentile": 3, "twentyFivePercentile": 0.1 } } ], "onClientResponse": [ { "edgeWorkerVersion": "1", "invocations": 3, "startDateTime": "2022-04-18T15:04:39Z", "execDuration": { "avg": 0.11, "fiftyPercentile": 1, "max": 0.16, "min": 0.071, "ninetyFivePercentile": 10, "ninetyNinePercentile": 20, "seventyFivePercentile": 3, "twentyFivePercentile": 0.1 } } ], "onOriginRequest": [ { "edgeWorkerVersion": "1", "invocations": 3, "startDateTime": "2022-04-18T15:04:39Z", "execDuration": { "avg": 0.138, "fiftyPercentile": 1, "max": 0.254, "min": 0.073, "ninetyFivePercentile": 7, "ninetyNinePercentile": 20, "seventyFivePercentile": 3, "twentyFivePercentile": 0.5 } } ], "onOriginResponse": [ { "edgeWorkerVersion": "1", "invocations": 3, "startDateTime": "2022-04-19T12:35:00Z", "execDuration": { "avg": 0.105, "fiftyPercentile": 1, "max": 0.175, "min": 0.069, "ninetyFivePercentile": 7, "ninetyNinePercentile": 7, "seventyFivePercentile": 1, "twentyFivePercentile": 0 } } ] }, "edgeWorkerId": 37017 } ], "description": "This report lists execution and initialization times with percentiles, grouped by EdgeWorker ID and event handler.", "end": "2022-04-19T15:04:39Z", "name": "Initialization and execution times by EdgeWorker ID and event handler", "reportId": 5, "start": "2022-04-18T15:04:39Z" } ``` **SDK Code** ```python import requests url = "https://{hostname}/edgeworkers/v1/reports/reportId" querystring = {"start":"{{start}}","end":"{{end}}","edgeWorker":"{{edgeWorker}}","status":"success","eventHandler":"onClientRequest","accountSwitchKey":"{{accountSwitchKey}}"} response = requests.get(url, params=querystring) print(response.json()) ``` ```javascript const url = 'https://{hostname}/edgeworkers/v1/reports/reportId?start=%7B%7Bstart%7D%7D&end=%7B%7Bend%7D%7D&edgeWorker=%7B%7BedgeWorker%7D%7D&status=success&eventHandler=onClientRequest&accountSwitchKey=%7B%7BaccountSwitchKey%7D%7D'; const options = {method: 'GET'}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "net/http" "io" ) func main() { url := "https://{hostname}/edgeworkers/v1/reports/reportId?start=%7B%7Bstart%7D%7D&end=%7B%7Bend%7D%7D&edgeWorker=%7B%7BedgeWorker%7D%7D&status=success&eventHandler=onClientRequest&accountSwitchKey=%7B%7BaccountSwitchKey%7D%7D" req, _ := http.NewRequest("GET", url, nil) res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://{hostname}/edgeworkers/v1/reports/reportId?start=%7B%7Bstart%7D%7D&end=%7B%7Bend%7D%7D&edgeWorker=%7B%7BedgeWorker%7D%7D&status=success&eventHandler=onClientRequest&accountSwitchKey=%7B%7BaccountSwitchKey%7D%7D") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://{hostname}/edgeworkers/v1/reports/reportId?start=%7B%7Bstart%7D%7D&end=%7B%7Bend%7D%7D&edgeWorker=%7B%7BedgeWorker%7D%7D&status=success&eventHandler=onClientRequest&accountSwitchKey=%7B%7BaccountSwitchKey%7D%7D") .asString(); ``` ```php request('GET', 'https://{hostname}/edgeworkers/v1/reports/reportId?start=%7B%7Bstart%7D%7D&end=%7B%7Bend%7D%7D&edgeWorker=%7B%7BedgeWorker%7D%7D&status=success&eventHandler=onClientRequest&accountSwitchKey=%7B%7BaccountSwitchKey%7D%7D'); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://{hostname}/edgeworkers/v1/reports/reportId?start=%7B%7Bstart%7D%7D&end=%7B%7Bend%7D%7D&edgeWorker=%7B%7BedgeWorker%7D%7D&status=success&eventHandler=onClientRequest&accountSwitchKey=%7B%7BaccountSwitchKey%7D%7D"); var request = new RestRequest(Method.GET); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let request = NSMutableURLRequest(url: NSURL(string: "https://{hostname}/edgeworkers/v1/reports/reportId?start=%7B%7Bstart%7D%7D&end=%7B%7Bend%7D%7D&edgeWorker=%7B%7BedgeWorker%7D%7D&status=success&eventHandler=onClientRequest&accountSwitchKey=%7B%7BaccountSwitchKey%7D%7D")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ```